[{"data":1,"prerenderedAt":173024},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-03-cnn-ji-chu":3,"wiki-doc-nav":26},{"id":4,"title":5,"body":6,"description":17,"extension":18,"meta":19,"navigation":21,"path":22,"seo":23,"stem":24,"__hash__":25},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":8,"toc":13},"minimark",[9],[10,11,12],"p",{},"yolo模型还未补充",{"title":14,"searchDepth":15,"depth":15,"links":16},"",2,[],"深度学习学习","md",{"category":20},"深度学习",true,"\u002Fwiki\u002F2025-11-03-cnn",{"title":5,"description":17},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",[27,5145,6253,7673,10662,12013,13502,14591,23354,23367,23966,23992,24116,24357,24422,24440,24453,24500,24624,24793,24992,25172,25377,25513,25608,25645,25658,25968,26709,27417,27438,28458,30089,30240,30253,30265,30566,50378,50393,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":28,"title":29,"body":30,"description":14,"extension":18,"meta":5140,"navigation":21,"path":5141,"seo":5142,"stem":5143,"__hash__":5144},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":31,"toc":5112},[32,36,41,44,48,61,65,70,73,76,79,82,85,120,124,127,130,133,136,189,193,212,214,228,231,239,242,1105,1112,1129,1133,1224,1228,1234,1323,1327,1365,1369,1433,1437,1441,1448,1459,1463,1468,1472,1477,1481,1486,1490,1494,1499,1769,1774,1912,1917,2174,2177,2185,2189,2194,2297,2300,2606,2615,2716,2719,2722,2725,2728,2988,2993,3133,3136,3315,3318,3446,3449,3601,3605,3610,3613,3624,3632,3635,3742,3746,3750,3755,3805,3810,3815,3839,3844,3897,3900,3905,4082,4087,4372,4377,4774,4778,4783,4840,4845,4853,4856,4996,4999,5108],[33,34,29],"h1",{"id":35},"_1基础入门",[37,38,40],"h2",{"id":39},"_11注释","1.1注释",[10,42,43],{},"\u002F\u002F或者\u002F* *\u002F",[37,45,47],{"id":46},"_12命名","1.2命名",[49,50,51,55,58],"ol",{},[52,53,54],"li",{},"字母数字下划线",[52,56,57],{},"开头必须是字母或_",[52,59,60],{},"不能使用关键词",[37,62,64],{"id":63},"_13数据类型","1.3数据类型",[66,67,69],"h3",{"id":68},"_131整形","1.3.1整形",[10,71,72],{},"short 短整形 2",[10,74,75],{},"int 整形 4",[10,77,78],{},"long 长整形 win4 linux32位4 linux64位8",[10,80,81],{},"long long 长长整形 8",[10,83,84],{},"利用sizeof可以求数据类型占用的内存空间大小",[86,87,91],"pre",{"className":88,"code":89,"language":90,"meta":14,"style":14},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[92,93,94,113],"code",{"__ignoreMap":14},[95,96,99,103,107,110],"span",{"class":97,"line":98},"line",1,[95,100,102],{"class":101},"szBVR","sizeof",[95,104,106],{"class":105},"sVt8B","(",[95,108,109],{"class":101},"int",[95,111,112],{"class":105},")\n",[95,114,115,117],{"class":97,"line":15},[95,116,102],{"class":101},[95,118,119],{"class":105},"(num)\n",[66,121,123],{"id":122},"_132浮点型","1.3.2浮点型",[10,125,126],{},"float 单精度 4节 7位有效数字",[10,128,129],{},"double 双精度 8节 15-16有效数字",[10,131,132],{},"默认情况下，输出一个小数，会显示6位有效数字",[10,134,135],{},"注意点：",[86,137,139],{"className":88,"code":138,"language":90,"meta":14,"style":14},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[92,140,141,166],{"__ignoreMap":14},[95,142,143,146,149,152,156,159,162],{"class":97,"line":98},[95,144,145],{"class":101},"float",[95,147,148],{"class":105}," f1",[95,150,151],{"class":101},"=",[95,153,155],{"class":154},"sj4cs","3.14",[95,157,158],{"class":101},"f",[95,160,161],{"class":105},";",[95,163,165],{"class":164},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[95,167,168,170,173,175,178,181,184,186],{"class":97,"line":15},[95,169,145],{"class":101},[95,171,172],{"class":105}," f2",[95,174,151],{"class":101},[95,176,177],{"class":154},"3",[95,179,180],{"class":101},"e",[95,182,183],{"class":154},"2",[95,185,161],{"class":105},[95,187,188],{"class":164}," \u002F\u002F科学记数法\n",[66,190,192],{"id":191},"_133字符型","1.3.3字符型",[86,194,196],{"className":88,"code":195,"language":90,"meta":14,"style":14},"char ch='a'\n",[92,197,198],{"__ignoreMap":14},[95,199,200,203,206,208],{"class":97,"line":98},[95,201,202],{"class":101},"char",[95,204,205],{"class":105}," ch",[95,207,151],{"class":101},[95,209,211],{"class":210},"sZZnC","'a'\n",[10,213,135],{},[49,215,216,219,222,225],{},[52,217,218],{},"在显示字符型变量时，只能单引号，双引号x",[52,220,221],{},"单引号内只能一个字符，不能字符串",[52,223,224],{},"c和c++字符型变量只占用一个字符",[52,226,227],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[10,229,230],{},"ASCII码大致由以下两部分组成：",[49,232,233,236],{},[52,234,235],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[52,237,238],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[10,240,241],{},"ASCII码表格：",[243,244,245,289],"table",{},[246,247,248],"thead",{},[249,250,251,259,264,268,273,277,281,285],"tr",{},[252,253,254,258],"th",{},[255,256,257],"strong",{},"ASCII","值",[252,260,261],{},[255,262,263],{},"控制字符",[252,265,266,258],{},[255,267,257],{},[252,269,270],{},[255,271,272],{},"字符",[252,274,275,258],{},[255,276,257],{},[252,278,279],{},[255,280,272],{},[252,282,283,258],{},[255,284,257],{},[252,286,287],{},[255,288,272],{},[290,291,292,319,345,370,395,421,446,471,497,522,548,574,600,625,651,677,703,727,752,777,802,827,852,877,902,927,952,978,1003,1028,1053,1079],"tbody",{},[249,293,294,298,301,304,307,310,313,316],{},[295,296,297],"td",{},"0",[295,299,300],{},"NUT",[295,302,303],{},"32",[295,305,306],{},"(space)",[295,308,309],{},"64",[295,311,312],{},"@",[295,314,315],{},"96",[295,317,318],{},"、",[249,320,321,324,327,330,333,336,339,342],{},[295,322,323],{},"1",[295,325,326],{},"SOH",[295,328,329],{},"33",[295,331,332],{},"!",[295,334,335],{},"65",[295,337,338],{},"A",[295,340,341],{},"97",[295,343,344],{},"a",[249,346,347,349,352,355,358,361,364,367],{},[295,348,183],{},[295,350,351],{},"STX",[295,353,354],{},"34",[295,356,357],{},"\"",[295,359,360],{},"66",[295,362,363],{},"B",[295,365,366],{},"98",[295,368,369],{},"b",[249,371,372,374,377,380,383,386,389,392],{},[295,373,177],{},[295,375,376],{},"ETX",[295,378,379],{},"35",[295,381,382],{},"#",[295,384,385],{},"67",[295,387,388],{},"C",[295,390,391],{},"99",[295,393,394],{},"c",[249,396,397,400,403,406,409,412,415,418],{},[295,398,399],{},"4",[295,401,402],{},"EOT",[295,404,405],{},"36",[295,407,408],{},"$",[295,410,411],{},"68",[295,413,414],{},"D",[295,416,417],{},"100",[295,419,420],{},"d",[249,422,423,426,429,432,435,438,441,444],{},[295,424,425],{},"5",[295,427,428],{},"ENQ",[295,430,431],{},"37",[295,433,434],{},"%",[295,436,437],{},"69",[295,439,440],{},"E",[295,442,443],{},"101",[295,445,180],{},[249,447,448,451,454,457,460,463,466,469],{},[295,449,450],{},"6",[295,452,453],{},"ACK",[295,455,456],{},"38",[295,458,459],{},"&",[295,461,462],{},"70",[295,464,465],{},"F",[295,467,468],{},"102",[295,470,158],{},[249,472,473,476,479,482,485,488,491,494],{},[295,474,475],{},"7",[295,477,478],{},"BEL",[295,480,481],{},"39",[295,483,484],{},",",[295,486,487],{},"71",[295,489,490],{},"G",[295,492,493],{},"103",[295,495,496],{},"g",[249,498,499,502,505,508,510,513,516,519],{},[295,500,501],{},"8",[295,503,504],{},"BS",[295,506,507],{},"40",[295,509,106],{},[295,511,512],{},"72",[295,514,515],{},"H",[295,517,518],{},"104",[295,520,521],{},"h",[249,523,524,527,530,533,536,539,542,545],{},[295,525,526],{},"9",[295,528,529],{},"HT",[295,531,532],{},"41",[295,534,535],{},")",[295,537,538],{},"73",[295,540,541],{},"I",[295,543,544],{},"105",[295,546,547],{},"i",[249,549,550,553,556,559,562,565,568,571],{},[295,551,552],{},"10",[295,554,555],{},"LF",[295,557,558],{},"42",[295,560,561],{},"*",[295,563,564],{},"74",[295,566,567],{},"J",[295,569,570],{},"106",[295,572,573],{},"j",[249,575,576,579,582,585,588,591,594,597],{},[295,577,578],{},"11",[295,580,581],{},"VT",[295,583,584],{},"43",[295,586,587],{},"+",[295,589,590],{},"75",[295,592,593],{},"K",[295,595,596],{},"107",[295,598,599],{},"k",[249,601,602,605,608,611,613,616,619,622],{},[295,603,604],{},"12",[295,606,607],{},"FF",[295,609,610],{},"44",[295,612,484],{},[295,614,615],{},"76",[295,617,618],{},"L",[295,620,621],{},"108",[295,623,624],{},"l",[249,626,627,630,633,636,639,642,645,648],{},[295,628,629],{},"13",[295,631,632],{},"CR",[295,634,635],{},"45",[295,637,638],{},"-",[295,640,641],{},"77",[295,643,644],{},"M",[295,646,647],{},"109",[295,649,650],{},"m",[249,652,653,656,659,662,665,668,671,674],{},[295,654,655],{},"14",[295,657,658],{},"SO",[295,660,661],{},"46",[295,663,664],{},".",[295,666,667],{},"78",[295,669,670],{},"N",[295,672,673],{},"110",[295,675,676],{},"n",[249,678,679,682,685,688,691,694,697,700],{},[295,680,681],{},"15",[295,683,684],{},"SI",[295,686,687],{},"47",[295,689,690],{},"\u002F",[295,692,693],{},"79",[295,695,696],{},"O",[295,698,699],{},"111",[295,701,702],{},"o",[249,704,705,708,711,714,716,719,722,725],{},[295,706,707],{},"16",[295,709,710],{},"DLE",[295,712,713],{},"48",[295,715,297],{},[295,717,718],{},"80",[295,720,721],{},"P",[295,723,724],{},"112",[295,726,10],{},[249,728,729,732,735,738,740,743,746,749],{},[295,730,731],{},"17",[295,733,734],{},"DCI",[295,736,737],{},"49",[295,739,323],{},[295,741,742],{},"81",[295,744,745],{},"Q",[295,747,748],{},"113",[295,750,751],{},"q",[249,753,754,757,760,763,765,768,771,774],{},[295,755,756],{},"18",[295,758,759],{},"DC2",[295,761,762],{},"50",[295,764,183],{},[295,766,767],{},"82",[295,769,770],{},"R",[295,772,773],{},"114",[295,775,776],{},"r",[249,778,779,782,785,788,790,793,796,799],{},[295,780,781],{},"19",[295,783,784],{},"DC3",[295,786,787],{},"51",[295,789,177],{},[295,791,792],{},"83",[295,794,795],{},"S",[295,797,798],{},"115",[295,800,801],{},"s",[249,803,804,807,810,813,815,818,821,824],{},[295,805,806],{},"20",[295,808,809],{},"DC4",[295,811,812],{},"52",[295,814,399],{},[295,816,817],{},"84",[295,819,820],{},"T",[295,822,823],{},"116",[295,825,826],{},"t",[249,828,829,832,835,838,840,843,846,849],{},[295,830,831],{},"21",[295,833,834],{},"NAK",[295,836,837],{},"53",[295,839,425],{},[295,841,842],{},"85",[295,844,845],{},"U",[295,847,848],{},"117",[295,850,851],{},"u",[249,853,854,857,860,863,865,868,871,874],{},[295,855,856],{},"22",[295,858,859],{},"SYN",[295,861,862],{},"54",[295,864,450],{},[295,866,867],{},"86",[295,869,870],{},"V",[295,872,873],{},"118",[295,875,876],{},"v",[249,878,879,882,885,888,890,893,896,899],{},[295,880,881],{},"23",[295,883,884],{},"TB",[295,886,887],{},"55",[295,889,475],{},[295,891,892],{},"87",[295,894,895],{},"W",[295,897,898],{},"119",[295,900,901],{},"w",[249,903,904,907,910,913,915,918,921,924],{},[295,905,906],{},"24",[295,908,909],{},"CAN",[295,911,912],{},"56",[295,914,501],{},[295,916,917],{},"88",[295,919,920],{},"X",[295,922,923],{},"120",[295,925,926],{},"x",[249,928,929,932,935,938,940,943,946,949],{},[295,930,931],{},"25",[295,933,934],{},"EM",[295,936,937],{},"57",[295,939,526],{},[295,941,942],{},"89",[295,944,945],{},"Y",[295,947,948],{},"121",[295,950,951],{},"y",[249,953,954,957,960,963,966,969,972,975],{},[295,955,956],{},"26",[295,958,959],{},"SUB",[295,961,962],{},"58",[295,964,965],{},":",[295,967,968],{},"90",[295,970,971],{},"Z",[295,973,974],{},"122",[295,976,977],{},"z",[249,979,980,983,986,989,991,994,997,1000],{},[295,981,982],{},"27",[295,984,985],{},"ESC",[295,987,988],{},"59",[295,990,161],{},[295,992,993],{},"91",[295,995,996],{},"[",[295,998,999],{},"123",[295,1001,1002],{},"{",[249,1004,1005,1008,1011,1014,1017,1020,1022,1025],{},[295,1006,1007],{},"28",[295,1009,1010],{},"FS",[295,1012,1013],{},"60",[295,1015,1016],{},"\u003C",[295,1018,1019],{},"92",[295,1021,690],{},[295,1023,1024],{},"124",[295,1026,1027],{},"|",[249,1029,1030,1033,1036,1039,1041,1044,1047,1050],{},[295,1031,1032],{},"29",[295,1034,1035],{},"GS",[295,1037,1038],{},"61",[295,1040,151],{},[295,1042,1043],{},"93",[295,1045,1046],{},"]",[295,1048,1049],{},"125",[295,1051,1052],{},"}",[249,1054,1055,1058,1061,1064,1067,1070,1073,1076],{},[295,1056,1057],{},"30",[295,1059,1060],{},"RS",[295,1062,1063],{},"62",[295,1065,1066],{},">",[295,1068,1069],{},"94",[295,1071,1072],{},"^",[295,1074,1075],{},"126",[295,1077,1078],{},"`",[249,1080,1081,1084,1087,1090,1093,1096,1099,1102],{},[295,1082,1083],{},"31",[295,1085,1086],{},"US",[295,1088,1089],{},"63",[295,1091,1092],{},"?",[295,1094,1095],{},"95",[295,1097,1098],{},"_",[295,1100,1101],{},"127",[295,1103,1104],{},"DEL",[10,1106,1107,1108,1111],{},"ASCII 码大致由以下",[255,1109,1110],{},"两部分组","成：",[1113,1114,1115,1122],"ul",{},[52,1116,1117,1118,1121],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[255,1119,1120],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[52,1123,1124,1125,1128],{},"ASCII 打印字符：数字 ",[255,1126,1127],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[66,1130,1132],{"id":1131},"_134转义字符","1.3.4转义字符",[86,1134,1136],{"className":88,"code":1135,"language":90,"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",[92,1137,1138,1143,1159,1174,1180,1194,1200],{"__ignoreMap":14},[95,1139,1140],{"class":97,"line":98},[95,1141,1142],{"class":164},"\u002F\u002F换行符\n",[95,1144,1145,1148,1151,1154,1156],{"class":97,"line":15},[95,1146,1147],{"class":105},"cout ",[95,1149,1150],{"class":101},"\u003C\u003C",[95,1152,1153],{"class":210},"\"hello world\u002Fn\"",[95,1155,161],{"class":105},[95,1157,1158],{"class":164}," \u002F\u002F就等同于如下：\n",[95,1160,1162,1164,1166,1169,1171],{"class":97,"line":1161},3,[95,1163,1147],{"class":105},[95,1165,1150],{"class":101},[95,1167,1168],{"class":210},"\"hello world\"",[95,1170,1150],{"class":101},[95,1172,1173],{"class":105},"endl;\n",[95,1175,1177],{"class":97,"line":1176},4,[95,1178,1179],{"class":164},"\u002F\u002F反斜杠\n",[95,1181,1183,1185,1187,1190,1192],{"class":97,"line":1182},5,[95,1184,1147],{"class":105},[95,1186,1150],{"class":101},[95,1188,1189],{"class":210},"\"\u002F\u002F\"",[95,1191,1150],{"class":101},[95,1193,1173],{"class":105},[95,1195,1197],{"class":97,"line":1196},6,[95,1198,1199],{"class":164},"\u002F\u002F水平制表符\n",[95,1201,1203,1205,1207,1210,1213,1216,1218,1221],{"class":97,"line":1202},7,[95,1204,1147],{"class":105},[95,1206,1150],{"class":101},[95,1208,1209],{"class":210},"\"aaaa",[95,1211,1212],{"class":154},"\\t",[95,1214,1215],{"class":210},"helloworld\"",[95,1217,1150],{"class":101},[95,1219,1220],{"class":105},"endl;",[95,1222,1223],{"class":164}," \u002F\u002F输出窗口时有对齐效果\n",[66,1225,1227],{"id":1226},"_135字符串型","1.3.5字符串型",[10,1229,1230,1231,1233],{},"char 变量名",[95,1232],{},"=\"字符串值\"",[86,1235,1237],{"className":88,"code":1236,"language":90,"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",[92,1238,1239,1244,1249,1254,1259,1273,1286,1291,1297,1309],{"__ignoreMap":14},[95,1240,1241],{"class":97,"line":98},[95,1242,1243],{"class":164},"\u002F\u002Fc风格字符串\n",[95,1245,1246],{"class":97,"line":15},[95,1247,1248],{"class":164},"\u002F\u002F注意事项：\n",[95,1250,1251],{"class":97,"line":1161},[95,1252,1253],{"class":164},"\u002F\u002F1.char字符串名[]\n",[95,1255,1256],{"class":97,"line":1176},[95,1257,1258],{"class":164},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[95,1260,1261,1263,1266,1268,1270],{"class":97,"line":1182},[95,1262,202],{"class":101},[95,1264,1265],{"class":105}," str[]",[95,1267,151],{"class":101},[95,1269,1168],{"class":210},[95,1271,1272],{"class":105},";\n",[95,1274,1275,1277,1279,1282,1284],{"class":97,"line":1196},[95,1276,1147],{"class":105},[95,1278,1150],{"class":101},[95,1280,1281],{"class":105},"str",[95,1283,1150],{"class":101},[95,1285,1173],{"class":105},[95,1287,1288],{"class":97,"line":1202},[95,1289,1290],{"class":164},"\u002F\u002Fc++风格字符串\n",[95,1292,1294],{"class":97,"line":1293},8,[95,1295,1296],{"class":164},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[95,1298,1300,1303,1305,1307],{"class":97,"line":1299},9,[95,1301,1302],{"class":105},"string str2",[95,1304,151],{"class":101},[95,1306,1168],{"class":210},[95,1308,1272],{"class":105},[95,1310,1312,1314,1316,1319,1321],{"class":97,"line":1311},10,[95,1313,1147],{"class":105},[95,1315,1150],{"class":101},[95,1317,1318],{"class":105},"str2",[95,1320,1150],{"class":101},[95,1322,1173],{"class":105},[66,1324,1326],{"id":1325},"_136布尔类型bool","1.3.6布尔类型bool",[86,1328,1330],{"className":88,"code":1329,"language":90,"meta":14,"style":14},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[92,1331,1332,1347],{"__ignoreMap":14},[95,1333,1334,1337,1340,1342,1345],{"class":97,"line":98},[95,1335,1336],{"class":101},"bool",[95,1338,1339],{"class":105}," flag",[95,1341,151],{"class":101},[95,1343,1344],{"class":154},"true",[95,1346,1272],{"class":105},[95,1348,1349,1352,1355,1358,1360,1362],{"class":97,"line":15},[95,1350,1351],{"class":105},"cout",[95,1353,1354],{"class":101},"\u003C\u003Csizeof",[95,1356,1357],{"class":105},"(flag)",[95,1359,1150],{"class":101},[95,1361,1220],{"class":105},[95,1363,1364],{"class":164}," \u002F\u002F查看布尔占内存空间\n",[37,1366,1368],{"id":1367},"_14键盘输入cin","1.4键盘输入cin",[86,1370,1372],{"className":88,"code":1371,"language":90,"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",[92,1373,1374,1387,1404,1415],{"__ignoreMap":14},[95,1375,1376,1378,1381,1383,1385],{"class":97,"line":98},[95,1377,109],{"class":101},[95,1379,1380],{"class":105}," a",[95,1382,151],{"class":101},[95,1384,297],{"class":154},[95,1386,1272],{"class":105},[95,1388,1389,1391,1393,1396,1398,1400,1402],{"class":97,"line":15},[95,1390,1351],{"class":105},[95,1392,1150],{"class":101},[95,1394,1395],{"class":210},"\"请给整型变量a赋值\"",[95,1397,1150],{"class":101},[95,1399,344],{"class":105},[95,1401,1150],{"class":101},[95,1403,1173],{"class":105},[95,1405,1406,1409,1412],{"class":97,"line":1161},[95,1407,1408],{"class":105},"cin ",[95,1410,1411],{"class":101},">>",[95,1413,1414],{"class":105}," a;\n",[95,1416,1417,1419,1421,1424,1427,1429,1431],{"class":97,"line":1176},[95,1418,1147],{"class":105},[95,1420,1150],{"class":101},[95,1422,1423],{"class":210}," \"整型变量a=\"",[95,1425,1426],{"class":101}," \u003C\u003C",[95,1428,344],{"class":105},[95,1430,1150],{"class":101},[95,1432,1173],{"class":105},[37,1434,1436],{"id":1435},"_15运算符","1.5运算符",[66,1438,1440],{"id":1439},"_151算术运算符","1.5.1算术运算符",[10,1442,1443,1447],{},[1444,1445],"img",{"alt":14,"src":1446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[49,1449,1450,1453,1456],{},[52,1451,1452],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[52,1454,1455],{},"两个小数不可以做取模运算",[52,1457,1458],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[66,1460,1462],{"id":1461},"_152赋值运算符","1.5.2赋值运算符",[10,1464,1465],{},[1444,1466],{"alt":14,"src":1467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[66,1469,1471],{"id":1470},"_153比较运算符","1.5.3比较运算符",[10,1473,1474],{},[1444,1475],{"alt":14,"src":1476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[66,1478,1480],{"id":1479},"_154逻辑运算符","1.5.4逻辑运算符",[10,1482,1483],{},[1444,1484],{"alt":14,"src":1485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[37,1487,1489],{"id":1488},"_16程序流程结构","1.6程序流程结构",[66,1491,1493],{"id":1492},"_161选择结构","1.6.1选择结构",[49,1495,1496],{},[52,1497,1498],{},"if语句\n单行、多行、多条件if语句",[86,1500,1502],{"className":88,"code":1501,"language":90,"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",[92,1503,1504,1509,1524,1529,1543,1548,1553,1562,1575,1579,1592,1597,1603,1608,1622,1627,1633,1654,1659,1673,1678,1707,1712,1729,1734,1739,1744,1758,1763],{"__ignoreMap":14},[95,1505,1506],{"class":97,"line":98},[95,1507,1508],{"class":164},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[95,1510,1511,1514,1517,1519,1522],{"class":97,"line":15},[95,1512,1513],{"class":101},"if",[95,1515,1516],{"class":105},"(score",[95,1518,1066],{"class":101},[95,1520,1521],{"class":154},"600",[95,1523,112],{"class":105},[95,1525,1526],{"class":97,"line":1161},[95,1527,1528],{"class":105},"{\n",[95,1530,1531,1534,1536,1539,1541],{"class":97,"line":1176},[95,1532,1533],{"class":105},"    cout",[95,1535,1150],{"class":101},[95,1537,1538],{"class":210},"'这是单行if语句'",[95,1540,1150],{"class":101},[95,1542,1173],{"class":105},[95,1544,1545],{"class":97,"line":1182},[95,1546,1547],{"class":105},"}\n",[95,1549,1550],{"class":97,"line":1196},[95,1551,1552],{"class":164},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[95,1554,1555,1557,1559],{"class":97,"line":1202},[95,1556,1408],{"class":105},[95,1558,1411],{"class":101},[95,1560,1561],{"class":105}," score\n",[95,1563,1564,1566,1568,1571,1573],{"class":97,"line":1293},[95,1565,1513],{"class":101},[95,1567,1516],{"class":105},[95,1569,1570],{"class":101},"\u003C=",[95,1572,1521],{"class":154},[95,1574,112],{"class":105},[95,1576,1577],{"class":97,"line":1299},[95,1578,1528],{"class":105},[95,1580,1581,1583,1585,1588,1590],{"class":97,"line":1311},[95,1582,1533],{"class":105},[95,1584,1411],{"class":101},[95,1586,1587],{"class":210},"\"小于等于600\"",[95,1589,1150],{"class":101},[95,1591,1173],{"class":105},[95,1593,1595],{"class":97,"line":1594},11,[95,1596,1547],{"class":105},[95,1598,1600],{"class":97,"line":1599},12,[95,1601,1602],{"class":101},"else\n",[95,1604,1606],{"class":97,"line":1605},13,[95,1607,1528],{"class":105},[95,1609,1611,1613,1615,1618,1620],{"class":97,"line":1610},14,[95,1612,1533],{"class":105},[95,1614,1411],{"class":101},[95,1616,1617],{"class":210},"\"大于600\"",[95,1619,1411],{"class":101},[95,1621,1173],{"class":105},[95,1623,1625],{"class":97,"line":1624},15,[95,1626,1547],{"class":105},[95,1628,1630],{"class":97,"line":1629},16,[95,1631,1632],{"class":164},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[95,1634,1636,1638,1641,1643,1645,1648,1650,1652],{"class":97,"line":1635},17,[95,1637,1513],{"class":101},[95,1639,1640],{"class":105}," (",[95,1642,297],{"class":154},[95,1644,1016],{"class":101},[95,1646,1647],{"class":105},"num",[95,1649,1016],{"class":101},[95,1651,417],{"class":154},[95,1653,112],{"class":105},[95,1655,1657],{"class":97,"line":1656},18,[95,1658,1528],{"class":105},[95,1660,1662,1664,1666,1669,1671],{"class":97,"line":1661},19,[95,1663,1533],{"class":105},[95,1665,1150],{"class":101},[95,1667,1668],{"class":210},"\"小于100\"",[95,1670,1150],{"class":101},[95,1672,1173],{"class":105},[95,1674,1676],{"class":97,"line":1675},20,[95,1677,1547],{"class":105},[95,1679,1681,1684,1687,1690,1693,1695,1698,1700,1702,1705],{"class":97,"line":1680},21,[95,1682,1683],{"class":101},"else",[95,1685,1686],{"class":101}," if",[95,1688,1689],{"class":105}," (nmu",[95,1691,1692],{"class":101},">=",[95,1694,417],{"class":154},[95,1696,1697],{"class":101},"&&",[95,1699,1647],{"class":105},[95,1701,1016],{"class":101},[95,1703,1704],{"class":154},"200",[95,1706,112],{"class":105},[95,1708,1710],{"class":97,"line":1709},22,[95,1711,1528],{"class":105},[95,1713,1715,1717,1719,1722,1724,1726],{"class":97,"line":1714},23,[95,1716,1533],{"class":105},[95,1718,1150],{"class":101},[95,1720,1721],{"class":210},"\"不小于100且小于200\"",[95,1723,1150],{"class":101},[95,1725,1220],{"class":105},[95,1727,1728],{"class":164}," \u002F\u002F可以无限else if,python中是elif：\n",[95,1730,1732],{"class":97,"line":1731},24,[95,1733,1547],{"class":105},[95,1735,1737],{"class":97,"line":1736},25,[95,1738,1602],{"class":101},[95,1740,1742],{"class":97,"line":1741},26,[95,1743,1528],{"class":105},[95,1745,1747,1749,1751,1754,1756],{"class":97,"line":1746},27,[95,1748,1533],{"class":105},[95,1750,1150],{"class":101},[95,1752,1753],{"class":210},"\"不小于200\"",[95,1755,1150],{"class":101},[95,1757,1173],{"class":105},[95,1759,1761],{"class":97,"line":1760},28,[95,1762,1547],{"class":105},[95,1764,1766],{"class":97,"line":1765},29,[95,1767,1768],{"class":164},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[49,1770,1771],{"start":15},[52,1772,1773],{},"三目运算符",[86,1775,1777],{"className":88,"code":1776,"language":90,"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",[92,1778,1779,1784,1789,1815,1837,1854,1859,1882,1897],{"__ignoreMap":14},[95,1780,1781],{"class":97,"line":98},[95,1782,1783],{"class":164},"\u002F\u002F创建三个变量a,b,c\n",[95,1785,1786],{"class":97,"line":15},[95,1787,1788],{"class":164},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[95,1790,1791,1793,1795,1797,1799,1802,1804,1806,1809,1811,1813],{"class":97,"line":1161},[95,1792,109],{"class":101},[95,1794,1380],{"class":105},[95,1796,151],{"class":101},[95,1798,806],{"class":154},[95,1800,1801],{"class":105},",b",[95,1803,151],{"class":101},[95,1805,552],{"class":154},[95,1807,1808],{"class":105},",c",[95,1810,151],{"class":101},[95,1812,297],{"class":154},[95,1814,1272],{"class":105},[95,1816,1817,1819,1821,1824,1826,1828,1830,1832,1834],{"class":97,"line":1176},[95,1818,394],{"class":105},[95,1820,151],{"class":101},[95,1822,1823],{"class":105},"(a",[95,1825,1066],{"class":101},[95,1827,369],{"class":105},[95,1829,1092],{"class":101},[95,1831,344],{"class":105},[95,1833,965],{"class":101},[95,1835,1836],{"class":105},"b)\n",[95,1838,1839,1841,1843,1846,1848,1850,1852],{"class":97,"line":1182},[95,1840,1351],{"class":105},[95,1842,1150],{"class":101},[95,1844,1845],{"class":210},"\"c=\"",[95,1847,1150],{"class":101},[95,1849,394],{"class":105},[95,1851,1150],{"class":101},[95,1853,1173],{"class":105},[95,1855,1856],{"class":97,"line":1196},[95,1857,1858],{"class":164},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[95,1860,1861,1863,1865,1867,1869,1871,1873,1876,1878,1880],{"class":97,"line":1202},[95,1862,1823],{"class":105},[95,1864,1066],{"class":101},[95,1866,369],{"class":105},[95,1868,1092],{"class":101},[95,1870,344],{"class":105},[95,1872,965],{"class":101},[95,1874,1875],{"class":105},"b)",[95,1877,151],{"class":101},[95,1879,417],{"class":154},[95,1881,1272],{"class":105},[95,1883,1884,1886,1888,1890,1892,1894],{"class":97,"line":1293},[95,1885,1351],{"class":105},[95,1887,1150],{"class":101},[95,1889,344],{"class":105},[95,1891,1150],{"class":101},[95,1893,1220],{"class":105},[95,1895,1896],{"class":164}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[95,1898,1899,1901,1903,1905,1907,1909],{"class":97,"line":1299},[95,1900,1351],{"class":105},[95,1902,1150],{"class":101},[95,1904,369],{"class":105},[95,1906,1150],{"class":101},[95,1908,1220],{"class":105},[95,1910,1911],{"class":164}," \u002F\u002F10   a>b,b还是原值\n",[49,1913,1914],{"start":1161},[52,1915,1916],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[86,1918,1920],{"className":88,"code":1919,"language":90,"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",[92,1921,1922,1927,1935,1949,1959,1963,1977,1990,2000,2008,2013,2038,2059,2081,2102,2124,2145,2165,2170],{"__ignoreMap":14},[95,1923,1924],{"class":97,"line":98},[95,1925,1926],{"class":164},"\u002F\u002F案例-电影打分\n",[95,1928,1929,1932],{"class":97,"line":15},[95,1930,1931],{"class":101},"#include",[95,1933,1934],{"class":210},"\u003Ciostream>\n",[95,1936,1937,1940,1943,1947],{"class":97,"line":1161},[95,1938,1939],{"class":101},"using",[95,1941,1942],{"class":101}," namespace",[95,1944,1946],{"class":1945},"sScJk"," std",[95,1948,1272],{"class":105},[95,1950,1951,1953,1956],{"class":97,"line":1176},[95,1952,109],{"class":101},[95,1954,1955],{"class":1945}," main",[95,1957,1958],{"class":105},"()\n",[95,1960,1961],{"class":97,"line":1182},[95,1962,1528],{"class":105},[95,1964,1965,1968,1971,1973,1975],{"class":97,"line":1196},[95,1966,1967],{"class":101},"    int",[95,1969,1970],{"class":105}," score",[95,1972,151],{"class":101},[95,1974,297],{"class":154},[95,1976,1272],{"class":105},[95,1978,1979,1981,1983,1986,1988],{"class":97,"line":1202},[95,1980,1533],{"class":105},[95,1982,1150],{"class":101},[95,1984,1985],{"class":210},"\"电影打分：\"",[95,1987,1150],{"class":101},[95,1989,1173],{"class":105},[95,1991,1992,1995,1997],{"class":97,"line":1293},[95,1993,1994],{"class":105},"    cin",[95,1996,1411],{"class":101},[95,1998,1999],{"class":105},"score;\n",[95,2001,2002,2005],{"class":97,"line":1299},[95,2003,2004],{"class":101},"    switch",[95,2006,2007],{"class":105},"(score)\n",[95,2009,2010],{"class":97,"line":1311},[95,2011,2012],{"class":105},"    {\n",[95,2014,2015,2018,2021,2024,2026,2029,2031,2033,2036],{"class":97,"line":1594},[95,2016,2017],{"class":101},"        case",[95,2019,2020],{"class":154}," 10",[95,2022,2023],{"class":105},":cout",[95,2025,1150],{"class":101},[95,2027,2028],{"class":210},"\"经典\"",[95,2030,1150],{"class":101},[95,2032,1220],{"class":105},[95,2034,2035],{"class":101},"break",[95,2037,1272],{"class":105},[95,2039,2040,2042,2045,2047,2049,2051,2053,2055,2057],{"class":97,"line":1599},[95,2041,2017],{"class":101},[95,2043,2044],{"class":154}," 9",[95,2046,2023],{"class":105},[95,2048,1150],{"class":101},[95,2050,2028],{"class":210},[95,2052,1150],{"class":101},[95,2054,1220],{"class":105},[95,2056,2035],{"class":101},[95,2058,1272],{"class":105},[95,2060,2061,2063,2066,2068,2070,2073,2075,2077,2079],{"class":97,"line":1605},[95,2062,2017],{"class":101},[95,2064,2065],{"class":154}," 8",[95,2067,2023],{"class":105},[95,2069,1150],{"class":101},[95,2071,2072],{"class":210},"\"非常好\"",[95,2074,1150],{"class":101},[95,2076,1220],{"class":105},[95,2078,2035],{"class":101},[95,2080,1272],{"class":105},[95,2082,2083,2085,2088,2090,2092,2094,2096,2098,2100],{"class":97,"line":1610},[95,2084,2017],{"class":101},[95,2086,2087],{"class":154}," 7",[95,2089,2023],{"class":105},[95,2091,1150],{"class":101},[95,2093,2072],{"class":210},[95,2095,1150],{"class":101},[95,2097,1220],{"class":105},[95,2099,2035],{"class":101},[95,2101,1272],{"class":105},[95,2103,2104,2106,2109,2111,2113,2116,2118,2120,2122],{"class":97,"line":1624},[95,2105,2017],{"class":101},[95,2107,2108],{"class":154}," 6",[95,2110,2023],{"class":105},[95,2112,1150],{"class":101},[95,2114,2115],{"class":210},"\"一般\"",[95,2117,1150],{"class":101},[95,2119,1220],{"class":105},[95,2121,2035],{"class":101},[95,2123,1272],{"class":105},[95,2125,2126,2128,2131,2133,2135,2137,2139,2141,2143],{"class":97,"line":1629},[95,2127,2017],{"class":101},[95,2129,2130],{"class":154}," 5",[95,2132,2023],{"class":105},[95,2134,1150],{"class":101},[95,2136,2115],{"class":210},[95,2138,1150],{"class":101},[95,2140,1220],{"class":105},[95,2142,2035],{"class":101},[95,2144,1272],{"class":105},[95,2146,2147,2150,2152,2154,2157,2159,2161,2163],{"class":97,"line":1635},[95,2148,2149],{"class":101},"        default",[95,2151,2023],{"class":105},[95,2153,1150],{"class":101},[95,2155,2156],{"class":210},"\"烂片\"",[95,2158,1150],{"class":101},[95,2160,1220],{"class":105},[95,2162,2035],{"class":101},[95,2164,1272],{"class":105},[95,2166,2167],{"class":97,"line":1656},[95,2168,2169],{"class":105},"    }\n",[95,2171,2172],{"class":97,"line":1661},[95,2173,1547],{"class":105},[10,2175,2176],{},"if和switch区别：",[1113,2178,2179,2182],{},[52,2180,2181],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[52,2183,2184],{},"switch优点：结构清晰，执行效率高",[66,2186,2188],{"id":2187},"_162循环结构","1.6.2循环结构",[49,2190,2191],{},[52,2192,2193],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[86,2195,2197],{"className":88,"code":2196,"language":90,"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",[92,2198,2199,2204,2212,2216,2229,2243,2247,2267,2277,2281,2293],{"__ignoreMap":14},[95,2200,2201],{"class":97,"line":98},[95,2202,2203],{"class":164},"\u002F\u002F打印0-9数字\n",[95,2205,2206,2208,2210],{"class":97,"line":15},[95,2207,109],{"class":101},[95,2209,1955],{"class":1945},[95,2211,1958],{"class":105},[95,2213,2214],{"class":97,"line":1161},[95,2215,1528],{"class":105},[95,2217,2218,2220,2223,2225,2227],{"class":97,"line":1176},[95,2219,1967],{"class":101},[95,2221,2222],{"class":105}," num",[95,2224,151],{"class":101},[95,2226,297],{"class":154},[95,2228,1272],{"class":105},[95,2230,2231,2234,2237,2239,2241],{"class":97,"line":1182},[95,2232,2233],{"class":101},"    while",[95,2235,2236],{"class":105},"(num",[95,2238,1016],{"class":101},[95,2240,552],{"class":154},[95,2242,112],{"class":105},[95,2244,2245],{"class":97,"line":1196},[95,2246,2012],{"class":105},[95,2248,2249,2252,2255,2257,2259,2261,2264],{"class":97,"line":1202},[95,2250,2251],{"class":1945},"       std",[95,2253,2254],{"class":105},"::cout",[95,2256,1150],{"class":101},[95,2258,1647],{"class":105},[95,2260,1150],{"class":101},[95,2262,2263],{"class":1945},"std",[95,2265,2266],{"class":105},"::endl;\n",[95,2268,2269,2272,2275],{"class":97,"line":1293},[95,2270,2271],{"class":105},"        num",[95,2273,2274],{"class":101},"++",[95,2276,1272],{"class":105},[95,2278,2279],{"class":97,"line":1299},[95,2280,2169],{"class":105},[95,2282,2283,2286,2288,2291],{"class":97,"line":1311},[95,2284,2285],{"class":1945},"    system",[95,2287,106],{"class":105},[95,2289,2290],{"class":210},"\"pause\"",[95,2292,112],{"class":105},[95,2294,2295],{"class":97,"line":1594},[95,2296,1547],{"class":105},[10,2298,2299],{},"注意：写好循环条件，避免死循环情况",[86,2301,2303],{"className":88,"code":2302,"language":90,"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",[92,2304,2305,2310,2317,2324,2334,2342,2346,2351,2378,2383,2388,2396,2423,2428,2433,2446,2456,2460,2470,2475,2488,2493,2507,2512,2527,2531,2544,2548,2553,2557,2571,2579,2584,2590,2596,2601],{"__ignoreMap":14},[95,2306,2307],{"class":97,"line":98},[95,2308,2309],{"class":164},"\u002F\u002F循环结构-猜数字\n",[95,2311,2312,2314],{"class":97,"line":15},[95,2313,1931],{"class":101},[95,2315,2316],{"class":210}," \u003Ciostream>\n",[95,2318,2319,2321],{"class":97,"line":1161},[95,2320,1931],{"class":101},[95,2322,2323],{"class":210}," \u003Cctime>\n",[95,2325,2326,2328,2330,2332],{"class":97,"line":1176},[95,2327,1939],{"class":101},[95,2329,1942],{"class":101},[95,2331,1946],{"class":1945},[95,2333,1272],{"class":105},[95,2335,2336,2338,2340],{"class":97,"line":1182},[95,2337,109],{"class":101},[95,2339,1955],{"class":1945},[95,2341,1958],{"class":105},[95,2343,2344],{"class":97,"line":1196},[95,2345,1528],{"class":105},[95,2347,2348],{"class":97,"line":1202},[95,2349,2350],{"class":164},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[95,2352,2353,2356,2359,2362,2365,2367,2370,2372,2375],{"class":97,"line":1293},[95,2354,2355],{"class":1945},"    srand",[95,2357,2358],{"class":105},"((",[95,2360,2361],{"class":101},"unsigned",[95,2363,2364],{"class":101}," int",[95,2366,535],{"class":105},[95,2368,2369],{"class":1945},"time",[95,2371,106],{"class":105},[95,2373,2374],{"class":154},"NULL",[95,2376,2377],{"class":105},"));\n",[95,2379,2380],{"class":97,"line":1299},[95,2381,2382],{"emptyLinePlaceholder":21},"\n",[95,2384,2385],{"class":97,"line":1311},[95,2386,2387],{"class":164},"    \u002F\u002F1.系统生成随机数\n",[95,2389,2390,2393],{"class":97,"line":1594},[95,2391,2392],{"class":164},"    \u002F\u002Frand()%100",[95,2394,2395],{"class":164}," \u002F\u002F生成0-99的随机数\n",[95,2397,2398,2400,2402,2404,2407,2410,2412,2414,2416,2418,2420],{"class":97,"line":1599},[95,2399,1967],{"class":101},[95,2401,2222],{"class":105},[95,2403,151],{"class":101},[95,2405,2406],{"class":1945},"rand",[95,2408,2409],{"class":105},"()",[95,2411,434],{"class":101},[95,2413,417],{"class":154},[95,2415,587],{"class":101},[95,2417,323],{"class":154},[95,2419,161],{"class":105},[95,2421,2422],{"class":164}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[95,2424,2425],{"class":97,"line":1605},[95,2426,2427],{"class":164},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[95,2429,2430],{"class":97,"line":1610},[95,2431,2432],{"class":164},"    \u002F\u002F2.玩家猜测\n",[95,2434,2435,2437,2440,2442,2444],{"class":97,"line":1624},[95,2436,1967],{"class":101},[95,2438,2439],{"class":105}," val",[95,2441,151],{"class":101},[95,2443,297],{"class":154},[95,2445,1272],{"class":105},[95,2447,2448,2450,2452,2454],{"class":97,"line":1629},[95,2449,2233],{"class":101},[95,2451,1640],{"class":105},[95,2453,323],{"class":154},[95,2455,112],{"class":105},[95,2457,2458],{"class":97,"line":1635},[95,2459,2012],{"class":105},[95,2461,2462,2465,2467],{"class":97,"line":1656},[95,2463,2464],{"class":105},"        cin",[95,2466,1411],{"class":101},[95,2468,2469],{"class":105},"val;\n",[95,2471,2472],{"class":97,"line":1661},[95,2473,2474],{"class":164},"        \u002F\u002F3.判断玩家猜测\n",[95,2476,2477,2480,2483,2485],{"class":97,"line":1675},[95,2478,2479],{"class":101},"        if",[95,2481,2482],{"class":105},"(val",[95,2484,1016],{"class":101},[95,2486,2487],{"class":105},"num) \n",[95,2489,2490],{"class":97,"line":1680},[95,2491,2492],{"class":105},"        {\n",[95,2494,2495,2498,2500,2503,2505],{"class":97,"line":1709},[95,2496,2497],{"class":105},"            cout",[95,2499,1150],{"class":101},[95,2501,2502],{"class":210},"\"猜小了！\"",[95,2504,1150],{"class":101},[95,2506,1173],{"class":105},[95,2508,2509],{"class":97,"line":1714},[95,2510,2511],{"class":105},"        }\n",[95,2513,2514,2517,2519,2522,2524],{"class":97,"line":1731},[95,2515,2516],{"class":101},"        else",[95,2518,1686],{"class":101},[95,2520,2521],{"class":105}," (val",[95,2523,1066],{"class":101},[95,2525,2526],{"class":105},"num)\n",[95,2528,2529],{"class":97,"line":1736},[95,2530,2492],{"class":105},[95,2532,2533,2535,2537,2540,2542],{"class":97,"line":1741},[95,2534,2497],{"class":105},[95,2536,1150],{"class":101},[95,2538,2539],{"class":210},"\"猜大了！\"",[95,2541,1150],{"class":101},[95,2543,1173],{"class":105},[95,2545,2546],{"class":97,"line":1746},[95,2547,2511],{"class":105},[95,2549,2550],{"class":97,"line":1760},[95,2551,2552],{"class":101},"        else\n",[95,2554,2555],{"class":97,"line":1765},[95,2556,2492],{"class":105},[95,2558,2560,2562,2564,2567,2569],{"class":97,"line":2559},30,[95,2561,2497],{"class":105},[95,2563,1150],{"class":101},[95,2565,2566],{"class":210},"\"猜对了！\"",[95,2568,1150],{"class":101},[95,2570,1173],{"class":105},[95,2572,2574,2577],{"class":97,"line":2573},31,[95,2575,2576],{"class":101},"            break",[95,2578,1272],{"class":105},[95,2580,2582],{"class":97,"line":2581},32,[95,2583,2511],{"class":105},[95,2585,2587],{"class":97,"line":2586},33,[95,2588,2589],{"class":164},"        \u002F\u002F猜对 退出游戏\n",[95,2591,2593],{"class":97,"line":2592},34,[95,2594,2595],{"class":164},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[95,2597,2599],{"class":97,"line":2598},35,[95,2600,2169],{"class":105},[95,2602,2604],{"class":97,"line":2603},36,[95,2605,1547],{"class":105},[49,2607,2608],{"start":15},[52,2609,2610,2611,2614],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[255,2612,2613],{},"do...while会先执行一次循环语句","，在判断循环语句",[86,2616,2618],{"className":88,"code":2617,"language":90,"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",[92,2619,2620,2625,2633,2637,2649,2657,2661,2678,2685,2689,2702,2712],{"__ignoreMap":14},[95,2621,2622],{"class":97,"line":98},[95,2623,2624],{"class":164},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[95,2626,2627,2629,2631],{"class":97,"line":15},[95,2628,109],{"class":101},[95,2630,1955],{"class":1945},[95,2632,1958],{"class":105},[95,2634,2635],{"class":97,"line":1161},[95,2636,1528],{"class":105},[95,2638,2639,2641,2643,2645,2647],{"class":97,"line":1176},[95,2640,1967],{"class":101},[95,2642,2222],{"class":105},[95,2644,151],{"class":101},[95,2646,297],{"class":154},[95,2648,1272],{"class":105},[95,2650,2651,2654],{"class":97,"line":1182},[95,2652,2653],{"class":101},"    do",[95,2655,2656],{"class":105}," \n",[95,2658,2659],{"class":97,"line":1196},[95,2660,2012],{"class":105},[95,2662,2663,2666,2668,2670,2672,2674,2676],{"class":97,"line":1202},[95,2664,2665],{"class":1945},"        std",[95,2667,2254],{"class":105},[95,2669,1150],{"class":101},[95,2671,1647],{"class":105},[95,2673,1150],{"class":101},[95,2675,2263],{"class":1945},[95,2677,2266],{"class":105},[95,2679,2680,2682],{"class":97,"line":1293},[95,2681,2271],{"class":105},[95,2683,2684],{"class":101},"++\n",[95,2686,2687],{"class":97,"line":1299},[95,2688,2169],{"class":105},[95,2690,2691,2693,2695,2697,2699],{"class":97,"line":1311},[95,2692,2233],{"class":101},[95,2694,2236],{"class":105},[95,2696,1016],{"class":101},[95,2698,552],{"class":154},[95,2700,2701],{"class":105},");\n",[95,2703,2704,2706,2708,2710],{"class":97,"line":1594},[95,2705,2285],{"class":1945},[95,2707,106],{"class":105},[95,2709,2290],{"class":210},[95,2711,2701],{"class":105},[95,2713,2714],{"class":97,"line":1599},[95,2715,1547],{"class":105},[10,2717,2718],{},"案例-水仙花数",[10,2720,2721],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[10,2723,2724],{},"例如：1^3+5^3+3^3=153",[10,2726,2727],{},"请用do...while语句，求出所有3位数的水仙花数",[86,2729,2731],{"className":88,"code":2730,"language":90,"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",[92,2732,2733,2739,2749,2757,2761,2766,2778,2784,2788,2793,2809,2825,2841,2856,2875,2890,2938,2942,2954,2958,2966,2970,2984],{"__ignoreMap":14},[95,2734,2735,2737],{"class":97,"line":98},[95,2736,1931],{"class":101},[95,2738,2316],{"class":210},[95,2740,2741,2743,2745,2747],{"class":97,"line":15},[95,2742,1939],{"class":101},[95,2744,1942],{"class":101},[95,2746,1946],{"class":1945},[95,2748,1272],{"class":105},[95,2750,2751,2753,2755],{"class":97,"line":1161},[95,2752,109],{"class":101},[95,2754,1955],{"class":1945},[95,2756,1958],{"class":105},[95,2758,2759],{"class":97,"line":1176},[95,2760,1528],{"class":105},[95,2762,2763],{"class":97,"line":1182},[95,2764,2765],{"class":164},"    \u002F\u002F1.先打印所有三位数字\n",[95,2767,2768,2770,2772,2774,2776],{"class":97,"line":1196},[95,2769,1967],{"class":101},[95,2771,2222],{"class":105},[95,2773,151],{"class":101},[95,2775,417],{"class":154},[95,2777,1272],{"class":105},[95,2779,2780,2782],{"class":97,"line":1202},[95,2781,2653],{"class":101},[95,2783,2656],{"class":105},[95,2785,2786],{"class":97,"line":1293},[95,2787,2012],{"class":105},[95,2789,2790],{"class":97,"line":1299},[95,2791,2792],{"class":164},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[95,2794,2795,2798,2800,2802,2804,2806],{"class":97,"line":1311},[95,2796,2797],{"class":101},"        int",[95,2799,1380],{"class":105},[95,2801,151],{"class":101},[95,2803,297],{"class":154},[95,2805,161],{"class":105},[95,2807,2808],{"class":164}," \u002F\u002F个位\n",[95,2810,2811,2813,2816,2818,2820,2822],{"class":97,"line":1594},[95,2812,2797],{"class":101},[95,2814,2815],{"class":105}," b",[95,2817,151],{"class":101},[95,2819,297],{"class":154},[95,2821,161],{"class":105},[95,2823,2824],{"class":164}," \u002F\u002F十位\n",[95,2826,2827,2829,2832,2834,2836,2838],{"class":97,"line":1599},[95,2828,2797],{"class":101},[95,2830,2831],{"class":105}," c",[95,2833,151],{"class":101},[95,2835,297],{"class":154},[95,2837,161],{"class":105},[95,2839,2840],{"class":164}," \u002F\u002F百位\n",[95,2842,2843,2846,2848,2850,2852,2854],{"class":97,"line":1605},[95,2844,2845],{"class":105},"        a",[95,2847,151],{"class":101},[95,2849,1647],{"class":105},[95,2851,434],{"class":101},[95,2853,552],{"class":154},[95,2855,1272],{"class":105},[95,2857,2858,2861,2863,2865,2867,2869,2871,2873],{"class":97,"line":1610},[95,2859,2860],{"class":105},"        b",[95,2862,151],{"class":101},[95,2864,1647],{"class":105},[95,2866,690],{"class":101},[95,2868,552],{"class":154},[95,2870,434],{"class":101},[95,2872,552],{"class":154},[95,2874,1272],{"class":105},[95,2876,2877,2880,2882,2884,2886,2888],{"class":97,"line":1624},[95,2878,2879],{"class":105},"        c",[95,2881,151],{"class":101},[95,2883,1647],{"class":105},[95,2885,690],{"class":101},[95,2887,417],{"class":154},[95,2889,1272],{"class":105},[95,2891,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2929,2932,2935],{"class":97,"line":1629},[95,2893,2479],{"class":101},[95,2895,1823],{"class":105},[95,2897,561],{"class":101},[95,2899,344],{"class":105},[95,2901,561],{"class":101},[95,2903,344],{"class":105},[95,2905,587],{"class":101},[95,2907,369],{"class":105},[95,2909,561],{"class":101},[95,2911,369],{"class":105},[95,2913,561],{"class":101},[95,2915,369],{"class":105},[95,2917,587],{"class":101},[95,2919,394],{"class":105},[95,2921,561],{"class":101},[95,2923,394],{"class":105},[95,2925,561],{"class":101},[95,2927,2928],{"class":105},"c ",[95,2930,2931],{"class":101},"==",[95,2933,2934],{"class":105}," num)",[95,2936,2937],{"class":164}," \u002F\u002F如果是水仙花数，才打印\n",[95,2939,2940],{"class":97,"line":1635},[95,2941,2492],{"class":105},[95,2943,2944,2946,2948,2950,2952],{"class":97,"line":1656},[95,2945,2497],{"class":105},[95,2947,1150],{"class":101},[95,2949,1647],{"class":105},[95,2951,1150],{"class":101},[95,2953,1173],{"class":105},[95,2955,2956],{"class":97,"line":1661},[95,2957,2511],{"class":105},[95,2959,2960,2962,2964],{"class":97,"line":1675},[95,2961,2271],{"class":105},[95,2963,2274],{"class":101},[95,2965,1272],{"class":105},[95,2967,2968],{"class":97,"line":1680},[95,2969,2169],{"class":105},[95,2971,2972,2974,2977,2979,2982],{"class":97,"line":1709},[95,2973,2233],{"class":101},[95,2975,2976],{"class":105}," (num ",[95,2978,1016],{"class":101},[95,2980,2981],{"class":154}," 1000",[95,2983,2701],{"class":105},[95,2985,2986],{"class":97,"line":1714},[95,2987,1547],{"class":105},[49,2989,2990],{"start":1161},[52,2991,2992],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[86,2994,2996],{"className":88,"code":2995,"language":90,"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",[92,2997,2998,3003,3032,3036,3048,3052,3057,3068,3075,3079,3093,3097,3104,3108,3120,3129],{"__ignoreMap":14},[95,2999,3000],{"class":97,"line":98},[95,3001,3002],{"class":164},"\u002F\u002F从数字0-9打印\n",[95,3004,3005,3008,3010,3012,3015,3017,3019,3022,3024,3026,3028,3030],{"class":97,"line":15},[95,3006,3007],{"class":101},"for",[95,3009,106],{"class":105},[95,3011,109],{"class":101},[95,3013,3014],{"class":105}," i",[95,3016,151],{"class":101},[95,3018,297],{"class":154},[95,3020,3021],{"class":105},";i",[95,3023,1016],{"class":101},[95,3025,552],{"class":154},[95,3027,3021],{"class":105},[95,3029,2274],{"class":101},[95,3031,112],{"class":105},[95,3033,3034],{"class":97,"line":1161},[95,3035,1528],{"class":105},[95,3037,3038,3040,3042,3044,3046],{"class":97,"line":1176},[95,3039,1533],{"class":105},[95,3041,1150],{"class":101},[95,3043,547],{"class":105},[95,3045,1150],{"class":101},[95,3047,1173],{"class":105},[95,3049,3050],{"class":97,"line":1182},[95,3051,1547],{"class":105},[95,3053,3054],{"class":97,"line":1196},[95,3055,3056],{"class":164},"\u002F\u002F上式可以进行拆分\n",[95,3058,3059,3061,3063,3065],{"class":97,"line":1202},[95,3060,109],{"class":101},[95,3062,3014],{"class":105},[95,3064,151],{"class":101},[95,3066,3067],{"class":154},"0\n",[95,3069,3070,3072],{"class":97,"line":1293},[95,3071,3007],{"class":101},[95,3073,3074],{"class":105},"(;;;)\n",[95,3076,3077],{"class":97,"line":1299},[95,3078,1528],{"class":105},[95,3080,3081,3084,3087,3089,3091],{"class":97,"line":1311},[95,3082,3083],{"class":101},"    if",[95,3085,3086],{"class":105},"(i",[95,3088,1692],{"class":101},[95,3090,552],{"class":154},[95,3092,112],{"class":105},[95,3094,3095],{"class":97,"line":1594},[95,3096,2012],{"class":105},[95,3098,3099,3102],{"class":97,"line":1599},[95,3100,3101],{"class":101},"        break",[95,3103,1272],{"class":105},[95,3105,3106],{"class":97,"line":1605},[95,3107,2169],{"class":105},[95,3109,3110,3112,3114,3116,3118],{"class":97,"line":1610},[95,3111,1533],{"class":105},[95,3113,1150],{"class":101},[95,3115,547],{"class":105},[95,3117,1150],{"class":101},[95,3119,1173],{"class":105},[95,3121,3122,3125,3127],{"class":97,"line":1624},[95,3123,3124],{"class":105},"    i",[95,3126,2274],{"class":101},[95,3128,1272],{"class":105},[95,3130,3131],{"class":97,"line":1629},[95,3132,1547],{"class":105},[10,3134,3135],{},"小练习",[86,3137,3139],{"className":88,"code":3138,"language":90,"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",[92,3140,3141,3147,3157,3165,3169,3174,3179,3207,3211,3216,3221,3262,3266,3279,3283,3287,3291,3303,3307,3311],{"__ignoreMap":14},[95,3142,3143,3145],{"class":97,"line":98},[95,3144,1931],{"class":101},[95,3146,1934],{"class":210},[95,3148,3149,3151,3153,3155],{"class":97,"line":15},[95,3150,1939],{"class":101},[95,3152,1942],{"class":101},[95,3154,1946],{"class":1945},[95,3156,1272],{"class":105},[95,3158,3159,3161,3163],{"class":97,"line":1161},[95,3160,109],{"class":101},[95,3162,1955],{"class":1945},[95,3164,1958],{"class":105},[95,3166,3167],{"class":97,"line":1176},[95,3168,1528],{"class":105},[95,3170,3171],{"class":97,"line":1182},[95,3172,3173],{"class":164},"    \u002F\u002F敲桌子案例\n",[95,3175,3176],{"class":97,"line":1196},[95,3177,3178],{"class":164},"    \u002F\u002F1.先输出1-100的数字\n",[95,3180,3181,3184,3186,3188,3190,3192,3194,3197,3199,3201,3203,3205],{"class":97,"line":1202},[95,3182,3183],{"class":101},"    for",[95,3185,106],{"class":105},[95,3187,109],{"class":101},[95,3189,3014],{"class":105},[95,3191,151],{"class":101},[95,3193,323],{"class":154},[95,3195,3196],{"class":105},"; i",[95,3198,1570],{"class":101},[95,3200,417],{"class":154},[95,3202,3196],{"class":105},[95,3204,2274],{"class":101},[95,3206,112],{"class":105},[95,3208,3209],{"class":97,"line":1293},[95,3210,2012],{"class":105},[95,3212,3213],{"class":97,"line":1299},[95,3214,3215],{"class":164},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[95,3217,3218],{"class":97,"line":1311},[95,3219,3220],{"class":164},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[95,3222,3223,3225,3227,3229,3231,3233,3235,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260],{"class":97,"line":1594},[95,3224,2479],{"class":101},[95,3226,3086],{"class":105},[95,3228,434],{"class":101},[95,3230,475],{"class":154},[95,3232,2931],{"class":101},[95,3234,297],{"class":154},[95,3236,3237],{"class":101}," ||",[95,3239,3014],{"class":105},[95,3241,434],{"class":101},[95,3243,552],{"class":154},[95,3245,2931],{"class":101},[95,3247,475],{"class":154},[95,3249,3237],{"class":101},[95,3251,3014],{"class":105},[95,3253,690],{"class":101},[95,3255,552],{"class":154},[95,3257,2931],{"class":101},[95,3259,475],{"class":154},[95,3261,112],{"class":105},[95,3263,3264],{"class":97,"line":1599},[95,3265,2492],{"class":105},[95,3267,3268,3270,3272,3275,3277],{"class":97,"line":1605},[95,3269,2497],{"class":105},[95,3271,1150],{"class":101},[95,3273,3274],{"class":210},"\"敲桌子\"",[95,3276,1150],{"class":101},[95,3278,1173],{"class":105},[95,3280,3281],{"class":97,"line":1610},[95,3282,2511],{"class":105},[95,3284,3285],{"class":97,"line":1624},[95,3286,2552],{"class":101},[95,3288,3289],{"class":97,"line":1629},[95,3290,2492],{"class":105},[95,3292,3293,3295,3297,3299,3301],{"class":97,"line":1635},[95,3294,2497],{"class":105},[95,3296,1150],{"class":101},[95,3298,547],{"class":105},[95,3300,1150],{"class":101},[95,3302,1173],{"class":105},[95,3304,3305],{"class":97,"line":1656},[95,3306,2511],{"class":105},[95,3308,3309],{"class":97,"line":1661},[95,3310,2169],{"class":105},[95,3312,3313],{"class":97,"line":1675},[95,3314,1547],{"class":105},[10,3316,3317],{},"嵌套实现星图",[86,3319,3321],{"className":88,"code":3320,"language":90,"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",[92,3322,3323,3329,3339,3347,3351,3377,3381,3410,3414,3425,3429,3438,3442],{"__ignoreMap":14},[95,3324,3325,3327],{"class":97,"line":98},[95,3326,1931],{"class":101},[95,3328,1934],{"class":210},[95,3330,3331,3333,3335,3337],{"class":97,"line":15},[95,3332,1939],{"class":101},[95,3334,1942],{"class":101},[95,3336,1946],{"class":1945},[95,3338,1272],{"class":105},[95,3340,3341,3343,3345],{"class":97,"line":1161},[95,3342,109],{"class":101},[95,3344,1955],{"class":1945},[95,3346,1958],{"class":105},[95,3348,3349],{"class":97,"line":1176},[95,3350,1528],{"class":105},[95,3352,3353,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375],{"class":97,"line":1182},[95,3354,3183],{"class":101},[95,3356,1640],{"class":105},[95,3358,109],{"class":101},[95,3360,3014],{"class":105},[95,3362,151],{"class":101},[95,3364,297],{"class":154},[95,3366,3021],{"class":105},[95,3368,1016],{"class":101},[95,3370,552],{"class":154},[95,3372,3021],{"class":105},[95,3374,2274],{"class":101},[95,3376,112],{"class":105},[95,3378,3379],{"class":97,"line":1196},[95,3380,2012],{"class":105},[95,3382,3383,3386,3388,3390,3393,3395,3397,3400,3402,3404,3406,3408],{"class":97,"line":1202},[95,3384,3385],{"class":101},"        for",[95,3387,1640],{"class":105},[95,3389,109],{"class":101},[95,3391,3392],{"class":105}," j",[95,3394,151],{"class":101},[95,3396,297],{"class":154},[95,3398,3399],{"class":105},";j",[95,3401,1016],{"class":101},[95,3403,552],{"class":154},[95,3405,3399],{"class":105},[95,3407,2274],{"class":101},[95,3409,112],{"class":105},[95,3411,3412],{"class":97,"line":1293},[95,3413,2492],{"class":105},[95,3415,3416,3418,3420,3423],{"class":97,"line":1299},[95,3417,2497],{"class":105},[95,3419,1150],{"class":101},[95,3421,3422],{"class":210},"\"*\"",[95,3424,1272],{"class":105},[95,3426,3427],{"class":97,"line":1311},[95,3428,2511],{"class":105},[95,3430,3431,3434,3436],{"class":97,"line":1594},[95,3432,3433],{"class":105},"        cout",[95,3435,1150],{"class":101},[95,3437,1173],{"class":105},[95,3439,3440],{"class":97,"line":1599},[95,3441,2169],{"class":105},[95,3443,3444],{"class":97,"line":1605},[95,3445,1547],{"class":105},[10,3447,3448],{},"乘法口诀表",[86,3450,3452],{"className":88,"code":3451,"language":90,"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",[92,3453,3454,3460,3470,3478,3482,3508,3512,3537,3541,3581,3585,3593,3597],{"__ignoreMap":14},[95,3455,3456,3458],{"class":97,"line":98},[95,3457,1931],{"class":101},[95,3459,2316],{"class":210},[95,3461,3462,3464,3466,3468],{"class":97,"line":15},[95,3463,1939],{"class":101},[95,3465,1942],{"class":101},[95,3467,1946],{"class":1945},[95,3469,1272],{"class":105},[95,3471,3472,3474,3476],{"class":97,"line":1161},[95,3473,109],{"class":101},[95,3475,1955],{"class":1945},[95,3477,1958],{"class":105},[95,3479,3480],{"class":97,"line":1176},[95,3481,1528],{"class":105},[95,3483,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506],{"class":97,"line":1182},[95,3485,3183],{"class":101},[95,3487,106],{"class":105},[95,3489,109],{"class":101},[95,3491,3014],{"class":105},[95,3493,151],{"class":101},[95,3495,323],{"class":154},[95,3497,3021],{"class":105},[95,3499,1016],{"class":101},[95,3501,552],{"class":154},[95,3503,3021],{"class":105},[95,3505,2274],{"class":101},[95,3507,112],{"class":105},[95,3509,3510],{"class":97,"line":1196},[95,3511,2012],{"class":105},[95,3513,3514,3516,3518,3520,3522,3524,3526,3528,3530,3533,3535],{"class":97,"line":1202},[95,3515,3385],{"class":101},[95,3517,106],{"class":105},[95,3519,109],{"class":101},[95,3521,3392],{"class":105},[95,3523,151],{"class":101},[95,3525,323],{"class":154},[95,3527,3399],{"class":105},[95,3529,1570],{"class":101},[95,3531,3532],{"class":105},"i;j",[95,3534,2274],{"class":101},[95,3536,112],{"class":105},[95,3538,3539],{"class":97,"line":1293},[95,3540,2492],{"class":105},[95,3542,3543,3545,3547,3549,3551,3553,3555,3557,3559,3562,3564,3566,3568,3570,3572,3575,3577,3579],{"class":97,"line":1299},[95,3544,2497],{"class":105},[95,3546,1150],{"class":101},[95,3548,573],{"class":105},[95,3550,1150],{"class":101},[95,3552,3422],{"class":210},[95,3554,1150],{"class":101},[95,3556,547],{"class":105},[95,3558,1150],{"class":101},[95,3560,3561],{"class":210},"\"=\"",[95,3563,1150],{"class":101},[95,3565,547],{"class":105},[95,3567,561],{"class":101},[95,3569,573],{"class":105},[95,3571,1150],{"class":101},[95,3573,3574],{"class":210},"'",[95,3576,1212],{"class":154},[95,3578,3574],{"class":210},[95,3580,1272],{"class":105},[95,3582,3583],{"class":97,"line":1311},[95,3584,2511],{"class":105},[95,3586,3587,3589,3591],{"class":97,"line":1594},[95,3588,3433],{"class":105},[95,3590,1150],{"class":101},[95,3592,1173],{"class":105},[95,3594,3595],{"class":97,"line":1599},[95,3596,2169],{"class":105},[95,3598,3599],{"class":97,"line":1605},[95,3600,1547],{"class":105},[66,3602,3604],{"id":3603},"_163跳出语句","1.6.3跳出语句",[49,3606,3607],{},[52,3608,3609],{},"break语句\n作用：用于跳出选择结构或者循环结构",[10,3611,3612],{},"break使用时机：",[1113,3614,3615,3618,3621],{},[52,3616,3617],{},"出现在switch条件语句中，作用是终止case并跳出switch",[52,3619,3620],{},"出现在循环结构中，作用是跳出当前的循环结构",[52,3622,3623],{},"出现在嵌套循环中，跳出最近的内层循环语句",[49,3625,3626,3629],{"start":15},[52,3627,3628],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[52,3630,3631],{},"goto语句\n语法：goto 标记;",[10,3633,3634],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[86,3636,3638],{"className":88,"code":3637,"language":90,"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",[92,3639,3640,3648,3652,3665,3675,3688,3701,3714,3722,3738],{"__ignoreMap":14},[95,3641,3642,3644,3646],{"class":97,"line":98},[95,3643,109],{"class":101},[95,3645,1955],{"class":1945},[95,3647,1958],{"class":105},[95,3649,3650],{"class":97,"line":15},[95,3651,1528],{"class":105},[95,3653,3654,3656,3658,3661,3663],{"class":97,"line":1161},[95,3655,1533],{"class":105},[95,3657,1150],{"class":101},[95,3659,3660],{"class":210},"\"1\"",[95,3662,1150],{"class":101},[95,3664,1173],{"class":105},[95,3666,3667,3670,3673],{"class":97,"line":1176},[95,3668,3669],{"class":101},"    goto",[95,3671,3672],{"class":1945}," FLAG",[95,3674,1272],{"class":105},[95,3676,3677,3679,3681,3684,3686],{"class":97,"line":1182},[95,3678,1533],{"class":105},[95,3680,1150],{"class":101},[95,3682,3683],{"class":210},"\"2\"",[95,3685,1150],{"class":101},[95,3687,1173],{"class":105},[95,3689,3690,3692,3694,3697,3699],{"class":97,"line":1196},[95,3691,1533],{"class":105},[95,3693,1150],{"class":101},[95,3695,3696],{"class":210},"\"3\"",[95,3698,1150],{"class":101},[95,3700,1173],{"class":105},[95,3702,3703,3705,3707,3710,3712],{"class":97,"line":1202},[95,3704,1533],{"class":105},[95,3706,1150],{"class":101},[95,3708,3709],{"class":210},"\"4\"",[95,3711,1150],{"class":101},[95,3713,1173],{"class":105},[95,3715,3716,3719],{"class":97,"line":1293},[95,3717,3718],{"class":1945},"    FLAG",[95,3720,3721],{"class":105},":\n",[95,3723,3724,3726,3728,3731,3733,3735],{"class":97,"line":1299},[95,3725,1533],{"class":105},[95,3727,1150],{"class":101},[95,3729,3730],{"class":210},"\"5\"",[95,3732,1150],{"class":101},[95,3734,1220],{"class":105},[95,3736,3737],{"class":164},"\u002F\u002F跳过了2,3,4,直接到5\n",[95,3739,3740],{"class":97,"line":1311},[95,3741,1547],{"class":105},[37,3743,3745],{"id":3744},"_17数组","1.7数组",[66,3747,3749],{"id":3748},"_171一维数组","1.7.1一维数组",[49,3751,3752],{},[52,3753,3754],{},"一维数组定义方式",[243,3756,3757,3767],{},[246,3758,3759],{},[249,3760,3761,3764],{},[252,3762,3763],{},"方式",[252,3765,3766],{},"注意事项",[290,3768,3769,3783,3793],{},[249,3770,3771,3777],{},[295,3772,3773,3774,161],{},"数据类型 数组名",[95,3775,3776],{},"数组长度",[295,3778,3779,3780,3782],{},"这种方式是先定义再arr",[95,3781,547],{},"赋值",[249,3784,3785,3790],{},[295,3786,3773,3787,3789],{},[95,3788,3776],{},"={值1,值2....};",[295,3791,3792],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[249,3794,3795,3799],{},[295,3796,3773,3797,3789],{},[95,3798],{},[295,3800,3801,3802,3804],{},"int arr",[95,3803],{},";这是不正确的，按照这样的方式定义必须有初始长度",[49,3806,3807],{"start":15},[52,3808,3809],{},"一维数组数组名\n用途：",[1113,3811,3812],{},[52,3813,3814],{},"1.可以统计整个数组在内存中的长度：",[86,3816,3818],{"className":88,"code":3817,"language":90,"meta":14,"style":14},"sizeof(arr);\nsizeof(arr[0]);\n",[92,3819,3820,3827],{"__ignoreMap":14},[95,3821,3822,3824],{"class":97,"line":98},[95,3823,102],{"class":101},[95,3825,3826],{"class":105},"(arr);\n",[95,3828,3829,3831,3834,3836],{"class":97,"line":15},[95,3830,102],{"class":101},[95,3832,3833],{"class":105},"(arr[",[95,3835,297],{"class":154},[95,3837,3838],{"class":105},"]);\n",[1113,3840,3841],{},[52,3842,3843],{},"2.可以获取数组在内存中的首地址:",[86,3845,3847],{"className":88,"code":3846,"language":90,"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",[92,3848,3849,3854,3867,3872],{"__ignoreMap":14},[95,3850,3851],{"class":97,"line":98},[95,3852,3853],{"class":164},"\u002F\u002F查看16进制的首地址\n",[95,3855,3856,3858,3860,3863,3865],{"class":97,"line":15},[95,3857,1351],{"class":105},[95,3859,1150],{"class":101},[95,3861,3862],{"class":105},"arr",[95,3864,1150],{"class":101},[95,3866,1173],{"class":105},[95,3868,3869],{"class":97,"line":1161},[95,3870,3871],{"class":164},"\u002F\u002F看10进制数\n",[95,3873,3874,3876,3878,3880,3882,3884,3886,3889,3891,3893,3895],{"class":97,"line":1176},[95,3875,1351],{"class":105},[95,3877,1150],{"class":101},[95,3879,106],{"class":105},[95,3881,109],{"class":101},[95,3883,535],{"class":105},[95,3885,459],{"class":101},[95,3887,3888],{"class":105},"arr[",[95,3890,297],{"class":154},[95,3892,1046],{"class":105},[95,3894,1150],{"class":101},[95,3896,1173],{"class":105},[10,3898,3899],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1113,3901,3902],{},[52,3903,3904],{},"1️⃣五只小猪称体重",[86,3906,3908],{"className":88,"code":3907,"language":90,"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",[92,3909,3910,3916,3926,3934,3938,3978,3991,4017,4021,4033,4037,4047,4051,4055,4068,4078],{"__ignoreMap":14},[95,3911,3912,3914],{"class":97,"line":98},[95,3913,1931],{"class":101},[95,3915,1934],{"class":210},[95,3917,3918,3920,3922,3924],{"class":97,"line":15},[95,3919,1939],{"class":101},[95,3921,1942],{"class":101},[95,3923,1946],{"class":1945},[95,3925,1272],{"class":105},[95,3927,3928,3930,3932],{"class":97,"line":1161},[95,3929,109],{"class":101},[95,3931,1955],{"class":1945},[95,3933,1958],{"class":105},[95,3935,3936],{"class":97,"line":1176},[95,3937,1528],{"class":105},[95,3939,3940,3942,3945,3947,3949,3951,3953,3956,3958,3961,3963,3965,3967,3970,3972,3975],{"class":97,"line":1182},[95,3941,1967],{"class":101},[95,3943,3944],{"class":105}," arr[",[95,3946,425],{"class":154},[95,3948,1046],{"class":105},[95,3950,151],{"class":101},[95,3952,1002],{"class":105},[95,3954,3955],{"class":154},"300",[95,3957,484],{"class":105},[95,3959,3960],{"class":154},"350",[95,3962,484],{"class":105},[95,3964,1704],{"class":154},[95,3966,484],{"class":105},[95,3968,3969],{"class":154},"400",[95,3971,484],{"class":105},[95,3973,3974],{"class":154},"250",[95,3976,3977],{"class":105},"};\n",[95,3979,3980,3982,3985,3987,3989],{"class":97,"line":1196},[95,3981,1967],{"class":101},[95,3983,3984],{"class":105}," tmp",[95,3986,151],{"class":101},[95,3988,297],{"class":154},[95,3990,1272],{"class":105},[95,3992,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015],{"class":97,"line":1202},[95,3994,3183],{"class":101},[95,3996,1640],{"class":105},[95,3998,109],{"class":101},[95,4000,3014],{"class":105},[95,4002,151],{"class":101},[95,4004,297],{"class":154},[95,4006,3021],{"class":105},[95,4008,1016],{"class":101},[95,4010,425],{"class":154},[95,4012,3021],{"class":105},[95,4014,2274],{"class":101},[95,4016,112],{"class":105},[95,4018,4019],{"class":97,"line":1293},[95,4020,2012],{"class":105},[95,4022,4023,4025,4028,4030],{"class":97,"line":1299},[95,4024,2479],{"class":101},[95,4026,4027],{"class":105},"(tmp",[95,4029,1016],{"class":101},[95,4031,4032],{"class":105},"arr[i])\n",[95,4034,4035],{"class":97,"line":1311},[95,4036,2492],{"class":105},[95,4038,4039,4042,4044],{"class":97,"line":1594},[95,4040,4041],{"class":105},"            tmp",[95,4043,151],{"class":101},[95,4045,4046],{"class":105},"arr[i];\n",[95,4048,4049],{"class":97,"line":1599},[95,4050,2511],{"class":105},[95,4052,4053],{"class":97,"line":1605},[95,4054,2169],{"class":105},[95,4056,4057,4059,4061,4064,4066],{"class":97,"line":1610},[95,4058,1533],{"class":105},[95,4060,1150],{"class":101},[95,4062,4063],{"class":105},"tmp",[95,4065,1150],{"class":101},[95,4067,1173],{"class":105},[95,4069,4070,4073,4076],{"class":97,"line":1624},[95,4071,4072],{"class":101},"    return",[95,4074,4075],{"class":154}," 0",[95,4077,1272],{"class":105},[95,4079,4080],{"class":97,"line":1629},[95,4081,1547],{"class":105},[1113,4083,4084],{},[52,4085,4086],{},"2️⃣数组元素逆置",[86,4088,4090],{"className":88,"code":4089,"language":90,"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",[92,4091,4092,4097,4103,4113,4121,4125,4160,4176,4208,4221,4226,4231,4243,4253,4263,4268,4277,4287,4292,4297,4324,4328,4344,4348,4359,4368],{"__ignoreMap":14},[95,4093,4094],{"class":97,"line":98},[95,4095,4096],{"class":164},"\u002F\u002F元素逆置\n",[95,4098,4099,4101],{"class":97,"line":15},[95,4100,1931],{"class":101},[95,4102,1934],{"class":210},[95,4104,4105,4107,4109,4111],{"class":97,"line":1161},[95,4106,1939],{"class":101},[95,4108,1942],{"class":101},[95,4110,1946],{"class":1945},[95,4112,1272],{"class":105},[95,4114,4115,4117,4119],{"class":97,"line":1176},[95,4116,109],{"class":101},[95,4118,1955],{"class":1945},[95,4120,1958],{"class":105},[95,4122,4123],{"class":97,"line":1182},[95,4124,1528],{"class":105},[95,4126,4127,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158],{"class":97,"line":1196},[95,4128,4129],{"class":101},"   int",[95,4131,3944],{"class":105},[95,4133,425],{"class":154},[95,4135,1046],{"class":105},[95,4137,151],{"class":101},[95,4139,1002],{"class":105},[95,4141,323],{"class":154},[95,4143,484],{"class":105},[95,4145,183],{"class":154},[95,4147,484],{"class":105},[95,4149,177],{"class":154},[95,4151,484],{"class":105},[95,4153,399],{"class":154},[95,4155,484],{"class":105},[95,4157,425],{"class":154},[95,4159,3977],{"class":105},[95,4161,4162,4164,4167,4169,4171,4173],{"class":97,"line":1202},[95,4163,4129],{"class":101},[95,4165,4166],{"class":105}," start",[95,4168,151],{"class":101},[95,4170,297],{"class":154},[95,4172,161],{"class":105},[95,4174,4175],{"class":164},"\u002F\u002F起始下标\n",[95,4177,4178,4180,4183,4186,4189,4192,4194,4196,4199,4201,4203,4205],{"class":97,"line":1293},[95,4179,4129],{"class":101},[95,4181,4182],{"class":105}," end",[95,4184,4185],{"class":101},"=sizeof",[95,4187,4188],{"class":105},"(arr)",[95,4190,4191],{"class":101},"\u002Fsizeof",[95,4193,3833],{"class":105},[95,4195,297],{"class":154},[95,4197,4198],{"class":105},"])",[95,4200,638],{"class":101},[95,4202,323],{"class":154},[95,4204,161],{"class":105},[95,4206,4207],{"class":164},"\u002F\u002F结束下标\n",[95,4209,4210,4213,4216,4218],{"class":97,"line":1299},[95,4211,4212],{"class":101},"   while",[95,4214,4215],{"class":105}," (start",[95,4217,1016],{"class":101},[95,4219,4220],{"class":105},"end)\n",[95,4222,4223],{"class":97,"line":1311},[95,4224,4225],{"class":105},"   {\n",[95,4227,4228],{"class":97,"line":1594},[95,4229,4230],{"class":164},"    \u002F\u002F实现元素互换代码\n",[95,4232,4233,4235,4238,4240],{"class":97,"line":1599},[95,4234,1967],{"class":101},[95,4236,4237],{"class":105}," temp",[95,4239,151],{"class":101},[95,4241,4242],{"class":105},"arr[start];\n",[95,4244,4245,4248,4250],{"class":97,"line":1605},[95,4246,4247],{"class":105},"    arr[start]",[95,4249,151],{"class":101},[95,4251,4252],{"class":105},"arr[end];\n",[95,4254,4255,4258,4260],{"class":97,"line":1610},[95,4256,4257],{"class":105},"    arr[end]",[95,4259,151],{"class":101},[95,4261,4262],{"class":105},"temp;\n",[95,4264,4265],{"class":97,"line":1624},[95,4266,4267],{"class":164},"    \u002F\u002F下标更新\n",[95,4269,4270,4273,4275],{"class":97,"line":1629},[95,4271,4272],{"class":105},"    start",[95,4274,2274],{"class":101},[95,4276,1272],{"class":105},[95,4278,4279,4282,4285],{"class":97,"line":1635},[95,4280,4281],{"class":105},"    end",[95,4283,4284],{"class":101},"--",[95,4286,1272],{"class":105},[95,4288,4289],{"class":97,"line":1656},[95,4290,4291],{"class":105},"   }\n",[95,4293,4294],{"class":97,"line":1661},[95,4295,4296],{"class":164},"   \u002F\u002F输出逆置后的数组\n",[95,4298,4299,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322],{"class":97,"line":1675},[95,4300,4301],{"class":101},"   for",[95,4303,1640],{"class":105},[95,4305,109],{"class":101},[95,4307,3014],{"class":105},[95,4309,151],{"class":101},[95,4311,297],{"class":154},[95,4313,3021],{"class":105},[95,4315,1016],{"class":101},[95,4317,425],{"class":154},[95,4319,3021],{"class":105},[95,4321,2274],{"class":101},[95,4323,112],{"class":105},[95,4325,4326],{"class":97,"line":1680},[95,4327,4225],{"class":105},[95,4329,4330,4332,4334,4337,4339,4342],{"class":97,"line":1709},[95,4331,1533],{"class":105},[95,4333,1150],{"class":101},[95,4335,4336],{"class":105},"arr[i]",[95,4338,1150],{"class":101},[95,4340,4341],{"class":210},"\" \"",[95,4343,1272],{"class":105},[95,4345,4346],{"class":97,"line":1714},[95,4347,4291],{"class":105},[95,4349,4350,4353,4355,4357],{"class":97,"line":1731},[95,4351,4352],{"class":1945},"   system",[95,4354,106],{"class":105},[95,4356,2290],{"class":210},[95,4358,2701],{"class":105},[95,4360,4361,4364,4366],{"class":97,"line":1736},[95,4362,4363],{"class":101},"   return",[95,4365,4075],{"class":154},[95,4367,1272],{"class":105},[95,4369,4370],{"class":97,"line":1741},[95,4371,1547],{"class":105},[1113,4373,4374],{},[52,4375,4376],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[86,4378,4380],{"className":88,"code":4379,"language":90,"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",[92,4381,4382,4387,4393,4403,4411,4415,4467,4480,4506,4510,4524,4528,4533,4538,4568,4572,4577,4611,4615,4620,4640,4645,4657,4673,4688,4693,4697,4701,4714,4740,4744,4758,4762,4770],{"__ignoreMap":14},[95,4383,4384],{"class":97,"line":98},[95,4385,4386],{"class":164},"\u002F\u002F冒泡排序,升序\n",[95,4388,4389,4391],{"class":97,"line":15},[95,4390,1931],{"class":101},[95,4392,1934],{"class":210},[95,4394,4395,4397,4399,4401],{"class":97,"line":1161},[95,4396,1939],{"class":101},[95,4398,1942],{"class":101},[95,4400,1946],{"class":1945},[95,4402,1272],{"class":105},[95,4404,4405,4407,4409],{"class":97,"line":1176},[95,4406,109],{"class":101},[95,4408,1955],{"class":1945},[95,4410,1958],{"class":105},[95,4412,4413],{"class":97,"line":1182},[95,4414,1528],{"class":105},[95,4416,4417,4419,4421,4423,4426,4428,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465],{"class":97,"line":1196},[95,4418,1967],{"class":101},[95,4420,3944],{"class":105},[95,4422,526],{"class":154},[95,4424,4425],{"class":105},"] ",[95,4427,151],{"class":101},[95,4429,4430],{"class":105}," {",[95,4432,399],{"class":154},[95,4434,484],{"class":105},[95,4436,183],{"class":154},[95,4438,484],{"class":105},[95,4440,501],{"class":154},[95,4442,484],{"class":105},[95,4444,297],{"class":154},[95,4446,484],{"class":105},[95,4448,425],{"class":154},[95,4450,484],{"class":105},[95,4452,475],{"class":154},[95,4454,484],{"class":105},[95,4456,323],{"class":154},[95,4458,484],{"class":105},[95,4460,177],{"class":154},[95,4462,484],{"class":105},[95,4464,526],{"class":154},[95,4466,3977],{"class":105},[95,4468,4469,4471,4473,4476,4478],{"class":97,"line":1202},[95,4470,1533],{"class":105},[95,4472,1150],{"class":101},[95,4474,4475],{"class":210},"\"排序前：\"",[95,4477,1150],{"class":101},[95,4479,1173],{"class":105},[95,4481,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504],{"class":97,"line":1293},[95,4483,3183],{"class":101},[95,4485,1640],{"class":105},[95,4487,109],{"class":101},[95,4489,3014],{"class":105},[95,4491,151],{"class":101},[95,4493,297],{"class":154},[95,4495,3021],{"class":105},[95,4497,1016],{"class":101},[95,4499,526],{"class":154},[95,4501,3021],{"class":105},[95,4503,2274],{"class":101},[95,4505,112],{"class":105},[95,4507,4508],{"class":97,"line":1299},[95,4509,2012],{"class":105},[95,4511,4512,4514,4516,4518,4520,4522],{"class":97,"line":1311},[95,4513,3433],{"class":105},[95,4515,1150],{"class":101},[95,4517,4336],{"class":105},[95,4519,1150],{"class":101},[95,4521,4341],{"class":210},[95,4523,1272],{"class":105},[95,4525,4526],{"class":97,"line":1594},[95,4527,2169],{"class":105},[95,4529,4530],{"class":97,"line":1599},[95,4531,4532],{"class":164},"    \u002F\u002F开始冒泡排序\n",[95,4534,4535],{"class":97,"line":1605},[95,4536,4537],{"class":164},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[95,4539,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566],{"class":97,"line":1610},[95,4541,3183],{"class":101},[95,4543,1640],{"class":105},[95,4545,109],{"class":101},[95,4547,3014],{"class":105},[95,4549,151],{"class":101},[95,4551,297],{"class":154},[95,4553,3021],{"class":105},[95,4555,1016],{"class":101},[95,4557,526],{"class":154},[95,4559,638],{"class":101},[95,4561,323],{"class":154},[95,4563,3021],{"class":105},[95,4565,2274],{"class":101},[95,4567,112],{"class":105},[95,4569,4570],{"class":97,"line":1624},[95,4571,2012],{"class":105},[95,4573,4574],{"class":97,"line":1629},[95,4575,4576],{"class":164},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[95,4578,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609],{"class":97,"line":1635},[95,4580,3385],{"class":101},[95,4582,1640],{"class":105},[95,4584,109],{"class":101},[95,4586,3392],{"class":105},[95,4588,151],{"class":101},[95,4590,297],{"class":154},[95,4592,3399],{"class":105},[95,4594,1016],{"class":101},[95,4596,526],{"class":154},[95,4598,638],{"class":101},[95,4600,547],{"class":105},[95,4602,638],{"class":101},[95,4604,323],{"class":154},[95,4606,3399],{"class":105},[95,4608,2274],{"class":101},[95,4610,112],{"class":105},[95,4612,4613],{"class":97,"line":1656},[95,4614,2492],{"class":105},[95,4616,4617],{"class":97,"line":1661},[95,4618,4619],{"class":164},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[95,4621,4622,4625,4628,4630,4633,4635,4637],{"class":97,"line":1675},[95,4623,4624],{"class":101},"            if",[95,4626,4627],{"class":105},"(arr[j]",[95,4629,1066],{"class":101},[95,4631,4632],{"class":105},"arr[j",[95,4634,587],{"class":101},[95,4636,323],{"class":154},[95,4638,4639],{"class":105},"])\n",[95,4641,4642],{"class":97,"line":1680},[95,4643,4644],{"class":105},"            {\n",[95,4646,4647,4650,4652,4654],{"class":97,"line":1709},[95,4648,4649],{"class":101},"                int",[95,4651,4237],{"class":105},[95,4653,151],{"class":101},[95,4655,4656],{"class":105},"arr[j];\n",[95,4658,4659,4662,4664,4666,4668,4670],{"class":97,"line":1714},[95,4660,4661],{"class":105},"                arr[j]",[95,4663,151],{"class":101},[95,4665,4632],{"class":105},[95,4667,587],{"class":101},[95,4669,323],{"class":154},[95,4671,4672],{"class":105},"];\n",[95,4674,4675,4678,4680,4682,4684,4686],{"class":97,"line":1731},[95,4676,4677],{"class":105},"                arr[j",[95,4679,587],{"class":101},[95,4681,323],{"class":154},[95,4683,1046],{"class":105},[95,4685,151],{"class":101},[95,4687,4262],{"class":105},[95,4689,4690],{"class":97,"line":1736},[95,4691,4692],{"class":105},"            }\n",[95,4694,4695],{"class":97,"line":1741},[95,4696,2511],{"class":105},[95,4698,4699],{"class":97,"line":1746},[95,4700,2169],{"class":105},[95,4702,4703,4705,4707,4710,4712],{"class":97,"line":1760},[95,4704,1533],{"class":105},[95,4706,1150],{"class":101},[95,4708,4709],{"class":210},"\"排序后：\"",[95,4711,1150],{"class":101},[95,4713,1173],{"class":105},[95,4715,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738],{"class":97,"line":1765},[95,4717,3183],{"class":101},[95,4719,1640],{"class":105},[95,4721,109],{"class":101},[95,4723,3014],{"class":105},[95,4725,151],{"class":101},[95,4727,297],{"class":154},[95,4729,3021],{"class":105},[95,4731,1016],{"class":101},[95,4733,526],{"class":154},[95,4735,3021],{"class":105},[95,4737,2274],{"class":101},[95,4739,112],{"class":105},[95,4741,4742],{"class":97,"line":2559},[95,4743,2012],{"class":105},[95,4745,4746,4748,4750,4752,4754,4756],{"class":97,"line":2573},[95,4747,3433],{"class":105},[95,4749,1150],{"class":101},[95,4751,4336],{"class":105},[95,4753,1150],{"class":101},[95,4755,4341],{"class":210},[95,4757,1272],{"class":105},[95,4759,4760],{"class":97,"line":2581},[95,4761,2169],{"class":105},[95,4763,4764,4766,4768],{"class":97,"line":2586},[95,4765,4072],{"class":101},[95,4767,4075],{"class":154},[95,4769,1272],{"class":105},[95,4771,4772],{"class":97,"line":2592},[95,4773,1547],{"class":105},[66,4775,4777],{"id":4776},"_172二维数组","1.7.2二维数组",[49,4779,4780],{},[52,4781,4782],{},"二维数组的四种定义方式",[243,4784,4785,4794],{},[246,4786,4787],{},[249,4788,4789,4792],{},[252,4790,4791],{},"序号",[252,4793,3763],{},[290,4795,4796,4806,4815,4824,4833],{},[249,4797,4798,4800],{},[295,4799,323],{},[295,4801,4802,4803,161],{},"数据类型 数组名[行数]",[95,4804,4805],{},"列数",[249,4807,4808,4810],{},[295,4809,183],{},[295,4811,4802,4812,4814],{},[95,4813,4805],{},"={ {数据1,数据2}，{数据3，数据4}... }",[249,4816,4817,4819],{},[295,4818,177],{},[295,4820,4802,4821,4823],{},[95,4822,4805],{},"={数据1,数据2,数据3...}",[249,4825,4826,4828],{},[295,4827,399],{},[295,4829,4830,4831,4823],{},"数据类型 数组名[]",[95,4832,4805],{},[249,4834,4835,4838],{},[295,4836,4837],{},"注意：不能只省略列数",[295,4839],{},[49,4841,4842],{"start":15},[52,4843,4844],{},"二维数组数组名",[1113,4846,4847,4850],{},[52,4848,4849],{},"1.查看二维数组所占内存空间",[52,4851,4852],{},"2.获取二维数组首地址",[10,4854,4855],{},"已知二维数组，求二维数组的行数与列数",[86,4857,4859],{"className":88,"code":4858,"language":90,"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",[92,4860,4861,4869,4873,4891,4895,4913,4929,4934,4959,4992],{"__ignoreMap":14},[95,4862,4863,4865,4867],{"class":97,"line":98},[95,4864,109],{"class":101},[95,4866,1955],{"class":1945},[95,4868,1958],{"class":105},[95,4870,4871],{"class":97,"line":15},[95,4872,1528],{"class":105},[95,4874,4875,4877,4879,4881,4884,4886,4888],{"class":97,"line":1161},[95,4876,1967],{"class":101},[95,4878,3944],{"class":105},[95,4880,183],{"class":154},[95,4882,4883],{"class":105},"][",[95,4885,177],{"class":154},[95,4887,1046],{"class":105},[95,4889,4890],{"class":101},"=\n",[95,4892,4893],{"class":97,"line":1176},[95,4894,2012],{"class":105},[95,4896,4897,4900,4902,4904,4906,4908,4910],{"class":97,"line":1182},[95,4898,4899],{"class":105},"        {",[95,4901,323],{"class":154},[95,4903,484],{"class":105},[95,4905,183],{"class":154},[95,4907,484],{"class":105},[95,4909,177],{"class":154},[95,4911,4912],{"class":105},"},\n",[95,4914,4915,4917,4919,4921,4923,4925,4927],{"class":97,"line":1196},[95,4916,4899],{"class":105},[95,4918,399],{"class":154},[95,4920,484],{"class":105},[95,4922,425],{"class":154},[95,4924,484],{"class":105},[95,4926,450],{"class":154},[95,4928,1547],{"class":105},[95,4930,4931],{"class":97,"line":1202},[95,4932,4933],{"class":105},"    };\n",[95,4935,4936,4938,4940,4943,4945,4947,4949,4951,4953,4955,4957],{"class":97,"line":1293},[95,4937,1533],{"class":105},[95,4939,1150],{"class":101},[95,4941,4942],{"class":210},"\"二维数组的行数\"",[95,4944,1354],{"class":101},[95,4946,4188],{"class":105},[95,4948,4191],{"class":101},[95,4950,3833],{"class":105},[95,4952,297],{"class":154},[95,4954,4198],{"class":105},[95,4956,1150],{"class":101},[95,4958,1173],{"class":105},[95,4960,4961,4963,4965,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986,4988,4990],{"class":97,"line":1299},[95,4962,1533],{"class":105},[95,4964,1150],{"class":101},[95,4966,4967],{"class":210},"\"二维数组的列数\"",[95,4969,1354],{"class":101},[95,4971,3833],{"class":105},[95,4973,297],{"class":154},[95,4975,4198],{"class":105},[95,4977,4191],{"class":101},[95,4979,3833],{"class":105},[95,4981,297],{"class":154},[95,4983,4883],{"class":105},[95,4985,297],{"class":154},[95,4987,4198],{"class":105},[95,4989,1150],{"class":101},[95,4991,1173],{"class":105},[95,4993,4994],{"class":97,"line":1311},[95,4995,1547],{"class":105},[10,4997,4998],{},"查看二维数组首地址",[86,5000,5002],{"className":88,"code":5001,"language":90,"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",[92,5003,5004,5021,5047,5072],{"__ignoreMap":14},[95,5005,5006,5008,5010,5013,5015,5017,5019],{"class":97,"line":98},[95,5007,1351],{"class":105},[95,5009,1150],{"class":101},[95,5011,5012],{"class":210},"\"二维数组首地址：\"",[95,5014,1150],{"class":101},[95,5016,3862],{"class":105},[95,5018,1150],{"class":101},[95,5020,1173],{"class":105},[95,5022,5023,5025,5027,5030,5032,5034,5036,5039,5041,5043,5045],{"class":97,"line":15},[95,5024,1351],{"class":105},[95,5026,1150],{"class":101},[95,5028,5029],{"class":210},"\"二维数组第一行的首地址：\"",[95,5031,1150],{"class":101},[95,5033,106],{"class":105},[95,5035,109],{"class":101},[95,5037,5038],{"class":105},")arr[",[95,5040,297],{"class":154},[95,5042,1046],{"class":105},[95,5044,1150],{"class":101},[95,5046,1173],{"class":105},[95,5048,5049,5051,5053,5056,5058,5060,5062,5064,5066,5068,5070],{"class":97,"line":1161},[95,5050,1351],{"class":105},[95,5052,1150],{"class":101},[95,5054,5055],{"class":210},"\"二维数组第二行的首地址：\"",[95,5057,1150],{"class":101},[95,5059,106],{"class":105},[95,5061,109],{"class":101},[95,5063,5038],{"class":105},[95,5065,323],{"class":154},[95,5067,1046],{"class":105},[95,5069,1150],{"class":101},[95,5071,1173],{"class":105},[95,5073,5074,5076,5078,5081,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101,5103,5105],{"class":97,"line":1176},[95,5075,1351],{"class":105},[95,5077,1150],{"class":101},[95,5079,5080],{"class":210},"\"二维数组第一个元素的首地址:\"",[95,5082,1150],{"class":101},[95,5084,106],{"class":105},[95,5086,109],{"class":101},[95,5088,535],{"class":105},[95,5090,459],{"class":101},[95,5092,3888],{"class":105},[95,5094,297],{"class":154},[95,5096,4883],{"class":105},[95,5098,297],{"class":154},[95,5100,1046],{"class":105},[95,5102,1150],{"class":101},[95,5104,1220],{"class":105},[95,5106,5107],{"class":164},"\u002F\u002F对于数，要加取址符\n",[5109,5110,5111],"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":5113},[5114,5115,5116,5124,5125,5131,5136],{"id":39,"depth":15,"text":40},{"id":46,"depth":15,"text":47},{"id":63,"depth":15,"text":64,"children":5117},[5118,5119,5120,5121,5122,5123],{"id":68,"depth":1161,"text":69},{"id":122,"depth":1161,"text":123},{"id":191,"depth":1161,"text":192},{"id":1131,"depth":1161,"text":1132},{"id":1226,"depth":1161,"text":1227},{"id":1325,"depth":1161,"text":1326},{"id":1367,"depth":15,"text":1368},{"id":1435,"depth":15,"text":1436,"children":5126},[5127,5128,5129,5130],{"id":1439,"depth":1161,"text":1440},{"id":1461,"depth":1161,"text":1462},{"id":1470,"depth":1161,"text":1471},{"id":1479,"depth":1161,"text":1480},{"id":1488,"depth":15,"text":1489,"children":5132},[5133,5134,5135],{"id":1492,"depth":1161,"text":1493},{"id":2187,"depth":1161,"text":2188},{"id":3603,"depth":1161,"text":3604},{"id":3744,"depth":15,"text":3745,"children":5137},[5138,5139],{"id":3748,"depth":1161,"text":3749},{"id":4776,"depth":1161,"text":4777},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":29,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5146,"title":5147,"body":5148,"description":14,"extension":18,"meta":6248,"navigation":21,"path":6249,"seo":6250,"stem":6251,"__hash__":6252},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5149,"toc":6240},[5150,5153,5157,5165,5173,5176,5242,5246,5249,5325,5329,5332,5335,5338,5551,5555,5560,5624,5629,5696,5701,5792,5795,5900,5904,5907,5913,6057,6061,6064,6078,6081,6126,6129,6237],[33,5151,5147],{"id":5152},"_2函数",[37,5154,5156],{"id":5155},"_21函数概述","2.1函数概述",[49,5158,5159,5162],{},[52,5160,5161],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[52,5163,5164],{},"语法：",[86,5166,5171],{"className":5167,"code":5169,"language":5170,"meta":14},[5168],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[92,5172,5169],{"__ignoreMap":14},[10,5174,5175],{},"小案例",[86,5177,5179],{"className":88,"code":5178,"language":90,"meta":14,"style":14},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[92,5180,5181,5186,5210,5214,5231,5238],{"__ignoreMap":14},[95,5182,5183],{"class":97,"line":98},[95,5184,5185],{"class":164},"\u002F\u002Fnum1,num2形参\n",[95,5187,5188,5190,5193,5195,5197,5201,5203,5205,5208],{"class":97,"line":15},[95,5189,109],{"class":101},[95,5191,5192],{"class":1945}," add",[95,5194,106],{"class":105},[95,5196,109],{"class":101},[95,5198,5200],{"class":5199},"s4XuR"," num1",[95,5202,484],{"class":105},[95,5204,109],{"class":101},[95,5206,5207],{"class":5199}," num2",[95,5209,112],{"class":105},[95,5211,5212],{"class":97,"line":1161},[95,5213,1528],{"class":105},[95,5215,5216,5218,5221,5223,5226,5228],{"class":97,"line":1176},[95,5217,1967],{"class":101},[95,5219,5220],{"class":105}," sum",[95,5222,151],{"class":101},[95,5224,5225],{"class":105},"num1",[95,5227,587],{"class":101},[95,5229,5230],{"class":105},"num2;\n",[95,5232,5233,5235],{"class":97,"line":1182},[95,5234,4072],{"class":101},[95,5236,5237],{"class":105}," sum;\n",[95,5239,5240],{"class":97,"line":1196},[95,5241,1547],{"class":105},[37,5243,5245],{"id":5244},"_22函数调用","2.2函数调用",[10,5247,5248],{},"调用刚刚写的求和函数",[86,5250,5252],{"className":88,"code":5251,"language":90,"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",[92,5253,5254,5262,5266,5271,5283,5295,5304,5309,5321],{"__ignoreMap":14},[95,5255,5256,5258,5260],{"class":97,"line":98},[95,5257,109],{"class":101},[95,5259,1955],{"class":1945},[95,5261,1958],{"class":105},[95,5263,5264],{"class":97,"line":15},[95,5265,1528],{"class":105},[95,5267,5268],{"class":97,"line":1161},[95,5269,5270],{"class":164},"    \u002F\u002Fa,b实参\n",[95,5272,5273,5275,5277,5279,5281],{"class":97,"line":1176},[95,5274,1967],{"class":101},[95,5276,1380],{"class":105},[95,5278,151],{"class":101},[95,5280,297],{"class":154},[95,5282,1272],{"class":105},[95,5284,5285,5287,5289,5291,5293],{"class":97,"line":1182},[95,5286,1967],{"class":101},[95,5288,2815],{"class":105},[95,5290,151],{"class":101},[95,5292,297],{"class":154},[95,5294,1272],{"class":105},[95,5296,5297,5299,5301],{"class":97,"line":1196},[95,5298,1994],{"class":105},[95,5300,1411],{"class":101},[95,5302,5303],{"class":105},"a,b;\n",[95,5305,5306],{"class":97,"line":1202},[95,5307,5308],{"class":164},"    \u002F\u002F调用函数时，实参值传给了形参\n",[95,5310,5311,5313,5315,5318],{"class":97,"line":1293},[95,5312,1533],{"class":105},[95,5314,1150],{"class":101},[95,5316,5317],{"class":1945},"add",[95,5319,5320],{"class":105},"(a,b);\n",[95,5322,5323],{"class":97,"line":1299},[95,5324,1547],{"class":105},[37,5326,5328],{"id":5327},"_23值传递","2.3值传递",[10,5330,5331],{},"值传递就是函数调用时实参将数值传给形参",[10,5333,5334],{},"值传递时，如果形参发生任何改变，不会影响实参",[10,5336,5337],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[86,5339,5341],{"className":88,"code":5340,"language":90,"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",[92,5342,5343,5365,5369,5382,5399,5417,5428,5437,5446,5459,5475,5491,5500,5504,5512,5516,5528,5540,5547],{"__ignoreMap":14},[95,5344,5345,5348,5351,5353,5355,5357,5359,5361,5363],{"class":97,"line":98},[95,5346,5347],{"class":101},"void",[95,5349,5350],{"class":1945}," swap",[95,5352,106],{"class":105},[95,5354,109],{"class":101},[95,5356,5200],{"class":5199},[95,5358,484],{"class":105},[95,5360,109],{"class":101},[95,5362,5207],{"class":5199},[95,5364,112],{"class":105},[95,5366,5367],{"class":97,"line":15},[95,5368,1528],{"class":105},[95,5370,5371,5373,5375,5378,5380],{"class":97,"line":1161},[95,5372,1533],{"class":105},[95,5374,1150],{"class":101},[95,5376,5377],{"class":210},"\"交换前：\"",[95,5379,1150],{"class":101},[95,5381,1173],{"class":105},[95,5383,5384,5386,5388,5391,5393,5395,5397],{"class":97,"line":1176},[95,5385,1533],{"class":105},[95,5387,1150],{"class":101},[95,5389,5390],{"class":210},"\"num1=\"",[95,5392,1150],{"class":101},[95,5394,5225],{"class":105},[95,5396,1150],{"class":101},[95,5398,1173],{"class":105},[95,5400,5401,5403,5405,5408,5410,5413,5415],{"class":97,"line":1182},[95,5402,1533],{"class":105},[95,5404,1150],{"class":101},[95,5406,5407],{"class":210},"\"num2=\"",[95,5409,1150],{"class":101},[95,5411,5412],{"class":105},"num2",[95,5414,1150],{"class":101},[95,5416,1173],{"class":105},[95,5418,5419,5421,5423,5425],{"class":97,"line":1196},[95,5420,1967],{"class":101},[95,5422,4237],{"class":105},[95,5424,151],{"class":101},[95,5426,5427],{"class":105},"num1;\n",[95,5429,5430,5433,5435],{"class":97,"line":1202},[95,5431,5432],{"class":105},"    num1",[95,5434,151],{"class":101},[95,5436,5230],{"class":105},[95,5438,5439,5442,5444],{"class":97,"line":1293},[95,5440,5441],{"class":105},"    num2",[95,5443,151],{"class":101},[95,5445,4262],{"class":105},[95,5447,5448,5450,5452,5455,5457],{"class":97,"line":1299},[95,5449,1533],{"class":105},[95,5451,1150],{"class":101},[95,5453,5454],{"class":210},"\"交换后：\"",[95,5456,1150],{"class":101},[95,5458,1173],{"class":105},[95,5460,5461,5463,5465,5467,5469,5471,5473],{"class":97,"line":1311},[95,5462,1533],{"class":105},[95,5464,1150],{"class":101},[95,5466,5390],{"class":210},[95,5468,1150],{"class":101},[95,5470,5225],{"class":105},[95,5472,1150],{"class":101},[95,5474,1173],{"class":105},[95,5476,5477,5479,5481,5483,5485,5487,5489],{"class":97,"line":1594},[95,5478,1533],{"class":105},[95,5480,1150],{"class":101},[95,5482,5407],{"class":210},[95,5484,1150],{"class":101},[95,5486,5412],{"class":105},[95,5488,1150],{"class":101},[95,5490,1173],{"class":105},[95,5492,5493,5495,5497],{"class":97,"line":1599},[95,5494,4072],{"class":101},[95,5496,161],{"class":105},[95,5498,5499],{"class":164},"\u002F\u002F或者不写\n",[95,5501,5502],{"class":97,"line":1605},[95,5503,1547],{"class":105},[95,5505,5506,5508,5510],{"class":97,"line":1610},[95,5507,109],{"class":101},[95,5509,1955],{"class":1945},[95,5511,1958],{"class":105},[95,5513,5514],{"class":97,"line":1624},[95,5515,1528],{"class":105},[95,5517,5518,5520,5522,5524,5526],{"class":97,"line":1629},[95,5519,1967],{"class":101},[95,5521,1380],{"class":105},[95,5523,151],{"class":101},[95,5525,552],{"class":154},[95,5527,1272],{"class":105},[95,5529,5530,5532,5534,5536,5538],{"class":97,"line":1635},[95,5531,1967],{"class":101},[95,5533,2815],{"class":105},[95,5535,151],{"class":101},[95,5537,806],{"class":154},[95,5539,1272],{"class":105},[95,5541,5542,5545],{"class":97,"line":1656},[95,5543,5544],{"class":1945},"    swap",[95,5546,5320],{"class":105},[95,5548,5549],{"class":97,"line":1661},[95,5550,1547],{"class":105},[37,5552,5554],{"id":5553},"_24函数的常见形式","2.4函数的常见形式",[49,5556,5557],{},[52,5558,5559],{},"无参无返",[86,5561,5563],{"className":88,"code":5562,"language":90,"meta":14,"style":14},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[92,5564,5565,5574,5578,5591,5595,5603,5607,5612,5620],{"__ignoreMap":14},[95,5566,5567,5569,5572],{"class":97,"line":98},[95,5568,5347],{"class":101},[95,5570,5571],{"class":1945}," test01",[95,5573,1958],{"class":105},[95,5575,5576],{"class":97,"line":15},[95,5577,1528],{"class":105},[95,5579,5580,5582,5584,5587,5589],{"class":97,"line":1161},[95,5581,1533],{"class":105},[95,5583,1150],{"class":101},[95,5585,5586],{"class":210},"\"你好\"",[95,5588,1150],{"class":101},[95,5590,1173],{"class":105},[95,5592,5593],{"class":97,"line":1176},[95,5594,1547],{"class":105},[95,5596,5597,5599,5601],{"class":97,"line":1182},[95,5598,109],{"class":101},[95,5600,1955],{"class":1945},[95,5602,1958],{"class":105},[95,5604,5605],{"class":97,"line":1196},[95,5606,1528],{"class":105},[95,5608,5609],{"class":97,"line":1202},[95,5610,5611],{"class":164},"    \u002F\u002F函数调用\n",[95,5613,5614,5617],{"class":97,"line":1293},[95,5615,5616],{"class":1945},"    test01",[95,5618,5619],{"class":105},"();\n",[95,5621,5622],{"class":97,"line":1299},[95,5623,1547],{"class":105},[49,5625,5626],{"start":15},[52,5627,5628],{},"有参无返",[86,5630,5632],{"className":88,"code":5631,"language":90,"meta":14,"style":14},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[92,5633,5634,5649,5653,5665,5669,5677,5681,5692],{"__ignoreMap":14},[95,5635,5636,5638,5641,5643,5645,5647],{"class":97,"line":98},[95,5637,5347],{"class":101},[95,5639,5640],{"class":1945}," test02",[95,5642,106],{"class":105},[95,5644,109],{"class":101},[95,5646,1380],{"class":5199},[95,5648,112],{"class":105},[95,5650,5651],{"class":97,"line":15},[95,5652,1528],{"class":105},[95,5654,5655,5657,5659,5661,5663],{"class":97,"line":1161},[95,5656,1533],{"class":105},[95,5658,1150],{"class":101},[95,5660,5586],{"class":210},[95,5662,1150],{"class":101},[95,5664,1173],{"class":105},[95,5666,5667],{"class":97,"line":1176},[95,5668,1547],{"class":105},[95,5670,5671,5673,5675],{"class":97,"line":1182},[95,5672,109],{"class":101},[95,5674,1955],{"class":1945},[95,5676,1958],{"class":105},[95,5678,5679],{"class":97,"line":1196},[95,5680,1528],{"class":105},[95,5682,5683,5686,5688,5690],{"class":97,"line":1202},[95,5684,5685],{"class":1945},"    test02",[95,5687,106],{"class":105},[95,5689,417],{"class":154},[95,5691,2701],{"class":105},[95,5693,5694],{"class":97,"line":1293},[95,5695,1547],{"class":105},[49,5697,5698],{"start":1161},[52,5699,5700],{},"无参有返",[86,5702,5704],{"className":88,"code":5703,"language":90,"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",[92,5705,5706,5715,5719,5731,5740,5744,5752,5756,5769,5788],{"__ignoreMap":14},[95,5707,5708,5710,5713],{"class":97,"line":98},[95,5709,109],{"class":101},[95,5711,5712],{"class":1945}," test03",[95,5714,1958],{"class":105},[95,5716,5717],{"class":97,"line":15},[95,5718,1528],{"class":105},[95,5720,5721,5723,5725,5727,5729],{"class":97,"line":1161},[95,5722,1533],{"class":105},[95,5724,1150],{"class":101},[95,5726,5586],{"class":210},[95,5728,1150],{"class":101},[95,5730,1173],{"class":105},[95,5732,5733,5735,5738],{"class":97,"line":1176},[95,5734,4072],{"class":101},[95,5736,5737],{"class":154}," 100",[95,5739,1272],{"class":105},[95,5741,5742],{"class":97,"line":1182},[95,5743,1547],{"class":105},[95,5745,5746,5748,5750],{"class":97,"line":1196},[95,5747,109],{"class":101},[95,5749,1955],{"class":1945},[95,5751,1958],{"class":105},[95,5753,5754],{"class":97,"line":1202},[95,5755,1528],{"class":105},[95,5757,5758,5760,5762,5764,5767],{"class":97,"line":1293},[95,5759,1967],{"class":101},[95,5761,5200],{"class":105},[95,5763,151],{"class":101},[95,5765,5766],{"class":1945},"test03",[95,5768,5619],{"class":105},[95,5770,5771,5773,5775,5777,5779,5781,5783,5785],{"class":97,"line":1299},[95,5772,1533],{"class":105},[95,5774,1150],{"class":101},[95,5776,5390],{"class":210},[95,5778,1150],{"class":101},[95,5780,5225],{"class":105},[95,5782,1150],{"class":101},[95,5784,1220],{"class":105},[95,5786,5787],{"class":164}," \u002F\u002F100\n",[95,5789,5790],{"class":97,"line":1311},[95,5791,1547],{"class":105},[10,5793,5794],{},"4.有参有返",[86,5796,5798],{"className":88,"code":5797,"language":90,"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",[92,5799,5800,5815,5819,5832,5838,5842,5851,5855,5867,5881,5896],{"__ignoreMap":14},[95,5801,5802,5804,5807,5809,5811,5813],{"class":97,"line":98},[95,5803,109],{"class":101},[95,5805,5806],{"class":1945}," test04",[95,5808,106],{"class":105},[95,5810,109],{"class":101},[95,5812,1380],{"class":5199},[95,5814,112],{"class":105},[95,5816,5817],{"class":97,"line":15},[95,5818,1528],{"class":105},[95,5820,5821,5823,5825,5828,5830],{"class":97,"line":1161},[95,5822,1533],{"class":105},[95,5824,1150],{"class":101},[95,5826,5827],{"class":210},"\"hello\"",[95,5829,1150],{"class":101},[95,5831,1173],{"class":105},[95,5833,5834,5836],{"class":97,"line":1176},[95,5835,4072],{"class":101},[95,5837,1414],{"class":105},[95,5839,5840],{"class":97,"line":1182},[95,5841,1547],{"class":105},[95,5843,5844,5846,5849],{"class":97,"line":1196},[95,5845,109],{"class":101},[95,5847,5848],{"class":1945}," mian",[95,5850,1958],{"class":105},[95,5852,5853],{"class":97,"line":1202},[95,5854,1528],{"class":105},[95,5856,5857,5859,5861,5863,5865],{"class":97,"line":1293},[95,5858,1967],{"class":101},[95,5860,2815],{"class":105},[95,5862,151],{"class":101},[95,5864,323],{"class":154},[95,5866,1272],{"class":105},[95,5868,5869,5871,5873,5875,5878],{"class":97,"line":1299},[95,5870,1967],{"class":101},[95,5872,2831],{"class":105},[95,5874,151],{"class":101},[95,5876,5877],{"class":1945},"test04",[95,5879,5880],{"class":105},"(b);\n",[95,5882,5883,5885,5887,5889,5891,5893],{"class":97,"line":1311},[95,5884,1533],{"class":105},[95,5886,1150],{"class":101},[95,5888,394],{"class":105},[95,5890,1150],{"class":101},[95,5892,1220],{"class":105},[95,5894,5895],{"class":164}," \u002F\u002F1\n",[95,5897,5898],{"class":97,"line":1594},[95,5899,1547],{"class":105},[37,5901,5903],{"id":5902},"_25函数的声明","2.5函数的声明",[10,5905,5906],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[10,5908,5909,5910],{},"函数的",[255,5911,5912],{},"声明可以多次，但是函数的定义只能有一次",[86,5914,5916],{"className":88,"code":5915,"language":90,"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",[92,5917,5918,5923,5928,5953,5962,5966,5978,5990,6006,6010,6030,6034,6053],{"__ignoreMap":14},[95,5919,5920],{"class":97,"line":98},[95,5921,5922],{"class":164},"\u002F\u002F函数声明\n",[95,5924,5925],{"class":97,"line":15},[95,5926,5927],{"class":164},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[95,5929,5930,5932,5935,5937,5939,5941,5943,5945,5947,5950],{"class":97,"line":1161},[95,5931,109],{"class":101},[95,5933,5934],{"class":1945}," max",[95,5936,106],{"class":105},[95,5938,109],{"class":101},[95,5940,1380],{"class":5199},[95,5942,484],{"class":105},[95,5944,109],{"class":101},[95,5946,2815],{"class":5199},[95,5948,5949],{"class":105},");",[95,5951,5952],{"class":164},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[95,5954,5955,5957,5959],{"class":97,"line":1176},[95,5956,109],{"class":101},[95,5958,1955],{"class":1945},[95,5960,5961],{"class":105},"() \n",[95,5963,5964],{"class":97,"line":1182},[95,5965,1528],{"class":105},[95,5967,5968,5970,5972,5974,5976],{"class":97,"line":1196},[95,5969,1967],{"class":101},[95,5971,1380],{"class":105},[95,5973,151],{"class":101},[95,5975,552],{"class":154},[95,5977,1272],{"class":105},[95,5979,5980,5982,5984,5986,5988],{"class":97,"line":1202},[95,5981,1967],{"class":101},[95,5983,2815],{"class":105},[95,5985,151],{"class":101},[95,5987,806],{"class":154},[95,5989,1272],{"class":105},[95,5991,5992,5994,5996,5999,6002,6004],{"class":97,"line":1293},[95,5993,1533],{"class":105},[95,5995,1150],{"class":101},[95,5997,5998],{"class":1945},"max",[95,6000,6001],{"class":105},"(a,b)",[95,6003,1150],{"class":101},[95,6005,1173],{"class":105},[95,6007,6008],{"class":97,"line":1299},[95,6009,1547],{"class":105},[95,6011,6012,6014,6016,6018,6020,6022,6024,6026,6028],{"class":97,"line":1311},[95,6013,109],{"class":101},[95,6015,5934],{"class":1945},[95,6017,106],{"class":105},[95,6019,109],{"class":101},[95,6021,1380],{"class":5199},[95,6023,484],{"class":105},[95,6025,109],{"class":101},[95,6027,2815],{"class":5199},[95,6029,112],{"class":105},[95,6031,6032],{"class":97,"line":1594},[95,6033,1528],{"class":105},[95,6035,6036,6038,6040,6042,6044,6046,6048,6050],{"class":97,"line":1599},[95,6037,4072],{"class":101},[95,6039,1380],{"class":105},[95,6041,1066],{"class":101},[95,6043,369],{"class":105},[95,6045,1092],{"class":101},[95,6047,344],{"class":105},[95,6049,965],{"class":101},[95,6051,6052],{"class":105},"b;\n",[95,6054,6055],{"class":97,"line":1605},[95,6056,1547],{"class":105},[37,6058,6060],{"id":6059},"_26函数的分文件编写","2.6函数的分文件编写",[10,6062,6063],{},"4个步骤：",[1113,6065,6066,6069,6072,6075],{},[52,6067,6068],{},"1.创建后缀名为.h的头文件",[52,6070,6071],{},"2.创建后缀名为.cpp的源文件",[52,6073,6074],{},"3.在头文件中写函数的定义",[52,6076,6077],{},"4.在源文件中写函数的定义\n示例：",[10,6079,6080],{},"头文件：swap.h",[86,6082,6084],{"className":88,"code":6083,"language":90,"meta":14,"style":14},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[92,6085,6086,6092,6102,6106],{"__ignoreMap":14},[95,6087,6088,6090],{"class":97,"line":98},[95,6089,1931],{"class":101},[95,6091,1934],{"class":210},[95,6093,6094,6096,6098,6100],{"class":97,"line":15},[95,6095,1939],{"class":101},[95,6097,1942],{"class":101},[95,6099,1946],{"class":1945},[95,6101,1272],{"class":105},[95,6103,6104],{"class":97,"line":1161},[95,6105,5922],{"class":164},[95,6107,6108,6110,6112,6114,6116,6118,6120,6122,6124],{"class":97,"line":1176},[95,6109,5347],{"class":101},[95,6111,5350],{"class":1945},[95,6113,106],{"class":105},[95,6115,109],{"class":101},[95,6117,1380],{"class":5199},[95,6119,484],{"class":105},[95,6121,109],{"class":101},[95,6123,2815],{"class":5199},[95,6125,2701],{"class":105},[10,6127,6128],{},"源文件：swap.cpp",[86,6130,6132],{"className":88,"code":6131,"language":90,"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",[92,6133,6134,6141,6146,6166,6170,6181,6190,6199,6216,6233],{"__ignoreMap":14},[95,6135,6136,6138],{"class":97,"line":98},[95,6137,1931],{"class":101},[95,6139,6140],{"class":210}," \"swap.h\"\n",[95,6142,6143],{"class":97,"line":15},[95,6144,6145],{"class":164},"\u002F\u002F函数的定义\n",[95,6147,6148,6150,6152,6154,6156,6158,6160,6162,6164],{"class":97,"line":1161},[95,6149,5347],{"class":101},[95,6151,5350],{"class":1945},[95,6153,106],{"class":105},[95,6155,109],{"class":101},[95,6157,1380],{"class":5199},[95,6159,484],{"class":105},[95,6161,109],{"class":101},[95,6163,2815],{"class":5199},[95,6165,112],{"class":105},[95,6167,6168],{"class":97,"line":1176},[95,6169,1528],{"class":105},[95,6171,6172,6174,6176,6178],{"class":97,"line":1182},[95,6173,1967],{"class":101},[95,6175,4237],{"class":105},[95,6177,151],{"class":101},[95,6179,6180],{"class":105},"a;\n",[95,6182,6183,6186,6188],{"class":97,"line":1196},[95,6184,6185],{"class":105},"    a",[95,6187,151],{"class":101},[95,6189,6052],{"class":105},[95,6191,6192,6195,6197],{"class":97,"line":1202},[95,6193,6194],{"class":105},"    b",[95,6196,151],{"class":101},[95,6198,4262],{"class":105},[95,6200,6201,6203,6205,6208,6210,6212,6214],{"class":97,"line":1293},[95,6202,1533],{"class":105},[95,6204,1150],{"class":101},[95,6206,6207],{"class":210},"\"a=\"",[95,6209,1150],{"class":101},[95,6211,344],{"class":105},[95,6213,1150],{"class":101},[95,6215,1173],{"class":105},[95,6217,6218,6220,6222,6225,6227,6229,6231],{"class":97,"line":1299},[95,6219,1533],{"class":105},[95,6221,1150],{"class":101},[95,6223,6224],{"class":210},"\"b=\"",[95,6226,1150],{"class":101},[95,6228,369],{"class":105},[95,6230,1150],{"class":101},[95,6232,1173],{"class":105},[95,6234,6235],{"class":97,"line":1311},[95,6236,1547],{"class":105},[5109,6238,6239],{},"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":6241},[6242,6243,6244,6245,6246,6247],{"id":5155,"depth":15,"text":5156},{"id":5244,"depth":15,"text":5245},{"id":5327,"depth":15,"text":5328},{"id":5553,"depth":15,"text":5554},{"id":5902,"depth":15,"text":5903},{"id":6059,"depth":15,"text":6060},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5147,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6254,"title":6255,"body":6256,"description":6263,"extension":18,"meta":7668,"navigation":21,"path":7669,"seo":7670,"stem":7671,"__hash__":7672},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6257,"toc":7658},[6258,6261,6264,6268,6430,6434,6437,6440,6443,6446,6586,6590,6593,6596,6599,6664,6668,6673,6740,6743,6747,6750,6761,6766,6786,6789,6794,6813,6816,6820,6839,6842,6846,7081,7085,7088,7091,7094,7256,7259,7263,7266,7272,7655],[33,6259,6255],{"id":6260},"_3指针",[10,6262,6263],{},"通过指针保存一个地址，指针就是个地址",[37,6265,6267],{"id":6266},"_31定义指针","3.1定义指针",[86,6269,6271],{"className":88,"code":6270,"language":90,"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",[92,6272,6273,6281,6285,6290,6302,6307,6315,6325,6343,6363,6367,6372,6377,6382,6396,6412,6426],{"__ignoreMap":14},[95,6274,6275,6277,6279],{"class":97,"line":98},[95,6276,109],{"class":101},[95,6278,1955],{"class":1945},[95,6280,1958],{"class":105},[95,6282,6283],{"class":97,"line":15},[95,6284,1528],{"class":105},[95,6286,6287],{"class":97,"line":1161},[95,6288,6289],{"class":164},"    \u002F\u002F1.定义指针\n",[95,6291,6292,6294,6296,6298,6300],{"class":97,"line":1176},[95,6293,1967],{"class":101},[95,6295,1380],{"class":105},[95,6297,151],{"class":101},[95,6299,552],{"class":154},[95,6301,1272],{"class":105},[95,6303,6304],{"class":97,"line":1182},[95,6305,6306],{"class":164},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[95,6308,6309,6312],{"class":97,"line":1196},[95,6310,6311],{"class":101},"    int*",[95,6313,6314],{"class":105},"p;\n",[95,6316,6317,6320,6323],{"class":97,"line":1202},[95,6318,6319],{"class":105},"    p",[95,6321,6322],{"class":101},"=&",[95,6324,6180],{"class":105},[95,6326,6327,6329,6331,6334,6337,6339,6341],{"class":97,"line":1293},[95,6328,1533],{"class":105},[95,6330,1150],{"class":101},[95,6332,6333],{"class":210},"\"a的地址为：\"",[95,6335,6336],{"class":101},"\u003C\u003C&",[95,6338,344],{"class":105},[95,6340,1150],{"class":101},[95,6342,1173],{"class":105},[95,6344,6345,6347,6349,6352,6354,6356,6358,6360],{"class":97,"line":1299},[95,6346,1533],{"class":105},[95,6348,1150],{"class":101},[95,6350,6351],{"class":210},"\"指针p为：\"",[95,6353,1150],{"class":101},[95,6355,10],{"class":105},[95,6357,1150],{"class":101},[95,6359,1220],{"class":105},[95,6361,6362],{"class":164},"\u002F\u002F指针p表示的就是a的地址\n",[95,6364,6365],{"class":97,"line":1311},[95,6366,2382],{"emptyLinePlaceholder":21},[95,6368,6369],{"class":97,"line":1594},[95,6370,6371],{"class":164},"    \u002F\u002F2.使用指针\n",[95,6373,6374],{"class":97,"line":1599},[95,6375,6376],{"class":164},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[95,6378,6379],{"class":97,"line":1605},[95,6380,6381],{"class":164},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[95,6383,6384,6387,6389,6391,6394],{"class":97,"line":1610},[95,6385,6386],{"class":101},"    *",[95,6388,10],{"class":105},[95,6390,151],{"class":101},[95,6392,6393],{"class":154},"1000",[95,6395,1272],{"class":105},[95,6397,6398,6400,6403,6405,6407,6409],{"class":97,"line":1624},[95,6399,1533],{"class":105},[95,6401,6402],{"class":101},"\u003C\u003C*",[95,6404,10],{"class":105},[95,6406,1150],{"class":101},[95,6408,1220],{"class":105},[95,6410,6411],{"class":164},"\u002F\u002F1000\n",[95,6413,6414,6416,6418,6420,6422,6424],{"class":97,"line":1629},[95,6415,1533],{"class":105},[95,6417,1150],{"class":101},[95,6419,344],{"class":105},[95,6421,1150],{"class":101},[95,6423,1220],{"class":105},[95,6425,6411],{"class":164},[95,6427,6428],{"class":97,"line":1635},[95,6429,1547],{"class":105},[37,6431,6433],{"id":6432},"_32指针所占的内存空间","3.2指针所占的内存空间",[10,6435,6436],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[10,6438,6439],{},"在32位操作系统下：占用4个字节空间",[10,6441,6442],{},"在64位操作系统下：占用8个字节空间",[10,6444,6445],{},"上方是不管啥数据类型的",[86,6447,6449],{"className":88,"code":6448,"language":90,"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",[92,6450,6451,6459,6463,6468,6480,6485,6490,6495,6508,6530,6556,6582],{"__ignoreMap":14},[95,6452,6453,6455,6457],{"class":97,"line":98},[95,6454,109],{"class":101},[95,6456,1955],{"class":1945},[95,6458,1958],{"class":105},[95,6460,6461],{"class":97,"line":15},[95,6462,1528],{"class":105},[95,6464,6465],{"class":97,"line":1161},[95,6466,6467],{"class":164},"    \u002F\u002F指针所占内存空间\n",[95,6469,6470,6472,6474,6476,6478],{"class":97,"line":1176},[95,6471,1967],{"class":101},[95,6473,1380],{"class":105},[95,6475,151],{"class":101},[95,6477,552],{"class":154},[95,6479,1272],{"class":105},[95,6481,6482],{"class":97,"line":1182},[95,6483,6484],{"class":164},"    \u002F\u002Fint *p;\n",[95,6486,6487],{"class":97,"line":1196},[95,6488,6489],{"class":164},"    \u002F\u002Fp=&a;\n",[95,6491,6492],{"class":97,"line":1202},[95,6493,6494],{"class":164},"    \u002F\u002F上述可以写为以下：\n",[95,6496,6497,6499,6502,6504,6506],{"class":97,"line":1293},[95,6498,1967],{"class":101},[95,6500,6501],{"class":101}," *",[95,6503,10],{"class":105},[95,6505,6322],{"class":101},[95,6507,6180],{"class":105},[95,6509,6510,6513,6515,6518,6520,6523,6525,6527],{"class":97,"line":1299},[95,6511,6512],{"class":105},"    cout ",[95,6514,1150],{"class":101},[95,6516,6517],{"class":210},"\"sizeof(int *)\"",[95,6519,1354],{"class":101},[95,6521,6522],{"class":105},"(p)",[95,6524,1150],{"class":101},[95,6526,1220],{"class":105},[95,6528,6529],{"class":164},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[95,6531,6532,6534,6536,6538,6540,6542,6544,6546,6548,6550,6553],{"class":97,"line":1311},[95,6533,6512],{"class":105},[95,6535,1150],{"class":101},[95,6537,6517],{"class":210},[95,6539,1354],{"class":101},[95,6541,106],{"class":105},[95,6543,109],{"class":101},[95,6545,6501],{"class":101},[95,6547,535],{"class":105},[95,6549,1150],{"class":101},[95,6551,6552],{"class":105},"endl",[95,6554,6555],{"class":164},"  \u002F\u002F4字节(32位的话)\n",[95,6557,6558,6560,6562,6565,6567,6569,6571,6573,6575,6577,6579],{"class":97,"line":1594},[95,6559,6512],{"class":105},[95,6561,1150],{"class":101},[95,6563,6564],{"class":210},"\"sizeof(char *)\"",[95,6566,1354],{"class":101},[95,6568,106],{"class":105},[95,6570,202],{"class":101},[95,6572,6501],{"class":101},[95,6574,535],{"class":105},[95,6576,1150],{"class":101},[95,6578,1220],{"class":105},[95,6580,6581],{"class":164}," \u002F\u002F4字节(32位的话)\n",[95,6583,6584],{"class":97,"line":1599},[95,6585,1547],{"class":105},[37,6587,6589],{"id":6588},"_33空指针","3.3空指针",[10,6591,6592],{},"空指针：指针变量指向内存中编号为0的空间",[10,6594,6595],{},"用途：初始化指针变量",[10,6597,6598],{},"注意：空指针指向的内存是不可以访问的",[86,6600,6602],{"className":88,"code":6601,"language":90,"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",[92,6603,6604,6612,6616,6621,6635,6640,6655,6660],{"__ignoreMap":14},[95,6605,6606,6608,6610],{"class":97,"line":98},[95,6607,109],{"class":101},[95,6609,1955],{"class":1945},[95,6611,1958],{"class":105},[95,6613,6614],{"class":97,"line":15},[95,6615,1528],{"class":105},[95,6617,6618],{"class":97,"line":1161},[95,6619,6620],{"class":164},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[95,6622,6623,6625,6627,6629,6631,6633],{"class":97,"line":1176},[95,6624,1967],{"class":101},[95,6626,6501],{"class":101},[95,6628,10],{"class":105},[95,6630,151],{"class":101},[95,6632,2374],{"class":154},[95,6634,1272],{"class":105},[95,6636,6637],{"class":97,"line":1182},[95,6638,6639],{"class":164},"    \u002F\u002F2.空指针不能进行访问\n",[95,6641,6642,6644,6646,6648,6650,6652],{"class":97,"line":1196},[95,6643,6386],{"class":101},[95,6645,10],{"class":105},[95,6647,151],{"class":101},[95,6649,417],{"class":154},[95,6651,161],{"class":105},[95,6653,6654],{"class":164},"\u002F\u002F直接报错，压根不能访问\n",[95,6656,6657],{"class":97,"line":1202},[95,6658,6659],{"class":164},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[95,6661,6662],{"class":97,"line":1293},[95,6663,1547],{"class":105},[37,6665,6667],{"id":6666},"_34野指针","3.4野指针",[10,6669,6670],{},[255,6671,6672],{},"指针变量指向非法的内存空间",[86,6674,6676],{"className":88,"code":6675,"language":90,"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",[92,6677,6678,6686,6690,6719,6724,6736],{"__ignoreMap":14},[95,6679,6680,6682,6684],{"class":97,"line":98},[95,6681,109],{"class":101},[95,6683,1955],{"class":1945},[95,6685,1958],{"class":105},[95,6687,6688],{"class":97,"line":15},[95,6689,1528],{"class":105},[95,6691,6692,6694,6696,6698,6700,6702,6704,6706,6708,6711,6714,6716],{"class":97,"line":1161},[95,6693,1967],{"class":101},[95,6695,6501],{"class":101},[95,6697,10],{"class":105},[95,6699,151],{"class":101},[95,6701,106],{"class":105},[95,6703,109],{"class":101},[95,6705,6501],{"class":101},[95,6707,535],{"class":105},[95,6709,6710],{"class":101},"0x",[95,6712,6713],{"class":154},"1100",[95,6715,161],{"class":105},[95,6717,6718],{"class":164}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[95,6720,6721],{"class":97,"line":1176},[95,6722,6723],{"class":164},"    \u002F\u002F访问野指针报错\n",[95,6725,6726,6728,6730,6732,6734],{"class":97,"line":1182},[95,6727,1533],{"class":105},[95,6729,6402],{"class":101},[95,6731,10],{"class":105},[95,6733,1150],{"class":101},[95,6735,1173],{"class":105},[95,6737,6738],{"class":97,"line":1196},[95,6739,1547],{"class":105},[10,6741,6742],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[37,6744,6746],{"id":6745},"_35const修饰指针","3.5const修饰指针",[10,6748,6749],{},"三种情况：",[1113,6751,6752,6755,6758],{},[52,6753,6754],{},"const修饰指针 常量指针",[52,6756,6757],{},"const修饰常量 指针常量",[52,6759,6760],{},"const即修饰指针，又修饰常量",[49,6762,6763],{},[52,6764,6765],{},"常量指针",[86,6767,6769],{"className":88,"code":6768,"language":90,"meta":14,"style":14},"const int *p=&a;\n",[92,6770,6771],{"__ignoreMap":14},[95,6772,6773,6776,6778,6780,6782,6784],{"class":97,"line":98},[95,6774,6775],{"class":101},"const",[95,6777,2364],{"class":101},[95,6779,6501],{"class":101},[95,6781,10],{"class":105},[95,6783,6322],{"class":101},[95,6785,6180],{"class":105},[10,6787,6788],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[49,6790,6791],{"start":15},[52,6792,6793],{},"指针常量",[86,6795,6797],{"className":88,"code":6796,"language":90,"meta":14,"style":14},"int *const p=&a;\n",[92,6798,6799],{"__ignoreMap":14},[95,6800,6801,6803,6806,6809,6811],{"class":97,"line":98},[95,6802,109],{"class":101},[95,6804,6805],{"class":101}," *const",[95,6807,6808],{"class":105}," p",[95,6810,6322],{"class":101},[95,6812,6180],{"class":105},[10,6814,6815],{},"指针的指向不可以改，指针指向的值可以改",[49,6817,6818],{"start":1161},[52,6819,6760],{},[86,6821,6823],{"className":88,"code":6822,"language":90,"meta":14,"style":14},"const int *const p=&a;\n",[92,6824,6825],{"__ignoreMap":14},[95,6826,6827,6829,6831,6833,6835,6837],{"class":97,"line":98},[95,6828,6775],{"class":101},[95,6830,2364],{"class":101},[95,6832,6805],{"class":101},[95,6834,6808],{"class":105},[95,6836,6322],{"class":101},[95,6838,6180],{"class":105},[10,6840,6841],{},"指针的指向和指针指向的值都不可以改变",[37,6843,6845],{"id":6844},"_36指针和数组","3.6指针和数组",[86,6847,6849],{"className":88,"code":6848,"language":90,"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",[92,6850,6851,6859,6863,6868,6922,6943,6959,6975,6986,7003,7008,7022,7048,7052,7064,7073,7077],{"__ignoreMap":14},[95,6852,6853,6855,6857],{"class":97,"line":98},[95,6854,109],{"class":101},[95,6856,1955],{"class":1945},[95,6858,1958],{"class":105},[95,6860,6861],{"class":97,"line":15},[95,6862,1528],{"class":105},[95,6864,6865],{"class":97,"line":1161},[95,6866,6867],{"class":164},"    \u002F\u002F利用指针访问数组中的元素\n",[95,6869,6870,6872,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920],{"class":97,"line":1176},[95,6871,1967],{"class":101},[95,6873,3944],{"class":105},[95,6875,552],{"class":154},[95,6877,1046],{"class":105},[95,6879,151],{"class":101},[95,6881,1002],{"class":105},[95,6883,323],{"class":154},[95,6885,484],{"class":105},[95,6887,183],{"class":154},[95,6889,484],{"class":105},[95,6891,177],{"class":154},[95,6893,484],{"class":105},[95,6895,399],{"class":154},[95,6897,484],{"class":105},[95,6899,425],{"class":154},[95,6901,484],{"class":105},[95,6903,450],{"class":154},[95,6905,484],{"class":105},[95,6907,475],{"class":154},[95,6909,484],{"class":105},[95,6911,501],{"class":154},[95,6913,484],{"class":105},[95,6915,526],{"class":154},[95,6917,484],{"class":105},[95,6919,552],{"class":154},[95,6921,3977],{"class":105},[95,6923,6924,6926,6928,6931,6933,6935,6937,6939,6941],{"class":97,"line":1182},[95,6925,1533],{"class":105},[95,6927,1150],{"class":101},[95,6929,6930],{"class":210},"\"数组的第一个元素为：\"",[95,6932,1150],{"class":101},[95,6934,3888],{"class":105},[95,6936,297],{"class":154},[95,6938,1046],{"class":105},[95,6940,1150],{"class":101},[95,6942,1173],{"class":105},[95,6944,6945,6947,6949,6951,6953,6956],{"class":97,"line":1196},[95,6946,1967],{"class":101},[95,6948,6501],{"class":101},[95,6950,10],{"class":105},[95,6952,151],{"class":101},[95,6954,6955],{"class":105},"arr;",[95,6957,6958],{"class":164},"\u002F\u002F注意数才要加取地址符号&\n",[95,6960,6961,6963,6965,6967,6969,6971,6973],{"class":97,"line":1202},[95,6962,1533],{"class":105},[95,6964,1150],{"class":101},[95,6966,6930],{"class":210},[95,6968,6402],{"class":101},[95,6970,10],{"class":105},[95,6972,1150],{"class":101},[95,6974,1173],{"class":105},[95,6976,6977,6979,6981,6983],{"class":97,"line":1293},[95,6978,6319],{"class":105},[95,6980,2274],{"class":101},[95,6982,161],{"class":105},[95,6984,6985],{"class":164}," \u002F\u002F让指针向后偏移4个字节\n",[95,6987,6988,6990,6992,6995,6997,6999,7001],{"class":97,"line":1299},[95,6989,1533],{"class":105},[95,6991,1150],{"class":101},[95,6993,6994],{"class":210},"\"数组的第二个元素为：\"",[95,6996,6402],{"class":101},[95,6998,10],{"class":105},[95,7000,1150],{"class":101},[95,7002,1173],{"class":105},[95,7004,7005],{"class":97,"line":1311},[95,7006,7007],{"class":164},"    \u002F\u002F利用指针遍历数组\n",[95,7009,7010,7012,7014,7017,7019],{"class":97,"line":1594},[95,7011,1967],{"class":101},[95,7013,6501],{"class":101},[95,7015,7016],{"class":105},"p2",[95,7018,151],{"class":101},[95,7020,7021],{"class":105},"arr;\n",[95,7023,7024,7026,7028,7030,7032,7034,7036,7038,7040,7042,7044,7046],{"class":97,"line":1599},[95,7025,3183],{"class":101},[95,7027,1640],{"class":105},[95,7029,109],{"class":101},[95,7031,3014],{"class":105},[95,7033,151],{"class":101},[95,7035,297],{"class":154},[95,7037,3021],{"class":105},[95,7039,1016],{"class":101},[95,7041,552],{"class":154},[95,7043,3021],{"class":105},[95,7045,2274],{"class":101},[95,7047,112],{"class":105},[95,7049,7050],{"class":97,"line":1605},[95,7051,2012],{"class":105},[95,7053,7054,7056,7058,7060,7062],{"class":97,"line":1610},[95,7055,3433],{"class":105},[95,7057,6402],{"class":101},[95,7059,7016],{"class":105},[95,7061,1150],{"class":101},[95,7063,1173],{"class":105},[95,7065,7066,7069,7071],{"class":97,"line":1624},[95,7067,7068],{"class":105},"        p2",[95,7070,2274],{"class":101},[95,7072,1272],{"class":105},[95,7074,7075],{"class":97,"line":1629},[95,7076,2169],{"class":105},[95,7078,7079],{"class":97,"line":1635},[95,7080,1547],{"class":105},[37,7082,7084],{"id":7083},"_37指针和函数","3.7指针和函数",[10,7086,7087],{},"利用指针做函数参数，可以修改实参的值",[10,7089,7090],{},"值传递：只改变形参，不改变实参",[10,7092,7093],{},"地址传递：",[86,7095,7097],{"className":88,"code":7096,"language":90,"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",[92,7098,7099,7124,7128,7140,7151,7161,7165,7173,7177,7189,7201,7206,7222,7237,7252],{"__ignoreMap":14},[95,7100,7101,7103,7105,7107,7109,7111,7114,7116,7118,7120,7122],{"class":97,"line":98},[95,7102,5347],{"class":101},[95,7104,5350],{"class":1945},[95,7106,106],{"class":105},[95,7108,109],{"class":101},[95,7110,6501],{"class":101},[95,7112,7113],{"class":5199},"p1",[95,7115,484],{"class":105},[95,7117,109],{"class":101},[95,7119,6501],{"class":101},[95,7121,7016],{"class":5199},[95,7123,112],{"class":105},[95,7125,7126],{"class":97,"line":15},[95,7127,1528],{"class":105},[95,7129,7130,7132,7134,7137],{"class":97,"line":1161},[95,7131,1967],{"class":101},[95,7133,4237],{"class":105},[95,7135,7136],{"class":101},"=*",[95,7138,7139],{"class":105},"p1;\n",[95,7141,7142,7144,7146,7148],{"class":97,"line":1176},[95,7143,6386],{"class":101},[95,7145,7113],{"class":105},[95,7147,7136],{"class":101},[95,7149,7150],{"class":105},"p2;\n",[95,7152,7153,7155,7157,7159],{"class":97,"line":1182},[95,7154,6386],{"class":101},[95,7156,7016],{"class":105},[95,7158,151],{"class":101},[95,7160,4262],{"class":105},[95,7162,7163],{"class":97,"line":1196},[95,7164,1547],{"class":105},[95,7166,7167,7169,7171],{"class":97,"line":1202},[95,7168,109],{"class":101},[95,7170,1955],{"class":1945},[95,7172,1958],{"class":105},[95,7174,7175],{"class":97,"line":1293},[95,7176,1528],{"class":105},[95,7178,7179,7181,7183,7185,7187],{"class":97,"line":1299},[95,7180,1967],{"class":101},[95,7182,1380],{"class":105},[95,7184,151],{"class":101},[95,7186,552],{"class":154},[95,7188,1272],{"class":105},[95,7190,7191,7193,7195,7197,7199],{"class":97,"line":1311},[95,7192,1967],{"class":101},[95,7194,2815],{"class":105},[95,7196,151],{"class":101},[95,7198,806],{"class":154},[95,7200,1272],{"class":105},[95,7202,7203],{"class":97,"line":1594},[95,7204,7205],{"class":164},"    \u002F\u002F地址传递\n",[95,7207,7208,7210,7212,7214,7217,7219],{"class":97,"line":1599},[95,7209,5544],{"class":1945},[95,7211,106],{"class":105},[95,7213,459],{"class":101},[95,7215,7216],{"class":105},"a,",[95,7218,459],{"class":101},[95,7220,7221],{"class":105},"b);\n",[95,7223,7224,7226,7228,7230,7232,7234],{"class":97,"line":1605},[95,7225,1533],{"class":105},[95,7227,1150],{"class":101},[95,7229,344],{"class":105},[95,7231,1150],{"class":101},[95,7233,1220],{"class":105},[95,7235,7236],{"class":164},"\u002F\u002F20\n",[95,7238,7239,7241,7243,7245,7247,7249],{"class":97,"line":1610},[95,7240,1533],{"class":105},[95,7242,1150],{"class":101},[95,7244,369],{"class":105},[95,7246,1150],{"class":101},[95,7248,1220],{"class":105},[95,7250,7251],{"class":164},"\u002F\u002F10\n",[95,7253,7254],{"class":97,"line":1624},[95,7255,1547],{"class":105},[10,7257,7258],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[37,7260,7262],{"id":7261},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[10,7264,7265],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[10,7267,7268,7269,7271],{},"例如数组：int arr",[95,7270,552],{},"={4,3,6,9,1,2,10,8,7,5}",[86,7273,7275],{"className":88,"code":7274,"language":90,"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",[92,7276,7277,7283,7293,7317,7321,7352,7356,7390,7394,7412,7416,7427,7442,7457,7461,7465,7469,7473,7477,7485,7489,7494,7548,7560,7572,7577,7585,7589,7594,7619,7623,7638,7647,7651],{"__ignoreMap":14},[95,7278,7279,7281],{"class":97,"line":98},[95,7280,1931],{"class":101},[95,7282,1934],{"class":210},[95,7284,7285,7287,7289,7291],{"class":97,"line":15},[95,7286,1939],{"class":101},[95,7288,1942],{"class":101},[95,7290,1946],{"class":1945},[95,7292,1272],{"class":105},[95,7294,7295,7297,7300,7302,7304,7306,7308,7310,7312,7315],{"class":97,"line":1161},[95,7296,5347],{"class":101},[95,7298,7299],{"class":1945}," bubbleSort",[95,7301,106],{"class":105},[95,7303,109],{"class":101},[95,7305,6501],{"class":101},[95,7307,10],{"class":5199},[95,7309,484],{"class":105},[95,7311,109],{"class":101},[95,7313,7314],{"class":5199}," len",[95,7316,112],{"class":105},[95,7318,7319],{"class":97,"line":1176},[95,7320,1528],{"class":105},[95,7322,7323,7325,7327,7329,7331,7333,7335,7337,7339,7342,7344,7346,7348,7350],{"class":97,"line":1182},[95,7324,3183],{"class":101},[95,7326,106],{"class":105},[95,7328,109],{"class":101},[95,7330,3014],{"class":105},[95,7332,151],{"class":101},[95,7334,297],{"class":154},[95,7336,3021],{"class":105},[95,7338,1016],{"class":101},[95,7340,7341],{"class":105},"len",[95,7343,638],{"class":101},[95,7345,323],{"class":154},[95,7347,3021],{"class":105},[95,7349,2274],{"class":101},[95,7351,112],{"class":105},[95,7353,7354],{"class":97,"line":1196},[95,7355,2012],{"class":105},[95,7357,7358,7360,7362,7364,7366,7368,7370,7372,7374,7376,7378,7380,7382,7384,7386,7388],{"class":97,"line":1202},[95,7359,3385],{"class":101},[95,7361,106],{"class":105},[95,7363,109],{"class":101},[95,7365,3392],{"class":105},[95,7367,151],{"class":101},[95,7369,297],{"class":154},[95,7371,3399],{"class":105},[95,7373,1016],{"class":101},[95,7375,7341],{"class":105},[95,7377,638],{"class":101},[95,7379,547],{"class":105},[95,7381,638],{"class":101},[95,7383,323],{"class":154},[95,7385,3399],{"class":105},[95,7387,2274],{"class":101},[95,7389,112],{"class":105},[95,7391,7392],{"class":97,"line":1293},[95,7393,2492],{"class":105},[95,7395,7396,7398,7401,7403,7406,7408,7410],{"class":97,"line":1299},[95,7397,4624],{"class":101},[95,7399,7400],{"class":105},"(p[j]",[95,7402,1066],{"class":101},[95,7404,7405],{"class":105},"p[j",[95,7407,587],{"class":101},[95,7409,323],{"class":154},[95,7411,4639],{"class":105},[95,7413,7414],{"class":97,"line":1311},[95,7415,4644],{"class":105},[95,7417,7418,7420,7422,7424],{"class":97,"line":1594},[95,7419,4649],{"class":101},[95,7421,4237],{"class":105},[95,7423,151],{"class":101},[95,7425,7426],{"class":105},"p[j];\n",[95,7428,7429,7432,7434,7436,7438,7440],{"class":97,"line":1599},[95,7430,7431],{"class":105},"                p[j]",[95,7433,151],{"class":101},[95,7435,7405],{"class":105},[95,7437,587],{"class":101},[95,7439,323],{"class":154},[95,7441,4672],{"class":105},[95,7443,7444,7447,7449,7451,7453,7455],{"class":97,"line":1605},[95,7445,7446],{"class":105},"                p[j",[95,7448,587],{"class":101},[95,7450,323],{"class":154},[95,7452,1046],{"class":105},[95,7454,151],{"class":101},[95,7456,4262],{"class":105},[95,7458,7459],{"class":97,"line":1610},[95,7460,4692],{"class":105},[95,7462,7463],{"class":97,"line":1624},[95,7464,2511],{"class":105},[95,7466,7467],{"class":97,"line":1629},[95,7468,2169],{"class":105},[95,7470,7471],{"class":97,"line":1635},[95,7472,1547],{"class":105},[95,7474,7475],{"class":97,"line":1656},[95,7476,2382],{"emptyLinePlaceholder":21},[95,7478,7479,7481,7483],{"class":97,"line":1661},[95,7480,109],{"class":101},[95,7482,1955],{"class":1945},[95,7484,1958],{"class":105},[95,7486,7487],{"class":97,"line":1675},[95,7488,1528],{"class":105},[95,7490,7491],{"class":97,"line":1680},[95,7492,7493],{"class":164},"    \u002F\u002F 1.创建数组\n",[95,7495,7496,7498,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546],{"class":97,"line":1709},[95,7497,1967],{"class":101},[95,7499,3944],{"class":105},[95,7501,552],{"class":154},[95,7503,1046],{"class":105},[95,7505,151],{"class":101},[95,7507,1002],{"class":105},[95,7509,399],{"class":154},[95,7511,484],{"class":105},[95,7513,177],{"class":154},[95,7515,484],{"class":105},[95,7517,450],{"class":154},[95,7519,484],{"class":105},[95,7521,526],{"class":154},[95,7523,484],{"class":105},[95,7525,323],{"class":154},[95,7527,484],{"class":105},[95,7529,183],{"class":154},[95,7531,484],{"class":105},[95,7533,552],{"class":154},[95,7535,484],{"class":105},[95,7537,501],{"class":154},[95,7539,484],{"class":105},[95,7541,475],{"class":154},[95,7543,484],{"class":105},[95,7545,425],{"class":154},[95,7547,3977],{"class":105},[95,7549,7550,7552,7554,7556,7558],{"class":97,"line":1714},[95,7551,1967],{"class":101},[95,7553,7314],{"class":105},[95,7555,151],{"class":101},[95,7557,552],{"class":154},[95,7559,1272],{"class":105},[95,7561,7562,7564,7566,7568,7570],{"class":97,"line":1731},[95,7563,1967],{"class":101},[95,7565,6501],{"class":101},[95,7567,10],{"class":105},[95,7569,151],{"class":101},[95,7571,7021],{"class":105},[95,7573,7574],{"class":97,"line":1736},[95,7575,7576],{"class":164},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[95,7578,7579,7582],{"class":97,"line":1741},[95,7580,7581],{"class":1945},"    bubbleSort",[95,7583,7584],{"class":105},"(p,len);\n",[95,7586,7587],{"class":97,"line":1746},[95,7588,2382],{"emptyLinePlaceholder":21},[95,7590,7591],{"class":97,"line":1760},[95,7592,7593],{"class":164},"    \u002F\u002F 3.打印排序后的数组\n",[95,7595,7596,7598,7600,7602,7604,7606,7608,7610,7612,7615,7617],{"class":97,"line":1765},[95,7597,3183],{"class":101},[95,7599,1640],{"class":105},[95,7601,109],{"class":101},[95,7603,3014],{"class":105},[95,7605,151],{"class":101},[95,7607,297],{"class":154},[95,7609,3196],{"class":105},[95,7611,1016],{"class":101},[95,7613,7614],{"class":105},"len; i",[95,7616,2274],{"class":101},[95,7618,112],{"class":105},[95,7620,7621],{"class":97,"line":2559},[95,7622,2012],{"class":105},[95,7624,7625,7627,7629,7631,7633,7636],{"class":97,"line":2573},[95,7626,3433],{"class":105},[95,7628,6402],{"class":101},[95,7630,10],{"class":105},[95,7632,1150],{"class":101},[95,7634,7635],{"class":210},"\"\"",[95,7637,1272],{"class":105},[95,7639,7640,7643,7645],{"class":97,"line":2581},[95,7641,7642],{"class":105},"        p",[95,7644,2274],{"class":101},[95,7646,1272],{"class":105},[95,7648,7649],{"class":97,"line":2586},[95,7650,2169],{"class":105},[95,7652,7653],{"class":97,"line":2592},[95,7654,1547],{"class":105},[5109,7656,7657],{},"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":7659},[7660,7661,7662,7663,7664,7665,7666,7667],{"id":6266,"depth":15,"text":6267},{"id":6432,"depth":15,"text":6433},{"id":6588,"depth":15,"text":6589},{"id":6666,"depth":15,"text":6667},{"id":6745,"depth":15,"text":6746},{"id":6844,"depth":15,"text":6845},{"id":7083,"depth":15,"text":7084},{"id":7261,"depth":15,"text":7262},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6255,"description":6263},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7674,"title":7675,"body":7676,"description":7683,"extension":18,"meta":10657,"navigation":21,"path":10658,"seo":10659,"stem":10660,"__hash__":10661},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7677,"toc":10648},[7678,7681,7684,7688,7691,7694,7705,8043,8046,8050,8053,8060,8315,8319,8322,8325,8480,8484,8487,8490,8696,8700,8703,9006,9009,9017,9021,9024,9175,9177,9188,9245,9249,9254,9911,9919,9922,10016,10019,10639,10645],[33,7679,7675],{"id":7680},"_4结构体",[10,7682,7683],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[37,7685,7687],{"id":7686},"_41结构体定义与使用","4.1结构体定义与使用",[10,7689,7690],{},"语法：struct 结构体名 {结构体成员列表}；",[10,7692,7693],{},"通过结构体创建变量的方式：",[1113,7695,7696,7699,7702],{},[52,7697,7698],{},"struct 结构体名 变量名",[52,7700,7701],{},"struct 结构体名 变量名={成员1值，成员2值...}",[52,7703,7704],{},"定义结构体时顺便创建变量",[86,7706,7708],{"className":88,"code":7707,"language":90,"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",[92,7709,7710,7716,7726,7733,7738,7746,7750,7755,7759,7764,7769,7774,7781,7786,7793,7797,7804,7808,7812,7816,7820,7824,7828,7834,7838,7844,7852,7860,7864,7869,7874,7885,7890,7902,7913,7924,7929,7953,7958,7964,7991,7996,8002,8014,8026,8038],{"__ignoreMap":14},[95,7711,7712,7714],{"class":97,"line":98},[95,7713,1931],{"class":101},[95,7715,1934],{"class":210},[95,7717,7718,7720,7722,7724],{"class":97,"line":15},[95,7719,1939],{"class":101},[95,7721,1942],{"class":101},[95,7723,1946],{"class":1945},[95,7725,1272],{"class":105},[95,7727,7728,7730],{"class":97,"line":1161},[95,7729,1931],{"class":101},[95,7731,7732],{"class":210},"\u003Cstring>\n",[95,7734,7735],{"class":97,"line":1176},[95,7736,7737],{"class":164},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[95,7739,7740,7743],{"class":97,"line":1182},[95,7741,7742],{"class":101},"struct",[95,7744,7745],{"class":1945}," Student\n",[95,7747,7748],{"class":97,"line":1196},[95,7749,1528],{"class":105},[95,7751,7752],{"class":97,"line":1202},[95,7753,7754],{"class":164},"    \u002F\u002F成员列表\n",[95,7756,7757],{"class":97,"line":1293},[95,7758,2382],{"emptyLinePlaceholder":21},[95,7760,7761],{"class":97,"line":1299},[95,7762,7763],{"class":164},"    \u002F\u002F姓名\n",[95,7765,7766],{"class":97,"line":1311},[95,7767,7768],{"class":105},"    string name;\n",[95,7770,7771],{"class":97,"line":1594},[95,7772,7773],{"class":164},"    \u002F\u002F年龄\n",[95,7775,7776,7778],{"class":97,"line":1599},[95,7777,1967],{"class":101},[95,7779,7780],{"class":105}," age;\n",[95,7782,7783],{"class":97,"line":1605},[95,7784,7785],{"class":164},"    \u002F\u002F分数\n",[95,7787,7788,7790],{"class":97,"line":1610},[95,7789,1967],{"class":101},[95,7791,7792],{"class":105}," score;\n",[95,7794,7795],{"class":97,"line":1624},[95,7796,3977],{"class":105},[95,7798,7799,7801],{"class":97,"line":1629},[95,7800,7742],{"class":101},[95,7802,7803],{"class":1945}," School\n",[95,7805,7806],{"class":97,"line":1635},[95,7807,1528],{"class":105},[95,7809,7810],{"class":97,"line":1656},[95,7811,7754],{"class":164},[95,7813,7814],{"class":97,"line":1661},[95,7815,2382],{"emptyLinePlaceholder":21},[95,7817,7818],{"class":97,"line":1675},[95,7819,7763],{"class":164},[95,7821,7822],{"class":97,"line":1680},[95,7823,7768],{"class":105},[95,7825,7826],{"class":97,"line":1709},[95,7827,7773],{"class":164},[95,7829,7830,7832],{"class":97,"line":1714},[95,7831,1967],{"class":101},[95,7833,7780],{"class":105},[95,7835,7836],{"class":97,"line":1731},[95,7837,7785],{"class":164},[95,7839,7840,7842],{"class":97,"line":1736},[95,7841,1967],{"class":101},[95,7843,7792],{"class":105},[95,7845,7846,7849],{"class":97,"line":1741},[95,7847,7848],{"class":105},"} s3;",[95,7850,7851],{"class":164}," \u002F\u002F创建结构体时就创建了变量\n",[95,7853,7854,7856,7858],{"class":97,"line":1746},[95,7855,109],{"class":101},[95,7857,1955],{"class":1945},[95,7859,1958],{"class":105},[95,7861,7862],{"class":97,"line":1760},[95,7863,1528],{"class":105},[95,7865,7866],{"class":97,"line":1765},[95,7867,7868],{"class":164},"    \u002F\u002F2.通过学生类型创建具体学生\n",[95,7870,7871],{"class":97,"line":2559},[95,7872,7873],{"class":164},"    \u002F\u002F2.1 struct Student s1;\n",[95,7875,7876,7879,7882],{"class":97,"line":2573},[95,7877,7878],{"class":101},"    struct",[95,7880,7881],{"class":1945}," Student",[95,7883,7884],{"class":105}," s1;\n",[95,7886,7887],{"class":97,"line":2581},[95,7888,7889],{"class":164},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[95,7891,7892,7895,7897,7900],{"class":97,"line":2586},[95,7893,7894],{"class":105},"    s1.name",[95,7896,151],{"class":101},[95,7898,7899],{"class":210},"\"张三\"",[95,7901,1272],{"class":105},[95,7903,7904,7907,7909,7911],{"class":97,"line":2592},[95,7905,7906],{"class":105},"    s1.age",[95,7908,151],{"class":101},[95,7910,756],{"class":154},[95,7912,1272],{"class":105},[95,7914,7915,7918,7920,7922],{"class":97,"line":2598},[95,7916,7917],{"class":105},"    s1.score",[95,7919,151],{"class":101},[95,7921,360],{"class":154},[95,7923,1272],{"class":105},[95,7925,7926],{"class":97,"line":2603},[95,7927,7928],{"class":164},"    \u002F\u002F输出结果\n",[95,7930,7932,7934,7936,7939,7941,7944,7946,7949,7951],{"class":97,"line":7931},37,[95,7933,1533],{"class":105},[95,7935,1150],{"class":101},[95,7937,7938],{"class":105},"s1.name",[95,7940,1150],{"class":101},[95,7942,7943],{"class":105},"s1.age",[95,7945,1150],{"class":101},[95,7947,7948],{"class":105},"s1.score",[95,7950,1150],{"class":101},[95,7952,1173],{"class":105},[95,7954,7956],{"class":97,"line":7955},38,[95,7957,2382],{"emptyLinePlaceholder":21},[95,7959,7961],{"class":97,"line":7960},39,[95,7962,7963],{"class":164},"    \u002F\u002F2.2 struct Student s2={...}\n",[95,7965,7967,7969,7971,7974,7976,7978,7981,7983,7985,7987,7989],{"class":97,"line":7966},40,[95,7968,7878],{"class":101},[95,7970,7881],{"class":1945},[95,7972,7973],{"class":105}," s2",[95,7975,151],{"class":101},[95,7977,1002],{"class":105},[95,7979,7980],{"class":210},"\"王五\"",[95,7982,484],{"class":105},[95,7984,756],{"class":154},[95,7986,484],{"class":105},[95,7988,360],{"class":154},[95,7990,3977],{"class":105},[95,7992,7994],{"class":97,"line":7993},41,[95,7995,2382],{"emptyLinePlaceholder":21},[95,7997,7999],{"class":97,"line":7998},42,[95,8000,8001],{"class":164},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[95,8003,8005,8008,8010,8012],{"class":97,"line":8004},43,[95,8006,8007],{"class":105},"    s3.name",[95,8009,151],{"class":101},[95,8011,3660],{"class":210},[95,8013,1272],{"class":105},[95,8015,8017,8020,8022,8024],{"class":97,"line":8016},44,[95,8018,8019],{"class":105},"    s3.age",[95,8021,151],{"class":101},[95,8023,756],{"class":154},[95,8025,1272],{"class":105},[95,8027,8029,8032,8034,8036],{"class":97,"line":8028},45,[95,8030,8031],{"class":105},"    s3.score",[95,8033,151],{"class":101},[95,8035,806],{"class":154},[95,8037,1272],{"class":105},[95,8039,8041],{"class":97,"line":8040},46,[95,8042,1547],{"class":105},[10,8044,8045],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[37,8047,8049],{"id":8048},"_42结构体数组","4.2结构体数组",[10,8051,8052],{},"将自定义的结构体放入到数组中方便维护",[10,8054,8055,8056,8059],{},"语法：struct 结构体名 数组名",[95,8057,8058],{},"元素个数","={ {}，{},...{} };",[86,8061,8063],{"className":88,"code":8062,"language":90,"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",[92,8064,8065,8071,8081,8087,8092,8098,8102,8106,8112,8118,8122,8126,8134,8138,8143,8158,8162,8178,8194,8198,8203,8219,8234,8249,8254,8280,8284,8307,8311],{"__ignoreMap":14},[95,8066,8067,8069],{"class":97,"line":98},[95,8068,1931],{"class":101},[95,8070,1934],{"class":210},[95,8072,8073,8075,8077,8079],{"class":97,"line":15},[95,8074,1939],{"class":101},[95,8076,1942],{"class":101},[95,8078,1946],{"class":1945},[95,8080,1272],{"class":105},[95,8082,8083,8085],{"class":97,"line":1161},[95,8084,1931],{"class":101},[95,8086,7732],{"class":210},[95,8088,8089],{"class":97,"line":1176},[95,8090,8091],{"class":164},"\u002F\u002F1.定义结构体\n",[95,8093,8094,8096],{"class":97,"line":1182},[95,8095,7742],{"class":101},[95,8097,7745],{"class":1945},[95,8099,8100],{"class":97,"line":1196},[95,8101,1528],{"class":105},[95,8103,8104],{"class":97,"line":1202},[95,8105,7768],{"class":105},[95,8107,8108,8110],{"class":97,"line":1293},[95,8109,1967],{"class":101},[95,8111,7780],{"class":105},[95,8113,8114,8116],{"class":97,"line":1299},[95,8115,1967],{"class":101},[95,8117,7792],{"class":105},[95,8119,8120],{"class":97,"line":1311},[95,8121,2382],{"emptyLinePlaceholder":21},[95,8123,8124],{"class":97,"line":1594},[95,8125,3977],{"class":105},[95,8127,8128,8130,8132],{"class":97,"line":1599},[95,8129,109],{"class":101},[95,8131,1955],{"class":1945},[95,8133,1958],{"class":105},[95,8135,8136],{"class":97,"line":1605},[95,8137,1528],{"class":105},[95,8139,8140],{"class":97,"line":1610},[95,8141,8142],{"class":164},"    \u002F\u002F2.创建结构体数组\n",[95,8144,8145,8147,8149,8152,8154,8156],{"class":97,"line":1624},[95,8146,7878],{"class":101},[95,8148,7881],{"class":1945},[95,8150,8151],{"class":105}," stuArray[",[95,8153,183],{"class":154},[95,8155,1046],{"class":105},[95,8157,4890],{"class":101},[95,8159,8160],{"class":97,"line":1629},[95,8161,2012],{"class":105},[95,8163,8164,8166,8168,8170,8172,8174,8176],{"class":97,"line":1635},[95,8165,4899],{"class":105},[95,8167,7899],{"class":210},[95,8169,484],{"class":105},[95,8171,756],{"class":154},[95,8173,484],{"class":105},[95,8175,417],{"class":154},[95,8177,4912],{"class":105},[95,8179,8180,8182,8184,8186,8188,8190,8192],{"class":97,"line":1656},[95,8181,4899],{"class":105},[95,8183,3660],{"class":210},[95,8185,484],{"class":105},[95,8187,681],{"class":154},[95,8189,484],{"class":105},[95,8191,681],{"class":154},[95,8193,1547],{"class":105},[95,8195,8196],{"class":97,"line":1661},[95,8197,2169],{"class":105},[95,8199,8200],{"class":97,"line":1675},[95,8201,8202],{"class":164},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[95,8204,8205,8208,8210,8213,8215,8217],{"class":97,"line":1680},[95,8206,8207],{"class":105},"    stuArray[",[95,8209,323],{"class":154},[95,8211,8212],{"class":105},"].name",[95,8214,151],{"class":101},[95,8216,3683],{"class":210},[95,8218,1272],{"class":105},[95,8220,8221,8223,8225,8228,8230,8232],{"class":97,"line":1709},[95,8222,8207],{"class":105},[95,8224,323],{"class":154},[95,8226,8227],{"class":105},"].age",[95,8229,151],{"class":101},[95,8231,183],{"class":154},[95,8233,1272],{"class":105},[95,8235,8236,8238,8240,8243,8245,8247],{"class":97,"line":1714},[95,8237,8207],{"class":105},[95,8239,323],{"class":154},[95,8241,8242],{"class":105},"].score",[95,8244,151],{"class":101},[95,8246,183],{"class":154},[95,8248,1272],{"class":105},[95,8250,8251],{"class":97,"line":1731},[95,8252,8253],{"class":164},"    \u002F\u002F4.遍历结构体数组\n",[95,8255,8256,8258,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278],{"class":97,"line":1736},[95,8257,3183],{"class":101},[95,8259,1640],{"class":105},[95,8261,109],{"class":101},[95,8263,3014],{"class":105},[95,8265,151],{"class":101},[95,8267,297],{"class":154},[95,8269,3021],{"class":105},[95,8271,1016],{"class":101},[95,8273,183],{"class":154},[95,8275,3021],{"class":105},[95,8277,2274],{"class":101},[95,8279,112],{"class":105},[95,8281,8282],{"class":97,"line":1741},[95,8283,2012],{"class":105},[95,8285,8286,8288,8290,8293,8295,8298,8300,8303,8305],{"class":97,"line":1746},[95,8287,3433],{"class":105},[95,8289,1150],{"class":101},[95,8291,8292],{"class":105},"stuArray[i].name",[95,8294,1150],{"class":101},[95,8296,8297],{"class":105},"stuArray[i].age",[95,8299,1150],{"class":101},[95,8301,8302],{"class":105},"stuArray[i].score",[95,8304,1150],{"class":101},[95,8306,1173],{"class":105},[95,8308,8309],{"class":97,"line":1760},[95,8310,2169],{"class":105},[95,8312,8313],{"class":97,"line":1765},[95,8314,1547],{"class":105},[37,8316,8318],{"id":8317},"_43结构体指针","4.3结构体指针",[10,8320,8321],{},"作用：通过指针访问结构体中的成员",[10,8323,8324],{},"利用操作符->可以通过结构体指针访问结构体属性",[86,8326,8328],{"className":88,"code":8327,"language":90,"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",[92,8329,8330,8336,8346,8352,8356,8362,8366,8370,8376,8382,8386,8394,8398,8403,8428,8433,8448,8453,8476],{"__ignoreMap":14},[95,8331,8332,8334],{"class":97,"line":98},[95,8333,1931],{"class":101},[95,8335,1934],{"class":210},[95,8337,8338,8340,8342,8344],{"class":97,"line":15},[95,8339,1939],{"class":101},[95,8341,1942],{"class":101},[95,8343,1946],{"class":1945},[95,8345,1272],{"class":105},[95,8347,8348,8350],{"class":97,"line":1161},[95,8349,1931],{"class":101},[95,8351,7732],{"class":210},[95,8353,8354],{"class":97,"line":1176},[95,8355,8091],{"class":164},[95,8357,8358,8360],{"class":97,"line":1182},[95,8359,7742],{"class":101},[95,8361,7745],{"class":1945},[95,8363,8364],{"class":97,"line":1196},[95,8365,1528],{"class":105},[95,8367,8368],{"class":97,"line":1202},[95,8369,7768],{"class":105},[95,8371,8372,8374],{"class":97,"line":1293},[95,8373,1967],{"class":101},[95,8375,7780],{"class":105},[95,8377,8378,8380],{"class":97,"line":1299},[95,8379,1967],{"class":101},[95,8381,7792],{"class":105},[95,8383,8384],{"class":97,"line":1311},[95,8385,3977],{"class":105},[95,8387,8388,8390,8392],{"class":97,"line":1594},[95,8389,109],{"class":101},[95,8391,1955],{"class":1945},[95,8393,1958],{"class":105},[95,8395,8396],{"class":97,"line":1599},[95,8397,1528],{"class":105},[95,8399,8400],{"class":97,"line":1605},[95,8401,8402],{"class":164},"    \u002F\u002F创建学生结构体变量\n",[95,8404,8405,8407,8409,8412,8414,8416,8418,8420,8422,8424,8426],{"class":97,"line":1610},[95,8406,7878],{"class":101},[95,8408,7881],{"class":1945},[95,8410,8411],{"class":105}," s",[95,8413,151],{"class":101},[95,8415,1002],{"class":105},[95,8417,7899],{"class":210},[95,8419,484],{"class":105},[95,8421,756],{"class":154},[95,8423,484],{"class":105},[95,8425,1704],{"class":154},[95,8427,3977],{"class":105},[95,8429,8430],{"class":97,"line":1624},[95,8431,8432],{"class":164},"    \u002F\u002F通过指针指向结构体变量\n",[95,8434,8435,8437,8439,8441,8443,8445],{"class":97,"line":1629},[95,8436,7878],{"class":101},[95,8438,7881],{"class":1945},[95,8440,6501],{"class":101},[95,8442,10],{"class":105},[95,8444,6322],{"class":101},[95,8446,8447],{"class":105},"s\n",[95,8449,8450],{"class":97,"line":1635},[95,8451,8452],{"class":164},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[95,8454,8455,8457,8459,8462,8464,8467,8469,8472,8474],{"class":97,"line":1656},[95,8456,1533],{"class":105},[95,8458,1150],{"class":101},[95,8460,8461],{"class":105},"p->name",[95,8463,1150],{"class":101},[95,8465,8466],{"class":105},"p->age",[95,8468,1150],{"class":101},[95,8470,8471],{"class":105},"p->score",[95,8473,1150],{"class":101},[95,8475,1173],{"class":105},[95,8477,8478],{"class":97,"line":1661},[95,8479,1547],{"class":105},[37,8481,8483],{"id":8482},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[10,8485,8486],{},"作用：结构体中的成员可以是另一个结构体",[10,8488,8489],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[86,8491,8493],{"className":88,"code":8492,"language":90,"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",[92,8494,8495,8501,8511,8517,8522,8530,8534,8538,8544,8550,8554,8559,8566,8570,8577,8581,8587,8592,8596,8604,8608,8613,8618,8623,8634,8646,8657,8670,8681,8692],{"__ignoreMap":14},[95,8496,8497,8499],{"class":97,"line":98},[95,8498,1931],{"class":101},[95,8500,1934],{"class":210},[95,8502,8503,8505,8507,8509],{"class":97,"line":15},[95,8504,1939],{"class":101},[95,8506,1942],{"class":101},[95,8508,1946],{"class":1945},[95,8510,1272],{"class":105},[95,8512,8513,8515],{"class":97,"line":1161},[95,8514,1931],{"class":101},[95,8516,7732],{"class":210},[95,8518,8519],{"class":97,"line":1176},[95,8520,8521],{"class":164},"\u002F\u002F定义学生结构体\n",[95,8523,8524,8526,8528],{"class":97,"line":1182},[95,8525,7742],{"class":101},[95,8527,7881],{"class":1945},[95,8529,2656],{"class":105},[95,8531,8532],{"class":97,"line":1196},[95,8533,1528],{"class":105},[95,8535,8536],{"class":97,"line":1202},[95,8537,7768],{"class":105},[95,8539,8540,8542],{"class":97,"line":1293},[95,8541,1967],{"class":101},[95,8543,7780],{"class":105},[95,8545,8546,8548],{"class":97,"line":1299},[95,8547,1967],{"class":101},[95,8549,7792],{"class":105},[95,8551,8552],{"class":97,"line":1311},[95,8553,1547],{"class":105},[95,8555,8556],{"class":97,"line":1594},[95,8557,8558],{"class":164},"\u002F\u002F定义老师结构体\n",[95,8560,8561,8563],{"class":97,"line":1599},[95,8562,7742],{"class":101},[95,8564,8565],{"class":1945}," Teacher\n",[95,8567,8568],{"class":97,"line":1605},[95,8569,1528],{"class":105},[95,8571,8572,8574],{"class":97,"line":1610},[95,8573,1967],{"class":101},[95,8575,8576],{"class":105}," id;\n",[95,8578,8579],{"class":97,"line":1624},[95,8580,7768],{"class":105},[95,8582,8583,8585],{"class":97,"line":1629},[95,8584,1967],{"class":101},[95,8586,7780],{"class":105},[95,8588,8589],{"class":97,"line":1635},[95,8590,8591],{"class":105},"    Student stu;\n",[95,8593,8594],{"class":97,"line":1656},[95,8595,1547],{"class":105},[95,8597,8598,8600,8602],{"class":97,"line":1661},[95,8599,109],{"class":101},[95,8601,1955],{"class":1945},[95,8603,5961],{"class":105},[95,8605,8606],{"class":97,"line":1675},[95,8607,1528],{"class":105},[95,8609,8610],{"class":97,"line":1680},[95,8611,8612],{"class":164},"    \u002F\u002F结构体嵌套结构体\n",[95,8614,8615],{"class":97,"line":1709},[95,8616,8617],{"class":164},"    \u002F\u002F创建老师\n",[95,8619,8620],{"class":97,"line":1714},[95,8621,8622],{"class":105},"    Teacher t;\n",[95,8624,8625,8628,8630,8632],{"class":97,"line":1731},[95,8626,8627],{"class":105},"    t.id",[95,8629,151],{"class":101},[95,8631,417],{"class":154},[95,8633,1272],{"class":105},[95,8635,8636,8639,8641,8644],{"class":97,"line":1736},[95,8637,8638],{"class":105},"    t.name",[95,8640,151],{"class":101},[95,8642,8643],{"class":210},"\"老王\"",[95,8645,1272],{"class":105},[95,8647,8648,8651,8653,8655],{"class":97,"line":1741},[95,8649,8650],{"class":105},"    t.age",[95,8652,151],{"class":101},[95,8654,756],{"class":154},[95,8656,1272],{"class":105},[95,8658,8659,8662,8664,8667],{"class":97,"line":1746},[95,8660,8661],{"class":105},"    t.stu.name",[95,8663,151],{"class":101},[95,8665,8666],{"class":210},"\"小王\"",[95,8668,8669],{"class":105},"；\n",[95,8671,8672,8675,8677,8679],{"class":97,"line":1760},[95,8673,8674],{"class":105},"    t.stu.age",[95,8676,151],{"class":101},[95,8678,806],{"class":154},[95,8680,1272],{"class":105},[95,8682,8683,8686,8688,8690],{"class":97,"line":1765},[95,8684,8685],{"class":105},"    t.stu.score",[95,8687,151],{"class":101},[95,8689,450],{"class":154},[95,8691,1272],{"class":105},[95,8693,8694],{"class":97,"line":2559},[95,8695,1547],{"class":105},[37,8697,8699],{"id":8698},"_45结构体做函数参数","4.5结构体做函数参数",[10,8701,8702],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[86,8704,8706],{"className":88,"code":8705,"language":90,"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",[92,8707,8708,8714,8724,8730,8736,8740,8744,8750,8756,8760,8765,8770,8787,8791,8824,8828,8833,8852,8856,8887,8891,8899,8903,8912,8924,8936,8948,8961,8969,8982,8994,9002],{"__ignoreMap":14},[95,8709,8710,8712],{"class":97,"line":98},[95,8711,1931],{"class":101},[95,8713,1934],{"class":210},[95,8715,8716,8718,8720,8722],{"class":97,"line":15},[95,8717,1939],{"class":101},[95,8719,1942],{"class":101},[95,8721,1946],{"class":1945},[95,8723,1272],{"class":105},[95,8725,8726,8728],{"class":97,"line":1161},[95,8727,1931],{"class":101},[95,8729,7732],{"class":210},[95,8731,8732,8734],{"class":97,"line":1176},[95,8733,7742],{"class":101},[95,8735,7745],{"class":1945},[95,8737,8738],{"class":97,"line":1182},[95,8739,1528],{"class":105},[95,8741,8742],{"class":97,"line":1196},[95,8743,7768],{"class":105},[95,8745,8746,8748],{"class":97,"line":1202},[95,8747,1967],{"class":101},[95,8749,7780],{"class":105},[95,8751,8752,8754],{"class":97,"line":1293},[95,8753,1967],{"class":101},[95,8755,7792],{"class":105},[95,8757,8758],{"class":97,"line":1299},[95,8759,3977],{"class":105},[95,8761,8762],{"class":97,"line":1311},[95,8763,8764],{"class":164},"\u002F\u002F打印学生信息的函数\n",[95,8766,8767],{"class":97,"line":1594},[95,8768,8769],{"class":164},"\u002F\u002F值传递\n",[95,8771,8772,8774,8777,8779,8781,8783,8785],{"class":97,"line":1599},[95,8773,5347],{"class":101},[95,8775,8776],{"class":1945}," printStudent1",[95,8778,106],{"class":105},[95,8780,7742],{"class":101},[95,8782,7881],{"class":1945},[95,8784,8411],{"class":5199},[95,8786,112],{"class":105},[95,8788,8789],{"class":97,"line":1605},[95,8790,1528],{"class":105},[95,8792,8793,8795,8797,8800,8802,8805,8807,8810,8812,8814,8816,8819,8821],{"class":97,"line":1610},[95,8794,6512],{"class":105},[95,8796,1150],{"class":101},[95,8798,8799],{"class":105}," s.name ",[95,8801,1150],{"class":101},[95,8803,8804],{"class":210}," \" \"",[95,8806,1426],{"class":101},[95,8808,8809],{"class":105}," s.age ",[95,8811,1150],{"class":101},[95,8813,8804],{"class":210},[95,8815,1426],{"class":101},[95,8817,8818],{"class":105}," s.score ",[95,8820,1150],{"class":101},[95,8822,8823],{"class":105}," endl;\n",[95,8825,8826],{"class":97,"line":1624},[95,8827,1547],{"class":105},[95,8829,8830],{"class":97,"line":1629},[95,8831,8832],{"class":164},"\u002F\u002F地址传递\n",[95,8834,8835,8837,8840,8842,8844,8846,8848,8850],{"class":97,"line":1635},[95,8836,5347],{"class":101},[95,8838,8839],{"class":1945}," printStudent2",[95,8841,106],{"class":105},[95,8843,7742],{"class":101},[95,8845,7881],{"class":1945},[95,8847,6501],{"class":101},[95,8849,801],{"class":5199},[95,8851,112],{"class":105},[95,8853,8854],{"class":97,"line":1656},[95,8855,1528],{"class":105},[95,8857,8858,8860,8862,8865,8867,8869,8871,8874,8876,8878,8880,8883,8885],{"class":97,"line":1661},[95,8859,6512],{"class":105},[95,8861,1150],{"class":101},[95,8863,8864],{"class":105}," s->name ",[95,8866,1150],{"class":101},[95,8868,8804],{"class":210},[95,8870,1426],{"class":101},[95,8872,8873],{"class":105}," s->age ",[95,8875,1150],{"class":101},[95,8877,8804],{"class":210},[95,8879,1426],{"class":101},[95,8881,8882],{"class":105}," s->score ",[95,8884,1150],{"class":101},[95,8886,8823],{"class":105},[95,8888,8889],{"class":97,"line":1675},[95,8890,1547],{"class":105},[95,8892,8893,8895,8897],{"class":97,"line":1680},[95,8894,109],{"class":101},[95,8896,1955],{"class":1945},[95,8898,1958],{"class":105},[95,8900,8901],{"class":97,"line":1709},[95,8902,1528],{"class":105},[95,8904,8905,8907,8909],{"class":97,"line":1714},[95,8906,7878],{"class":101},[95,8908,7881],{"class":1945},[95,8910,8911],{"class":105}," s;\n",[95,8913,8914,8917,8919,8922],{"class":97,"line":1731},[95,8915,8916],{"class":105},"    s.name ",[95,8918,151],{"class":101},[95,8920,8921],{"class":210}," \"张三\"",[95,8923,1272],{"class":105},[95,8925,8926,8929,8931,8934],{"class":97,"line":1736},[95,8927,8928],{"class":105},"    s.age ",[95,8930,151],{"class":101},[95,8932,8933],{"class":154}," 20",[95,8935,1272],{"class":105},[95,8937,8938,8941,8943,8946],{"class":97,"line":1741},[95,8939,8940],{"class":105},"    s.score ",[95,8942,151],{"class":101},[95,8944,8945],{"class":154}," 85",[95,8947,1272],{"class":105},[95,8949,8950,8952,8954,8957,8959],{"class":97,"line":1746},[95,8951,1533],{"class":105},[95,8953,1150],{"class":101},[95,8955,8956],{"class":210},"\"值传递:\"",[95,8958,1150],{"class":101},[95,8960,1173],{"class":105},[95,8962,8963,8966],{"class":97,"line":1760},[95,8964,8965],{"class":1945},"    printStudent1",[95,8967,8968],{"class":105},"(s);\n",[95,8970,8971,8973,8975,8978,8980],{"class":97,"line":1765},[95,8972,1533],{"class":105},[95,8974,1150],{"class":101},[95,8976,8977],{"class":210},"\"地址传递:\"",[95,8979,1150],{"class":101},[95,8981,1173],{"class":105},[95,8983,8984,8987,8989,8991],{"class":97,"line":2559},[95,8985,8986],{"class":1945},"    printStudent2",[95,8988,106],{"class":105},[95,8990,459],{"class":101},[95,8992,8993],{"class":105},"s); \n",[95,8995,8996,8998,9000],{"class":97,"line":2573},[95,8997,4072],{"class":101},[95,8999,4075],{"class":154},[95,9001,1272],{"class":105},[95,9003,9004],{"class":97,"line":2581},[95,9005,1547],{"class":105},[10,9007,9008],{},"注意：",[1113,9010,9011,9014],{},[52,9012,9013],{},"1.先定义结构体，不要在函数中写结构体的定义",[52,9015,9016],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[37,9018,9020],{"id":9019},"_46结构体中const使用场景","4.6结构体中const使用场景",[10,9022,9023],{},"用const防止误操作",[86,9025,9027],{"className":88,"code":9026,"language":90,"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",[92,9028,9029,9035,9045,9051,9056,9060,9064,9070,9076,9080,9096,9100,9123,9127,9135,9139,9160,9167,9171],{"__ignoreMap":14},[95,9030,9031,9033],{"class":97,"line":98},[95,9032,1931],{"class":101},[95,9034,1934],{"class":210},[95,9036,9037,9039,9041,9043],{"class":97,"line":15},[95,9038,1939],{"class":101},[95,9040,1942],{"class":101},[95,9042,1946],{"class":1945},[95,9044,1272],{"class":105},[95,9046,9047,9049],{"class":97,"line":1161},[95,9048,1931],{"class":101},[95,9050,7732],{"class":210},[95,9052,9053],{"class":97,"line":1176},[95,9054,9055],{"class":105},"sctuct Student\n",[95,9057,9058],{"class":97,"line":1182},[95,9059,1528],{"class":105},[95,9061,9062],{"class":97,"line":1196},[95,9063,7768],{"class":105},[95,9065,9066,9068],{"class":97,"line":1202},[95,9067,1967],{"class":101},[95,9069,7780],{"class":105},[95,9071,9072,9074],{"class":97,"line":1293},[95,9073,1967],{"class":101},[95,9075,7792],{"class":105},[95,9077,9078],{"class":97,"line":1299},[95,9079,3977],{"class":105},[95,9081,9082,9084,9087,9089,9092,9094],{"class":97,"line":1311},[95,9083,5347],{"class":101},[95,9085,9086],{"class":1945}," printStudents",[95,9088,106],{"class":105},[95,9090,9091],{"class":1945},"student",[95,9093,8411],{"class":5199},[95,9095,112],{"class":105},[95,9097,9098],{"class":97,"line":1594},[95,9099,1528],{"class":105},[95,9101,9102,9104,9106,9109,9111,9114,9116,9119,9121],{"class":97,"line":1599},[95,9103,1533],{"class":105},[95,9105,1150],{"class":101},[95,9107,9108],{"class":105},"s.name",[95,9110,1150],{"class":101},[95,9112,9113],{"class":105},"s.age",[95,9115,1150],{"class":101},[95,9117,9118],{"class":105},"s.score",[95,9120,1150],{"class":101},[95,9122,1173],{"class":105},[95,9124,9125],{"class":97,"line":1605},[95,9126,1547],{"class":105},[95,9128,9129,9131,9133],{"class":97,"line":1610},[95,9130,109],{"class":101},[95,9132,1955],{"class":1945},[95,9134,5961],{"class":105},[95,9136,9137],{"class":97,"line":1624},[95,9138,1528],{"class":105},[95,9140,9141,9144,9146,9148,9150,9152,9154,9156,9158],{"class":97,"line":1629},[95,9142,9143],{"class":105},"    Student s",[95,9145,151],{"class":101},[95,9147,1002],{"class":105},[95,9149,7899],{"class":210},[95,9151,484],{"class":105},[95,9153,756],{"class":154},[95,9155,484],{"class":105},[95,9157,756],{"class":154},[95,9159,3977],{"class":105},[95,9161,9162,9165],{"class":97,"line":1635},[95,9163,9164],{"class":1945},"    printStudent",[95,9166,8968],{"class":105},[95,9168,9169],{"class":97,"line":1656},[95,9170,2382],{"emptyLinePlaceholder":21},[95,9172,9173],{"class":97,"line":1661},[95,9174,1547],{"class":105},[10,9176,9008],{},[1113,9178,9179,9182,9185],{},[52,9180,9181],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[52,9183,9184],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[52,9186,9187],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[86,9189,9191],{"className":88,"code":9190,"language":90,"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",[92,9192,9193,9212,9216,9221,9241],{"__ignoreMap":14},[95,9194,9195,9197,9199,9201,9203,9206,9208,9210],{"class":97,"line":98},[95,9196,5347],{"class":101},[95,9198,9086],{"class":1945},[95,9200,106],{"class":105},[95,9202,6775],{"class":101},[95,9204,9205],{"class":1945}," student",[95,9207,6501],{"class":101},[95,9209,801],{"class":5199},[95,9211,112],{"class":105},[95,9213,9214],{"class":97,"line":15},[95,9215,1528],{"class":105},[95,9217,9218],{"class":97,"line":1161},[95,9219,9220],{"class":164},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[95,9222,9223,9225,9227,9229,9231,9233,9235,9237,9239],{"class":97,"line":1176},[95,9224,1533],{"class":105},[95,9226,1150],{"class":101},[95,9228,9108],{"class":105},[95,9230,1150],{"class":101},[95,9232,9113],{"class":105},[95,9234,1150],{"class":101},[95,9236,9118],{"class":105},[95,9238,1150],{"class":101},[95,9240,1173],{"class":105},[95,9242,9243],{"class":97,"line":1182},[95,9244,1547],{"class":105},[37,9246,9248],{"id":9247},"_47案例","4.7案例",[49,9250,9251],{},[52,9252,9253],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[86,9255,9257],{"className":88,"code":9256,"language":90,"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",[92,9258,9259,9265,9275,9281,9288,9292,9298,9302,9307,9313,9319,9323,9327,9333,9337,9342,9347,9360,9364,9369,9395,9399,9411,9438,9442,9454,9464,9468,9473,9502,9506,9518,9527,9554,9565,9575,9579,9583,9587,9592,9616,9620,9644,9648,9667,9693,9697,9722,9745,9769,9774,9779,9784,9793,9798,9804,9825,9831,9845,9851,9878,9887,9893,9901,9906],{"__ignoreMap":14},[95,9260,9261,9263],{"class":97,"line":98},[95,9262,1931],{"class":101},[95,9264,1934],{"class":210},[95,9266,9267,9269,9271,9273],{"class":97,"line":15},[95,9268,1939],{"class":101},[95,9270,1942],{"class":101},[95,9272,1946],{"class":1945},[95,9274,1272],{"class":105},[95,9276,9277,9279],{"class":97,"line":1161},[95,9278,1931],{"class":101},[95,9280,7732],{"class":210},[95,9282,9283,9285],{"class":97,"line":1176},[95,9284,1931],{"class":101},[95,9286,9287],{"class":210},"\u003Cctime>\n",[95,9289,9290],{"class":97,"line":1182},[95,9291,8521],{"class":164},[95,9293,9294,9296],{"class":97,"line":1196},[95,9295,7742],{"class":101},[95,9297,7745],{"class":1945},[95,9299,9300],{"class":97,"line":1202},[95,9301,1528],{"class":105},[95,9303,9304],{"class":97,"line":1293},[95,9305,9306],{"class":105},"    string sName;\n",[95,9308,9309,9311],{"class":97,"line":1299},[95,9310,1967],{"class":101},[95,9312,7780],{"class":105},[95,9314,9315,9317],{"class":97,"line":1311},[95,9316,1967],{"class":101},[95,9318,7792],{"class":105},[95,9320,9321],{"class":97,"line":1594},[95,9322,3977],{"class":105},[95,9324,9325],{"class":97,"line":1599},[95,9326,8558],{"class":164},[95,9328,9329,9331],{"class":97,"line":1605},[95,9330,7742],{"class":101},[95,9332,8565],{"class":1945},[95,9334,9335],{"class":97,"line":1610},[95,9336,1528],{"class":105},[95,9338,9339],{"class":97,"line":1624},[95,9340,9341],{"class":105},"    string tName;\n",[95,9343,9344],{"class":97,"line":1629},[95,9345,9346],{"class":164},"    \u002F\u002F学生数组\n",[95,9348,9349,9351,9353,9356,9358],{"class":97,"line":1635},[95,9350,7878],{"class":101},[95,9352,7881],{"class":1945},[95,9354,9355],{"class":105}," sArray[",[95,9357,425],{"class":154},[95,9359,4672],{"class":105},[95,9361,9362],{"class":97,"line":1656},[95,9363,3977],{"class":105},[95,9365,9366],{"class":97,"line":1661},[95,9367,9368],{"class":164},"\u002F\u002F给老师和学生赋值的函数\n",[95,9370,9371,9373,9376,9378,9380,9383,9386,9389,9391,9393],{"class":97,"line":1675},[95,9372,5347],{"class":101},[95,9374,9375],{"class":1945}," allocateSpace",[95,9377,106],{"class":105},[95,9379,7742],{"class":101},[95,9381,9382],{"class":1945}," Teacher",[95,9384,9385],{"class":5199}," tArray",[95,9387,9388],{"class":105},"[],",[95,9390,109],{"class":101},[95,9392,7314],{"class":5199},[95,9394,112],{"class":105},[95,9396,9397],{"class":97,"line":1680},[95,9398,1528],{"class":105},[95,9400,9401,9404,9406,9409],{"class":97,"line":1709},[95,9402,9403],{"class":105},"    string nameSeed",[95,9405,151],{"class":101},[95,9407,9408],{"class":210},"\"ABCDE\"",[95,9410,1272],{"class":105},[95,9412,9413,9415,9417,9419,9422,9424,9426,9429,9431,9434,9436],{"class":97,"line":1714},[95,9414,3183],{"class":101},[95,9416,1640],{"class":105},[95,9418,109],{"class":101},[95,9420,9421],{"class":105}," i ",[95,9423,151],{"class":101},[95,9425,4075],{"class":154},[95,9427,9428],{"class":105},"; i ",[95,9430,1016],{"class":101},[95,9432,9433],{"class":105}," len; i",[95,9435,2274],{"class":101},[95,9437,112],{"class":105},[95,9439,9440],{"class":97,"line":1731},[95,9441,2012],{"class":105},[95,9443,9444,9447,9449,9452],{"class":97,"line":1736},[95,9445,9446],{"class":105},"        tArray[i].tName ",[95,9448,151],{"class":101},[95,9450,9451],{"class":210}," \"Teacher_\"",[95,9453,1272],{"class":105},[95,9455,9456,9458,9461],{"class":97,"line":1741},[95,9457,9446],{"class":105},[95,9459,9460],{"class":101},"+=",[95,9462,9463],{"class":105},"nameSeed[i];\n",[95,9465,9466],{"class":97,"line":1746},[95,9467,2382],{"emptyLinePlaceholder":21},[95,9469,9470],{"class":97,"line":1760},[95,9471,9472],{"class":164},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[95,9474,9475,9477,9479,9481,9484,9486,9488,9491,9493,9495,9498,9500],{"class":97,"line":1765},[95,9476,3385],{"class":101},[95,9478,1640],{"class":105},[95,9480,109],{"class":101},[95,9482,9483],{"class":105}," j ",[95,9485,151],{"class":101},[95,9487,4075],{"class":154},[95,9489,9490],{"class":105},"; j ",[95,9492,1016],{"class":101},[95,9494,2130],{"class":154},[95,9496,9497],{"class":105},"; j",[95,9499,2274],{"class":101},[95,9501,112],{"class":105},[95,9503,9504],{"class":97,"line":2559},[95,9505,2492],{"class":105},[95,9507,9508,9511,9513,9516],{"class":97,"line":2573},[95,9509,9510],{"class":105},"            tArray[i].sArray[j].sName ",[95,9512,151],{"class":101},[95,9514,9515],{"class":210}," \"Student_\"",[95,9517,1272],{"class":105},[95,9519,9520,9522,9524],{"class":97,"line":2581},[95,9521,9510],{"class":105},[95,9523,9460],{"class":101},[95,9525,9526],{"class":105}," nameSeed[j];\n",[95,9528,9529,9532,9535,9537,9539,9541,9543,9545,9547,9549,9551],{"class":97,"line":2586},[95,9530,9531],{"class":101},"            int",[95,9533,9534],{"class":105}," random",[95,9536,151],{"class":101},[95,9538,2406],{"class":1945},[95,9540,2409],{"class":105},[95,9542,434],{"class":101},[95,9544,1013],{"class":154},[95,9546,587],{"class":101},[95,9548,507],{"class":154},[95,9550,161],{"class":105},[95,9552,9553],{"class":164},"\u002F\u002F40~99\n",[95,9555,9556,9559,9561,9563],{"class":97,"line":2592},[95,9557,9558],{"class":105},"            tArray[i].sArray[j].age ",[95,9560,151],{"class":101},[95,9562,8933],{"class":154},[95,9564,1272],{"class":105},[95,9566,9567,9570,9572],{"class":97,"line":2598},[95,9568,9569],{"class":105},"            tArray[i].sArray[j].score ",[95,9571,151],{"class":101},[95,9573,9574],{"class":105}," random;\n",[95,9576,9577],{"class":97,"line":2603},[95,9578,2511],{"class":105},[95,9580,9581],{"class":97,"line":7931},[95,9582,2169],{"class":105},[95,9584,9585],{"class":97,"line":7955},[95,9586,1547],{"class":105},[95,9588,9589],{"class":97,"line":7960},[95,9590,9591],{"class":164},"\u002F\u002F打印所有信息的函数\n",[95,9593,9594,9596,9599,9601,9603,9605,9607,9610,9612,9614],{"class":97,"line":7966},[95,9595,5347],{"class":101},[95,9597,9598],{"class":1945}," printInfo",[95,9600,106],{"class":105},[95,9602,7742],{"class":101},[95,9604,9382],{"class":1945},[95,9606,9385],{"class":5199},[95,9608,9609],{"class":105},"[], ",[95,9611,109],{"class":101},[95,9613,7314],{"class":5199},[95,9615,112],{"class":105},[95,9617,9618],{"class":97,"line":7993},[95,9619,1528],{"class":105},[95,9621,9622,9624,9626,9628,9630,9632,9634,9636,9638,9640,9642],{"class":97,"line":7998},[95,9623,3183],{"class":101},[95,9625,1640],{"class":105},[95,9627,109],{"class":101},[95,9629,9421],{"class":105},[95,9631,151],{"class":101},[95,9633,4075],{"class":154},[95,9635,9428],{"class":105},[95,9637,1016],{"class":101},[95,9639,9433],{"class":105},[95,9641,2274],{"class":101},[95,9643,112],{"class":105},[95,9645,9646],{"class":97,"line":8004},[95,9647,2012],{"class":105},[95,9649,9650,9653,9655,9658,9660,9663,9665],{"class":97,"line":8016},[95,9651,9652],{"class":105},"        cout ",[95,9654,1150],{"class":101},[95,9656,9657],{"class":210}," \"Teacher: \"",[95,9659,1426],{"class":101},[95,9661,9662],{"class":105}," tArray[i].tName ",[95,9664,1150],{"class":101},[95,9666,8823],{"class":105},[95,9668,9669,9671,9673,9675,9677,9679,9681,9683,9685,9687,9689,9691],{"class":97,"line":8028},[95,9670,3385],{"class":101},[95,9672,1640],{"class":105},[95,9674,109],{"class":101},[95,9676,9483],{"class":105},[95,9678,151],{"class":101},[95,9680,4075],{"class":154},[95,9682,9490],{"class":105},[95,9684,1016],{"class":101},[95,9686,2130],{"class":154},[95,9688,9497],{"class":105},[95,9690,2274],{"class":101},[95,9692,112],{"class":105},[95,9694,9695],{"class":97,"line":8040},[95,9696,2492],{"class":105},[95,9698,9700,9703,9705,9708,9710,9713,9715,9718,9720],{"class":97,"line":9699},47,[95,9701,9702],{"class":105},"            cout ",[95,9704,1150],{"class":101},[95,9706,9707],{"class":210}," \"",[95,9709,1212],{"class":154},[95,9711,9712],{"class":210},"Student: \"",[95,9714,1426],{"class":101},[95,9716,9717],{"class":105}," tArray[i].sArray[j].sName",[95,9719,1150],{"class":101},[95,9721,1173],{"class":105},[95,9723,9725,9727,9729,9731,9733,9736,9738,9741,9743],{"class":97,"line":9724},48,[95,9726,9702],{"class":105},[95,9728,1150],{"class":101},[95,9730,9707],{"class":210},[95,9732,1212],{"class":154},[95,9734,9735],{"class":210},"Age: \"",[95,9737,1426],{"class":101},[95,9739,9740],{"class":105}," tArray[i].sArray[j].age ",[95,9742,1150],{"class":101},[95,9744,8823],{"class":105},[95,9746,9748,9750,9752,9754,9756,9759,9761,9764,9766],{"class":97,"line":9747},49,[95,9749,9702],{"class":105},[95,9751,1150],{"class":101},[95,9753,9707],{"class":210},[95,9755,1212],{"class":154},[95,9757,9758],{"class":210},"Score: \"",[95,9760,1426],{"class":101},[95,9762,9763],{"class":105}," tArray[i].sArray[j].score ",[95,9765,1150],{"class":101},[95,9767,9768],{"class":105}," endl;   \n",[95,9770,9772],{"class":97,"line":9771},50,[95,9773,2511],{"class":105},[95,9775,9777],{"class":97,"line":9776},51,[95,9778,2169],{"class":105},[95,9780,9782],{"class":97,"line":9781},52,[95,9783,1547],{"class":105},[95,9785,9787,9789,9791],{"class":97,"line":9786},53,[95,9788,109],{"class":101},[95,9790,1955],{"class":1945},[95,9792,1958],{"class":105},[95,9794,9796],{"class":97,"line":9795},54,[95,9797,1528],{"class":105},[95,9799,9801],{"class":97,"line":9800},55,[95,9802,9803],{"class":164},"    \u002F\u002F随机数种子\n",[95,9805,9807,9809,9811,9813,9815,9817,9819,9821,9823],{"class":97,"line":9806},56,[95,9808,2355],{"class":1945},[95,9810,2358],{"class":105},[95,9812,2361],{"class":101},[95,9814,2364],{"class":101},[95,9816,535],{"class":105},[95,9818,2369],{"class":1945},[95,9820,106],{"class":105},[95,9822,2374],{"class":154},[95,9824,2377],{"class":105},[95,9826,9828],{"class":97,"line":9827},57,[95,9829,9830],{"class":164},"    \u002F\u002F1.创建3名老师的数组\n",[95,9832,9834,9836,9838,9841,9843],{"class":97,"line":9833},58,[95,9835,7878],{"class":101},[95,9837,9382],{"class":1945},[95,9839,9840],{"class":105}," tArray[",[95,9842,177],{"class":154},[95,9844,4672],{"class":105},[95,9846,9848],{"class":97,"line":9847},59,[95,9849,9850],{"class":164},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[95,9852,9854,9856,9859,9861,9864,9867,9869,9871,9874,9876],{"class":97,"line":9853},60,[95,9855,1967],{"class":101},[95,9857,9858],{"class":105}," len ",[95,9860,151],{"class":101},[95,9862,9863],{"class":101}," sizeof",[95,9865,9866],{"class":105},"(tArray) ",[95,9868,690],{"class":101},[95,9870,9863],{"class":101},[95,9872,9873],{"class":105},"(tArray[",[95,9875,297],{"class":154},[95,9877,3838],{"class":105},[95,9879,9881,9884],{"class":97,"line":9880},61,[95,9882,9883],{"class":1945},"    allocateSpace",[95,9885,9886],{"class":105},"(tArray, len);\n",[95,9888,9890],{"class":97,"line":9889},62,[95,9891,9892],{"class":164},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[95,9894,9896,9899],{"class":97,"line":9895},63,[95,9897,9898],{"class":1945},"    printInfo",[95,9900,9886],{"class":105},[95,9902,9904],{"class":97,"line":9903},64,[95,9905,2382],{"emptyLinePlaceholder":21},[95,9907,9909],{"class":97,"line":9908},65,[95,9910,1547],{"class":105},[49,9912,9913],{"start":15},[52,9914,9915,9918],{},[255,9916,9917],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[10,9920,9921],{},"五名英雄信息如下：",[86,9923,9927],{"className":9924,"code":9925,"language":9926,"meta":14,"style":14},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[92,9928,9929,9947,9964,9981,9998],{"__ignoreMap":14},[95,9930,9931,9933,9936,9938,9940,9942,9945],{"class":97,"line":98},[95,9932,4899],{"class":105},[95,9934,9935],{"class":210},"\"刘备\"",[95,9937,484],{"class":105},[95,9939,881],{"class":154},[95,9941,484],{"class":105},[95,9943,9944],{"class":210},"\"男\"",[95,9946,4912],{"class":105},[95,9948,9949,9951,9954,9956,9958,9960,9962],{"class":97,"line":15},[95,9950,4899],{"class":105},[95,9952,9953],{"class":210},"\"关羽\"",[95,9955,484],{"class":105},[95,9957,856],{"class":154},[95,9959,484],{"class":105},[95,9961,9944],{"class":210},[95,9963,4912],{"class":105},[95,9965,9966,9968,9971,9973,9975,9977,9979],{"class":97,"line":1161},[95,9967,4899],{"class":105},[95,9969,9970],{"class":210},"\"张飞\"",[95,9972,484],{"class":105},[95,9974,806],{"class":154},[95,9976,484],{"class":105},[95,9978,9944],{"class":210},[95,9980,4912],{"class":105},[95,9982,9983,9985,9988,9990,9992,9994,9996],{"class":97,"line":1176},[95,9984,4899],{"class":105},[95,9986,9987],{"class":210},"\"赵云\"",[95,9989,484],{"class":105},[95,9991,831],{"class":154},[95,9993,484],{"class":105},[95,9995,9944],{"class":210},[95,9997,4912],{"class":105},[95,9999,10000,10002,10005,10007,10009,10011,10014],{"class":97,"line":1182},[95,10001,4899],{"class":105},[95,10003,10004],{"class":210},"\"貂蝉\"",[95,10006,484],{"class":105},[95,10008,781],{"class":154},[95,10010,484],{"class":105},[95,10012,10013],{"class":210},"\"女\"",[95,10015,4912],{"class":105},[10,10017,10018],{},"代码：",[86,10020,10022],{"className":88,"code":10021,"language":90,"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",[92,10023,10024,10030,10040,10046,10053,10057,10061,10067,10072,10076,10081,10104,10108,10133,10137,10170,10175,10204,10209,10224,10250,10270,10275,10280,10284,10288,10293,10315,10319,10343,10347,10409,10413,10417,10425,10429,10434,10445,10449,10465,10481,10497,10513,10529,10533,10553,10575,10580,10593,10600,10605,10611,10616,10629,10635],{"__ignoreMap":14},[95,10025,10026,10028],{"class":97,"line":98},[95,10027,1931],{"class":101},[95,10029,1934],{"class":210},[95,10031,10032,10034,10036,10038],{"class":97,"line":15},[95,10033,1939],{"class":101},[95,10035,1942],{"class":101},[95,10037,1946],{"class":1945},[95,10039,1272],{"class":105},[95,10041,10042,10044],{"class":97,"line":1161},[95,10043,1931],{"class":101},[95,10045,7732],{"class":210},[95,10047,10048,10050],{"class":97,"line":1176},[95,10049,7742],{"class":101},[95,10051,10052],{"class":1945}," Sanguo\n",[95,10054,10055],{"class":97,"line":1182},[95,10056,1528],{"class":105},[95,10058,10059],{"class":97,"line":1196},[95,10060,7768],{"class":105},[95,10062,10063,10065],{"class":97,"line":1202},[95,10064,1967],{"class":101},[95,10066,7780],{"class":105},[95,10068,10069],{"class":97,"line":1293},[95,10070,10071],{"class":105},"    string gender;\n",[95,10073,10074],{"class":97,"line":1299},[95,10075,3977],{"class":105},[95,10077,10078],{"class":97,"line":1311},[95,10079,10080],{"class":164},"\u002F\u002F定义排序函数\n",[95,10082,10083,10085,10087,10089,10092,10094,10096,10098,10100,10102],{"class":97,"line":1594},[95,10084,5347],{"class":101},[95,10086,7299],{"class":1945},[95,10088,106],{"class":105},[95,10090,10091],{"class":1945},"Sanguo",[95,10093,6501],{"class":101},[95,10095,801],{"class":5199},[95,10097,484],{"class":105},[95,10099,109],{"class":101},[95,10101,7314],{"class":5199},[95,10103,112],{"class":105},[95,10105,10106],{"class":97,"line":1599},[95,10107,1528],{"class":105},[95,10109,10110,10112,10114,10116,10118,10120,10122,10124,10126,10129,10131],{"class":97,"line":1605},[95,10111,3183],{"class":101},[95,10113,106],{"class":105},[95,10115,109],{"class":101},[95,10117,3014],{"class":105},[95,10119,151],{"class":101},[95,10121,297],{"class":154},[95,10123,3021],{"class":105},[95,10125,1016],{"class":101},[95,10127,10128],{"class":105},"len;i",[95,10130,2274],{"class":101},[95,10132,112],{"class":105},[95,10134,10135],{"class":97,"line":1610},[95,10136,2012],{"class":105},[95,10138,10139,10142,10144,10146,10148,10150,10152,10154,10156,10158,10160,10162,10164,10166,10168],{"class":97,"line":1624},[95,10140,10141],{"class":101},"     for",[95,10143,1640],{"class":105},[95,10145,109],{"class":101},[95,10147,3392],{"class":105},[95,10149,151],{"class":101},[95,10151,297],{"class":154},[95,10153,3399],{"class":105},[95,10155,1016],{"class":101},[95,10157,7341],{"class":105},[95,10159,638],{"class":101},[95,10161,323],{"class":154},[95,10163,638],{"class":101},[95,10165,3532],{"class":105},[95,10167,2274],{"class":101},[95,10169,112],{"class":105},[95,10171,10172],{"class":97,"line":1629},[95,10173,10174],{"class":105},"     {\n",[95,10176,10177,10180,10183,10185,10188,10190,10193,10195,10197,10199,10201],{"class":97,"line":1635},[95,10178,10179],{"class":101},"         if",[95,10181,10182],{"class":105}," ((s",[95,10184,587],{"class":101},[95,10186,10187],{"class":105},"j)->age ",[95,10189,1066],{"class":101},[95,10191,10192],{"class":105}," (s",[95,10194,587],{"class":101},[95,10196,573],{"class":105},[95,10198,587],{"class":101},[95,10200,323],{"class":154},[95,10202,10203],{"class":105},")->age)\n",[95,10205,10206],{"class":97,"line":1656},[95,10207,10208],{"class":105},"         {\n",[95,10210,10211,10214,10216,10219,10221],{"class":97,"line":1661},[95,10212,10213],{"class":105},"             Sanguo temp",[95,10215,7136],{"class":101},[95,10217,10218],{"class":105},"(s",[95,10220,587],{"class":101},[95,10222,10223],{"class":105},"j);\n",[95,10225,10226,10229,10231,10233,10236,10238,10240,10242,10244,10246,10248],{"class":97,"line":1675},[95,10227,10228],{"class":101},"             *",[95,10230,10218],{"class":105},[95,10232,587],{"class":101},[95,10234,10235],{"class":105},"j)",[95,10237,7136],{"class":101},[95,10239,10218],{"class":105},[95,10241,587],{"class":101},[95,10243,573],{"class":105},[95,10245,587],{"class":101},[95,10247,323],{"class":154},[95,10249,2701],{"class":105},[95,10251,10252,10254,10256,10258,10260,10262,10264,10266,10268],{"class":97,"line":1680},[95,10253,10228],{"class":101},[95,10255,10218],{"class":105},[95,10257,587],{"class":101},[95,10259,573],{"class":105},[95,10261,587],{"class":101},[95,10263,323],{"class":154},[95,10265,535],{"class":105},[95,10267,151],{"class":101},[95,10269,4262],{"class":105},[95,10271,10272],{"class":97,"line":1709},[95,10273,10274],{"class":105},"         }\n",[95,10276,10277],{"class":97,"line":1714},[95,10278,10279],{"class":105},"     }\n",[95,10281,10282],{"class":97,"line":1731},[95,10283,2169],{"class":105},[95,10285,10286],{"class":97,"line":1736},[95,10287,1547],{"class":105},[95,10289,10290],{"class":97,"line":1741},[95,10291,10292],{"class":164},"\u002F\u002F定义打印函数\n",[95,10294,10295,10297,10299,10301,10303,10305,10307,10309,10311,10313],{"class":97,"line":1746},[95,10296,5347],{"class":101},[95,10298,9598],{"class":1945},[95,10300,106],{"class":105},[95,10302,10091],{"class":1945},[95,10304,6501],{"class":101},[95,10306,801],{"class":5199},[95,10308,484],{"class":105},[95,10310,109],{"class":101},[95,10312,7314],{"class":5199},[95,10314,112],{"class":105},[95,10316,10317],{"class":97,"line":1760},[95,10318,1528],{"class":105},[95,10320,10321,10323,10325,10327,10329,10331,10333,10335,10337,10339,10341],{"class":97,"line":1765},[95,10322,3183],{"class":101},[95,10324,1640],{"class":105},[95,10326,109],{"class":101},[95,10328,3014],{"class":105},[95,10330,151],{"class":101},[95,10332,297],{"class":154},[95,10334,3021],{"class":105},[95,10336,1016],{"class":101},[95,10338,10128],{"class":105},[95,10340,2274],{"class":101},[95,10342,112],{"class":105},[95,10344,10345],{"class":97,"line":2559},[95,10346,2012],{"class":105},[95,10348,10349,10351,10353,10355,10357,10360,10362,10364,10366,10369,10371,10373,10375,10378,10380,10382,10384,10387,10389,10391,10393,10396,10398,10400,10402,10405,10407],{"class":97,"line":2573},[95,10350,3433],{"class":105},[95,10352,1150],{"class":101},[95,10354,357],{"class":210},[95,10356,1212],{"class":154},[95,10358,10359],{"class":210},"姓名：\"",[95,10361,1150],{"class":101},[95,10363,10218],{"class":105},[95,10365,587],{"class":101},[95,10367,10368],{"class":105},"i)->name",[95,10370,1150],{"class":101},[95,10372,357],{"class":210},[95,10374,1212],{"class":154},[95,10376,10377],{"class":210},"年龄：\"",[95,10379,1150],{"class":101},[95,10381,10218],{"class":105},[95,10383,587],{"class":101},[95,10385,10386],{"class":105},"i)->age",[95,10388,1150],{"class":101},[95,10390,357],{"class":210},[95,10392,1212],{"class":154},[95,10394,10395],{"class":210},"性别：\"",[95,10397,1150],{"class":101},[95,10399,10218],{"class":105},[95,10401,587],{"class":101},[95,10403,10404],{"class":105},"i)->gender",[95,10406,1150],{"class":101},[95,10408,1173],{"class":105},[95,10410,10411],{"class":97,"line":2581},[95,10412,2169],{"class":105},[95,10414,10415],{"class":97,"line":2586},[95,10416,1547],{"class":105},[95,10418,10419,10421,10423],{"class":97,"line":2592},[95,10420,109],{"class":101},[95,10422,1955],{"class":1945},[95,10424,1958],{"class":105},[95,10426,10427],{"class":97,"line":2598},[95,10428,1528],{"class":105},[95,10430,10431],{"class":97,"line":2603},[95,10432,10433],{"class":164},"    \u002F\u002F定义结构体变量\n",[95,10435,10436,10439,10441,10443],{"class":97,"line":7931},[95,10437,10438],{"class":105},"    Sanguo s1[",[95,10440,425],{"class":154},[95,10442,1046],{"class":105},[95,10444,4890],{"class":101},[95,10446,10447],{"class":97,"line":7955},[95,10448,2012],{"class":105},[95,10450,10451,10453,10455,10457,10459,10461,10463],{"class":97,"line":7960},[95,10452,4899],{"class":105},[95,10454,9935],{"class":210},[95,10456,484],{"class":105},[95,10458,881],{"class":154},[95,10460,484],{"class":105},[95,10462,9944],{"class":210},[95,10464,4912],{"class":105},[95,10466,10467,10469,10471,10473,10475,10477,10479],{"class":97,"line":7966},[95,10468,4899],{"class":105},[95,10470,9953],{"class":210},[95,10472,484],{"class":105},[95,10474,856],{"class":154},[95,10476,484],{"class":105},[95,10478,9944],{"class":210},[95,10480,4912],{"class":105},[95,10482,10483,10485,10487,10489,10491,10493,10495],{"class":97,"line":7993},[95,10484,4899],{"class":105},[95,10486,9970],{"class":210},[95,10488,484],{"class":105},[95,10490,806],{"class":154},[95,10492,484],{"class":105},[95,10494,9944],{"class":210},[95,10496,4912],{"class":105},[95,10498,10499,10501,10503,10505,10507,10509,10511],{"class":97,"line":7998},[95,10500,4899],{"class":105},[95,10502,9987],{"class":210},[95,10504,484],{"class":105},[95,10506,831],{"class":154},[95,10508,484],{"class":105},[95,10510,9944],{"class":210},[95,10512,4912],{"class":105},[95,10514,10515,10517,10519,10521,10523,10525,10527],{"class":97,"line":8004},[95,10516,4899],{"class":105},[95,10518,10004],{"class":210},[95,10520,484],{"class":105},[95,10522,781],{"class":154},[95,10524,484],{"class":105},[95,10526,10013],{"class":210},[95,10528,4912],{"class":105},[95,10530,10531],{"class":97,"line":8016},[95,10532,4933],{"class":105},[95,10534,10535,10537,10539,10541,10544,10546,10549,10551],{"class":97,"line":8028},[95,10536,1967],{"class":101},[95,10538,7314],{"class":105},[95,10540,4185],{"class":101},[95,10542,10543],{"class":105},"(s1)",[95,10545,4191],{"class":101},[95,10547,10548],{"class":105},"(s1[",[95,10550,297],{"class":154},[95,10552,3838],{"class":105},[95,10554,10555,10558,10560,10563,10565,10568,10571,10573],{"class":97,"line":8040},[95,10556,10557],{"class":105},"    Sanguo ",[95,10559,561],{"class":101},[95,10561,10562],{"class":105},"s ",[95,10564,151],{"class":101},[95,10566,10567],{"class":101}," &",[95,10569,10570],{"class":105},"s1[",[95,10572,297],{"class":154},[95,10574,4672],{"class":105},[95,10576,10577],{"class":97,"line":9699},[95,10578,10579],{"class":164},"    \u002F\u002F排序前：\n",[95,10581,10582,10584,10586,10589,10591],{"class":97,"line":9724},[95,10583,6512],{"class":105},[95,10585,1150],{"class":101},[95,10587,10588],{"class":210}," \"排序前：\"",[95,10590,1426],{"class":101},[95,10592,8823],{"class":105},[95,10594,10595,10597],{"class":97,"line":9747},[95,10596,9898],{"class":1945},[95,10598,10599],{"class":105},"(s,len);\n",[95,10601,10602],{"class":97,"line":9771},[95,10603,10604],{"class":164},"    \u002F\u002F调用排序函数\n",[95,10606,10607,10609],{"class":97,"line":9776},[95,10608,7581],{"class":1945},[95,10610,10599],{"class":105},[95,10612,10613],{"class":97,"line":9781},[95,10614,10615],{"class":164},"    \u002F\u002F排序后\n",[95,10617,10618,10620,10622,10625,10627],{"class":97,"line":9786},[95,10619,6512],{"class":105},[95,10621,1150],{"class":101},[95,10623,10624],{"class":210}," \"排序后：\"",[95,10626,1426],{"class":101},[95,10628,8823],{"class":105},[95,10630,10631,10633],{"class":97,"line":9795},[95,10632,9898],{"class":1945},[95,10634,10599],{"class":105},[95,10636,10637],{"class":97,"line":9800},[95,10638,1547],{"class":105},[10,10640,10641,10642,10644],{},"注意：使用指针时直接用传首地址**&s",[95,10643,297],{},"**",[5109,10646,10647],{},"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":10649},[10650,10651,10652,10653,10654,10655,10656],{"id":7686,"depth":15,"text":7687},{"id":8048,"depth":15,"text":8049},{"id":8317,"depth":15,"text":8318},{"id":8482,"depth":15,"text":8483},{"id":8698,"depth":15,"text":8699},{"id":9019,"depth":15,"text":9020},{"id":9247,"depth":15,"text":9248},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7675,"description":7683},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10663,"title":10664,"body":10665,"description":14,"extension":18,"meta":12008,"navigation":21,"path":12009,"seo":12010,"stem":12011,"__hash__":12012},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10666,"toc":12002},[10667,10670,10674,10680,10694,10699,10702,10706,10713,10719,10722,10729,10735,10740,10743,10746,10749,11313,11316,11330,11334,11339,11355,11495,11498,11504,11507,11512,11520,11628,11631,11636,11639,11644,11647,11653,11656,11999],[33,10668,10664],{"id":10669},"_5程序内存模型",[37,10671,10673],{"id":10672},"_51内存分区模型","5.1内存分区模型",[10,10675,10676,10677],{},"C++程序在执行时，将内存大方向划分为",[255,10678,10679],{},"4个区域",[1113,10681,10682,10685,10688,10691],{},[52,10683,10684],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[52,10686,10687],{},"全局区：存放全局变量和静态变量以及常量",[52,10689,10690],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[52,10692,10693],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[10,10695,10696],{},[255,10697,10698],{},"内存四区意义：",[10,10700,10701],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[66,10703,10705],{"id":10704},"_511程序运行前","5.1.1程序运行前",[10,10707,10708,10709,10712],{},"​\t在程序编译后，生成了exe可执行程序，",[255,10710,10711],{},"未执行该程序前","分为两个区域",[10,10714,10715,10716],{},"​\t",[255,10717,10718],{},"代码区：",[10,10720,10721],{},"​\t\t存放 CPU 执行的机器指令",[10,10723,10724,10725,10728],{},"​\t\t代码区是",[255,10726,10727],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[10,10730,10724,10731,10734],{},[255,10732,10733],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[10,10736,10715,10737],{},[255,10738,10739],{},"全局区：",[10,10741,10742],{},"​\t\t全局变量和静态变量存放在此.",[10,10744,10745],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[10,10747,10748],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[86,10750,10752],{"className":88,"code":10751,"language":90,"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",[92,10753,10754,10759,10772,10785,10789,10794,10809,10824,10828,10837,10841,10846,10859,10872,10876,10881,10907,10933,10937,10964,10990,10994,10999,11015,11030,11034,11060,11086,11090,11115,11140,11144,11170,11196,11200,11216,11231,11257,11283,11287,11297,11301,11309],{"__ignoreMap":14},[95,10755,10756],{"class":97,"line":98},[95,10757,10758],{"class":164},"\u002F\u002F全局变量\n",[95,10760,10761,10763,10766,10768,10770],{"class":97,"line":15},[95,10762,109],{"class":101},[95,10764,10765],{"class":105}," g_a ",[95,10767,151],{"class":101},[95,10769,2020],{"class":154},[95,10771,1272],{"class":105},[95,10773,10774,10776,10779,10781,10783],{"class":97,"line":1161},[95,10775,109],{"class":101},[95,10777,10778],{"class":105}," g_b ",[95,10780,151],{"class":101},[95,10782,2020],{"class":154},[95,10784,1272],{"class":105},[95,10786,10787],{"class":97,"line":1176},[95,10788,2382],{"emptyLinePlaceholder":21},[95,10790,10791],{"class":97,"line":1182},[95,10792,10793],{"class":164},"\u002F\u002F全局常量\n",[95,10795,10796,10798,10800,10803,10805,10807],{"class":97,"line":1196},[95,10797,6775],{"class":101},[95,10799,2364],{"class":101},[95,10801,10802],{"class":105}," c_g_a ",[95,10804,151],{"class":101},[95,10806,2020],{"class":154},[95,10808,1272],{"class":105},[95,10810,10811,10813,10815,10818,10820,10822],{"class":97,"line":1202},[95,10812,6775],{"class":101},[95,10814,2364],{"class":101},[95,10816,10817],{"class":105}," c_g_b ",[95,10819,151],{"class":101},[95,10821,2020],{"class":154},[95,10823,1272],{"class":105},[95,10825,10826],{"class":97,"line":1293},[95,10827,2382],{"emptyLinePlaceholder":21},[95,10829,10830,10832,10834],{"class":97,"line":1299},[95,10831,109],{"class":101},[95,10833,1955],{"class":1945},[95,10835,10836],{"class":105},"() {\n",[95,10838,10839],{"class":97,"line":1311},[95,10840,2382],{"emptyLinePlaceholder":21},[95,10842,10843],{"class":97,"line":1594},[95,10844,10845],{"class":164},"    \u002F\u002F局部变量\n",[95,10847,10848,10850,10853,10855,10857],{"class":97,"line":1599},[95,10849,1967],{"class":101},[95,10851,10852],{"class":105}," a ",[95,10854,151],{"class":101},[95,10856,2020],{"class":154},[95,10858,1272],{"class":105},[95,10860,10861,10863,10866,10868,10870],{"class":97,"line":1605},[95,10862,1967],{"class":101},[95,10864,10865],{"class":105}," b ",[95,10867,151],{"class":101},[95,10869,2020],{"class":154},[95,10871,1272],{"class":105},[95,10873,10874],{"class":97,"line":1610},[95,10875,2382],{"emptyLinePlaceholder":21},[95,10877,10878],{"class":97,"line":1624},[95,10879,10880],{"class":164},"    \u002F\u002F打印地址\n",[95,10882,10883,10885,10887,10890,10892,10894,10896,10898,10900,10903,10905],{"class":97,"line":1629},[95,10884,6512],{"class":105},[95,10886,1150],{"class":101},[95,10888,10889],{"class":210}," \"局部变量a地址为： \"",[95,10891,1426],{"class":101},[95,10893,1640],{"class":105},[95,10895,109],{"class":101},[95,10897,535],{"class":105},[95,10899,459],{"class":101},[95,10901,10902],{"class":105},"a ",[95,10904,1150],{"class":101},[95,10906,8823],{"class":105},[95,10908,10909,10911,10913,10916,10918,10920,10922,10924,10926,10929,10931],{"class":97,"line":1635},[95,10910,6512],{"class":105},[95,10912,1150],{"class":101},[95,10914,10915],{"class":210}," \"局部变量b地址为： \"",[95,10917,1426],{"class":101},[95,10919,1640],{"class":105},[95,10921,109],{"class":101},[95,10923,535],{"class":105},[95,10925,459],{"class":101},[95,10927,10928],{"class":105},"b ",[95,10930,1150],{"class":101},[95,10932,8823],{"class":105},[95,10934,10935],{"class":97,"line":1656},[95,10936,2382],{"emptyLinePlaceholder":21},[95,10938,10939,10941,10943,10946,10948,10951,10953,10955,10957,10960,10962],{"class":97,"line":1661},[95,10940,6512],{"class":105},[95,10942,1150],{"class":101},[95,10944,10945],{"class":210}," \"全局变量g_a地址为： \"",[95,10947,1426],{"class":101},[95,10949,10950],{"class":105},"  (",[95,10952,109],{"class":101},[95,10954,535],{"class":105},[95,10956,459],{"class":101},[95,10958,10959],{"class":105},"g_a ",[95,10961,1150],{"class":101},[95,10963,8823],{"class":105},[95,10965,10966,10968,10970,10973,10975,10977,10979,10981,10983,10986,10988],{"class":97,"line":1675},[95,10967,6512],{"class":105},[95,10969,1150],{"class":101},[95,10971,10972],{"class":210}," \"全局变量g_b地址为： \"",[95,10974,1426],{"class":101},[95,10976,10950],{"class":105},[95,10978,109],{"class":101},[95,10980,535],{"class":105},[95,10982,459],{"class":101},[95,10984,10985],{"class":105},"g_b ",[95,10987,1150],{"class":101},[95,10989,8823],{"class":105},[95,10991,10992],{"class":97,"line":1680},[95,10993,2382],{"emptyLinePlaceholder":21},[95,10995,10996],{"class":97,"line":1709},[95,10997,10998],{"class":164},"    \u002F\u002F静态变量\n",[95,11000,11001,11004,11006,11009,11011,11013],{"class":97,"line":1714},[95,11002,11003],{"class":101},"    static",[95,11005,2364],{"class":101},[95,11007,11008],{"class":105}," s_a ",[95,11010,151],{"class":101},[95,11012,2020],{"class":154},[95,11014,1272],{"class":105},[95,11016,11017,11019,11021,11024,11026,11028],{"class":97,"line":1731},[95,11018,11003],{"class":101},[95,11020,2364],{"class":101},[95,11022,11023],{"class":105}," s_b ",[95,11025,151],{"class":101},[95,11027,2020],{"class":154},[95,11029,1272],{"class":105},[95,11031,11032],{"class":97,"line":1736},[95,11033,2382],{"emptyLinePlaceholder":21},[95,11035,11036,11038,11040,11043,11045,11047,11049,11051,11053,11056,11058],{"class":97,"line":1741},[95,11037,6512],{"class":105},[95,11039,1150],{"class":101},[95,11041,11042],{"class":210}," \"静态变量s_a地址为： \"",[95,11044,1426],{"class":101},[95,11046,1640],{"class":105},[95,11048,109],{"class":101},[95,11050,535],{"class":105},[95,11052,459],{"class":101},[95,11054,11055],{"class":105},"s_a ",[95,11057,1150],{"class":101},[95,11059,8823],{"class":105},[95,11061,11062,11064,11066,11069,11071,11073,11075,11077,11079,11082,11084],{"class":97,"line":1746},[95,11063,6512],{"class":105},[95,11065,1150],{"class":101},[95,11067,11068],{"class":210}," \"静态变量s_b地址为： \"",[95,11070,1426],{"class":101},[95,11072,1640],{"class":105},[95,11074,109],{"class":101},[95,11076,535],{"class":105},[95,11078,459],{"class":101},[95,11080,11081],{"class":105},"s_b ",[95,11083,1150],{"class":101},[95,11085,8823],{"class":105},[95,11087,11088],{"class":97,"line":1760},[95,11089,2382],{"emptyLinePlaceholder":21},[95,11091,11092,11094,11096,11099,11101,11103,11105,11107,11109,11111,11113],{"class":97,"line":1765},[95,11093,6512],{"class":105},[95,11095,1150],{"class":101},[95,11097,11098],{"class":210}," \"字符串常量地址为： \"",[95,11100,1426],{"class":101},[95,11102,1640],{"class":105},[95,11104,109],{"class":101},[95,11106,535],{"class":105},[95,11108,459],{"class":101},[95,11110,1168],{"class":210},[95,11112,1426],{"class":101},[95,11114,8823],{"class":105},[95,11116,11117,11119,11121,11123,11125,11127,11129,11131,11133,11136,11138],{"class":97,"line":2559},[95,11118,6512],{"class":105},[95,11120,1150],{"class":101},[95,11122,11098],{"class":210},[95,11124,1426],{"class":101},[95,11126,1640],{"class":105},[95,11128,109],{"class":101},[95,11130,535],{"class":105},[95,11132,459],{"class":101},[95,11134,11135],{"class":210},"\"hello world1\"",[95,11137,1426],{"class":101},[95,11139,8823],{"class":105},[95,11141,11142],{"class":97,"line":2573},[95,11143,2382],{"emptyLinePlaceholder":21},[95,11145,11146,11148,11150,11153,11155,11157,11159,11161,11163,11166,11168],{"class":97,"line":2581},[95,11147,6512],{"class":105},[95,11149,1150],{"class":101},[95,11151,11152],{"class":210}," \"全局常量c_g_a地址为： \"",[95,11154,1426],{"class":101},[95,11156,1640],{"class":105},[95,11158,109],{"class":101},[95,11160,535],{"class":105},[95,11162,459],{"class":101},[95,11164,11165],{"class":105},"c_g_a ",[95,11167,1150],{"class":101},[95,11169,8823],{"class":105},[95,11171,11172,11174,11176,11179,11181,11183,11185,11187,11189,11192,11194],{"class":97,"line":2586},[95,11173,6512],{"class":105},[95,11175,1150],{"class":101},[95,11177,11178],{"class":210}," \"全局常量c_g_b地址为： \"",[95,11180,1426],{"class":101},[95,11182,1640],{"class":105},[95,11184,109],{"class":101},[95,11186,535],{"class":105},[95,11188,459],{"class":101},[95,11190,11191],{"class":105},"c_g_b ",[95,11193,1150],{"class":101},[95,11195,8823],{"class":105},[95,11197,11198],{"class":97,"line":2592},[95,11199,2382],{"emptyLinePlaceholder":21},[95,11201,11202,11205,11207,11210,11212,11214],{"class":97,"line":2598},[95,11203,11204],{"class":101},"    const",[95,11206,2364],{"class":101},[95,11208,11209],{"class":105}," c_l_a ",[95,11211,151],{"class":101},[95,11213,2020],{"class":154},[95,11215,1272],{"class":105},[95,11217,11218,11220,11222,11225,11227,11229],{"class":97,"line":2603},[95,11219,11204],{"class":101},[95,11221,2364],{"class":101},[95,11223,11224],{"class":105}," c_l_b ",[95,11226,151],{"class":101},[95,11228,2020],{"class":154},[95,11230,1272],{"class":105},[95,11232,11233,11235,11237,11240,11242,11244,11246,11248,11250,11253,11255],{"class":97,"line":7931},[95,11234,6512],{"class":105},[95,11236,1150],{"class":101},[95,11238,11239],{"class":210}," \"局部常量c_l_a地址为： \"",[95,11241,1426],{"class":101},[95,11243,1640],{"class":105},[95,11245,109],{"class":101},[95,11247,535],{"class":105},[95,11249,459],{"class":101},[95,11251,11252],{"class":105},"c_l_a ",[95,11254,1150],{"class":101},[95,11256,8823],{"class":105},[95,11258,11259,11261,11263,11266,11268,11270,11272,11274,11276,11279,11281],{"class":97,"line":7955},[95,11260,6512],{"class":105},[95,11262,1150],{"class":101},[95,11264,11265],{"class":210}," \"局部常量c_l_b地址为： \"",[95,11267,1426],{"class":101},[95,11269,1640],{"class":105},[95,11271,109],{"class":101},[95,11273,535],{"class":105},[95,11275,459],{"class":101},[95,11277,11278],{"class":105},"c_l_b ",[95,11280,1150],{"class":101},[95,11282,8823],{"class":105},[95,11284,11285],{"class":97,"line":7960},[95,11286,2382],{"emptyLinePlaceholder":21},[95,11288,11289,11291,11293,11295],{"class":97,"line":7966},[95,11290,2285],{"class":1945},[95,11292,106],{"class":105},[95,11294,2290],{"class":210},[95,11296,2701],{"class":105},[95,11298,11299],{"class":97,"line":7993},[95,11300,2382],{"emptyLinePlaceholder":21},[95,11302,11303,11305,11307],{"class":97,"line":7998},[95,11304,4072],{"class":101},[95,11306,4075],{"class":154},[95,11308,1272],{"class":105},[95,11310,11311],{"class":97,"line":8004},[95,11312,1547],{"class":105},[10,11314,11315],{},"总结：",[1113,11317,11318,11321,11324,11327],{},[52,11319,11320],{},"c++中程序运行前分为全局区和代码区",[52,11322,11323],{},"代码区特点是共享和只读",[52,11325,11326],{},"全局区中存放全局变量、静态变量、常量",[52,11328,11329],{},"常量区中存放const修饰的全局常量和字符串常量",[66,11331,11333],{"id":11332},"_512程序运行后","5.1.2程序运行后",[49,11335,11336],{},[52,11337,11338],{},"栈区：",[1113,11340,11341,11348],{},[52,11342,11343,11344,11347],{},"由编译器自动分配释放, 存放",[255,11345,11346],{},"函数的参数值,局部变量","等",[52,11349,11350,11351,11354],{},"注意事项：",[255,11352,11353],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[86,11356,11358],{"className":88,"code":11357,"language":90,"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",[92,11359,11360,11371,11375,11390,11402,11406,11410,11418,11423,11438,11456,11473,11483,11491],{"__ignoreMap":14},[95,11361,11362,11364,11366,11369],{"class":97,"line":98},[95,11363,109],{"class":101},[95,11365,6501],{"class":101},[95,11367,11368],{"class":1945}," func",[95,11370,1958],{"class":105},[95,11372,11373],{"class":97,"line":15},[95,11374,1528],{"class":105},[95,11376,11377,11379,11381,11383,11385,11387],{"class":97,"line":1161},[95,11378,1967],{"class":101},[95,11380,10852],{"class":105},[95,11382,151],{"class":101},[95,11384,2020],{"class":154},[95,11386,161],{"class":105},[95,11388,11389],{"class":164}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[95,11391,11392,11394,11396,11399],{"class":97,"line":1176},[95,11393,4072],{"class":101},[95,11395,10567],{"class":101},[95,11397,11398],{"class":105},"a;",[95,11400,11401],{"class":164}," \u002F\u002F放回局部变量的地址\n",[95,11403,11404],{"class":97,"line":1182},[95,11405,1547],{"class":105},[95,11407,11408],{"class":97,"line":1196},[95,11409,2382],{"emptyLinePlaceholder":21},[95,11411,11412,11414,11416],{"class":97,"line":1202},[95,11413,109],{"class":101},[95,11415,1955],{"class":1945},[95,11417,10836],{"class":105},[95,11419,11420],{"class":97,"line":1293},[95,11421,11422],{"class":164},"    \u002F\u002F接受func的返回值\n",[95,11424,11425,11427,11429,11432,11434,11436],{"class":97,"line":1299},[95,11426,1967],{"class":101},[95,11428,6501],{"class":101},[95,11430,11431],{"class":105},"p ",[95,11433,151],{"class":101},[95,11435,11368],{"class":1945},[95,11437,5619],{"class":105},[95,11439,11440,11442,11444,11446,11448,11450,11453],{"class":97,"line":1311},[95,11441,6512],{"class":105},[95,11443,1150],{"class":101},[95,11445,6501],{"class":101},[95,11447,11431],{"class":105},[95,11449,1150],{"class":101},[95,11451,11452],{"class":105}," endl;",[95,11454,11455],{"class":164}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[95,11457,11458,11460,11462,11464,11466,11468,11470],{"class":97,"line":1594},[95,11459,6512],{"class":105},[95,11461,1150],{"class":101},[95,11463,6501],{"class":101},[95,11465,11431],{"class":105},[95,11467,1150],{"class":101},[95,11469,11452],{"class":105},[95,11471,11472],{"class":164}," \u002F\u002F第二次这个数据不再保留\n",[95,11474,11475,11477,11479,11481],{"class":97,"line":1599},[95,11476,2285],{"class":1945},[95,11478,106],{"class":105},[95,11480,2290],{"class":210},[95,11482,2701],{"class":105},[95,11484,11485,11487,11489],{"class":97,"line":1605},[95,11486,4072],{"class":101},[95,11488,4075],{"class":154},[95,11490,1272],{"class":105},[95,11492,11493],{"class":97,"line":1610},[95,11494,1547],{"class":105},[10,11496,11497],{},"输出结果：",[10,11499,11500],{},[1444,11501],{"alt":11502,"src":11503},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[10,11505,11506],{},"总结：不要返回局部变量的地址",[49,11508,11509],{"start":15},[52,11510,11511],{},"堆区",[1113,11513,11514,11517],{},[52,11515,11516],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[52,11518,11519],{},"在c++中主要利用new在堆区开辟内存",[86,11521,11523],{"className":88,"code":11522,"language":90,"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",[92,11524,11525,11540,11544,11549,11570,11577,11581,11589,11593,11598,11612,11624],{"__ignoreMap":14},[95,11526,11527,11529,11532,11535,11537],{"class":97,"line":98},[95,11528,109],{"class":101},[95,11530,11531],{"class":101},"  *",[95,11533,11534],{"class":1945},"func",[95,11536,2409],{"class":105},[95,11538,11539],{"class":164},"  \u002F\u002F函数返回指针\n",[95,11541,11542],{"class":97,"line":15},[95,11543,1528],{"class":105},[95,11545,11546],{"class":97,"line":1161},[95,11547,11548],{"class":164},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[95,11550,11551,11553,11555,11557,11559,11562,11564,11566,11568],{"class":97,"line":1176},[95,11552,4129],{"class":101},[95,11554,6501],{"class":101},[95,11556,10],{"class":105},[95,11558,151],{"class":101},[95,11560,11561],{"class":101}," new",[95,11563,2364],{"class":101},[95,11565,106],{"class":105},[95,11567,552],{"class":154},[95,11569,2701],{"class":105},[95,11571,11572,11574],{"class":97,"line":1182},[95,11573,4363],{"class":101},[95,11575,11576],{"class":105}," p;\n",[95,11578,11579],{"class":97,"line":1196},[95,11580,1547],{"class":105},[95,11582,11583,11585,11587],{"class":97,"line":1202},[95,11584,109],{"class":101},[95,11586,1955],{"class":1945},[95,11588,1958],{"class":105},[95,11590,11591],{"class":97,"line":1293},[95,11592,1528],{"class":105},[95,11594,11595],{"class":97,"line":1299},[95,11596,11597],{"class":164},"    \u002F\u002F在堆区开辟数据\n",[95,11599,11600,11602,11604,11606,11608,11610],{"class":97,"line":1311},[95,11601,1967],{"class":101},[95,11603,6501],{"class":101},[95,11605,10],{"class":105},[95,11607,151],{"class":101},[95,11609,11534],{"class":1945},[95,11611,5619],{"class":105},[95,11613,11614,11616,11618,11620,11622],{"class":97,"line":1594},[95,11615,1533],{"class":105},[95,11617,6402],{"class":101},[95,11619,10],{"class":105},[95,11621,1150],{"class":101},[95,11623,1173],{"class":105},[95,11625,11626],{"class":97,"line":1599},[95,11627,1547],{"class":105},[10,11629,11630],{},"图片展示：",[10,11632,11633],{},[1444,11634],{"alt":11502,"src":11635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[10,11637,11638],{},"堆区内存由程序员管生死！！！",[49,11640,11641],{"start":1161},[52,11642,11643],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[10,11645,11646],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[10,11648,11649,11650],{},"​语法：",[92,11651,11652],{}," new 数据类型",[10,11654,11655],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[86,11657,11659],{"className":88,"code":11658,"language":90,"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",[92,11660,11661,11666,11676,11680,11685,11690,11712,11716,11724,11728,11742,11754,11766,11778,11783,11788,11799,11803,11808,11816,11820,11825,11847,11873,11877,11895,11899,11925,11929,11941,11945,11950,11955,11963,11967,11971,11979,11983,11989,11995],{"__ignoreMap":14},[95,11662,11663],{"class":97,"line":98},[95,11664,11665],{"class":164},"\u002F\u002F1.new的基本语法\n",[95,11667,11668,11670,11672,11674],{"class":97,"line":15},[95,11669,109],{"class":101},[95,11671,6501],{"class":101},[95,11673,11534],{"class":1945},[95,11675,1958],{"class":105},[95,11677,11678],{"class":97,"line":1161},[95,11679,1528],{"class":105},[95,11681,11682],{"class":97,"line":1176},[95,11683,11684],{"class":164},"    \u002F\u002F在堆区创建整型数据\n",[95,11686,11687],{"class":97,"line":1182},[95,11688,11689],{"class":164},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[95,11691,11692,11694,11696,11698,11701,11703,11705,11707,11709],{"class":97,"line":1196},[95,11693,1967],{"class":101},[95,11695,6501],{"class":101},[95,11697,10],{"class":105},[95,11699,11700],{"class":101},"=new",[95,11702,2364],{"class":101},[95,11704,106],{"class":105},[95,11706,552],{"class":154},[95,11708,5949],{"class":105},[95,11710,11711],{"class":164},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[95,11713,11714],{"class":97,"line":1202},[95,11715,1547],{"class":105},[95,11717,11718,11720,11722],{"class":97,"line":1293},[95,11719,5347],{"class":101},[95,11721,5571],{"class":1945},[95,11723,1958],{"class":105},[95,11725,11726],{"class":97,"line":1299},[95,11727,1528],{"class":105},[95,11729,11730,11732,11734,11736,11738,11740],{"class":97,"line":1311},[95,11731,1967],{"class":101},[95,11733,6501],{"class":101},[95,11735,10],{"class":105},[95,11737,151],{"class":101},[95,11739,11534],{"class":1945},[95,11741,5619],{"class":105},[95,11743,11744,11746,11748,11750,11752],{"class":97,"line":1594},[95,11745,1533],{"class":105},[95,11747,6402],{"class":101},[95,11749,10],{"class":105},[95,11751,1150],{"class":101},[95,11753,1173],{"class":105},[95,11755,11756,11758,11760,11762,11764],{"class":97,"line":1599},[95,11757,1533],{"class":105},[95,11759,6402],{"class":101},[95,11761,10],{"class":105},[95,11763,1150],{"class":101},[95,11765,1173],{"class":105},[95,11767,11768,11770,11772,11774,11776],{"class":97,"line":1605},[95,11769,1533],{"class":105},[95,11771,6402],{"class":101},[95,11773,10],{"class":105},[95,11775,1150],{"class":101},[95,11777,1173],{"class":105},[95,11779,11780],{"class":97,"line":1610},[95,11781,11782],{"class":164},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[95,11784,11785],{"class":97,"line":1624},[95,11786,11787],{"class":164},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[95,11789,11790,11793,11796],{"class":97,"line":1629},[95,11791,11792],{"class":101},"    delete",[95,11794,11795],{"class":105}," p;",[95,11797,11798],{"class":164},"\u002F\u002F删除这块地址\n",[95,11800,11801],{"class":97,"line":1635},[95,11802,1547],{"class":105},[95,11804,11805],{"class":97,"line":1656},[95,11806,11807],{"class":164},"\u002F\u002F2.在堆区利用new开辟数组\n",[95,11809,11810,11812,11814],{"class":97,"line":1661},[95,11811,5347],{"class":101},[95,11813,5640],{"class":1945},[95,11815,1958],{"class":105},[95,11817,11818],{"class":97,"line":1675},[95,11819,1528],{"class":105},[95,11821,11822],{"class":97,"line":1680},[95,11823,11824],{"class":164},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[95,11826,11827,11829,11831,11833,11835,11837,11839,11841,11844],{"class":97,"line":1709},[95,11828,1967],{"class":101},[95,11830,6501],{"class":101},[95,11832,3862],{"class":105},[95,11834,11700],{"class":101},[95,11836,2364],{"class":101},[95,11838,996],{"class":105},[95,11840,552],{"class":154},[95,11842,11843],{"class":105},"];",[95,11845,11846],{"class":164},"\u002F\u002F10代表数组有10个元素\n",[95,11848,11849,11851,11853,11855,11857,11859,11861,11863,11865,11867,11869,11871],{"class":97,"line":1714},[95,11850,3183],{"class":101},[95,11852,1640],{"class":105},[95,11854,109],{"class":101},[95,11856,3014],{"class":105},[95,11858,151],{"class":101},[95,11860,297],{"class":154},[95,11862,3021],{"class":105},[95,11864,1016],{"class":101},[95,11866,552],{"class":154},[95,11868,3021],{"class":105},[95,11870,2274],{"class":101},[95,11872,112],{"class":105},[95,11874,11875],{"class":97,"line":1731},[95,11876,2012],{"class":105},[95,11878,11879,11882,11884,11886,11888,11890,11892],{"class":97,"line":1736},[95,11880,11881],{"class":105},"        arr[i]",[95,11883,151],{"class":101},[95,11885,547],{"class":105},[95,11887,587],{"class":101},[95,11889,417],{"class":154},[95,11891,161],{"class":105},[95,11893,11894],{"class":164},"\u002F\u002F给10个元素赋值100～109\n",[95,11896,11897],{"class":97,"line":1741},[95,11898,2169],{"class":105},[95,11900,11901,11903,11905,11907,11909,11911,11913,11915,11917,11919,11921,11923],{"class":97,"line":1746},[95,11902,3183],{"class":101},[95,11904,1640],{"class":105},[95,11906,109],{"class":101},[95,11908,3014],{"class":105},[95,11910,151],{"class":101},[95,11912,297],{"class":154},[95,11914,3021],{"class":105},[95,11916,1016],{"class":101},[95,11918,552],{"class":154},[95,11920,3021],{"class":105},[95,11922,2274],{"class":101},[95,11924,112],{"class":105},[95,11926,11927],{"class":97,"line":1760},[95,11928,2012],{"class":105},[95,11930,11931,11933,11935,11937,11939],{"class":97,"line":1765},[95,11932,3433],{"class":105},[95,11934,1150],{"class":101},[95,11936,4336],{"class":105},[95,11938,1150],{"class":101},[95,11940,1173],{"class":105},[95,11942,11943],{"class":97,"line":2559},[95,11944,2169],{"class":105},[95,11946,11947],{"class":97,"line":2573},[95,11948,11949],{"class":164},"    \u002F\u002F释放堆区数组\n",[95,11951,11952],{"class":97,"line":2581},[95,11953,11954],{"class":164},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[95,11956,11957,11960],{"class":97,"line":2586},[95,11958,11959],{"class":101},"    delete[]",[95,11961,11962],{"class":105}," arr;\n",[95,11964,11965],{"class":97,"line":2592},[95,11966,1547],{"class":105},[95,11968,11969],{"class":97,"line":2598},[95,11970,2382],{"emptyLinePlaceholder":21},[95,11972,11973,11975,11977],{"class":97,"line":2603},[95,11974,109],{"class":101},[95,11976,1955],{"class":1945},[95,11978,1958],{"class":105},[95,11980,11981],{"class":97,"line":7931},[95,11982,1528],{"class":105},[95,11984,11985,11987],{"class":97,"line":7955},[95,11986,5616],{"class":1945},[95,11988,5619],{"class":105},[95,11990,11991,11993],{"class":97,"line":7960},[95,11992,5685],{"class":1945},[95,11994,5619],{"class":105},[95,11996,11997],{"class":97,"line":7966},[95,11998,1547],{"class":105},[5109,12000,12001],{},"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":12003},[12004],{"id":10672,"depth":15,"text":10673,"children":12005},[12006,12007],{"id":10704,"depth":1161,"text":10705},{"id":11332,"depth":1161,"text":11333},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10664,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12014,"title":12015,"body":12016,"description":14,"extension":18,"meta":13497,"navigation":21,"path":13498,"seo":13499,"stem":13500,"__hash__":13501},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12017,"toc":13489},[12018,12021,12025,12028,12031,12200,12204,12209,12226,12231,12383,12387,12390,12393,12787,12791,12794,12799,12802,13114,13118,13124,13284,13286,13294,13298,13301,13308,13486],[33,12019,12015],{"id":12020},"_6引用",[37,12022,12024],{"id":12023},"_61引用基本用法","6.1引用基本用法",[10,12026,12027],{},"引用的本质：给变量起别名",[10,12029,12030],{},"语法：数据类型 &别名=原名",[86,12032,12034],{"className":88,"code":12033,"language":90,"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",[92,12035,12036,12044,12048,12060,12072,12076,12095,12114,12118,12129,12133,12152,12170,12174,12184,12188,12196],{"__ignoreMap":14},[95,12037,12038,12040,12042],{"class":97,"line":98},[95,12039,109],{"class":101},[95,12041,1955],{"class":1945},[95,12043,10836],{"class":105},[95,12045,12046],{"class":97,"line":15},[95,12047,2382],{"emptyLinePlaceholder":21},[95,12049,12050,12052,12054,12056,12058],{"class":97,"line":1161},[95,12051,1967],{"class":101},[95,12053,10852],{"class":105},[95,12055,151],{"class":101},[95,12057,2020],{"class":154},[95,12059,1272],{"class":105},[95,12061,12062,12064,12066,12068,12070],{"class":97,"line":1176},[95,12063,1967],{"class":101},[95,12065,10567],{"class":101},[95,12067,10928],{"class":105},[95,12069,151],{"class":101},[95,12071,1414],{"class":105},[95,12073,12074],{"class":97,"line":1182},[95,12075,2382],{"emptyLinePlaceholder":21},[95,12077,12078,12080,12082,12085,12087,12089,12091,12093],{"class":97,"line":1196},[95,12079,6512],{"class":105},[95,12081,1150],{"class":101},[95,12083,12084],{"class":210}," \"a = \"",[95,12086,1426],{"class":101},[95,12088,10852],{"class":105},[95,12090,1150],{"class":101},[95,12092,11452],{"class":105},[95,12094,7251],{"class":164},[95,12096,12097,12099,12101,12104,12106,12108,12110,12112],{"class":97,"line":1202},[95,12098,6512],{"class":105},[95,12100,1150],{"class":101},[95,12102,12103],{"class":210}," \"b = \"",[95,12105,1426],{"class":101},[95,12107,10865],{"class":105},[95,12109,1150],{"class":101},[95,12111,11452],{"class":105},[95,12113,7251],{"class":164},[95,12115,12116],{"class":97,"line":1293},[95,12117,2382],{"emptyLinePlaceholder":21},[95,12119,12120,12123,12125,12127],{"class":97,"line":1299},[95,12121,12122],{"class":105},"    b ",[95,12124,151],{"class":101},[95,12126,5737],{"class":154},[95,12128,1272],{"class":105},[95,12130,12131],{"class":97,"line":1311},[95,12132,2382],{"emptyLinePlaceholder":21},[95,12134,12135,12137,12139,12141,12143,12145,12147,12149],{"class":97,"line":1594},[95,12136,6512],{"class":105},[95,12138,1150],{"class":101},[95,12140,12084],{"class":210},[95,12142,1426],{"class":101},[95,12144,10852],{"class":105},[95,12146,1150],{"class":101},[95,12148,11452],{"class":105},[95,12150,12151],{"class":164},"\u002F\u002F100\n",[95,12153,12154,12156,12158,12160,12162,12164,12166,12168],{"class":97,"line":1599},[95,12155,6512],{"class":105},[95,12157,1150],{"class":101},[95,12159,12103],{"class":210},[95,12161,1426],{"class":101},[95,12163,10865],{"class":105},[95,12165,1150],{"class":101},[95,12167,11452],{"class":105},[95,12169,12151],{"class":164},[95,12171,12172],{"class":97,"line":1605},[95,12173,2382],{"emptyLinePlaceholder":21},[95,12175,12176,12178,12180,12182],{"class":97,"line":1610},[95,12177,2285],{"class":1945},[95,12179,106],{"class":105},[95,12181,2290],{"class":210},[95,12183,2701],{"class":105},[95,12185,12186],{"class":97,"line":1624},[95,12187,2382],{"emptyLinePlaceholder":21},[95,12189,12190,12192,12194],{"class":97,"line":1629},[95,12191,4072],{"class":101},[95,12193,4075],{"class":154},[95,12195,1272],{"class":105},[95,12197,12198],{"class":97,"line":1635},[95,12199,1547],{"class":105},[37,12201,12203],{"id":12202},"_62引用的注意事项","6.2引用的注意事项",[49,12205,12206],{},[52,12207,12208],{},"引用必须要初始化",[86,12210,12212],{"className":88,"code":12211,"language":90,"meta":14,"style":14},"int &b;\u002F\u002F非常错误！\n",[92,12213,12214],{"__ignoreMap":14},[95,12215,12216,12218,12220,12223],{"class":97,"line":98},[95,12217,109],{"class":101},[95,12219,10567],{"class":101},[95,12221,12222],{"class":105},"b;",[95,12224,12225],{"class":164},"\u002F\u002F非常错误！\n",[49,12227,12228],{"start":15},[52,12229,12230],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[86,12232,12234],{"className":88,"code":12233,"language":90,"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",[92,12235,12236,12244,12256,12268,12276,12292,12305,12323,12341,12361,12371,12379],{"__ignoreMap":14},[95,12237,12238,12240,12242],{"class":97,"line":98},[95,12239,109],{"class":101},[95,12241,1955],{"class":1945},[95,12243,10836],{"class":105},[95,12245,12246,12248,12250,12252,12254],{"class":97,"line":15},[95,12247,1967],{"class":101},[95,12249,10852],{"class":105},[95,12251,151],{"class":101},[95,12253,2020],{"class":154},[95,12255,1272],{"class":105},[95,12257,12258,12260,12262,12264,12266],{"class":97,"line":1161},[95,12259,1967],{"class":101},[95,12261,10865],{"class":105},[95,12263,151],{"class":101},[95,12265,8933],{"class":154},[95,12267,1272],{"class":105},[95,12269,12270,12273],{"class":97,"line":1176},[95,12271,12272],{"class":164},"    \u002F\u002Fint &c;",[95,12274,12275],{"class":164}," \u002F\u002F错误，引用必须初始化\n",[95,12277,12278,12280,12282,12284,12286,12289],{"class":97,"line":1182},[95,12279,1967],{"class":101},[95,12281,10567],{"class":101},[95,12283,2928],{"class":105},[95,12285,151],{"class":101},[95,12287,12288],{"class":105}," a;",[95,12290,12291],{"class":164}," \u002F\u002F一旦初始化后，就不可以更改\n",[95,12293,12294,12297,12299,12302],{"class":97,"line":1196},[95,12295,12296],{"class":105},"    c ",[95,12298,151],{"class":101},[95,12300,12301],{"class":105}," b;",[95,12303,12304],{"class":164}," \u002F\u002F这是赋值操作，不是更改引用\n",[95,12306,12307,12309,12311,12313,12315,12317,12319,12321],{"class":97,"line":1202},[95,12308,6512],{"class":105},[95,12310,1150],{"class":101},[95,12312,12084],{"class":210},[95,12314,1426],{"class":101},[95,12316,10852],{"class":105},[95,12318,1150],{"class":101},[95,12320,11452],{"class":105},[95,12322,7236],{"class":164},[95,12324,12325,12327,12329,12331,12333,12335,12337,12339],{"class":97,"line":1293},[95,12326,6512],{"class":105},[95,12328,1150],{"class":101},[95,12330,12103],{"class":210},[95,12332,1426],{"class":101},[95,12334,10865],{"class":105},[95,12336,1150],{"class":101},[95,12338,11452],{"class":105},[95,12340,7236],{"class":164},[95,12342,12343,12345,12347,12350,12352,12355,12357,12359],{"class":97,"line":1299},[95,12344,6512],{"class":105},[95,12346,1150],{"class":101},[95,12348,12349],{"class":210}," \"c = \"",[95,12351,1426],{"class":101},[95,12353,12354],{"class":105}," c ",[95,12356,1150],{"class":101},[95,12358,11452],{"class":105},[95,12360,7236],{"class":164},[95,12362,12363,12365,12367,12369],{"class":97,"line":1311},[95,12364,2285],{"class":1945},[95,12366,106],{"class":105},[95,12368,2290],{"class":210},[95,12370,2701],{"class":105},[95,12372,12373,12375,12377],{"class":97,"line":1594},[95,12374,4072],{"class":101},[95,12376,4075],{"class":154},[95,12378,1272],{"class":105},[95,12380,12381],{"class":97,"line":1599},[95,12382,1547],{"class":105},[37,12384,12386],{"id":12385},"_63引用做函数参数","6.3引用做函数参数",[10,12388,12389],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[10,12391,12392],{},"优点：可以简化指针修改实参",[86,12394,12396],{"className":88,"code":12395,"language":90,"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",[92,12397,12398,12403,12426,12437,12447,12456,12460,12464,12469,12491,12503,12515,12525,12529,12533,12538,12560,12570,12578,12586,12590,12594,12602,12606,12618,12630,12634,12645,12671,12675,12695,12719,12723,12733,12757,12761,12771,12775,12783],{"__ignoreMap":14},[95,12399,12400],{"class":97,"line":98},[95,12401,12402],{"class":164},"\u002F\u002F1. 值传递\n",[95,12404,12405,12407,12410,12412,12414,12416,12419,12421,12423],{"class":97,"line":15},[95,12406,5347],{"class":101},[95,12408,12409],{"class":1945}," mySwap01",[95,12411,106],{"class":105},[95,12413,109],{"class":101},[95,12415,1380],{"class":5199},[95,12417,12418],{"class":105},", ",[95,12420,109],{"class":101},[95,12422,2815],{"class":5199},[95,12424,12425],{"class":105},") {\n",[95,12427,12428,12430,12433,12435],{"class":97,"line":1161},[95,12429,1967],{"class":101},[95,12431,12432],{"class":105}," temp ",[95,12434,151],{"class":101},[95,12436,1414],{"class":105},[95,12438,12439,12442,12444],{"class":97,"line":1176},[95,12440,12441],{"class":105},"    a ",[95,12443,151],{"class":101},[95,12445,12446],{"class":105}," b;\n",[95,12448,12449,12451,12453],{"class":97,"line":1182},[95,12450,12122],{"class":105},[95,12452,151],{"class":101},[95,12454,12455],{"class":105}," temp;\n",[95,12457,12458],{"class":97,"line":1196},[95,12459,1547],{"class":105},[95,12461,12462],{"class":97,"line":1202},[95,12463,2382],{"emptyLinePlaceholder":21},[95,12465,12466],{"class":97,"line":1293},[95,12467,12468],{"class":164},"\u002F\u002F2. 地址传递\n",[95,12470,12471,12473,12476,12478,12481,12483,12485,12487,12489],{"class":97,"line":1299},[95,12472,5347],{"class":101},[95,12474,12475],{"class":1945}," mySwap02",[95,12477,106],{"class":105},[95,12479,12480],{"class":101},"int*",[95,12482,1380],{"class":5199},[95,12484,12418],{"class":105},[95,12486,12480],{"class":101},[95,12488,2815],{"class":5199},[95,12490,12425],{"class":105},[95,12492,12493,12495,12497,12499,12501],{"class":97,"line":1311},[95,12494,1967],{"class":101},[95,12496,12432],{"class":105},[95,12498,151],{"class":101},[95,12500,6501],{"class":101},[95,12502,6180],{"class":105},[95,12504,12505,12507,12509,12511,12513],{"class":97,"line":1594},[95,12506,6386],{"class":101},[95,12508,10902],{"class":105},[95,12510,151],{"class":101},[95,12512,6501],{"class":101},[95,12514,6052],{"class":105},[95,12516,12517,12519,12521,12523],{"class":97,"line":1599},[95,12518,6386],{"class":101},[95,12520,10928],{"class":105},[95,12522,151],{"class":101},[95,12524,12455],{"class":105},[95,12526,12527],{"class":97,"line":1605},[95,12528,1547],{"class":105},[95,12530,12531],{"class":97,"line":1610},[95,12532,2382],{"emptyLinePlaceholder":21},[95,12534,12535],{"class":97,"line":1624},[95,12536,12537],{"class":164},"\u002F\u002F3. 引用传递\n",[95,12539,12540,12542,12545,12547,12550,12552,12554,12556,12558],{"class":97,"line":1629},[95,12541,5347],{"class":101},[95,12543,12544],{"class":1945}," mySwap03",[95,12546,106],{"class":105},[95,12548,12549],{"class":101},"int&",[95,12551,1380],{"class":5199},[95,12553,12418],{"class":105},[95,12555,12549],{"class":101},[95,12557,2815],{"class":5199},[95,12559,12425],{"class":105},[95,12561,12562,12564,12566,12568],{"class":97,"line":1635},[95,12563,1967],{"class":101},[95,12565,12432],{"class":105},[95,12567,151],{"class":101},[95,12569,1414],{"class":105},[95,12571,12572,12574,12576],{"class":97,"line":1656},[95,12573,12441],{"class":105},[95,12575,151],{"class":101},[95,12577,12446],{"class":105},[95,12579,12580,12582,12584],{"class":97,"line":1661},[95,12581,12122],{"class":105},[95,12583,151],{"class":101},[95,12585,12455],{"class":105},[95,12587,12588],{"class":97,"line":1675},[95,12589,1547],{"class":105},[95,12591,12592],{"class":97,"line":1680},[95,12593,2382],{"emptyLinePlaceholder":21},[95,12595,12596,12598,12600],{"class":97,"line":1709},[95,12597,109],{"class":101},[95,12599,1955],{"class":1945},[95,12601,10836],{"class":105},[95,12603,12604],{"class":97,"line":1714},[95,12605,2382],{"emptyLinePlaceholder":21},[95,12607,12608,12610,12612,12614,12616],{"class":97,"line":1731},[95,12609,1967],{"class":101},[95,12611,10852],{"class":105},[95,12613,151],{"class":101},[95,12615,2020],{"class":154},[95,12617,1272],{"class":105},[95,12619,12620,12622,12624,12626,12628],{"class":97,"line":1736},[95,12621,1967],{"class":101},[95,12623,10865],{"class":105},[95,12625,151],{"class":101},[95,12627,8933],{"class":154},[95,12629,1272],{"class":105},[95,12631,12632],{"class":97,"line":1741},[95,12633,2382],{"emptyLinePlaceholder":21},[95,12635,12636,12639,12642],{"class":97,"line":1746},[95,12637,12638],{"class":1945},"    mySwap01",[95,12640,12641],{"class":105},"(a, b);",[95,12643,12644],{"class":164},"\u002F\u002F值传递，形参不会修饰实参\n",[95,12646,12647,12649,12651,12654,12656,12658,12660,12663,12665,12667,12669],{"class":97,"line":1760},[95,12648,6512],{"class":105},[95,12650,1150],{"class":101},[95,12652,12653],{"class":210}," \"a:\"",[95,12655,1426],{"class":101},[95,12657,10852],{"class":105},[95,12659,1150],{"class":101},[95,12661,12662],{"class":210}," \" b:\"",[95,12664,1426],{"class":101},[95,12666,10865],{"class":105},[95,12668,1150],{"class":101},[95,12670,8823],{"class":105},[95,12672,12673],{"class":97,"line":1765},[95,12674,2382],{"emptyLinePlaceholder":21},[95,12676,12677,12680,12682,12684,12687,12689,12692],{"class":97,"line":2559},[95,12678,12679],{"class":1945},"    mySwap02",[95,12681,106],{"class":105},[95,12683,459],{"class":101},[95,12685,12686],{"class":105},"a, ",[95,12688,459],{"class":101},[95,12690,12691],{"class":105},"b);",[95,12693,12694],{"class":164},"\u002F\u002F地址传递，形参会修饰实参\n",[95,12696,12697,12699,12701,12703,12705,12707,12709,12711,12713,12715,12717],{"class":97,"line":2573},[95,12698,6512],{"class":105},[95,12700,1150],{"class":101},[95,12702,12653],{"class":210},[95,12704,1426],{"class":101},[95,12706,10852],{"class":105},[95,12708,1150],{"class":101},[95,12710,12662],{"class":210},[95,12712,1426],{"class":101},[95,12714,10865],{"class":105},[95,12716,1150],{"class":101},[95,12718,8823],{"class":105},[95,12720,12721],{"class":97,"line":2581},[95,12722,2382],{"emptyLinePlaceholder":21},[95,12724,12725,12728,12730],{"class":97,"line":2586},[95,12726,12727],{"class":1945},"    mySwap03",[95,12729,12641],{"class":105},[95,12731,12732],{"class":164},"\u002F\u002F引用传递，形参会修饰实参\n",[95,12734,12735,12737,12739,12741,12743,12745,12747,12749,12751,12753,12755],{"class":97,"line":2592},[95,12736,6512],{"class":105},[95,12738,1150],{"class":101},[95,12740,12653],{"class":210},[95,12742,1426],{"class":101},[95,12744,10852],{"class":105},[95,12746,1150],{"class":101},[95,12748,12662],{"class":210},[95,12750,1426],{"class":101},[95,12752,10865],{"class":105},[95,12754,1150],{"class":101},[95,12756,8823],{"class":105},[95,12758,12759],{"class":97,"line":2598},[95,12760,2382],{"emptyLinePlaceholder":21},[95,12762,12763,12765,12767,12769],{"class":97,"line":2603},[95,12764,2285],{"class":1945},[95,12766,106],{"class":105},[95,12768,2290],{"class":210},[95,12770,2701],{"class":105},[95,12772,12773],{"class":97,"line":7931},[95,12774,2382],{"emptyLinePlaceholder":21},[95,12776,12777,12779,12781],{"class":97,"line":7955},[95,12778,4072],{"class":101},[95,12780,4075],{"class":154},[95,12782,1272],{"class":105},[95,12784,12785],{"class":97,"line":7960},[95,12786,1547],{"class":105},[37,12788,12790],{"id":12789},"_64引用做函数的返回值","6.4引用做函数的返回值",[10,12792,12793],{},"作用：引用是可以作为函数的返回值存在的",[10,12795,9008,12796],{},[255,12797,12798],{},"不要返回局部变量引用",[10,12800,12801],{},"用法：函数调用作为左值",[86,12803,12805],{"className":9924,"code":12804,"language":9926,"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",[92,12806,12807,12812,12820,12835,12841,12845,12849,12854,12862,12879,12885,12889,12893,12901,12905,12910,12924,12944,12963,12967,12972,12985,13005,13023,13027,13043,13047,13066,13084,13088,13098,13102,13110],{"__ignoreMap":14},[95,12808,12809],{"class":97,"line":98},[95,12810,12811],{"class":164},"\u002F\u002F返回局部变量引用\n",[95,12813,12814,12816,12818],{"class":97,"line":15},[95,12815,12549],{"class":101},[95,12817,5571],{"class":1945},[95,12819,10836],{"class":105},[95,12821,12822,12824,12826,12828,12830,12832],{"class":97,"line":1161},[95,12823,1967],{"class":101},[95,12825,10852],{"class":105},[95,12827,151],{"class":101},[95,12829,2020],{"class":154},[95,12831,161],{"class":105},[95,12833,12834],{"class":164}," \u002F\u002F局部变量\n",[95,12836,12837,12839],{"class":97,"line":1176},[95,12838,4072],{"class":101},[95,12840,1414],{"class":105},[95,12842,12843],{"class":97,"line":1182},[95,12844,1547],{"class":105},[95,12846,12847],{"class":97,"line":1196},[95,12848,2382],{"emptyLinePlaceholder":21},[95,12850,12851],{"class":97,"line":1202},[95,12852,12853],{"class":164},"\u002F\u002F返回静态变量引用\n",[95,12855,12856,12858,12860],{"class":97,"line":1293},[95,12857,12549],{"class":101},[95,12859,5640],{"class":1945},[95,12861,10836],{"class":105},[95,12863,12864,12866,12868,12870,12872,12874,12876],{"class":97,"line":1299},[95,12865,11003],{"class":101},[95,12867,2364],{"class":101},[95,12869,10852],{"class":105},[95,12871,151],{"class":101},[95,12873,8933],{"class":154},[95,12875,161],{"class":105},[95,12877,12878],{"class":164},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[95,12880,12881,12883],{"class":97,"line":1311},[95,12882,4072],{"class":101},[95,12884,1414],{"class":105},[95,12886,12887],{"class":97,"line":1594},[95,12888,1547],{"class":105},[95,12890,12891],{"class":97,"line":1599},[95,12892,2382],{"emptyLinePlaceholder":21},[95,12894,12895,12897,12899],{"class":97,"line":1605},[95,12896,109],{"class":101},[95,12898,1955],{"class":1945},[95,12900,10836],{"class":105},[95,12902,12903],{"class":97,"line":1610},[95,12904,2382],{"emptyLinePlaceholder":21},[95,12906,12907],{"class":97,"line":1624},[95,12908,12909],{"class":164},"    \u002F\u002F不能返回局部变量的引用\n",[95,12911,12912,12915,12918,12920,12922],{"class":97,"line":1629},[95,12913,12914],{"class":101},"    int&",[95,12916,12917],{"class":105}," ref ",[95,12919,151],{"class":101},[95,12921,5571],{"class":1945},[95,12923,5619],{"class":105},[95,12925,12926,12928,12930,12933,12935,12937,12939,12941],{"class":97,"line":1635},[95,12927,6512],{"class":105},[95,12929,1150],{"class":101},[95,12931,12932],{"class":210}," \"ref = \"",[95,12934,1426],{"class":101},[95,12936,12917],{"class":105},[95,12938,1150],{"class":101},[95,12940,11452],{"class":105},[95,12942,12943],{"class":164},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[95,12945,12946,12948,12950,12952,12954,12956,12958,12960],{"class":97,"line":1656},[95,12947,6512],{"class":105},[95,12949,1150],{"class":101},[95,12951,12932],{"class":210},[95,12953,1426],{"class":101},[95,12955,12917],{"class":105},[95,12957,1150],{"class":101},[95,12959,11452],{"class":105},[95,12961,12962],{"class":164},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[95,12964,12965],{"class":97,"line":1661},[95,12966,2382],{"emptyLinePlaceholder":21},[95,12968,12969],{"class":97,"line":1675},[95,12970,12971],{"class":164},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[95,12973,12974,12976,12979,12981,12983],{"class":97,"line":1680},[95,12975,12914],{"class":101},[95,12977,12978],{"class":105}," ref2 ",[95,12980,151],{"class":101},[95,12982,5640],{"class":1945},[95,12984,5619],{"class":105},[95,12986,12987,12989,12991,12994,12996,12998,13000,13002],{"class":97,"line":1709},[95,12988,6512],{"class":105},[95,12990,1150],{"class":101},[95,12992,12993],{"class":210}," \"ref2 = \"",[95,12995,1426],{"class":101},[95,12997,12978],{"class":105},[95,12999,1150],{"class":101},[95,13001,11452],{"class":105},[95,13003,13004],{"class":164}," \u002F\u002F20\n",[95,13006,13007,13009,13011,13013,13015,13017,13019,13021],{"class":97,"line":1714},[95,13008,6512],{"class":105},[95,13010,1150],{"class":101},[95,13012,12993],{"class":210},[95,13014,1426],{"class":101},[95,13016,12978],{"class":105},[95,13018,1150],{"class":101},[95,13020,11452],{"class":105},[95,13022,13004],{"class":164},[95,13024,13025],{"class":97,"line":1731},[95,13026,2382],{"emptyLinePlaceholder":21},[95,13028,13029,13031,13034,13036,13038,13040],{"class":97,"line":1736},[95,13030,5685],{"class":1945},[95,13032,13033],{"class":105},"() ",[95,13035,151],{"class":101},[95,13037,2981],{"class":154},[95,13039,161],{"class":105},[95,13041,13042],{"class":164},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[95,13044,13045],{"class":97,"line":1741},[95,13046,2382],{"emptyLinePlaceholder":21},[95,13048,13049,13051,13053,13055,13057,13059,13061,13063],{"class":97,"line":1746},[95,13050,6512],{"class":105},[95,13052,1150],{"class":101},[95,13054,12993],{"class":210},[95,13056,1426],{"class":101},[95,13058,12978],{"class":105},[95,13060,1150],{"class":101},[95,13062,11452],{"class":105},[95,13064,13065],{"class":164}," \u002F\u002F1000\n",[95,13067,13068,13070,13072,13074,13076,13078,13080,13082],{"class":97,"line":1760},[95,13069,6512],{"class":105},[95,13071,1150],{"class":101},[95,13073,12993],{"class":210},[95,13075,1426],{"class":101},[95,13077,12978],{"class":105},[95,13079,1150],{"class":101},[95,13081,11452],{"class":105},[95,13083,13065],{"class":164},[95,13085,13086],{"class":97,"line":1765},[95,13087,2382],{"emptyLinePlaceholder":21},[95,13089,13090,13092,13094,13096],{"class":97,"line":2559},[95,13091,2285],{"class":1945},[95,13093,106],{"class":105},[95,13095,2290],{"class":210},[95,13097,2701],{"class":105},[95,13099,13100],{"class":97,"line":2573},[95,13101,2382],{"emptyLinePlaceholder":21},[95,13103,13104,13106,13108],{"class":97,"line":2581},[95,13105,4072],{"class":101},[95,13107,4075],{"class":154},[95,13109,1272],{"class":105},[95,13111,13112],{"class":97,"line":2586},[95,13113,1547],{"class":105},[37,13115,13117],{"id":13116},"_65引用的本质","6.5引用的本质",[10,13119,13120,13121],{},"本质：",[255,13122,13123],{},"引用的本质在c++内部实现是一个指针常量.",[86,13125,13127],{"className":88,"code":13126,"language":90,"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",[92,13128,13129,13134,13150,13164,13168,13177,13189,13194,13199,13210,13223,13227,13243,13260,13264,13272,13280],{"__ignoreMap":14},[95,13130,13131],{"class":97,"line":98},[95,13132,13133],{"class":164},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[95,13135,13136,13138,13140,13142,13144,13147],{"class":97,"line":15},[95,13137,5347],{"class":101},[95,13139,11368],{"class":1945},[95,13141,106],{"class":105},[95,13143,12549],{"class":101},[95,13145,13146],{"class":5199}," ref",[95,13148,13149],{"class":105},"){\n",[95,13151,13152,13155,13157,13159,13161],{"class":97,"line":1161},[95,13153,13154],{"class":105},"    ref ",[95,13156,151],{"class":101},[95,13158,5737],{"class":154},[95,13160,161],{"class":105},[95,13162,13163],{"class":164}," \u002F\u002F ref是引用，转换为*ref = 100\n",[95,13165,13166],{"class":97,"line":1176},[95,13167,1547],{"class":105},[95,13169,13170,13172,13174],{"class":97,"line":1182},[95,13171,109],{"class":101},[95,13173,1955],{"class":1945},[95,13175,13176],{"class":105},"(){\n",[95,13178,13179,13181,13183,13185,13187],{"class":97,"line":1196},[95,13180,1967],{"class":101},[95,13182,10852],{"class":105},[95,13184,151],{"class":101},[95,13186,2020],{"class":154},[95,13188,1272],{"class":105},[95,13190,13191],{"class":97,"line":1202},[95,13192,13193],{"class":105},"    \n",[95,13195,13196],{"class":97,"line":1293},[95,13197,13198],{"class":164},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[95,13200,13201,13203,13205,13207],{"class":97,"line":1299},[95,13202,12914],{"class":101},[95,13204,12917],{"class":105},[95,13206,151],{"class":101},[95,13208,13209],{"class":105}," a; \n",[95,13211,13212,13214,13216,13218,13220],{"class":97,"line":1311},[95,13213,13154],{"class":105},[95,13215,151],{"class":101},[95,13217,8933],{"class":154},[95,13219,161],{"class":105},[95,13221,13222],{"class":164}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[95,13224,13225],{"class":97,"line":1594},[95,13226,13193],{"class":105},[95,13228,13229,13231,13233,13235,13237,13239,13241],{"class":97,"line":1599},[95,13230,6512],{"class":105},[95,13232,1150],{"class":101},[95,13234,12653],{"class":210},[95,13236,1426],{"class":101},[95,13238,10852],{"class":105},[95,13240,1150],{"class":101},[95,13242,8823],{"class":105},[95,13244,13245,13247,13249,13252,13254,13256,13258],{"class":97,"line":1605},[95,13246,6512],{"class":105},[95,13248,1150],{"class":101},[95,13250,13251],{"class":210}," \"ref:\"",[95,13253,1426],{"class":101},[95,13255,12917],{"class":105},[95,13257,1150],{"class":101},[95,13259,8823],{"class":105},[95,13261,13262],{"class":97,"line":1610},[95,13263,13193],{"class":105},[95,13265,13266,13269],{"class":97,"line":1624},[95,13267,13268],{"class":1945},"    func",[95,13270,13271],{"class":105},"(a);\n",[95,13273,13274,13276,13278],{"class":97,"line":1629},[95,13275,4072],{"class":101},[95,13277,4075],{"class":154},[95,13279,1272],{"class":105},[95,13281,13282],{"class":97,"line":1635},[95,13283,1547],{"class":105},[10,13285,11315],{},[49,13287,13288,13291],{},[52,13289,13290],{},"引用的本质，就是一个指针常量",[52,13292,13293],{},"引用一旦初始化，就不可以发生改变",[37,13295,13297],{"id":13296},"_66常量引用","6.6常量引用",[10,13299,13300],{},"作用：常量引用主要用来修饰形参",[10,13302,13303,13304,13307],{},"在函数形参列表中，可以加",[255,13305,13306],{},"const修饰形参","，防止形参改变实参",[86,13309,13311],{"className":88,"code":13310,"language":90,"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",[92,13312,13313,13318,13323,13342,13347,13360,13364,13368,13376,13380,13385,13390,13404,13408,13416,13428,13432,13437,13449,13456,13460,13470,13474,13482],{"__ignoreMap":14},[95,13314,13315],{"class":97,"line":98},[95,13316,13317],{"class":164},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[95,13319,13320],{"class":97,"line":15},[95,13321,13322],{"class":164},"\u002F\u002F加上const就不能修改实参的\n",[95,13324,13325,13327,13330,13332,13334,13337,13340],{"class":97,"line":1161},[95,13326,5347],{"class":101},[95,13328,13329],{"class":1945}," showValue",[95,13331,106],{"class":105},[95,13333,6775],{"class":101},[95,13335,13336],{"class":101}," int&",[95,13338,13339],{"class":5199}," v",[95,13341,12425],{"class":105},[95,13343,13344],{"class":97,"line":1176},[95,13345,13346],{"class":164},"    \u002F\u002Fv += 100;\n",[95,13348,13349,13351,13353,13356,13358],{"class":97,"line":1182},[95,13350,6512],{"class":105},[95,13352,1150],{"class":101},[95,13354,13355],{"class":105}," v ",[95,13357,1150],{"class":101},[95,13359,8823],{"class":105},[95,13361,13362],{"class":97,"line":1196},[95,13363,1547],{"class":105},[95,13365,13366],{"class":97,"line":1202},[95,13367,2382],{"emptyLinePlaceholder":21},[95,13369,13370,13372,13374],{"class":97,"line":1293},[95,13371,109],{"class":101},[95,13373,1955],{"class":1945},[95,13375,10836],{"class":105},[95,13377,13378],{"class":97,"line":1299},[95,13379,2382],{"emptyLinePlaceholder":21},[95,13381,13382],{"class":97,"line":1311},[95,13383,13384],{"class":164},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[95,13386,13387],{"class":97,"line":1594},[95,13388,13389],{"class":164},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[95,13391,13392,13394,13396,13398,13400,13402],{"class":97,"line":1599},[95,13393,11204],{"class":101},[95,13395,13336],{"class":101},[95,13397,12917],{"class":105},[95,13399,151],{"class":101},[95,13401,2020],{"class":154},[95,13403,1272],{"class":105},[95,13405,13406],{"class":97,"line":1605},[95,13407,2382],{"emptyLinePlaceholder":21},[95,13409,13410,13413],{"class":97,"line":1610},[95,13411,13412],{"class":164},"    \u002F\u002Fref = 100;",[95,13414,13415],{"class":164},"  \u002F\u002F加入const后不可以修改变量\n",[95,13417,13418,13420,13422,13424,13426],{"class":97,"line":1624},[95,13419,6512],{"class":105},[95,13421,1150],{"class":101},[95,13423,12917],{"class":105},[95,13425,1150],{"class":101},[95,13427,8823],{"class":105},[95,13429,13430],{"class":97,"line":1629},[95,13431,2382],{"emptyLinePlaceholder":21},[95,13433,13434],{"class":97,"line":1635},[95,13435,13436],{"class":164},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[95,13438,13439,13441,13443,13445,13447],{"class":97,"line":1656},[95,13440,1967],{"class":101},[95,13442,10852],{"class":105},[95,13444,151],{"class":101},[95,13446,2020],{"class":154},[95,13448,1272],{"class":105},[95,13450,13451,13454],{"class":97,"line":1661},[95,13452,13453],{"class":1945},"    showValue",[95,13455,13271],{"class":105},[95,13457,13458],{"class":97,"line":1675},[95,13459,2382],{"emptyLinePlaceholder":21},[95,13461,13462,13464,13466,13468],{"class":97,"line":1680},[95,13463,2285],{"class":1945},[95,13465,106],{"class":105},[95,13467,2290],{"class":210},[95,13469,2701],{"class":105},[95,13471,13472],{"class":97,"line":1709},[95,13473,2382],{"emptyLinePlaceholder":21},[95,13475,13476,13478,13480],{"class":97,"line":1714},[95,13477,4072],{"class":101},[95,13479,4075],{"class":154},[95,13481,1272],{"class":105},[95,13483,13484],{"class":97,"line":1731},[95,13485,1547],{"class":105},[5109,13487,13488],{},"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":13490},[13491,13492,13493,13494,13495,13496],{"id":12023,"depth":15,"text":12024},{"id":12202,"depth":15,"text":12203},{"id":12385,"depth":15,"text":12386},{"id":12789,"depth":15,"text":12790},{"id":13116,"depth":15,"text":13117},{"id":13296,"depth":15,"text":13297},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12015,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13503,"title":13504,"body":13505,"description":14,"extension":18,"meta":14586,"navigation":21,"path":14587,"seo":14588,"stem":14589,"__hash__":14590},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13506,"toc":14578},[13507,13510,13514,13517,13522,13754,13756,13767,13771,13774,13782,13886,13889,13893,13896,13900,13903,13908,13930,13936,14263,14266,14270,14278,14575],[33,13508,13504],{"id":13509},"_7函数高级部分",[37,13511,13513],{"id":13512},"_71函数默认参数","7.1函数默认参数",[10,13515,13516],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[10,13518,5164,13519],{},[92,13520,13521],{}," 返回值类型  函数名 （参数= 默认值）{}",[86,13523,13525],{"className":88,"code":13524,"language":90,"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",[92,13526,13527,13562,13577,13581,13585,13590,13595,13624,13644,13654,13658,13662,13670,13674,13702,13724,13728,13738,13742,13750],{"__ignoreMap":14},[95,13528,13529,13531,13533,13535,13537,13539,13541,13543,13545,13548,13550,13552,13554,13556,13558,13560],{"class":97,"line":98},[95,13530,109],{"class":101},[95,13532,11368],{"class":1945},[95,13534,106],{"class":105},[95,13536,109],{"class":101},[95,13538,1380],{"class":5199},[95,13540,12418],{"class":105},[95,13542,109],{"class":101},[95,13544,2815],{"class":5199},[95,13546,13547],{"class":101}," =",[95,13549,2020],{"class":154},[95,13551,12418],{"class":105},[95,13553,109],{"class":101},[95,13555,2831],{"class":5199},[95,13557,13547],{"class":101},[95,13559,2020],{"class":154},[95,13561,12425],{"class":105},[95,13563,13564,13566,13568,13570,13572,13574],{"class":97,"line":15},[95,13565,4072],{"class":101},[95,13567,10852],{"class":105},[95,13569,587],{"class":101},[95,13571,10865],{"class":105},[95,13573,587],{"class":101},[95,13575,13576],{"class":105}," c;\n",[95,13578,13579],{"class":97,"line":1161},[95,13580,1547],{"class":105},[95,13582,13583],{"class":97,"line":1176},[95,13584,2382],{"emptyLinePlaceholder":21},[95,13586,13587],{"class":97,"line":1182},[95,13588,13589],{"class":164},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[95,13591,13592],{"class":97,"line":1196},[95,13593,13594],{"class":164},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[95,13596,13597,13599,13602,13604,13606,13608,13610,13612,13614,13616,13618,13620,13622],{"class":97,"line":1202},[95,13598,109],{"class":101},[95,13600,13601],{"class":1945}," func2",[95,13603,106],{"class":105},[95,13605,109],{"class":101},[95,13607,1380],{"class":5199},[95,13609,13547],{"class":101},[95,13611,2020],{"class":154},[95,13613,12418],{"class":105},[95,13615,109],{"class":101},[95,13617,2815],{"class":5199},[95,13619,13547],{"class":101},[95,13621,2020],{"class":154},[95,13623,2701],{"class":105},[95,13625,13626,13628,13630,13632,13634,13636,13638,13640,13642],{"class":97,"line":1293},[95,13627,109],{"class":101},[95,13629,13601],{"class":1945},[95,13631,106],{"class":105},[95,13633,109],{"class":101},[95,13635,1380],{"class":5199},[95,13637,12418],{"class":105},[95,13639,109],{"class":101},[95,13641,2815],{"class":5199},[95,13643,12425],{"class":105},[95,13645,13646,13648,13650,13652],{"class":97,"line":1299},[95,13647,4072],{"class":101},[95,13649,10852],{"class":105},[95,13651,587],{"class":101},[95,13653,12446],{"class":105},[95,13655,13656],{"class":97,"line":1311},[95,13657,1547],{"class":105},[95,13659,13660],{"class":97,"line":1594},[95,13661,2382],{"emptyLinePlaceholder":21},[95,13663,13664,13666,13668],{"class":97,"line":1599},[95,13665,109],{"class":101},[95,13667,1955],{"class":1945},[95,13669,10836],{"class":105},[95,13671,13672],{"class":97,"line":1605},[95,13673,2382],{"emptyLinePlaceholder":21},[95,13675,13676,13678,13680,13683,13685,13687,13689,13691,13693,13695,13698,13700],{"class":97,"line":1610},[95,13677,6512],{"class":105},[95,13679,1150],{"class":101},[95,13681,13682],{"class":210}," \"ret = \"",[95,13684,1426],{"class":101},[95,13686,11368],{"class":1945},[95,13688,106],{"class":105},[95,13690,806],{"class":154},[95,13692,12418],{"class":105},[95,13694,806],{"class":154},[95,13696,13697],{"class":105},") ",[95,13699,1150],{"class":101},[95,13701,8823],{"class":105},[95,13703,13704,13706,13708,13710,13712,13714,13716,13718,13720,13722],{"class":97,"line":1624},[95,13705,6512],{"class":105},[95,13707,1150],{"class":101},[95,13709,13682],{"class":210},[95,13711,1426],{"class":101},[95,13713,11368],{"class":1945},[95,13715,106],{"class":105},[95,13717,417],{"class":154},[95,13719,13697],{"class":105},[95,13721,1150],{"class":101},[95,13723,8823],{"class":105},[95,13725,13726],{"class":97,"line":1629},[95,13727,2382],{"emptyLinePlaceholder":21},[95,13729,13730,13732,13734,13736],{"class":97,"line":1635},[95,13731,2285],{"class":1945},[95,13733,106],{"class":105},[95,13735,2290],{"class":210},[95,13737,2701],{"class":105},[95,13739,13740],{"class":97,"line":1656},[95,13741,2382],{"emptyLinePlaceholder":21},[95,13743,13744,13746,13748],{"class":97,"line":1661},[95,13745,4072],{"class":101},[95,13747,4075],{"class":154},[95,13749,1272],{"class":105},[95,13751,13752],{"class":97,"line":1675},[95,13753,1547],{"class":105},[10,13755,11315],{},[49,13757,13758,13761,13764],{},[52,13759,13760],{},"我传就用我；没传就用你",[52,13762,13763],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[52,13765,13766],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[37,13768,13770],{"id":13769},"_72函数的占位参数","7.2函数的占位参数",[10,13772,13773],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[10,13775,13776,13778,13779],{},[255,13777,5164],{}," ",[92,13780,13781],{},"返回值类型 函数名 (数据类型){}",[86,13783,13785],{"className":88,"code":13784,"language":90,"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",[92,13786,13787,13792,13810,13823,13827,13835,13839,13856,13860,13870,13874,13882],{"__ignoreMap":14},[95,13788,13789],{"class":97,"line":98},[95,13790,13791],{"class":164},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[95,13793,13794,13796,13798,13800,13802,13804,13806,13808],{"class":97,"line":15},[95,13795,5347],{"class":101},[95,13797,11368],{"class":1945},[95,13799,106],{"class":105},[95,13801,109],{"class":101},[95,13803,1380],{"class":5199},[95,13805,12418],{"class":105},[95,13807,109],{"class":101},[95,13809,12425],{"class":105},[95,13811,13812,13814,13816,13819,13821],{"class":97,"line":1161},[95,13813,6512],{"class":105},[95,13815,1150],{"class":101},[95,13817,13818],{"class":210}," \"this is func\"",[95,13820,1426],{"class":101},[95,13822,8823],{"class":105},[95,13824,13825],{"class":97,"line":1176},[95,13826,1547],{"class":105},[95,13828,13829,13831,13833],{"class":97,"line":1182},[95,13830,109],{"class":101},[95,13832,1955],{"class":1945},[95,13834,10836],{"class":105},[95,13836,13837],{"class":97,"line":1196},[95,13838,2382],{"emptyLinePlaceholder":21},[95,13840,13841,13843,13845,13847,13849,13851,13853],{"class":97,"line":1202},[95,13842,13268],{"class":1945},[95,13844,106],{"class":105},[95,13846,552],{"class":154},[95,13848,484],{"class":105},[95,13850,552],{"class":154},[95,13852,5949],{"class":105},[95,13854,13855],{"class":164}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[95,13857,13858],{"class":97,"line":1293},[95,13859,2382],{"emptyLinePlaceholder":21},[95,13861,13862,13864,13866,13868],{"class":97,"line":1299},[95,13863,2285],{"class":1945},[95,13865,106],{"class":105},[95,13867,2290],{"class":210},[95,13869,2701],{"class":105},[95,13871,13872],{"class":97,"line":1311},[95,13873,2382],{"emptyLinePlaceholder":21},[95,13875,13876,13878,13880],{"class":97,"line":1594},[95,13877,4072],{"class":101},[95,13879,4075],{"class":154},[95,13881,1272],{"class":105},[95,13883,13884],{"class":97,"line":1599},[95,13885,1547],{"class":105},[10,13887,13888],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[37,13890,13892],{"id":13891},"_73函数重载","7.3函数重载",[10,13894,13895],{},"意思是函数名是可以相同的",[66,13897,13899],{"id":13898},"_731基本语法","7.3.1基本语法",[10,13901,13902],{},"作用：函数名可以相同，提高复用性",[10,13904,13905],{},[255,13906,13907],{},"函数重载满足条件：",[1113,13909,13910,13913,13916],{},[52,13911,13912],{},"同一个作用域下",[52,13914,13915],{},"函数名称相同",[52,13917,13918,13919,13922,13923,13926,13927],{},"函数参数",[255,13920,13921],{},"类型不同","  或者 ",[255,13924,13925],{},"个数不同"," 或者 ",[255,13928,13929],{},"顺序不同",[10,13931,13932,13935],{},[255,13933,13934],{},"注意:","  函数的返回值不可以作为函数重载的条件",[86,13937,13939],{"className":9924,"code":13938,"language":9926,"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",[92,13940,13941,13946,13954,13958,13971,13975,13989,13993,14006,14010,14025,14029,14042,14046,14067,14071,14084,14088,14108,14112,14125,14129,14133,14138,14143,14148,14153,14158,14162,14166,14174,14178,14184,14194,14204,14218,14233,14237,14247,14251,14259],{"__ignoreMap":14},[95,13942,13943],{"class":97,"line":98},[95,13944,13945],{"class":164},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[95,13947,13948,13950,13952],{"class":97,"line":15},[95,13949,5347],{"class":101},[95,13951,11368],{"class":1945},[95,13953,1958],{"class":105},[95,13955,13956],{"class":97,"line":1161},[95,13957,1528],{"class":105},[95,13959,13960,13962,13964,13967,13969],{"class":97,"line":1176},[95,13961,6512],{"class":105},[95,13963,1150],{"class":101},[95,13965,13966],{"class":210}," \"func 的调用！\"",[95,13968,1426],{"class":101},[95,13970,8823],{"class":105},[95,13972,13973],{"class":97,"line":1182},[95,13974,1547],{"class":105},[95,13976,13977,13979,13981,13983,13985,13987],{"class":97,"line":1196},[95,13978,5347],{"class":101},[95,13980,11368],{"class":1945},[95,13982,106],{"class":105},[95,13984,109],{"class":101},[95,13986,1380],{"class":5199},[95,13988,112],{"class":105},[95,13990,13991],{"class":97,"line":1202},[95,13992,1528],{"class":105},[95,13994,13995,13997,13999,14002,14004],{"class":97,"line":1293},[95,13996,6512],{"class":105},[95,13998,1150],{"class":101},[95,14000,14001],{"class":210}," \"func (int a) 的调用！\"",[95,14003,1426],{"class":101},[95,14005,8823],{"class":105},[95,14007,14008],{"class":97,"line":1299},[95,14009,1547],{"class":105},[95,14011,14012,14014,14016,14018,14021,14023],{"class":97,"line":1311},[95,14013,5347],{"class":101},[95,14015,11368],{"class":1945},[95,14017,106],{"class":105},[95,14019,14020],{"class":101},"double",[95,14022,1380],{"class":5199},[95,14024,112],{"class":105},[95,14026,14027],{"class":97,"line":1594},[95,14028,1528],{"class":105},[95,14030,14031,14033,14035,14038,14040],{"class":97,"line":1599},[95,14032,6512],{"class":105},[95,14034,1150],{"class":101},[95,14036,14037],{"class":210}," \"func (double a)的调用！\"",[95,14039,1426],{"class":101},[95,14041,8823],{"class":105},[95,14043,14044],{"class":97,"line":1605},[95,14045,1547],{"class":105},[95,14047,14048,14050,14052,14054,14056,14058,14061,14063,14065],{"class":97,"line":1610},[95,14049,5347],{"class":101},[95,14051,11368],{"class":1945},[95,14053,106],{"class":105},[95,14055,109],{"class":101},[95,14057,1380],{"class":5199},[95,14059,14060],{"class":105}," ,",[95,14062,14020],{"class":101},[95,14064,2815],{"class":5199},[95,14066,112],{"class":105},[95,14068,14069],{"class":97,"line":1624},[95,14070,1528],{"class":105},[95,14072,14073,14075,14077,14080,14082],{"class":97,"line":1629},[95,14074,6512],{"class":105},[95,14076,1150],{"class":101},[95,14078,14079],{"class":210}," \"func (int a ,double b) 的调用！\"",[95,14081,1426],{"class":101},[95,14083,8823],{"class":105},[95,14085,14086],{"class":97,"line":1635},[95,14087,1547],{"class":105},[95,14089,14090,14092,14094,14096,14098,14100,14102,14104,14106],{"class":97,"line":1656},[95,14091,5347],{"class":101},[95,14093,11368],{"class":1945},[95,14095,106],{"class":105},[95,14097,14020],{"class":101},[95,14099,1380],{"class":5199},[95,14101,14060],{"class":105},[95,14103,109],{"class":101},[95,14105,2815],{"class":5199},[95,14107,112],{"class":105},[95,14109,14110],{"class":97,"line":1661},[95,14111,1528],{"class":105},[95,14113,14114,14116,14118,14121,14123],{"class":97,"line":1675},[95,14115,6512],{"class":105},[95,14117,1150],{"class":101},[95,14119,14120],{"class":210}," \"func (double a ,int b)的调用！\"",[95,14122,1426],{"class":101},[95,14124,8823],{"class":105},[95,14126,14127],{"class":97,"line":1680},[95,14128,1547],{"class":105},[95,14130,14131],{"class":97,"line":1709},[95,14132,2382],{"emptyLinePlaceholder":21},[95,14134,14135],{"class":97,"line":1714},[95,14136,14137],{"class":164},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[95,14139,14140],{"class":97,"line":1731},[95,14141,14142],{"class":164},"\u002F\u002Fint func(double a, int b)\n",[95,14144,14145],{"class":97,"line":1736},[95,14146,14147],{"class":164},"\u002F\u002F{\n",[95,14149,14150],{"class":97,"line":1741},[95,14151,14152],{"class":164},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[95,14154,14155],{"class":97,"line":1746},[95,14156,14157],{"class":164},"\u002F\u002F}\n",[95,14159,14160],{"class":97,"line":1760},[95,14161,2382],{"emptyLinePlaceholder":21},[95,14163,14164],{"class":97,"line":1765},[95,14165,2382],{"emptyLinePlaceholder":21},[95,14167,14168,14170,14172],{"class":97,"line":2559},[95,14169,109],{"class":101},[95,14171,1955],{"class":1945},[95,14173,10836],{"class":105},[95,14175,14176],{"class":97,"line":2573},[95,14177,2382],{"emptyLinePlaceholder":21},[95,14179,14180,14182],{"class":97,"line":2581},[95,14181,13268],{"class":1945},[95,14183,5619],{"class":105},[95,14185,14186,14188,14190,14192],{"class":97,"line":2586},[95,14187,13268],{"class":1945},[95,14189,106],{"class":105},[95,14191,552],{"class":154},[95,14193,2701],{"class":105},[95,14195,14196,14198,14200,14202],{"class":97,"line":2592},[95,14197,13268],{"class":1945},[95,14199,106],{"class":105},[95,14201,155],{"class":154},[95,14203,2701],{"class":105},[95,14205,14206,14208,14210,14212,14214,14216],{"class":97,"line":2598},[95,14207,13268],{"class":1945},[95,14209,106],{"class":105},[95,14211,552],{"class":154},[95,14213,484],{"class":105},[95,14215,155],{"class":154},[95,14217,2701],{"class":105},[95,14219,14220,14222,14224,14226,14229,14231],{"class":97,"line":2603},[95,14221,13268],{"class":1945},[95,14223,106],{"class":105},[95,14225,155],{"class":154},[95,14227,14228],{"class":105}," , ",[95,14230,552],{"class":154},[95,14232,2701],{"class":105},[95,14234,14235],{"class":97,"line":7931},[95,14236,13193],{"class":105},[95,14238,14239,14241,14243,14245],{"class":97,"line":7955},[95,14240,2285],{"class":1945},[95,14242,106],{"class":105},[95,14244,2290],{"class":210},[95,14246,2701],{"class":105},[95,14248,14249],{"class":97,"line":7960},[95,14250,2382],{"emptyLinePlaceholder":21},[95,14252,14253,14255,14257],{"class":97,"line":7966},[95,14254,4072],{"class":101},[95,14256,4075],{"class":154},[95,14258,1272],{"class":105},[95,14260,14261],{"class":97,"line":7993},[95,14262,1547],{"class":105},[10,14264,14265],{},"重点：函数返回值不可以作为函数重载条件！",[66,14267,14269],{"id":14268},"_732注意事项","7.3.2注意事项",[1113,14271,14272,14275],{},[52,14273,14274],{},"引用作为重载条件!!!",[52,14276,14277],{},"函数重载碰到函数默认参数",[86,14279,14281],{"className":88,"code":14280,"language":90,"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",[92,14282,14283,14288,14293,14297,14313,14317,14330,14334,14338,14356,14360,14373,14377,14381,14385,14390,14394,14418,14422,14435,14439,14443,14457,14461,14474,14478,14482,14490,14494,14506,14516,14529,14533,14537,14545,14549,14559,14563,14571],{"__ignoreMap":14},[95,14284,14285],{"class":97,"line":98},[95,14286,14287],{"class":164},"\u002F\u002F函数重载注意事项\n",[95,14289,14290],{"class":97,"line":15},[95,14291,14292],{"class":164},"\u002F\u002F1、引用作为重载条件\n",[95,14294,14295],{"class":97,"line":1161},[95,14296,2382],{"emptyLinePlaceholder":21},[95,14298,14299,14301,14303,14305,14307,14309,14311],{"class":97,"line":1176},[95,14300,5347],{"class":101},[95,14302,11368],{"class":1945},[95,14304,106],{"class":105},[95,14306,109],{"class":101},[95,14308,10567],{"class":101},[95,14310,344],{"class":5199},[95,14312,112],{"class":105},[95,14314,14315],{"class":97,"line":1182},[95,14316,1528],{"class":105},[95,14318,14319,14321,14323,14326,14328],{"class":97,"line":1196},[95,14320,6512],{"class":105},[95,14322,1150],{"class":101},[95,14324,14325],{"class":210}," \"func (int &a) 调用 \"",[95,14327,1426],{"class":101},[95,14329,8823],{"class":105},[95,14331,14332],{"class":97,"line":1202},[95,14333,1547],{"class":105},[95,14335,14336],{"class":97,"line":1293},[95,14337,2382],{"emptyLinePlaceholder":21},[95,14339,14340,14342,14344,14346,14348,14350,14352,14354],{"class":97,"line":1299},[95,14341,5347],{"class":101},[95,14343,11368],{"class":1945},[95,14345,106],{"class":105},[95,14347,6775],{"class":101},[95,14349,2364],{"class":101},[95,14351,10567],{"class":101},[95,14353,344],{"class":5199},[95,14355,112],{"class":105},[95,14357,14358],{"class":97,"line":1311},[95,14359,1528],{"class":105},[95,14361,14362,14364,14366,14369,14371],{"class":97,"line":1594},[95,14363,6512],{"class":105},[95,14365,1150],{"class":101},[95,14367,14368],{"class":210}," \"func (const int &a) 调用 \"",[95,14370,1426],{"class":101},[95,14372,8823],{"class":105},[95,14374,14375],{"class":97,"line":1599},[95,14376,1547],{"class":105},[95,14378,14379],{"class":97,"line":1605},[95,14380,2382],{"emptyLinePlaceholder":21},[95,14382,14383],{"class":97,"line":1610},[95,14384,2382],{"emptyLinePlaceholder":21},[95,14386,14387],{"class":97,"line":1624},[95,14388,14389],{"class":164},"\u002F\u002F2、函数重载碰到函数默认参数\n",[95,14391,14392],{"class":97,"line":1629},[95,14393,2382],{"emptyLinePlaceholder":21},[95,14395,14396,14398,14400,14402,14404,14406,14408,14410,14412,14414,14416],{"class":97,"line":1635},[95,14397,5347],{"class":101},[95,14399,13601],{"class":1945},[95,14401,106],{"class":105},[95,14403,109],{"class":101},[95,14405,1380],{"class":5199},[95,14407,12418],{"class":105},[95,14409,109],{"class":101},[95,14411,2815],{"class":5199},[95,14413,13547],{"class":101},[95,14415,2020],{"class":154},[95,14417,112],{"class":105},[95,14419,14420],{"class":97,"line":1656},[95,14421,1528],{"class":105},[95,14423,14424,14426,14428,14431,14433],{"class":97,"line":1661},[95,14425,6512],{"class":105},[95,14427,1150],{"class":101},[95,14429,14430],{"class":210}," \"func2(int a, int b = 10) 调用\"",[95,14432,1426],{"class":101},[95,14434,8823],{"class":105},[95,14436,14437],{"class":97,"line":1675},[95,14438,1547],{"class":105},[95,14440,14441],{"class":97,"line":1680},[95,14442,2382],{"emptyLinePlaceholder":21},[95,14444,14445,14447,14449,14451,14453,14455],{"class":97,"line":1709},[95,14446,5347],{"class":101},[95,14448,13601],{"class":1945},[95,14450,106],{"class":105},[95,14452,109],{"class":101},[95,14454,1380],{"class":5199},[95,14456,112],{"class":105},[95,14458,14459],{"class":97,"line":1714},[95,14460,1528],{"class":105},[95,14462,14463,14465,14467,14470,14472],{"class":97,"line":1731},[95,14464,6512],{"class":105},[95,14466,1150],{"class":101},[95,14468,14469],{"class":210}," \"func2(int a) 调用\"",[95,14471,1426],{"class":101},[95,14473,8823],{"class":105},[95,14475,14476],{"class":97,"line":1736},[95,14477,1547],{"class":105},[95,14479,14480],{"class":97,"line":1741},[95,14481,2382],{"emptyLinePlaceholder":21},[95,14483,14484,14486,14488],{"class":97,"line":1746},[95,14485,109],{"class":101},[95,14487,1955],{"class":1945},[95,14489,10836],{"class":105},[95,14491,14492],{"class":97,"line":1760},[95,14493,13193],{"class":105},[95,14495,14496,14498,14500,14502,14504],{"class":97,"line":1765},[95,14497,1967],{"class":101},[95,14499,10852],{"class":105},[95,14501,151],{"class":101},[95,14503,2020],{"class":154},[95,14505,1272],{"class":105},[95,14507,14508,14510,14513],{"class":97,"line":2559},[95,14509,13268],{"class":1945},[95,14511,14512],{"class":105},"(a);",[95,14514,14515],{"class":164}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[95,14517,14518,14520,14522,14524,14526],{"class":97,"line":2573},[95,14519,13268],{"class":1945},[95,14521,106],{"class":105},[95,14523,552],{"class":154},[95,14525,5949],{"class":105},[95,14527,14528],{"class":164},"\u002F\u002F调用有const   10是个常量\n",[95,14530,14531],{"class":97,"line":2581},[95,14532,2382],{"emptyLinePlaceholder":21},[95,14534,14535],{"class":97,"line":2586},[95,14536,2382],{"emptyLinePlaceholder":21},[95,14538,14539,14542],{"class":97,"line":2592},[95,14540,14541],{"class":164},"    \u002F\u002Ffunc2(10);",[95,14543,14544],{"class":164}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[95,14546,14547],{"class":97,"line":2598},[95,14548,2382],{"emptyLinePlaceholder":21},[95,14550,14551,14553,14555,14557],{"class":97,"line":2603},[95,14552,2285],{"class":1945},[95,14554,106],{"class":105},[95,14556,2290],{"class":210},[95,14558,2701],{"class":105},[95,14560,14561],{"class":97,"line":7931},[95,14562,2382],{"emptyLinePlaceholder":21},[95,14564,14565,14567,14569],{"class":97,"line":7955},[95,14566,4072],{"class":101},[95,14568,4075],{"class":154},[95,14570,1272],{"class":105},[95,14572,14573],{"class":97,"line":7960},[95,14574,1547],{"class":105},[5109,14576,14577],{},"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":14579},[14580,14581,14582],{"id":13512,"depth":15,"text":13513},{"id":13769,"depth":15,"text":13770},{"id":13891,"depth":15,"text":13892,"children":14583},[14584,14585],{"id":13898,"depth":1161,"text":13899},{"id":14268,"depth":1161,"text":14269},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13504,"description":14},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14592,"title":14593,"body":14594,"description":23348,"extension":18,"meta":23349,"navigation":21,"path":23350,"seo":23351,"stem":23352,"__hash__":23353},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14595,"toc":23329},[14596,14599,14605,14612,14617,14620,14623,14626,14630,14634,14637,14640,14648,14653,14656,14663,14668,14827,14830,15083,15086,15089,15092,15097,15100,15103,15114,15119,15355,15359,15369,15372,15380,15527,15531,15534,15537,15541,15986,15990,15998,16006,16918,16925,16930,17558,17561,17564,17567,17686,17689,17776,17779,17905,17908,18002,18005,18358,18362,18370,18374,18381,18384,18387,18398,18404,18409,18421,18429,18449,18457,18474,18660,18663,18667,18670,18673,18676,18679,18682,18685,18688,19148,19154,19158,19161,19172,19759,19762,20251,20255,20258,20261,20264,20267,20270,20278,20674,20678,20681,20684,21131,21134,21137,21142,21145,21150,21153,21157,21160,21162,21168,21171,21477,21487,21528,21532,21535,21537,21570,21573,21880,21882,21897,21900,21923,21932,21938,21941,21945,21948,21951,21956,21967,21972,21980,21985,22115,22118,22121,22296,22301,22513,22517,22520,22634,22639,22878,22882,22886,22889,22892,22897,23002,23005,23008,23011,23015,23126,23129,23132,23137,23189,23192,23195,23200,23246,23249,23254,23322,23324,23327],[33,14597,14593],{"id":14598},"_8类和对象",[10,14600,14601,14602],{},"C++面向对象的三大特性为",[255,14603,14604],{},"封装、继承、多态",[10,14606,14607,14608,14611],{},"C++认为",[255,14609,14610],{},"万事万物都皆为对象","，对象上有其属性和行为",[10,14613,14614],{},[255,14615,14616],{},"例如：",[10,14618,14619],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[10,14621,14622],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[10,14624,14625],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[37,14627,14629],{"id":14628},"_81封装","8.1封装",[66,14631,14633],{"id":14632},"_811封装的意义","8.1.1封装的意义",[10,14635,14636],{},"封装是C++面向对象三大特性之一",[10,14638,14639],{},"封装的意义：",[1113,14641,14642,14645],{},[52,14643,14644],{},"将属性和行为作为一个整体，表现生活中的事物",[52,14646,14647],{},"将属性和行为加以权限控制",[10,14649,14650],{},[255,14651,14652],{},"封装意义一：",[10,14654,14655],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[10,14657,14658,13778,14660],{},[255,14659,5164],{},[92,14661,14662],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[49,14664,14665],{},[52,14666,14667],{},"**示例1：**设计一个圆类，求圆的周长",[86,14669,14671],{"className":88,"code":14670,"language":90,"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",[92,14672,14673,14681,14685,14690,14695,14700,14705,14712,14717,14727,14731,14749,14753,14757,14765,14769,14774,14779,14784,14789,14800,14823],{"__ignoreMap":14},[95,14674,14675,14678],{"class":97,"line":98},[95,14676,14677],{"class":101},"class",[95,14679,14680],{"class":1945}," Circle\n",[95,14682,14683],{"class":97,"line":15},[95,14684,1528],{"class":105},[95,14686,14687],{"class":97,"line":1161},[95,14688,14689],{"class":164},"    \u002F\u002F访问权限\n",[95,14691,14692],{"class":97,"line":1176},[95,14693,14694],{"class":164},"    \u002F\u002F公共权限\n",[95,14696,14697],{"class":97,"line":1182},[95,14698,14699],{"class":101},"public:\n",[95,14701,14702],{"class":97,"line":1196},[95,14703,14704],{"class":164},"    \u002F\u002F属性\n",[95,14706,14707,14709],{"class":97,"line":1202},[95,14708,1967],{"class":101},[95,14710,14711],{"class":105}," m_r;\n",[95,14713,14714],{"class":97,"line":1293},[95,14715,14716],{"class":164},"    \u002F\u002F行为\n",[95,14718,14719,14722,14725],{"class":97,"line":1299},[95,14720,14721],{"class":101},"    double",[95,14723,14724],{"class":1945}," calculateZC",[95,14726,1958],{"class":105},[95,14728,14729],{"class":97,"line":1311},[95,14730,2012],{"class":105},[95,14732,14733,14736,14739,14741,14744,14746],{"class":97,"line":1594},[95,14734,14735],{"class":101},"        return",[95,14737,14738],{"class":154}," 2",[95,14740,561],{"class":101},[95,14742,14743],{"class":105},"PI",[95,14745,561],{"class":101},[95,14747,14748],{"class":105},"m_r;\n",[95,14750,14751],{"class":97,"line":1599},[95,14752,2169],{"class":105},[95,14754,14755],{"class":97,"line":1605},[95,14756,3977],{"class":105},[95,14758,14759,14761,14763],{"class":97,"line":1610},[95,14760,109],{"class":101},[95,14762,1955],{"class":1945},[95,14764,1958],{"class":105},[95,14766,14767],{"class":97,"line":1624},[95,14768,1528],{"class":105},[95,14770,14771],{"class":97,"line":1629},[95,14772,14773],{"class":164},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[95,14775,14776],{"class":97,"line":1635},[95,14777,14778],{"class":164},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[95,14780,14781],{"class":97,"line":1656},[95,14782,14783],{"class":105},"    Circle c1;\n",[95,14785,14786],{"class":97,"line":1661},[95,14787,14788],{"class":164},"    \u002F\u002F给圆对象 的属性进行赋值\n",[95,14790,14791,14794,14796,14798],{"class":97,"line":1675},[95,14792,14793],{"class":105},"    c1.m_r",[95,14795,151],{"class":101},[95,14797,552],{"class":154},[95,14799,1272],{"class":105},[95,14801,14802,14804,14806,14809,14811,14814,14817,14819,14821],{"class":97,"line":1680},[95,14803,1533],{"class":105},[95,14805,1150],{"class":101},[95,14807,14808],{"class":210},"\"圆的周长\"",[95,14810,1150],{"class":101},[95,14812,14813],{"class":105},"c1.",[95,14815,14816],{"class":1945},"calculateZC",[95,14818,2409],{"class":105},[95,14820,1150],{"class":101},[95,14822,1173],{"class":105},[95,14824,14825],{"class":97,"line":1709},[95,14826,1547],{"class":105},[10,14828,14829],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[86,14831,14833],{"className":88,"code":14832,"language":90,"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",[92,14834,14835,14841,14851,14857,14863,14867,14871,14876,14883,14888,14906,14910,14920,14924,14929,14945,14949,14959,14963,14968,14976,14980,15012,15016,15020,15028,15032,15037,15042,15056,15070,15079],{"__ignoreMap":14},[95,14836,14837,14839],{"class":97,"line":98},[95,14838,1931],{"class":101},[95,14840,1934],{"class":210},[95,14842,14843,14845,14847,14849],{"class":97,"line":15},[95,14844,1939],{"class":101},[95,14846,1942],{"class":101},[95,14848,1946],{"class":1945},[95,14850,1272],{"class":105},[95,14852,14853,14855],{"class":97,"line":1161},[95,14854,1931],{"class":101},[95,14856,7732],{"class":210},[95,14858,14859,14861],{"class":97,"line":1176},[95,14860,14677],{"class":101},[95,14862,7745],{"class":1945},[95,14864,14865],{"class":97,"line":1182},[95,14866,1528],{"class":105},[95,14868,14869],{"class":97,"line":1196},[95,14870,14699],{"class":101},[95,14872,14873],{"class":97,"line":1202},[95,14874,14875],{"class":105},"    string m_name;\n",[95,14877,14878,14880],{"class":97,"line":1293},[95,14879,1967],{"class":101},[95,14881,14882],{"class":105}," m_id;\n",[95,14884,14885],{"class":97,"line":1299},[95,14886,14887],{"class":164},"    \u002F\u002F赋值姓名\n",[95,14889,14890,14893,14896,14898,14901,14904],{"class":97,"line":1311},[95,14891,14892],{"class":101},"    void",[95,14894,14895],{"class":1945}," setName",[95,14897,106],{"class":105},[95,14899,14900],{"class":1945},"string",[95,14902,14903],{"class":5199}," name",[95,14905,112],{"class":105},[95,14907,14908],{"class":97,"line":1594},[95,14909,2012],{"class":105},[95,14911,14912,14915,14917],{"class":97,"line":1599},[95,14913,14914],{"class":105},"        m_name",[95,14916,151],{"class":101},[95,14918,14919],{"class":105},"name;\n",[95,14921,14922],{"class":97,"line":1605},[95,14923,2169],{"class":105},[95,14925,14926],{"class":97,"line":1610},[95,14927,14928],{"class":164},"    \u002F\u002F赋值学号\n",[95,14930,14931,14933,14936,14938,14940,14943],{"class":97,"line":1624},[95,14932,14892],{"class":101},[95,14934,14935],{"class":1945}," setId",[95,14937,106],{"class":105},[95,14939,109],{"class":101},[95,14941,14942],{"class":5199}," id",[95,14944,112],{"class":105},[95,14946,14947],{"class":97,"line":1629},[95,14948,2012],{"class":105},[95,14950,14951,14954,14956],{"class":97,"line":1635},[95,14952,14953],{"class":105},"        m_id",[95,14955,151],{"class":101},[95,14957,14958],{"class":105},"id;\n",[95,14960,14961],{"class":97,"line":1656},[95,14962,2169],{"class":105},[95,14964,14965],{"class":97,"line":1661},[95,14966,14967],{"class":164},"    \u002F\u002F打印学生信息\n",[95,14969,14970,14972,14974],{"class":97,"line":1675},[95,14971,14892],{"class":101},[95,14973,9598],{"class":1945},[95,14975,1958],{"class":105},[95,14977,14978],{"class":97,"line":1680},[95,14979,2012],{"class":105},[95,14981,14982,14984,14986,14989,14991,14994,14996,14998,15000,15003,15005,15008,15010],{"class":97,"line":1709},[95,14983,3433],{"class":105},[95,14985,1150],{"class":101},[95,14987,14988],{"class":210},"\"姓名：\"",[95,14990,1150],{"class":101},[95,14992,14993],{"class":105},"m_name",[95,14995,1150],{"class":101},[95,14997,4341],{"class":210},[95,14999,1150],{"class":101},[95,15001,15002],{"class":210},"\"学号：\"",[95,15004,1150],{"class":101},[95,15006,15007],{"class":105},"m_id",[95,15009,1150],{"class":101},[95,15011,1173],{"class":105},[95,15013,15014],{"class":97,"line":1714},[95,15015,2169],{"class":105},[95,15017,15018],{"class":97,"line":1731},[95,15019,3977],{"class":105},[95,15021,15022,15024,15026],{"class":97,"line":1736},[95,15023,109],{"class":101},[95,15025,1955],{"class":1945},[95,15027,1958],{"class":105},[95,15029,15030],{"class":97,"line":1741},[95,15031,1528],{"class":105},[95,15033,15034],{"class":97,"line":1746},[95,15035,15036],{"class":164},"    \u002F\u002F实例化\n",[95,15038,15039],{"class":97,"line":1760},[95,15040,15041],{"class":105},"    Student s1;\n",[95,15043,15044,15047,15050,15052,15054],{"class":97,"line":1765},[95,15045,15046],{"class":105},"    s1.",[95,15048,15049],{"class":1945},"setName",[95,15051,106],{"class":105},[95,15053,7899],{"class":210},[95,15055,2701],{"class":105},[95,15057,15058,15060,15063,15065,15068],{"class":97,"line":2559},[95,15059,15046],{"class":105},[95,15061,15062],{"class":1945},"setId",[95,15064,106],{"class":105},[95,15066,15067],{"class":154},"123456",[95,15069,2701],{"class":105},[95,15071,15072,15074,15077],{"class":97,"line":2573},[95,15073,15046],{"class":105},[95,15075,15076],{"class":1945},"printInfo",[95,15078,5619],{"class":105},[95,15080,15081],{"class":97,"line":2581},[95,15082,1547],{"class":105},[10,15084,15085],{},"类中的属性和行为统称为成员",[10,15087,15088],{},"属性：成员属性(成员变量)",[10,15090,15091],{},"方法：成员函数(成员方法)",[10,15093,15094],{},[255,15095,15096],{},"封装意义二：",[10,15098,15099],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[10,15101,15102],{},"访问权限有三种：",[49,15104,15105,15108,15111],{},[52,15106,15107],{},"public        公共权限",[52,15109,15110],{},"protected 保护权限",[52,15112,15113],{},"private      私有权限",[10,15115,15116],{},[255,15117,15118],{},"示例：",[86,15120,15122],{"className":9924,"code":15121,"language":9926,"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",[92,15123,15124,15129,15134,15139,15144,15148,15155,15159,15164,15168,15173,15177,15182,15187,15192,15196,15201,15206,15213,15217,15221,15229,15233,15244,15256,15268,15272,15276,15280,15288,15292,15297,15309,15317,15325,15329,15339,15343,15351],{"__ignoreMap":14},[95,15125,15126],{"class":97,"line":98},[95,15127,15128],{"class":164},"\u002F\u002F三种权限\n",[95,15130,15131],{"class":97,"line":15},[95,15132,15133],{"class":164},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[95,15135,15136],{"class":97,"line":1161},[95,15137,15138],{"class":164},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[95,15140,15141],{"class":97,"line":1176},[95,15142,15143],{"class":164},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[95,15145,15146],{"class":97,"line":1182},[95,15147,2382],{"emptyLinePlaceholder":21},[95,15149,15150,15152],{"class":97,"line":1196},[95,15151,14677],{"class":101},[95,15153,15154],{"class":1945}," Person\n",[95,15156,15157],{"class":97,"line":1202},[95,15158,1528],{"class":105},[95,15160,15161],{"class":97,"line":1293},[95,15162,15163],{"class":164},"    \u002F\u002F姓名  公共权限\n",[95,15165,15166],{"class":97,"line":1299},[95,15167,14699],{"class":101},[95,15169,15170],{"class":97,"line":1311},[95,15171,15172],{"class":105},"    string m_Name;\n",[95,15174,15175],{"class":97,"line":1594},[95,15176,2382],{"emptyLinePlaceholder":21},[95,15178,15179],{"class":97,"line":1599},[95,15180,15181],{"class":164},"    \u002F\u002F汽车  保护权限\n",[95,15183,15184],{"class":97,"line":1605},[95,15185,15186],{"class":101},"protected:\n",[95,15188,15189],{"class":97,"line":1610},[95,15190,15191],{"class":105},"    string m_Car;\n",[95,15193,15194],{"class":97,"line":1624},[95,15195,2382],{"emptyLinePlaceholder":21},[95,15197,15198],{"class":97,"line":1629},[95,15199,15200],{"class":164},"    \u002F\u002F银行卡密码  私有权限\n",[95,15202,15203],{"class":97,"line":1635},[95,15204,15205],{"class":101},"private:\n",[95,15207,15208,15210],{"class":97,"line":1656},[95,15209,1967],{"class":101},[95,15211,15212],{"class":105}," m_Password;\n",[95,15214,15215],{"class":97,"line":1661},[95,15216,2382],{"emptyLinePlaceholder":21},[95,15218,15219],{"class":97,"line":1675},[95,15220,14699],{"class":101},[95,15222,15223,15225,15227],{"class":97,"line":1680},[95,15224,14892],{"class":101},[95,15226,11368],{"class":1945},[95,15228,1958],{"class":105},[95,15230,15231],{"class":97,"line":1709},[95,15232,2012],{"class":105},[95,15234,15235,15238,15240,15242],{"class":97,"line":1714},[95,15236,15237],{"class":105},"        m_Name ",[95,15239,151],{"class":101},[95,15241,8921],{"class":210},[95,15243,1272],{"class":105},[95,15245,15246,15249,15251,15254],{"class":97,"line":1731},[95,15247,15248],{"class":105},"        m_Car ",[95,15250,151],{"class":101},[95,15252,15253],{"class":210}," \"拖拉机\"",[95,15255,1272],{"class":105},[95,15257,15258,15261,15263,15266],{"class":97,"line":1736},[95,15259,15260],{"class":105},"        m_Password ",[95,15262,151],{"class":101},[95,15264,15265],{"class":154}," 123456",[95,15267,1272],{"class":105},[95,15269,15270],{"class":97,"line":1741},[95,15271,2169],{"class":105},[95,15273,15274],{"class":97,"line":1746},[95,15275,3977],{"class":105},[95,15277,15278],{"class":97,"line":1760},[95,15279,2382],{"emptyLinePlaceholder":21},[95,15281,15282,15284,15286],{"class":97,"line":1765},[95,15283,109],{"class":101},[95,15285,1955],{"class":1945},[95,15287,10836],{"class":105},[95,15289,15290],{"class":97,"line":2559},[95,15291,2382],{"emptyLinePlaceholder":21},[95,15293,15294],{"class":97,"line":2573},[95,15295,15296],{"class":105},"    Person p;\n",[95,15298,15299,15302,15304,15307],{"class":97,"line":2581},[95,15300,15301],{"class":105},"    p.m_Name ",[95,15303,151],{"class":101},[95,15305,15306],{"class":210}," \"李四\"",[95,15308,1272],{"class":105},[95,15310,15311,15314],{"class":97,"line":2586},[95,15312,15313],{"class":164},"    \u002F\u002Fp.m_Car = \"奔驰\";",[95,15315,15316],{"class":164},"  \u002F\u002F保护权限类外访问不到\n",[95,15318,15319,15322],{"class":97,"line":2592},[95,15320,15321],{"class":164},"    \u002F\u002Fp.m_Password = 123;",[95,15323,15324],{"class":164}," \u002F\u002F私有权限类外访问不到\n",[95,15326,15327],{"class":97,"line":2598},[95,15328,2382],{"emptyLinePlaceholder":21},[95,15330,15331,15333,15335,15337],{"class":97,"line":2603},[95,15332,2285],{"class":1945},[95,15334,106],{"class":105},[95,15336,2290],{"class":210},[95,15338,2701],{"class":105},[95,15340,15341],{"class":97,"line":7931},[95,15342,2382],{"emptyLinePlaceholder":21},[95,15344,15345,15347,15349],{"class":97,"line":7955},[95,15346,4072],{"class":101},[95,15348,4075],{"class":154},[95,15350,1272],{"class":105},[95,15352,15353],{"class":97,"line":7960},[95,15354,1547],{"class":105},[66,15356,15358],{"id":15357},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[10,15360,15361,15362,15365,15366],{},"在C++中 struct和class唯一的",[255,15363,15364],{},"区别","就在于 ",[255,15367,15368],{},"默认的访问权限不同",[10,15370,15371],{},"区别：",[1113,15373,15374,15377],{},[52,15375,15376],{},"struct 默认权限为公共",[52,15378,15379],{},"class   默认权限为私有",[86,15381,15383],{"className":9924,"code":15382,"language":9926,"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",[92,15384,15385,15392,15396,15406,15410,15414,15421,15425,15435,15439,15443,15451,15455,15460,15474,15478,15483,15497,15501,15511,15515,15523],{"__ignoreMap":14},[95,15386,15387,15389],{"class":97,"line":98},[95,15388,14677],{"class":101},[95,15390,15391],{"class":1945}," C1\n",[95,15393,15394],{"class":97,"line":15},[95,15395,1528],{"class":105},[95,15397,15398,15400,15403],{"class":97,"line":1161},[95,15399,1967],{"class":101},[95,15401,15402],{"class":105},"  m_A;",[95,15404,15405],{"class":164}," \u002F\u002F默认是私有权限\n",[95,15407,15408],{"class":97,"line":1176},[95,15409,3977],{"class":105},[95,15411,15412],{"class":97,"line":1182},[95,15413,2382],{"emptyLinePlaceholder":21},[95,15415,15416,15418],{"class":97,"line":1196},[95,15417,7742],{"class":101},[95,15419,15420],{"class":1945}," C2\n",[95,15422,15423],{"class":97,"line":1202},[95,15424,1528],{"class":105},[95,15426,15427,15429,15432],{"class":97,"line":1293},[95,15428,1967],{"class":101},[95,15430,15431],{"class":105}," m_A;",[95,15433,15434],{"class":164},"  \u002F\u002F默认是公共权限\n",[95,15436,15437],{"class":97,"line":1299},[95,15438,3977],{"class":105},[95,15440,15441],{"class":97,"line":1311},[95,15442,2382],{"emptyLinePlaceholder":21},[95,15444,15445,15447,15449],{"class":97,"line":1594},[95,15446,109],{"class":101},[95,15448,1955],{"class":1945},[95,15450,10836],{"class":105},[95,15452,15453],{"class":97,"line":1599},[95,15454,2382],{"emptyLinePlaceholder":21},[95,15456,15457],{"class":97,"line":1605},[95,15458,15459],{"class":105},"    C1 c1;\n",[95,15461,15462,15465,15467,15469,15471],{"class":97,"line":1610},[95,15463,15464],{"class":105},"    c1.m_A ",[95,15466,151],{"class":101},[95,15468,2020],{"class":154},[95,15470,161],{"class":105},[95,15472,15473],{"class":164}," \u002F\u002F错误，访问权限是私有\n",[95,15475,15476],{"class":97,"line":1624},[95,15477,2382],{"emptyLinePlaceholder":21},[95,15479,15480],{"class":97,"line":1629},[95,15481,15482],{"class":105},"    C2 c2;\n",[95,15484,15485,15488,15490,15492,15494],{"class":97,"line":1635},[95,15486,15487],{"class":105},"    c2.m_A ",[95,15489,151],{"class":101},[95,15491,2020],{"class":154},[95,15493,161],{"class":105},[95,15495,15496],{"class":164}," \u002F\u002F正确，访问权限是公共\n",[95,15498,15499],{"class":97,"line":1656},[95,15500,2382],{"emptyLinePlaceholder":21},[95,15502,15503,15505,15507,15509],{"class":97,"line":1661},[95,15504,2285],{"class":1945},[95,15506,106],{"class":105},[95,15508,2290],{"class":210},[95,15510,2701],{"class":105},[95,15512,15513],{"class":97,"line":1675},[95,15514,2382],{"emptyLinePlaceholder":21},[95,15516,15517,15519,15521],{"class":97,"line":1680},[95,15518,4072],{"class":101},[95,15520,4075],{"class":154},[95,15522,1272],{"class":105},[95,15524,15525],{"class":97,"line":1709},[95,15526,1547],{"class":105},[66,15528,15530],{"id":15529},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[10,15532,15533],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[10,15535,15536],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[10,15538,15539],{},[255,15540,15118],{},[86,15542,15544],{"className":9924,"code":15543,"language":9926,"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",[92,15545,15546,15556,15560,15564,15569,15583,15592,15596,15606,15610,15617,15621,15625,15629,15634,15643,15650,15654,15659,15675,15698,15711,15718,15722,15731,15735,15739,15744,15760,15770,15774,15778,15782,15790,15794,15804,15808,15816,15820,15824,15832,15836,15840,15845,15858,15881,15885,15890,15903,15925,15929,15934,15948,15956,15960,15970,15974,15982],{"__ignoreMap":14},[95,15547,15548,15550,15553],{"class":97,"line":98},[95,15549,14677],{"class":101},[95,15551,15552],{"class":1945}," Person",[95,15554,15555],{"class":105}," {\n",[95,15557,15558],{"class":97,"line":15},[95,15559,14699],{"class":101},[95,15561,15562],{"class":97,"line":1161},[95,15563,2382],{"emptyLinePlaceholder":21},[95,15565,15566],{"class":97,"line":1176},[95,15567,15568],{"class":164},"    \u002F\u002F姓名设置可读可写\n",[95,15570,15571,15573,15575,15577,15579,15581],{"class":97,"line":1182},[95,15572,14892],{"class":101},[95,15574,14895],{"class":1945},[95,15576,106],{"class":105},[95,15578,14900],{"class":1945},[95,15580,14903],{"class":5199},[95,15582,12425],{"class":105},[95,15584,15585,15587,15589],{"class":97,"line":1196},[95,15586,15237],{"class":105},[95,15588,151],{"class":101},[95,15590,15591],{"class":105}," name;\n",[95,15593,15594],{"class":97,"line":1202},[95,15595,2169],{"class":105},[95,15597,15598,15601,15604],{"class":97,"line":1293},[95,15599,15600],{"class":1945},"    string",[95,15602,15603],{"class":1945}," getName",[95,15605,1958],{"class":105},[95,15607,15608],{"class":97,"line":1299},[95,15609,2012],{"class":105},[95,15611,15612,15614],{"class":97,"line":1311},[95,15613,14735],{"class":101},[95,15615,15616],{"class":105}," m_Name;\n",[95,15618,15619],{"class":97,"line":1594},[95,15620,2169],{"class":105},[95,15622,15623],{"class":97,"line":1599},[95,15624,2382],{"emptyLinePlaceholder":21},[95,15626,15627],{"class":97,"line":1605},[95,15628,2382],{"emptyLinePlaceholder":21},[95,15630,15631],{"class":97,"line":1610},[95,15632,15633],{"class":164},"    \u002F\u002F获取年龄 \n",[95,15635,15636,15638,15641],{"class":97,"line":1624},[95,15637,1967],{"class":101},[95,15639,15640],{"class":1945}," getAge",[95,15642,10836],{"class":105},[95,15644,15645,15647],{"class":97,"line":1629},[95,15646,14735],{"class":101},[95,15648,15649],{"class":105}," m_Age;\n",[95,15651,15652],{"class":97,"line":1635},[95,15653,2169],{"class":105},[95,15655,15656],{"class":97,"line":1656},[95,15657,15658],{"class":164},"    \u002F\u002F设置年龄\n",[95,15660,15661,15663,15666,15668,15670,15673],{"class":97,"line":1661},[95,15662,14892],{"class":101},[95,15664,15665],{"class":1945}," setAge",[95,15667,106],{"class":105},[95,15669,109],{"class":101},[95,15671,15672],{"class":5199}," age",[95,15674,12425],{"class":105},[95,15676,15677,15679,15682,15684,15686,15688,15691,15693,15696],{"class":97,"line":1675},[95,15678,2479],{"class":101},[95,15680,15681],{"class":105}," (age ",[95,15683,1016],{"class":101},[95,15685,4075],{"class":154},[95,15687,3237],{"class":101},[95,15689,15690],{"class":105}," age ",[95,15692,1066],{"class":101},[95,15694,15695],{"class":154}," 150",[95,15697,12425],{"class":105},[95,15699,15700,15702,15704,15707,15709],{"class":97,"line":1680},[95,15701,9702],{"class":105},[95,15703,1150],{"class":101},[95,15705,15706],{"class":210}," \"你个老妖精!\"",[95,15708,1426],{"class":101},[95,15710,8823],{"class":105},[95,15712,15713,15716],{"class":97,"line":1709},[95,15714,15715],{"class":101},"            return",[95,15717,1272],{"class":105},[95,15719,15720],{"class":97,"line":1714},[95,15721,2511],{"class":105},[95,15723,15724,15727,15729],{"class":97,"line":1731},[95,15725,15726],{"class":105},"        m_Age ",[95,15728,151],{"class":101},[95,15730,7780],{"class":105},[95,15732,15733],{"class":97,"line":1736},[95,15734,2169],{"class":105},[95,15736,15737],{"class":97,"line":1741},[95,15738,2382],{"emptyLinePlaceholder":21},[95,15740,15741],{"class":97,"line":1746},[95,15742,15743],{"class":164},"    \u002F\u002F情人设置为只写\n",[95,15745,15746,15748,15751,15753,15755,15758],{"class":97,"line":1760},[95,15747,14892],{"class":101},[95,15749,15750],{"class":1945}," setLover",[95,15752,106],{"class":105},[95,15754,14900],{"class":1945},[95,15756,15757],{"class":5199}," lover",[95,15759,12425],{"class":105},[95,15761,15762,15765,15767],{"class":97,"line":1765},[95,15763,15764],{"class":105},"        m_Lover ",[95,15766,151],{"class":101},[95,15768,15769],{"class":105}," lover;\n",[95,15771,15772],{"class":97,"line":2559},[95,15773,2169],{"class":105},[95,15775,15776],{"class":97,"line":2573},[95,15777,2382],{"emptyLinePlaceholder":21},[95,15779,15780],{"class":97,"line":2581},[95,15781,15205],{"class":101},[95,15783,15784,15787],{"class":97,"line":2586},[95,15785,15786],{"class":105},"    string m_Name;",[95,15788,15789],{"class":164}," \u002F\u002F可读可写  姓名\n",[95,15791,15792],{"class":97,"line":2592},[95,15793,13193],{"class":105},[95,15795,15796,15798,15801],{"class":97,"line":2598},[95,15797,1967],{"class":101},[95,15799,15800],{"class":105}," m_Age;",[95,15802,15803],{"class":164}," \u002F\u002F只读  年龄\n",[95,15805,15806],{"class":97,"line":2603},[95,15807,2382],{"emptyLinePlaceholder":21},[95,15809,15810,15813],{"class":97,"line":7931},[95,15811,15812],{"class":105},"    string m_Lover;",[95,15814,15815],{"class":164}," \u002F\u002F只写  情人\n",[95,15817,15818],{"class":97,"line":7955},[95,15819,3977],{"class":105},[95,15821,15822],{"class":97,"line":7960},[95,15823,2382],{"emptyLinePlaceholder":21},[95,15825,15826,15828,15830],{"class":97,"line":7966},[95,15827,109],{"class":101},[95,15829,1955],{"class":1945},[95,15831,10836],{"class":105},[95,15833,15834],{"class":97,"line":7993},[95,15835,2382],{"emptyLinePlaceholder":21},[95,15837,15838],{"class":97,"line":7998},[95,15839,15296],{"class":105},[95,15841,15842],{"class":97,"line":8004},[95,15843,15844],{"class":164},"    \u002F\u002F姓名设置\n",[95,15846,15847,15850,15852,15854,15856],{"class":97,"line":8016},[95,15848,15849],{"class":105},"    p.",[95,15851,15049],{"class":1945},[95,15853,106],{"class":105},[95,15855,7899],{"class":210},[95,15857,2701],{"class":105},[95,15859,15860,15862,15864,15867,15869,15872,15875,15877,15879],{"class":97,"line":8028},[95,15861,6512],{"class":105},[95,15863,1150],{"class":101},[95,15865,15866],{"class":210}," \"姓名： \"",[95,15868,1426],{"class":101},[95,15870,15871],{"class":105}," p.",[95,15873,15874],{"class":1945},"getName",[95,15876,13033],{"class":105},[95,15878,1150],{"class":101},[95,15880,8823],{"class":105},[95,15882,15883],{"class":97,"line":8040},[95,15884,2382],{"emptyLinePlaceholder":21},[95,15886,15887],{"class":97,"line":9699},[95,15888,15889],{"class":164},"    \u002F\u002F年龄设置\n",[95,15891,15892,15894,15897,15899,15901],{"class":97,"line":9724},[95,15893,15849],{"class":105},[95,15895,15896],{"class":1945},"setAge",[95,15898,106],{"class":105},[95,15900,762],{"class":154},[95,15902,2701],{"class":105},[95,15904,15905,15907,15909,15912,15914,15916,15919,15921,15923],{"class":97,"line":9747},[95,15906,6512],{"class":105},[95,15908,1150],{"class":101},[95,15910,15911],{"class":210}," \"年龄： \"",[95,15913,1426],{"class":101},[95,15915,15871],{"class":105},[95,15917,15918],{"class":1945},"getAge",[95,15920,13033],{"class":105},[95,15922,1150],{"class":101},[95,15924,8823],{"class":105},[95,15926,15927],{"class":97,"line":9771},[95,15928,2382],{"emptyLinePlaceholder":21},[95,15930,15931],{"class":97,"line":9776},[95,15932,15933],{"class":164},"    \u002F\u002F情人设置\n",[95,15935,15936,15938,15941,15943,15946],{"class":97,"line":9781},[95,15937,15849],{"class":105},[95,15939,15940],{"class":1945},"setLover",[95,15942,106],{"class":105},[95,15944,15945],{"class":210},"\"苍井\"",[95,15947,2701],{"class":105},[95,15949,15950,15953],{"class":97,"line":9786},[95,15951,15952],{"class":164},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[95,15954,15955],{"class":164},"  \u002F\u002F只写属性，不可以读取\n",[95,15957,15958],{"class":97,"line":9795},[95,15959,2382],{"emptyLinePlaceholder":21},[95,15961,15962,15964,15966,15968],{"class":97,"line":9800},[95,15963,2285],{"class":1945},[95,15965,106],{"class":105},[95,15967,2290],{"class":210},[95,15969,2701],{"class":105},[95,15971,15972],{"class":97,"line":9806},[95,15973,2382],{"emptyLinePlaceholder":21},[95,15975,15976,15978,15980],{"class":97,"line":9827},[95,15977,4072],{"class":101},[95,15979,4075],{"class":154},[95,15981,1272],{"class":105},[95,15983,15984],{"class":97,"line":9833},[95,15985,1547],{"class":105},[66,15987,15989],{"id":15988},"_814封装案例","8.1.4封装案例",[49,15991,15992],{},[52,15993,15994,15997],{},[255,15995,15996],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1113,15999,16000,16003],{},[52,16001,16002],{},"求出立方体的面积和体积",[52,16004,16005],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[86,16007,16009],{"className":88,"code":16008,"language":90,"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",[92,16010,16011,16017,16027,16034,16038,16042,16047,16077,16081,16091,16101,16111,16115,16124,16128,16164,16168,16177,16181,16197,16201,16206,16215,16219,16226,16230,16239,16243,16250,16254,16263,16267,16274,16278,16283,16300,16304,16350,16354,16363,16367,16371,16375,16384,16388,16392,16397,16401,16407,16413,16419,16423,16427,16432,16454,16458,16512,16516,16524,16528,16533,16538,16551,16558,16574,16585,16591,16614,16620,16643,16657,16677,16683,16694,16717,16739,16744,16750,16764,16777,16782,16796,16801,16807,16812,16826,16831,16836,16850,16862,16867,16880,16885,16890,16895,16908,16913],{"__ignoreMap":14},[95,16012,16013,16015],{"class":97,"line":98},[95,16014,1931],{"class":101},[95,16016,1934],{"class":210},[95,16018,16019,16021,16023,16025],{"class":97,"line":15},[95,16020,1939],{"class":101},[95,16022,1942],{"class":101},[95,16024,1946],{"class":1945},[95,16026,1272],{"class":105},[95,16028,16029,16031],{"class":97,"line":1161},[95,16030,14677],{"class":101},[95,16032,16033],{"class":1945}," Cube\n",[95,16035,16036],{"class":97,"line":1176},[95,16037,1528],{"class":105},[95,16039,16040],{"class":97,"line":1182},[95,16041,14699],{"class":101},[95,16043,16044],{"class":97,"line":1196},[95,16045,16046],{"class":164},"    \u002F\u002F输入长宽高\n",[95,16048,16049,16051,16054,16056,16058,16061,16063,16065,16068,16070,16072,16075],{"class":97,"line":1202},[95,16050,14892],{"class":101},[95,16052,16053],{"class":1945}," setLwh",[95,16055,106],{"class":105},[95,16057,109],{"class":101},[95,16059,16060],{"class":5199}," l",[95,16062,484],{"class":105},[95,16064,109],{"class":101},[95,16066,16067],{"class":5199}," w",[95,16069,484],{"class":105},[95,16071,109],{"class":101},[95,16073,16074],{"class":5199}," h",[95,16076,112],{"class":105},[95,16078,16079],{"class":97,"line":1293},[95,16080,2012],{"class":105},[95,16082,16083,16086,16088],{"class":97,"line":1299},[95,16084,16085],{"class":105},"        m_L",[95,16087,151],{"class":101},[95,16089,16090],{"class":105},"l;\n",[95,16092,16093,16096,16098],{"class":97,"line":1311},[95,16094,16095],{"class":105},"        m_W",[95,16097,151],{"class":101},[95,16099,16100],{"class":105},"w;\n",[95,16102,16103,16106,16108],{"class":97,"line":1594},[95,16104,16105],{"class":105},"        m_H",[95,16107,151],{"class":101},[95,16109,16110],{"class":105},"h;\n",[95,16112,16113],{"class":97,"line":1599},[95,16114,2169],{"class":105},[95,16116,16117,16119,16122],{"class":97,"line":1605},[95,16118,1967],{"class":101},[95,16120,16121],{"class":1945}," mianji",[95,16123,1958],{"class":105},[95,16125,16126],{"class":97,"line":1610},[95,16127,2012],{"class":105},[95,16129,16130,16132,16134,16136,16139,16141,16144,16146,16149,16151,16154,16156,16159,16161],{"class":97,"line":1624},[95,16131,14735],{"class":101},[95,16133,14738],{"class":154},[95,16135,561],{"class":101},[95,16137,16138],{"class":105},"(m_L",[95,16140,561],{"class":101},[95,16142,16143],{"class":105},"m_W ",[95,16145,587],{"class":101},[95,16147,16148],{"class":105}," m_L",[95,16150,561],{"class":101},[95,16152,16153],{"class":105},"m_H ",[95,16155,587],{"class":101},[95,16157,16158],{"class":105}," m_W",[95,16160,561],{"class":101},[95,16162,16163],{"class":105},"m_H);\n",[95,16165,16166],{"class":97,"line":1629},[95,16167,2169],{"class":105},[95,16169,16170,16172,16175],{"class":97,"line":1635},[95,16171,1967],{"class":101},[95,16173,16174],{"class":1945}," tiji",[95,16176,1958],{"class":105},[95,16178,16179],{"class":97,"line":1656},[95,16180,2012],{"class":105},[95,16182,16183,16185,16187,16189,16192,16194],{"class":97,"line":1661},[95,16184,14735],{"class":101},[95,16186,16148],{"class":105},[95,16188,561],{"class":101},[95,16190,16191],{"class":105},"m_W",[95,16193,561],{"class":101},[95,16195,16196],{"class":105},"m_H;\n",[95,16198,16199],{"class":97,"line":1675},[95,16200,2169],{"class":105},[95,16202,16203],{"class":97,"line":1680},[95,16204,16205],{"class":164},"    \u002F\u002F获取长宽高\n",[95,16207,16208,16210,16213],{"class":97,"line":1709},[95,16209,1967],{"class":101},[95,16211,16212],{"class":1945}," getLength",[95,16214,1958],{"class":105},[95,16216,16217],{"class":97,"line":1714},[95,16218,2012],{"class":105},[95,16220,16221,16223],{"class":97,"line":1731},[95,16222,14735],{"class":101},[95,16224,16225],{"class":105}," m_L;\n",[95,16227,16228],{"class":97,"line":1736},[95,16229,2169],{"class":105},[95,16231,16232,16234,16237],{"class":97,"line":1741},[95,16233,1967],{"class":101},[95,16235,16236],{"class":1945}," getWidth",[95,16238,1958],{"class":105},[95,16240,16241],{"class":97,"line":1746},[95,16242,2012],{"class":105},[95,16244,16245,16247],{"class":97,"line":1760},[95,16246,14735],{"class":101},[95,16248,16249],{"class":105}," m_W;\n",[95,16251,16252],{"class":97,"line":1765},[95,16253,2169],{"class":105},[95,16255,16256,16258,16261],{"class":97,"line":2559},[95,16257,1967],{"class":101},[95,16259,16260],{"class":1945}," getHeight",[95,16262,1958],{"class":105},[95,16264,16265],{"class":97,"line":2573},[95,16266,2012],{"class":105},[95,16268,16269,16271],{"class":97,"line":2581},[95,16270,14735],{"class":101},[95,16272,16273],{"class":105}," m_H;\n",[95,16275,16276],{"class":97,"line":2586},[95,16277,2169],{"class":105},[95,16279,16280],{"class":97,"line":2592},[95,16281,16282],{"class":164},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[95,16284,16285,16288,16291,16293,16296,16298],{"class":97,"line":2598},[95,16286,16287],{"class":101},"    bool",[95,16289,16290],{"class":1945}," isEqual",[95,16292,106],{"class":105},[95,16294,16295],{"class":1945},"Cube",[95,16297,2831],{"class":5199},[95,16299,112],{"class":105},[95,16301,16302],{"class":97,"line":2603},[95,16303,2012],{"class":105},[95,16305,16306,16308,16311,16314,16316,16318,16321,16323,16326,16329,16331,16333,16336,16338,16340,16343,16345,16347],{"class":97,"line":7931},[95,16307,2479],{"class":101},[95,16309,16310],{"class":105}," (c.",[95,16312,16313],{"class":1945},"getLength",[95,16315,13033],{"class":105},[95,16317,2931],{"class":101},[95,16319,16320],{"class":105}," m_L ",[95,16322,1697],{"class":101},[95,16324,16325],{"class":105}," c.",[95,16327,16328],{"class":1945},"getWidth",[95,16330,13033],{"class":105},[95,16332,2931],{"class":101},[95,16334,16335],{"class":105}," m_W ",[95,16337,1697],{"class":101},[95,16339,16325],{"class":105},[95,16341,16342],{"class":1945},"getHeight",[95,16344,13033],{"class":105},[95,16346,2931],{"class":101},[95,16348,16349],{"class":105}," m_H)\n",[95,16351,16352],{"class":97,"line":7955},[95,16353,2492],{"class":105},[95,16355,16356,16358,16361],{"class":97,"line":7960},[95,16357,15715],{"class":101},[95,16359,16360],{"class":154}," true",[95,16362,1272],{"class":105},[95,16364,16365],{"class":97,"line":7966},[95,16366,2511],{"class":105},[95,16368,16369],{"class":97,"line":7993},[95,16370,2552],{"class":101},[95,16372,16373],{"class":97,"line":7998},[95,16374,2492],{"class":105},[95,16376,16377,16379,16382],{"class":97,"line":8004},[95,16378,15715],{"class":101},[95,16380,16381],{"class":154}," false",[95,16383,1272],{"class":105},[95,16385,16386],{"class":97,"line":8016},[95,16387,2511],{"class":105},[95,16389,16390],{"class":97,"line":8028},[95,16391,2169],{"class":105},[95,16393,16394],{"class":97,"line":8040},[95,16395,16396],{"class":164},"    \u002F\u002F私有属性\n",[95,16398,16399],{"class":97,"line":9699},[95,16400,15205],{"class":101},[95,16402,16403,16405],{"class":97,"line":9724},[95,16404,1967],{"class":101},[95,16406,16225],{"class":105},[95,16408,16409,16411],{"class":97,"line":9747},[95,16410,1967],{"class":101},[95,16412,16249],{"class":105},[95,16414,16415,16417],{"class":97,"line":9771},[95,16416,1967],{"class":101},[95,16418,16273],{"class":105},[95,16420,16421],{"class":97,"line":9776},[95,16422,2382],{"emptyLinePlaceholder":21},[95,16424,16425],{"class":97,"line":9781},[95,16426,3977],{"class":105},[95,16428,16429],{"class":97,"line":9786},[95,16430,16431],{"class":164},"\u002F\u002F全局函数判断两个立方体是否相等\n",[95,16433,16434,16436,16438,16440,16442,16445,16447,16449,16452],{"class":97,"line":9795},[95,16435,1336],{"class":101},[95,16437,16290],{"class":1945},[95,16439,106],{"class":105},[95,16441,16295],{"class":1945},[95,16443,16444],{"class":5199}," c1",[95,16446,484],{"class":105},[95,16448,16295],{"class":1945},[95,16450,16451],{"class":5199}," c2",[95,16453,112],{"class":105},[95,16455,16456],{"class":97,"line":9800},[95,16457,1528],{"class":105},[95,16459,16460,16462,16465,16467,16469,16471,16474,16476,16479,16481,16483,16485,16487,16489,16491,16493,16495,16497,16499,16501,16503,16505,16507,16509],{"class":97,"line":9806},[95,16461,4072],{"class":101},[95,16463,16464],{"class":105}," (c1.",[95,16466,16313],{"class":1945},[95,16468,13033],{"class":105},[95,16470,2931],{"class":101},[95,16472,16473],{"class":105}," c2.",[95,16475,16313],{"class":1945},[95,16477,16478],{"class":105},"()) ",[95,16480,1697],{"class":101},[95,16482,16464],{"class":105},[95,16484,16328],{"class":1945},[95,16486,13033],{"class":105},[95,16488,2931],{"class":101},[95,16490,16473],{"class":105},[95,16492,16328],{"class":1945},[95,16494,16478],{"class":105},[95,16496,1697],{"class":101},[95,16498,16464],{"class":105},[95,16500,16342],{"class":1945},[95,16502,13033],{"class":105},[95,16504,2931],{"class":101},[95,16506,16473],{"class":105},[95,16508,16342],{"class":1945},[95,16510,16511],{"class":105},"());\n",[95,16513,16514],{"class":97,"line":9827},[95,16515,1547],{"class":105},[95,16517,16518,16520,16522],{"class":97,"line":9833},[95,16519,109],{"class":101},[95,16521,1955],{"class":1945},[95,16523,1958],{"class":105},[95,16525,16526],{"class":97,"line":9847},[95,16527,1528],{"class":105},[95,16529,16530],{"class":97,"line":9853},[95,16531,16532],{"class":105},"    Cube c1;\n",[95,16534,16535],{"class":97,"line":9880},[95,16536,16537],{"class":164},"    \u002F\u002F输入立方体的长宽高\n",[95,16539,16540,16542,16544,16547,16549],{"class":97,"line":9889},[95,16541,1533],{"class":105},[95,16543,1150],{"class":101},[95,16545,16546],{"class":210},"\"请输入第一个立方体的长、宽、高：\"",[95,16548,1150],{"class":101},[95,16550,1173],{"class":105},[95,16552,16553,16555],{"class":97,"line":9895},[95,16554,1967],{"class":101},[95,16556,16557],{"class":105}," l,w,h,l1,w1,h1;\n",[95,16559,16560,16562,16564,16566,16568,16570,16572],{"class":97,"line":9903},[95,16561,1994],{"class":105},[95,16563,1411],{"class":101},[95,16565,624],{"class":105},[95,16567,1411],{"class":101},[95,16569,901],{"class":105},[95,16571,1411],{"class":101},[95,16573,16110],{"class":105},[95,16575,16576,16579,16582],{"class":97,"line":9908},[95,16577,16578],{"class":105},"    c1.",[95,16580,16581],{"class":1945},"setLwh",[95,16583,16584],{"class":105},"(l,w,h);\n",[95,16586,16588],{"class":97,"line":16587},66,[95,16589,16590],{"class":164},"    \u002F\u002F面积\n",[95,16592,16594,16596,16598,16601,16603,16605,16608,16610,16612],{"class":97,"line":16593},67,[95,16595,1533],{"class":105},[95,16597,1150],{"class":101},[95,16599,16600],{"class":210},"\"立方体的表面积为：\"",[95,16602,1150],{"class":101},[95,16604,14813],{"class":105},[95,16606,16607],{"class":1945},"mianji",[95,16609,2409],{"class":105},[95,16611,1150],{"class":101},[95,16613,1173],{"class":105},[95,16615,16617],{"class":97,"line":16616},68,[95,16618,16619],{"class":164},"    \u002F\u002F体积\n",[95,16621,16623,16625,16627,16630,16632,16634,16637,16639,16641],{"class":97,"line":16622},69,[95,16624,1533],{"class":105},[95,16626,1150],{"class":101},[95,16628,16629],{"class":210},"\"立方体的体积为：\"",[95,16631,1150],{"class":101},[95,16633,14813],{"class":105},[95,16635,16636],{"class":1945},"tiji",[95,16638,2409],{"class":105},[95,16640,1150],{"class":101},[95,16642,1173],{"class":105},[95,16644,16646,16648,16650,16653,16655],{"class":97,"line":16645},70,[95,16647,1533],{"class":105},[95,16649,1150],{"class":101},[95,16651,16652],{"class":210},"\"请输入第二个立方体的长、宽、高：\"",[95,16654,1150],{"class":101},[95,16656,1173],{"class":105},[95,16658,16660,16662,16664,16667,16669,16672,16674],{"class":97,"line":16659},71,[95,16661,1994],{"class":105},[95,16663,1411],{"class":101},[95,16665,16666],{"class":105},"l1",[95,16668,1411],{"class":101},[95,16670,16671],{"class":105},"w1",[95,16673,1411],{"class":101},[95,16675,16676],{"class":105},"h1;\n",[95,16678,16680],{"class":97,"line":16679},72,[95,16681,16682],{"class":105},"    Cube c2;\n",[95,16684,16686,16689,16691],{"class":97,"line":16685},73,[95,16687,16688],{"class":105},"    c2.",[95,16690,16581],{"class":1945},[95,16692,16693],{"class":105},"(l1,w1,h1);\n",[95,16695,16697,16699,16701,16704,16706,16709,16711,16713,16715],{"class":97,"line":16696},74,[95,16698,1533],{"class":105},[95,16700,1150],{"class":101},[95,16702,16703],{"class":210},"\"第二个立方体的表面积为：\"",[95,16705,1150],{"class":101},[95,16707,16708],{"class":105},"c2.",[95,16710,16607],{"class":1945},[95,16712,2409],{"class":105},[95,16714,1150],{"class":101},[95,16716,1173],{"class":105},[95,16718,16720,16722,16724,16727,16729,16731,16733,16735,16737],{"class":97,"line":16719},75,[95,16721,1533],{"class":105},[95,16723,1150],{"class":101},[95,16725,16726],{"class":210},"\"第二个立方体的体积为：\"",[95,16728,1150],{"class":101},[95,16730,16708],{"class":105},[95,16732,16636],{"class":1945},[95,16734,2409],{"class":105},[95,16736,1150],{"class":101},[95,16738,1173],{"class":105},[95,16740,16742],{"class":97,"line":16741},76,[95,16743,2382],{"emptyLinePlaceholder":21},[95,16745,16747],{"class":97,"line":16746},77,[95,16748,16749],{"class":164},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[95,16751,16753,16755,16757,16760,16762],{"class":97,"line":16752},78,[95,16754,1533],{"class":105},[95,16756,1150],{"class":101},[95,16758,16759],{"class":210},"\"内部函数判断结果：\"",[95,16761,1150],{"class":101},[95,16763,1173],{"class":105},[95,16765,16767,16769,16771,16774],{"class":97,"line":16766},79,[95,16768,3083],{"class":101},[95,16770,16464],{"class":105},[95,16772,16773],{"class":1945},"isEqual",[95,16775,16776],{"class":105},"(c2))\n",[95,16778,16780],{"class":97,"line":16779},80,[95,16781,2012],{"class":105},[95,16783,16785,16787,16789,16792,16794],{"class":97,"line":16784},81,[95,16786,3433],{"class":105},[95,16788,1150],{"class":101},[95,16790,16791],{"class":210},"\"两个立方体相等\"",[95,16793,1150],{"class":101},[95,16795,1173],{"class":105},[95,16797,16799],{"class":97,"line":16798},82,[95,16800,2169],{"class":105},[95,16802,16804],{"class":97,"line":16803},83,[95,16805,16806],{"class":101},"    else\n",[95,16808,16810],{"class":97,"line":16809},84,[95,16811,2012],{"class":105},[95,16813,16815,16817,16819,16822,16824],{"class":97,"line":16814},85,[95,16816,3433],{"class":105},[95,16818,1150],{"class":101},[95,16820,16821],{"class":210},"\"两个立方体不相等\"",[95,16823,1150],{"class":101},[95,16825,1173],{"class":105},[95,16827,16829],{"class":97,"line":16828},86,[95,16830,2169],{"class":105},[95,16832,16834],{"class":97,"line":16833},87,[95,16835,2382],{"emptyLinePlaceholder":21},[95,16837,16839,16841,16843,16846,16848],{"class":97,"line":16838},88,[95,16840,1533],{"class":105},[95,16842,1150],{"class":101},[95,16844,16845],{"class":210},"\"全局函数判断结果：\"",[95,16847,1150],{"class":101},[95,16849,1173],{"class":105},[95,16851,16853,16855,16857,16859],{"class":97,"line":16852},89,[95,16854,3083],{"class":101},[95,16856,1640],{"class":105},[95,16858,16773],{"class":1945},[95,16860,16861],{"class":105},"(c1, c2))\n",[95,16863,16865],{"class":97,"line":16864},90,[95,16866,2012],{"class":105},[95,16868,16870,16872,16874,16876,16878],{"class":97,"line":16869},91,[95,16871,3433],{"class":105},[95,16873,1150],{"class":101},[95,16875,16791],{"class":210},[95,16877,1150],{"class":101},[95,16879,1173],{"class":105},[95,16881,16883],{"class":97,"line":16882},92,[95,16884,2169],{"class":105},[95,16886,16888],{"class":97,"line":16887},93,[95,16889,16806],{"class":101},[95,16891,16893],{"class":97,"line":16892},94,[95,16894,2012],{"class":105},[95,16896,16898,16900,16902,16904,16906],{"class":97,"line":16897},95,[95,16899,3433],{"class":105},[95,16901,1150],{"class":101},[95,16903,16821],{"class":210},[95,16905,1150],{"class":101},[95,16907,1173],{"class":105},[95,16909,16911],{"class":97,"line":16910},96,[95,16912,2169],{"class":105},[95,16914,16916],{"class":97,"line":16915},97,[95,16917,1547],{"class":105},[49,16919,16920],{"start":15},[52,16921,16922],{},[255,16923,16924],{},"练习案例2：点和圆的关系",[1113,16926,16927],{},[52,16928,16929],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[86,16931,16933],{"className":88,"code":16932,"language":90,"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",[92,16934,16935,16941,16951,16958,16965,16969,16973,16978,17012,17017,17033,17047,17051,17055,17062,17069,17073,17079,17083,17087,17091,17113,17136,17141,17155,17170,17174,17178,17184,17189,17194,17198,17224,17228,17258,17286,17314,17331,17335,17348,17352,17356,17360,17373,17377,17381,17389,17393,17397,17401,17406,17410,17421,17428,17437,17447,17458,17465,17478,17489,17499,17510,17517,17531,17536,17546,17554],{"__ignoreMap":14},[95,16936,16937,16939],{"class":97,"line":98},[95,16938,1931],{"class":101},[95,16940,1934],{"class":210},[95,16942,16943,16945,16947,16949],{"class":97,"line":15},[95,16944,1939],{"class":101},[95,16946,1942],{"class":101},[95,16948,1946],{"class":1945},[95,16950,1272],{"class":105},[95,16952,16953,16955],{"class":97,"line":1161},[95,16954,1931],{"class":101},[95,16956,16957],{"class":210},"\u003Ccmath>\n",[95,16959,16960,16962],{"class":97,"line":1176},[95,16961,14677],{"class":101},[95,16963,16964],{"class":1945}," Point\n",[95,16966,16967],{"class":97,"line":1182},[95,16968,1528],{"class":105},[95,16970,16971],{"class":97,"line":1196},[95,16972,14699],{"class":101},[95,16974,16975],{"class":97,"line":1202},[95,16976,16977],{"class":164},"    \u002F\u002F赋值\n",[95,16979,16980,16982,16985,16987,16989,16992,16994,16996,16999,17002,17004,17007,17009],{"class":97,"line":1293},[95,16981,14892],{"class":101},[95,16983,16984],{"class":1945}," setPoint",[95,16986,106],{"class":105},[95,16988,14020],{"class":101},[95,16990,16991],{"class":5199}," x",[95,16993,12418],{"class":105},[95,16995,14020],{"class":101},[95,16997,16998],{"class":5199}," y",[95,17000,17001],{"class":105},") { m_x ",[95,17003,151],{"class":101},[95,17005,17006],{"class":105}," x; m_y ",[95,17008,151],{"class":101},[95,17010,17011],{"class":105}," y; }\n",[95,17013,17014],{"class":97,"line":1299},[95,17015,17016],{"class":164},"    \u002F\u002F获取坐标\n",[95,17018,17019,17021,17024,17027,17030],{"class":97,"line":1311},[95,17020,14721],{"class":101},[95,17022,17023],{"class":1945}," getX",[95,17025,17026],{"class":105},"() { ",[95,17028,17029],{"class":101},"return",[95,17031,17032],{"class":105}," m_x; }\n",[95,17034,17035,17037,17040,17042,17044],{"class":97,"line":1594},[95,17036,14721],{"class":101},[95,17038,17039],{"class":1945}," getY",[95,17041,17026],{"class":105},[95,17043,17029],{"class":101},[95,17045,17046],{"class":105}," m_y; }\n",[95,17048,17049],{"class":97,"line":1599},[95,17050,2382],{"emptyLinePlaceholder":21},[95,17052,17053],{"class":97,"line":1605},[95,17054,15205],{"class":101},[95,17056,17057,17059],{"class":97,"line":1610},[95,17058,14721],{"class":101},[95,17060,17061],{"class":105}," m_x;\n",[95,17063,17064,17066],{"class":97,"line":1624},[95,17065,14721],{"class":101},[95,17067,17068],{"class":105}," m_y;\n",[95,17070,17071],{"class":97,"line":1629},[95,17072,3977],{"class":105},[95,17074,17075,17077],{"class":97,"line":1635},[95,17076,14677],{"class":101},[95,17078,14680],{"class":1945},[95,17080,17081],{"class":97,"line":1656},[95,17082,1528],{"class":105},[95,17084,17085],{"class":97,"line":1661},[95,17086,14699],{"class":101},[95,17088,17089],{"class":97,"line":1675},[95,17090,16977],{"class":164},[95,17092,17093,17095,17098,17100,17102,17105,17108,17110],{"class":97,"line":1680},[95,17094,14892],{"class":101},[95,17096,17097],{"class":1945}," setRadius",[95,17099,106],{"class":105},[95,17101,14020],{"class":101},[95,17103,17104],{"class":5199}," r",[95,17106,17107],{"class":105},") { m_r ",[95,17109,151],{"class":101},[95,17111,17112],{"class":105}," r; }\n",[95,17114,17115,17117,17120,17122,17125,17128,17131,17133],{"class":97,"line":1709},[95,17116,14892],{"class":101},[95,17118,17119],{"class":1945}," setCenter",[95,17121,106],{"class":105},[95,17123,17124],{"class":1945},"Point",[95,17126,17127],{"class":5199}," center",[95,17129,17130],{"class":105},") { m_center ",[95,17132,151],{"class":101},[95,17134,17135],{"class":105}," center; }\n",[95,17137,17138],{"class":97,"line":1714},[95,17139,17140],{"class":164},"    \u002F\u002F获取属性\n",[95,17142,17143,17145,17148,17150,17152],{"class":97,"line":1731},[95,17144,14721],{"class":101},[95,17146,17147],{"class":1945}," getRadius",[95,17149,17026],{"class":105},[95,17151,17029],{"class":101},[95,17153,17154],{"class":105}," m_r; }\n",[95,17156,17157,17160,17163,17165,17167],{"class":97,"line":1736},[95,17158,17159],{"class":1945},"    Point",[95,17161,17162],{"class":1945}," getCenter",[95,17164,17026],{"class":105},[95,17166,17029],{"class":101},[95,17168,17169],{"class":105}," m_center; }\n",[95,17171,17172],{"class":97,"line":1741},[95,17173,2382],{"emptyLinePlaceholder":21},[95,17175,17176],{"class":97,"line":1746},[95,17177,15205],{"class":101},[95,17179,17180,17182],{"class":97,"line":1760},[95,17181,14721],{"class":101},[95,17183,14711],{"class":105},[95,17185,17186],{"class":97,"line":1765},[95,17187,17188],{"class":164},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[95,17190,17191],{"class":97,"line":2559},[95,17192,17193],{"class":105},"    Point m_center;\n",[95,17195,17196],{"class":97,"line":2573},[95,17197,3977],{"class":105},[95,17199,17200,17202,17205,17207,17210,17212,17214,17216,17218,17220,17222],{"class":97,"line":2581},[95,17201,5347],{"class":101},[95,17203,17204],{"class":1945}," isInCircle",[95,17206,106],{"class":105},[95,17208,17209],{"class":1945},"Circle",[95,17211,10567],{"class":101},[95,17213,394],{"class":5199},[95,17215,484],{"class":105},[95,17217,17124],{"class":1945},[95,17219,10567],{"class":101},[95,17221,10],{"class":5199},[95,17223,112],{"class":105},[95,17225,17226],{"class":97,"line":2586},[95,17227,1528],{"class":105},[95,17229,17230,17232,17235,17237,17239,17242,17245,17248,17250,17252,17254,17256],{"class":97,"line":2592},[95,17231,14721],{"class":101},[95,17233,17234],{"class":105}," dx ",[95,17236,151],{"class":101},[95,17238,16325],{"class":105},[95,17240,17241],{"class":1945},"getCenter",[95,17243,17244],{"class":105},"().",[95,17246,17247],{"class":1945},"getX",[95,17249,13033],{"class":105},[95,17251,638],{"class":101},[95,17253,15871],{"class":105},[95,17255,17247],{"class":1945},[95,17257,5619],{"class":105},[95,17259,17260,17262,17265,17267,17269,17271,17273,17276,17278,17280,17282,17284],{"class":97,"line":2598},[95,17261,14721],{"class":101},[95,17263,17264],{"class":105}," dy ",[95,17266,151],{"class":101},[95,17268,16325],{"class":105},[95,17270,17241],{"class":1945},[95,17272,17244],{"class":105},[95,17274,17275],{"class":1945},"getY",[95,17277,13033],{"class":105},[95,17279,638],{"class":101},[95,17281,15871],{"class":105},[95,17283,17275],{"class":1945},[95,17285,5619],{"class":105},[95,17287,17288,17290,17293,17295,17298,17301,17303,17305,17307,17309,17311],{"class":97,"line":2603},[95,17289,14721],{"class":101},[95,17291,17292],{"class":105}," distance ",[95,17294,151],{"class":101},[95,17296,17297],{"class":1945}," sqrt",[95,17299,17300],{"class":105},"(dx ",[95,17302,561],{"class":101},[95,17304,17234],{"class":105},[95,17306,587],{"class":101},[95,17308,17264],{"class":105},[95,17310,561],{"class":101},[95,17312,17313],{"class":105}," dy);\n",[95,17315,17316,17318,17321,17323,17325,17328],{"class":97,"line":7931},[95,17317,3083],{"class":101},[95,17319,17320],{"class":105}," (distance ",[95,17322,1016],{"class":101},[95,17324,16325],{"class":105},[95,17326,17327],{"class":1945},"getRadius",[95,17329,17330],{"class":105},"())\n",[95,17332,17333],{"class":97,"line":7955},[95,17334,2012],{"class":105},[95,17336,17337,17339,17341,17344,17346],{"class":97,"line":7960},[95,17338,9652],{"class":105},[95,17340,1150],{"class":101},[95,17342,17343],{"class":210}," \"点在圆内\"",[95,17345,1426],{"class":101},[95,17347,8823],{"class":105},[95,17349,17350],{"class":97,"line":7966},[95,17351,2169],{"class":105},[95,17353,17354],{"class":97,"line":7993},[95,17355,16806],{"class":101},[95,17357,17358],{"class":97,"line":7998},[95,17359,2012],{"class":105},[95,17361,17362,17364,17366,17369,17371],{"class":97,"line":8004},[95,17363,9652],{"class":105},[95,17365,1150],{"class":101},[95,17367,17368],{"class":210}," \"点在圆外\"",[95,17370,1426],{"class":101},[95,17372,8823],{"class":105},[95,17374,17375],{"class":97,"line":8016},[95,17376,2169],{"class":105},[95,17378,17379],{"class":97,"line":8028},[95,17380,1547],{"class":105},[95,17382,17383,17385,17387],{"class":97,"line":8040},[95,17384,109],{"class":101},[95,17386,1955],{"class":1945},[95,17388,1958],{"class":105},[95,17390,17391],{"class":97,"line":9699},[95,17392,1528],{"class":105},[95,17394,17395],{"class":97,"line":9724},[95,17396,15036],{"class":164},[95,17398,17399],{"class":97,"line":9747},[95,17400,14783],{"class":105},[95,17402,17403],{"class":97,"line":9771},[95,17404,17405],{"class":105},"    Point p1;\n",[95,17407,17408],{"class":97,"line":9776},[95,17409,16977],{"class":164},[95,17411,17412,17414,17416,17419],{"class":97,"line":9781},[95,17413,1533],{"class":105},[95,17415,1150],{"class":101},[95,17417,17418],{"class":210},"\"请输入圆的半径：\"",[95,17420,1272],{"class":105},[95,17422,17423,17425],{"class":97,"line":9786},[95,17424,14721],{"class":101},[95,17426,17427],{"class":105}," r;\n",[95,17429,17430,17432,17434],{"class":97,"line":9795},[95,17431,1994],{"class":105},[95,17433,1411],{"class":101},[95,17435,17436],{"class":105},"r;\n",[95,17438,17439,17441,17444],{"class":97,"line":9800},[95,17440,16578],{"class":105},[95,17442,17443],{"class":1945},"setRadius",[95,17445,17446],{"class":105},"(r);\n",[95,17448,17449,17451,17453,17456],{"class":97,"line":9806},[95,17450,1533],{"class":105},[95,17452,1150],{"class":101},[95,17454,17455],{"class":210},"\"请输入圆心坐标：\"",[95,17457,1272],{"class":105},[95,17459,17460,17462],{"class":97,"line":9827},[95,17461,14721],{"class":101},[95,17463,17464],{"class":105}," x, y;\n",[95,17466,17467,17469,17471,17473,17475],{"class":97,"line":9833},[95,17468,1994],{"class":105},[95,17470,1411],{"class":101},[95,17472,926],{"class":105},[95,17474,1411],{"class":101},[95,17476,17477],{"class":105},"y;\n",[95,17479,17480,17483,17486],{"class":97,"line":9847},[95,17481,17482],{"class":105},"    p1.",[95,17484,17485],{"class":1945},"setPoint",[95,17487,17488],{"class":105},"(x, y);\n",[95,17490,17491,17493,17496],{"class":97,"line":9853},[95,17492,16578],{"class":105},[95,17494,17495],{"class":1945},"setCenter",[95,17497,17498],{"class":105},"(p1);\n",[95,17500,17501,17503,17505,17508],{"class":97,"line":9880},[95,17502,1533],{"class":105},[95,17504,1150],{"class":101},[95,17506,17507],{"class":210},"\"请输入测试点坐标：\"",[95,17509,1272],{"class":105},[95,17511,17512,17514],{"class":97,"line":9889},[95,17513,14721],{"class":101},[95,17515,17516],{"class":105}," x1, y1;\n",[95,17518,17519,17521,17523,17526,17528],{"class":97,"line":9895},[95,17520,1994],{"class":105},[95,17522,1411],{"class":101},[95,17524,17525],{"class":105},"x1",[95,17527,1411],{"class":101},[95,17529,17530],{"class":105},"y1;\n",[95,17532,17533],{"class":97,"line":9903},[95,17534,17535],{"class":105},"    Point p2;\n",[95,17537,17538,17541,17543],{"class":97,"line":9908},[95,17539,17540],{"class":105},"    p2.",[95,17542,17485],{"class":1945},[95,17544,17545],{"class":105},"(x1, y1);\n",[95,17547,17548,17551],{"class":97,"line":16587},[95,17549,17550],{"class":1945},"    isInCircle",[95,17552,17553],{"class":105},"(c1, p2);\n",[95,17555,17556],{"class":97,"line":16593},[95,17557,1547],{"class":105},[10,17559,17560],{},"在类中可以让另一个类作为本来的成员",[10,17562,17563],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[10,17565,17566],{},"创建point.h",[86,17568,17570],{"className":88,"code":17569,"language":90,"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",[92,17571,17572,17583,17589,17599,17605,17609,17614,17618,17622,17642,17646,17654,17662,17666,17670,17676,17682],{"__ignoreMap":14},[95,17573,17574,17577,17580],{"class":97,"line":98},[95,17575,17576],{"class":101},"#pragma",[95,17578,17579],{"class":1945}," once",[95,17581,17582],{"class":164}," \u002F\u002F防止头文件重复包含\n",[95,17584,17585,17587],{"class":97,"line":15},[95,17586,1931],{"class":101},[95,17588,1934],{"class":210},[95,17590,17591,17593,17595,17597],{"class":97,"line":1161},[95,17592,1939],{"class":101},[95,17594,1942],{"class":101},[95,17596,1946],{"class":1945},[95,17598,1272],{"class":105},[95,17600,17601,17603],{"class":97,"line":1176},[95,17602,14677],{"class":101},[95,17604,16964],{"class":1945},[95,17606,17607],{"class":97,"line":1182},[95,17608,1528],{"class":105},[95,17610,17611],{"class":97,"line":1196},[95,17612,17613],{"class":164},"\u002F\u002F做好声明与变量定义就可以\n",[95,17615,17616],{"class":97,"line":1202},[95,17617,14699],{"class":101},[95,17619,17620],{"class":97,"line":1293},[95,17621,16977],{"class":164},[95,17623,17624,17626,17628,17630,17632,17634,17636,17638,17640],{"class":97,"line":1299},[95,17625,14892],{"class":101},[95,17627,16984],{"class":1945},[95,17629,106],{"class":105},[95,17631,14020],{"class":101},[95,17633,16991],{"class":5199},[95,17635,12418],{"class":105},[95,17637,14020],{"class":101},[95,17639,16998],{"class":5199},[95,17641,2701],{"class":105},[95,17643,17644],{"class":97,"line":1311},[95,17645,17016],{"class":164},[95,17647,17648,17650,17652],{"class":97,"line":1594},[95,17649,14721],{"class":101},[95,17651,17023],{"class":1945},[95,17653,5619],{"class":105},[95,17655,17656,17658,17660],{"class":97,"line":1599},[95,17657,14721],{"class":101},[95,17659,17039],{"class":1945},[95,17661,5619],{"class":105},[95,17663,17664],{"class":97,"line":1605},[95,17665,2382],{"emptyLinePlaceholder":21},[95,17667,17668],{"class":97,"line":1610},[95,17669,15205],{"class":101},[95,17671,17672,17674],{"class":97,"line":1624},[95,17673,14721],{"class":101},[95,17675,17061],{"class":105},[95,17677,17678,17680],{"class":97,"line":1629},[95,17679,14721],{"class":101},[95,17681,17068],{"class":105},[95,17683,17684],{"class":97,"line":1635},[95,17685,3977],{"class":105},[10,17687,17688],{},"创建point.cpp",[86,17690,17692],{"className":88,"code":17691,"language":90,"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",[92,17693,17694,17701,17706,17740,17744,17760],{"__ignoreMap":14},[95,17695,17696,17698],{"class":97,"line":98},[95,17697,1931],{"class":101},[95,17699,17700],{"class":210},"\u003Cpoint.h>\n",[95,17702,17703],{"class":97,"line":15},[95,17704,17705],{"class":164},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[95,17707,17708,17710,17713,17716,17718,17720,17722,17724,17726,17728,17730,17732,17734,17736,17738],{"class":97,"line":1161},[95,17709,14892],{"class":101},[95,17711,17712],{"class":1945}," Point",[95,17714,17715],{"class":105},"::",[95,17717,17485],{"class":1945},[95,17719,106],{"class":105},[95,17721,14020],{"class":101},[95,17723,16991],{"class":5199},[95,17725,12418],{"class":105},[95,17727,14020],{"class":101},[95,17729,16998],{"class":5199},[95,17731,17001],{"class":105},[95,17733,151],{"class":101},[95,17735,17006],{"class":105},[95,17737,151],{"class":101},[95,17739,17011],{"class":105},[95,17741,17742],{"class":97,"line":1176},[95,17743,17016],{"class":164},[95,17745,17746,17748,17750,17752,17754,17756,17758],{"class":97,"line":1182},[95,17747,14721],{"class":101},[95,17749,17712],{"class":1945},[95,17751,17715],{"class":105},[95,17753,17247],{"class":1945},[95,17755,17026],{"class":105},[95,17757,17029],{"class":101},[95,17759,17032],{"class":105},[95,17761,17762,17764,17766,17768,17770,17772,17774],{"class":97,"line":1196},[95,17763,14721],{"class":101},[95,17765,17712],{"class":1945},[95,17767,17715],{"class":105},[95,17769,17275],{"class":1945},[95,17771,17026],{"class":105},[95,17773,17029],{"class":101},[95,17775,17046],{"class":105},[10,17777,17778],{},"创建circle.h",[86,17780,17782],{"className":88,"code":17781,"language":90,"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",[92,17783,17784,17791,17797,17807,17813,17819,17823,17827,17831,17845,17859,17863,17871,17879,17883,17887,17893,17897,17901],{"__ignoreMap":14},[95,17785,17786,17788],{"class":97,"line":98},[95,17787,17576],{"class":101},[95,17789,17790],{"class":1945}," once\n",[95,17792,17793,17795],{"class":97,"line":15},[95,17794,1931],{"class":101},[95,17796,1934],{"class":210},[95,17798,17799,17801,17803,17805],{"class":97,"line":1161},[95,17800,1939],{"class":101},[95,17802,1942],{"class":101},[95,17804,1946],{"class":1945},[95,17806,1272],{"class":105},[95,17808,17809,17811],{"class":97,"line":1176},[95,17810,1931],{"class":101},[95,17812,17700],{"class":210},[95,17814,17815,17817],{"class":97,"line":1182},[95,17816,14677],{"class":101},[95,17818,14680],{"class":1945},[95,17820,17821],{"class":97,"line":1196},[95,17822,1528],{"class":105},[95,17824,17825],{"class":97,"line":1202},[95,17826,14699],{"class":101},[95,17828,17829],{"class":97,"line":1293},[95,17830,16977],{"class":164},[95,17832,17833,17835,17837,17839,17841,17843],{"class":97,"line":1299},[95,17834,14892],{"class":101},[95,17836,17097],{"class":1945},[95,17838,106],{"class":105},[95,17840,14020],{"class":101},[95,17842,17104],{"class":5199},[95,17844,2701],{"class":105},[95,17846,17847,17849,17851,17853,17855,17857],{"class":97,"line":1311},[95,17848,14892],{"class":101},[95,17850,17119],{"class":1945},[95,17852,106],{"class":105},[95,17854,17124],{"class":1945},[95,17856,17127],{"class":5199},[95,17858,2701],{"class":105},[95,17860,17861],{"class":97,"line":1594},[95,17862,17140],{"class":164},[95,17864,17865,17867,17869],{"class":97,"line":1599},[95,17866,14721],{"class":101},[95,17868,17147],{"class":1945},[95,17870,5619],{"class":105},[95,17872,17873,17875,17877],{"class":97,"line":1605},[95,17874,17159],{"class":1945},[95,17876,17162],{"class":1945},[95,17878,5619],{"class":105},[95,17880,17881],{"class":97,"line":1610},[95,17882,2382],{"emptyLinePlaceholder":21},[95,17884,17885],{"class":97,"line":1624},[95,17886,15205],{"class":101},[95,17888,17889,17891],{"class":97,"line":1629},[95,17890,14721],{"class":101},[95,17892,14711],{"class":105},[95,17894,17895],{"class":97,"line":1635},[95,17896,17188],{"class":164},[95,17898,17899],{"class":97,"line":1656},[95,17900,17193],{"class":105},[95,17902,17903],{"class":97,"line":1661},[95,17904,3977],{"class":105},[10,17906,17907],{},"创建circle.cpp",[86,17909,17911],{"className":88,"code":17910,"language":90,"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",[92,17912,17913,17920,17943,17965,17970,17986],{"__ignoreMap":14},[95,17914,17915,17917],{"class":97,"line":98},[95,17916,1931],{"class":101},[95,17918,17919],{"class":210},"\u003Ccircle.h>\n",[95,17921,17922,17924,17927,17929,17931,17933,17935,17937,17939,17941],{"class":97,"line":15},[95,17923,5347],{"class":101},[95,17925,17926],{"class":1945}," Circle",[95,17928,17715],{"class":105},[95,17930,17443],{"class":1945},[95,17932,106],{"class":105},[95,17934,14020],{"class":101},[95,17936,17104],{"class":5199},[95,17938,17107],{"class":105},[95,17940,151],{"class":101},[95,17942,17112],{"class":105},[95,17944,17945,17947,17949,17951,17953,17955,17957,17959,17961,17963],{"class":97,"line":1161},[95,17946,5347],{"class":101},[95,17948,17926],{"class":1945},[95,17950,17715],{"class":105},[95,17952,17495],{"class":1945},[95,17954,106],{"class":105},[95,17956,17124],{"class":1945},[95,17958,17127],{"class":5199},[95,17960,17130],{"class":105},[95,17962,151],{"class":101},[95,17964,17135],{"class":105},[95,17966,17967],{"class":97,"line":1176},[95,17968,17969],{"class":164},"\u002F\u002F获取属性\n",[95,17971,17972,17974,17976,17978,17980,17982,17984],{"class":97,"line":1182},[95,17973,14020],{"class":101},[95,17975,17926],{"class":1945},[95,17977,17715],{"class":105},[95,17979,17327],{"class":1945},[95,17981,17026],{"class":105},[95,17983,17029],{"class":101},[95,17985,17154],{"class":105},[95,17987,17988,17990,17992,17994,17996,17998,18000],{"class":97,"line":1196},[95,17989,17124],{"class":1945},[95,17991,17926],{"class":1945},[95,17993,17715],{"class":105},[95,17995,17241],{"class":1945},[95,17997,17026],{"class":105},[95,17999,17029],{"class":101},[95,18001,17169],{"class":105},[10,18003,18004],{},"使用封装的类",[86,18006,18008],{"className":88,"code":18007,"language":90,"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",[92,18009,18010,18016,18026,18032,18038,18062,18066,18092,18118,18142,18156,18160,18172,18176,18180,18184,18196,18200,18204,18212,18216,18220,18224,18228,18232,18242,18248,18256,18264,18274,18280,18292,18300,18308,18318,18324,18336,18340,18348,18354],{"__ignoreMap":14},[95,18011,18012,18014],{"class":97,"line":98},[95,18013,1931],{"class":101},[95,18015,1934],{"class":210},[95,18017,18018,18020,18022,18024],{"class":97,"line":15},[95,18019,1939],{"class":101},[95,18021,1942],{"class":101},[95,18023,1946],{"class":1945},[95,18025,1272],{"class":105},[95,18027,18028,18030],{"class":97,"line":1161},[95,18029,1931],{"class":101},[95,18031,17919],{"class":210},[95,18033,18034,18036],{"class":97,"line":1176},[95,18035,1931],{"class":101},[95,18037,17700],{"class":210},[95,18039,18040,18042,18044,18046,18048,18050,18052,18054,18056,18058,18060],{"class":97,"line":1182},[95,18041,5347],{"class":101},[95,18043,17204],{"class":1945},[95,18045,106],{"class":105},[95,18047,17209],{"class":1945},[95,18049,10567],{"class":101},[95,18051,394],{"class":5199},[95,18053,484],{"class":105},[95,18055,17124],{"class":1945},[95,18057,10567],{"class":101},[95,18059,10],{"class":5199},[95,18061,112],{"class":105},[95,18063,18064],{"class":97,"line":1196},[95,18065,1528],{"class":105},[95,18067,18068,18070,18072,18074,18076,18078,18080,18082,18084,18086,18088,18090],{"class":97,"line":1202},[95,18069,14721],{"class":101},[95,18071,17234],{"class":105},[95,18073,151],{"class":101},[95,18075,16325],{"class":105},[95,18077,17241],{"class":1945},[95,18079,17244],{"class":105},[95,18081,17247],{"class":1945},[95,18083,13033],{"class":105},[95,18085,638],{"class":101},[95,18087,15871],{"class":105},[95,18089,17247],{"class":1945},[95,18091,5619],{"class":105},[95,18093,18094,18096,18098,18100,18102,18104,18106,18108,18110,18112,18114,18116],{"class":97,"line":1293},[95,18095,14721],{"class":101},[95,18097,17264],{"class":105},[95,18099,151],{"class":101},[95,18101,16325],{"class":105},[95,18103,17241],{"class":1945},[95,18105,17244],{"class":105},[95,18107,17275],{"class":1945},[95,18109,13033],{"class":105},[95,18111,638],{"class":101},[95,18113,15871],{"class":105},[95,18115,17275],{"class":1945},[95,18117,5619],{"class":105},[95,18119,18120,18122,18124,18126,18128,18130,18132,18134,18136,18138,18140],{"class":97,"line":1299},[95,18121,14721],{"class":101},[95,18123,17292],{"class":105},[95,18125,151],{"class":101},[95,18127,17297],{"class":1945},[95,18129,17300],{"class":105},[95,18131,561],{"class":101},[95,18133,17234],{"class":105},[95,18135,587],{"class":101},[95,18137,17264],{"class":105},[95,18139,561],{"class":101},[95,18141,17313],{"class":105},[95,18143,18144,18146,18148,18150,18152,18154],{"class":97,"line":1311},[95,18145,3083],{"class":101},[95,18147,17320],{"class":105},[95,18149,1016],{"class":101},[95,18151,16325],{"class":105},[95,18153,17327],{"class":1945},[95,18155,17330],{"class":105},[95,18157,18158],{"class":97,"line":1594},[95,18159,2012],{"class":105},[95,18161,18162,18164,18166,18168,18170],{"class":97,"line":1599},[95,18163,9652],{"class":105},[95,18165,1150],{"class":101},[95,18167,17343],{"class":210},[95,18169,1426],{"class":101},[95,18171,8823],{"class":105},[95,18173,18174],{"class":97,"line":1605},[95,18175,2169],{"class":105},[95,18177,18178],{"class":97,"line":1610},[95,18179,16806],{"class":101},[95,18181,18182],{"class":97,"line":1624},[95,18183,2012],{"class":105},[95,18185,18186,18188,18190,18192,18194],{"class":97,"line":1629},[95,18187,9652],{"class":105},[95,18189,1150],{"class":101},[95,18191,17368],{"class":210},[95,18193,1426],{"class":101},[95,18195,8823],{"class":105},[95,18197,18198],{"class":97,"line":1635},[95,18199,2169],{"class":105},[95,18201,18202],{"class":97,"line":1656},[95,18203,1547],{"class":105},[95,18205,18206,18208,18210],{"class":97,"line":1661},[95,18207,109],{"class":101},[95,18209,1955],{"class":1945},[95,18211,1958],{"class":105},[95,18213,18214],{"class":97,"line":1675},[95,18215,1528],{"class":105},[95,18217,18218],{"class":97,"line":1680},[95,18219,15036],{"class":164},[95,18221,18222],{"class":97,"line":1709},[95,18223,14783],{"class":105},[95,18225,18226],{"class":97,"line":1714},[95,18227,17405],{"class":105},[95,18229,18230],{"class":97,"line":1731},[95,18231,16977],{"class":164},[95,18233,18234,18236,18238,18240],{"class":97,"line":1736},[95,18235,1533],{"class":105},[95,18237,1150],{"class":101},[95,18239,17418],{"class":210},[95,18241,1272],{"class":105},[95,18243,18244,18246],{"class":97,"line":1741},[95,18245,14721],{"class":101},[95,18247,17427],{"class":105},[95,18249,18250,18252,18254],{"class":97,"line":1746},[95,18251,1994],{"class":105},[95,18253,1411],{"class":101},[95,18255,17436],{"class":105},[95,18257,18258,18260,18262],{"class":97,"line":1760},[95,18259,16578],{"class":105},[95,18261,17443],{"class":1945},[95,18263,17446],{"class":105},[95,18265,18266,18268,18270,18272],{"class":97,"line":1765},[95,18267,1533],{"class":105},[95,18269,1150],{"class":101},[95,18271,17455],{"class":210},[95,18273,1272],{"class":105},[95,18275,18276,18278],{"class":97,"line":2559},[95,18277,14721],{"class":101},[95,18279,17464],{"class":105},[95,18281,18282,18284,18286,18288,18290],{"class":97,"line":2573},[95,18283,1994],{"class":105},[95,18285,1411],{"class":101},[95,18287,926],{"class":105},[95,18289,1411],{"class":101},[95,18291,17477],{"class":105},[95,18293,18294,18296,18298],{"class":97,"line":2581},[95,18295,17482],{"class":105},[95,18297,17485],{"class":1945},[95,18299,17488],{"class":105},[95,18301,18302,18304,18306],{"class":97,"line":2586},[95,18303,16578],{"class":105},[95,18305,17495],{"class":1945},[95,18307,17498],{"class":105},[95,18309,18310,18312,18314,18316],{"class":97,"line":2592},[95,18311,1533],{"class":105},[95,18313,1150],{"class":101},[95,18315,17507],{"class":210},[95,18317,1272],{"class":105},[95,18319,18320,18322],{"class":97,"line":2598},[95,18321,14721],{"class":101},[95,18323,17516],{"class":105},[95,18325,18326,18328,18330,18332,18334],{"class":97,"line":2603},[95,18327,1994],{"class":105},[95,18329,1411],{"class":101},[95,18331,17525],{"class":105},[95,18333,1411],{"class":101},[95,18335,17530],{"class":105},[95,18337,18338],{"class":97,"line":7931},[95,18339,17535],{"class":105},[95,18341,18342,18344,18346],{"class":97,"line":7955},[95,18343,17540],{"class":105},[95,18345,17485],{"class":1945},[95,18347,17545],{"class":105},[95,18349,18350,18352],{"class":97,"line":7960},[95,18351,17550],{"class":1945},[95,18353,17553],{"class":105},[95,18355,18356],{"class":97,"line":7966},[95,18357,1547],{"class":105},[37,18359,18361],{"id":18360},"_82对象的初始化清理","8.2对象的初始化清理",[1113,18363,18364,18367],{},[52,18365,18366],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[52,18368,18369],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[66,18371,18373],{"id":18372},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[10,18375,18376,18377,18380],{},"对象的",[255,18378,18379],{},"初始化和清理","也是两个非常重要的安全问题",[10,18382,18383],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[10,18385,18386],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[10,18388,18389,18390,18393,18394,18397],{},"c++利用了",[255,18391,18392],{},"构造函数","和",[255,18395,18396],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[10,18399,18400,18401],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[255,18402,18403],{},"我们不提供构造和析构，编译器会提供",[10,18405,18406],{},[255,18407,18408],{},"编译器提供的构造函数和析构函数是空实现。",[1113,18410,18411,18414],{},[52,18412,18413],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[52,18415,18416,18417,18420],{},"析构函数：主要作用在于对象",[255,18418,18419],{},"销毁前","系统自动调用，执行一些清理工作。",[10,18422,18423,18426],{},[255,18424,18425],{},"构造函数语法：",[92,18427,18428],{},"类名(){}",[49,18430,18431,18434,18437,18440,18443],{},[52,18432,18433],{},"构造函数，没有返回值也不写void",[52,18435,18436],{},"函数名称与类名相同",[52,18438,18439],{},"构造函数可以有参数，因此可以发生重载",[52,18441,18442],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[52,18444,18445,18446,535],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[92,18447,18448],{},"Person(){}",[10,18450,18451,13778,18454],{},[255,18452,18453],{},"析构函数语法：",[92,18455,18456],{},"~类名(){}",[49,18458,18459,18462,18465,18471],{},[52,18460,18461],{},"析构函数，没有返回值也不写void",[52,18463,18464],{},"函数名称与类名相同,在名称前加上符号  ~",[52,18466,18467,18468],{},"析构函数不可以有参数，因此",[255,18469,18470],{},"不可以发生重载",[52,18472,18473],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[86,18475,18477],{"className":88,"code":18476,"language":90,"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",[92,18478,18479,18485,18489,18493,18498,18505,18509,18522,18526,18531,18538,18542,18555,18559,18563,18567,18571,18579,18583,18591,18595,18599,18607,18611,18616,18620,18627,18631,18644,18648,18656],{"__ignoreMap":14},[95,18480,18481,18483],{"class":97,"line":98},[95,18482,14677],{"class":101},[95,18484,15154],{"class":1945},[95,18486,18487],{"class":97,"line":15},[95,18488,1528],{"class":105},[95,18490,18491],{"class":97,"line":1161},[95,18492,14699],{"class":101},[95,18494,18495],{"class":97,"line":1176},[95,18496,18497],{"class":164},"    \u002F\u002F构造函数\n",[95,18499,18500,18503],{"class":97,"line":1182},[95,18501,18502],{"class":1945},"    Person",[95,18504,1958],{"class":105},[95,18506,18507],{"class":97,"line":1196},[95,18508,2012],{"class":105},[95,18510,18511,18513,18515,18518,18520],{"class":97,"line":1202},[95,18512,9652],{"class":105},[95,18514,1150],{"class":101},[95,18516,18517],{"class":210}," \"Person的构造函数调用\"",[95,18519,1426],{"class":101},[95,18521,8823],{"class":105},[95,18523,18524],{"class":97,"line":1293},[95,18525,2169],{"class":105},[95,18527,18528],{"class":97,"line":1299},[95,18529,18530],{"class":164},"    \u002F\u002F析构函数\n",[95,18532,18533,18536],{"class":97,"line":1311},[95,18534,18535],{"class":1945},"    ~Person",[95,18537,1958],{"class":105},[95,18539,18540],{"class":97,"line":1594},[95,18541,2012],{"class":105},[95,18543,18544,18546,18548,18551,18553],{"class":97,"line":1599},[95,18545,9652],{"class":105},[95,18547,1150],{"class":101},[95,18549,18550],{"class":210}," \"Person的析构函数调用\"",[95,18552,1426],{"class":101},[95,18554,8823],{"class":105},[95,18556,18557],{"class":97,"line":1605},[95,18558,2169],{"class":105},[95,18560,18561],{"class":97,"line":1610},[95,18562,2382],{"emptyLinePlaceholder":21},[95,18564,18565],{"class":97,"line":1624},[95,18566,3977],{"class":105},[95,18568,18569],{"class":97,"line":1629},[95,18570,2382],{"emptyLinePlaceholder":21},[95,18572,18573,18575,18577],{"class":97,"line":1635},[95,18574,5347],{"class":101},[95,18576,5571],{"class":1945},[95,18578,1958],{"class":105},[95,18580,18581],{"class":97,"line":1656},[95,18582,1528],{"class":105},[95,18584,18585,18588],{"class":97,"line":1661},[95,18586,18587],{"class":105},"    Person p;",[95,18589,18590],{"class":164},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[95,18592,18593],{"class":97,"line":1675},[95,18594,1547],{"class":105},[95,18596,18597],{"class":97,"line":1680},[95,18598,2382],{"emptyLinePlaceholder":21},[95,18600,18601,18603,18605],{"class":97,"line":1709},[95,18602,109],{"class":101},[95,18604,1955],{"class":1945},[95,18606,10836],{"class":105},[95,18608,18609],{"class":97,"line":1714},[95,18610,13193],{"class":105},[95,18612,18613],{"class":97,"line":1731},[95,18614,18615],{"class":164},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[95,18617,18618],{"class":97,"line":1736},[95,18619,2382],{"emptyLinePlaceholder":21},[95,18621,18622,18624],{"class":97,"line":1741},[95,18623,18587],{"class":105},[95,18625,18626],{"class":164},"\u002F\u002F只有构造函数\n",[95,18628,18629],{"class":97,"line":1746},[95,18630,2382],{"emptyLinePlaceholder":21},[95,18632,18633,18635,18637,18639,18641],{"class":97,"line":1760},[95,18634,2285],{"class":1945},[95,18636,106],{"class":105},[95,18638,2290],{"class":210},[95,18640,5949],{"class":105},[95,18642,18643],{"class":164},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[95,18645,18646],{"class":97,"line":1765},[95,18647,2382],{"emptyLinePlaceholder":21},[95,18649,18650,18652,18654],{"class":97,"line":2559},[95,18651,4072],{"class":101},[95,18653,4075],{"class":154},[95,18655,1272],{"class":105},[95,18657,18658],{"class":97,"line":2573},[95,18659,1547],{"class":105},[10,18661,18662],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[66,18664,18666],{"id":18665},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[10,18668,18669],{},"两种分类方式：",[10,18671,18672],{},"​\t按参数分为： 有参构造和无参构造",[10,18674,18675],{},"​\t按类型分为： 普通构造和拷贝构造",[10,18677,18678],{},"三种调用方式：",[10,18680,18681],{},"​\t括号法",[10,18683,18684],{},"​\t显示法",[10,18686,18687],{},"​\t隐式转换法",[86,18689,18691],{"className":88,"code":18690,"language":90,"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",[92,18692,18693,18699,18709,18714,18719,18724,18729,18733,18741,18745,18749,18753,18759,18763,18776,18780,18792,18796,18805,18818,18822,18826,18832,18836,18849,18853,18858,18874,18878,18883,18892,18905,18909,18915,18919,18924,18932,18936,18941,18945,18953,18957,18962,18967,18972,18977,18982,18986,18991,18996,19001,19006,19010,19015,19020,19036,19048,19053,19057,19062,19067,19072,19076,19081,19095,19108,19112,19120,19124,19130,19136,19144],{"__ignoreMap":14},[95,18694,18695,18697],{"class":97,"line":98},[95,18696,1931],{"class":101},[95,18698,1934],{"class":210},[95,18700,18701,18703,18705,18707],{"class":97,"line":15},[95,18702,1939],{"class":101},[95,18704,1942],{"class":101},[95,18706,1946],{"class":1945},[95,18708,1272],{"class":105},[95,18710,18711],{"class":97,"line":1161},[95,18712,18713],{"class":164},"\u002F\u002F1.构造函数的分类及调用\n",[95,18715,18716],{"class":97,"line":1176},[95,18717,18718],{"class":164},"\u002F\u002F分类\n",[95,18720,18721],{"class":97,"line":1182},[95,18722,18723],{"class":164},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[95,18725,18726],{"class":97,"line":1196},[95,18727,18728],{"class":164},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[95,18730,18731],{"class":97,"line":1202},[95,18732,2382],{"emptyLinePlaceholder":21},[95,18734,18735,18737,18739],{"class":97,"line":1293},[95,18736,14677],{"class":101},[95,18738,15552],{"class":1945},[95,18740,2656],{"class":105},[95,18742,18743],{"class":97,"line":1299},[95,18744,1528],{"class":105},[95,18746,18747],{"class":97,"line":1311},[95,18748,14699],{"class":101},[95,18750,18751],{"class":97,"line":1594},[95,18752,18497],{"class":164},[95,18754,18755,18757],{"class":97,"line":1599},[95,18756,18502],{"class":1945},[95,18758,1958],{"class":105},[95,18760,18761],{"class":97,"line":1605},[95,18762,2012],{"class":105},[95,18764,18765,18767,18769,18772,18774],{"class":97,"line":1610},[95,18766,3433],{"class":105},[95,18768,1150],{"class":101},[95,18770,18771],{"class":210},"\"Person构造函数无参构造\"",[95,18773,1150],{"class":101},[95,18775,1173],{"class":105},[95,18777,18778],{"class":97,"line":1624},[95,18779,2169],{"class":105},[95,18781,18782,18784,18786,18788,18790],{"class":97,"line":1629},[95,18783,18502],{"class":1945},[95,18785,106],{"class":105},[95,18787,109],{"class":101},[95,18789,1380],{"class":5199},[95,18791,112],{"class":105},[95,18793,18794],{"class":97,"line":1635},[95,18795,2012],{"class":105},[95,18797,18798,18801,18803],{"class":97,"line":1656},[95,18799,18800],{"class":105},"        age",[95,18802,151],{"class":101},[95,18804,6180],{"class":105},[95,18806,18807,18809,18811,18814,18816],{"class":97,"line":1661},[95,18808,3433],{"class":105},[95,18810,1150],{"class":101},[95,18812,18813],{"class":210},"\"Person构造函数有参构造\"",[95,18815,1150],{"class":101},[95,18817,1173],{"class":105},[95,18819,18820],{"class":97,"line":1675},[95,18821,2169],{"class":105},[95,18823,18824],{"class":97,"line":1680},[95,18825,18530],{"class":164},[95,18827,18828,18830],{"class":97,"line":1709},[95,18829,18535],{"class":1945},[95,18831,1958],{"class":105},[95,18833,18834],{"class":97,"line":1714},[95,18835,2012],{"class":105},[95,18837,18838,18840,18842,18845,18847],{"class":97,"line":1731},[95,18839,3433],{"class":105},[95,18841,1150],{"class":101},[95,18843,18844],{"class":210},"\"Person析构函数被调用\"",[95,18846,1150],{"class":101},[95,18848,1173],{"class":105},[95,18850,18851],{"class":97,"line":1736},[95,18852,2169],{"class":105},[95,18854,18855],{"class":97,"line":1741},[95,18856,18857],{"class":164},"    \u002F\u002F拷贝构造函数\n",[95,18859,18860,18862,18864,18866,18868,18870,18872],{"class":97,"line":1746},[95,18861,18502],{"class":1945},[95,18863,106],{"class":105},[95,18865,6775],{"class":101},[95,18867,15552],{"class":1945},[95,18869,10567],{"class":101},[95,18871,10],{"class":5199},[95,18873,112],{"class":105},[95,18875,18876],{"class":97,"line":1760},[95,18877,2012],{"class":105},[95,18879,18880],{"class":97,"line":1765},[95,18881,18882],{"class":164},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[95,18884,18885,18887,18889],{"class":97,"line":2559},[95,18886,18800],{"class":105},[95,18888,151],{"class":101},[95,18890,18891],{"class":105},"p.age;\n",[95,18893,18894,18896,18898,18901,18903],{"class":97,"line":2573},[95,18895,3433],{"class":105},[95,18897,1150],{"class":101},[95,18899,18900],{"class":210},"\"Person拷贝构造函数被调用\"",[95,18902,1150],{"class":101},[95,18904,1173],{"class":105},[95,18906,18907],{"class":97,"line":2581},[95,18908,2169],{"class":105},[95,18910,18911,18913],{"class":97,"line":2586},[95,18912,1967],{"class":101},[95,18914,7780],{"class":105},[95,18916,18917],{"class":97,"line":2592},[95,18918,3977],{"class":105},[95,18920,18921],{"class":97,"line":2598},[95,18922,18923],{"class":164},"\u002F\u002F调用\n",[95,18925,18926,18928,18930],{"class":97,"line":2603},[95,18927,5347],{"class":101},[95,18929,5571],{"class":1945},[95,18931,1958],{"class":105},[95,18933,18934],{"class":97,"line":7931},[95,18935,1528],{"class":105},[95,18937,18938],{"class":97,"line":7955},[95,18939,18940],{"class":164},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[95,18942,18943],{"class":97,"line":7960},[95,18944,1547],{"class":105},[95,18946,18947,18949,18951],{"class":97,"line":7966},[95,18948,5347],{"class":101},[95,18950,5640],{"class":1945},[95,18952,1958],{"class":105},[95,18954,18955],{"class":97,"line":7993},[95,18956,1528],{"class":105},[95,18958,18959],{"class":97,"line":7998},[95,18960,18961],{"class":164},"    \u002F\u002F1.括号法\n",[95,18963,18964],{"class":97,"line":8004},[95,18965,18966],{"class":164},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[95,18968,18969],{"class":97,"line":8016},[95,18970,18971],{"class":164},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[95,18973,18974],{"class":97,"line":8028},[95,18975,18976],{"class":164},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[95,18978,18979],{"class":97,"line":8040},[95,18980,18981],{"class":164},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[95,18983,18984],{"class":97,"line":9699},[95,18985,2382],{"emptyLinePlaceholder":21},[95,18987,18988],{"class":97,"line":9724},[95,18989,18990],{"class":164},"    \u002F\u002F注意事项\n",[95,18992,18993],{"class":97,"line":9747},[95,18994,18995],{"class":164},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[95,18997,18998],{"class":97,"line":9771},[95,18999,19000],{"class":164},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[95,19002,19003],{"class":97,"line":9776},[95,19004,19005],{"class":164},"    \u002F\u002F Person p4();\n",[95,19007,19008],{"class":97,"line":9781},[95,19009,2382],{"emptyLinePlaceholder":21},[95,19011,19012],{"class":97,"line":9786},[95,19013,19014],{"class":164},"    \u002F\u002F2.显示法\n",[95,19016,19017],{"class":97,"line":9795},[95,19018,19019],{"class":105},"    Person p1;\n",[95,19021,19022,19025,19027,19030,19032,19034],{"class":97,"line":9800},[95,19023,19024],{"class":105},"    Person p2",[95,19026,151],{"class":101},[95,19028,19029],{"class":1945},"Person",[95,19031,106],{"class":105},[95,19033,552],{"class":154},[95,19035,2701],{"class":105},[95,19037,19038,19041,19043,19045],{"class":97,"line":9806},[95,19039,19040],{"class":105},"    Person p3",[95,19042,151],{"class":101},[95,19044,19029],{"class":1945},[95,19046,19047],{"class":105},"(p2);\n",[95,19049,19050],{"class":97,"line":9827},[95,19051,19052],{"class":164},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[95,19054,19055],{"class":97,"line":9833},[95,19056,2382],{"emptyLinePlaceholder":21},[95,19058,19059],{"class":97,"line":9847},[95,19060,19061],{"class":164},"    \u002F\u002F 注意事项2\n",[95,19063,19064],{"class":97,"line":9853},[95,19065,19066],{"class":164},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[95,19068,19069],{"class":97,"line":9880},[95,19070,19071],{"class":164},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[95,19073,19074],{"class":97,"line":9889},[95,19075,2382],{"emptyLinePlaceholder":21},[95,19077,19078],{"class":97,"line":9895},[95,19079,19080],{"class":164},"    \u002F\u002F3.隐士转换法\n",[95,19082,19083,19086,19088,19090,19092],{"class":97,"line":9903},[95,19084,19085],{"class":105},"    Person p4",[95,19087,151],{"class":101},[95,19089,552],{"class":154},[95,19091,161],{"class":105},[95,19093,19094],{"class":164},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[95,19096,19097,19100,19102,19105],{"class":97,"line":9908},[95,19098,19099],{"class":105},"    Person p5",[95,19101,151],{"class":101},[95,19103,19104],{"class":105},"p4;",[95,19106,19107],{"class":164}," \u002F\u002F 这里会调用拷贝构造函数\n",[95,19109,19110],{"class":97,"line":16587},[95,19111,1547],{"class":105},[95,19113,19114,19116,19118],{"class":97,"line":16593},[95,19115,109],{"class":101},[95,19117,1955],{"class":1945},[95,19119,1958],{"class":105},[95,19121,19122],{"class":97,"line":16616},[95,19123,1528],{"class":105},[95,19125,19126,19128],{"class":97,"line":16622},[95,19127,5616],{"class":1945},[95,19129,5619],{"class":105},[95,19131,19132,19134],{"class":97,"line":16645},[95,19133,5685],{"class":1945},[95,19135,5619],{"class":105},[95,19137,19138,19140,19142],{"class":97,"line":16659},[95,19139,4072],{"class":101},[95,19141,4075],{"class":154},[95,19143,1272],{"class":105},[95,19145,19146],{"class":97,"line":16679},[95,19147,1547],{"class":105},[10,19149,19150,19153],{},[255,19151,19152],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[66,19155,19157],{"id":19156},"_823拷贝构造函数","8.2.3拷贝构造函数",[10,19159,19160],{},"C++中拷贝构造函数调用时机通常有三种情况",[1113,19162,19163,19166,19169],{},[52,19164,19165],{},"使用一个已经创建完毕的对象来初始化一个新对象",[52,19167,19168],{},"值传递的方式给函数参数传值",[52,19170,19171],{},"以值方式返回局部对象",[86,19173,19175],{"className":88,"code":19174,"language":90,"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",[92,19176,19177,19183,19193,19197,19202,19206,19211,19216,19221,19227,19231,19235,19241,19245,19258,19262,19267,19279,19283,19291,19304,19308,19312,19328,19332,19341,19354,19358,19364,19368,19380,19384,19390,19394,19398,19406,19410,19423,19431,19449,19453,19458,19463,19478,19482,19495,19499,19507,19511,19515,19523,19527,19532,19541,19545,19549,19574,19584,19588,19596,19600,19611,19636,19640,19644,19648,19656,19660,19665,19670,19677,19682,19687,19692,19697,19701,19706,19710,19715,19719,19724,19729,19733,19737,19742,19747,19755],{"__ignoreMap":14},[95,19178,19179,19181],{"class":97,"line":98},[95,19180,1931],{"class":101},[95,19182,1934],{"class":210},[95,19184,19185,19187,19189,19191],{"class":97,"line":15},[95,19186,1939],{"class":101},[95,19188,1942],{"class":101},[95,19190,1946],{"class":1945},[95,19192,1272],{"class":105},[95,19194,19195],{"class":97,"line":1161},[95,19196,2382],{"emptyLinePlaceholder":21},[95,19198,19199],{"class":97,"line":1176},[95,19200,19201],{"class":164},"\u002F\u002F拷贝构造函数调用时机\n",[95,19203,19204],{"class":97,"line":1182},[95,19205,2382],{"emptyLinePlaceholder":21},[95,19207,19208],{"class":97,"line":1196},[95,19209,19210],{"class":164},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[95,19212,19213],{"class":97,"line":1202},[95,19214,19215],{"class":164},"\u002F\u002F2.值传递的方式给函数参数传值\n",[95,19217,19218],{"class":97,"line":1293},[95,19219,19220],{"class":164},"\u002F\u002F3.以值方式返回局部对象\n",[95,19222,19223,19225],{"class":97,"line":1299},[95,19224,14677],{"class":101},[95,19226,15154],{"class":1945},[95,19228,19229],{"class":97,"line":1311},[95,19230,1528],{"class":105},[95,19232,19233],{"class":97,"line":1594},[95,19234,14699],{"class":101},[95,19236,19237,19239],{"class":97,"line":1599},[95,19238,18502],{"class":1945},[95,19240,1958],{"class":105},[95,19242,19243],{"class":97,"line":1605},[95,19244,2012],{"class":105},[95,19246,19247,19249,19251,19254,19256],{"class":97,"line":1610},[95,19248,9652],{"class":105},[95,19250,1150],{"class":101},[95,19252,19253],{"class":210}," \"Person的默认构造函数调用\"",[95,19255,1426],{"class":101},[95,19257,8823],{"class":105},[95,19259,19260],{"class":97,"line":1624},[95,19261,2169],{"class":105},[95,19263,19264],{"class":97,"line":1629},[95,19265,19266],{"class":164},"    \u002F\u002F有参构造\n",[95,19268,19269,19271,19273,19275,19277],{"class":97,"line":1635},[95,19270,18502],{"class":1945},[95,19272,106],{"class":105},[95,19274,109],{"class":101},[95,19276,15672],{"class":5199},[95,19278,112],{"class":105},[95,19280,19281],{"class":97,"line":1656},[95,19282,2012],{"class":105},[95,19284,19285,19287,19289],{"class":97,"line":1661},[95,19286,15726],{"class":105},[95,19288,151],{"class":101},[95,19290,7780],{"class":105},[95,19292,19293,19295,19297,19300,19302],{"class":97,"line":1675},[95,19294,9652],{"class":105},[95,19296,1150],{"class":101},[95,19298,19299],{"class":210}," \"Person的有参构造函数调用\"",[95,19301,1426],{"class":101},[95,19303,8823],{"class":105},[95,19305,19306],{"class":97,"line":1680},[95,19307,2169],{"class":105},[95,19309,19310],{"class":97,"line":1709},[95,19311,18857],{"class":164},[95,19313,19314,19316,19318,19320,19322,19324,19326],{"class":97,"line":1714},[95,19315,18502],{"class":1945},[95,19317,106],{"class":105},[95,19319,6775],{"class":101},[95,19321,15552],{"class":1945},[95,19323,10567],{"class":101},[95,19325,10],{"class":5199},[95,19327,112],{"class":105},[95,19329,19330],{"class":97,"line":1731},[95,19331,2012],{"class":105},[95,19333,19334,19336,19338],{"class":97,"line":1736},[95,19335,15726],{"class":105},[95,19337,151],{"class":101},[95,19339,19340],{"class":105}," p.m_Age;\n",[95,19342,19343,19345,19347,19350,19352],{"class":97,"line":1741},[95,19344,9652],{"class":105},[95,19346,1150],{"class":101},[95,19348,19349],{"class":210}," \"Person的拷贝构造函数调用\"",[95,19351,1426],{"class":101},[95,19353,8823],{"class":105},[95,19355,19356],{"class":97,"line":1746},[95,19357,2169],{"class":105},[95,19359,19360,19362],{"class":97,"line":1760},[95,19361,18535],{"class":1945},[95,19363,1958],{"class":105},[95,19365,19366],{"class":97,"line":1765},[95,19367,2012],{"class":105},[95,19369,19370,19372,19374,19376,19378],{"class":97,"line":2559},[95,19371,9652],{"class":105},[95,19373,1150],{"class":101},[95,19375,18550],{"class":210},[95,19377,1426],{"class":101},[95,19379,8823],{"class":105},[95,19381,19382],{"class":97,"line":2573},[95,19383,2169],{"class":105},[95,19385,19386,19388],{"class":97,"line":2581},[95,19387,1967],{"class":101},[95,19389,15649],{"class":105},[95,19391,19392],{"class":97,"line":2586},[95,19393,3977],{"class":105},[95,19395,19396],{"class":97,"line":2592},[95,19397,19210],{"class":164},[95,19399,19400,19402,19404],{"class":97,"line":2598},[95,19401,5347],{"class":101},[95,19403,5571],{"class":1945},[95,19405,1958],{"class":105},[95,19407,19408],{"class":97,"line":2603},[95,19409,1528],{"class":105},[95,19411,19412,19415,19417,19419,19421],{"class":97,"line":7931},[95,19413,19414],{"class":105},"    Person ",[95,19416,7113],{"class":1945},[95,19418,106],{"class":105},[95,19420,806],{"class":154},[95,19422,2701],{"class":105},[95,19424,19425,19427,19429],{"class":97,"line":7955},[95,19426,19414],{"class":105},[95,19428,7016],{"class":1945},[95,19430,17498],{"class":105},[95,19432,19433,19435,19437,19440,19442,19445,19447],{"class":97,"line":7960},[95,19434,1533],{"class":105},[95,19436,1150],{"class":101},[95,19438,19439],{"class":210},"\"P2的年龄为：\"",[95,19441,1150],{"class":101},[95,19443,19444],{"class":105},"p2.m_Age",[95,19446,1150],{"class":101},[95,19448,1173],{"class":105},[95,19450,19451],{"class":97,"line":7966},[95,19452,1547],{"class":105},[95,19454,19455],{"class":97,"line":7993},[95,19456,19457],{"class":164},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[95,19459,19460],{"class":97,"line":7998},[95,19461,19462],{"class":164},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[95,19464,19465,19467,19470,19472,19474,19476],{"class":97,"line":8004},[95,19466,5347],{"class":101},[95,19468,19469],{"class":1945}," doWork",[95,19471,106],{"class":105},[95,19473,19029],{"class":1945},[95,19475,6808],{"class":5199},[95,19477,112],{"class":105},[95,19479,19480],{"class":97,"line":8016},[95,19481,1528],{"class":105},[95,19483,19484,19486,19488,19491,19493],{"class":97,"line":8028},[95,19485,6512],{"class":105},[95,19487,1150],{"class":101},[95,19489,19490],{"class":210}," \"doWork函数调用\"",[95,19492,1426],{"class":101},[95,19494,8823],{"class":105},[95,19496,19497],{"class":97,"line":8040},[95,19498,1547],{"class":105},[95,19500,19501,19503,19505],{"class":97,"line":9699},[95,19502,5347],{"class":101},[95,19504,5640],{"class":1945},[95,19506,1958],{"class":105},[95,19508,19509],{"class":97,"line":9724},[95,19510,1528],{"class":105},[95,19512,19513],{"class":97,"line":9747},[95,19514,15296],{"class":105},[95,19516,19517,19520],{"class":97,"line":9771},[95,19518,19519],{"class":1945},"    doWork",[95,19521,19522],{"class":105},"(p);\n",[95,19524,19525],{"class":97,"line":9776},[95,19526,1547],{"class":105},[95,19528,19529],{"class":97,"line":9781},[95,19530,19531],{"class":164},"\u002F\u002F 3.以值方式返回局部对象\n",[95,19533,19534,19536,19539],{"class":97,"line":9786},[95,19535,19029],{"class":1945},[95,19537,19538],{"class":1945}," doWork2",[95,19540,1958],{"class":105},[95,19542,19543],{"class":97,"line":9795},[95,19544,1528],{"class":105},[95,19546,19547],{"class":97,"line":9800},[95,19548,19019],{"class":105},[95,19550,19551,19553,19555,19557,19559,19561,19563,19565,19567,19569,19571],{"class":97,"line":9806},[95,19552,1533],{"class":105},[95,19554,1150],{"class":101},[95,19556,106],{"class":105},[95,19558,109],{"class":101},[95,19560,6501],{"class":101},[95,19562,535],{"class":105},[95,19564,459],{"class":101},[95,19566,7113],{"class":105},[95,19568,1150],{"class":101},[95,19570,1220],{"class":105},[95,19572,19573],{"class":164},"\u002F\u002F打印p1的地址\n",[95,19575,19576,19578,19581],{"class":97,"line":9827},[95,19577,4072],{"class":101},[95,19579,19580],{"class":105}," p1;",[95,19582,19583],{"class":164},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[95,19585,19586],{"class":97,"line":9833},[95,19587,1547],{"class":105},[95,19589,19590,19592,19594],{"class":97,"line":9847},[95,19591,5347],{"class":101},[95,19593,5712],{"class":1945},[95,19595,1958],{"class":105},[95,19597,19598],{"class":97,"line":9853},[95,19599,1528],{"class":105},[95,19601,19602,19605,19607,19609],{"class":97,"line":9880},[95,19603,19604],{"class":105},"    Person p ",[95,19606,151],{"class":101},[95,19608,19538],{"class":1945},[95,19610,5619],{"class":105},[95,19612,19613,19615,19617,19619,19621,19623,19625,19627,19629,19631,19633],{"class":97,"line":9889},[95,19614,1533],{"class":105},[95,19616,1150],{"class":101},[95,19618,106],{"class":105},[95,19620,109],{"class":101},[95,19622,6501],{"class":101},[95,19624,535],{"class":105},[95,19626,459],{"class":101},[95,19628,10],{"class":105},[95,19630,1150],{"class":101},[95,19632,1220],{"class":105},[95,19634,19635],{"class":164},"\u002F\u002F打印p的地址\n",[95,19637,19638],{"class":97,"line":9895},[95,19639,1547],{"class":105},[95,19641,19642],{"class":97,"line":9903},[95,19643,2382],{"emptyLinePlaceholder":21},[95,19645,19646],{"class":97,"line":9908},[95,19647,2382],{"emptyLinePlaceholder":21},[95,19649,19650,19652,19654],{"class":97,"line":16587},[95,19651,109],{"class":101},[95,19653,1955],{"class":1945},[95,19655,1958],{"class":105},[95,19657,19658],{"class":97,"line":16593},[95,19659,1528],{"class":105},[95,19661,19662],{"class":97,"line":16616},[95,19663,19664],{"class":164},"    \u002F\u002F test01();\n",[95,19666,19667],{"class":97,"line":16622},[95,19668,19669],{"class":164},"    \u002F\u002F test02();\n",[95,19671,19672,19675],{"class":97,"line":16645},[95,19673,19674],{"class":1945},"    test03",[95,19676,5619],{"class":105},[95,19678,19679],{"class":97,"line":16659},[95,19680,19681],{"class":164},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[95,19683,19684],{"class":97,"line":16679},[95,19685,19686],{"class":164},"\u002F\u002F 输出结果如下：\n",[95,19688,19689],{"class":97,"line":16685},[95,19690,19691],{"class":164},"\u002F\u002F Person的默认构造函数调用\n",[95,19693,19694],{"class":97,"line":16696},[95,19695,19696],{"class":164},"\u002F\u002F 0x7fffffffceec\n",[95,19698,19699],{"class":97,"line":16719},[95,19700,19696],{"class":164},[95,19702,19703],{"class":97,"line":16741},[95,19704,19705],{"class":164},"\u002F\u002F Person的析构函数调用\n",[95,19707,19708],{"class":97,"line":16746},[95,19709,2382],{"emptyLinePlaceholder":21},[95,19711,19712],{"class":97,"line":16752},[95,19713,19714],{"class":164},"\u002F\u002F 之前的输出结果如下：\n",[95,19716,19717],{"class":97,"line":16766},[95,19718,19691],{"class":164},[95,19720,19721],{"class":97,"line":16779},[95,19722,19723],{"class":164},"\u002F\u002F 地址\n",[95,19725,19726],{"class":97,"line":16784},[95,19727,19728],{"class":164},"\u002F\u002F Person的拷贝构造函数调用\n",[95,19730,19731],{"class":97,"line":16798},[95,19732,19705],{"class":164},[95,19734,19735],{"class":97,"line":16803},[95,19736,19723],{"class":164},[95,19738,19739],{"class":97,"line":16809},[95,19740,19741],{"class":164},"\u002F\u002F (这两次输出的地址也是不同的) \n",[95,19743,19744],{"class":97,"line":16814},[95,19745,19746],{"class":164},"\u002F\u002F Person的析构函数调用     \n",[95,19748,19749,19751,19753],{"class":97,"line":16828},[95,19750,4072],{"class":101},[95,19752,4075],{"class":154},[95,19754,1272],{"class":105},[95,19756,19757],{"class":97,"line":16833},[95,19758,1547],{"class":105},[10,19760,19761],{},"简化版理解",[86,19763,19765],{"className":88,"code":19764,"language":90,"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",[92,19766,19767,19775,19779,19785,19798,19809,19813,19825,19838,19846,19850,19866,19879,19888,19892,19897,19903,19916,19920,19924,19931,19935,19939,19944,19952,19956,19972,19985,19998,20002,20007,20015,20019,20023,20028,20033,20049,20057,20064,20070,20074,20078,20083,20091,20095,20099,20122,20129,20133,20137,20145,20149,20159,20181,20185,20189,20193,20201,20205,20210,20215,20221,20225,20235,20239,20247],{"__ignoreMap":14},[95,19768,19769,19771,19773],{"class":97,"line":98},[95,19770,14677],{"class":101},[95,19772,15552],{"class":1945},[95,19774,15555],{"class":105},[95,19776,19777],{"class":97,"line":15},[95,19778,14699],{"class":101},[95,19780,19781,19783],{"class":97,"line":1161},[95,19782,18502],{"class":1945},[95,19784,10836],{"class":105},[95,19786,19787,19789,19791,19794,19796],{"class":97,"line":1176},[95,19788,9652],{"class":105},[95,19790,1150],{"class":101},[95,19792,19793],{"class":210}," \"无参构造函数!\"",[95,19795,1426],{"class":101},[95,19797,8823],{"class":105},[95,19799,19800,19803,19805,19807],{"class":97,"line":1182},[95,19801,19802],{"class":105},"        mAge ",[95,19804,151],{"class":101},[95,19806,4075],{"class":154},[95,19808,1272],{"class":105},[95,19810,19811],{"class":97,"line":1196},[95,19812,2169],{"class":105},[95,19814,19815,19817,19819,19821,19823],{"class":97,"line":1202},[95,19816,18502],{"class":1945},[95,19818,106],{"class":105},[95,19820,109],{"class":101},[95,19822,15672],{"class":5199},[95,19824,12425],{"class":105},[95,19826,19827,19829,19831,19834,19836],{"class":97,"line":1293},[95,19828,9652],{"class":105},[95,19830,1150],{"class":101},[95,19832,19833],{"class":210}," \"有参构造函数!\"",[95,19835,1426],{"class":101},[95,19837,8823],{"class":105},[95,19839,19840,19842,19844],{"class":97,"line":1299},[95,19841,19802],{"class":105},[95,19843,151],{"class":101},[95,19845,7780],{"class":105},[95,19847,19848],{"class":97,"line":1311},[95,19849,2169],{"class":105},[95,19851,19852,19854,19856,19858,19860,19862,19864],{"class":97,"line":1594},[95,19853,18502],{"class":1945},[95,19855,106],{"class":105},[95,19857,6775],{"class":101},[95,19859,15552],{"class":1945},[95,19861,459],{"class":101},[95,19863,6808],{"class":5199},[95,19865,12425],{"class":105},[95,19867,19868,19870,19872,19875,19877],{"class":97,"line":1599},[95,19869,9652],{"class":105},[95,19871,1150],{"class":101},[95,19873,19874],{"class":210}," \"拷贝构造函数!\"",[95,19876,1426],{"class":101},[95,19878,8823],{"class":105},[95,19880,19881,19883,19885],{"class":97,"line":1605},[95,19882,19802],{"class":105},[95,19884,151],{"class":101},[95,19886,19887],{"class":105}," p.mAge;\n",[95,19889,19890],{"class":97,"line":1610},[95,19891,2169],{"class":105},[95,19893,19894],{"class":97,"line":1624},[95,19895,19896],{"class":164},"    \u002F\u002F析构函数在释放内存之前调用\n",[95,19898,19899,19901],{"class":97,"line":1629},[95,19900,18535],{"class":1945},[95,19902,10836],{"class":105},[95,19904,19905,19907,19909,19912,19914],{"class":97,"line":1635},[95,19906,9652],{"class":105},[95,19908,1150],{"class":101},[95,19910,19911],{"class":210}," \"析构函数!\"",[95,19913,1426],{"class":101},[95,19915,8823],{"class":105},[95,19917,19918],{"class":97,"line":1656},[95,19919,2169],{"class":105},[95,19921,19922],{"class":97,"line":1661},[95,19923,14699],{"class":101},[95,19925,19926,19928],{"class":97,"line":1675},[95,19927,1967],{"class":101},[95,19929,19930],{"class":105}," mAge;\n",[95,19932,19933],{"class":97,"line":1680},[95,19934,3977],{"class":105},[95,19936,19937],{"class":97,"line":1709},[95,19938,2382],{"emptyLinePlaceholder":21},[95,19940,19941],{"class":97,"line":1714},[95,19942,19943],{"class":164},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[95,19945,19946,19948,19950],{"class":97,"line":1731},[95,19947,5347],{"class":101},[95,19949,5571],{"class":1945},[95,19951,10836],{"class":105},[95,19953,19954],{"class":97,"line":1736},[95,19955,2382],{"emptyLinePlaceholder":21},[95,19957,19958,19960,19963,19965,19967,19969],{"class":97,"line":1741},[95,19959,19414],{"class":105},[95,19961,19962],{"class":1945},"man",[95,19964,106],{"class":105},[95,19966,417],{"class":154},[95,19968,5949],{"class":105},[95,19970,19971],{"class":164}," \u002F\u002Fp对象已经创建完毕\n",[95,19973,19974,19976,19979,19982],{"class":97,"line":1746},[95,19975,19414],{"class":105},[95,19977,19978],{"class":1945},"newman",[95,19980,19981],{"class":105},"(man);",[95,19983,19984],{"class":164}," \u002F\u002F调用拷贝构造函数\n",[95,19986,19987,19990,19992,19995],{"class":97,"line":1760},[95,19988,19989],{"class":105},"    Person newman2 ",[95,19991,151],{"class":101},[95,19993,19994],{"class":105}," man;",[95,19996,19997],{"class":164}," \u002F\u002F拷贝构造\n",[95,19999,20000],{"class":97,"line":1765},[95,20001,2382],{"emptyLinePlaceholder":21},[95,20003,20004],{"class":97,"line":2559},[95,20005,20006],{"class":164},"    \u002F\u002FPerson newman3;\n",[95,20008,20009,20012],{"class":97,"line":2573},[95,20010,20011],{"class":164},"    \u002F\u002Fnewman3 = man;",[95,20013,20014],{"class":164}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[95,20016,20017],{"class":97,"line":2581},[95,20018,1547],{"class":105},[95,20020,20021],{"class":97,"line":2586},[95,20022,2382],{"emptyLinePlaceholder":21},[95,20024,20025],{"class":97,"line":2592},[95,20026,20027],{"class":164},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[95,20029,20030],{"class":97,"line":2598},[95,20031,20032],{"class":164},"\u002F\u002F相当于Person p1 = p;\n",[95,20034,20035,20037,20039,20041,20043,20046],{"class":97,"line":2603},[95,20036,5347],{"class":101},[95,20038,19469],{"class":1945},[95,20040,106],{"class":105},[95,20042,19029],{"class":1945},[95,20044,20045],{"class":5199}," p1",[95,20047,20048],{"class":105},") {}\n",[95,20050,20051,20053,20055],{"class":97,"line":7931},[95,20052,5347],{"class":101},[95,20054,5640],{"class":1945},[95,20056,10836],{"class":105},[95,20058,20059,20061],{"class":97,"line":7955},[95,20060,18587],{"class":105},[95,20062,20063],{"class":164}," \u002F\u002F无参构造函数\n",[95,20065,20066,20068],{"class":97,"line":7960},[95,20067,19519],{"class":1945},[95,20069,19522],{"class":105},[95,20071,20072],{"class":97,"line":7966},[95,20073,1547],{"class":105},[95,20075,20076],{"class":97,"line":7993},[95,20077,2382],{"emptyLinePlaceholder":21},[95,20079,20080],{"class":97,"line":7998},[95,20081,20082],{"class":164},"\u002F\u002F3. 以值方式返回局部对象\n",[95,20084,20085,20087,20089],{"class":97,"line":8004},[95,20086,19029],{"class":1945},[95,20088,19538],{"class":1945},[95,20090,1958],{"class":105},[95,20092,20093],{"class":97,"line":8016},[95,20094,1528],{"class":105},[95,20096,20097],{"class":97,"line":8028},[95,20098,19019],{"class":105},[95,20100,20101,20103,20105,20107,20109,20111,20113,20115,20118,20120],{"class":97,"line":8040},[95,20102,6512],{"class":105},[95,20104,1150],{"class":101},[95,20106,1640],{"class":105},[95,20108,109],{"class":101},[95,20110,6501],{"class":101},[95,20112,535],{"class":105},[95,20114,459],{"class":101},[95,20116,20117],{"class":105},"p1 ",[95,20119,1150],{"class":101},[95,20121,8823],{"class":105},[95,20123,20124,20126],{"class":97,"line":9699},[95,20125,4072],{"class":101},[95,20127,20128],{"class":105}," p1;\n",[95,20130,20131],{"class":97,"line":9724},[95,20132,1547],{"class":105},[95,20134,20135],{"class":97,"line":9747},[95,20136,2382],{"emptyLinePlaceholder":21},[95,20138,20139,20141,20143],{"class":97,"line":9771},[95,20140,5347],{"class":101},[95,20142,5712],{"class":1945},[95,20144,1958],{"class":105},[95,20146,20147],{"class":97,"line":9776},[95,20148,1528],{"class":105},[95,20150,20151,20153,20155,20157],{"class":97,"line":9781},[95,20152,19604],{"class":105},[95,20154,151],{"class":101},[95,20156,19538],{"class":1945},[95,20158,5619],{"class":105},[95,20160,20161,20163,20165,20167,20169,20171,20173,20175,20177,20179],{"class":97,"line":9786},[95,20162,6512],{"class":105},[95,20164,1150],{"class":101},[95,20166,1640],{"class":105},[95,20168,109],{"class":101},[95,20170,6501],{"class":101},[95,20172,535],{"class":105},[95,20174,459],{"class":101},[95,20176,11431],{"class":105},[95,20178,1150],{"class":101},[95,20180,8823],{"class":105},[95,20182,20183],{"class":97,"line":9795},[95,20184,1547],{"class":105},[95,20186,20187],{"class":97,"line":9800},[95,20188,2382],{"emptyLinePlaceholder":21},[95,20190,20191],{"class":97,"line":9806},[95,20192,2382],{"emptyLinePlaceholder":21},[95,20194,20195,20197,20199],{"class":97,"line":9827},[95,20196,109],{"class":101},[95,20198,1955],{"class":1945},[95,20200,10836],{"class":105},[95,20202,20203],{"class":97,"line":9833},[95,20204,2382],{"emptyLinePlaceholder":21},[95,20206,20207],{"class":97,"line":9847},[95,20208,20209],{"class":164},"    \u002F\u002Ftest01();\n",[95,20211,20212],{"class":97,"line":9853},[95,20213,20214],{"class":164},"    \u002F\u002Ftest02();\n",[95,20216,20217,20219],{"class":97,"line":9880},[95,20218,19674],{"class":1945},[95,20220,5619],{"class":105},[95,20222,20223],{"class":97,"line":9889},[95,20224,2382],{"emptyLinePlaceholder":21},[95,20226,20227,20229,20231,20233],{"class":97,"line":9895},[95,20228,2285],{"class":1945},[95,20230,106],{"class":105},[95,20232,2290],{"class":210},[95,20234,2701],{"class":105},[95,20236,20237],{"class":97,"line":9903},[95,20238,2382],{"emptyLinePlaceholder":21},[95,20240,20241,20243,20245],{"class":97,"line":9908},[95,20242,4072],{"class":101},[95,20244,4075],{"class":154},[95,20246,1272],{"class":105},[95,20248,20249],{"class":97,"line":16587},[95,20250,1547],{"class":105},[66,20252,20254],{"id":20253},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[10,20256,20257],{},"默认情况下，c++编译器至少给一个类添加3个函数",[10,20259,20260],{},"1．默认构造函数(无参，函数体为空)",[10,20262,20263],{},"2．默认析构函数(无参，函数体为空)",[10,20265,20266],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[10,20268,20269],{},"构造函数调用规则如下：",[1113,20271,20272,20275],{},[52,20273,20274],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[52,20276,20277],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[86,20279,20281],{"className":88,"code":20280,"language":90,"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",[92,20282,20283,20291,20295,20300,20306,20318,20322,20327,20339,20348,20360,20364,20368,20384,20393,20405,20409,20413,20419,20431,20435,20439,20445,20449,20453,20461,20465,20477,20482,20490,20494,20512,20516,20520,20528,20532,20537,20545,20560,20573,20577,20582,20589,20605,20618,20622,20626,20634,20638,20644,20648,20658,20662,20670],{"__ignoreMap":14},[95,20284,20285,20287,20289],{"class":97,"line":98},[95,20286,14677],{"class":101},[95,20288,15552],{"class":1945},[95,20290,15555],{"class":105},[95,20292,20293],{"class":97,"line":15},[95,20294,14699],{"class":101},[95,20296,20297],{"class":97,"line":1161},[95,20298,20299],{"class":164},"    \u002F\u002F无参（默认）构造函数\n",[95,20301,20302,20304],{"class":97,"line":1176},[95,20303,18502],{"class":1945},[95,20305,10836],{"class":105},[95,20307,20308,20310,20312,20314,20316],{"class":97,"line":1182},[95,20309,9652],{"class":105},[95,20311,1150],{"class":101},[95,20313,19793],{"class":210},[95,20315,1426],{"class":101},[95,20317,8823],{"class":105},[95,20319,20320],{"class":97,"line":1196},[95,20321,2169],{"class":105},[95,20323,20324],{"class":97,"line":1202},[95,20325,20326],{"class":164},"    \u002F\u002F有参构造函数\n",[95,20328,20329,20331,20333,20335,20337],{"class":97,"line":1293},[95,20330,18502],{"class":1945},[95,20332,106],{"class":105},[95,20334,109],{"class":101},[95,20336,1380],{"class":5199},[95,20338,12425],{"class":105},[95,20340,20341,20344,20346],{"class":97,"line":1299},[95,20342,20343],{"class":105},"        age ",[95,20345,151],{"class":101},[95,20347,1414],{"class":105},[95,20349,20350,20352,20354,20356,20358],{"class":97,"line":1311},[95,20351,9652],{"class":105},[95,20353,1150],{"class":101},[95,20355,19833],{"class":210},[95,20357,1426],{"class":101},[95,20359,8823],{"class":105},[95,20361,20362],{"class":97,"line":1594},[95,20363,2169],{"class":105},[95,20365,20366],{"class":97,"line":1599},[95,20367,18857],{"class":164},[95,20369,20370,20372,20374,20376,20378,20380,20382],{"class":97,"line":1605},[95,20371,18502],{"class":1945},[95,20373,106],{"class":105},[95,20375,6775],{"class":101},[95,20377,15552],{"class":1945},[95,20379,459],{"class":101},[95,20381,6808],{"class":5199},[95,20383,12425],{"class":105},[95,20385,20386,20388,20390],{"class":97,"line":1610},[95,20387,20343],{"class":105},[95,20389,151],{"class":101},[95,20391,20392],{"class":105}," p.age;\n",[95,20394,20395,20397,20399,20401,20403],{"class":97,"line":1624},[95,20396,9652],{"class":105},[95,20398,1150],{"class":101},[95,20400,19874],{"class":210},[95,20402,1426],{"class":101},[95,20404,8823],{"class":105},[95,20406,20407],{"class":97,"line":1629},[95,20408,2169],{"class":105},[95,20410,20411],{"class":97,"line":1635},[95,20412,18530],{"class":164},[95,20414,20415,20417],{"class":97,"line":1656},[95,20416,18535],{"class":1945},[95,20418,10836],{"class":105},[95,20420,20421,20423,20425,20427,20429],{"class":97,"line":1661},[95,20422,9652],{"class":105},[95,20424,1150],{"class":101},[95,20426,19911],{"class":210},[95,20428,1426],{"class":101},[95,20430,8823],{"class":105},[95,20432,20433],{"class":97,"line":1675},[95,20434,2169],{"class":105},[95,20436,20437],{"class":97,"line":1680},[95,20438,14699],{"class":101},[95,20440,20441,20443],{"class":97,"line":1709},[95,20442,1967],{"class":101},[95,20444,7780],{"class":105},[95,20446,20447],{"class":97,"line":1714},[95,20448,3977],{"class":105},[95,20450,20451],{"class":97,"line":1731},[95,20452,2382],{"emptyLinePlaceholder":21},[95,20454,20455,20457,20459],{"class":97,"line":1736},[95,20456,5347],{"class":101},[95,20458,5571],{"class":1945},[95,20460,1958],{"class":105},[95,20462,20463],{"class":97,"line":1741},[95,20464,1528],{"class":105},[95,20466,20467,20469,20471,20473,20475],{"class":97,"line":1746},[95,20468,19414],{"class":105},[95,20470,7113],{"class":1945},[95,20472,106],{"class":105},[95,20474,756],{"class":154},[95,20476,2701],{"class":105},[95,20478,20479],{"class":97,"line":1760},[95,20480,20481],{"class":164},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[95,20483,20484,20486,20488],{"class":97,"line":1765},[95,20485,19414],{"class":105},[95,20487,7016],{"class":1945},[95,20489,17498],{"class":105},[95,20491,20492],{"class":97,"line":2559},[95,20493,2382],{"emptyLinePlaceholder":21},[95,20495,20496,20498,20500,20503,20505,20508,20510],{"class":97,"line":2573},[95,20497,6512],{"class":105},[95,20499,1150],{"class":101},[95,20501,20502],{"class":210}," \"p2的年龄为： \"",[95,20504,1426],{"class":101},[95,20506,20507],{"class":105}," p2.age ",[95,20509,1150],{"class":101},[95,20511,8823],{"class":105},[95,20513,20514],{"class":97,"line":2581},[95,20515,1547],{"class":105},[95,20517,20518],{"class":97,"line":2586},[95,20519,2382],{"emptyLinePlaceholder":21},[95,20521,20522,20524,20526],{"class":97,"line":2592},[95,20523,5347],{"class":101},[95,20525,5640],{"class":1945},[95,20527,1958],{"class":105},[95,20529,20530],{"class":97,"line":2598},[95,20531,1528],{"class":105},[95,20533,20534],{"class":97,"line":2603},[95,20535,20536],{"class":164},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[95,20538,20539,20542],{"class":97,"line":7931},[95,20540,20541],{"class":105},"    Person p1;",[95,20543,20544],{"class":164}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[95,20546,20547,20549,20551,20553,20555,20557],{"class":97,"line":7955},[95,20548,19414],{"class":105},[95,20550,7016],{"class":1945},[95,20552,106],{"class":105},[95,20554,552],{"class":154},[95,20556,5949],{"class":105},[95,20558,20559],{"class":164}," \u002F\u002F用户提供的有参\n",[95,20561,20562,20564,20567,20570],{"class":97,"line":7960},[95,20563,19414],{"class":105},[95,20565,20566],{"class":1945},"p3",[95,20568,20569],{"class":105},"(p2);",[95,20571,20572],{"class":164}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[95,20574,20575],{"class":97,"line":7966},[95,20576,2382],{"emptyLinePlaceholder":21},[95,20578,20579],{"class":97,"line":7993},[95,20580,20581],{"class":164},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[95,20583,20584,20587],{"class":97,"line":7998},[95,20585,20586],{"class":105},"    Person p4;",[95,20588,20544],{"class":164},[95,20590,20591,20593,20596,20598,20600,20602],{"class":97,"line":8004},[95,20592,19414],{"class":105},[95,20594,20595],{"class":1945},"p5",[95,20597,106],{"class":105},[95,20599,552],{"class":154},[95,20601,5949],{"class":105},[95,20603,20604],{"class":164}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[95,20606,20607,20609,20612,20615],{"class":97,"line":8016},[95,20608,19414],{"class":105},[95,20610,20611],{"class":1945},"p6",[95,20613,20614],{"class":105},"(p5);",[95,20616,20617],{"class":164}," \u002F\u002F用户自己提供拷贝构造\n",[95,20619,20620],{"class":97,"line":8028},[95,20621,1547],{"class":105},[95,20623,20624],{"class":97,"line":8040},[95,20625,2382],{"emptyLinePlaceholder":21},[95,20627,20628,20630,20632],{"class":97,"line":9699},[95,20629,109],{"class":101},[95,20631,1955],{"class":1945},[95,20633,10836],{"class":105},[95,20635,20636],{"class":97,"line":9724},[95,20637,2382],{"emptyLinePlaceholder":21},[95,20639,20640,20642],{"class":97,"line":9747},[95,20641,5616],{"class":1945},[95,20643,5619],{"class":105},[95,20645,20646],{"class":97,"line":9771},[95,20647,2382],{"emptyLinePlaceholder":21},[95,20649,20650,20652,20654,20656],{"class":97,"line":9776},[95,20651,2285],{"class":1945},[95,20653,106],{"class":105},[95,20655,2290],{"class":210},[95,20657,2701],{"class":105},[95,20659,20660],{"class":97,"line":9781},[95,20661,2382],{"emptyLinePlaceholder":21},[95,20663,20664,20666,20668],{"class":97,"line":9786},[95,20665,4072],{"class":101},[95,20667,4075],{"class":154},[95,20669,1272],{"class":105},[95,20671,20672],{"class":97,"line":9795},[95,20673,1547],{"class":105},[66,20675,20677],{"id":20676},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[10,20679,20680],{},"浅拷贝：简单的赋值拷贝操作",[10,20682,20683],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[86,20685,20687],{"className":88,"code":20686,"language":90,"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",[92,20688,20689,20695,20705,20711,20715,20719,20724,20730,20734,20747,20751,20755,20762,20766,20776,20791,20804,20808,20813,20818,20834,20838,20851,20856,20861,20866,20875,20880,20895,20899,20903,20907,20913,20917,20922,20937,20941,20952,20966,20970,20979,20983,20989,21001,21005,21013,21017,21034,21065,21073,21101,21105,21109,21117,21121,21127],{"__ignoreMap":14},[95,20690,20691,20693],{"class":97,"line":98},[95,20692,1931],{"class":101},[95,20694,1934],{"class":210},[95,20696,20697,20699,20701,20703],{"class":97,"line":15},[95,20698,1939],{"class":101},[95,20700,1942],{"class":101},[95,20702,1946],{"class":1945},[95,20704,1272],{"class":105},[95,20706,20707,20709],{"class":97,"line":1161},[95,20708,14677],{"class":101},[95,20710,15154],{"class":1945},[95,20712,20713],{"class":97,"line":1176},[95,20714,1528],{"class":105},[95,20716,20717],{"class":97,"line":1182},[95,20718,14699],{"class":101},[95,20720,20721],{"class":97,"line":1196},[95,20722,20723],{"class":164},"    \u002F\u002F默认构造函数\n",[95,20725,20726,20728],{"class":97,"line":1202},[95,20727,18502],{"class":1945},[95,20729,1958],{"class":105},[95,20731,20732],{"class":97,"line":1293},[95,20733,2012],{"class":105},[95,20735,20736,20738,20740,20743,20745],{"class":97,"line":1299},[95,20737,3433],{"class":105},[95,20739,1150],{"class":101},[95,20741,20742],{"class":210},"\"默认构造函数\"",[95,20744,1150],{"class":101},[95,20746,1173],{"class":105},[95,20748,20749],{"class":97,"line":1311},[95,20750,2169],{"class":105},[95,20752,20753],{"class":97,"line":1594},[95,20754,20326],{"class":164},[95,20756,20757,20759],{"class":97,"line":1599},[95,20758,18535],{"class":1945},[95,20760,20761],{"class":105},"(int age,int height)\n",[95,20763,20764],{"class":97,"line":1605},[95,20765,2012],{"class":105},[95,20767,20768,20771,20773],{"class":97,"line":1610},[95,20769,20770],{"class":105},"        m_Age",[95,20772,151],{"class":101},[95,20774,20775],{"class":105},"age;\n",[95,20777,20778,20781,20783,20785,20788],{"class":97,"line":1624},[95,20779,20780],{"class":105},"        m_Height",[95,20782,11700],{"class":101},[95,20784,2364],{"class":101},[95,20786,20787],{"class":105},"(height);",[95,20789,20790],{"class":164},"\u002F\u002F放到堆区\n",[95,20792,20793,20795,20797,20800,20802],{"class":97,"line":1629},[95,20794,3433],{"class":105},[95,20796,1150],{"class":101},[95,20798,20799],{"class":210},"\"有参构造函数\"",[95,20801,1150],{"class":101},[95,20803,1173],{"class":105},[95,20805,20806],{"class":97,"line":1635},[95,20807,2169],{"class":105},[95,20809,20810],{"class":97,"line":1656},[95,20811,20812],{"class":164},"    \u002F\u002F深拷贝解决上述问题\n",[95,20814,20815],{"class":97,"line":1661},[95,20816,20817],{"class":164},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[95,20819,20820,20822,20824,20826,20828,20830,20832],{"class":97,"line":1675},[95,20821,18502],{"class":1945},[95,20823,106],{"class":105},[95,20825,6775],{"class":101},[95,20827,15552],{"class":1945},[95,20829,10567],{"class":101},[95,20831,10],{"class":5199},[95,20833,112],{"class":105},[95,20835,20836],{"class":97,"line":1680},[95,20837,2012],{"class":105},[95,20839,20840,20842,20844,20847,20849],{"class":97,"line":1709},[95,20841,3433],{"class":105},[95,20843,1150],{"class":101},[95,20845,20846],{"class":210},"\"拷贝构造函数\"",[95,20848,1150],{"class":101},[95,20850,1173],{"class":105},[95,20852,20853],{"class":97,"line":1714},[95,20854,20855],{"class":164},"        \u002F\u002F编译器默认的写如下注释部分\n",[95,20857,20858],{"class":97,"line":1731},[95,20859,20860],{"class":164},"        \u002F\u002Fm_Age=p.m_Age;\n",[95,20862,20863],{"class":97,"line":1736},[95,20864,20865],{"class":164},"        \u002F\u002Fm_Height=p.m_Height;\n",[95,20867,20868,20870,20872],{"class":97,"line":1741},[95,20869,20770],{"class":105},[95,20871,151],{"class":101},[95,20873,20874],{"class":105},"p.m_Age;\n",[95,20876,20877],{"class":97,"line":1746},[95,20878,20879],{"class":164},"        \u002F\u002F深拷贝操作\n",[95,20881,20882,20884,20886,20888,20890,20892],{"class":97,"line":1760},[95,20883,20780],{"class":105},[95,20885,11700],{"class":101},[95,20887,2364],{"class":101},[95,20889,106],{"class":105},[95,20891,561],{"class":101},[95,20893,20894],{"class":105},"p.m_Height);\n",[95,20896,20897],{"class":97,"line":1765},[95,20898,2169],{"class":105},[95,20900,20901],{"class":97,"line":2559},[95,20902,2382],{"emptyLinePlaceholder":21},[95,20904,20905],{"class":97,"line":2573},[95,20906,18530],{"class":164},[95,20908,20909,20911],{"class":97,"line":2581},[95,20910,18535],{"class":1945},[95,20912,1958],{"class":105},[95,20914,20915],{"class":97,"line":2586},[95,20916,2012],{"class":105},[95,20918,20919],{"class":97,"line":2592},[95,20920,20921],{"class":164},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[95,20923,20924,20926,20929,20932,20935],{"class":97,"line":2598},[95,20925,2479],{"class":101},[95,20927,20928],{"class":105},"(m_Height ",[95,20930,20931],{"class":101},"!=",[95,20933,20934],{"class":154}," NULL",[95,20936,112],{"class":105},[95,20938,20939],{"class":97,"line":2603},[95,20940,2492],{"class":105},[95,20942,20943,20946,20949],{"class":97,"line":7931},[95,20944,20945],{"class":101},"            delete",[95,20947,20948],{"class":105}," m_Height;",[95,20950,20951],{"class":164}," \u002F\u002F释放堆区内存\n",[95,20953,20954,20957,20959,20961,20963],{"class":97,"line":7955},[95,20955,20956],{"class":105},"            m_Height",[95,20958,151],{"class":101},[95,20960,2374],{"class":154},[95,20962,161],{"class":105},[95,20964,20965],{"class":164}," \u002F\u002F防止野指针\n",[95,20967,20968],{"class":97,"line":7960},[95,20969,2511],{"class":105},[95,20971,20972,20974,20976],{"class":97,"line":7966},[95,20973,3433],{"class":105},[95,20975,1150],{"class":101},[95,20977,20978],{"class":210},"\"Person的析构函数调用\"\n",[95,20980,20981],{"class":97,"line":7993},[95,20982,2169],{"class":105},[95,20984,20985,20987],{"class":97,"line":7998},[95,20986,1967],{"class":101},[95,20988,15649],{"class":105},[95,20990,20991,20993,20995,20998],{"class":97,"line":8004},[95,20992,1967],{"class":101},[95,20994,6501],{"class":101},[95,20996,20997],{"class":105},"m_Height;",[95,20999,21000],{"class":164}," \u002F\u002F定义一个指针，指向身高\n",[95,21002,21003],{"class":97,"line":8016},[95,21004,3977],{"class":105},[95,21006,21007,21009,21011],{"class":97,"line":8028},[95,21008,5347],{"class":101},[95,21010,5571],{"class":1945},[95,21012,1958],{"class":105},[95,21014,21015],{"class":97,"line":8040},[95,21016,1528],{"class":105},[95,21018,21019,21021,21023,21025,21027,21029,21032],{"class":97,"line":9699},[95,21020,19414],{"class":105},[95,21022,7113],{"class":1945},[95,21024,106],{"class":105},[95,21026,756],{"class":154},[95,21028,484],{"class":105},[95,21030,21031],{"class":154},"160",[95,21033,2701],{"class":105},[95,21035,21036,21038,21040,21043,21045,21048,21050,21053,21055,21058,21060,21062],{"class":97,"line":9724},[95,21037,1533],{"class":105},[95,21039,1150],{"class":101},[95,21041,21042],{"class":210},"\"p1的年龄为:\"",[95,21044,1150],{"class":101},[95,21046,21047],{"class":105},"p1.m_Age",[95,21049,1150],{"class":101},[95,21051,21052],{"class":210},"\"身高为：\"",[95,21054,6402],{"class":101},[95,21056,21057],{"class":105},"p1.m_Height",[95,21059,1150],{"class":101},[95,21061,1220],{"class":105},[95,21063,21064],{"class":164},"  \u002F\u002F18\n",[95,21066,21067,21069,21071],{"class":97,"line":9747},[95,21068,19414],{"class":105},[95,21070,7016],{"class":1945},[95,21072,17498],{"class":105},[95,21074,21075,21077,21079,21082,21084,21086,21088,21090,21092,21095,21097,21099],{"class":97,"line":9771},[95,21076,1533],{"class":105},[95,21078,1150],{"class":101},[95,21080,21081],{"class":210},"\"p2的年龄为：\"",[95,21083,1150],{"class":101},[95,21085,19444],{"class":105},[95,21087,1150],{"class":101},[95,21089,21052],{"class":210},[95,21091,6402],{"class":101},[95,21093,21094],{"class":105},"p2.m_Height",[95,21096,1150],{"class":101},[95,21098,1220],{"class":105},[95,21100,21064],{"class":164},[95,21102,21103],{"class":97,"line":9776},[95,21104,13193],{"class":105},[95,21106,21107],{"class":97,"line":9781},[95,21108,1547],{"class":105},[95,21110,21111,21113,21115],{"class":97,"line":9786},[95,21112,109],{"class":101},[95,21114,1955],{"class":1945},[95,21116,1958],{"class":105},[95,21118,21119],{"class":97,"line":9795},[95,21120,1528],{"class":105},[95,21122,21123,21125],{"class":97,"line":9800},[95,21124,5616],{"class":1945},[95,21126,5619],{"class":105},[95,21128,21129],{"class":97,"line":9806},[95,21130,1547],{"class":105},[10,21132,21133],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[10,21135,21136],{},"浅拷贝带来的问题是堆区的内存重复释放",[10,21138,21139],{},[1444,21140],{"alt":14,"src":21141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[10,21143,21144],{},"浅拷贝问题要使用深拷贝来解决",[10,21146,21147],{},[1444,21148],{"alt":14,"src":21149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[10,21151,21152],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[66,21154,21156],{"id":21155},"_826初始化列表","8.2.6初始化列表",[10,21158,21159],{},"作用：初始化属性",[10,21161,5164],{},[86,21163,21166],{"className":21164,"code":21165,"language":5170},[5168],"构造函数():属性1(值1),属性2(值2).....{}\n",[92,21167,21165],{"__ignoreMap":14},[10,21169,21170],{},"例子",[86,21172,21174],{"className":88,"code":21173,"language":90,"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",[92,21175,21176,21182,21192,21198,21202,21207,21211,21216,21221,21226,21231,21236,21241,21245,21250,21255,21298,21307,21325,21343,21361,21365,21369,21376,21383,21390,21394,21398,21406,21410,21414,21434,21443,21447,21451,21461,21465,21473],{"__ignoreMap":14},[95,21177,21178,21180],{"class":97,"line":98},[95,21179,1931],{"class":101},[95,21181,1934],{"class":210},[95,21183,21184,21186,21188,21190],{"class":97,"line":15},[95,21185,1939],{"class":101},[95,21187,1942],{"class":101},[95,21189,1946],{"class":1945},[95,21191,1272],{"class":105},[95,21193,21194,21196],{"class":97,"line":1161},[95,21195,14677],{"class":101},[95,21197,15154],{"class":1945},[95,21199,21200],{"class":97,"line":1176},[95,21201,1528],{"class":105},[95,21203,21204],{"class":97,"line":1182},[95,21205,21206],{"class":101},"    public:\n",[95,21208,21209],{"class":97,"line":1196},[95,21210,2382],{"emptyLinePlaceholder":21},[95,21212,21213],{"class":97,"line":1202},[95,21214,21215],{"class":164},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[95,21217,21218],{"class":97,"line":1293},[95,21219,21220],{"class":164},"    \u002F\u002FPerson(int a, int b, int c) {\n",[95,21222,21223],{"class":97,"line":1299},[95,21224,21225],{"class":164},"    \u002F\u002F  m_A = a;\n",[95,21227,21228],{"class":97,"line":1311},[95,21229,21230],{"class":164},"    \u002F\u002F  m_B = b;\n",[95,21232,21233],{"class":97,"line":1594},[95,21234,21235],{"class":164},"    \u002F\u002F  m_C = c;\n",[95,21237,21238],{"class":97,"line":1599},[95,21239,21240],{"class":164},"    \u002F\u002F}\n",[95,21242,21243],{"class":97,"line":1605},[95,21244,2382],{"emptyLinePlaceholder":21},[95,21246,21247],{"class":97,"line":1610},[95,21248,21249],{"class":164},"    \u002F\u002F初始化列表方式初始化\n",[95,21251,21252],{"class":97,"line":1624},[95,21253,21254],{"class":164},"    \u002F\u002F使用有参构造函数\n",[95,21256,21257,21259,21261,21263,21265,21267,21269,21271,21273,21275,21277,21280,21283,21286,21289,21292,21295],{"class":97,"line":1629},[95,21258,18502],{"class":1945},[95,21260,106],{"class":105},[95,21262,109],{"class":101},[95,21264,1380],{"class":5199},[95,21266,12418],{"class":105},[95,21268,109],{"class":101},[95,21270,2815],{"class":5199},[95,21272,12418],{"class":105},[95,21274,109],{"class":101},[95,21276,2831],{"class":5199},[95,21278,21279],{"class":105},") :",[95,21281,21282],{"class":1945},"m_A",[95,21284,21285],{"class":105},"(a), ",[95,21287,21288],{"class":1945},"m_B",[95,21290,21291],{"class":105},"(b), ",[95,21293,21294],{"class":1945},"m_C",[95,21296,21297],{"class":105},"(c) {}\n",[95,21299,21300,21302,21305],{"class":97,"line":1635},[95,21301,14892],{"class":101},[95,21303,21304],{"class":1945}," PrintPerson",[95,21306,10836],{"class":105},[95,21308,21309,21311,21313,21316,21318,21321,21323],{"class":97,"line":1656},[95,21310,9652],{"class":105},[95,21312,1150],{"class":101},[95,21314,21315],{"class":210}," \"mA:\"",[95,21317,1426],{"class":101},[95,21319,21320],{"class":105}," m_A ",[95,21322,1150],{"class":101},[95,21324,8823],{"class":105},[95,21326,21327,21329,21331,21334,21336,21339,21341],{"class":97,"line":1661},[95,21328,9652],{"class":105},[95,21330,1150],{"class":101},[95,21332,21333],{"class":210}," \"mB:\"",[95,21335,1426],{"class":101},[95,21337,21338],{"class":105}," m_B ",[95,21340,1150],{"class":101},[95,21342,8823],{"class":105},[95,21344,21345,21347,21349,21352,21354,21357,21359],{"class":97,"line":1675},[95,21346,9652],{"class":105},[95,21348,1150],{"class":101},[95,21350,21351],{"class":210}," \"mC:\"",[95,21353,1426],{"class":101},[95,21355,21356],{"class":105}," m_C ",[95,21358,1150],{"class":101},[95,21360,8823],{"class":105},[95,21362,21363],{"class":97,"line":1680},[95,21364,2169],{"class":105},[95,21366,21367],{"class":97,"line":1709},[95,21368,15205],{"class":101},[95,21370,21371,21373],{"class":97,"line":1714},[95,21372,1967],{"class":101},[95,21374,21375],{"class":105}," m_A;\n",[95,21377,21378,21380],{"class":97,"line":1731},[95,21379,1967],{"class":101},[95,21381,21382],{"class":105}," m_B;\n",[95,21384,21385,21387],{"class":97,"line":1736},[95,21386,1967],{"class":101},[95,21388,21389],{"class":105}," m_C;\n",[95,21391,21392],{"class":97,"line":1741},[95,21393,3977],{"class":105},[95,21395,21396],{"class":97,"line":1746},[95,21397,2382],{"emptyLinePlaceholder":21},[95,21399,21400,21402,21404],{"class":97,"line":1760},[95,21401,109],{"class":101},[95,21403,1955],{"class":1945},[95,21405,5961],{"class":105},[95,21407,21408],{"class":97,"line":1765},[95,21409,1528],{"class":105},[95,21411,21412],{"class":97,"line":2559},[95,21413,2382],{"emptyLinePlaceholder":21},[95,21415,21416,21418,21420,21422,21424,21426,21428,21430,21432],{"class":97,"line":2573},[95,21417,19414],{"class":105},[95,21419,10],{"class":1945},[95,21421,106],{"class":105},[95,21423,323],{"class":154},[95,21425,12418],{"class":105},[95,21427,183],{"class":154},[95,21429,12418],{"class":105},[95,21431,177],{"class":154},[95,21433,2701],{"class":105},[95,21435,21436,21438,21441],{"class":97,"line":2581},[95,21437,15849],{"class":105},[95,21439,21440],{"class":1945},"PrintPerson",[95,21442,5619],{"class":105},[95,21444,21445],{"class":97,"line":2586},[95,21446,2382],{"emptyLinePlaceholder":21},[95,21448,21449],{"class":97,"line":2592},[95,21450,2382],{"emptyLinePlaceholder":21},[95,21452,21453,21455,21457,21459],{"class":97,"line":2598},[95,21454,2285],{"class":1945},[95,21456,106],{"class":105},[95,21458,2290],{"class":210},[95,21460,2701],{"class":105},[95,21462,21463],{"class":97,"line":2603},[95,21464,2382],{"emptyLinePlaceholder":21},[95,21466,21467,21469,21471],{"class":97,"line":7931},[95,21468,4072],{"class":101},[95,21470,4075],{"class":154},[95,21472,1272],{"class":105},[95,21474,21475],{"class":97,"line":7955},[95,21476,1547],{"class":105},[10,21478,21479,21480,21483,21484],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[255,21481,21482],{},"参数名就是定义的对象属性","，",[255,21485,21486],{},"属性后面的值为有参构造函数的形参",[86,21488,21490],{"className":88,"code":21489,"language":90,"meta":14,"style":14},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[92,21491,21492],{"__ignoreMap":14},[95,21493,21494,21496,21498,21500,21503,21505,21508,21510,21513,21515,21518,21520,21523,21525],{"class":97,"line":98},[95,21495,19029],{"class":1945},[95,21497,106],{"class":105},[95,21499,109],{"class":101},[95,21501,21502],{"class":105}," a.",[95,21504,109],{"class":101},[95,21506,21507],{"class":105}," b,",[95,21509,109],{"class":101},[95,21511,21512],{"class":105}," b):",[95,21514,21282],{"class":1945},[95,21516,21517],{"class":105},"(a),",[95,21519,21288],{"class":1945},[95,21521,21522],{"class":105},"(c),",[95,21524,21294],{"class":1945},[95,21526,21527],{"class":105},"(b) {}\n",[66,21529,21531],{"id":21530},"_827类对象作为类成员","8.2.7类对象作为类成员",[10,21533,21534],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[10,21536,14616],{},[86,21538,21540],{"className":88,"code":21539,"language":90,"meta":14,"style":14},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[92,21541,21542,21547,21552,21556,21561,21565],{"__ignoreMap":14},[95,21543,21544],{"class":97,"line":98},[95,21545,21546],{"class":105},"A{};\n",[95,21548,21549],{"class":97,"line":15},[95,21550,21551],{"class":105},"B\n",[95,21553,21554],{"class":97,"line":1161},[95,21555,1528],{"class":105},[95,21557,21558],{"class":97,"line":1176},[95,21559,21560],{"class":105},"    A a;\n",[95,21562,21563],{"class":97,"line":1182},[95,21564,1547],{"class":105},[95,21566,21567],{"class":97,"line":1196},[95,21568,21569],{"class":164},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[10,21571,21572],{},"案例",[86,21574,21576],{"className":88,"code":21575,"language":90,"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",[92,21577,21578,21583,21590,21594,21599,21604,21618,21622,21632,21643,21647,21654,21658,21671,21675,21680,21685,21689,21695,21699,21703,21707,21738,21742,21753,21757,21763,21767,21780,21784,21788,21792,21797,21802,21806,21814,21818,21835,21854,21858,21866,21870,21876],{"__ignoreMap":14},[95,21579,21580],{"class":97,"line":98},[95,21581,21582],{"class":164},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[95,21584,21585,21587],{"class":97,"line":15},[95,21586,14677],{"class":101},[95,21588,21589],{"class":1945}," Phone\n",[95,21591,21592],{"class":97,"line":1161},[95,21593,1528],{"class":105},[95,21595,21596],{"class":97,"line":1176},[95,21597,21598],{"class":105},"public：\n",[95,21600,21601],{"class":97,"line":1182},[95,21602,21603],{"class":164},"    \u002F\u002F 赋值(构造函数)\n",[95,21605,21606,21609,21611,21613,21616],{"class":97,"line":1196},[95,21607,21608],{"class":1945},"    Phone",[95,21610,106],{"class":105},[95,21612,14900],{"class":1945},[95,21614,21615],{"class":5199}," pName",[95,21617,112],{"class":105},[95,21619,21620],{"class":97,"line":1202},[95,21621,2012],{"class":105},[95,21623,21624,21627,21629],{"class":97,"line":1293},[95,21625,21626],{"class":105},"        m_pName",[95,21628,151],{"class":101},[95,21630,21631],{"class":105},"pName;\n",[95,21633,21634,21636,21638,21641],{"class":97,"line":1299},[95,21635,3433],{"class":105},[95,21637,1150],{"class":101},[95,21639,21640],{"class":210},"\"Phone的构造函数调用\"",[95,21642,1272],{"class":105},[95,21644,21645],{"class":97,"line":1311},[95,21646,2169],{"class":105},[95,21648,21649,21652],{"class":97,"line":1594},[95,21650,21651],{"class":1945},"    ~Phone",[95,21653,1958],{"class":105},[95,21655,21656],{"class":97,"line":1599},[95,21657,2012],{"class":105},[95,21659,21660,21662,21664,21667,21669],{"class":97,"line":1605},[95,21661,3433],{"class":105},[95,21663,1150],{"class":101},[95,21665,21666],{"class":210},"\"Phone析构函数调用\"",[95,21668,1150],{"class":101},[95,21670,1173],{"class":105},[95,21672,21673],{"class":97,"line":1610},[95,21674,2169],{"class":105},[95,21676,21677],{"class":97,"line":1624},[95,21678,21679],{"class":164},"    \u002F\u002F\n",[95,21681,21682],{"class":97,"line":1629},[95,21683,21684],{"class":105},"    string m_PName;\n",[95,21686,21687],{"class":97,"line":1635},[95,21688,3977],{"class":105},[95,21690,21691,21693],{"class":97,"line":1656},[95,21692,14677],{"class":101},[95,21694,15154],{"class":1945},[95,21696,21697],{"class":97,"line":1661},[95,21698,1528],{"class":105},[95,21700,21701],{"class":97,"line":1675},[95,21702,14699],{"class":101},[95,21704,21705],{"class":97,"line":1680},[95,21706,16977],{"class":164},[95,21708,21709,21711,21713,21715,21717,21719,21721,21724,21727,21729,21732,21735],{"class":97,"line":1709},[95,21710,18502],{"class":1945},[95,21712,106],{"class":105},[95,21714,14900],{"class":1945},[95,21716,14903],{"class":5199},[95,21718,484],{"class":105},[95,21720,14900],{"class":1945},[95,21722,21723],{"class":5199}," pname",[95,21725,21726],{"class":105},"):",[95,21728,14993],{"class":1945},[95,21730,21731],{"class":105},"(name),m_phone.",[95,21733,21734],{"class":1945},"m_PName",[95,21736,21737],{"class":105},"(pname) \n",[95,21739,21740],{"class":97,"line":1714},[95,21741,2012],{"class":105},[95,21743,21744,21746,21748,21751],{"class":97,"line":1731},[95,21745,3433],{"class":105},[95,21747,1150],{"class":101},[95,21749,21750],{"class":210},"\"Person的构造函数调用\"",[95,21752,1272],{"class":105},[95,21754,21755],{"class":97,"line":1736},[95,21756,2169],{"class":105},[95,21758,21759,21761],{"class":97,"line":1741},[95,21760,18535],{"class":1945},[95,21762,1958],{"class":105},[95,21764,21765],{"class":97,"line":1746},[95,21766,2012],{"class":105},[95,21768,21769,21771,21773,21776,21778],{"class":97,"line":1760},[95,21770,3433],{"class":105},[95,21772,1150],{"class":101},[95,21774,21775],{"class":210},"\"Person析构函数调用\"",[95,21777,1150],{"class":101},[95,21779,1173],{"class":105},[95,21781,21782],{"class":97,"line":1765},[95,21783,2169],{"class":105},[95,21785,21786],{"class":97,"line":2559},[95,21787,7763],{"class":164},[95,21789,21790],{"class":97,"line":2573},[95,21791,14875],{"class":105},[95,21793,21794],{"class":97,"line":2581},[95,21795,21796],{"class":164},"    \u002F\u002F手机\n",[95,21798,21799],{"class":97,"line":2586},[95,21800,21801],{"class":105},"    Phone m_Phone;\n",[95,21803,21804],{"class":97,"line":2592},[95,21805,3977],{"class":105},[95,21807,21808,21810,21812],{"class":97,"line":2598},[95,21809,5347],{"class":101},[95,21811,5571],{"class":1945},[95,21813,1958],{"class":105},[95,21815,21816],{"class":97,"line":2603},[95,21817,1528],{"class":105},[95,21819,21820,21822,21824,21826,21828,21830,21833],{"class":97,"line":7931},[95,21821,19414],{"class":105},[95,21823,10],{"class":1945},[95,21825,106],{"class":105},[95,21827,7899],{"class":210},[95,21829,484],{"class":105},[95,21831,21832],{"class":210},"\"安卓\"",[95,21834,2701],{"class":105},[95,21836,21837,21839,21841,21844,21846,21849,21851],{"class":97,"line":7955},[95,21838,1533],{"class":105},[95,21840,1150],{"class":101},[95,21842,21843],{"class":105},"p.Name",[95,21845,1150],{"class":101},[95,21847,21848],{"class":210},"\"拿着：\"",[95,21850,1150],{"class":101},[95,21852,21853],{"class":105},"p.m_phone.m_PName;\n",[95,21855,21856],{"class":97,"line":7960},[95,21857,1547],{"class":105},[95,21859,21860,21862,21864],{"class":97,"line":7966},[95,21861,109],{"class":101},[95,21863,1955],{"class":1945},[95,21865,1958],{"class":105},[95,21867,21868],{"class":97,"line":7993},[95,21869,1528],{"class":105},[95,21871,21872,21874],{"class":97,"line":7998},[95,21873,5616],{"class":1945},[95,21875,5619],{"class":105},[95,21877,21878],{"class":97,"line":8004},[95,21879,1547],{"class":105},[10,21881,9008],{},[86,21883,21885],{"className":88,"code":21884,"language":90,"meta":14,"style":14},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[92,21886,21887,21892],{"__ignoreMap":14},[95,21888,21889],{"class":97,"line":98},[95,21890,21891],{"class":164},"    \u002F\u002F不需要写这个：\n",[95,21893,21894],{"class":97,"line":15},[95,21895,21896],{"class":164},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[10,21898,21899],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[86,21901,21903],{"className":88,"code":21902,"language":90,"meta":14,"style":14},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[92,21904,21905],{"__ignoreMap":14},[95,21906,21907,21909,21912,21914,21917,21920],{"class":97,"line":98},[95,21908,19029],{"class":1945},[95,21910,21911],{"class":105},"(string name.string pname):",[95,21913,14993],{"class":1945},[95,21915,21916],{"class":105},"(name),",[95,21918,21919],{"class":1945},"m_phone",[95,21921,21922],{"class":105},"(pname) {}\n",[10,21924,21925,21926,151,21929],{},"采用的是隐式转换法，实际为如下：\n",[92,21927,21928],{},"m_phone(pname)",[92,21930,21931],{},"Phone m_phone=pname",[10,21933,21934,21937],{},[255,21935,21936],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[10,21939,21940],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[66,21942,21944],{"id":21943},"_828静态对象","8.2.8静态对象",[10,21946,21947],{},"静态对象在成员对象前static，称为静态对象",[10,21949,21950],{},"静态对象分为两类：",[49,21952,21953],{},[52,21954,21955],{},"静态成员变量",[1113,21957,21958,21961,21964],{},[52,21959,21960],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[52,21962,21963],{},"②在编译阶段分配内存",[52,21965,21966],{},"③类内声明，类外初始化",[49,21968,21969],{"start":15},[52,21970,21971],{},"静态成员函数",[1113,21973,21974,21977],{},[52,21975,21976],{},"①所有对象共享同一个函数",[52,21978,21979],{},"②静态成员函数只能访问静态成员变量",[21981,21982,21984],"h4",{"id":21983},"_8281静态成员变量","8.2.8.1静态成员变量",[86,21986,21988],{"className":88,"code":21987,"language":90,"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",[92,21989,21990,21996,22006,22012,22016,22020,22025,22030,22035,22043,22047,22051,22055,22063,22067,22071,22076,22089,22093,22101,22105,22111],{"__ignoreMap":14},[95,21991,21992,21994],{"class":97,"line":98},[95,21993,1931],{"class":101},[95,21995,1934],{"class":210},[95,21997,21998,22000,22002,22004],{"class":97,"line":15},[95,21999,1939],{"class":101},[95,22001,1942],{"class":101},[95,22003,1946],{"class":1945},[95,22005,1272],{"class":105},[95,22007,22008,22010],{"class":97,"line":1161},[95,22009,14677],{"class":101},[95,22011,15154],{"class":1945},[95,22013,22014],{"class":97,"line":1176},[95,22015,1528],{"class":105},[95,22017,22018],{"class":97,"line":1182},[95,22019,14699],{"class":101},[95,22021,22022],{"class":97,"line":1196},[95,22023,22024],{"class":164},"    \u002F\u002F非静态成员变量\n",[95,22026,22027],{"class":97,"line":1202},[95,22028,22029],{"class":164},"    \u002F\u002F int m_A;\n",[95,22031,22032],{"class":97,"line":1293},[95,22033,22034],{"class":164},"    \u002F\u002F定义静态成员变量\n",[95,22036,22037,22039,22041],{"class":97,"line":1299},[95,22038,11003],{"class":101},[95,22040,2364],{"class":101},[95,22042,21375],{"class":105},[95,22044,22045],{"class":97,"line":1311},[95,22046,2382],{"emptyLinePlaceholder":21},[95,22048,22049],{"class":97,"line":1594},[95,22050,2382],{"emptyLinePlaceholder":21},[95,22052,22053],{"class":97,"line":1599},[95,22054,3977],{"class":105},[95,22056,22057,22059,22061],{"class":97,"line":1605},[95,22058,5347],{"class":101},[95,22060,5571],{"class":1945},[95,22062,1958],{"class":105},[95,22064,22065],{"class":97,"line":1610},[95,22066,1528],{"class":105},[95,22068,22069],{"class":97,"line":1624},[95,22070,15296],{"class":105},[95,22072,22073],{"class":97,"line":1629},[95,22074,22075],{"class":164},"    \u002F\u002F输出类成员变量这块内存\n",[95,22077,22078,22080,22082,22085,22087],{"class":97,"line":1635},[95,22079,1533],{"class":105},[95,22081,1150],{"class":101},[95,22083,22084],{"class":105},"p.m_A",[95,22086,1150],{"class":101},[95,22088,1173],{"class":105},[95,22090,22091],{"class":97,"line":1656},[95,22092,1547],{"class":105},[95,22094,22095,22097,22099],{"class":97,"line":1661},[95,22096,109],{"class":101},[95,22098,1955],{"class":1945},[95,22100,1958],{"class":105},[95,22102,22103],{"class":97,"line":1675},[95,22104,1528],{"class":105},[95,22106,22107,22109],{"class":97,"line":1680},[95,22108,5616],{"class":1945},[95,22110,1958],{"class":105},[95,22112,22113],{"class":97,"line":1709},[95,22114,1547],{"class":105},[10,22116,22117],{},"此时输出是报错的：无法解析外部命令",[10,22119,22120],{},"解决这一问题：必须用到类内声明，类外初始化操作",[86,22122,22124],{"className":88,"code":22123,"language":90,"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",[92,22125,22126,22132,22142,22148,22152,22156,22161,22169,22173,22178,22193,22201,22205,22209,22214,22219,22231,22236,22247,22252,22257,22270,22274,22282,22286,22292],{"__ignoreMap":14},[95,22127,22128,22130],{"class":97,"line":98},[95,22129,1931],{"class":101},[95,22131,1934],{"class":210},[95,22133,22134,22136,22138,22140],{"class":97,"line":15},[95,22135,1939],{"class":101},[95,22137,1942],{"class":101},[95,22139,1946],{"class":1945},[95,22141,1272],{"class":105},[95,22143,22144,22146],{"class":97,"line":1161},[95,22145,14677],{"class":101},[95,22147,15154],{"class":1945},[95,22149,22150],{"class":97,"line":1176},[95,22151,1528],{"class":105},[95,22153,22154],{"class":97,"line":1182},[95,22155,14699],{"class":101},[95,22157,22158],{"class":97,"line":1196},[95,22159,22160],{"class":164},"    \u002F\u002F类内声明\n",[95,22162,22163,22165,22167],{"class":97,"line":1202},[95,22164,11003],{"class":101},[95,22166,2364],{"class":101},[95,22168,21375],{"class":105},[95,22170,22171],{"class":97,"line":1293},[95,22172,3977],{"class":105},[95,22174,22175],{"class":97,"line":1299},[95,22176,22177],{"class":164},"\u002F\u002F类外初始化\n",[95,22179,22180,22182,22184,22187,22189,22191],{"class":97,"line":1311},[95,22181,109],{"class":101},[95,22183,15552],{"class":1945},[95,22185,22186],{"class":105},"::m_A",[95,22188,151],{"class":101},[95,22190,552],{"class":154},[95,22192,1272],{"class":105},[95,22194,22195,22197,22199],{"class":97,"line":1594},[95,22196,5347],{"class":101},[95,22198,5571],{"class":1945},[95,22200,1958],{"class":105},[95,22202,22203],{"class":97,"line":1599},[95,22204,1528],{"class":105},[95,22206,22207],{"class":97,"line":1605},[95,22208,15296],{"class":105},[95,22210,22211],{"class":97,"line":1610},[95,22212,22213],{"class":164},"    \u002F\u002F访问变量的原内存空间\n",[95,22215,22216],{"class":97,"line":1624},[95,22217,22218],{"class":164},"    \u002F\u002F100\n",[95,22220,22221,22223,22225,22227,22229],{"class":97,"line":1629},[95,22222,1533],{"class":105},[95,22224,1150],{"class":101},[95,22226,22084],{"class":105},[95,22228,1150],{"class":101},[95,22230,1173],{"class":105},[95,22232,22233],{"class":97,"line":1635},[95,22234,22235],{"class":105},"    Person p2;\n",[95,22237,22238,22241,22243,22245],{"class":97,"line":1656},[95,22239,22240],{"class":105},"    p2.m_A",[95,22242,151],{"class":101},[95,22244,1704],{"class":154},[95,22246,1272],{"class":105},[95,22248,22249],{"class":97,"line":1661},[95,22250,22251],{"class":164},"    \u002F\u002F继续访问这片空间\n",[95,22253,22254],{"class":97,"line":1675},[95,22255,22256],{"class":164},"    \u002F\u002F200\n",[95,22258,22259,22261,22263,22266,22268],{"class":97,"line":1680},[95,22260,1533],{"class":105},[95,22262,1150],{"class":101},[95,22264,22265],{"class":105},"p2.m_A",[95,22267,1150],{"class":101},[95,22269,1173],{"class":105},[95,22271,22272],{"class":97,"line":1709},[95,22273,1547],{"class":105},[95,22275,22276,22278,22280],{"class":97,"line":1714},[95,22277,109],{"class":101},[95,22279,1955],{"class":1945},[95,22281,1958],{"class":105},[95,22283,22284],{"class":97,"line":1731},[95,22285,1528],{"class":105},[95,22287,22288,22290],{"class":97,"line":1736},[95,22289,5616],{"class":1945},[95,22291,5619],{"class":105},[95,22293,22294],{"class":97,"line":1741},[95,22295,1547],{"class":105},[10,22297,22298],{},[255,22299,22300],{},"静态变量的访问",[86,22302,22304],{"className":88,"code":22303,"language":90,"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",[92,22305,22306,22312,22322,22328,22332,22336,22340,22348,22352,22357,22365,22369,22373,22387,22402,22410,22414,22419,22424,22429,22434,22446,22451,22456,22470,22487,22491,22499,22503,22509],{"__ignoreMap":14},[95,22307,22308,22310],{"class":97,"line":98},[95,22309,1931],{"class":101},[95,22311,1934],{"class":210},[95,22313,22314,22316,22318,22320],{"class":97,"line":15},[95,22315,1939],{"class":101},[95,22317,1942],{"class":101},[95,22319,1946],{"class":1945},[95,22321,1272],{"class":105},[95,22323,22324,22326],{"class":97,"line":1161},[95,22325,14677],{"class":101},[95,22327,15154],{"class":1945},[95,22329,22330],{"class":97,"line":1176},[95,22331,1528],{"class":105},[95,22333,22334],{"class":97,"line":1182},[95,22335,14699],{"class":101},[95,22337,22338],{"class":97,"line":1196},[95,22339,22160],{"class":164},[95,22341,22342,22344,22346],{"class":97,"line":1202},[95,22343,11003],{"class":101},[95,22345,2364],{"class":101},[95,22347,21375],{"class":105},[95,22349,22350],{"class":97,"line":1293},[95,22351,15205],{"class":101},[95,22353,22354],{"class":97,"line":1299},[95,22355,22356],{"class":164},"    \u002F\u002F静态成员变量也是有访问权限的\n",[95,22358,22359,22361,22363],{"class":97,"line":1311},[95,22360,11003],{"class":101},[95,22362,2364],{"class":101},[95,22364,21382],{"class":105},[95,22366,22367],{"class":97,"line":1594},[95,22368,3977],{"class":105},[95,22370,22371],{"class":97,"line":1599},[95,22372,22177],{"class":164},[95,22374,22375,22377,22379,22381,22383,22385],{"class":97,"line":1605},[95,22376,109],{"class":101},[95,22378,15552],{"class":1945},[95,22380,22186],{"class":105},[95,22382,151],{"class":101},[95,22384,552],{"class":154},[95,22386,1272],{"class":105},[95,22388,22389,22391,22393,22396,22398,22400],{"class":97,"line":1610},[95,22390,109],{"class":101},[95,22392,15552],{"class":1945},[95,22394,22395],{"class":105},"::m_B",[95,22397,151],{"class":101},[95,22399,806],{"class":154},[95,22401,1272],{"class":105},[95,22403,22404,22406,22408],{"class":97,"line":1624},[95,22405,5347],{"class":101},[95,22407,5640],{"class":1945},[95,22409,1958],{"class":105},[95,22411,22412],{"class":97,"line":1629},[95,22413,1528],{"class":105},[95,22415,22416],{"class":97,"line":1635},[95,22417,22418],{"class":164},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[95,22420,22421],{"class":97,"line":1656},[95,22422,22423],{"class":164},"    \u002F\u002F静态成员变量有两种访问方式：\n",[95,22425,22426],{"class":97,"line":1661},[95,22427,22428],{"class":164},"    \u002F\u002F1.通过对象进行访问\n",[95,22430,22431],{"class":97,"line":1675},[95,22432,22433],{"class":105},"    Person p;  \n",[95,22435,22436,22438,22440,22442,22444],{"class":97,"line":1680},[95,22437,1533],{"class":105},[95,22439,1150],{"class":101},[95,22441,22084],{"class":105},[95,22443,1150],{"class":101},[95,22445,1173],{"class":105},[95,22447,22448],{"class":97,"line":1709},[95,22449,22450],{"class":164},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[95,22452,22453],{"class":97,"line":1714},[95,22454,22455],{"class":164},"    \u002F\u002F2.通过类名进行访问\n",[95,22457,22458,22460,22462,22464,22466,22468],{"class":97,"line":1731},[95,22459,1533],{"class":105},[95,22461,1150],{"class":101},[95,22463,19029],{"class":1945},[95,22465,22186],{"class":105},[95,22467,1150],{"class":101},[95,22469,1173],{"class":105},[95,22471,22472,22474,22476,22478,22480,22482,22484],{"class":97,"line":1736},[95,22473,1533],{"class":105},[95,22475,1150],{"class":101},[95,22477,19029],{"class":1945},[95,22479,22395],{"class":105},[95,22481,1150],{"class":101},[95,22483,1220],{"class":105},[95,22485,22486],{"class":164}," \u002F\u002F没有访问权限，报错\n",[95,22488,22489],{"class":97,"line":1741},[95,22490,1547],{"class":105},[95,22492,22493,22495,22497],{"class":97,"line":1746},[95,22494,109],{"class":101},[95,22496,1955],{"class":1945},[95,22498,1958],{"class":105},[95,22500,22501],{"class":97,"line":1760},[95,22502,1528],{"class":105},[95,22504,22505,22507],{"class":97,"line":1765},[95,22506,5685],{"class":1945},[95,22508,5619],{"class":105},[95,22510,22511],{"class":97,"line":2559},[95,22512,1547],{"class":105},[21981,22514,22516],{"id":22515},"_8282静态成员函数","8.2.8.2静态成员函数",[10,22518,22519],{},"1.静态成员函数定义与访问",[86,22521,22523],{"className":88,"code":22522,"language":90,"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",[92,22524,22525,22531,22535,22539,22544,22555,22559,22573,22577,22581,22589,22593,22598,22603,22607,22615,22620,22630],{"__ignoreMap":14},[95,22526,22527,22529],{"class":97,"line":98},[95,22528,14677],{"class":101},[95,22530,15154],{"class":1945},[95,22532,22533],{"class":97,"line":15},[95,22534,1528],{"class":105},[95,22536,22537],{"class":97,"line":1161},[95,22538,14699],{"class":101},[95,22540,22541],{"class":97,"line":1176},[95,22542,22543],{"class":164},"    \u002F\u002F在公共权限下定义静态成员函数\n",[95,22545,22546,22548,22551,22553],{"class":97,"line":1182},[95,22547,11003],{"class":101},[95,22549,22550],{"class":101}," void",[95,22552,11368],{"class":1945},[95,22554,1958],{"class":105},[95,22556,22557],{"class":97,"line":1196},[95,22558,2012],{"class":105},[95,22560,22561,22564,22566,22569,22571],{"class":97,"line":1202},[95,22562,22563],{"class":105},"        coout",[95,22565,1150],{"class":101},[95,22567,22568],{"class":210},"\"静态成员函数的调用\"",[95,22570,1150],{"class":101},[95,22572,1173],{"class":105},[95,22574,22575],{"class":97,"line":1293},[95,22576,2169],{"class":105},[95,22578,22579],{"class":97,"line":1299},[95,22580,3977],{"class":105},[95,22582,22583,22585,22587],{"class":97,"line":1311},[95,22584,5347],{"class":101},[95,22586,5571],{"class":1945},[95,22588,1958],{"class":105},[95,22590,22591],{"class":97,"line":1594},[95,22592,1528],{"class":105},[95,22594,22595],{"class":97,"line":1599},[95,22596,22597],{"class":164},"    \u002F\u002F静态成员函数的调用方式:\n",[95,22599,22600],{"class":97,"line":1605},[95,22601,22602],{"class":164},"    \u002F\u002F1.通过对象访问\n",[95,22604,22605],{"class":97,"line":1610},[95,22606,15296],{"class":105},[95,22608,22609,22611,22613],{"class":97,"line":1624},[95,22610,15849],{"class":105},[95,22612,11534],{"class":1945},[95,22614,5619],{"class":105},[95,22616,22617],{"class":97,"line":1629},[95,22618,22619],{"class":164},"    \u002F\u002F2.通过类名访问\n",[95,22621,22622,22624,22626,22628],{"class":97,"line":1635},[95,22623,18502],{"class":1945},[95,22625,17715],{"class":105},[95,22627,11534],{"class":1945},[95,22629,5619],{"class":105},[95,22631,22632],{"class":97,"line":1656},[95,22633,1547],{"class":105},[49,22635,22636],{"start":15},[52,22637,22638],{},"静态成员函数只能访问静态成员变量",[86,22640,22642],{"className":88,"code":22641,"language":90,"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",[92,22643,22644,22650,22654,22658,22662,22672,22676,22690,22695,22707,22711,22722,22732,22736,22740,22744,22754,22758,22771,22775,22779,22783,22787,22801,22809,22813,22817,22821,22825,22833,22837,22847,22852,22856,22864,22868,22874],{"__ignoreMap":14},[95,22645,22646,22648],{"class":97,"line":98},[95,22647,14677],{"class":101},[95,22649,15154],{"class":1945},[95,22651,22652],{"class":97,"line":15},[95,22653,1528],{"class":105},[95,22655,22656],{"class":97,"line":1161},[95,22657,14699],{"class":101},[95,22659,22660],{"class":97,"line":1176},[95,22661,22543],{"class":164},[95,22663,22664,22666,22668,22670],{"class":97,"line":1182},[95,22665,11003],{"class":101},[95,22667,22550],{"class":101},[95,22669,11368],{"class":1945},[95,22671,1958],{"class":105},[95,22673,22674],{"class":97,"line":1196},[95,22675,2012],{"class":105},[95,22677,22678,22681,22683,22685,22687],{"class":97,"line":1202},[95,22679,22680],{"class":105},"        m_A",[95,22682,151],{"class":101},[95,22684,417],{"class":154},[95,22686,161],{"class":105},[95,22688,22689],{"class":164}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[95,22691,22692],{"class":97,"line":1293},[95,22693,22694],{"class":164},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[95,22696,22697,22699,22701,22703,22705],{"class":97,"line":1299},[95,22698,22563],{"class":105},[95,22700,1150],{"class":101},[95,22702,22568],{"class":210},[95,22704,1150],{"class":101},[95,22706,1173],{"class":105},[95,22708,22709],{"class":97,"line":1311},[95,22710,2169],{"class":105},[95,22712,22713,22715,22717,22719],{"class":97,"line":1594},[95,22714,11003],{"class":101},[95,22716,2364],{"class":101},[95,22718,15431],{"class":105},[95,22720,22721],{"class":164}," \u002F\u002F静态成员变量\n",[95,22723,22724,22726,22729],{"class":97,"line":1599},[95,22725,1967],{"class":101},[95,22727,22728],{"class":105}," m_B;",[95,22730,22731],{"class":164}," \u002F\u002F非静态成员变量\n",[95,22733,22734],{"class":97,"line":1605},[95,22735,2382],{"emptyLinePlaceholder":21},[95,22737,22738],{"class":97,"line":1610},[95,22739,15205],{"class":101},[95,22741,22742],{"class":97,"line":1624},[95,22743,22356],{"class":164},[95,22745,22746,22748,22750,22752],{"class":97,"line":1629},[95,22747,11003],{"class":101},[95,22749,22550],{"class":101},[95,22751,13601],{"class":1945},[95,22753,1958],{"class":105},[95,22755,22756],{"class":97,"line":1635},[95,22757,2012],{"class":105},[95,22759,22760,22762,22764,22767,22769],{"class":97,"line":1656},[95,22761,3433],{"class":105},[95,22763,1150],{"class":101},[95,22765,22766],{"class":210},"\"这是私有权限下的静态函数调用\"",[95,22768,1150],{"class":101},[95,22770,1173],{"class":105},[95,22772,22773],{"class":97,"line":1661},[95,22774,2169],{"class":105},[95,22776,22777],{"class":97,"line":1675},[95,22778,2382],{"emptyLinePlaceholder":21},[95,22780,22781],{"class":97,"line":1680},[95,22782,2382],{"emptyLinePlaceholder":21},[95,22784,22785],{"class":97,"line":1709},[95,22786,3977],{"class":105},[95,22788,22789,22791,22793,22795,22797,22799],{"class":97,"line":1714},[95,22790,109],{"class":101},[95,22792,15552],{"class":1945},[95,22794,22186],{"class":105},[95,22796,151],{"class":101},[95,22798,297],{"class":154},[95,22800,1272],{"class":105},[95,22802,22803,22805,22807],{"class":97,"line":1731},[95,22804,5347],{"class":101},[95,22806,5571],{"class":1945},[95,22808,1958],{"class":105},[95,22810,22811],{"class":97,"line":1736},[95,22812,1528],{"class":105},[95,22814,22815],{"class":97,"line":1741},[95,22816,22597],{"class":164},[95,22818,22819],{"class":97,"line":1746},[95,22820,22602],{"class":164},[95,22822,22823],{"class":97,"line":1760},[95,22824,15296],{"class":105},[95,22826,22827,22829,22831],{"class":97,"line":1765},[95,22828,15849],{"class":105},[95,22830,11534],{"class":1945},[95,22832,5619],{"class":105},[95,22834,22835],{"class":97,"line":2559},[95,22836,22619],{"class":164},[95,22838,22839,22841,22843,22845],{"class":97,"line":2573},[95,22840,18502],{"class":1945},[95,22842,17715],{"class":105},[95,22844,11534],{"class":1945},[95,22846,5619],{"class":105},[95,22848,22849],{"class":97,"line":2581},[95,22850,22851],{"class":164},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[95,22853,22854],{"class":97,"line":2586},[95,22855,1547],{"class":105},[95,22857,22858,22860,22862],{"class":97,"line":2592},[95,22859,109],{"class":101},[95,22861,1955],{"class":1945},[95,22863,1958],{"class":105},[95,22865,22866],{"class":97,"line":2598},[95,22867,1528],{"class":105},[95,22869,22870,22872],{"class":97,"line":2603},[95,22871,5616],{"class":1945},[95,22873,5619],{"class":105},[95,22875,22876],{"class":97,"line":7931},[95,22877,1547],{"class":105},[66,22879,22881],{"id":22880},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21981,22883,22885],{"id":22884},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[10,22887,22888],{},"在c++中，类内的成员变量和成员函数分开存储",[10,22890,22891],{},"只有非静态成员变量才属于类的对象上",[22893,22894,22896],"h5",{"id":22895},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[86,22898,22900],{"className":88,"code":22899,"language":90,"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",[92,22901,22902,22909,22919,22925,22929,22933,22937,22945,22949,22953,22976,22980,22988,22992,22998],{"__ignoreMap":14},[95,22903,22904,22906],{"class":97,"line":98},[95,22905,1931],{"class":101},[95,22907,22908],{"class":210},"\u003Ciostraem>\n",[95,22910,22911,22913,22915,22917],{"class":97,"line":15},[95,22912,1939],{"class":101},[95,22914,1942],{"class":101},[95,22916,1946],{"class":1945},[95,22918,1272],{"class":105},[95,22920,22921,22923],{"class":97,"line":1161},[95,22922,14677],{"class":101},[95,22924,15154],{"class":1945},[95,22926,22927],{"class":97,"line":1176},[95,22928,1528],{"class":105},[95,22930,22931],{"class":97,"line":1182},[95,22932,2382],{"emptyLinePlaceholder":21},[95,22934,22935],{"class":97,"line":1196},[95,22936,3977],{"class":105},[95,22938,22939,22941,22943],{"class":97,"line":1202},[95,22940,5347],{"class":101},[95,22942,5571],{"class":1945},[95,22944,1958],{"class":105},[95,22946,22947],{"class":97,"line":1293},[95,22948,1528],{"class":105},[95,22950,22951],{"class":97,"line":1299},[95,22952,15296],{"class":105},[95,22954,22955,22957,22959,22962,22964,22967,22969,22971,22973],{"class":97,"line":1311},[95,22956,1533],{"class":105},[95,22958,1150],{"class":101},[95,22960,22961],{"class":210},"\"size of p=\"",[95,22963,1150],{"class":101},[95,22965,22966],{"class":1945},"sizeoif",[95,22968,6522],{"class":105},[95,22970,1150],{"class":101},[95,22972,1220],{"class":105},[95,22974,22975],{"class":164}," \u002F\u002F查看这个空类的占用的内存空间\n",[95,22977,22978],{"class":97,"line":1594},[95,22979,1547],{"class":105},[95,22981,22982,22984,22986],{"class":97,"line":1599},[95,22983,109],{"class":101},[95,22985,1955],{"class":1945},[95,22987,1958],{"class":105},[95,22989,22990],{"class":97,"line":1605},[95,22991,1528],{"class":105},[95,22993,22994,22996],{"class":97,"line":1610},[95,22995,5616],{"class":1945},[95,22997,5619],{"class":105},[95,22999,23000],{"class":97,"line":1624},[95,23001,1547],{"class":105},[10,23003,23004],{},"输出结果为：size of p=1",[10,23006,23007],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[10,23009,23010],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22893,23012,23014],{"id":23013},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[86,23016,23018],{"className":88,"code":23017,"language":90,"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",[92,23019,23020,23026,23036,23044,23048,23057,23061,23069,23073,23077,23096,23100,23104,23112,23116,23122],{"__ignoreMap":14},[95,23021,23022,23024],{"class":97,"line":98},[95,23023,1931],{"class":101},[95,23025,1934],{"class":210},[95,23027,23028,23030,23032,23034],{"class":97,"line":15},[95,23029,1939],{"class":101},[95,23031,1942],{"class":101},[95,23033,1946],{"class":1945},[95,23035,1272],{"class":105},[95,23037,23038,23040,23042],{"class":97,"line":1161},[95,23039,14677],{"class":101},[95,23041,15552],{"class":1945},[95,23043,2656],{"class":105},[95,23045,23046],{"class":97,"line":1176},[95,23047,1528],{"class":105},[95,23049,23050,23052,23054],{"class":97,"line":1182},[95,23051,1967],{"class":101},[95,23053,15431],{"class":105},[95,23055,23056],{"class":164},"\u002F\u002F非静态成员变量\n",[95,23058,23059],{"class":97,"line":1196},[95,23060,3977],{"class":105},[95,23062,23063,23065,23067],{"class":97,"line":1202},[95,23064,5347],{"class":101},[95,23066,5571],{"class":1945},[95,23068,1958],{"class":105},[95,23070,23071],{"class":97,"line":1293},[95,23072,1528],{"class":105},[95,23074,23075],{"class":97,"line":1299},[95,23076,15296],{"class":105},[95,23078,23079,23081,23083,23085,23087,23089,23091,23093],{"class":97,"line":1311},[95,23080,1533],{"class":105},[95,23082,1150],{"class":101},[95,23084,22961],{"class":210},[95,23086,1354],{"class":101},[95,23088,6522],{"class":105},[95,23090,1150],{"class":101},[95,23092,1220],{"class":105},[95,23094,23095],{"class":164}," \u002F\u002F查看不是空对象时占用多少内存\n",[95,23097,23098],{"class":97,"line":1594},[95,23099,2382],{"emptyLinePlaceholder":21},[95,23101,23102],{"class":97,"line":1599},[95,23103,1547],{"class":105},[95,23105,23106,23108,23110],{"class":97,"line":1605},[95,23107,109],{"class":101},[95,23109,1955],{"class":1945},[95,23111,1958],{"class":105},[95,23113,23114],{"class":97,"line":1610},[95,23115,1528],{"class":105},[95,23117,23118,23120],{"class":97,"line":1624},[95,23119,5616],{"class":1945},[95,23121,5619],{"class":105},[95,23123,23124],{"class":97,"line":1629},[95,23125,1547],{"class":105},[10,23127,23128],{},"输出结果：size of p=4",[10,23130,23131],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[49,23133,23134],{},[52,23135,23136],{},"如果加上非静态成员变量，Person类修改如下",[86,23138,23140],{"className":88,"code":23139,"language":90,"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",[92,23141,23142,23148,23152,23158,23166,23170,23175],{"__ignoreMap":14},[95,23143,23144,23146],{"class":97,"line":98},[95,23145,14677],{"class":101},[95,23147,15154],{"class":1945},[95,23149,23150],{"class":97,"line":15},[95,23151,1528],{"class":105},[95,23153,23154,23156],{"class":97,"line":1161},[95,23155,1967],{"class":101},[95,23157,21375],{"class":105},[95,23159,23160,23162,23164],{"class":97,"line":1176},[95,23161,11003],{"class":101},[95,23163,2364],{"class":101},[95,23165,21382],{"class":105},[95,23167,23168],{"class":97,"line":1182},[95,23169,3977],{"class":105},[95,23171,23172],{"class":97,"line":1196},[95,23173,23174],{"class":164},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[95,23176,23177,23179,23181,23183,23185,23187],{"class":97,"line":1202},[95,23178,109],{"class":101},[95,23180,15552],{"class":1945},[95,23182,22395],{"class":105},[95,23184,151],{"class":101},[95,23186,297],{"class":154},[95,23188,1272],{"class":105},[10,23190,23191],{},"输出结果：4",[10,23193,23194],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[49,23196,23197],{"start":15},[52,23198,23199],{},"加上非静态成员函数",[86,23201,23203],{"className":88,"code":23202,"language":90,"meta":14,"style":14},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[92,23204,23205,23212,23216,23222,23230,23234,23238,23242],{"__ignoreMap":14},[95,23206,23207,23209],{"class":97,"line":98},[95,23208,14677],{"class":101},[95,23210,23211],{"class":1945},"  Person\n",[95,23213,23214],{"class":97,"line":15},[95,23215,1528],{"class":105},[95,23217,23218,23220],{"class":97,"line":1161},[95,23219,1967],{"class":101},[95,23221,21375],{"class":105},[95,23223,23224,23226,23228],{"class":97,"line":1176},[95,23225,14892],{"class":101},[95,23227,11368],{"class":1945},[95,23229,1958],{"class":105},[95,23231,23232],{"class":97,"line":1182},[95,23233,2012],{"class":105},[95,23235,23236],{"class":97,"line":1196},[95,23237,2382],{"emptyLinePlaceholder":21},[95,23239,23240],{"class":97,"line":1202},[95,23241,2169],{"class":105},[95,23243,23244],{"class":97,"line":1293},[95,23245,3977],{"class":105},[10,23247,23248],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[49,23250,23251],{"start":1161},[52,23252,23253],{},"加上静态成员函数",[86,23255,23257],{"className":88,"code":23256,"language":90,"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",[92,23258,23259,23265,23269,23275,23283,23287,23291,23295,23306,23310,23314,23318],{"__ignoreMap":14},[95,23260,23261,23263],{"class":97,"line":98},[95,23262,14677],{"class":101},[95,23264,23211],{"class":1945},[95,23266,23267],{"class":97,"line":15},[95,23268,1528],{"class":105},[95,23270,23271,23273],{"class":97,"line":1161},[95,23272,1967],{"class":101},[95,23274,21375],{"class":105},[95,23276,23277,23279,23281],{"class":97,"line":1176},[95,23278,14892],{"class":101},[95,23280,11368],{"class":1945},[95,23282,1958],{"class":105},[95,23284,23285],{"class":97,"line":1182},[95,23286,2012],{"class":105},[95,23288,23289],{"class":97,"line":1196},[95,23290,2382],{"emptyLinePlaceholder":21},[95,23292,23293],{"class":97,"line":1202},[95,23294,2169],{"class":105},[95,23296,23297,23299,23301,23304],{"class":97,"line":1293},[95,23298,11003],{"class":101},[95,23300,22550],{"class":101},[95,23302,23303],{"class":1945}," func1",[95,23305,1958],{"class":105},[95,23307,23308],{"class":97,"line":1299},[95,23309,2012],{"class":105},[95,23311,23312],{"class":97,"line":1311},[95,23313,2382],{"emptyLinePlaceholder":21},[95,23315,23316],{"class":97,"line":1594},[95,23317,2169],{"class":105},[95,23319,23320],{"class":97,"line":1599},[95,23321,3977],{"class":105},[10,23323,23191],{},[10,23325,23326],{},"解释：静态成员函数也不属于类上",[5109,23328,7657],{},{"title":14,"searchDepth":15,"depth":15,"links":23330},[23331,23337],{"id":14628,"depth":15,"text":14629,"children":23332},[23333,23334,23335,23336],{"id":14632,"depth":1161,"text":14633},{"id":15357,"depth":1161,"text":15358},{"id":15529,"depth":1161,"text":15530},{"id":15988,"depth":1161,"text":15989},{"id":18360,"depth":15,"text":18361,"children":23338},[23339,23340,23341,23342,23343,23344,23345,23346,23347],{"id":18372,"depth":1161,"text":18373},{"id":18665,"depth":1161,"text":18666},{"id":19156,"depth":1161,"text":19157},{"id":20253,"depth":1161,"text":20254},{"id":20676,"depth":1161,"text":20677},{"id":21155,"depth":1161,"text":21156},{"id":21530,"depth":1161,"text":21531},{"id":21943,"depth":1161,"text":21944},{"id":22880,"depth":1161,"text":22881},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14593,"description":23348},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23355,"title":90,"body":23356,"description":23360,"extension":18,"meta":23361,"navigation":21,"path":23363,"seo":23364,"stem":23365,"__hash__":23366},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23357,"toc":23358},[],{"title":14,"searchDepth":15,"depth":15,"links":23359},[],null,{"category":23362},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":90,"description":23360},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23368,"title":23369,"body":23370,"description":14,"extension":18,"meta":23961,"navigation":21,"path":23962,"seo":23963,"stem":23964,"__hash__":23965},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23371,"toc":23943},[23372,23375,23379,23382,23385,23388,23406,23411,23414,23417,23420,23423,23428,23431,23436,23439,23442,23446,23449,23452,23458,23461,23479,23483,23487,23490,23495,23498,23502,23505,23518,23521,23525,23528,23531,23534,23559,23562,23571,23582,23597,23629,23633,23640,23648,23652,23655,23658,23663,23667,23670,23673,23678,23681,23685,23688,23691,23696,23699,23703,23708,23712,23779,23783,23786,23789,23792,23795,23798,23804,23825,23828,23842,23851,23855,23858,23861,23866,23869,23874,23879,23882,23885,23890,23895,23898,23903,23908,23911,23916,23921,23924,23927,23932,23935,23940],[33,23373,23369],{"id":23374},"_1强化学习基本认识",[37,23376,23378],{"id":23377},"_11什么是强化学习","1.1.什么是强化学习",[10,23380,23381],{},"强化学习有两部分组成：智能体和环境；",[10,23383,23384],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[10,23386,23387],{},"强化学习与监督学习的区别:",[49,23389,23390,23393,23396,23399],{},[52,23391,23392],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[52,23394,23395],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[52,23397,23398],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[52,23400,23401,23402,23405],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[255,23403,23404],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[10,23407,23408],{},[1444,23409],{"alt":14,"src":23410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[10,23412,23413],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[10,23415,23416],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[10,23418,23419],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[10,23421,23422],{},"获取奖励",[10,23424,23425],{},[1444,23426],{"alt":14,"src":23427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[10,23429,23430],{},"强化学习可以分成标准强化学习和深度强化学习",[10,23432,23433],{},[1444,23434],{"alt":14,"src":23435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[10,23437,23438],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[10,23440,23441],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[37,23443,23445],{"id":23444},"_12强化学习应用场景","1.2.强化学习应用场景",[10,23447,23448],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[10,23450,23451],{},"具身智能中的应用",[10,23453,23454,23457],{},[255,23455,23456],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[10,23459,23460],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[10,23462,23463,23464,23467,23468,23471,23472,23475,23476],{},"机器人是",[255,23465,23466],{},"躯体","，深度学习是",[255,23469,23470],{},"神经元****网络","，VLA是",[255,23473,23474],{},"通用的行为逻辑","，而强化学习是",[255,23477,23478],{},"教练",[37,23480,23482],{"id":23481},"_13序列决策","1.3.序列决策",[66,23484,23486],{"id":23485},"_131智能体与环境","1.3.1.智能体与环境",[10,23488,23489],{},"强化学习研究的问题是智能体agent与环境交互的问题",[10,23491,23492],{},[1444,23493],{"alt":14,"src":23494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[10,23496,23497],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[66,23499,23501],{"id":23500},"_132奖励","1.3.2.奖励",[10,23503,23504],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[10,23506,23507,23508,23517],{},"取某个策略的表现如何。强化学习的目的就是",[255,23509,23510,23511,23516],{},"最大化",[255,23512,23513],{},[255,23514,23515],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[10,23519,23520],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[66,23522,23524],{"id":23523},"_133序列决策","1.3.3.序列决策",[10,23526,23527],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[10,23529,23530],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[10,23532,23533],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[10,23535,23536,23540,23541,23543,23544,23546,23547,23549,23550,13778,23553,13778,23556],{},[23537,23538,23539],"em",{},"Ht"," = ",[23537,23542,702],{},"1*, a",[23537,23545,323],{},", r",[23537,23548,323],{},", . . . ,* ",[23537,23551,23552],{},"ot",[23537,23554,23555],{},", at ,",[23537,23557,23558],{},"rt",[10,23560,23561],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[10,23563,23564,23540,23567,1640,23569,535],{},[23537,23565,23566],{},"st",[23537,23568,158],{},[23537,23570,23539],{},[10,23572,23573,23574,23577,23578,23581],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[255,23575,23576],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[255,23579,23580],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[10,23583,23584,23585,23588,23589,23592,23593,23596],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[255,23586,23587],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[255,23590,23591],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23537,23594,23595],{},"S, A, T, R, Ω, O, γ",")。",[10,23598,23599,23600,23602,23603,23605,23606,106,23608,23611,23612,23614,23615,106,23618,23621,23622,23624,23625,23628],{},"其中 ",[23537,23601,795],{}," 表示状态空间，为隐变量，",[23537,23604,338],{}," 为动作空间，",[23537,23607,820],{},[23537,23609,23610],{},"s ′ |s, a",") 为状态转移概率，",[23537,23613,770],{}," 为奖励函数，",[23537,23616,23617],{},"Ω",[23537,23619,23620],{},"o|s, a",") 为观测概率，",[23537,23623,696],{}," 为观测空间，",[23537,23626,23627],{},"γ"," 为折扣因子。",[37,23630,23632],{"id":23631},"_14动作空间","1.4.动作空间",[10,23634,23635,23636,23639],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[255,23637,23638],{},"动作空间"," ，动作空间分为:",[49,23641,23642,23645],{},[52,23643,23644],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[52,23646,23647],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[37,23649,23651],{"id":23650},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[10,23653,23654],{},"由策略、价值函数、模型三部分组成",[10,23656,23657],{},"这三者组成马尔可夫决策过程",[10,23659,23660],{},[1444,23661],{"alt":14,"src":23662},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[66,23664,23666],{"id":23665},"_151策略","1.5.1.策略",[10,23668,23669],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[10,23671,23672],{},"策略可分为两种：",[10,23674,23675],{},[1444,23676],{"alt":14,"src":23677},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[10,23679,23680],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[66,23682,23684],{"id":23683},"_152价值函数","1.5.2.价值函数",[10,23686,23687],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[10,23689,23690],{},"价值函数中有一个折扣因子，类似于存款利息",[10,23692,23693],{},[1444,23694],{"alt":14,"src":23695},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[10,23697,23698],{},"进入某个状态采取的最优动作可以通过Q函数得到",[66,23700,23702],{"id":23701},"_153模型","1.5.3.模型",[10,23704,23705],{},[1444,23706],{"alt":14,"src":23707},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[37,23709,23711],{"id":23710},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[243,23713,23714,23725],{},[246,23715,23716],{},[249,23717,23718,23722],{},[252,23719,23721],{"align":23720},"left","类型",[252,23723,23724],{"align":23720},"特点",[290,23726,23727,23737,23747,23757,23769],{},[249,23728,23729,23734],{},[295,23730,23731],{"align":23720},[255,23732,23733],{},"基于价值的智能体",[295,23735,23736],{"align":23720},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[249,23738,23739,23744],{},[295,23740,23741],{"align":23720},[255,23742,23743],{},"基于策略的智能体",[295,23745,23746],{"align":23720},"直接学习策略，没有学习价值函数",[249,23748,23749,23754],{},[295,23750,23751],{"align":23720},[255,23752,23753],{},"演员-评论员智能体",[295,23755,23756],{"align":23720},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[249,23758,23759,23764],{},[295,23760,23761],{"align":23720},[255,23762,23763],{},"有模型强化学习智能体",[295,23765,23766],{"align":23720},[1444,23767],{"alt":14,"src":23768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[249,23770,23771,23776],{},[295,23772,23773],{"align":23720},[255,23774,23775],{},"免模型强化学习智能体",[295,23777,23778],{"align":23720},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[37,23780,23782],{"id":23781},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[10,23784,23785],{},"学习和规划是序列决策的两个基本问题",[10,23787,23788],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[10,23790,23791],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[10,23793,23794],{},"强化学习用到的库：Gym",[10,23796,23797],{},"Gym可以检验强化学习算法的优劣",[10,23799,23800,23803],{},[255,23801,23802],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[86,23805,23809],{"className":23806,"code":23807,"language":23808,"meta":14,"style":14},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[92,23810,23811],{"__ignoreMap":14},[95,23812,23813,23816,23819,23822],{"class":97,"line":98},[95,23814,23815],{"class":1945},"pip",[95,23817,23818],{"class":210}," install",[95,23820,23821],{"class":210}," gym==",[95,23823,23824],{"class":154},"0.25.2\n",[10,23826,23827],{},"显示图形界面需要",[86,23829,23831],{"className":23806,"code":23830,"language":23808,"meta":14,"style":14},"pip install pygame\n",[92,23832,23833],{"__ignoreMap":14},[95,23834,23835,23837,23839],{"class":97,"line":98},[95,23836,23815],{"class":1945},[95,23838,23818],{"class":210},[95,23840,23841],{"class":210}," pygame\n",[10,23843,23844,23845],{},"有关Gym库的相关文档介绍：",[344,23846,23850],{"href":23847,"rel":23848},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23849],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[37,23852,23854],{"id":23853},"_18一些补充基础概念","1.8.一些补充基础概念",[10,23856,23857],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[10,23859,23860],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[10,23862,23863],{},[1444,23864],{"alt":14,"src":23865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[10,23867,23868],{},"折扣率需要自己来设定",[10,23870,23871],{},[1444,23872],{"alt":14,"src":23873},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[49,23875,23876],{},[52,23877,23878],{},"状态转移函数：",[10,23880,23881],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[10,23883,23884],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[10,23886,23887],{},[1444,23888],{"alt":14,"src":23889},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[49,23891,23892],{"start":15},[52,23893,23894],{},"动作价值函数：",[10,23896,23897],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[10,23899,23900],{},[1444,23901],{"alt":14,"src":23902},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[49,23904,23905],{"start":1161},[52,23906,23907],{},"最优动作价值函数：",[10,23909,23910],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[10,23912,23913],{},[1444,23914],{"alt":14,"src":23915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[49,23917,23918],{"start":1176},[52,23919,23920],{},"状态价值函数:",[10,23922,23923],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[10,23925,23926],{},"它衡量的是“一个具体动作”的长期价值",[10,23928,23929],{},[1444,23930],{"alt":14,"src":23931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[10,23933,23934],{},"几个价值函数之间的比较：",[10,23936,23937],{},[1444,23938],{"alt":14,"src":23939},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5109,23941,23942],{},"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":23944},[23945,23946,23947,23952,23953,23958,23959,23960],{"id":23377,"depth":15,"text":23378},{"id":23444,"depth":15,"text":23445},{"id":23481,"depth":15,"text":23482,"children":23948},[23949,23950,23951],{"id":23485,"depth":1161,"text":23486},{"id":23500,"depth":1161,"text":23501},{"id":23523,"depth":1161,"text":23524},{"id":23631,"depth":15,"text":23632},{"id":23650,"depth":15,"text":23651,"children":23954},[23955,23956,23957],{"id":23665,"depth":1161,"text":23666},{"id":23683,"depth":1161,"text":23684},{"id":23701,"depth":1161,"text":23702},{"id":23710,"depth":15,"text":23711},{"id":23781,"depth":15,"text":23782},{"id":23853,"depth":15,"text":23854},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23369,"description":14},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23967,"title":23968,"body":23969,"description":23976,"extension":18,"meta":23987,"navigation":21,"path":23988,"seo":23989,"stem":23990,"__hash__":23991},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23970,"toc":23985},[23971,23974,23977,23982],[33,23972,23968],{"id":23973},"_2马尔可夫决策过程",[10,23975,23976],{},"这是强化学习的基本框架",[10,23978,23979],{},[1444,23980],{"alt":14,"src":23981},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[10,23983,23984],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":14,"searchDepth":15,"depth":15,"links":23986},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23968,"description":23976},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23993,"title":23994,"body":23995,"description":14,"extension":18,"meta":24111,"navigation":21,"path":24112,"seo":24113,"stem":24114,"__hash__":24115},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23996,"toc":24106},[23997,24000,24004,24007,24012,24017,24020,24025,24028,24033,24036,24040,24045,24048,24053,24058,24063,24066,24070,24075,24078,24083,24088,24093,24098,24101],[33,23998,23994],{"id":23999},"_3动作价值函数",[37,24001,24003],{"id":24002},"_31dqn","3.1.DQN",[10,24005,24006],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[10,24008,24009],{},[1444,24010],{"alt":14,"src":24011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[10,24013,24014],{},[1444,24015],{"alt":14,"src":24016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[10,24018,24019],{},"DQN算法的描述：",[10,24021,24022],{},[1444,24023],{"alt":14,"src":24024},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[10,24026,24027],{},"这里的Dense指的是全连接层",[10,24029,24030],{},[1444,24031],{"alt":14,"src":24032},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[10,24034,24035],{},"当前观测的状态为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算法",[37,24037,24039],{"id":24038},"_32dqn的举例","3.2.DQN的举例",[10,24041,24042],{},[1444,24043],{"alt":14,"src":24044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[10,24046,24047],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[10,24049,24050],{},[1444,24051],{"alt":14,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[10,24054,24055],{},[1444,24056],{"alt":14,"src":24057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[10,24059,24060],{},[1444,24061],{"alt":14,"src":24062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[10,24064,24065],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[37,24067,24069],{"id":24068},"_33td算法","3.3.TD算法",[10,24071,24072],{},[1444,24073],{"alt":14,"src":24074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[10,24076,24077],{},"强化学习TD算法公式的粗略解释：",[10,24079,24080],{},[1444,24081],{"alt":14,"src":24082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[10,24084,24085],{},[1444,24086],{"alt":14,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[10,24089,24090],{},[1444,24091],{"alt":14,"src":24092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[10,24094,24095],{},[1444,24096],{"alt":14,"src":24097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[10,24099,24100],{},"TD算法总结：",[10,24102,24103],{},[1444,24104],{"alt":14,"src":24105},"..\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":24107},[24108,24109,24110],{"id":24002,"depth":15,"text":24003},{"id":24038,"depth":15,"text":24039},{"id":24068,"depth":15,"text":24069},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23994,"description":14},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24117,"title":24118,"body":24119,"description":14,"extension":18,"meta":24352,"navigation":21,"path":24353,"seo":24354,"stem":24355,"__hash__":24356},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24120,"toc":24348},[24121,24124,24128,24131,24134,24139,24144,24147,24152,24157,24160,24165,24168,24173,24176,24181,24184,24189,24192,24197,24202,24205,24210,24213,24216,24221,24224,24229,24234,24238,24241,24244,24249,24254,24257,24262,24267,24270,24275,24278,24281,24286,24289,24294,24297,24302,24307,24310,24315,24320,24323,24328,24331,24336,24339],[33,24122,24118],{"id":24123},"_4策略学习",[37,24125,24127],{"id":24126},"_41概念描述","4.1.概念描述",[10,24129,24130],{},"用神经网络（策略网络）近似策略函数",[10,24132,24133],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[10,24135,24136],{},[1444,24137],{"alt":14,"src":24138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[10,24140,24141],{},[1444,24142],{"alt":14,"src":24143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[10,24145,24146],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[10,24148,24149],{},[1444,24150],{"alt":14,"src":24151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[10,24153,24154],{},[1444,24155],{"alt":14,"src":24156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[10,24158,24159],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[10,24161,24162],{},[1444,24163],{"alt":14,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[10,24166,24167],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[10,24169,24170],{},[1444,24171],{"alt":14,"src":24172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[10,24174,24175],{},"改进theta要用到策略梯度算法",[10,24177,24178],{},[1444,24179],{"alt":14,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[10,24182,24183],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[10,24185,24186],{},[1444,24187],{"alt":14,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[10,24190,24191],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[10,24193,24194],{},[1444,24195],{"alt":14,"src":24196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[10,24198,24199],{},[1444,24200],{"alt":14,"src":24201},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[10,24203,24204],{},"梯度公式总结：",[10,24206,24207],{},[1444,24208],{"alt":14,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[10,24211,24212],{},"两个公式的分别应用场景：",[10,24214,24215],{},"对于离散的动作：",[10,24217,24218],{},[1444,24219],{"alt":14,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[10,24222,24223],{},"对于连续的动作：",[10,24225,24226],{},[1444,24227],{"alt":14,"src":24228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[10,24230,24231],{},[1444,24232],{"alt":14,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[37,24235,24237],{"id":24236},"_42概率梯度算法总结","4.2.概率梯度算法总结",[10,24239,24240],{},"使用蒙特卡洛来近似计算策略梯度",[10,24242,24243],{},"蒙特卡洛法的解释如下：",[10,24245,24246],{},[1444,24247],{"alt":14,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[10,24250,24251],{},[1444,24252],{"alt":14,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[10,24255,24256],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[49,24258,24259],{},[52,24260,24261],{},"方法一：reinforce算法",[10,24263,24264],{},[1444,24265],{"alt":14,"src":24266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[10,24268,24269],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[49,24271,24272],{"start":15},[52,24273,24274],{},"方法二：actor-critic算法",[10,24276,24277],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[10,24279,24280],{},"两个网络的构建：",[10,24282,24283],{},[1444,24284],{"alt":14,"src":24285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[10,24287,24288],{},"actor网路：",[10,24290,24291],{},[1444,24292],{"alt":14,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[10,24295,24296],{},"critic网络",[10,24298,24299],{},[1444,24300],{"alt":14,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[49,24303,24304],{"start":1161},[52,24305,24306],{},"网络的训练",[10,24308,24309],{},"网络描述",[10,24311,24312],{},[1444,24313],{"alt":14,"src":24314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[10,24316,24317],{},[1444,24318],{"alt":14,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[10,24321,24322],{},"TD算法更新梯度：",[10,24324,24325],{},[1444,24326],{"alt":14,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[10,24329,24330],{},"策略网络更新梯度：",[10,24332,24333],{},[1444,24334],{"alt":14,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[10,24337,24338],{},"训练整个流程的具体描述：",[10,24340,24341,24344,24345],{},[1444,24342],{"alt":14,"src":24343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1444,24346],{"alt":14,"src":24347},"..\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":24349},[24350,24351],{"id":24126,"depth":15,"text":24127},{"id":24236,"depth":15,"text":24237},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24118,"description":14},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24358,"title":24359,"body":24360,"description":24367,"extension":18,"meta":24417,"navigation":21,"path":24418,"seo":24419,"stem":24420,"__hash__":24421},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24361,"toc":24413},[24362,24365,24368,24372,24375,24380,24384,24387,24392,24395,24400,24405,24408],[33,24363,24359],{"id":24364},"_5alphago算法",[10,24366,24367],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[37,24369,24371],{"id":24370},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[10,24373,24374],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[10,24376,24377],{},[1444,24378],{"alt":14,"src":24379},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[37,24381,24383],{"id":24382},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[10,24385,24386],{},"采用强化学习的方式训练策略网络",[10,24388,24389],{},[1444,24390],{"alt":14,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[10,24393,24394],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[10,24396,24397],{},[1444,24398],{"alt":14,"src":24399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[10,24401,24402],{},[1444,24403],{"alt":14,"src":24404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[10,24406,24407],{},"强化学习训练策略网络的总结：",[10,24409,24410],{},[1444,24411],{"alt":14,"src":24412},"..\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":24414},[24415,24416],{"id":24370,"depth":15,"text":24371},{"id":24382,"depth":15,"text":24383},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24359,"description":24367},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24423,"title":24424,"body":24425,"description":24432,"extension":18,"meta":24435,"navigation":21,"path":24436,"seo":24437,"stem":24438,"__hash__":24439},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24426,"toc":24433},[24427,24430],[33,24428,24424],{"id":24429},"_6价值网络",[10,24431,24432],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":14,"searchDepth":15,"depth":15,"links":24434},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24424,"description":24432},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24441,"title":24442,"body":24443,"description":24447,"extension":18,"meta":24448,"navigation":21,"path":24449,"seo":24450,"stem":24451,"__hash__":24452},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24444,"toc":24445},[],{"title":14,"searchDepth":15,"depth":15,"links":24446},[],"记录自己的强化学习笔记。",{"category":23362},"\u002Fwiki\u002F2025-12-04",{"title":24442,"description":24447},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24454,"title":24455,"body":24456,"description":23360,"extension":18,"meta":24495,"navigation":21,"path":24496,"seo":24497,"stem":24498,"__hash__":24499},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24457,"toc":24493},[24458,24461,24464,24470,24473,24479,24482,24487,24490],[33,24459,24455],{"id":24460},"_1-项目概览与官方资源",[10,24462,24463],{},"官方文档：",[10,24465,24466],{},[344,24467,24468],{"href":24468,"rel":24469},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23849],[10,24471,24472],{},"官方代码仓库：",[10,24474,24475],{},[344,24476,24477],{"href":24477,"rel":24478},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23849],[10,24480,24481],{},"复现大体流程：",[10,24483,24484],{},[1444,24485],{"alt":14,"src":24486},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[10,24488,24489],{},"本教程的目标是打通这条链路：",[10,24491,24492],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":14,"searchDepth":15,"depth":15,"links":24494},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24455,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24501,"title":24502,"body":24503,"description":23360,"extension":18,"meta":24619,"navigation":21,"path":24620,"seo":24621,"stem":24622,"__hash__":24623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24504,"toc":24614},[24505,24508,24512,24515,24522,24526,24529,24538,24548,24552,24582,24585,24611],[33,24506,24502],{"id":24507},"_2-环境准备与设备连接",[37,24509,24511],{"id":24510},"_21-系统与环境","2.1 系统与环境",[10,24513,24514],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[10,24516,24517,24518,24521],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[92,24519,24520],{},"lerobot"," 依赖。",[37,24523,24525],{"id":24524},"_22-机械臂串口识别","2.2 机械臂串口识别",[10,24527,24528],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[86,24530,24532],{"className":23806,"code":24531,"language":23808,"meta":14,"style":14},"lerobot-find-out\n",[92,24533,24534],{"__ignoreMap":14},[95,24535,24536],{"class":97,"line":98},[95,24537,24531],{"class":1945},[10,24539,24540,24541,318,24544,24547],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[92,24542,24543],{},"\u002Fdev\u002FttyACM0",[92,24545,24546],{},"\u002Fdev\u002FttyACM1","）。",[37,24549,24551],{"id":24550},"_23-串口授权","2.3 串口授权",[86,24553,24555],{"className":23806,"code":24554,"language":23808,"meta":14,"style":14},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[92,24556,24557,24571],{"__ignoreMap":14},[95,24558,24559,24562,24565,24568],{"class":97,"line":98},[95,24560,24561],{"class":1945},"sudo",[95,24563,24564],{"class":210}," chmod",[95,24566,24567],{"class":154}," 666",[95,24569,24570],{"class":210}," \u002Fdev\u002FttyACM0\n",[95,24572,24573,24575,24577,24579],{"class":97,"line":15},[95,24574,24561],{"class":1945},[95,24576,24564],{"class":210},[95,24578,24567],{"class":154},[95,24580,24581],{"class":210}," \u002Fdev\u002FttyACM1\n",[10,24583,24584],{},"说明：",[1113,24586,24587,24592,24598,24608],{},[52,24588,24589,24591],{},[92,24590,24561],{},"：以 root 权限执行命令。",[52,24593,24594,24597],{},[92,24595,24596],{},"chmod","：修改设备节点权限。",[52,24599,24600,24603,24604,24607],{},[92,24601,24602],{},"666","：",[92,24605,24606],{},"rw-rw-rw-","，所有用户可读写。",[52,24609,24610],{},"串口号必须替换为你机器上的真实端口。",[5109,24612,24613],{},"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":24615},[24616,24617,24618],{"id":24510,"depth":15,"text":24511},{"id":24524,"depth":15,"text":24525},{"id":24550,"depth":15,"text":24551},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24502,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24625,"title":24626,"body":24627,"description":23360,"extension":18,"meta":24788,"navigation":21,"path":24789,"seo":24790,"stem":24791,"__hash__":24792},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24628,"toc":24784},[24629,24633,24637,24643,24646,24703,24706,24710,24713,24781],[33,24630,24632],{"id":24631},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[37,24634,24636],{"id":24635},"_31-配置电机-id","3.1 配置电机 ID",[10,24638,24639,24640,24642],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[92,24641,323],{},"，需要改成机械臂链路里不冲突的编号。",[10,24644,24645],{},"方式一：用 LeRobot 命令逐步写入。",[86,24647,24649],{"className":23806,"code":24648,"language":23808,"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",[92,24650,24651,24656,24664,24671,24676,24680,24685,24691,24698],{"__ignoreMap":14},[95,24652,24653],{"class":97,"line":98},[95,24654,24655],{"class":164},"# 主臂舵机配置 ID\n",[95,24657,24658,24661],{"class":97,"line":15},[95,24659,24660],{"class":1945},"lerobot-setup-motors",[95,24662,24663],{"class":154}," \\\n",[95,24665,24666,24669],{"class":97,"line":1161},[95,24667,24668],{"class":154},"  --teleop.type=so101_leader",[95,24670,24663],{"class":154},[95,24672,24673],{"class":97,"line":1176},[95,24674,24675],{"class":154},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[95,24677,24678],{"class":97,"line":1182},[95,24679,2382],{"emptyLinePlaceholder":21},[95,24681,24682],{"class":97,"line":1196},[95,24683,24684],{"class":164},"# 从臂舵机配置 ID\n",[95,24686,24687,24689],{"class":97,"line":1202},[95,24688,24660],{"class":1945},[95,24690,24663],{"class":154},[95,24692,24693,24696],{"class":97,"line":1293},[95,24694,24695],{"class":154},"  --robot.type=so101_follower",[95,24697,24663],{"class":154},[95,24699,24700],{"class":97,"line":1299},[95,24701,24702],{"class":154},"  --robot.port=\u002Fdev\u002FttyACM1\n",[10,24704,24705],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[37,24707,24709],{"id":24708},"_32-机械臂校准","3.2 机械臂校准",[10,24711,24712],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[86,24714,24716],{"className":23806,"code":24715,"language":23808,"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",[92,24717,24718,24723,24730,24736,24743,24748,24752,24757,24763,24769,24776],{"__ignoreMap":14},[95,24719,24720],{"class":97,"line":98},[95,24721,24722],{"class":164},"# 主臂校准\n",[95,24724,24725,24728],{"class":97,"line":15},[95,24726,24727],{"class":1945},"lerobot-calibrate",[95,24729,24663],{"class":154},[95,24731,24732,24734],{"class":97,"line":1161},[95,24733,24668],{"class":154},[95,24735,24663],{"class":154},[95,24737,24738,24741],{"class":97,"line":1176},[95,24739,24740],{"class":154},"  --teleop.port=\u002Fdev\u002FttyACM0",[95,24742,24663],{"class":154},[95,24744,24745],{"class":97,"line":1182},[95,24746,24747],{"class":154},"  --teleop.id=my_awesome_leader_arm\n",[95,24749,24750],{"class":97,"line":1196},[95,24751,2382],{"emptyLinePlaceholder":21},[95,24753,24754],{"class":97,"line":1202},[95,24755,24756],{"class":164},"# 从臂校准\n",[95,24758,24759,24761],{"class":97,"line":1293},[95,24760,24727],{"class":1945},[95,24762,24663],{"class":154},[95,24764,24765,24767],{"class":97,"line":1299},[95,24766,24695],{"class":154},[95,24768,24663],{"class":154},[95,24770,24771,24774],{"class":97,"line":1311},[95,24772,24773],{"class":154},"  --robot.port=\u002Fdev\u002FttyACM1",[95,24775,24663],{"class":154},[95,24777,24778],{"class":97,"line":1594},[95,24779,24780],{"class":154},"  --robot.id=my_awesome_follower_arm\n",[5109,24782,24783],{},"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":24785},[24786,24787],{"id":24635,"depth":15,"text":24636},{"id":24708,"depth":15,"text":24709},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24626,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24794,"title":24795,"body":24796,"description":23360,"extension":18,"meta":24987,"navigation":21,"path":24988,"seo":24989,"stem":24990,"__hash__":24991},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24797,"toc":24983},[24798,24801,24805,24852,24856,24869,24932,24935,24980],[33,24799,24795],{"id":24800},"_4-遥操与相机接入",[37,24802,24804],{"id":24803},"_41-不带相机遥操","4.1 不带相机遥操",[86,24806,24808],{"className":23806,"code":24807,"language":23808,"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",[92,24809,24810,24817,24823,24829,24836,24842,24848],{"__ignoreMap":14},[95,24811,24812,24815],{"class":97,"line":98},[95,24813,24814],{"class":1945},"lerobot-teleoperate",[95,24816,24663],{"class":154},[95,24818,24819,24821],{"class":97,"line":15},[95,24820,24695],{"class":154},[95,24822,24663],{"class":154},[95,24824,24825,24827],{"class":97,"line":1161},[95,24826,24773],{"class":154},[95,24828,24663],{"class":154},[95,24830,24831,24834],{"class":97,"line":1176},[95,24832,24833],{"class":154},"  --robot.id=my_awesome_follower_arm",[95,24835,24663],{"class":154},[95,24837,24838,24840],{"class":97,"line":1182},[95,24839,24668],{"class":154},[95,24841,24663],{"class":154},[95,24843,24844,24846],{"class":97,"line":1196},[95,24845,24740],{"class":154},[95,24847,24663],{"class":154},[95,24849,24850],{"class":97,"line":1202},[95,24851,24747],{"class":154},[37,24853,24855],{"id":24854},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[86,24857,24859],{"className":23806,"code":24858,"language":23808,"meta":14,"style":14},"lerobot-find-cameras opencv\n",[92,24860,24861],{"__ignoreMap":14},[95,24862,24863,24866],{"class":97,"line":98},[95,24864,24865],{"class":1945},"lerobot-find-cameras",[95,24867,24868],{"class":210}," opencv\n",[86,24870,24872],{"className":23806,"code":24871,"language":23808,"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",[92,24873,24874,24880,24886,24892,24898,24908,24914,24920,24927],{"__ignoreMap":14},[95,24875,24876,24878],{"class":97,"line":98},[95,24877,24814],{"class":1945},[95,24879,24663],{"class":154},[95,24881,24882,24884],{"class":97,"line":15},[95,24883,24695],{"class":154},[95,24885,24663],{"class":154},[95,24887,24888,24890],{"class":97,"line":1161},[95,24889,24773],{"class":154},[95,24891,24663],{"class":154},[95,24893,24894,24896],{"class":97,"line":1176},[95,24895,24833],{"class":154},[95,24897,24663],{"class":154},[95,24899,24900,24903,24906],{"class":97,"line":1182},[95,24901,24902],{"class":154},"  --robot.cameras=",[95,24904,24905],{"class":210},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[95,24907,24663],{"class":154},[95,24909,24910,24912],{"class":97,"line":1196},[95,24911,24668],{"class":154},[95,24913,24663],{"class":154},[95,24915,24916,24918],{"class":97,"line":1202},[95,24917,24740],{"class":154},[95,24919,24663],{"class":154},[95,24921,24922,24925],{"class":97,"line":1293},[95,24923,24924],{"class":154},"  --teleop.id=my_awesome_leader_arm",[95,24926,24663],{"class":154},[95,24928,24929],{"class":97,"line":1299},[95,24930,24931],{"class":154},"  --display_data=true\n",[10,24933,24934],{},"相机参数说明：",[1113,24936,24937,24943,24949,24958,24968,24974],{},[52,24938,24939,24942],{},[92,24940,24941],{},"front","：相机名称。",[52,24944,24945,24948],{},[92,24946,24947],{},"type: opencv","：相机驱动类型。",[52,24950,24951,24954,24955,24547],{},[92,24952,24953],{},"index_or_path","：设备编号或设备路径（如 ",[92,24956,24957],{},"\u002Fdev\u002Fvideo4",[52,24959,24960,24963,24964,24967],{},[92,24961,24962],{},"width"," \u002F ",[92,24965,24966],{},"height","：图像分辨率。",[52,24969,24970,24973],{},[92,24971,24972],{},"fps","：采样帧率。",[52,24975,24976,24979],{},[92,24977,24978],{},"--display_data=true","：启用实时可视化。",[5109,24981,24982],{},"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":24984},[24985,24986],{"id":24803,"depth":15,"text":24804},{"id":24854,"depth":15,"text":24855},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24795,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24993,"title":24994,"body":24995,"description":23360,"extension":18,"meta":25167,"navigation":21,"path":25168,"seo":25169,"stem":25170,"__hash__":25171},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24996,"toc":25162},[24997,25001,25005,25010,25015,25018,25060,25066,25070,25119,25124,25128,25131,25139,25144,25149,25154,25159],[33,24998,25000],{"id":24999},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[37,25002,25004],{"id":25003},"_51-生成访问令牌","5.1 生成访问令牌",[10,25006,25007],{},[1444,25008],{"alt":14,"src":25009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[10,25011,25012],{},[1444,25013],{"alt":14,"src":25014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[10,25016,25017],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[86,25019,25021],{"className":23806,"code":25020,"language":23808,"meta":14,"style":14},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[92,25022,25023,25036],{"__ignoreMap":14},[95,25024,25025,25028,25031,25033],{"class":97,"line":98},[95,25026,25027],{"class":101},"export",[95,25029,25030],{"class":105}," HF_TOKEN",[95,25032,151],{"class":101},[95,25034,25035],{"class":210},"\"your_huggingface_token\"\n",[95,25037,25038,25041,25044,25047,25050,25052,25055,25057],{"class":97,"line":15},[95,25039,25040],{"class":1945},"hf",[95,25042,25043],{"class":210}," auth",[95,25045,25046],{"class":210}," login",[95,25048,25049],{"class":154}," --token",[95,25051,9707],{"class":210},[95,25053,25054],{"class":105},"$HF_TOKEN",[95,25056,357],{"class":210},[95,25058,25059],{"class":154}," --add-to-git-credential\n",[10,25061,25062,25065],{},[92,25063,25064],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[37,25067,25069],{"id":25068},"_52-验证登录","5.2 验证登录",[86,25071,25073],{"className":23806,"code":25072,"language":23808,"meta":14,"style":14},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[92,25074,25075,25106],{"__ignoreMap":14},[95,25076,25077,25080,25082,25085,25087,25089,25092,25095,25098,25101,25104],{"class":97,"line":98},[95,25078,25079],{"class":105},"HF_USER",[95,25081,151],{"class":101},[95,25083,25084],{"class":105},"$(",[95,25086,25040],{"class":1945},[95,25088,25043],{"class":210},[95,25090,25091],{"class":210}," whoami",[95,25093,25094],{"class":101}," |",[95,25096,25097],{"class":1945}," head",[95,25099,25100],{"class":154}," -n",[95,25102,25103],{"class":154}," 1",[95,25105,112],{"class":105},[95,25107,25108,25111,25113,25116],{"class":97,"line":15},[95,25109,25110],{"class":154},"echo",[95,25112,9707],{"class":210},[95,25114,25115],{"class":105},"$HF_USER",[95,25117,25118],{"class":210},"\"\n",[10,25120,25121],{},[1444,25122],{"alt":14,"src":25123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[37,25125,25127],{"id":25126},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[10,25129,25130],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1113,25132,25133,25136],{},[52,25134,25135],{},"Dataset Repo（用于上传演示数据）",[52,25137,25138],{},"Model Repo（用于上传训练后的 ACT 权重）",[10,25140,25141],{},[1444,25142],{"alt":14,"src":25143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[10,25145,25146],{},[1444,25147],{"alt":14,"src":25148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[10,25150,25151],{},[1444,25152],{"alt":14,"src":25153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[10,25155,25156],{},[1444,25157],{"alt":14,"src":25158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5109,25160,25161],{},"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":25163},[25164,25165,25166],{"id":25003,"depth":15,"text":25004},{"id":25068,"depth":15,"text":25069},{"id":25126,"depth":15,"text":25127},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24994,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25173,"title":25174,"body":25175,"description":23360,"extension":18,"meta":25372,"navigation":21,"path":25373,"seo":25374,"stem":25375,"__hash__":25376},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25176,"toc":25367},[25177,25181,25185,25281,25289,25294,25298,25314,25317,25321,25364],[33,25178,25180],{"id":25179},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[37,25182,25184],{"id":25183},"_61-录制示教数据","6.1 录制示教数据",[86,25186,25188],{"className":23806,"code":25187,"language":23808,"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",[92,25189,25190,25197,25203,25209,25215,25224,25230,25236,25242,25249,25259,25266,25276],{"__ignoreMap":14},[95,25191,25192,25195],{"class":97,"line":98},[95,25193,25194],{"class":1945},"lerobot-record",[95,25196,24663],{"class":154},[95,25198,25199,25201],{"class":97,"line":15},[95,25200,24695],{"class":154},[95,25202,24663],{"class":154},[95,25204,25205,25207],{"class":97,"line":1161},[95,25206,24773],{"class":154},[95,25208,24663],{"class":154},[95,25210,25211,25213],{"class":97,"line":1176},[95,25212,24833],{"class":154},[95,25214,24663],{"class":154},[95,25216,25217,25219,25222],{"class":97,"line":1182},[95,25218,24902],{"class":154},[95,25220,25221],{"class":210},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[95,25223,24663],{"class":154},[95,25225,25226,25228],{"class":97,"line":1196},[95,25227,24668],{"class":154},[95,25229,24663],{"class":154},[95,25231,25232,25234],{"class":97,"line":1202},[95,25233,24740],{"class":154},[95,25235,24663],{"class":154},[95,25237,25238,25240],{"class":97,"line":1293},[95,25239,24924],{"class":154},[95,25241,24663],{"class":154},[95,25243,25244,25247],{"class":97,"line":1299},[95,25245,25246],{"class":154},"  --display_data=true",[95,25248,24663],{"class":154},[95,25250,25251,25254,25257],{"class":97,"line":1311},[95,25252,25253],{"class":154},"  --dataset.repo_id=",[95,25255,25256],{"class":210},"\"Embodied-AI-6\u002Fso101_test\"",[95,25258,24663],{"class":154},[95,25260,25261,25264],{"class":97,"line":1594},[95,25262,25263],{"class":154},"  --dataset.num_episodes=10",[95,25265,24663],{"class":154},[95,25267,25268,25271,25274],{"class":97,"line":1599},[95,25269,25270],{"class":154},"  --dataset.single_task=",[95,25272,25273],{"class":210},"\"Grab the green cube\"",[95,25275,24663],{"class":154},[95,25277,25278],{"class":97,"line":1605},[95,25279,25280],{"class":154},"  --resume=true\n",[1113,25282,25283],{},[52,25284,25285,25288],{},[92,25286,25287],{},"--resume=true","：已有同一数据集时继续追加 episode。",[10,25290,25291],{},[1444,25292],{"alt":14,"src":25293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[37,25295,25297],{"id":25296},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[86,25299,25301],{"className":23806,"code":25300,"language":23808,"meta":14,"style":14},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[92,25302,25303],{"__ignoreMap":14},[95,25304,25305,25308,25311],{"class":97,"line":98},[95,25306,25307],{"class":1945},"rm",[95,25309,25310],{"class":154}," -rf",[95,25312,25313],{"class":210}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[10,25315,25316],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[37,25318,25320],{"id":25319},"_63-回放指定-episode","6.3 回放指定 episode",[86,25322,25324],{"className":23806,"code":25323,"language":23808,"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",[92,25325,25326,25333,25339,25345,25351,25359],{"__ignoreMap":14},[95,25327,25328,25331],{"class":97,"line":98},[95,25329,25330],{"class":1945},"lerobot-replay",[95,25332,24663],{"class":154},[95,25334,25335,25337],{"class":97,"line":15},[95,25336,24695],{"class":154},[95,25338,24663],{"class":154},[95,25340,25341,25343],{"class":97,"line":1161},[95,25342,24773],{"class":154},[95,25344,24663],{"class":154},[95,25346,25347,25349],{"class":97,"line":1176},[95,25348,24833],{"class":154},[95,25350,24663],{"class":154},[95,25352,25353,25355,25357],{"class":97,"line":1182},[95,25354,25253],{"class":154},[95,25356,25256],{"class":210},[95,25358,24663],{"class":154},[95,25360,25361],{"class":97,"line":1196},[95,25362,25363],{"class":154},"  --dataset.episode=0\n",[5109,25365,25366],{},"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":25368},[25369,25370,25371],{"id":25183,"depth":15,"text":25184},{"id":25296,"depth":15,"text":25297},{"id":25319,"depth":15,"text":25320},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25174,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25378,"title":25379,"body":25380,"description":23360,"extension":18,"meta":25508,"navigation":21,"path":25509,"seo":25510,"stem":25511,"__hash__":25512},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25381,"toc":25506},[25382,25386,25449,25452,25499,25504],[33,25383,25385],{"id":25384},"_7-act-模型训练","7. ACT 模型训练",[86,25387,25389],{"className":23806,"code":25388,"language":23808,"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",[92,25390,25391,25398,25406,25413,25420,25427,25434,25441],{"__ignoreMap":14},[95,25392,25393,25396],{"class":97,"line":98},[95,25394,25395],{"class":1945},"lerobot-train",[95,25397,24663],{"class":154},[95,25399,25400,25402,25404],{"class":97,"line":15},[95,25401,25253],{"class":154},[95,25403,25256],{"class":210},[95,25405,24663],{"class":154},[95,25407,25408,25411],{"class":97,"line":1161},[95,25409,25410],{"class":154},"  --policy.type=act",[95,25412,24663],{"class":154},[95,25414,25415,25418],{"class":97,"line":1176},[95,25416,25417],{"class":154},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[95,25419,24663],{"class":154},[95,25421,25422,25425],{"class":97,"line":1182},[95,25423,25424],{"class":154},"  --job_name=act_so101_test",[95,25426,24663],{"class":154},[95,25428,25429,25432],{"class":97,"line":1196},[95,25430,25431],{"class":154},"  --policy.device=cuda",[95,25433,24663],{"class":154},[95,25435,25436,25439],{"class":97,"line":1202},[95,25437,25438],{"class":154},"  --wandb.enable=false",[95,25440,24663],{"class":154},[95,25442,25443,25446],{"class":97,"line":1293},[95,25444,25445],{"class":154},"  --policy.repo_id=",[95,25447,25448],{"class":210},"\"Embodied-AI-6\u002Flerobot_new\"\n",[10,25450,25451],{},"参数说明：",[1113,25453,25454,25460,25466,25472,25478,25487,25493],{},[52,25455,25456,25459],{},[92,25457,25458],{},"--dataset.repo_id","：训练数据集仓库。",[52,25461,25462,25465],{},[92,25463,25464],{},"--policy.type=act","：策略模型类型为 ACT。",[52,25467,25468,25471],{},[92,25469,25470],{},"--output_dir","：本地训练输出目录。",[52,25473,25474,25477],{},[92,25475,25476],{},"--job_name","：训练任务名称。",[52,25479,25480,25483,25484,24547],{},[92,25481,25482],{},"--policy.device","：训练设备（如 ",[92,25485,25486],{},"cuda",[52,25488,25489,25492],{},[92,25490,25491],{},"--wandb.enable","：是否启用 WandB 可视化。",[52,25494,25495,25498],{},[92,25496,25497],{},"--policy.repo_id","：训练后模型推送目标仓库。",[10,25500,25501],{},[1444,25502],{"alt":14,"src":25503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5109,25505,25366],{},{"title":14,"searchDepth":15,"depth":15,"links":25507},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25379,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25514,"title":25515,"body":25516,"description":23360,"extension":18,"meta":25603,"navigation":21,"path":25604,"seo":25605,"stem":25606,"__hash__":25607},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25517,"toc":25601},[25518,25521,25524,25591,25599],[33,25519,25515],{"id":25520},"_8-策略部署与自动采集",[10,25522,25523],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[86,25525,25527],{"className":23806,"code":25526,"language":23808,"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",[92,25528,25529,25535,25541,25547,25555,25561,25568,25576,25584],{"__ignoreMap":14},[95,25530,25531,25533],{"class":97,"line":98},[95,25532,25194],{"class":1945},[95,25534,24663],{"class":154},[95,25536,25537,25539],{"class":97,"line":15},[95,25538,24695],{"class":154},[95,25540,24663],{"class":154},[95,25542,25543,25545],{"class":97,"line":1161},[95,25544,24773],{"class":154},[95,25546,24663],{"class":154},[95,25548,25549,25551,25553],{"class":97,"line":1176},[95,25550,24902],{"class":154},[95,25552,25221],{"class":210},[95,25554,24663],{"class":154},[95,25556,25557,25559],{"class":97,"line":1182},[95,25558,24833],{"class":154},[95,25560,24663],{"class":154},[95,25562,25563,25566],{"class":97,"line":1196},[95,25564,25565],{"class":154},"  --display_data=false",[95,25567,24663],{"class":154},[95,25569,25570,25572,25574],{"class":97,"line":1202},[95,25571,25253],{"class":154},[95,25573,25256],{"class":210},[95,25575,24663],{"class":154},[95,25577,25578,25580,25582],{"class":97,"line":1293},[95,25579,25270],{"class":154},[95,25581,25273],{"class":210},[95,25583,24663],{"class":154},[95,25585,25586,25589],{"class":97,"line":1299},[95,25587,25588],{"class":154},"  --policy.path=",[95,25590,25448],{"class":210},[1113,25592,25593],{},[52,25594,25595,25598],{},[92,25596,25597],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5109,25600,25366],{},{"title":14,"searchDepth":15,"depth":15,"links":25602},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25515,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25609,"title":25610,"body":25611,"description":23360,"extension":18,"meta":25640,"navigation":21,"path":25641,"seo":25642,"stem":25643,"__hash__":25644},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25612,"toc":25638},[25613,25617,25620,25626,25629,25635],[33,25614,25616],{"id":25615},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[10,25618,25619],{},"项目地址：",[10,25621,25622],{},[344,25623,25624],{"href":25624,"rel":25625},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23849],[10,25627,25628],{},"参考教程：",[10,25630,25631],{},[344,25632,25633],{"href":25633,"rel":25634},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23849],[10,25636,25637],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":14,"searchDepth":15,"depth":15,"links":25639},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25610,"description":23360},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25646,"title":25647,"body":25648,"description":25652,"extension":18,"meta":25653,"navigation":21,"path":25654,"seo":25655,"stem":25656,"__hash__":25657},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25649,"toc":25650},[],{"title":14,"searchDepth":15,"depth":15,"links":25651},[],"act复现",{"category":23362},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25647,"description":25652},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25659,"title":25660,"body":25661,"description":14,"extension":18,"meta":25963,"navigation":21,"path":25964,"seo":25965,"stem":25966,"__hash__":25967},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25662,"toc":25955},[25663,25666,25670,25680,25687,25694,25697,25704,25707,25710,25714,25726,25730,25776,25779,25782,25785,25788,25791,25795,25833,25839,25843,25897,25902,25905,25908,25913,25916,25921,25924,25927,25931,25934,25937,25941],[33,25664,25660],{"id":25665},"_1简介",[66,25667,25669],{"id":25668},"_11什么是-docker","1.1什么是 Docker？",[10,25671,25672,25673,25676,25677],{},"Docker 是一个开源的 ",[255,25674,25675],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[255,25678,25679],{},"一次构建，到处运行。",[10,25681,25682,25683,25686],{},"“ ",[255,25684,25685],{},"一次构建，到处运行"," ”也就是说：",[49,25688,25689],{},[52,25690,25691],{},[255,25692,25693],{},"之前：",[10,25695,25696],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[49,25698,25699],{},[52,25700,25701],{},[255,25702,25703],{},"使用docker后：",[10,25705,25706],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[10,25708,25709],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[66,25711,25713],{"id":25712},"_12它是怎么工作的","1.2.它是怎么工作的？",[1113,25715,25716,25719],{},[52,25717,25718],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[52,25720,25721,25722,25725],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[255,25723,25724],{},"无论在哪运行都一样稳定"," 。",[66,25727,25729],{"id":25728},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[243,25731,25732,25742],{},[246,25733,25734],{},[249,25735,25736,25739],{},[252,25737,25738],{"align":23720},"概念",[252,25740,25741],{"align":23720},"解释",[290,25743,25744,25752,25760,25768],{},[249,25745,25746,25749],{},[295,25747,25748],{"align":23720},"镜像",[295,25750,25751],{"align":23720},"Image，运行容器的模板，像是一个应用快照",[249,25753,25754,25757],{},[295,25755,25756],{"align":23720},"容器",[295,25758,25759],{"align":23720},"Container，运行中的镜像实例，有自己的文件系统、网络等",[249,25761,25762,25765],{},[295,25763,25764],{"align":23720},"Dockerfile",[295,25766,25767],{"align":23720},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[249,25769,25770,25773],{},[295,25771,25772],{"align":23720},"仓库",[295,25774,25775],{"align":23720},"Registry，存放镜像的地方，比如 Docker Hub",[10,25777,25778],{},"抽象化理解:",[10,25780,25781],{},"Docker镜像≈C++类",[10,25783,25784],{},"Docker容器≈C++类实例(即对象)",[10,25786,25787],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[10,25789,25790],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[66,25792,25794],{"id":25793},"_14类比理解","1.4.类比理解",[243,25796,25797,25807],{},[246,25798,25799],{},[249,25800,25801,25804],{},[252,25802,25803],{"align":23720},"传统部署",[252,25805,25806],{"align":23720},"Docker部署",[290,25808,25809,25817,25825],{},[249,25810,25811,25814],{},[295,25812,25813],{"align":23720},"手动安装依赖、调试版本不一致问题",[295,25815,25816],{"align":23720},"一次打包环境和代码",[249,25818,25819,25822],{},[295,25820,25821],{"align":23720},"程序“裸奔”跑在系统上",[295,25823,25824],{"align":23720},"程序“穿着容器”隔离运行",[249,25826,25827,25830],{},[295,25828,25829],{"align":23720},"容易“在我电脑上能跑”",[295,25831,25832],{"align":23720},"保证“无论在哪都能跑”",[10,25834,25835,25836],{},"就像快递包裹： ",[255,25837,25838],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[66,25840,25842],{"id":25841},"_15docker-的核心优势","1.5.Docker 的核心优势",[243,25844,25845,25855],{},[246,25846,25847],{},[249,25848,25849,25852],{},[252,25850,25851],{"align":23720},"优势",[252,25853,25854],{"align":23720},"说明",[290,25856,25857,25865,25873,25881,25889],{},[249,25858,25859,25862],{},[295,25860,25861],{"align":23720},"轻量级",[295,25863,25864],{"align":23720},"基于系统内核共享，启动速度快，占资源少",[249,25866,25867,25870],{},[295,25868,25869],{"align":23720},"跨平台",[295,25871,25872],{"align":23720},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[249,25874,25875,25878],{},[295,25876,25877],{"align":23720},"易于迁移部署",[295,25879,25880],{"align":23720},"应用和环境一起封装，不怕依赖不一致",[249,25882,25883,25886],{},[295,25884,25885],{"align":23720},"易于版本控制",[295,25887,25888],{"align":23720},"镜像版本可控，支持回滚",[249,25890,25891,25894],{},[295,25892,25893],{"align":23720},"生态丰富",[295,25895,25896],{"align":23720},"Docker Hub 上有成千上万的现成镜像可用",[49,25898,25899],{},[52,25900,25901],{},"在Linux上可以几乎实现无性能损失。",[10,25903,25904],{},"docker里的发行版和本机共用Linux内核。",[10,25906,25907],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[49,25909,25910],{},[52,25911,25912],{},"可以快速部署在绝大多数Linux发行版",[10,25914,25915],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[49,25917,25918],{},[52,25919,25920],{},"配置环境简单",[10,25922,25923],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[10,25925,25926],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[49,25928,25929],{},[52,25930,25893],{},[10,25932,25933],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[10,25935,25936],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[66,25938,25940],{"id":25939},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1113,25942,25943,25946,25949,25952],{},[52,25944,25945],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[52,25947,25948],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[52,25950,25951],{},"微服务架构：每个服务一个容器，灵活组合",[52,25953,25954],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":14,"searchDepth":15,"depth":15,"links":25956},[25957,25958,25959,25960,25961,25962],{"id":25668,"depth":1161,"text":25669},{"id":25712,"depth":1161,"text":25713},{"id":25728,"depth":1161,"text":25729},{"id":25793,"depth":1161,"text":25794},{"id":25841,"depth":1161,"text":25842},{"id":25939,"depth":1161,"text":25940},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25660,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25969,"title":25970,"body":25971,"description":14,"extension":18,"meta":26704,"navigation":21,"path":26705,"seo":26706,"stem":26707,"__hash__":26708},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25972,"toc":26699},[25973,25976,25980,25983,25986,25992,25998,26002,26011,26014,26071,26074,26125,26128,26211,26214,26251,26255,26266,26279,26286,26289,26369,26372,26422,26425,26448,26452,26459,26462,26478,26484,26487,26503,26509,26512,26528,26542,26548,26568,26574,26577,26589,26595,26598,26612,26618,26621,26641,26646,26649,26652,26656,26659,26662,26665,26672,26675,26678,26681,26686,26691,26696],[33,25974,25970],{"id":25975},"_2安装docker",[66,25977,25979],{"id":25978},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[10,25981,25982],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[10,25984,25985],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[10,25987,25988],{},[344,25989,25990],{"href":25990,"rel":25991},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23849],[10,25993,25994],{},[344,25995,25996],{"href":25996,"rel":25997},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23849],[21981,25999,26001],{"id":26000},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[10,26003,26004,26005,26010],{},"以下内容根据 ",[344,26006,26009],{"href":26007,"rel":26008},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23849],"官方文档"," 修改而来。",[10,26012,26013],{},"如果你过去安装过 docker，先删掉：",[86,26015,26017],{"className":23806,"code":26016,"language":23808,"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",[92,26018,26019],{"__ignoreMap":14},[95,26020,26021,26023,26026,26029,26032,26035,26038,26041,26044,26047,26050,26053,26056,26059,26062,26065,26068],{"class":97,"line":98},[95,26022,3007],{"class":101},[95,26024,26025],{"class":105}," pkg ",[95,26027,26028],{"class":101},"in",[95,26030,26031],{"class":210}," docker.io",[95,26033,26034],{"class":210}," docker-doc",[95,26036,26037],{"class":210}," docker-compose",[95,26039,26040],{"class":210}," docker-compose-v2",[95,26042,26043],{"class":210}," podman-docker",[95,26045,26046],{"class":210}," containerd",[95,26048,26049],{"class":210}," runc",[95,26051,26052],{"class":105},"; ",[95,26054,26055],{"class":101},"do",[95,26057,26058],{"class":1945}," sudo",[95,26060,26061],{"class":210}," apt-get",[95,26063,26064],{"class":210}," remove",[95,26066,26067],{"class":105}," $pkg; ",[95,26069,26070],{"class":101},"done\n",[10,26072,26073],{},"首先安装依赖和GPG：",[86,26075,26079],{"className":26076,"code":26077,"language":26078,"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",[92,26080,26081,26086,26091,26096,26101,26106,26111,26115,26120],{"__ignoreMap":14},[95,26082,26083],{"class":97,"line":98},[95,26084,26085],{},"# Add Docker's official GPG key:\n",[95,26087,26088],{"class":97,"line":15},[95,26089,26090],{},"sudo apt-get update\n",[95,26092,26093],{"class":97,"line":1161},[95,26094,26095],{},"sudo apt-get install ca-certificates curl\n",[95,26097,26098],{"class":97,"line":1176},[95,26099,26100],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[95,26102,26103],{"class":97,"line":1182},[95,26104,26105],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[95,26107,26108],{"class":97,"line":1196},[95,26109,26110],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[95,26112,26113],{"class":97,"line":1202},[95,26114,2382],{"emptyLinePlaceholder":21},[95,26116,26117],{"class":97,"line":1293},[95,26118,26119],{},"# 如果上面这行报错就弄下面这行\n",[95,26121,26122],{"class":97,"line":1299},[95,26123,26124],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[10,26126,26127],{},"信任 Docker 的 GPG 公钥并添加仓库：",[86,26129,26131],{"className":23806,"code":26130,"language":23808,"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",[92,26132,26133,26138,26144,26161,26194],{"__ignoreMap":14},[95,26134,26135],{"class":97,"line":98},[95,26136,26137],{"class":164},"# Add the repository to Apt sources:\n",[95,26139,26140,26142],{"class":97,"line":15},[95,26141,25110],{"class":154},[95,26143,24663],{"class":154},[95,26145,26146,26149,26152,26155,26158],{"class":97,"line":1161},[95,26147,26148],{"class":210},"  \"deb [arch=$(",[95,26150,26151],{"class":1945},"dpkg",[95,26153,26154],{"class":154}," --print-architecture",[95,26156,26157],{"class":210},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[95,26159,26160],{"class":154},"\\\n",[95,26162,26163,26166,26168,26170,26173,26176,26178,26180,26183,26185,26187,26190,26192],{"class":97,"line":1176},[95,26164,26165],{"class":210},"  \"",[95,26167,25084],{"class":105},[95,26169,664],{"class":154},[95,26171,26172],{"class":210}," \u002Fetc\u002Fos-release",[95,26174,26175],{"class":105}," && ",[95,26177,25110],{"class":154},[95,26179,9707],{"class":210},[95,26181,26182],{"class":105},"$VERSION_CODENAME",[95,26184,357],{"class":210},[95,26186,535],{"class":105},[95,26188,26189],{"class":210},"\" stable\"",[95,26191,25094],{"class":101},[95,26193,24663],{"class":154},[95,26195,26196,26199,26202,26205,26208],{"class":97,"line":1182},[95,26197,26198],{"class":1945},"  sudo",[95,26200,26201],{"class":210}," tee",[95,26203,26204],{"class":210}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[95,26206,26207],{"class":101}," >",[95,26209,26210],{"class":210}," \u002Fdev\u002Fnull\n",[10,26212,26213],{},"最后安装",[86,26215,26217],{"className":23806,"code":26216,"language":23808,"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",[92,26218,26219,26228],{"__ignoreMap":14},[95,26220,26221,26223,26225],{"class":97,"line":98},[95,26222,24561],{"class":1945},[95,26224,26061],{"class":210},[95,26226,26227],{"class":210}," update\n",[95,26229,26230,26232,26234,26236,26239,26242,26245,26248],{"class":97,"line":15},[95,26231,24561],{"class":1945},[95,26233,26061],{"class":210},[95,26235,23818],{"class":210},[95,26237,26238],{"class":210}," docker-ce",[95,26240,26241],{"class":210}," docker-ce-cli",[95,26243,26244],{"class":210}," containerd.io",[95,26246,26247],{"class":210}," docker-buildx-plugin",[95,26249,26250],{"class":210}," docker-compose-plugin\n",[21981,26252,26254],{"id":26253},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[10,26256,26257,26258,26261,26262,26265],{},"查看自己自己包管理工具版本（dnf是 ",[255,26259,26260],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[255,26263,26264],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[86,26267,26269],{"className":23806,"code":26268,"language":23808,"meta":14,"style":14},"dnf --version\n",[92,26270,26271],{"__ignoreMap":14},[95,26272,26273,26276],{"class":97,"line":98},[95,26274,26275],{"class":1945},"dnf",[95,26277,26278],{"class":154}," --version\n",[10,26280,26004,26281,26285],{},[344,26282,26009],{"href":26283,"rel":26284},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23849]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[10,26287,26288],{},"如果你之前安装过 docker，请先删掉",[86,26290,26292],{"className":23806,"code":26291,"language":23808,"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",[92,26293,26294,26308,26315,26322,26329,26336,26343,26350,26357,26364],{"__ignoreMap":14},[95,26295,26296,26298,26301,26303,26306],{"class":97,"line":98},[95,26297,24561],{"class":1945},[95,26299,26300],{"class":210}," dnf",[95,26302,26064],{"class":210},[95,26304,26305],{"class":210}," docker",[95,26307,24663],{"class":154},[95,26309,26310,26313],{"class":97,"line":15},[95,26311,26312],{"class":210},"                  docker-client",[95,26314,24663],{"class":154},[95,26316,26317,26320],{"class":97,"line":1161},[95,26318,26319],{"class":210},"                  docker-client-latest",[95,26321,24663],{"class":154},[95,26323,26324,26327],{"class":97,"line":1176},[95,26325,26326],{"class":210},"                  docker-common",[95,26328,24663],{"class":154},[95,26330,26331,26334],{"class":97,"line":1182},[95,26332,26333],{"class":210},"                  docker-latest",[95,26335,24663],{"class":154},[95,26337,26338,26341],{"class":97,"line":1196},[95,26339,26340],{"class":210},"                  docker-latest-logrotate",[95,26342,24663],{"class":154},[95,26344,26345,26348],{"class":97,"line":1202},[95,26346,26347],{"class":210},"                  docker-logrotate",[95,26349,24663],{"class":154},[95,26351,26352,26355],{"class":97,"line":1293},[95,26353,26354],{"class":210},"                  docker-selinux",[95,26356,24663],{"class":154},[95,26358,26359,26362],{"class":97,"line":1299},[95,26360,26361],{"class":210},"                  docker-engine-selinux",[95,26363,24663],{"class":154},[95,26365,26366],{"class":97,"line":1311},[95,26367,26368],{"class":210},"                  docker-engine\n",[10,26370,26371],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[86,26373,26375],{"className":23806,"code":26374,"language":23808,"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",[92,26376,26377,26391,26406],{"__ignoreMap":14},[95,26378,26379,26381,26383,26386,26388],{"class":97,"line":98},[95,26380,24561],{"class":1945},[95,26382,26300],{"class":210},[95,26384,26385],{"class":154}," -y",[95,26387,23818],{"class":210},[95,26389,26390],{"class":210}," dnf-plugins-core\n",[95,26392,26393,26395,26397,26400,26403],{"class":97,"line":15},[95,26394,24561],{"class":1945},[95,26396,26300],{"class":210},[95,26398,26399],{"class":210}," config-manager",[95,26401,26402],{"class":210}," addrepo",[95,26404,26405],{"class":154}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[95,26407,26408,26410,26413,26416,26419],{"class":97,"line":1161},[95,26409,24561],{"class":1945},[95,26411,26412],{"class":210}," sed",[95,26414,26415],{"class":154}," -i",[95,26417,26418],{"class":210}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[95,26420,26421],{"class":210}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[10,26423,26424],{},"最后安装：",[86,26426,26428],{"className":23806,"code":26427,"language":23808,"meta":14,"style":14},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[92,26429,26430],{"__ignoreMap":14},[95,26431,26432,26434,26436,26438,26440,26442,26444,26446],{"class":97,"line":98},[95,26433,24561],{"class":1945},[95,26435,26300],{"class":210},[95,26437,23818],{"class":210},[95,26439,26238],{"class":210},[95,26441,26241],{"class":210},[95,26443,26244],{"class":210},[95,26445,26247],{"class":210},[95,26447,26250],{"class":210},[66,26449,26451],{"id":26450},"_22配置环境","2.2.配置环境",[21981,26453,26455,26458],{"id":26454},"_221检查-docker-服务状态",[255,26456,26457],{},"2.2.1.检查 Docker 服务状态"," ：",[10,26460,26461],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[86,26463,26465],{"className":23806,"code":26464,"language":23808,"meta":14,"style":14},"systemctl status docker\n",[92,26466,26467],{"__ignoreMap":14},[95,26468,26469,26472,26475],{"class":97,"line":98},[95,26470,26471],{"class":1945},"systemctl",[95,26473,26474],{"class":210}," status",[95,26476,26477],{"class":210}," docker\n",[21981,26479,26481,26458],{"id":26480},"_222启动-docker-服务",[255,26482,26483],{},"2.2.2.启动 Docker 服务",[10,26485,26486],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[86,26488,26490],{"className":23806,"code":26489,"language":23808,"meta":14,"style":14},"sudo systemctl start docker\n",[92,26491,26492],{"__ignoreMap":14},[95,26493,26494,26496,26499,26501],{"class":97,"line":98},[95,26495,24561],{"class":1945},[95,26497,26498],{"class":210}," systemctl",[95,26500,4166],{"class":210},[95,26502,26477],{"class":210},[21981,26504,26506,26458],{"id":26505},"_223设置-docker-开机自启",[255,26507,26508],{},"2.2.3.设置 Docker 开机自启",[10,26510,26511],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[86,26513,26515],{"className":23806,"code":26514,"language":23808,"meta":14,"style":14},"sudo systemctl enable docker\n",[92,26516,26517],{"__ignoreMap":14},[95,26518,26519,26521,26523,26526],{"class":97,"line":98},[95,26520,24561],{"class":1945},[95,26522,26498],{"class":210},[95,26524,26525],{"class":210}," enable",[95,26527,26477],{"class":210},[21981,26529,26531,13778,26534,13778,26539,26458],{"id":26530},"_224将用户添加到-docker-组",[255,26532,26533],{},"2.2.4.将用户添加到",[255,26535,26536],{},[92,26537,26538],{},"docker",[255,26540,26541],{},"组",[10,26543,26544,26545,26547],{},"使用以下命令将当前用户添加到 ",[92,26546,26538],{}," 组：",[86,26549,26551],{"className":23806,"code":26550,"language":23808,"meta":14,"style":14},"sudo usermod -aG docker $USER\n",[92,26552,26553],{"__ignoreMap":14},[95,26554,26555,26557,26560,26563,26565],{"class":97,"line":98},[95,26556,24561],{"class":1945},[95,26558,26559],{"class":210}," usermod",[95,26561,26562],{"class":154}," -aG",[95,26564,26305],{"class":210},[95,26566,26567],{"class":105}," $USER\n",[21981,26569,26571,26458],{"id":26570},"_225退出并重新登录",[255,26572,26573],{},"2.2.5.退出并重新登录",[10,26575,26576],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[86,26578,26580],{"className":23806,"code":26579,"language":23808,"meta":14,"style":14},"newgrp docker\n",[92,26581,26582],{"__ignoreMap":14},[95,26583,26584,26587],{"class":97,"line":98},[95,26585,26586],{"class":1945},"newgrp",[95,26588,26477],{"class":210},[21981,26590,26592,26458],{"id":26591},"_226重新启动-docker-服务如果需要",[255,26593,26594],{},"2.2.6.重新启动 Docker 服务（如果需要）",[10,26596,26597],{},"确保 Docker 服务正在运行，可以使用以下命令：",[86,26599,26600],{"className":23806,"code":26489,"language":23808,"meta":14,"style":14},[92,26601,26602],{"__ignoreMap":14},[95,26603,26604,26606,26608,26610],{"class":97,"line":98},[95,26605,24561],{"class":1945},[95,26607,26498],{"class":210},[95,26609,4166],{"class":210},[95,26611,26477],{"class":210},[21981,26613,26615,26458],{"id":26614},"_227重启电脑后检查-docker-服务状态",[255,26616,26617],{},"2.2.7.重启电脑后检查 Docker 服务状态",[10,26619,26620],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[86,26622,26624],{"className":23806,"code":26623,"language":23808,"meta":14,"style":14},"sudo reboot\nsystemctl status docker\n",[92,26625,26626,26633],{"__ignoreMap":14},[95,26627,26628,26630],{"class":97,"line":98},[95,26629,24561],{"class":1945},[95,26631,26632],{"class":210}," reboot\n",[95,26634,26635,26637,26639],{"class":97,"line":15},[95,26636,26471],{"class":1945},[95,26638,26474],{"class":210},[95,26640,26477],{"class":210},[10,26642,26643],{},[1444,26644],{"alt":14,"src":26645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[10,26647,26648],{},"第三行显示enabled说明开机自启动成功",[10,26650,26651],{},"按q退出",[66,26653,26655],{"id":26654},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[10,26657,26658],{},"优先使用linux来使用docker是比较好的",[10,26660,26661],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[10,26663,26664],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[10,26666,26667,26668],{},"官方下载安装:",[344,26669,26670],{"href":26670,"rel":26671},"https:\u002F\u002Fwww.docker.com\u002F",[23849],[10,26673,26674],{},"Windows的Docker显卡直通与USB直通:",[10,26676,26677],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[10,26679,26680],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[10,26682,26683],{},[1444,26684],{"alt":14,"src":26685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[10,26687,26688],{},[1444,26689],{"alt":14,"src":26690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[10,26692,26693],{},[1444,26694],{"alt":14,"src":26695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5109,26697,26698],{},"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":26700},[26701,26702,26703],{"id":25978,"depth":1161,"text":25979},{"id":26450,"depth":1161,"text":26451},{"id":26654,"depth":1161,"text":26655},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25970,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26710,"title":26711,"body":26712,"description":26719,"extension":18,"meta":27412,"navigation":21,"path":27413,"seo":27414,"stem":27415,"__hash__":27416},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26713,"toc":27406},[26714,26717,26720,26724,26729,26734,26737,26765,26770,26779,26782,26787,26791,26798,26803,26809,26813,26816,26820,26825,26917,26922,26940,26945,26966,26971,26987,26991,26996,27025,27030,27076,27081,27125,27133,27150,27155,27171,27176,27190,27193,27196,27199,27202,27231,27234,27239,27243,27246,27249,27255,27258,27261,27264,27326,27333,27338,27341,27359,27363,27366,27383,27386,27389,27403],[33,26715,26711],{"id":26716},"_3docker直通",[10,26718,26719],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[66,26721,26723],{"id":26722},"_31usb直通","3.1.USB直通",[10,26725,26726],{},[1444,26727],{"alt":14,"src":26728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[49,26730,26731],{},[52,26732,26733],{},"方法一(不是很推荐新手)：",[10,26735,26736],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[86,26738,26740],{"className":23806,"code":26739,"language":23808,"meta":14,"style":14},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[92,26741,26742,26750,26755],{"__ignoreMap":14},[95,26743,26744,26747],{"class":97,"line":98},[95,26745,26746],{"class":1945},"ls",[95,26748,26749],{"class":210}," \u002Fdev\n",[95,26751,26752],{"class":97,"line":15},[95,26753,26754],{"class":164},"#例如\n",[95,26756,26757,26760,26762],{"class":97,"line":1161},[95,26758,26759],{"class":105},"--device",[95,26761,151],{"class":101},[95,26763,26764],{"class":210},"\u002Fdev\u002Ftty_USB0\n",[49,26766,26767],{"start":15},[52,26768,26769],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[86,26771,26773],{"className":23806,"code":26772,"language":23808,"meta":14,"style":14},"--privileged\n",[92,26774,26775],{"__ignoreMap":14},[95,26776,26777],{"class":97,"line":98},[95,26778,26772],{"class":1945},[10,26780,26781],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[10,26783,26784],{},[1444,26785],{"alt":14,"src":26786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[66,26788,26790],{"id":26789},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[10,26792,26793,26794,26797],{},"NVIDIA Container Toolkit使用户 ",[255,26795,26796],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[10,26799,26800],{},[1444,26801],{"alt":14,"src":26802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[10,26804,26805],{},[344,26806,26807],{"href":26807,"rel":26808},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23849],[21981,26810,26812],{"id":26811},"_321安装","3.2.1.安装",[10,26814,26815],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22893,26817,26819],{"id":26818},"_3211ubuntu","3.2.1.1.Ubuntu",[49,26821,26822],{},[52,26823,26824],{},"配置存储库 并更新",[86,26826,26828],{"className":23806,"code":26827,"language":23808,"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",[92,26829,26830,26859,26879,26891,26903,26909],{"__ignoreMap":14},[95,26831,26832,26835,26838,26841,26843,26845,26848,26851,26854,26857],{"class":97,"line":98},[95,26833,26834],{"class":1945},"curl",[95,26836,26837],{"class":154}," -fsSL",[95,26839,26840],{"class":210}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[95,26842,25094],{"class":101},[95,26844,26058],{"class":1945},[95,26846,26847],{"class":210}," gpg",[95,26849,26850],{"class":154}," --dearmor",[95,26852,26853],{"class":154}," -o",[95,26855,26856],{"class":210}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[95,26858,24663],{"class":154},[95,26860,26861,26864,26866,26869,26872,26875,26877],{"class":97,"line":15},[95,26862,26863],{"class":105},"  && ",[95,26865,26834],{"class":1945},[95,26867,26868],{"class":154}," -s",[95,26870,26871],{"class":154}," -L",[95,26873,26874],{"class":210}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[95,26876,25094],{"class":101},[95,26878,24663],{"class":154},[95,26880,26881,26884,26887,26889],{"class":97,"line":1161},[95,26882,26883],{"class":1945},"    sed",[95,26885,26886],{"class":210}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[95,26888,25094],{"class":101},[95,26890,24663],{"class":154},[95,26892,26893,26896,26898,26901],{"class":97,"line":1176},[95,26894,26895],{"class":1945},"    sudo",[95,26897,26201],{"class":210},[95,26899,26900],{"class":210}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[95,26902,24663],{"class":154},[95,26904,26905,26907],{"class":97,"line":1182},[95,26906,26863],{"class":105},[95,26908,26160],{"class":154},[95,26910,26911,26913,26915],{"class":97,"line":1196},[95,26912,26895],{"class":1945},[95,26914,26061],{"class":210},[95,26916,26227],{"class":210},[49,26918,26919],{"start":15},[52,26920,26921],{},"安装nvidia-docker2",[86,26923,26925],{"className":23806,"code":26924,"language":23808,"meta":14,"style":14},"sudo apt-get install -y nvidia-docker2\n",[92,26926,26927],{"__ignoreMap":14},[95,26928,26929,26931,26933,26935,26937],{"class":97,"line":98},[95,26930,24561],{"class":1945},[95,26932,26061],{"class":210},[95,26934,23818],{"class":210},[95,26936,26385],{"class":154},[95,26938,26939],{"class":210}," nvidia-docker2\n",[49,26941,26942],{"start":1161},[52,26943,26944],{},"使用nvidia-ctk命令配置container runtime",[86,26946,26948],{"className":23806,"code":26947,"language":23808,"meta":14,"style":14},"sudo nvidia-ctk runtime configure --runtime=docker\n",[92,26949,26950],{"__ignoreMap":14},[95,26951,26952,26954,26957,26960,26963],{"class":97,"line":98},[95,26953,24561],{"class":1945},[95,26955,26956],{"class":210}," nvidia-ctk",[95,26958,26959],{"class":210}," runtime",[95,26961,26962],{"class":210}," configure",[95,26964,26965],{"class":154}," --runtime=docker\n",[49,26967,26968],{"start":1176},[52,26969,26970],{},"重启docker服务:",[86,26972,26974],{"className":23806,"code":26973,"language":23808,"meta":14,"style":14},"sudo systemctl restart docker\n",[92,26975,26976],{"__ignoreMap":14},[95,26977,26978,26980,26982,26985],{"class":97,"line":98},[95,26979,24561],{"class":1945},[95,26981,26498],{"class":210},[95,26983,26984],{"class":210}," restart",[95,26986,26477],{"class":210},[22893,26988,26990],{"id":26989},"_3212fedora","3.2.1.2.Fedora",[49,26992,26993],{},[52,26994,26995],{},"配置存储库",[86,26997,26999],{"className":23806,"code":26998,"language":23808,"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",[92,27000,27001,27016],{"__ignoreMap":14},[95,27002,27003,27005,27007,27009,27012,27014],{"class":97,"line":98},[95,27004,26834],{"class":1945},[95,27006,26868],{"class":154},[95,27008,26871],{"class":154},[95,27010,27011],{"class":210}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[95,27013,25094],{"class":101},[95,27015,24663],{"class":154},[95,27017,27018,27020,27022],{"class":97,"line":15},[95,27019,24561],{"class":1945},[95,27021,26201],{"class":210},[95,27023,27024],{"class":210}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[49,27026,27027],{"start":15},[52,27028,27029],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[86,27031,27033],{"className":23806,"code":27032,"language":23808,"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",[92,27034,27035,27040,27054,27058,27063],{"__ignoreMap":14},[95,27036,27037],{"class":97,"line":98},[95,27038,27039],{"class":164},"# 如果是RHEL或者Rocky（DNF4）\n",[95,27041,27042,27044,27046,27048,27051],{"class":97,"line":15},[95,27043,24561],{"class":1945},[95,27045,26300],{"class":210},[95,27047,26399],{"class":210},[95,27049,27050],{"class":154}," --add-repo",[95,27052,27053],{"class":210}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[95,27055,27056],{"class":97,"line":1161},[95,27057,2382],{"emptyLinePlaceholder":21},[95,27059,27060],{"class":97,"line":1176},[95,27061,27062],{"class":164},"# 如果是Feodra41+（DNF5）\n",[95,27064,27065,27067,27069,27071,27073],{"class":97,"line":1182},[95,27066,24561],{"class":1945},[95,27068,26300],{"class":210},[95,27070,26399],{"class":210},[95,27072,26402],{"class":210},[95,27074,27075],{"class":154}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[49,27077,27078],{"start":1161},[52,27079,27080],{},"安装NVIDIA Container Toolki包",[86,27082,27084],{"className":23806,"code":27083,"language":23808,"meta":14,"style":14},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[92,27085,27086,27091,27104,27108,27113],{"__ignoreMap":14},[95,27087,27088],{"class":97,"line":98},[95,27089,27090],{"class":164},"# 如果是RHEL或者Rocky\n",[95,27092,27093,27095,27097,27099,27101],{"class":97,"line":15},[95,27094,24561],{"class":1945},[95,27096,26300],{"class":210},[95,27098,23818],{"class":210},[95,27100,26385],{"class":154},[95,27102,27103],{"class":210}," nvidia-container-toolkit\n",[95,27105,27106],{"class":97,"line":1161},[95,27107,2382],{"emptyLinePlaceholder":21},[95,27109,27110],{"class":97,"line":1176},[95,27111,27112],{"class":164},"# 如果是Fedora\n",[95,27114,27115,27117,27119,27121,27123],{"class":97,"line":1182},[95,27116,24561],{"class":1945},[95,27118,26300],{"class":210},[95,27120,23818],{"class":210},[95,27122,26385],{"class":154},[95,27124,27103],{"class":210},[49,27126,27127],{"start":1176},[52,27128,27129,27130,27132],{},"安装nvidia-docker2 ： 在Fedora上使用",[92,27131,26275],{},"进行安装",[86,27134,27136],{"className":23806,"code":27135,"language":23808,"meta":14,"style":14},"sudo dnf install -y nvidia-docker2\n",[92,27137,27138],{"__ignoreMap":14},[95,27139,27140,27142,27144,27146,27148],{"class":97,"line":98},[95,27141,24561],{"class":1945},[95,27143,26300],{"class":210},[95,27145,23818],{"class":210},[95,27147,26385],{"class":154},[95,27149,26939],{"class":210},[49,27151,27152],{"start":1182},[52,27153,27154],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[86,27156,27157],{"className":23806,"code":26947,"language":23808,"meta":14,"style":14},[92,27158,27159],{"__ignoreMap":14},[95,27160,27161,27163,27165,27167,27169],{"class":97,"line":98},[95,27162,24561],{"class":1945},[95,27164,26956],{"class":210},[95,27166,26959],{"class":210},[95,27168,26962],{"class":210},[95,27170,26965],{"class":154},[49,27172,27173],{"start":1196},[52,27174,27175],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[86,27177,27178],{"className":23806,"code":26973,"language":23808,"meta":14,"style":14},[92,27179,27180],{"__ignoreMap":14},[95,27181,27182,27184,27186,27188],{"class":97,"line":98},[95,27183,24561],{"class":1945},[95,27185,26498],{"class":210},[95,27187,26984],{"class":210},[95,27189,26477],{"class":210},[10,27191,27192],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[10,27194,27195],{},"方法：",[10,27197,27198],{},"1️⃣nvidia-smi",[10,27200,27201],{},"2️⃣运行nvidia cuda 容器进行测试",[86,27203,27205],{"className":23806,"code":27204,"language":23808,"meta":14,"style":14},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[92,27206,27207],{"__ignoreMap":14},[95,27208,27209,27211,27213,27216,27219,27222,27225,27228],{"class":97,"line":98},[95,27210,24561],{"class":1945},[95,27212,26305],{"class":210},[95,27214,27215],{"class":210}," run",[95,27217,27218],{"class":154}," --rm",[95,27220,27221],{"class":154}," --gpus",[95,27223,27224],{"class":210}," all",[95,27226,27227],{"class":210}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[95,27229,27230],{"class":210}," nvidia-smi\n",[10,27232,27233],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[10,27235,27236],{},[1444,27237],{"alt":14,"src":27238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[66,27240,27242],{"id":27241},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[10,27244,27245],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[10,27247,27248],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[10,27250,27251],{},[344,27252,27253],{"href":27253,"rel":27254},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23849],[10,27256,27257],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[10,27259,27260],{},"我们只需要找到对应的Docker镜像当底包即可。",[10,27262,27263],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[243,27265,27266,27282],{},[246,27267,27268],{},[249,27269,27270,27273,27276,27279],{},[252,27271,27272],{"align":23720},"镜像类型",[252,27274,27275],{"align":23720},"适用场景",[252,27277,27278],{"align":23720},"示例标签",[252,27280,27281],{"align":23720},"大小",[290,27283,27284,27298,27312],{},[249,27285,27286,27289,27292,27295],{},[295,27287,27288],{"align":23720},"base",[295,27290,27291],{"align":23720},"仅需 CUDA 运行时库",[295,27293,27294],{"align":23720},"12.4.0-base-ubuntu22.04",[295,27296,27297],{"align":23720},"~240MB",[249,27299,27300,27303,27306,27309],{},[295,27301,27302],{"align":23720},"runtime",[295,27304,27305],{"align":23720},"部署编译后的应用（含数学库）",[295,27307,27308],{"align":23720},"12.4.0-runtime-ubuntu22.04",[295,27310,27311],{"align":23720},"~2GB",[249,27313,27314,27317,27320,27323],{},[295,27315,27316],{"align":23720},"devel",[295,27318,27319],{"align":23720},"开发环境（含编译工具）",[295,27321,27322],{"align":23720},"12.4.0-devel-ubuntu22.04",[295,27324,27325],{"align":23720},"~3GB",[10,27327,27328,27329,27332],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[92,27330,27331],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[10,27334,27335],{},[1444,27336],{"alt":14,"src":27337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[10,27339,27340],{},"在dockerfile里就可以开头这么写：",[86,27342,27344],{"className":23806,"code":27343,"language":23808,"meta":14,"style":14},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[92,27345,27346,27351],{"__ignoreMap":14},[95,27347,27348],{"class":97,"line":98},[95,27349,27350],{"class":164},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[95,27352,27353,27356],{"class":97,"line":15},[95,27354,27355],{"class":1945},"FROM",[95,27357,27358],{"class":210}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[66,27360,27362],{"id":27361},"_34配置以太网","3.4.配置以太网",[10,27364,27365],{},"指定网络模式",[86,27367,27369],{"className":23806,"code":27368,"language":23808,"meta":14,"style":14},"--net=host \\\n",[92,27370,27371],{"__ignoreMap":14},[95,27372,27373,27376,27378,27381],{"class":97,"line":98},[95,27374,27375],{"class":105},"--net",[95,27377,151],{"class":101},[95,27379,27380],{"class":210},"host",[95,27382,24663],{"class":1945},[10,27384,27385],{},"启动参数里加上这行即可。具体在下方",[10,27387,27388],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1113,27390,27391,27394,27397,27400],{},[52,27392,27393],{},"--net=bridge:默认选项，表示连接到默认的网桥",[52,27395,27396],{},"--net=host:容器使用宿主机的网络",[52,27398,27399],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[52,27401,27402],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5109,27404,27405],{},"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":27407},[27408,27409,27410,27411],{"id":26722,"depth":1161,"text":26723},{"id":26789,"depth":1161,"text":26790},{"id":27241,"depth":1161,"text":27242},{"id":27361,"depth":1161,"text":27362},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26711,"description":26719},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27418,"title":27419,"body":27420,"description":27427,"extension":18,"meta":27433,"navigation":21,"path":27434,"seo":27435,"stem":27436,"__hash__":27437},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27421,"toc":27431},[27422,27425,27428],[33,27423,27419],{"id":27424},"_4dockerhub换源",[10,27426,27427],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[10,27429,27430],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":14,"searchDepth":15,"depth":15,"links":27432},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27419,"description":27427},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27439,"title":27440,"body":27441,"description":14,"extension":18,"meta":28453,"navigation":21,"path":28454,"seo":28455,"stem":28456,"__hash__":28457},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27442,"toc":28448},[27443,27446,27450,27456,27460,27463,27803,27806,27809,27812,27817,27822,27825,27828,27831,27834,27853,27856,27867,27873,28055,28065,28081,28344,28346,28371,28386,28395,28445],[33,27444,27440],{"id":27445},"_5docker命令学习",[66,27447,27449],{"id":27448},"_51参考文档","5.1.参考文档",[10,27451,27452],{},[344,27453,27454],{"href":27454,"rel":27455},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23849],[66,27457,27459],{"id":27458},"_52常用命令","5.2.常用命令",[10,27461,27462],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[243,27464,27465,27478],{},[246,27466,27467],{},[249,27468,27469,27472,27475],{},[252,27470,27471],{"align":23720},"命令",[252,27473,27474],{"align":23720},"描述",[252,27476,27477],{"align":23720},"示例",[290,27479,27480,27491,27502,27513,27524,27535,27546,27557,27567,27578,27589,27600,27610,27621,27632,27643,27653,27663,27673,27683,27694,27705,27716,27727,27738,27749,27759,27770,27781,27792],{},[249,27481,27482,27485,27488],{},[295,27483,27484],{"align":23720},"docker run",[295,27486,27487],{"align":23720},"创建并启动一个新的容器。",[295,27489,27490],{"align":23720},"docker run -it ubuntu bash",[249,27492,27493,27496,27499],{},[295,27494,27495],{"align":23720},"docker build",[295,27497,27498],{"align":23720},"通过指定的 Dockerfile 创建一个新的镜像。",[295,27500,27501],{"align":23720},"docker build -t myimage .",[249,27503,27504,27507,27510],{},[295,27505,27506],{"align":23720},"docker pull",[295,27508,27509],{"align":23720},"从 Docker 仓库拉取镜像。",[295,27511,27512],{"align":23720},"docker pull ubuntu",[249,27514,27515,27518,27521],{},[295,27516,27517],{"align":23720},"docker push",[295,27519,27520],{"align":23720},"将本地镜像推送到 Docker 仓库。",[295,27522,27523],{"align":23720},"docker push myimage",[249,27525,27526,27529,27532],{},[295,27527,27528],{"align":23720},"docker stop",[295,27530,27531],{"align":23720},"停止一个正在运行的容器。",[295,27533,27534],{"align":23720},"docker stop container_id",[249,27536,27537,27540,27543],{},[295,27538,27539],{"align":23720},"docker start",[295,27541,27542],{"align":23720},"启动一个已经存在的容器。",[295,27544,27545],{"align":23720},"docker start container_id",[249,27547,27548,27551,27554],{},[295,27549,27550],{"align":23720},"docker restart",[295,27552,27553],{"align":23720},"重新启动容器。",[295,27555,27556],{"align":23720},"docker restart container_id",[249,27558,27559,27562,27565],{},[295,27560,27561],{"align":23720},"docker ps",[295,27563,27564],{"align":23720},"列出当前正在运行的容器。",[295,27566,27561],{"align":23720},[249,27568,27569,27572,27575],{},[295,27570,27571],{"align":23720},"docker rm",[295,27573,27574],{"align":23720},"删除一个或多个停止的容器。",[295,27576,27577],{"align":23720},"docker rm container_id",[249,27579,27580,27583,27586],{},[295,27581,27582],{"align":23720},"docker exec",[295,27584,27585],{"align":23720},"在一个正在运行的容器中执行命令。",[295,27587,27588],{"align":23720},"docker exec -it container_id bash",[249,27590,27591,27594,27597],{},[295,27592,27593],{"align":23720},"docker logs",[295,27595,27596],{"align":23720},"查看容器的日志输出。",[295,27598,27599],{"align":23720},"docker logs container_id",[249,27601,27602,27605,27608],{},[295,27603,27604],{"align":23720},"docker images",[295,27606,27607],{"align":23720},"列出本地所有镜像。",[295,27609,27604],{"align":23720},[249,27611,27612,27615,27618],{},[295,27613,27614],{"align":23720},"docker rmi",[295,27616,27617],{"align":23720},"删除一个或多个镜像。",[295,27619,27620],{"align":23720},"docker rmi myimage",[249,27622,27623,27626,27629],{},[295,27624,27625],{"align":23720},"docker network",[295,27627,27628],{"align":23720},"管理 Docker 网络。",[295,27630,27631],{"align":23720},"docker network ls",[249,27633,27634,27637,27640],{},[295,27635,27636],{"align":23720},"docker volume",[295,27638,27639],{"align":23720},"管理 Docker 数据卷。",[295,27641,27642],{"align":23720},"docker volume ls",[249,27644,27645,27648,27651],{},[295,27646,27647],{"align":23720},"docker-compose up",[295,27649,27650],{"align":23720},"启动 docker-compose.yml 中定义的所有服务。",[295,27652,27647],{"align":23720},[249,27654,27655,27658,27661],{},[295,27656,27657],{"align":23720},"docker-compose down",[295,27659,27660],{"align":23720},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[295,27662,27657],{"align":23720},[249,27664,27665,27668,27671],{},[295,27666,27667],{"align":23720},"docker info",[295,27669,27670],{"align":23720},"显示 Docker 系统的详细信息。",[295,27672,27667],{"align":23720},[249,27674,27675,27678,27681],{},[295,27676,27677],{"align":23720},"docker stats",[295,27679,27680],{"align":23720},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[295,27682,27677],{"align":23720},[249,27684,27685,27688,27691],{},[295,27686,27687],{"align":23720},"docker inspect",[295,27689,27690],{"align":23720},"查看容器或镜像的详细信息（JSON 格式）。",[295,27692,27693],{"align":23720},"docker inspect container_id",[249,27695,27696,27699,27702],{},[295,27697,27698],{"align":23720},"docker save",[295,27700,27701],{"align":23720},"将一个镜像保存为 tar 文件。",[295,27703,27704],{"align":23720},"docker save -o myimage.tar myimage",[249,27706,27707,27710,27713],{},[295,27708,27709],{"align":23720},"docker load",[295,27711,27712],{"align":23720},"从 tar 文件中加载镜像。",[295,27714,27715],{"align":23720},"docker load -i myimage.tar",[249,27717,27718,27721,27724],{},[295,27719,27720],{"align":23720},"docker tag",[295,27722,27723],{"align":23720},"为镜像添加标签（tag）。",[295,27725,27726],{"align":23720},"docker tag myimage myimage:v1",[249,27728,27729,27732,27735],{},[295,27730,27731],{"align":23720},"docker buildx build",[295,27733,27734],{"align":23720},"使用 Buildx 构建多架构镜像。",[295,27736,27737],{"align":23720},"docker buildx build -t myimage .",[249,27739,27740,27743,27746],{},[295,27741,27742],{"align":23720},"docker buildx create",[295,27744,27745],{"align":23720},"创建一个新的 Buildx 构建实例。",[295,27747,27748],{"align":23720},"docker buildx create –use",[249,27750,27751,27754,27757],{},[295,27752,27753],{"align":23720},"docker buildx ls",[295,27755,27756],{"align":23720},"列出所有可用的 Buildx 构建实例。",[295,27758,27753],{"align":23720},[249,27760,27761,27764,27767],{},[295,27762,27763],{"align":23720},"docker buildx use",[295,27765,27766],{"align":23720},"设置当前的 Buildx 构建实例。",[295,27768,27769],{"align":23720},"docker buildx use mybuilder",[249,27771,27772,27775,27778],{},[295,27773,27774],{"align":23720},"docker buildx bake",[295,27776,27777],{"align":23720},"使用 Bake 文件批量构建镜像。",[295,27779,27780],{"align":23720},"docker buildx bake -f bake.hcl",[249,27782,27783,27786,27789],{},[295,27784,27785],{"align":23720},"docker buildx build –push",[295,27787,27788],{"align":23720},"构建镜像并推送到镜像仓库。",[295,27790,27791],{"align":23720},"docker buildx build –push -t myimage .",[249,27793,27794,27797,27800],{},[295,27795,27796],{"align":23720},"docker buildx build –platform",[295,27798,27799],{"align":23720},"构建镜像并为多个平台生成支持。",[295,27801,27802],{"align":23720},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[10,27804,27805],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[10,27807,27808],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[10,27810,27811],{},"docker images 可以查看已经下载的镜像",[10,27813,27814],{},[1444,27815],{"alt":14,"src":27816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[10,27818,27819],{},[255,27820,27821],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[10,27823,27824],{},"docker rmi $(docker images -q) 删除所有的镜像",[10,27826,27827],{},"docker container logs 查看容器日志",[10,27829,27830],{},"docker top 查看容器里的进程",[10,27832,27833],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[86,27835,27837],{"className":23806,"code":27836,"language":23808,"meta":14,"style":14},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[92,27838,27839],{"__ignoreMap":14},[95,27840,27841,27844,27847,27850],{"class":97,"line":98},[95,27842,27843],{"class":1945},"如：docker",[95,27845,27846],{"class":210}," cp",[95,27848,27849],{"class":210}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[95,27851,27852],{"class":210}," \u002Fmydata\u002Fnginx\n",[10,27854,27855],{},"docker run时在启动容器的时候会有几个常用的选项：",[1113,27857,27858,27861,27864],{},[52,27859,27860],{},"-d选项：表示后台运行",[52,27862,27863],{},"-P选项：随机端口映射",[52,27865,27866],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[66,27868,27870],{"id":27869},"_53run命令的参数非常重要",[255,27871,27872],{},"5.3.run命令的参数（非常重要）",[243,27874,27875,27888],{},[246,27876,27877],{},[249,27878,27879,27882,27885],{},[252,27880,27881],{"align":23720},"参数\u002F配置",[252,27883,27884],{"align":23720},"功能说明",[252,27886,27887],{"align":23720},"重要性与参考依据",[290,27889,27890,27901,27912,27923,27934,27945,27956,27967,27978,27989,28000,28011,28022,28033,28044],{},[249,27891,27892,27895,27898],{},[295,27893,27894],{"align":23720},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[295,27896,27897],{"align":23720},"指定容器名称，便于后续管理",[295,27899,27900],{"align":23720},"替代随机生成的容器名。",[249,27902,27903,27906,27909],{},[295,27904,27905],{"align":23720},"–gpus all",[295,27907,27908],{"align":23720},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[295,27910,27911],{"align":23720},"用于CUDA加速等GPU依赖任务。",[249,27913,27914,27917,27920],{},[295,27915,27916],{"align":23720},"-e NVIDIA_DRIVER_CAPABILITIES=all",[295,27918,27919],{"align":23720},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[295,27921,27922],{"align":23720},"确保容器内GPU功能完整67。",[249,27924,27925,27928,27931],{},[295,27926,27927],{"align":23720},"-dit",[295,27929,27930],{"align":23720},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[295,27932,27933],{"align":23720},"允许容器在后台运行并支持交互操作。",[249,27935,27936,27939,27942],{},[295,27937,27938],{"align":23720},"–privileged",[295,27940,27941],{"align":23720},"赋予容器完全主机权限（可访问设备、内核模块等）",[295,27943,27944],{"align":23720},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[249,27946,27947,27950,27953],{},[295,27948,27949],{"align":23720},"–net=host",[295,27951,27952],{"align":23720},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[295,27954,27955],{"align":23720},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[249,27957,27958,27961,27964],{},[295,27959,27960],{"align":23720},"–group-add audio–group-add video–group-add dialout",[295,27962,27963],{"align":23720},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[295,27965,27966],{"align":23720},"避免权限问题（如避免无法调用摄像头、麦克风）。",[249,27968,27969,27972,27975],{},[295,27970,27971],{"align":23720},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[295,27973,27974],{"align":23720},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[295,27976,27977],{"align":23720},"支持容器内运行图形界面应用（如OpenCV可视化）。",[249,27979,27980,27983,27986],{},[295,27981,27982],{"align":23720},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[295,27984,27985],{"align":23720},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[295,27987,27988],{"align":23720},"实现容器内图形显示。",[249,27990,27991,27994,27997],{},[295,27992,27993],{"align":23720},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[295,27995,27996],{"align":23720},"挂载X11认证文件（只读）",[295,27998,27999],{"align":23720},"确保容器有权连接宿主机显示服务。",[249,28001,28002,28005,28008],{},[295,28003,28004],{"align":23720},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[295,28006,28007],{"align":23720},"挂载Wayland显示协议相关目录",[295,28009,28010],{"align":23720},"支持Wayland协议的图形显示。",[249,28012,28013,28016,28019],{},[295,28014,28015],{"align":23720},"–ulimit nofile=1024:524288",[295,28017,28018],{"align":23720},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[295,28020,28021],{"align":23720},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[249,28023,28024,28027,28030],{},[295,28025,28026],{"align":23720},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[295,28028,28029],{"align":23720},"挂载宿主机用户目录到容器内同名路径",[295,28031,28032],{"align":23720},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[249,28034,28035,28038,28041],{},[295,28036,28037],{"align":23720},"-w \u002Fhome\u002Ftungchiahui",[295,28039,28040],{"align":23720},"设置容器启动后的默认工作目录",[295,28042,28043],{"align":23720},"直接进入项目路径，方便执行命令2324。",[249,28045,28046,28049,28052],{},[295,28047,28048],{"align":23720},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[295,28050,28051],{"align":23720},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[295,28053,28054],{"align":23720},"提供预配置的深度学习与机器人开发环境。",[10,28056,28057,28058,28060,28061,28064],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[92,28059,24561],{},"加不加",[92,28062,28063],{},"sudo -E","都无所谓。",[10,28066,28067,28068,28070,28071,28073,28074,28077,28078,28080],{},"用户已经被加到docker组了，不用",[92,28069,24561],{},"也行跑，其次，",[92,28072,24561],{},"运行的话，你的",[92,28075,28076],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[92,28079,28076],{},"更不可能变了。",[86,28082,28084],{"className":23806,"code":28083,"language":23808,"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",[92,28085,28086,28099,28109,28119,28131,28138,28145,28152,28162,28171,28180,28194,28206,28218,28227,28237,28246,28261,28294,28321,28332,28339],{"__ignoreMap":14},[95,28087,28088,28090,28092,28094,28097],{"class":97,"line":98},[95,28089,24561],{"class":1945},[95,28091,26305],{"class":210},[95,28093,27215],{"class":210},[95,28095,28096],{"class":154}," --name=ros_opencv_cuda",[95,28098,24663],{"class":154},[95,28100,28101,28104,28107],{"class":97,"line":15},[95,28102,28103],{"class":105},"--gpus ",[95,28105,28106],{"class":210},"all",[95,28108,24663],{"class":154},[95,28110,28111,28114,28117],{"class":97,"line":1161},[95,28112,28113],{"class":105},"-e ",[95,28115,28116],{"class":210},"NVIDIA_DRIVER_CAPABILITIES=all",[95,28118,24663],{"class":154},[95,28120,28121,28123,28126,28129],{"class":97,"line":1176},[95,28122,28113],{"class":105},[95,28124,28125],{"class":210},"DISPLAY=",[95,28127,28128],{"class":105},"$DISPLAY ",[95,28130,26160],{"class":154},[95,28132,28133,28136],{"class":97,"line":1182},[95,28134,28135],{"class":105},"-dit ",[95,28137,26160],{"class":154},[95,28139,28140,28143],{"class":97,"line":1196},[95,28141,28142],{"class":105},"--privileged ",[95,28144,26160],{"class":154},[95,28146,28147,28150],{"class":97,"line":1202},[95,28148,28149],{"class":105},"--net=host ",[95,28151,26160],{"class":154},[95,28153,28154,28157,28160],{"class":97,"line":1293},[95,28155,28156],{"class":105},"--group-add ",[95,28158,28159],{"class":210},"audio",[95,28161,24663],{"class":154},[95,28163,28164,28166,28169],{"class":97,"line":1299},[95,28165,28156],{"class":105},[95,28167,28168],{"class":210},"video",[95,28170,24663],{"class":154},[95,28172,28173,28175,28178],{"class":97,"line":1311},[95,28174,28156],{"class":105},[95,28176,28177],{"class":210},"dialout",[95,28179,24663],{"class":154},[95,28181,28182,28184,28187,28189,28192],{"class":97,"line":1594},[95,28183,28113],{"class":105},[95,28185,28186],{"class":210},"XAUTHORITY=",[95,28188,28076],{"class":105},[95,28190,28191],{"class":210},"\u002F.Xauthority",[95,28193,24663],{"class":154},[95,28195,28196,28198,28201,28204],{"class":97,"line":1599},[95,28197,28113],{"class":105},[95,28199,28200],{"class":210},"WAYLAND_DISPLAY=",[95,28202,28203],{"class":105},"$WAYLAND_DISPLAY ",[95,28205,26160],{"class":154},[95,28207,28208,28210,28213,28216],{"class":97,"line":1605},[95,28209,28113],{"class":105},[95,28211,28212],{"class":210},"XDG_RUNTIME_DIR=",[95,28214,28215],{"class":105},"$XDG_RUNTIME_DIR ",[95,28217,26160],{"class":154},[95,28219,28220,28222,28225],{"class":97,"line":1610},[95,28221,28113],{"class":105},[95,28223,28224],{"class":210},"QT_QPA_PLATFORM=xcb",[95,28226,24663],{"class":154},[95,28228,28229,28232,28235],{"class":97,"line":1624},[95,28230,28231],{"class":105},"-v ",[95,28233,28234],{"class":210},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[95,28236,24663],{"class":154},[95,28238,28239,28241,28244],{"class":97,"line":1629},[95,28240,28231],{"class":105},[95,28242,28243],{"class":210},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[95,28245,24663],{"class":154},[95,28247,28248,28251,28254,28256,28259],{"class":97,"line":1635},[95,28249,28250],{"class":105},"-v $HOME",[95,28252,28253],{"class":210},"\u002F.Xauthority:",[95,28255,28076],{"class":105},[95,28257,28258],{"class":210},"\u002F.Xauthority:ro",[95,28260,24663],{"class":154},[95,28262,28263,28265,28268,28270,28273,28276,28278,28281,28283,28285,28287,28289,28292],{"class":97,"line":1656},[95,28264,28231],{"class":105},[95,28266,28267],{"class":210},"\u002Frun\u002Fuser\u002F",[95,28269,25084],{"class":105},[95,28271,28272],{"class":1945},"id",[95,28274,28275],{"class":154}," -u",[95,28277,535],{"class":105},[95,28279,28280],{"class":210},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[95,28282,25084],{"class":105},[95,28284,28272],{"class":1945},[95,28286,28275],{"class":154},[95,28288,535],{"class":105},[95,28290,28291],{"class":210},"\u002Fwayland-0",[95,28293,24663],{"class":154},[95,28295,28296,28298,28300,28302,28304,28306,28308,28311,28313,28315,28317,28319],{"class":97,"line":1661},[95,28297,28231],{"class":105},[95,28299,28267],{"class":210},[95,28301,25084],{"class":105},[95,28303,28272],{"class":1945},[95,28305,28275],{"class":154},[95,28307,535],{"class":105},[95,28309,28310],{"class":210},":\u002Frun\u002Fuser\u002F",[95,28312,25084],{"class":105},[95,28314,28272],{"class":1945},[95,28316,28275],{"class":154},[95,28318,13697],{"class":105},[95,28320,26160],{"class":154},[95,28322,28323,28325,28327,28330],{"class":97,"line":1675},[95,28324,28250],{"class":105},[95,28326,965],{"class":210},[95,28328,28329],{"class":105},"$HOME ",[95,28331,26160],{"class":154},[95,28333,28334,28337],{"class":97,"line":1680},[95,28335,28336],{"class":105},"-w $HOME ",[95,28338,26160],{"class":154},[95,28340,28341],{"class":97,"line":1709},[95,28342,28343],{"class":105},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[10,28345,9008],{},[49,28347,28348,28356,28359,28362],{},[52,28349,28350,13778,28352,28355],{},[92,28351,28116],{},[92,28353,28354],{},"--gpus all","没有英伟达显卡请注释。",[52,28357,28358],{},"--name后面请自己为容器起名。",[52,28360,28361],{},"最后一行仓库名称请你自己找对应的镜像填上。",[52,28363,28364,28365,28370],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23537,28366,28367],{},[255,28368,28369],{},"请不要加","。",[86,28372,28374],{"className":23806,"code":28373,"language":23808,"meta":14,"style":14},"--ulimit nofile=1024:524288 \\\n",[92,28375,28376],{"__ignoreMap":14},[95,28377,28378,28381,28384],{"class":97,"line":98},[95,28379,28380],{"class":1945},"--ulimit",[95,28382,28383],{"class":210}," nofile=1024:524288",[95,28385,24663],{"class":154},[10,28387,28388,28389,28394],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23537,28390,28391],{},[255,28392,28393],{},"不建议","**.**",[86,28396,28398],{"className":23806,"code":28397,"language":23808,"meta":14,"style":14},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[92,28399,28400,28427,28436],{"__ignoreMap":14},[95,28401,28402,28405,28408,28410,28412,28414,28416,28418,28420,28423,28425],{"class":97,"line":98},[95,28403,28404],{"class":1945},"--user",[95,28406,28407],{"class":105}," $(",[95,28409,28272],{"class":1945},[95,28411,28275],{"class":154},[95,28413,535],{"class":105},[95,28415,965],{"class":210},[95,28417,25084],{"class":105},[95,28419,28272],{"class":1945},[95,28421,28422],{"class":154}," -g",[95,28424,13697],{"class":105},[95,28426,26160],{"class":154},[95,28428,28429,28431,28434],{"class":97,"line":15},[95,28430,28231],{"class":105},[95,28432,28433],{"class":210},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[95,28435,24663],{"class":154},[95,28437,28438,28440,28443],{"class":97,"line":1161},[95,28439,28231],{"class":105},[95,28441,28442],{"class":210},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[95,28444,24663],{"class":154},[5109,28446,28447],{},"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":28449},[28450,28451,28452],{"id":27448,"depth":1161,"text":27449},{"id":27458,"depth":1161,"text":27459},{"id":27869,"depth":1161,"text":27872},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27440,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28459,"title":28460,"body":28461,"description":14,"extension":18,"meta":30084,"navigation":21,"path":30085,"seo":30086,"stem":30087,"__hash__":30088},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28462,"toc":30079},[28463,28466,28470,28473,28695,28699,28703,28706,28812,28817,28820,28825,28828,28833,28836,28841,28844,28856,28859,28864,28871,28899,28906,28982,28987,28990,29013,29015,29090,29095,29098,29102,29110,29115,29120,29124,29135,29141,29144,29147,29171,29174,29177,29205,29208,29211,29676,29679,29684,29689,29693,29716,29721,29725,29729,29732,29735,29738,29765,29768,29771,29789,29792,29795,29817,29825,29830,29835,29839,29842,29845,29848,29851,29896,29899,29917,29920,29925,29928,29949,29952,30008,30011,30016,30020,30023,30030,30033,30036,30041,30044,30060,30063,30076],[33,28464,28460],{"id":28465},"_6手动创建docker镜像",[66,28467,28469],{"id":28468},"_61dockerfile","6.1.DockerFile",[10,28471,28472],{},"常用命令：",[243,28474,28475,28486],{},[246,28476,28477],{},[249,28478,28479,28482,28484],{},[252,28480,28481],{"align":23720},"指令",[252,28483,25854],{"align":23720},[252,28485,27477],{"align":23720},[290,28487,28488,28498,28514,28525,28536,28547,28558,28569,28580,28594,28608,28619,28633,28644,28655,28669,28684],{},[249,28489,28490,28492,28495],{},[295,28491,27355],{"align":23720},[295,28493,28494],{"align":23720},"指定基础镜像，是 Dockerfile 的起点",[295,28496,28497],{"align":23720},"FROM ubuntu:22.04",[249,28499,28500,28503,28506],{},[295,28501,28502],{"align":23720},"LABEL",[295,28504,28505],{"align":23720},"添加元数据（如作者、版本等）",[295,28507,28508,28509,28513],{"align":23720},"LABEL maintainer=”",[344,28510,28512],{"href":28511},"mailto:you@example.com","you@example.com","”",[249,28515,28516,28519,28522],{},[295,28517,28518],{"align":23720},"ENV",[295,28520,28521],{"align":23720},"设置环境变量",[295,28523,28524],{"align":23720},"ENV PORT=8080",[249,28526,28527,28530,28533],{},[295,28528,28529],{"align":23720},"ARG",[295,28531,28532],{"align":23720},"构建参数，只在构建期间可用",[295,28534,28535],{"align":23720},"ARG VERSION=1.0",[249,28537,28538,28541,28544],{},[295,28539,28540],{"align":23720},"RUN",[295,28542,28543],{"align":23720},"构建镜像时运行命令",[295,28545,28546],{"align":23720},"RUN apt-get update && apt-get install -y curl",[249,28548,28549,28552,28555],{},[295,28550,28551],{"align":23720},"COPY",[295,28553,28554],{"align":23720},"复制文件到镜像中",[295,28556,28557],{"align":23720},"COPY . \u002Fapp",[249,28559,28560,28563,28566],{},[295,28561,28562],{"align":23720},"ADD",[295,28564,28565],{"align":23720},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[295,28567,28568],{"align":23720},"ADD archive.tar.gz \u002Fdata\u002F",[249,28570,28571,28574,28577],{},[295,28572,28573],{"align":23720},"WORKDIR",[295,28575,28576],{"align":23720},"设置工作目录",[295,28578,28579],{"align":23720},"WORKDIR \u002Fopt",[249,28581,28582,28585,28588],{},[295,28583,28584],{"align":23720},"CMD",[295,28586,28587],{"align":23720},"设置容器启动时默认命令（可被 docker run 覆盖）",[295,28589,28590,28591],{"align":23720},"CMD ",[95,28592,28593],{},"“node”, “index.js”",[249,28595,28596,28599,28602],{},[295,28597,28598],{"align":23720},"ENTRYPOINT",[295,28600,28601],{"align":23720},"设置容器启动时固定命令（通常用于 CLI 工具等）",[295,28603,28604,28605],{"align":23720},"ENTRYPOINT ",[95,28606,28607],{},"“python3”",[249,28609,28610,28613,28616],{},[295,28611,28612],{"align":23720},"EXPOSE",[295,28614,28615],{"align":23720},"声明镜像内服务监听的端口（不会自动映射）",[295,28617,28618],{"align":23720},"EXPOSE 80",[249,28620,28621,28624,28627],{},[295,28622,28623],{"align":23720},"VOLUME",[295,28625,28626],{"align":23720},"声明数据卷挂载点",[295,28628,28629,28630],{"align":23720},"VOLUME ",[95,28631,28632],{},"“\u002Fdata”",[249,28634,28635,28638,28641],{},[295,28636,28637],{"align":23720},"USER",[295,28639,28640],{"align":23720},"设置后续命令执行的用户",[295,28642,28643],{"align":23720},"USER appuser",[249,28645,28646,28649,28652],{},[295,28647,28648],{"align":23720},"ONBUILD",[295,28650,28651],{"align":23720},"当镜像作为其他镜像基础镜像时触发的构建指令",[295,28653,28654],{"align":23720},"ONBUILD COPY . \u002Fsrc",[249,28656,28657,28660,28663],{},[295,28658,28659],{"align":23720},"SHELL",[295,28661,28662],{"align":23720},"更改默认 shell，比如将 sh -c 改为 bash -c",[295,28664,28665,28666],{"align":23720},"SHELL ",[95,28667,28668],{},"“\u002Fbin\u002Fbash”, “-c”",[249,28670,28671,28674,28677],{},[295,28672,28673],{"align":23720},"HEALTHCHECK",[295,28675,28676],{"align":23720},"定义容器运行时的健康检查命令",[295,28678,28679,28680],{"align":23720},"`HEALTHCHECK CMD curl –fail ",[344,28681,28682],{"href":28682,"rel":28683},"http:\u002F\u002Flocalhost:8080",[23849],[249,28685,28686,28689,28692],{},[295,28687,28688],{"align":23720},"STOPSIGNAL",[295,28690,28691],{"align":23720},"容器停止时发送的信号",[295,28693,28694],{"align":23720},"STOPSIGNAL SIGKILL",[66,28696,28698],{"id":28697},"_62自己创建容器","6.2.自己创建容器",[21981,28700,28702],{"id":28701},"_621手动创建","6.2.1.手动创建",[10,28704,28705],{},"在x86电脑上编译x86的：",[86,28707,28709],{"className":23806,"code":28708,"language":23808,"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",[92,28710,28711,28727,28731,28744,28748,28761,28765,28778,28782,28795,28799],{"__ignoreMap":14},[95,28712,28713,28715,28718,28721,28724],{"class":97,"line":98},[95,28714,26538],{"class":1945},[95,28716,28717],{"class":210}," build",[95,28719,28720],{"class":154}," -t",[95,28722,28723],{"class":210}," ros-melodic-cuda118-cudnn8-bionic:latest",[95,28725,28726],{"class":210}," .\n",[95,28728,28729],{"class":97,"line":15},[95,28730,2382],{"emptyLinePlaceholder":21},[95,28732,28733,28735,28737,28739,28742],{"class":97,"line":1161},[95,28734,26538],{"class":1945},[95,28736,28717],{"class":210},[95,28738,28720],{"class":154},[95,28740,28741],{"class":210}," ros-noetic-focal:latest",[95,28743,28726],{"class":210},[95,28745,28746],{"class":97,"line":1176},[95,28747,2382],{"emptyLinePlaceholder":21},[95,28749,28750,28752,28754,28756,28759],{"class":97,"line":1182},[95,28751,26538],{"class":1945},[95,28753,28717],{"class":210},[95,28755,28720],{"class":154},[95,28757,28758],{"class":210}," ros-humble-jammy:latest",[95,28760,28726],{"class":210},[95,28762,28763],{"class":97,"line":1196},[95,28764,2382],{"emptyLinePlaceholder":21},[95,28766,28767,28769,28771,28773,28776],{"class":97,"line":1202},[95,28768,26538],{"class":1945},[95,28770,28717],{"class":210},[95,28772,28720],{"class":154},[95,28774,28775],{"class":210}," ros-jazzy-noble:latest",[95,28777,28726],{"class":210},[95,28779,28780],{"class":97,"line":1293},[95,28781,2382],{"emptyLinePlaceholder":21},[95,28783,28784,28786,28788,28790,28793],{"class":97,"line":1299},[95,28785,26538],{"class":1945},[95,28787,28717],{"class":210},[95,28789,28720],{"class":154},[95,28791,28792],{"class":210}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[95,28794,28726],{"class":210},[95,28796,28797],{"class":97,"line":1311},[95,28798,2382],{"emptyLinePlaceholder":21},[95,28800,28801,28803,28805,28807,28810],{"class":97,"line":1594},[95,28802,26538],{"class":1945},[95,28804,28717],{"class":210},[95,28806,28720],{"class":154},[95,28808,28809],{"class":210}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[95,28811,28726],{"class":210},[10,28813,28814],{},[1444,28815],{"alt":14,"src":28816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[10,28818,28819],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[10,28821,28822],{},[1444,28823],{"alt":14,"src":28824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[10,28826,28827],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[49,28829,28830],{},[52,28831,28832],{},"创建 Docker Hub 账户",[10,28834,28835],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[49,28837,28838],{"start":15},[52,28839,28840],{},"登录 Docker Hub",[10,28842,28843],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[86,28845,28847],{"className":23806,"code":28846,"language":23808,"meta":14,"style":14},"docker login\n",[92,28848,28849],{"__ignoreMap":14},[95,28850,28851,28853],{"class":97,"line":98},[95,28852,26538],{"class":1945},[95,28854,28855],{"class":210}," login\n",[10,28857,28858],{},"输入你的 Docker Hub 用户名和密码进行验证。",[49,28860,28861],{},[52,28862,28863],{},"为你的镜像打标签",[10,28865,28866,28867,28870],{},"Docker Hub 使用 ",[92,28868,28869],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[86,28872,28874],{"className":23806,"code":28873,"language":23808,"meta":14,"style":14},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[92,28875,28876],{"__ignoreMap":14},[95,28877,28878,28880,28883,28885,28888,28891,28894,28896],{"class":97,"line":98},[95,28879,26538],{"class":1945},[95,28881,28882],{"class":210}," tag",[95,28884,28775],{"class":210},[95,28886,28887],{"class":101}," \u003C",[95,28889,28890],{"class":210},"你的用户",[95,28892,28893],{"class":105},"名",[95,28895,1066],{"class":101},[95,28897,28898],{"class":210},"\u002Fros-jazzy-noble:latest\n",[10,28900,28901,28902,28905],{},"例如，如果你的 Docker Hub 用户名是 ",[92,28903,28904],{},"tungchiahui","，你应该执行：",[86,28907,28909],{"className":23806,"code":28908,"language":23808,"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",[92,28910,28911,28922,28926,28937,28941,28952,28956,28967,28971],{"__ignoreMap":14},[95,28912,28913,28915,28917,28919],{"class":97,"line":98},[95,28914,26538],{"class":1945},[95,28916,28882],{"class":210},[95,28918,28741],{"class":210},[95,28920,28921],{"class":210}," tungchiahui\u002Fros-noetic-focal:latest\n",[95,28923,28924],{"class":97,"line":15},[95,28925,2382],{"emptyLinePlaceholder":21},[95,28927,28928,28930,28932,28934],{"class":97,"line":1161},[95,28929,26538],{"class":1945},[95,28931,28882],{"class":210},[95,28933,28758],{"class":210},[95,28935,28936],{"class":210}," tungchiahui\u002Fros-humble-jammy:latest\n",[95,28938,28939],{"class":97,"line":1176},[95,28940,2382],{"emptyLinePlaceholder":21},[95,28942,28943,28945,28947,28949],{"class":97,"line":1182},[95,28944,26538],{"class":1945},[95,28946,28882],{"class":210},[95,28948,28775],{"class":210},[95,28950,28951],{"class":210}," tungchiahui\u002Fros-jazzy-noble:latest\n",[95,28953,28954],{"class":97,"line":1196},[95,28955,2382],{"emptyLinePlaceholder":21},[95,28957,28958,28960,28962,28964],{"class":97,"line":1202},[95,28959,26538],{"class":1945},[95,28961,28882],{"class":210},[95,28963,28792],{"class":210},[95,28965,28966],{"class":210}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[95,28968,28969],{"class":97,"line":1293},[95,28970,2382],{"emptyLinePlaceholder":21},[95,28972,28973,28975,28977,28979],{"class":97,"line":1299},[95,28974,26538],{"class":1945},[95,28976,28882],{"class":210},[95,28978,28809],{"class":210},[95,28980,28981],{"class":210}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[49,28983,28984],{"start":15},[52,28985,28986],{},"推送镜像到 Docker Hub",[10,28988,28989],{},"使用以下命令将镜像推送到 Docker Hub：",[86,28991,28993],{"className":23806,"code":28992,"language":23808,"meta":14,"style":14},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[92,28994,28995],{"__ignoreMap":14},[95,28996,28997,28999,29002,29004,29006,29008,29010],{"class":97,"line":98},[95,28998,26538],{"class":1945},[95,29000,29001],{"class":210}," push",[95,29003,28887],{"class":101},[95,29005,28890],{"class":210},[95,29007,28893],{"class":105},[95,29009,1066],{"class":101},[95,29011,29012],{"class":210},"\u002Fros-noetic-jazzy-noble:latest\n",[10,29014,14616],{},[86,29016,29018],{"className":23806,"code":29017,"language":23808,"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",[92,29019,29020,29028,29032,29040,29044,29052,29056,29065,29069,29077,29081],{"__ignoreMap":14},[95,29021,29022,29024,29026],{"class":97,"line":98},[95,29023,26538],{"class":1945},[95,29025,29001],{"class":210},[95,29027,28921],{"class":210},[95,29029,29030],{"class":97,"line":15},[95,29031,2382],{"emptyLinePlaceholder":21},[95,29033,29034,29036,29038],{"class":97,"line":1161},[95,29035,26538],{"class":1945},[95,29037,29001],{"class":210},[95,29039,28936],{"class":210},[95,29041,29042],{"class":97,"line":1176},[95,29043,2382],{"emptyLinePlaceholder":21},[95,29045,29046,29048,29050],{"class":97,"line":1182},[95,29047,26538],{"class":1945},[95,29049,29001],{"class":210},[95,29051,28951],{"class":210},[95,29053,29054],{"class":97,"line":1196},[95,29055,2382],{"emptyLinePlaceholder":21},[95,29057,29058,29060,29062],{"class":97,"line":1202},[95,29059,26538],{"class":1945},[95,29061,29001],{"class":210},[95,29063,29064],{"class":210}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[95,29066,29067],{"class":97,"line":1293},[95,29068,2382],{"emptyLinePlaceholder":21},[95,29070,29071,29073,29075],{"class":97,"line":1299},[95,29072,26538],{"class":1945},[95,29074,29001],{"class":210},[95,29076,28981],{"class":210},[95,29078,29079],{"class":97,"line":1311},[95,29080,2382],{"emptyLinePlaceholder":21},[95,29082,29083,29085,29087],{"class":97,"line":1594},[95,29084,26538],{"class":1945},[95,29086,29001],{"class":210},[95,29088,29089],{"class":210}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[49,29091,29092],{"start":1161},[52,29093,29094],{},"验证推送成功",[10,29096,29097],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[10,29099,29100],{},[255,29101,3766],{},[1113,29103,29104,29107],{},[52,29105,29106],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[52,29108,29109],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[10,29111,29112],{},[1444,29113],{"alt":14,"src":29114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[10,29116,29117],{},[1444,29118],{"alt":14,"src":29119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21981,29121,29123],{"id":29122},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[10,29125,29126,29127,29130,29131,29134],{},"如果您想在 ",[255,29128,29129],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[255,29132,29133],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[10,29136,29137,29138],{},"1. ",[255,29139,29140],{},"启用 Docker 跨平台构建",[10,29142,29143],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[10,29145,29146],{},"第一步：启用 buildx（只需执行一次）",[86,29148,29150],{"className":23806,"code":29149,"language":23808,"meta":14,"style":14},"docker buildx create --name multiarch_builder --use\n",[92,29151,29152],{"__ignoreMap":14},[95,29153,29154,29156,29159,29162,29165,29168],{"class":97,"line":98},[95,29155,26538],{"class":1945},[95,29157,29158],{"class":210}," buildx",[95,29160,29161],{"class":210}," create",[95,29163,29164],{"class":154}," --name",[95,29166,29167],{"class":210}," multiarch_builder",[95,29169,29170],{"class":154}," --use\n",[10,29172,29173],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[10,29175,29176],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[86,29178,29180],{"className":23806,"code":29179,"language":23808,"meta":14,"style":14},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[92,29181,29182],{"__ignoreMap":14},[95,29183,29184,29186,29188,29190,29193,29196,29199,29202],{"class":97,"line":98},[95,29185,26538],{"class":1945},[95,29187,27215],{"class":210},[95,29189,27218],{"class":154},[95,29191,29192],{"class":154}," --privileged",[95,29194,29195],{"class":210}," multiarch\u002Fqemu-user-static",[95,29197,29198],{"class":154}," --reset",[95,29200,29201],{"class":154}," -p",[95,29203,29204],{"class":210}," yes\n",[10,29206,29207],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[10,29209,29210],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[86,29212,29214],{"className":23806,"code":29213,"language":23808,"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",[92,29215,29216,29258,29262,29267,29277,29287,29296,29302,29306,29310,29320,29328,29337,29343,29347,29351,29361,29369,29378,29384,29388,29392,29402,29410,29419,29425,29429,29433,29443,29451,29460,29466,29470,29474,29484,29492,29501,29507,29511,29515,29525,29533,29542,29548,29552,29556,29566,29574,29583,29589,29593,29597,29607,29615,29624,29630,29634,29638,29649,29657,29666,29672],{"__ignoreMap":14},[95,29217,29218,29220,29222,29224,29227,29230,29232,29234,29237,29239,29241,29243,29245,29248,29251,29253,29256],{"class":97,"line":98},[95,29219,26538],{"class":1945},[95,29221,29158],{"class":210},[95,29223,28717],{"class":210},[95,29225,29226],{"class":154}," --platform",[95,29228,29229],{"class":210}," linux\u002Famd64,linux\u002Farm64",[95,29231,28720],{"class":154},[95,29233,28887],{"class":101},[95,29235,29236],{"class":210},"你的镜像",[95,29238,28893],{"class":105},[95,29240,1066],{"class":101},[95,29242,965],{"class":210},[95,29244,1016],{"class":101},[95,29246,29247],{"class":210},"标",[95,29249,29250],{"class":105},"签",[95,29252,1066],{"class":101},[95,29254,29255],{"class":154}," --push",[95,29257,28726],{"class":210},[95,29259,29260],{"class":97,"line":15},[95,29261,2382],{"emptyLinePlaceholder":21},[95,29263,29264],{"class":97,"line":1161},[95,29265,29266],{"class":164},"# 例子：\n",[95,29268,29269,29271,29273,29275],{"class":97,"line":1176},[95,29270,26538],{"class":1945},[95,29272,29158],{"class":210},[95,29274,28717],{"class":210},[95,29276,24663],{"class":154},[95,29278,29279,29282,29285],{"class":97,"line":1182},[95,29280,29281],{"class":105},"--platform ",[95,29283,29284],{"class":210},"linux\u002Famd64,linux\u002Farm64",[95,29286,24663],{"class":154},[95,29288,29289,29291,29294],{"class":97,"line":1196},[95,29290,28720],{"class":154},[95,29292,29293],{"class":210}," tungchiahui\u002Fros:noetic-focal",[95,29295,24663],{"class":154},[95,29297,29298,29300],{"class":97,"line":1202},[95,29299,29255],{"class":154},[95,29301,24663],{"class":154},[95,29303,29304],{"class":97,"line":1293},[95,29305,28726],{"class":210},[95,29307,29308],{"class":97,"line":1299},[95,29309,2382],{"emptyLinePlaceholder":21},[95,29311,29312,29314,29316,29318],{"class":97,"line":1311},[95,29313,26538],{"class":1945},[95,29315,29158],{"class":210},[95,29317,28717],{"class":210},[95,29319,24663],{"class":154},[95,29321,29322,29324,29326],{"class":97,"line":1594},[95,29323,29281],{"class":105},[95,29325,29284],{"class":210},[95,29327,24663],{"class":154},[95,29329,29330,29332,29335],{"class":97,"line":1599},[95,29331,28720],{"class":154},[95,29333,29334],{"class":210}," tungchiahui\u002Fros:humble-jammy",[95,29336,24663],{"class":154},[95,29338,29339,29341],{"class":97,"line":1605},[95,29340,29255],{"class":154},[95,29342,24663],{"class":154},[95,29344,29345],{"class":97,"line":1610},[95,29346,28726],{"class":210},[95,29348,29349],{"class":97,"line":1624},[95,29350,2382],{"emptyLinePlaceholder":21},[95,29352,29353,29355,29357,29359],{"class":97,"line":1629},[95,29354,26538],{"class":1945},[95,29356,29158],{"class":210},[95,29358,28717],{"class":210},[95,29360,24663],{"class":154},[95,29362,29363,29365,29367],{"class":97,"line":1635},[95,29364,29281],{"class":105},[95,29366,29284],{"class":210},[95,29368,24663],{"class":154},[95,29370,29371,29373,29376],{"class":97,"line":1656},[95,29372,28720],{"class":154},[95,29374,29375],{"class":210}," tungchiahui\u002Fros:jazzy-noble",[95,29377,24663],{"class":154},[95,29379,29380,29382],{"class":97,"line":1661},[95,29381,29255],{"class":154},[95,29383,24663],{"class":154},[95,29385,29386],{"class":97,"line":1675},[95,29387,28726],{"class":210},[95,29389,29390],{"class":97,"line":1680},[95,29391,2382],{"emptyLinePlaceholder":21},[95,29393,29394,29396,29398,29400],{"class":97,"line":1709},[95,29395,26305],{"class":1945},[95,29397,29158],{"class":210},[95,29399,28717],{"class":210},[95,29401,24663],{"class":154},[95,29403,29404,29406,29408],{"class":97,"line":1714},[95,29405,29281],{"class":105},[95,29407,29284],{"class":210},[95,29409,24663],{"class":154},[95,29411,29412,29414,29417],{"class":97,"line":1731},[95,29413,28720],{"class":154},[95,29415,29416],{"class":210}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[95,29418,24663],{"class":154},[95,29420,29421,29423],{"class":97,"line":1736},[95,29422,29255],{"class":154},[95,29424,24663],{"class":154},[95,29426,29427],{"class":97,"line":1741},[95,29428,28726],{"class":210},[95,29430,29431],{"class":97,"line":1746},[95,29432,2382],{"emptyLinePlaceholder":21},[95,29434,29435,29437,29439,29441],{"class":97,"line":1760},[95,29436,26538],{"class":1945},[95,29438,29158],{"class":210},[95,29440,28717],{"class":210},[95,29442,24663],{"class":154},[95,29444,29445,29447,29449],{"class":97,"line":1765},[95,29446,29281],{"class":105},[95,29448,29284],{"class":210},[95,29450,24663],{"class":154},[95,29452,29453,29455,29458],{"class":97,"line":2559},[95,29454,28720],{"class":154},[95,29456,29457],{"class":210}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[95,29459,24663],{"class":154},[95,29461,29462,29464],{"class":97,"line":2573},[95,29463,29255],{"class":154},[95,29465,24663],{"class":154},[95,29467,29468],{"class":97,"line":2581},[95,29469,28726],{"class":210},[95,29471,29472],{"class":97,"line":2586},[95,29473,2382],{"emptyLinePlaceholder":21},[95,29475,29476,29478,29480,29482],{"class":97,"line":2592},[95,29477,26305],{"class":1945},[95,29479,29158],{"class":210},[95,29481,28717],{"class":210},[95,29483,24663],{"class":154},[95,29485,29486,29488,29490],{"class":97,"line":2598},[95,29487,29281],{"class":105},[95,29489,29284],{"class":210},[95,29491,24663],{"class":154},[95,29493,29494,29496,29499],{"class":97,"line":2603},[95,29495,28720],{"class":154},[95,29497,29498],{"class":210}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[95,29500,24663],{"class":154},[95,29502,29503,29505],{"class":97,"line":7931},[95,29504,29255],{"class":154},[95,29506,24663],{"class":154},[95,29508,29509],{"class":97,"line":7955},[95,29510,28726],{"class":210},[95,29512,29513],{"class":97,"line":7960},[95,29514,2382],{"emptyLinePlaceholder":21},[95,29516,29517,29519,29521,29523],{"class":97,"line":7966},[95,29518,26538],{"class":1945},[95,29520,29158],{"class":210},[95,29522,28717],{"class":210},[95,29524,24663],{"class":154},[95,29526,29527,29529,29531],{"class":97,"line":7993},[95,29528,29281],{"class":105},[95,29530,29284],{"class":210},[95,29532,24663],{"class":154},[95,29534,29535,29537,29540],{"class":97,"line":7998},[95,29536,28720],{"class":154},[95,29538,29539],{"class":210}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[95,29541,24663],{"class":154},[95,29543,29544,29546],{"class":97,"line":8004},[95,29545,29255],{"class":154},[95,29547,24663],{"class":154},[95,29549,29550],{"class":97,"line":8016},[95,29551,28726],{"class":210},[95,29553,29554],{"class":97,"line":8028},[95,29555,2382],{"emptyLinePlaceholder":21},[95,29557,29558,29560,29562,29564],{"class":97,"line":8040},[95,29559,26538],{"class":1945},[95,29561,29158],{"class":210},[95,29563,28717],{"class":210},[95,29565,24663],{"class":154},[95,29567,29568,29570,29572],{"class":97,"line":9699},[95,29569,29281],{"class":105},[95,29571,29284],{"class":210},[95,29573,24663],{"class":154},[95,29575,29576,29578,29581],{"class":97,"line":9724},[95,29577,28720],{"class":154},[95,29579,29580],{"class":210}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[95,29582,24663],{"class":154},[95,29584,29585,29587],{"class":97,"line":9747},[95,29586,29255],{"class":154},[95,29588,24663],{"class":154},[95,29590,29591],{"class":97,"line":9771},[95,29592,28726],{"class":210},[95,29594,29595],{"class":97,"line":9776},[95,29596,2382],{"emptyLinePlaceholder":21},[95,29598,29599,29601,29603,29605],{"class":97,"line":9781},[95,29600,26305],{"class":1945},[95,29602,29158],{"class":210},[95,29604,28717],{"class":210},[95,29606,24663],{"class":154},[95,29608,29609,29611,29613],{"class":97,"line":9786},[95,29610,29281],{"class":105},[95,29612,29284],{"class":210},[95,29614,24663],{"class":154},[95,29616,29617,29619,29622],{"class":97,"line":9795},[95,29618,28720],{"class":154},[95,29620,29621],{"class":210}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[95,29623,24663],{"class":154},[95,29625,29626,29628],{"class":97,"line":9800},[95,29627,29255],{"class":154},[95,29629,24663],{"class":154},[95,29631,29632],{"class":97,"line":9806},[95,29633,28726],{"class":210},[95,29635,29636],{"class":97,"line":9827},[95,29637,2382],{"emptyLinePlaceholder":21},[95,29639,29640,29643,29645,29647],{"class":97,"line":9833},[95,29641,29642],{"class":1945},"  docker",[95,29644,29158],{"class":210},[95,29646,28717],{"class":210},[95,29648,24663],{"class":154},[95,29650,29651,29653,29655],{"class":97,"line":9847},[95,29652,29281],{"class":105},[95,29654,29284],{"class":210},[95,29656,24663],{"class":154},[95,29658,29659,29661,29664],{"class":97,"line":9853},[95,29660,28720],{"class":154},[95,29662,29663],{"class":210}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[95,29665,24663],{"class":154},[95,29667,29668,29670],{"class":97,"line":9880},[95,29669,29255],{"class":154},[95,29671,24663],{"class":154},[95,29673,29674],{"class":97,"line":9889},[95,29675,28726],{"class":210},[10,29677,29678],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[10,29680,29681],{},[1444,29682],{"alt":14,"src":29683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[10,29685,29686],{},[1444,29687],{"alt":14,"src":29688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21981,29690,29692],{"id":29691},"_623清除构建缓存","6.2.3.清除构建缓存",[86,29694,29696],{"className":23806,"code":29695,"language":23808,"meta":14,"style":14},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[92,29697,29698,29703],{"__ignoreMap":14},[95,29699,29700],{"class":97,"line":98},[95,29701,29702],{"class":164},"# 清理BuildKit构建缓存\n",[95,29704,29705,29707,29710,29713],{"class":97,"line":15},[95,29706,26538],{"class":1945},[95,29708,29709],{"class":210}," builder",[95,29711,29712],{"class":210}," prune",[95,29714,29715],{"class":154}," -f\n",[10,29717,29718],{},[1444,29719],{"alt":14,"src":29720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[66,29722,29724],{"id":29723},"_63补充","6.3.补充",[21981,29726,29728],{"id":29727},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[10,29730,29731],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[10,29733,29734],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[10,29736,29737],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[86,29739,29741],{"className":23806,"code":29740,"language":23808,"meta":14,"style":14},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[92,29742,29743,29750],{"__ignoreMap":14},[95,29744,29745,29747],{"class":97,"line":98},[95,29746,27355],{"class":1945},[95,29748,29749],{"class":210}," nginx\n",[95,29751,29752,29754,29757,29760,29762],{"class":97,"line":15},[95,29753,28540],{"class":1945},[95,29755,29756],{"class":210}," echo",[95,29758,29759],{"class":210}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[95,29761,26207],{"class":101},[95,29763,29764],{"class":210}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[10,29766,29767],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[10,29769,29770],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[86,29772,29774],{"className":23806,"code":29773,"language":23808,"meta":14,"style":14},"docker build -t nginx:tuling .\n",[92,29775,29776],{"__ignoreMap":14},[95,29777,29778,29780,29782,29784,29787],{"class":97,"line":98},[95,29779,26538],{"class":1945},[95,29781,28717],{"class":210},[95,29783,28720],{"class":154},[95,29785,29786],{"class":210}," nginx:tuling",[95,29788,28726],{"class":210},[10,29790,29791],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[10,29793,29794],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[86,29796,29798],{"className":23806,"code":29797,"language":23808,"meta":14,"style":14},"docker run -d -p 92:80 nginx:tuling\n",[92,29799,29800],{"__ignoreMap":14},[95,29801,29802,29804,29806,29809,29811,29814],{"class":97,"line":98},[95,29803,26538],{"class":1945},[95,29805,27215],{"class":210},[95,29807,29808],{"class":154}," -d",[95,29810,29201],{"class":154},[95,29812,29813],{"class":210}," 92:80",[95,29815,29816],{"class":210}," nginx:tuling\n",[10,29818,29819,29820],{},"4、访问 ",[344,29821,29824],{"href":29822,"rel":29823},"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",[23849],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[10,29826,29827],{},[1444,29828],{"alt":14,"src":29829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[10,29831,29832],{},[1444,29833],{"alt":14,"src":29834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21981,29836,29838],{"id":29837},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[10,29840,29841],{},"只需要知道大体流程即可",[10,29843,29844],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[10,29846,29847],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[10,29849,29850],{},"2、在Dockerfile中添加以下内容",[86,29852,29854],{"className":26076,"code":29853,"language":26078,"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",[92,29855,29856,29861,29866,29871,29876,29881,29886,29891],{"__ignoreMap":14},[95,29857,29858],{"class":97,"line":98},[95,29859,29860],{},"# 基于哪个镜像\n",[95,29862,29863],{"class":97,"line":15},[95,29864,29865],{},"From java:8\n",[95,29867,29868],{"class":97,"line":1161},[95,29869,29870],{},"# 复制文件到容器\n",[95,29872,29873],{"class":97,"line":1176},[95,29874,29875],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[95,29877,29878],{"class":97,"line":1182},[95,29879,29880],{},"# 声明需要暴露的端口\n",[95,29882,29883],{"class":97,"line":1196},[95,29884,29885],{},"EXPOSE 8877\n",[95,29887,29888],{"class":97,"line":1202},[95,29889,29890],{},"# 配置容器启动后执行的命令\n",[95,29892,29893],{"class":97,"line":1293},[95,29894,29895],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[10,29897,29898],{},"3、使用docker build命令构建镜像",[86,29900,29902],{"className":23806,"code":29901,"language":23808,"meta":14,"style":14},"docker build -t tulingmall-member:0.0.5 .\n",[92,29903,29904],{"__ignoreMap":14},[95,29905,29906,29908,29910,29912,29915],{"class":97,"line":98},[95,29907,26538],{"class":1945},[95,29909,28717],{"class":210},[95,29911,28720],{"class":154},[95,29913,29914],{"class":210}," tulingmall-member:0.0.5",[95,29916,28726],{"class":210},[10,29918,29919],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[10,29921,29922],{},[1444,29923],{"alt":14,"src":29924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[10,29926,29927],{},"4、启动镜像，加-d可在后台启动",[86,29929,29931],{"className":23806,"code":29930,"language":23808,"meta":14,"style":14},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[92,29932,29933],{"__ignoreMap":14},[95,29934,29935,29937,29939,29941,29943,29946],{"class":97,"line":98},[95,29936,26538],{"class":1945},[95,29938,27215],{"class":210},[95,29940,29808],{"class":154},[95,29942,29201],{"class":154},[95,29944,29945],{"class":210}," 8877:8877",[95,29947,29948],{"class":210}," tulingmall-member:0.0.5\n",[10,29950,29951],{},"加上JVM参数：",[86,29953,29955],{"className":23806,"code":29954,"language":23808,"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",[92,29956,29957,29962,29977,29987,29996,30003],{"__ignoreMap":14},[95,29958,29959],{"class":97,"line":98},[95,29960,29961],{"class":164},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[95,29963,29964,29966,29968,29971,29973,29975],{"class":97,"line":15},[95,29965,26538],{"class":1945},[95,29967,27215],{"class":210},[95,29969,29970],{"class":154},"  -d",[95,29972,29201],{"class":154},[95,29974,29945],{"class":210},[95,29976,24663],{"class":154},[95,29978,29979,29981,29984],{"class":97,"line":1161},[95,29980,28113],{"class":105},[95,29982,29983],{"class":210},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[95,29985,29986],{"class":154},"  \\\n",[95,29988,29989,29991,29994],{"class":97,"line":1176},[95,29990,28113],{"class":105},[95,29992,29993],{"class":210},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[95,29995,29986],{"class":154},[95,29997,29998,30001],{"class":97,"line":1182},[95,29999,30000],{"class":105},"--cap-add=SYS_PTRACE  ",[95,30002,26160],{"class":154},[95,30004,30005],{"class":97,"line":1196},[95,30006,30007],{"class":105},"tulingmall-member:0.0.5\n",[10,30009,30010],{},"5、访问会员服务接口",[10,30012,30013],{},[1444,30014],{"alt":14,"src":30015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21981,30017,30019],{"id":30018},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[10,30021,30022],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[10,30024,30025,30026],{},"阿里云docker镜像仓库：",[344,30027,30028],{"href":30028,"rel":30029},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23849],[10,30031,30032],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[10,30034,30035],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[10,30037,30038],{},[1444,30039],{"alt":14,"src":30040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[10,30042,30043],{},"要把镜像推送到镜像仓库",[86,30045,30047],{"className":23806,"code":30046,"language":23808,"meta":14,"style":14},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[92,30048,30049],{"__ignoreMap":14},[95,30050,30051,30053,30055,30057],{"class":97,"line":98},[95,30052,26538],{"class":1945},[95,30054,28882],{"class":210},[95,30056,29914],{"class":210},[95,30058,30059],{"class":210}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[10,30061,30062],{},"最后将镜像推送到远程仓库",[86,30064,30066],{"className":23806,"code":30065,"language":23808,"meta":14,"style":14},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[92,30067,30068],{"__ignoreMap":14},[95,30069,30070,30072,30074],{"class":97,"line":98},[95,30071,26538],{"class":1945},[95,30073,29001],{"class":210},[95,30075,30059],{"class":210},[5109,30077,30078],{},"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":30080},[30081,30082,30083],{"id":28468,"depth":1161,"text":28469},{"id":28697,"depth":1161,"text":28698},{"id":29723,"depth":1161,"text":29724},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28460,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30090,"title":30091,"body":30092,"description":14,"extension":18,"meta":30235,"navigation":21,"path":30236,"seo":30237,"stem":30238,"__hash__":30239},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30093,"toc":30233},[30094,30097,30102,30107,30110,30115,30120,30123,30128,30133,30136,30141,30144,30147,30150,30153,30156,30159,30179,30201,30204,30207,30227,30230],[33,30095,30091],{"id":30096},"_7vscode远程开发",[49,30098,30099],{},[52,30100,30101],{},"插件1：微软Docker工具",[10,30103,30104],{},[1444,30105],{"alt":14,"src":30106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[10,30108,30109],{},"docker扩展插件已经进化为container tools了，请安装container tools",[10,30111,30112],{},[1444,30113],{"alt":14,"src":30114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[49,30116,30117],{"start":15},[52,30118,30119],{},"插件2：微软Docker远程开发工具",[10,30121,30122],{},"下面这是远程开发的插件。",[10,30124,30125],{},[1444,30126],{"alt":14,"src":30127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[10,30129,30130],{},[1444,30131],{"alt":14,"src":30132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[10,30134,30135],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[10,30137,30138],{},[1444,30139],{"alt":14,"src":30140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[10,30142,30143],{},"安装完拓展之后，vscode进行链接：",[10,30145,30146],{},"1.按ctrl+shift+p",[10,30148,30149],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[10,30151,30152],{},"3.选择目前运行的容器",[10,30154,30155],{},"4.VS Code 会在新窗口中打开并连接到容器",[10,30157,30158],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[86,30160,30162],{"className":23806,"code":30161,"language":23808,"meta":14,"style":14},"docker run -v 主机目录:容器目录 image-name\n",[92,30163,30164],{"__ignoreMap":14},[95,30165,30166,30168,30170,30173,30176],{"class":97,"line":98},[95,30167,26538],{"class":1945},[95,30169,27215],{"class":210},[95,30171,30172],{"class":154}," -v",[95,30174,30175],{"class":210}," 主机目录:容器目录",[95,30177,30178],{"class":210}," image-name\n",[86,30180,30182],{"className":23806,"code":30181,"language":23808,"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",[92,30183,30184],{"__ignoreMap":14},[95,30185,30186,30188,30190,30193,30195,30198],{"class":97,"line":98},[95,30187,26538],{"class":1945},[95,30189,27215],{"class":210},[95,30191,30192],{"class":154}," -it",[95,30194,30172],{"class":154},[95,30196,30197],{"class":210}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[95,30199,30200],{"class":210}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[10,30202,30203],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[10,30205,30206],{},"查看挂载情况：",[86,30208,30210],{"className":23806,"code":30209,"language":23808,"meta":14,"style":14},"mount | grep -i project\n",[92,30211,30212],{"__ignoreMap":14},[95,30213,30214,30217,30219,30222,30224],{"class":97,"line":98},[95,30215,30216],{"class":1945},"mount",[95,30218,25094],{"class":101},[95,30220,30221],{"class":1945}," grep",[95,30223,26415],{"class":154},[95,30225,30226],{"class":210}," project\n",[10,30228,30229],{},"也可以通过ls来进行查看",[5109,30231,30232],{},"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":30234},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30091,"description":14},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30241,"title":30242,"body":30243,"description":23360,"extension":18,"meta":30247,"navigation":21,"path":30249,"seo":30250,"stem":30251,"__hash__":30252},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30244,"toc":30245},[],{"title":14,"searchDepth":15,"depth":15,"links":30246},[],{"category":30248},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30242,"description":23360},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30254,"title":30255,"body":30256,"description":23360,"extension":18,"meta":30260,"navigation":21,"path":30261,"seo":30262,"stem":30263,"__hash__":30264},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30257,"toc":30258},[],{"title":14,"searchDepth":15,"depth":15,"links":30259},[],{"category":30248},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30255,"description":23360},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30266,"title":30267,"body":30268,"description":23360,"extension":18,"meta":30561,"navigation":21,"path":30562,"seo":30563,"stem":30564,"__hash__":30565},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30269,"toc":30559},[30270,30273,30281,30296,30301,30352,30355,30361,30548,30553,30556],[33,30271,30267],{"id":30272},"_1验证深度学习环境",[10,30274,30275,30276],{},"关于环境的安装，看",[344,30277,30280],{"href":30278,"rel":30279},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23849],"Pytorch-->深度学习",[10,30282,30283,30284,30287,30288,30291,30292,30295],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[92,30285,30286],{},"pytorch-cuda=12.4"," 是一个“ ",[255,30289,30290],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[255,30293,30294],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[10,30297,30298],{},[1444,30299],{"alt":14,"src":30300},"\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",[86,30302,30304],{"className":23806,"code":30303,"language":23808,"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",[92,30305,30306,30311],{"__ignoreMap":14},[95,30307,30308],{"class":97,"line":98},[95,30309,30310],{"class":164},"# CUDA 12.4\n",[95,30312,30313,30316,30318,30321,30324,30327,30330,30333,30335,30338,30341,30344,30347,30349],{"class":97,"line":15},[95,30314,30315],{"class":1945},"conda",[95,30317,23818],{"class":210},[95,30319,30320],{"class":210}," pytorch==",[95,30322,30323],{"class":154},"2.5.1",[95,30325,30326],{"class":210}," torchvision==",[95,30328,30329],{"class":154},"0.20.1",[95,30331,30332],{"class":210}," torchaudio==",[95,30334,30323],{"class":154},[95,30336,30337],{"class":210}," pytorch-cuda=",[95,30339,30340],{"class":154},"12.4",[95,30342,30343],{"class":154}," -c",[95,30345,30346],{"class":210}," pytorch",[95,30348,30343],{"class":154},[95,30350,30351],{"class":210}," nvidia\n",[10,30353,30354],{},"）：",[10,30356,30357],{},[344,30358,30359],{"href":30359,"rel":30360},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23849],[86,30362,30366],{"className":30363,"code":30364,"language":30365,"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",[92,30367,30368,30373,30381,30386,30396,30412,30417,30427,30464,30471,30483,30499,30504,30514,30526,30536],{"__ignoreMap":14},[95,30369,30370],{"class":97,"line":98},[95,30371,30372],{"class":164},"# 对深度学习环境进行测试\n",[95,30374,30375,30378],{"class":97,"line":15},[95,30376,30377],{"class":101},"import",[95,30379,30380],{"class":105}," torch\n",[95,30382,30383],{"class":97,"line":1161},[95,30384,30385],{"class":164},"# 查看cuda是否被激活\n",[95,30387,30388,30391,30393],{"class":97,"line":1176},[95,30389,30390],{"class":105},"flag",[95,30392,151],{"class":101},[95,30394,30395],{"class":105},"torch.cuda.is_available()\n",[95,30397,30398,30401,30403,30406,30409],{"class":97,"line":1182},[95,30399,30400],{"class":154},"print",[95,30402,106],{"class":105},[95,30404,30405],{"class":210},"\"cuda:\"",[95,30407,30408],{"class":105},", flag)   ",[95,30410,30411],{"class":164},"#返回true的话说明被激活\n",[95,30413,30414],{"class":97,"line":1196},[95,30415,30416],{"class":164},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[95,30418,30419,30422,30424],{"class":97,"line":1202},[95,30420,30421],{"class":105},"ngpu",[95,30423,151],{"class":101},[95,30425,30426],{"class":154},"1\n",[95,30428,30429,30432,30434,30437,30440,30442,30445,30448,30451,30453,30455,30457,30459,30462],{"class":97,"line":1293},[95,30430,30431],{"class":105},"device",[95,30433,151],{"class":101},[95,30435,30436],{"class":105},"torch.device(",[95,30438,30439],{"class":210},"\"cuda:0\"",[95,30441,1686],{"class":101},[95,30443,30444],{"class":105},"(torch.cuda.is_available() ",[95,30446,30447],{"class":101},"and",[95,30449,30450],{"class":105}," ngpu",[95,30452,1066],{"class":101},[95,30454,297],{"class":154},[95,30456,13697],{"class":105},[95,30458,1683],{"class":101},[95,30460,30461],{"class":210}," \"cpu\"",[95,30463,112],{"class":105},[95,30465,30466,30468],{"class":97,"line":1299},[95,30467,30400],{"class":154},[95,30469,30470],{"class":105},"(device)\n",[95,30472,30473,30475,30478,30480],{"class":97,"line":1311},[95,30474,30400],{"class":154},[95,30476,30477],{"class":105},"(torch.cuda.get_device_name(",[95,30479,297],{"class":154},[95,30481,30482],{"class":105},"))\n",[95,30484,30485,30487,30490,30492,30494,30496],{"class":97,"line":1594},[95,30486,30400],{"class":154},[95,30488,30489],{"class":105},"(torch.rand(",[95,30491,177],{"class":154},[95,30493,484],{"class":105},[95,30495,177],{"class":154},[95,30497,30498],{"class":105},").cuda())\n",[95,30500,30501],{"class":97,"line":1599},[95,30502,30503],{"class":164},"# 查看cuda和cudnn的版本\n",[95,30505,30506,30509,30511],{"class":97,"line":1605},[95,30507,30508],{"class":105},"cuda_version",[95,30510,151],{"class":101},[95,30512,30513],{"class":105},"torch.version.cuda\n",[95,30515,30516,30518,30520,30523],{"class":97,"line":1610},[95,30517,30400],{"class":154},[95,30519,106],{"class":105},[95,30521,30522],{"class":210},"\"cuda version\"",[95,30524,30525],{"class":105},",cuda_version)\n",[95,30527,30528,30531,30533],{"class":97,"line":1624},[95,30529,30530],{"class":105},"cudnn_version",[95,30532,151],{"class":101},[95,30534,30535],{"class":105},"torch.backends.cudnn.version()\n",[95,30537,30538,30540,30542,30545],{"class":97,"line":1629},[95,30539,30400],{"class":154},[95,30541,106],{"class":105},[95,30543,30544],{"class":210},"\"cudnn version\"",[95,30546,30547],{"class":105},",cudnn_version)\n",[10,30549,30550],{},[1444,30551],{"alt":14,"src":30552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[10,30554,30555],{},"cuda:0 指的是一块显卡",[5109,30557,30558],{},"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":30560},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30267,"description":23360},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30567,"title":30568,"body":30569,"description":23360,"extension":18,"meta":50373,"navigation":21,"path":50374,"seo":50375,"stem":50376,"__hash__":50377},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30570,"toc":50367},[30571,30574,30578,30582,30585,30590,30595,30598,30603,30608,30613,30616,30620,30625,30629,30634,30637,30642,30645,30648,30651,30654,30659,30662,30667,30672,30677,30682,30685,30689,30692,30697,31301,31306,31309,31314,31317,31320,31784,31787,31790,31793,31796,33847,33850,33855,33860,34655,34658,34663,35441,35445,37104,37108,37822,37826,37830,37835,37840,37845,37848,37853,37858,37863,37868,37873,37877,37882,39164,39169,39172,39175,39178,39333,39336,39339,40555,40560,41255,41259,41263,41268,41273,41276,41281,41286,41291,41296,41301,41306,41311,41316,41321,41326,41331,41336,41341,41346,41351,41356,41361,41366,41371,41376,41381,41386,41391,41396,41401,41406,41411,41416,41421,41426,41430,41434,41437,42915,42919,44566,44570,45264,45268,45271,45274,45818,45821,45825,45828,47225,47229,47232,47810,49597,49601,49604,50364],[33,30572,30568],{"id":30573},"_2经典神经网络",[66,30575,30577],{"id":30576},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21981,30579,30581],{"id":30580},"_211原理介绍","2.1.1.原理介绍",[10,30583,30584],{},"LeNet-5",[49,30586,30587],{},[52,30588,30589],{},"原理",[10,30591,30592],{},[1444,30593],{"alt":14,"src":30594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[10,30596,30597],{},"B是batch批次；C是channel通道",[49,30599,30600],{"start":15},[52,30601,30602],{},"网络参数详细",[10,30604,30605],{},[1444,30606],{"alt":14,"src":30607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[10,30609,30610],{},[1444,30611],{"alt":14,"src":30612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[10,30614,30615],{},"AlexNet",[49,30617,30618],{},[52,30619,30589],{},[10,30621,30622],{},[1444,30623],{"alt":14,"src":30624},"\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",[49,30626,30627],{"start":15},[52,30628,30602],{},[10,30630,30631],{},[1444,30632],{"alt":14,"src":30633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[10,30635,30636],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[10,30638,30639],{},[1444,30640],{"alt":14,"src":30641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[10,30643,30644],{},"数据处理中的图像增强操作:",[10,30646,30647],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[10,30649,30650],{},"①增加数据量，保证训练数据充足；②防止过拟合",[10,30652,30653],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[10,30655,30656],{},[1444,30657],{"alt":14,"src":30658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[10,30660,30661],{},"提升网络精确度的方法：LRN正则化",[10,30663,30664],{},[1444,30665],{"alt":14,"src":30666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[10,30668,30669],{},[1444,30670],{"alt":14,"src":30671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[49,30673,30674],{"start":1161},[52,30675,30676],{},"AlexNet的总结",[10,30678,30679],{},[1444,30680],{"alt":14,"src":30681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[10,30683,30684],{},"比LeNet模型要深一丢丢",[21981,30686,30688],{"id":30687},"_212代码实现","2.1.2.代码实现",[10,30690,30691],{},"（1）LeNet",[49,30693,30694],{},[52,30695,30696],{},"模型搭建",[86,30698,30700],{"className":30363,"code":30699,"language":30365,"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",[92,30701,30702,30707,30713,30718,30731,30736,30748,30752,30772,30777,30782,30793,30798,30817,30821,30826,30875,30887,30892,30921,30956,30983,30988,31000,31005,31025,31044,31063,31067,31072,31082,31099,31110,31125,31136,31147,31162,31177,31188,31195,31199,31213,31218,31241,31246,31251,31256,31260,31265,31270,31280],{"__ignoreMap":14},[95,30703,30704],{"class":97,"line":98},[95,30705,30706],{"class":164},"# 导入库\n",[95,30708,30709,30711],{"class":97,"line":15},[95,30710,30377],{"class":101},[95,30712,30380],{"class":105},[95,30714,30715],{"class":97,"line":1161},[95,30716,30717],{"class":164},"# 导入神经网络层\n",[95,30719,30720,30723,30726,30728],{"class":97,"line":1176},[95,30721,30722],{"class":101},"from",[95,30724,30725],{"class":105}," torch ",[95,30727,30377],{"class":101},[95,30729,30730],{"class":105}," nn\n",[95,30732,30733],{"class":97,"line":1182},[95,30734,30735],{"class":164},"# 导入展示神经网络参数的包\n",[95,30737,30738,30740,30743,30745],{"class":97,"line":1196},[95,30739,30722],{"class":101},[95,30741,30742],{"class":105}," torchsummary ",[95,30744,30377],{"class":101},[95,30746,30747],{"class":105}," summary\n",[95,30749,30750],{"class":97,"line":1202},[95,30751,2382],{"emptyLinePlaceholder":21},[95,30753,30754,30756,30759,30761,30764,30766,30769],{"class":97,"line":1293},[95,30755,14677],{"class":101},[95,30757,30758],{"class":1945}," LeNet",[95,30760,106],{"class":105},[95,30762,30763],{"class":1945},"nn",[95,30765,664],{"class":105},[95,30767,30768],{"class":1945},"Module",[95,30770,30771],{"class":105},"):\n",[95,30773,30774],{"class":97,"line":1299},[95,30775,30776],{"class":164},"    # 模型初始化:\n",[95,30778,30779],{"class":97,"line":1311},[95,30780,30781],{"class":164},"    # 定义一些网络层和激活函数\n",[95,30783,30784,30787,30790],{"class":97,"line":1594},[95,30785,30786],{"class":101},"    def",[95,30788,30789],{"class":154}," __init__",[95,30791,30792],{"class":105},"(self):\n",[95,30794,30795],{"class":97,"line":1599},[95,30796,30797],{"class":164},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[95,30799,30800,30803,30806,30809,30812,30815],{"class":97,"line":1605},[95,30801,30802],{"class":154},"        super",[95,30804,30805],{"class":105},"(LeNet,",[95,30807,30808],{"class":154},"self",[95,30810,30811],{"class":105},").",[95,30813,30814],{"class":154},"__init__",[95,30816,1958],{"class":105},[95,30818,30819],{"class":97,"line":1610},[95,30820,2382],{"emptyLinePlaceholder":21},[95,30822,30823],{"class":97,"line":1624},[95,30824,30825],{"class":164},"        # 定义网络层\n",[95,30827,30828,30831,30834,30836,30839,30842,30844,30846,30848,30851,30853,30855,30857,30860,30862,30864,30866,30869,30871,30873],{"class":97,"line":1629},[95,30829,30830],{"class":154},"        self",[95,30832,30833],{"class":105},".c1",[95,30835,151],{"class":101},[95,30837,30838],{"class":105},"nn.Conv2d(",[95,30840,30841],{"class":5199},"in_channels",[95,30843,151],{"class":101},[95,30845,323],{"class":154},[95,30847,484],{"class":105},[95,30849,30850],{"class":5199},"out_channels",[95,30852,151],{"class":101},[95,30854,450],{"class":154},[95,30856,484],{"class":105},[95,30858,30859],{"class":5199},"kernel_size",[95,30861,151],{"class":101},[95,30863,425],{"class":154},[95,30865,484],{"class":105},[95,30867,30868],{"class":5199},"padding",[95,30870,151],{"class":101},[95,30872,183],{"class":154},[95,30874,112],{"class":105},[95,30876,30877,30879,30882,30884],{"class":97,"line":1635},[95,30878,30830],{"class":154},[95,30880,30881],{"class":105},".sig",[95,30883,151],{"class":101},[95,30885,30886],{"class":105},"nn.Sigmoid()\n",[95,30888,30889],{"class":97,"line":1656},[95,30890,30891],{"class":164},"        # 定义池化\n",[95,30893,30894,30896,30899,30901,30904,30906,30908,30910,30912,30915,30917,30919],{"class":97,"line":1661},[95,30895,30830],{"class":154},[95,30897,30898],{"class":105},".s2",[95,30900,151],{"class":101},[95,30902,30903],{"class":105},"nn.AvgPool2d(",[95,30905,30859],{"class":5199},[95,30907,151],{"class":101},[95,30909,183],{"class":154},[95,30911,484],{"class":105},[95,30913,30914],{"class":5199},"stride",[95,30916,151],{"class":101},[95,30918,183],{"class":154},[95,30920,112],{"class":105},[95,30922,30923,30925,30928,30930,30932,30934,30936,30938,30940,30942,30944,30946,30948,30950,30952,30954],{"class":97,"line":1675},[95,30924,30830],{"class":154},[95,30926,30927],{"class":105},".c3",[95,30929,151],{"class":101},[95,30931,30838],{"class":105},[95,30933,30841],{"class":5199},[95,30935,151],{"class":101},[95,30937,450],{"class":154},[95,30939,484],{"class":105},[95,30941,30850],{"class":5199},[95,30943,151],{"class":101},[95,30945,707],{"class":154},[95,30947,484],{"class":105},[95,30949,30859],{"class":5199},[95,30951,151],{"class":101},[95,30953,425],{"class":154},[95,30955,112],{"class":105},[95,30957,30958,30960,30963,30965,30967,30969,30971,30973,30975,30977,30979,30981],{"class":97,"line":1680},[95,30959,30830],{"class":154},[95,30961,30962],{"class":105},".s4",[95,30964,151],{"class":101},[95,30966,30903],{"class":105},[95,30968,30859],{"class":5199},[95,30970,151],{"class":101},[95,30972,183],{"class":154},[95,30974,484],{"class":105},[95,30976,30914],{"class":5199},[95,30978,151],{"class":101},[95,30980,183],{"class":154},[95,30982,112],{"class":105},[95,30984,30985],{"class":97,"line":1709},[95,30986,30987],{"class":164},"        # 定义平展层\n",[95,30989,30990,30992,30995,30997],{"class":97,"line":1714},[95,30991,30830],{"class":154},[95,30993,30994],{"class":105},".flatten",[95,30996,151],{"class":101},[95,30998,30999],{"class":105},"nn.Flatten()\n",[95,31001,31002],{"class":97,"line":1731},[95,31003,31004],{"class":164},"        # 定义全连接层\n",[95,31006,31007,31009,31012,31014,31017,31019,31021,31023],{"class":97,"line":1736},[95,31008,30830],{"class":154},[95,31010,31011],{"class":105},".f5",[95,31013,151],{"class":101},[95,31015,31016],{"class":105},"nn.Linear(",[95,31018,3969],{"class":154},[95,31020,484],{"class":105},[95,31022,923],{"class":154},[95,31024,112],{"class":105},[95,31026,31027,31029,31032,31034,31036,31038,31040,31042],{"class":97,"line":1741},[95,31028,30830],{"class":154},[95,31030,31031],{"class":105},".f6",[95,31033,151],{"class":101},[95,31035,31016],{"class":105},[95,31037,923],{"class":154},[95,31039,484],{"class":105},[95,31041,817],{"class":154},[95,31043,112],{"class":105},[95,31045,31046,31048,31051,31053,31055,31057,31059,31061],{"class":97,"line":1746},[95,31047,30830],{"class":154},[95,31049,31050],{"class":105},".f7",[95,31052,151],{"class":101},[95,31054,31016],{"class":105},[95,31056,817],{"class":154},[95,31058,484],{"class":105},[95,31060,552],{"class":154},[95,31062,112],{"class":105},[95,31064,31065],{"class":97,"line":1760},[95,31066,2382],{"emptyLinePlaceholder":21},[95,31068,31069],{"class":97,"line":1765},[95,31070,31071],{"class":164},"    # 写工具->写前向传播\n",[95,31073,31074,31076,31079],{"class":97,"line":2559},[95,31075,30786],{"class":101},[95,31077,31078],{"class":1945}," forward",[95,31080,31081],{"class":105},"(self,x):\n",[95,31083,31084,31087,31089,31091,31094,31096],{"class":97,"line":2573},[95,31085,31086],{"class":105},"        x",[95,31088,151],{"class":101},[95,31090,30808],{"class":154},[95,31092,31093],{"class":105},".sig(",[95,31095,30808],{"class":154},[95,31097,31098],{"class":105},".c1(x))\n",[95,31100,31101,31103,31105,31107],{"class":97,"line":2581},[95,31102,31086],{"class":105},[95,31104,151],{"class":101},[95,31106,30808],{"class":154},[95,31108,31109],{"class":105},".s2(x)\n",[95,31111,31112,31114,31116,31118,31120,31122],{"class":97,"line":2586},[95,31113,31086],{"class":105},[95,31115,151],{"class":101},[95,31117,30808],{"class":154},[95,31119,31093],{"class":105},[95,31121,30808],{"class":154},[95,31123,31124],{"class":105},".c3(x))\n",[95,31126,31127,31129,31131,31133],{"class":97,"line":2592},[95,31128,31086],{"class":105},[95,31130,151],{"class":101},[95,31132,30808],{"class":154},[95,31134,31135],{"class":105},".s4(x)\n",[95,31137,31138,31140,31142,31144],{"class":97,"line":2598},[95,31139,31086],{"class":105},[95,31141,151],{"class":101},[95,31143,30808],{"class":154},[95,31145,31146],{"class":105},".flatten(x)\n",[95,31148,31149,31151,31153,31155,31157,31159],{"class":97,"line":2603},[95,31150,31086],{"class":105},[95,31152,151],{"class":101},[95,31154,30808],{"class":154},[95,31156,31093],{"class":105},[95,31158,30808],{"class":154},[95,31160,31161],{"class":105},".f5(x))\n",[95,31163,31164,31166,31168,31170,31172,31174],{"class":97,"line":7931},[95,31165,31086],{"class":105},[95,31167,151],{"class":101},[95,31169,30808],{"class":154},[95,31171,31093],{"class":105},[95,31173,30808],{"class":154},[95,31175,31176],{"class":105},".f6(x))\n",[95,31178,31179,31181,31183,31185],{"class":97,"line":7955},[95,31180,31086],{"class":105},[95,31182,151],{"class":101},[95,31184,30808],{"class":154},[95,31186,31187],{"class":105},".f7(x)\n",[95,31189,31190,31192],{"class":97,"line":7960},[95,31191,14735],{"class":101},[95,31193,31194],{"class":105}," x\n",[95,31196,31197],{"class":97,"line":7966},[95,31198,2382],{"emptyLinePlaceholder":21},[95,31200,31201,31203,31206,31208,31211],{"class":97,"line":7993},[95,31202,1513],{"class":101},[95,31204,31205],{"class":154}," __name__",[95,31207,2931],{"class":101},[95,31209,31210],{"class":210},"\"__main__\"",[95,31212,3721],{"class":105},[95,31214,31215],{"class":97,"line":7998},[95,31216,31217],{"class":164},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[95,31219,31220,31223,31225,31227,31230,31232,31235,31237,31239],{"class":97,"line":8004},[95,31221,31222],{"class":105},"    device",[95,31224,151],{"class":101},[95,31226,30436],{"class":105},[95,31228,31229],{"class":210},"\"cuda\"",[95,31231,1686],{"class":101},[95,31233,31234],{"class":105}," torch.cuda.is_available() ",[95,31236,1683],{"class":101},[95,31238,30461],{"class":210},[95,31240,112],{"class":105},[95,31242,31243],{"class":97,"line":8016},[95,31244,31245],{"class":164},"    # 如果就是想指定用cpu用下方代码:\n",[95,31247,31248],{"class":97,"line":8028},[95,31249,31250],{"class":164},"    # device=\"cpu\"\n",[95,31252,31253],{"class":97,"line":8040},[95,31254,31255],{"class":164},"    # print(device)\n",[95,31257,31258],{"class":97,"line":9699},[95,31259,2382],{"emptyLinePlaceholder":21},[95,31261,31262],{"class":97,"line":9724},[95,31263,31264],{"class":164},"    # 实例化模型\n",[95,31266,31267],{"class":97,"line":9747},[95,31268,31269],{"class":164},"    # 将模型放到设备中去运行\n",[95,31271,31272,31275,31277],{"class":97,"line":9771},[95,31273,31274],{"class":105},"    model",[95,31276,151],{"class":101},[95,31278,31279],{"class":105},"LeNet().to(device)\n",[95,31281,31282,31285,31288,31290,31292,31294,31296,31298],{"class":97,"line":9776},[95,31283,31284],{"class":154},"    print",[95,31286,31287],{"class":105},"(summary(model,(",[95,31289,323],{"class":154},[95,31291,484],{"class":105},[95,31293,1007],{"class":154},[95,31295,484],{"class":105},[95,31297,1007],{"class":154},[95,31299,31300],{"class":105},")))\n",[10,31302,31303],{},[1444,31304],{"alt":14,"src":31305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[10,31307,31308],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[49,31310,31311],{"start":15},[52,31312,31313],{},"训练",[10,31315,31316],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[10,31318,31319],{},"在训练之前可以将数据展示看一下",[86,31321,31323],{"className":30363,"code":31322,"language":30365,"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",[92,31324,31325,31330,31335,31347,31359,31372,31377,31389,31394,31406,31411,31423,31427,31431,31452,31464,31469,31490,31501,31505,31510,31528,31539,31544,31555,31560,31571,31575,31580,31595,31608,31613,31618,31631,31644,31657,31662,31666,31671,31691,31708,31728,31741,31754,31764,31779],{"__ignoreMap":14},[95,31326,31327],{"class":97,"line":98},[95,31328,31329],{"class":164},"# 建立画图的函数，用于展示数据\n",[95,31331,31332],{"class":97,"line":15},[95,31333,31334],{"class":164},"# torchvision中包含很多内置的数据集\n",[95,31336,31337,31339,31342,31344],{"class":97,"line":1161},[95,31338,30722],{"class":101},[95,31340,31341],{"class":105}," sklearn.externals.array_api_compat.torch ",[95,31343,30377],{"class":101},[95,31345,31346],{"class":105}," squeeze\n",[95,31348,31349,31351,31354,31356],{"class":97,"line":1176},[95,31350,30722],{"class":101},[95,31352,31353],{"class":105}," torchvision.datasets ",[95,31355,30377],{"class":101},[95,31357,31358],{"class":105}," FashionMNIST\n",[95,31360,31361,31363,31366,31369],{"class":97,"line":1182},[95,31362,30377],{"class":101},[95,31364,31365],{"class":105}," numpy ",[95,31367,31368],{"class":101},"as",[95,31370,31371],{"class":105}," np\n",[95,31373,31374],{"class":97,"line":1196},[95,31375,31376],{"class":164},"# 引入处理数据集的包\n",[95,31378,31379,31381,31384,31386],{"class":97,"line":1202},[95,31380,30722],{"class":101},[95,31382,31383],{"class":105}," torchvision ",[95,31385,30377],{"class":101},[95,31387,31388],{"class":105}," transforms\n",[95,31390,31391],{"class":97,"line":1293},[95,31392,31393],{"class":164},"# 从torch库中引入数据处理的包\n",[95,31395,31396,31398,31401,31403],{"class":97,"line":1299},[95,31397,30377],{"class":101},[95,31399,31400],{"class":105}," torch.utils.data ",[95,31402,31368],{"class":101},[95,31404,31405],{"class":105}," Data\n",[95,31407,31408],{"class":97,"line":1311},[95,31409,31410],{"class":164},"# 导入画图的库\n",[95,31412,31413,31415,31418,31420],{"class":97,"line":1594},[95,31414,30377],{"class":101},[95,31416,31417],{"class":105}," matplotlib.pyplot ",[95,31419,31368],{"class":101},[95,31421,31422],{"class":105}," plt\n",[95,31424,31425],{"class":97,"line":1599},[95,31426,2382],{"emptyLinePlaceholder":21},[95,31428,31429],{"class":97,"line":1605},[95,31430,2382],{"emptyLinePlaceholder":21},[95,31432,31433,31436,31438,31441,31444,31446,31449],{"class":97,"line":1610},[95,31434,31435],{"class":105},"train_data",[95,31437,151],{"class":101},[95,31439,31440],{"class":105},"FashionMNIST(",[95,31442,31443],{"class":5199},"root",[95,31445,151],{"class":101},[95,31447,31448],{"class":210},"'.\u002Fdata'",[95,31450,31451],{"class":105},",\n",[95,31453,31454,31457,31459,31462],{"class":97,"line":1624},[95,31455,31456],{"class":5199},"                        train",[95,31458,151],{"class":101},[95,31460,31461],{"class":154},"True",[95,31463,31451],{"class":105},[95,31465,31466],{"class":97,"line":1629},[95,31467,31468],{"class":164},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[95,31470,31471,31474,31476,31479,31482,31484,31487],{"class":97,"line":1635},[95,31472,31473],{"class":5199},"                        transform",[95,31475,151],{"class":101},[95,31477,31478],{"class":105},"transforms.Compose([transforms.Resize(",[95,31480,31481],{"class":5199},"size",[95,31483,151],{"class":101},[95,31485,31486],{"class":154},"224",[95,31488,31489],{"class":105},"),transforms.ToTensor()]),\n",[95,31491,31492,31495,31497,31499],{"class":97,"line":1656},[95,31493,31494],{"class":5199},"                        download",[95,31496,151],{"class":101},[95,31498,31461],{"class":154},[95,31500,112],{"class":105},[95,31502,31503],{"class":97,"line":1661},[95,31504,2382],{"emptyLinePlaceholder":21},[95,31506,31507],{"class":97,"line":1675},[95,31508,31509],{"class":164},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[95,31511,31512,31515,31517,31520,31523,31525],{"class":97,"line":1680},[95,31513,31514],{"class":105},"train_loader",[95,31516,151],{"class":101},[95,31518,31519],{"class":105},"Data.DataLoader(",[95,31521,31522],{"class":5199},"dataset",[95,31524,151],{"class":101},[95,31526,31527],{"class":105},"train_data,\n",[95,31529,31530,31533,31535,31537],{"class":97,"line":1709},[95,31531,31532],{"class":5199},"                             batch_size",[95,31534,151],{"class":101},[95,31536,309],{"class":154},[95,31538,31451],{"class":105},[95,31540,31541],{"class":97,"line":1714},[95,31542,31543],{"class":164},"                             # 数据是否打乱\n",[95,31545,31546,31549,31551,31553],{"class":97,"line":1731},[95,31547,31548],{"class":5199},"                             shuffle",[95,31550,151],{"class":101},[95,31552,31461],{"class":154},[95,31554,31451],{"class":105},[95,31556,31557],{"class":97,"line":1736},[95,31558,31559],{"class":164},"                             # 规定加载数据的进程\n",[95,31561,31562,31565,31567,31569],{"class":97,"line":1741},[95,31563,31564],{"class":5199},"                             num_workers",[95,31566,151],{"class":101},[95,31568,297],{"class":154},[95,31570,112],{"class":105},[95,31572,31573],{"class":97,"line":1746},[95,31574,2382],{"emptyLinePlaceholder":21},[95,31576,31577],{"class":97,"line":1760},[95,31578,31579],{"class":164},"# 获得一个batch的数据\n",[95,31581,31582,31584,31587,31589,31592],{"class":97,"line":1765},[95,31583,3007],{"class":101},[95,31585,31586],{"class":105}," step,(b_x,b_y) ",[95,31588,26028],{"class":101},[95,31590,31591],{"class":154}," enumerate",[95,31593,31594],{"class":105},"(train_loader):\n",[95,31596,31597,31599,31602,31604,31606],{"class":97,"line":2559},[95,31598,3083],{"class":101},[95,31600,31601],{"class":105}," step ",[95,31603,1066],{"class":101},[95,31605,4075],{"class":154},[95,31607,3721],{"class":105},[95,31609,31610],{"class":97,"line":2573},[95,31611,31612],{"class":101},"        break\n",[95,31614,31615],{"class":97,"line":2581},[95,31616,31617],{"class":164},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[95,31619,31620,31623,31625,31628],{"class":97,"line":2586},[95,31621,31622],{"class":105},"batch_x",[95,31624,151],{"class":101},[95,31626,31627],{"class":105},"b_x.squeeze().numpy()  ",[95,31629,31630],{"class":164},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[95,31632,31633,31636,31638,31641],{"class":97,"line":2592},[95,31634,31635],{"class":105},"batch_y",[95,31637,151],{"class":101},[95,31639,31640],{"class":105},"b_y.numpy()   ",[95,31642,31643],{"class":164},"#将张量转换成功numpy数组\n",[95,31645,31646,31649,31651,31654],{"class":97,"line":2598},[95,31647,31648],{"class":105},"class_label",[95,31650,151],{"class":101},[95,31652,31653],{"class":105},"train_data.classes  ",[95,31655,31656],{"class":164},"#训练集标签\n",[95,31658,31659],{"class":97,"line":2603},[95,31660,31661],{"class":164},"# print(class_label)\n",[95,31663,31664],{"class":97,"line":7931},[95,31665,2382],{"emptyLinePlaceholder":21},[95,31667,31668],{"class":97,"line":7955},[95,31669,31670],{"class":164},"# 可视化一个batch的图像\n",[95,31672,31673,31676,31679,31681,31683,31685,31687,31689],{"class":97,"line":7960},[95,31674,31675],{"class":105},"plt.figure(",[95,31677,31678],{"class":5199},"figsize",[95,31680,151],{"class":101},[95,31682,106],{"class":105},[95,31684,604],{"class":154},[95,31686,484],{"class":105},[95,31688,425],{"class":154},[95,31690,30482],{"class":105},[95,31692,31693,31695,31698,31700,31703,31705],{"class":97,"line":7966},[95,31694,3007],{"class":101},[95,31696,31697],{"class":105}," ii ",[95,31699,26028],{"class":101},[95,31701,31702],{"class":105}," np.arange(",[95,31704,7341],{"class":154},[95,31706,31707],{"class":105},"(batch_y)):\n",[95,31709,31710,31713,31715,31717,31719,31722,31724,31726],{"class":97,"line":7993},[95,31711,31712],{"class":105},"    plt.subplot(",[95,31714,399],{"class":154},[95,31716,484],{"class":105},[95,31718,707],{"class":154},[95,31720,31721],{"class":105},",ii ",[95,31723,587],{"class":101},[95,31725,25103],{"class":154},[95,31727,112],{"class":105},[95,31729,31730,31733,31736,31738],{"class":97,"line":7998},[95,31731,31732],{"class":105},"    plt.imshow(batch_x[ii,:,:],",[95,31734,31735],{"class":5199},"cmap",[95,31737,151],{"class":101},[95,31739,31740],{"class":105},"plt.cm.gray)\n",[95,31742,31743,31746,31748,31750,31752],{"class":97,"line":8004},[95,31744,31745],{"class":105},"    plt.title(class_label[batch_y[ii]],",[95,31747,31481],{"class":5199},[95,31749,151],{"class":101},[95,31751,552],{"class":154},[95,31753,112],{"class":105},[95,31755,31756,31759,31762],{"class":97,"line":8016},[95,31757,31758],{"class":105},"    plt.axis(",[95,31760,31761],{"class":210},"\"off\"",[95,31763,112],{"class":105},[95,31765,31766,31769,31772,31774,31777],{"class":97,"line":8028},[95,31767,31768],{"class":105},"    plt.subplots_adjust(",[95,31770,31771],{"class":5199},"wspace",[95,31773,151],{"class":101},[95,31775,31776],{"class":154},"0.05",[95,31778,112],{"class":105},[95,31780,31781],{"class":97,"line":8040},[95,31782,31783],{"class":105},"plt.show()\n",[10,31785,31786],{},"用matplotlib进行展示的过程可以后续再补",[10,31788,31789],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[10,31791,31792],{},"训练次数就是按照批次过整个训练集数据的次数",[10,31794,31795],{},"模型训练：",[86,31797,31799],{"className":30363,"code":31798,"language":30365,"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",[92,31800,31801,31808,31815,31819,31831,31837,31848,31858,31868,31878,31888,31893,31905,31915,31919,31923,31928,31939,31952,31963,31980,31991,32030,32046,32058,32069,32074,32085,32101,32112,32123,32134,32141,32145,32150,32155,32159,32164,32174,32195,32199,32203,32208,32213,32218,32238,32242,32247,32257,32261,32266,32275,32280,32285,32290,32300,32304,32308,32313,32318,32328,32333,32343,32348,32357,32362,32371,32376,32385,32389,32394,32404,32408,32412,32417,32432,32460,32475,32479,32484,32489,32498,32503,32512,32517,32526,32531,32540,32545,32554,32559,32568,32573,32586,32591,32601,32606,32616,32622,32628,32634,32640,32651,32657,32677,32683,32694,32700,32706,32712,32718,32724,32730,32736,32756,32762,32778,32784,32798,32804,32819,32825,32834,32840,32849,32855,32861,32870,32876,32887,32893,32912,32918,32929,32935,32955,32971,32977,32991,32997,33003,33014,33020,33026,33036,33042,33053,33059,33069,33074,33080,33129,33176,33181,33187,33206,33212,33232,33238,33244,33254,33259,33265,33281,33326,33332,33338,33344,33355,33361,33367,33373,33391,33405,33414,33423,33432,33441,33447,33453,33461,33466,33472,33483,33489,33509,33515,33521,33527,33544,33550,33556,33562,33568,33574,33601,33625,33631,33637,33643,33654,33665,33671,33688,33711,33734,33740,33745,33754,33764,33770,33775,33781,33794,33800,33811,33822,33841],{"__ignoreMap":14},[95,31802,31803,31805],{"class":97,"line":98},[95,31804,30377],{"class":101},[95,31806,31807],{"class":105}," copy\n",[95,31809,31810,31812],{"class":97,"line":15},[95,31811,30377],{"class":101},[95,31813,31814],{"class":105}," time\n",[95,31816,31817],{"class":97,"line":1161},[95,31818,2382],{"emptyLinePlaceholder":21},[95,31820,31821,31823,31826,31828],{"class":97,"line":1176},[95,31822,30377],{"class":101},[95,31824,31825],{"class":105}," pandas ",[95,31827,31368],{"class":101},[95,31829,31830],{"class":105}," pd\n",[95,31832,31833,31835],{"class":97,"line":1182},[95,31834,30377],{"class":101},[95,31836,30380],{"class":105},[95,31838,31839,31841,31843,31845],{"class":97,"line":1196},[95,31840,30722],{"class":101},[95,31842,31400],{"class":105},[95,31844,30377],{"class":101},[95,31846,31847],{"class":105}," Dataset\n",[95,31849,31850,31852,31854,31856],{"class":97,"line":1202},[95,31851,30722],{"class":101},[95,31853,31353],{"class":105},[95,31855,30377],{"class":101},[95,31857,31358],{"class":105},[95,31859,31860,31862,31864,31866],{"class":97,"line":1293},[95,31861,30722],{"class":101},[95,31863,31383],{"class":105},[95,31865,30377],{"class":101},[95,31867,31388],{"class":105},[95,31869,31870,31872,31874,31876],{"class":97,"line":1299},[95,31871,30377],{"class":101},[95,31873,31400],{"class":105},[95,31875,31368],{"class":101},[95,31877,31405],{"class":105},[95,31879,31880,31882,31884,31886],{"class":97,"line":1311},[95,31881,30377],{"class":101},[95,31883,31417],{"class":105},[95,31885,31368],{"class":101},[95,31887,31422],{"class":105},[95,31889,31890],{"class":97,"line":1594},[95,31891,31892],{"class":164},"# 导入模型\n",[95,31894,31895,31897,31900,31902],{"class":97,"line":1599},[95,31896,30722],{"class":101},[95,31898,31899],{"class":105}," model ",[95,31901,30377],{"class":101},[95,31903,31904],{"class":105}," LeNet\n",[95,31906,31907,31909,31911,31913],{"class":97,"line":1605},[95,31908,30722],{"class":101},[95,31910,30725],{"class":105},[95,31912,30377],{"class":101},[95,31914,30730],{"class":105},[95,31916,31917],{"class":97,"line":1610},[95,31918,2382],{"emptyLinePlaceholder":21},[95,31920,31921],{"class":97,"line":1624},[95,31922,2382],{"emptyLinePlaceholder":21},[95,31924,31925],{"class":97,"line":1629},[95,31926,31927],{"class":164},"# 处理训练集与验证集函数--->划分数据集\n",[95,31929,31930,31933,31936],{"class":97,"line":1635},[95,31931,31932],{"class":101},"def",[95,31934,31935],{"class":1945}," train_val_data_process",[95,31937,31938],{"class":105},"():\n",[95,31940,31941,31944,31946,31948,31950],{"class":97,"line":1656},[95,31942,31943],{"class":105},"    train_data",[95,31945,151],{"class":101},[95,31947,31440],{"class":105},[95,31949,31448],{"class":210},[95,31951,31451],{"class":105},[95,31953,31954,31957,31959,31961],{"class":97,"line":1661},[95,31955,31956],{"class":5199},"                            train",[95,31958,151],{"class":101},[95,31960,31461],{"class":154},[95,31962,31451],{"class":105},[95,31964,31965,31968,31970,31972,31974,31976,31978],{"class":97,"line":1675},[95,31966,31967],{"class":5199},"                            transform",[95,31969,151],{"class":101},[95,31971,31478],{"class":105},[95,31973,31481],{"class":5199},[95,31975,151],{"class":101},[95,31977,1007],{"class":154},[95,31979,31489],{"class":105},[95,31981,31982,31985,31987,31989],{"class":97,"line":1680},[95,31983,31984],{"class":5199},"                            download",[95,31986,151],{"class":101},[95,31988,31461],{"class":154},[95,31990,112],{"class":105},[95,31992,31993,31996,31998,32001,32004,32006,32009,32011,32013,32016,32018,32020,32023,32025,32027],{"class":97,"line":1709},[95,31994,31995],{"class":105},"    train_data,val_data",[95,31997,151],{"class":101},[95,31999,32000],{"class":105},"Data.random_split(train_data,[",[95,32002,32003],{"class":154},"round",[95,32005,106],{"class":105},[95,32007,32008],{"class":154},"0.8",[95,32010,561],{"class":101},[95,32012,7341],{"class":154},[95,32014,32015],{"class":105},"(train_data)),",[95,32017,32003],{"class":154},[95,32019,106],{"class":105},[95,32021,32022],{"class":154},"0.2",[95,32024,561],{"class":101},[95,32026,7341],{"class":154},[95,32028,32029],{"class":105},"(train_data))])\n",[95,32031,32032,32035,32037,32040,32042,32044],{"class":97,"line":1714},[95,32033,32034],{"class":105},"    train_dataloader ",[95,32036,151],{"class":101},[95,32038,32039],{"class":105}," Data.DataLoader(",[95,32041,31522],{"class":5199},[95,32043,151],{"class":101},[95,32045,31527],{"class":105},[95,32047,32048,32051,32053,32056],{"class":97,"line":1731},[95,32049,32050],{"class":5199},"                                       batch_size",[95,32052,151],{"class":101},[95,32054,32055],{"class":154},"128",[95,32057,31451],{"class":105},[95,32059,32060,32063,32065,32067],{"class":97,"line":1736},[95,32061,32062],{"class":5199},"                                       shuffle",[95,32064,151],{"class":101},[95,32066,31461],{"class":154},[95,32068,31451],{"class":105},[95,32070,32071],{"class":97,"line":1741},[95,32072,32073],{"class":164},"                                       # 规定8个进程\n",[95,32075,32076,32079,32081,32083],{"class":97,"line":1746},[95,32077,32078],{"class":5199},"                                       num_workers",[95,32080,151],{"class":101},[95,32082,501],{"class":154},[95,32084,112],{"class":105},[95,32086,32087,32090,32092,32094,32096,32098],{"class":97,"line":1760},[95,32088,32089],{"class":105},"    val_dataloader",[95,32091,151],{"class":101},[95,32093,31519],{"class":105},[95,32095,31522],{"class":5199},[95,32097,151],{"class":101},[95,32099,32100],{"class":105},"val_data,\n",[95,32102,32103,32106,32108,32110],{"class":97,"line":1765},[95,32104,32105],{"class":5199},"                                   batch_size",[95,32107,151],{"class":101},[95,32109,32055],{"class":154},[95,32111,31451],{"class":105},[95,32113,32114,32117,32119,32121],{"class":97,"line":2559},[95,32115,32116],{"class":5199},"                                   shuffle",[95,32118,151],{"class":101},[95,32120,31461],{"class":154},[95,32122,31451],{"class":105},[95,32124,32125,32128,32130,32132],{"class":97,"line":2573},[95,32126,32127],{"class":5199},"                                   num_workers",[95,32129,151],{"class":101},[95,32131,501],{"class":154},[95,32133,112],{"class":105},[95,32135,32136,32138],{"class":97,"line":2581},[95,32137,4072],{"class":101},[95,32139,32140],{"class":105}," train_dataloader,val_dataloader\n",[95,32142,32143],{"class":97,"line":2586},[95,32144,2382],{"emptyLinePlaceholder":21},[95,32146,32147],{"class":97,"line":2592},[95,32148,32149],{"class":164},"# 验证是否出错\n",[95,32151,32152],{"class":97,"line":2598},[95,32153,32154],{"class":164},"# train_val_data_process()\n",[95,32156,32157],{"class":97,"line":2603},[95,32158,2382],{"emptyLinePlaceholder":21},[95,32160,32161],{"class":97,"line":7931},[95,32162,32163],{"class":164},"# 定义模型训练函数\n",[95,32165,32166,32168,32171],{"class":97,"line":7955},[95,32167,31932],{"class":101},[95,32169,32170],{"class":1945}," train_model_process",[95,32172,32173],{"class":105},"(model,train_dataloader,val_dataloader,num_epochs):\n",[95,32175,32176,32178,32180,32182,32184,32186,32188,32190,32193],{"class":97,"line":7960},[95,32177,31222],{"class":105},[95,32179,151],{"class":101},[95,32181,30436],{"class":105},[95,32183,31229],{"class":210},[95,32185,1686],{"class":101},[95,32187,31234],{"class":105},[95,32189,1683],{"class":101},[95,32191,32192],{"class":210}," 'cpu'",[95,32194,112],{"class":105},[95,32196,32197],{"class":97,"line":7966},[95,32198,2382],{"emptyLinePlaceholder":21},[95,32200,32201],{"class":97,"line":7993},[95,32202,2382],{"emptyLinePlaceholder":21},[95,32204,32205],{"class":97,"line":7998},[95,32206,32207],{"class":164},"    # 定义优化器\n",[95,32209,32210],{"class":97,"line":8004},[95,32211,32212],{"class":164},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[95,32214,32215],{"class":97,"line":8016},[95,32216,32217],{"class":164},"    # lr为学习率\n",[95,32219,32220,32223,32225,32228,32231,32233,32236],{"class":97,"line":8028},[95,32221,32222],{"class":105},"    optimizer",[95,32224,151],{"class":101},[95,32226,32227],{"class":105},"torch.optim.Adam(model.parameters(),",[95,32229,32230],{"class":5199},"lr",[95,32232,151],{"class":101},[95,32234,32235],{"class":154},"0.001",[95,32237,112],{"class":105},[95,32239,32240],{"class":97,"line":8040},[95,32241,2382],{"emptyLinePlaceholder":21},[95,32243,32244],{"class":97,"line":9699},[95,32245,32246],{"class":164},"    # 定义损失函数使用交叉熵损失函数\n",[95,32248,32249,32252,32254],{"class":97,"line":9724},[95,32250,32251],{"class":105},"    criterion",[95,32253,151],{"class":101},[95,32255,32256],{"class":105},"nn.CrossEntropyLoss()\n",[95,32258,32259],{"class":97,"line":9747},[95,32260,2382],{"emptyLinePlaceholder":21},[95,32262,32263],{"class":97,"line":9771},[95,32264,32265],{"class":164},"    # 将模型放到GPU中进行训练\n",[95,32267,32268,32270,32272],{"class":97,"line":9776},[95,32269,31274],{"class":105},[95,32271,151],{"class":101},[95,32273,32274],{"class":105},"model.to(device)\n",[95,32276,32277],{"class":97,"line":9781},[95,32278,32279],{"class":164},"    # 复制当前模型的参数\n",[95,32281,32282],{"class":97,"line":9786},[95,32283,32284],{"class":164},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[95,32286,32287],{"class":97,"line":9795},[95,32288,32289],{"class":164},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[95,32291,32292,32295,32297],{"class":97,"line":9800},[95,32293,32294],{"class":105},"    best_model_wts",[95,32296,151],{"class":101},[95,32298,32299],{"class":105},"copy.deepcopy(model.state_dict())\n",[95,32301,32302],{"class":97,"line":9806},[95,32303,2382],{"emptyLinePlaceholder":21},[95,32305,32306],{"class":97,"line":9827},[95,32307,2382],{"emptyLinePlaceholder":21},[95,32309,32310],{"class":97,"line":9833},[95,32311,32312],{"class":164},"    # 初始化参数\n",[95,32314,32315],{"class":97,"line":9847},[95,32316,32317],{"class":164},"    # 最高准确度\n",[95,32319,32320,32323,32325],{"class":97,"line":9853},[95,32321,32322],{"class":105},"    best_acc",[95,32324,151],{"class":101},[95,32326,32327],{"class":154},"0.0\n",[95,32329,32330],{"class":97,"line":9880},[95,32331,32332],{"class":164},"    # 训练集损失列表\n",[95,32334,32335,32338,32340],{"class":97,"line":9889},[95,32336,32337],{"class":105},"    train_loss_all",[95,32339,151],{"class":101},[95,32341,32342],{"class":105},"[]\n",[95,32344,32345],{"class":97,"line":9895},[95,32346,32347],{"class":164},"    # 验证集函数列表\n",[95,32349,32350,32353,32355],{"class":97,"line":9903},[95,32351,32352],{"class":105},"    val_loss_all",[95,32354,151],{"class":101},[95,32356,32342],{"class":105},[95,32358,32359],{"class":97,"line":9908},[95,32360,32361],{"class":164},"    # 训练集准确度列表\n",[95,32363,32364,32367,32369],{"class":97,"line":16587},[95,32365,32366],{"class":105},"    train_acc_all",[95,32368,151],{"class":101},[95,32370,32342],{"class":105},[95,32372,32373],{"class":97,"line":16593},[95,32374,32375],{"class":164},"    # 验证集准确度列表\n",[95,32377,32378,32381,32383],{"class":97,"line":16616},[95,32379,32380],{"class":105},"    val_acc_all",[95,32382,151],{"class":101},[95,32384,32342],{"class":105},[95,32386,32387],{"class":97,"line":16622},[95,32388,2382],{"emptyLinePlaceholder":21},[95,32390,32391],{"class":97,"line":16645},[95,32392,32393],{"class":164},"    # 保存当前时间--->方便看每轮训练的时间\n",[95,32395,32396,32399,32401],{"class":97,"line":16659},[95,32397,32398],{"class":105},"    since",[95,32400,151],{"class":101},[95,32402,32403],{"class":105},"time.time()\n",[95,32405,32406],{"class":97,"line":16679},[95,32407,2382],{"emptyLinePlaceholder":21},[95,32409,32410],{"class":97,"line":16685},[95,32411,2382],{"emptyLinePlaceholder":21},[95,32413,32414],{"class":97,"line":16696},[95,32415,32416],{"class":164},"    # 准备工作完成--->开始训练模型\n",[95,32418,32419,32421,32424,32426,32429],{"class":97,"line":16719},[95,32420,3183],{"class":101},[95,32422,32423],{"class":105}," epoch ",[95,32425,26028],{"class":101},[95,32427,32428],{"class":154}," range",[95,32430,32431],{"class":105},"(num_epochs):\n",[95,32433,32434,32437,32439,32442,32445,32447,32449,32451,32454,32456,32458],{"class":97,"line":16741},[95,32435,32436],{"class":154},"        print",[95,32438,106],{"class":105},[95,32440,32441],{"class":210},"\"Epoch ",[95,32443,32444],{"class":154},"{}",[95,32446,690],{"class":210},[95,32448,32444],{"class":154},[95,32450,357],{"class":210},[95,32452,32453],{"class":105},".format(epoch,num_epochs",[95,32455,638],{"class":101},[95,32457,323],{"class":154},[95,32459,30482],{"class":105},[95,32461,32462,32464,32466,32469,32471,32473],{"class":97,"line":16746},[95,32463,32436],{"class":154},[95,32465,106],{"class":105},[95,32467,32468],{"class":210},"\"-\"",[95,32470,561],{"class":101},[95,32472,552],{"class":154},[95,32474,112],{"class":105},[95,32476,32477],{"class":97,"line":16752},[95,32478,2382],{"emptyLinePlaceholder":21},[95,32480,32481],{"class":97,"line":16766},[95,32482,32483],{"class":164},"        # 初始化参数\n",[95,32485,32486],{"class":97,"line":16779},[95,32487,32488],{"class":164},"        # 训练集损失函数\n",[95,32490,32491,32494,32496],{"class":97,"line":16784},[95,32492,32493],{"class":105},"        train_loss",[95,32495,151],{"class":101},[95,32497,32327],{"class":154},[95,32499,32500],{"class":97,"line":16798},[95,32501,32502],{"class":164},"        # 训练集准确度\n",[95,32504,32505,32508,32510],{"class":97,"line":16803},[95,32506,32507],{"class":105},"        train_corrects",[95,32509,151],{"class":101},[95,32511,3067],{"class":154},[95,32513,32514],{"class":97,"line":16809},[95,32515,32516],{"class":164},"        # 验证集损失函数\n",[95,32518,32519,32522,32524],{"class":97,"line":16814},[95,32520,32521],{"class":105},"        val_loss",[95,32523,151],{"class":101},[95,32525,32327],{"class":154},[95,32527,32528],{"class":97,"line":16828},[95,32529,32530],{"class":164},"        # 验证集准确度\n",[95,32532,32533,32536,32538],{"class":97,"line":16833},[95,32534,32535],{"class":105},"        val_corrects",[95,32537,151],{"class":101},[95,32539,3067],{"class":154},[95,32541,32542],{"class":97,"line":16838},[95,32543,32544],{"class":164},"        # 训练集样本数量\n",[95,32546,32547,32550,32552],{"class":97,"line":16852},[95,32548,32549],{"class":105},"        train_num",[95,32551,151],{"class":101},[95,32553,3067],{"class":154},[95,32555,32556],{"class":97,"line":16864},[95,32557,32558],{"class":164},"        # 验证集样本数量\n",[95,32560,32561,32564,32566],{"class":97,"line":16869},[95,32562,32563],{"class":105},"        val_num",[95,32565,151],{"class":101},[95,32567,3067],{"class":154},[95,32569,32570],{"class":97,"line":16882},[95,32571,32572],{"class":164},"        # 将数据放到设备,并开始训练\n",[95,32574,32575,32577,32579,32581,32583],{"class":97,"line":16887},[95,32576,3385],{"class":101},[95,32578,31586],{"class":105},[95,32580,26028],{"class":101},[95,32582,31591],{"class":154},[95,32584,32585],{"class":105},"(train_dataloader):\n",[95,32587,32588],{"class":97,"line":16892},[95,32589,32590],{"class":164},"            # 将特征放入到训练设备\n",[95,32592,32593,32596,32598],{"class":97,"line":16897},[95,32594,32595],{"class":105},"            b_x",[95,32597,151],{"class":101},[95,32599,32600],{"class":105},"b_x.to(device)\n",[95,32602,32603],{"class":97,"line":16910},[95,32604,32605],{"class":164},"            # 将标签放入到训练设备当中\n",[95,32607,32608,32611,32613],{"class":97,"line":16915},[95,32609,32610],{"class":105},"            b_y",[95,32612,151],{"class":101},[95,32614,32615],{"class":105},"b_y.to(device)\n",[95,32617,32619],{"class":97,"line":32618},98,[95,32620,32621],{"class":164},"            # 设置模型为训练模式\n",[95,32623,32625],{"class":97,"line":32624},99,[95,32626,32627],{"class":105},"            model.train()\n",[95,32629,32631],{"class":97,"line":32630},100,[95,32632,32633],{"class":164},"            # 将数据放到模型当中,开始前向传播\n",[95,32635,32637],{"class":97,"line":32636},101,[95,32638,32639],{"class":164},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[95,32641,32643,32646,32648],{"class":97,"line":32642},102,[95,32644,32645],{"class":105},"            output",[95,32647,151],{"class":101},[95,32649,32650],{"class":105},"model(b_x)\n",[95,32652,32654],{"class":97,"line":32653},103,[95,32655,32656],{"class":164},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[95,32658,32660,32663,32665,32668,32671,32673,32675],{"class":97,"line":32659},104,[95,32661,32662],{"class":105},"            pre_lab",[95,32664,151],{"class":101},[95,32666,32667],{"class":105},"torch.argmax(output,",[95,32669,32670],{"class":5199},"dim",[95,32672,151],{"class":101},[95,32674,323],{"class":154},[95,32676,112],{"class":105},[95,32678,32680],{"class":97,"line":32679},105,[95,32681,32682],{"class":164},"            # 计算每一个batch的损失函数\n",[95,32684,32686,32689,32691],{"class":97,"line":32685},106,[95,32687,32688],{"class":105},"            loss",[95,32690,151],{"class":101},[95,32692,32693],{"class":105},"criterion(output,b_y)\n",[95,32695,32697],{"class":97,"line":32696},107,[95,32698,32699],{"class":164},"            # 将梯度初始化为0\n",[95,32701,32703],{"class":97,"line":32702},108,[95,32704,32705],{"class":105},"            optimizer.zero_grad()\n",[95,32707,32709],{"class":97,"line":32708},109,[95,32710,32711],{"class":164},"            # 梯度置为0后再进行反向传播\n",[95,32713,32715],{"class":97,"line":32714},110,[95,32716,32717],{"class":105},"            loss.backward()\n",[95,32719,32721],{"class":97,"line":32720},111,[95,32722,32723],{"class":164},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[95,32725,32727],{"class":97,"line":32726},112,[95,32728,32729],{"class":105},"            optimizer.step()\n",[95,32731,32733],{"class":97,"line":32732},113,[95,32734,32735],{"class":164},"            # loss.item()指的是batch的平均损失\n",[95,32737,32739,32742,32744,32747,32749,32752,32754],{"class":97,"line":32738},114,[95,32740,32741],{"class":105},"            train_loss",[95,32743,9460],{"class":101},[95,32745,32746],{"class":105},"loss.item()",[95,32748,561],{"class":101},[95,32750,32751],{"class":105},"b_x.size(",[95,32753,297],{"class":154},[95,32755,112],{"class":105},[95,32757,32759],{"class":97,"line":32758},115,[95,32760,32761],{"class":164},"            # 计算每个批次中正确预测的数量\n",[95,32763,32765,32768,32770,32773,32775],{"class":97,"line":32764},116,[95,32766,32767],{"class":105},"            train_corrects",[95,32769,9460],{"class":101},[95,32771,32772],{"class":105},"torch.sum(pre_lab",[95,32774,2931],{"class":101},[95,32776,32777],{"class":105},"b_y.data)\n",[95,32779,32781],{"class":97,"line":32780},117,[95,32782,32783],{"class":164},"            # 计算目前为止一共处理了多少样本\n",[95,32785,32787,32790,32792,32794,32796],{"class":97,"line":32786},118,[95,32788,32789],{"class":105},"            train_num",[95,32791,9460],{"class":101},[95,32793,32751],{"class":105},[95,32795,297],{"class":154},[95,32797,112],{"class":105},[95,32799,32801],{"class":97,"line":32800},119,[95,32802,32803],{"class":164},"        # 验证数据\n",[95,32805,32807,32809,32812,32814,32816],{"class":97,"line":32806},120,[95,32808,3385],{"class":101},[95,32810,32811],{"class":105}," step ,(b_x,b_y) ",[95,32813,26028],{"class":101},[95,32815,31591],{"class":154},[95,32817,32818],{"class":105},"(val_dataloader):\n",[95,32820,32822],{"class":97,"line":32821},121,[95,32823,32824],{"class":164},"            # 将特征放到验证设备当中\n",[95,32826,32828,32830,32832],{"class":97,"line":32827},122,[95,32829,32595],{"class":105},[95,32831,151],{"class":101},[95,32833,32600],{"class":105},[95,32835,32837],{"class":97,"line":32836},123,[95,32838,32839],{"class":164},"            # 将标签放到放到训练设备当中\n",[95,32841,32843,32845,32847],{"class":97,"line":32842},124,[95,32844,32610],{"class":105},[95,32846,151],{"class":101},[95,32848,32615],{"class":105},[95,32850,32852],{"class":97,"line":32851},125,[95,32853,32854],{"class":164},"            # 开启验证模式，设置模型为评估模式\n",[95,32856,32858],{"class":97,"line":32857},126,[95,32859,32860],{"class":105},"            model.eval()\n",[95,32862,32864,32867],{"class":97,"line":32863},127,[95,32865,32866],{"class":101},"            with",[95,32868,32869],{"class":105}," torch.no_grad():\n",[95,32871,32873],{"class":97,"line":32872},128,[95,32874,32875],{"class":164},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[95,32877,32879,32882,32884],{"class":97,"line":32878},129,[95,32880,32881],{"class":105},"                output ",[95,32883,151],{"class":101},[95,32885,32886],{"class":105}," model(b_x)\n",[95,32888,32890],{"class":97,"line":32889},130,[95,32891,32892],{"class":164},"                # 查找每一行中最大值对应的下标\n",[95,32894,32896,32899,32901,32904,32906,32908,32910],{"class":97,"line":32895},131,[95,32897,32898],{"class":105},"                pre_lab ",[95,32900,151],{"class":101},[95,32902,32903],{"class":105}," torch.argmax(output, ",[95,32905,32670],{"class":5199},[95,32907,151],{"class":101},[95,32909,323],{"class":154},[95,32911,112],{"class":105},[95,32913,32915],{"class":97,"line":32914},132,[95,32916,32917],{"class":164},"                # 计算验证集上的当前 batch 损失\n",[95,32919,32921,32924,32926],{"class":97,"line":32920},133,[95,32922,32923],{"class":105},"                val_batch_loss ",[95,32925,151],{"class":101},[95,32927,32928],{"class":105}," criterion(output, b_y)\n",[95,32930,32932],{"class":97,"line":32931},134,[95,32933,32934],{"class":164},"                # 对损失函数进行累加（按样本数加权）\n",[95,32936,32938,32941,32943,32946,32948,32951,32953],{"class":97,"line":32937},135,[95,32939,32940],{"class":105},"                val_loss ",[95,32942,9460],{"class":101},[95,32944,32945],{"class":105}," val_batch_loss.item() ",[95,32947,561],{"class":101},[95,32949,32950],{"class":105}," b_x.size(",[95,32952,297],{"class":154},[95,32954,112],{"class":105},[95,32956,32958,32961,32963,32966,32968],{"class":97,"line":32957},136,[95,32959,32960],{"class":105},"                val_corrects ",[95,32962,9460],{"class":101},[95,32964,32965],{"class":105}," torch.sum(pre_lab ",[95,32967,2931],{"class":101},[95,32969,32970],{"class":105}," b_y.data)\n",[95,32972,32974],{"class":97,"line":32973},137,[95,32975,32976],{"class":164},"                # 当前用于验证的样本数量\n",[95,32978,32980,32983,32985,32987,32989],{"class":97,"line":32979},138,[95,32981,32982],{"class":105},"            val_num ",[95,32984,9460],{"class":101},[95,32986,32950],{"class":105},[95,32988,297],{"class":154},[95,32990,112],{"class":105},[95,32992,32994],{"class":97,"line":32993},139,[95,32995,32996],{"class":164},"        # 计算并保存每一次迭代的loss值和准确率\n",[95,32998,33000],{"class":97,"line":32999},140,[95,33001,33002],{"class":164},"        # 计算并保存训练集的loss值\n",[95,33004,33006,33009,33011],{"class":97,"line":33005},141,[95,33007,33008],{"class":105},"        train_loss_all.append(train_loss",[95,33010,690],{"class":101},[95,33012,33013],{"class":105},"train_num)\n",[95,33015,33017],{"class":97,"line":33016},142,[95,33018,33019],{"class":164},"        # 取双精度\n",[95,33021,33023],{"class":97,"line":33022},143,[95,33024,33025],{"class":164},"        # 计算并保存训练集的准确率\n",[95,33027,33029,33032,33034],{"class":97,"line":33028},144,[95,33030,33031],{"class":105},"        train_acc_all.append(train_corrects.double().item()",[95,33033,690],{"class":101},[95,33035,33013],{"class":105},[95,33037,33039],{"class":97,"line":33038},145,[95,33040,33041],{"class":164},"        # 计算并保存验证集的loss值\n",[95,33043,33045,33048,33050],{"class":97,"line":33044},146,[95,33046,33047],{"class":105},"        val_loss_all.append(val_loss",[95,33049,690],{"class":101},[95,33051,33052],{"class":105},"val_num)\n",[95,33054,33056],{"class":97,"line":33055},147,[95,33057,33058],{"class":164},"        # 计算并保存验证集的准确率\n",[95,33060,33062,33065,33067],{"class":97,"line":33061},148,[95,33063,33064],{"class":105},"        val_acc_all.append(val_corrects.double().item()",[95,33066,690],{"class":101},[95,33068,33052],{"class":105},[95,33070,33072],{"class":97,"line":33071},149,[95,33073,2382],{"emptyLinePlaceholder":21},[95,33075,33077],{"class":97,"line":33076},150,[95,33078,33079],{"class":164},"        # 打印训练一轮的loss值和准确率\n",[95,33081,33083,33085,33087,33089,33091,33094,33096,33099,33101,33104,33106,33108,33110,33112,33115,33117,33119,33122,33124,33126],{"class":97,"line":33082},151,[95,33084,32436],{"class":154},[95,33086,106],{"class":105},[95,33088,3574],{"class":210},[95,33090,32444],{"class":154},[95,33092,33093],{"class":210},"train loss:",[95,33095,1002],{"class":154},[95,33097,33098],{"class":101},":.4f",[95,33100,1052],{"class":154},[95,33102,33103],{"class":210}," train acc:",[95,33105,1002],{"class":154},[95,33107,33098],{"class":101},[95,33109,1052],{"class":154},[95,33111,3574],{"class":210},[95,33113,33114],{"class":105},".format(epoch,train_loss_all[",[95,33116,638],{"class":101},[95,33118,323],{"class":154},[95,33120,33121],{"class":105},"],train_acc_all[",[95,33123,638],{"class":101},[95,33125,323],{"class":154},[95,33127,33128],{"class":105},"]))\n",[95,33130,33132,33134,33136,33138,33140,33143,33145,33147,33149,33152,33154,33156,33158,33160,33163,33165,33167,33170,33172,33174],{"class":97,"line":33131},152,[95,33133,32436],{"class":154},[95,33135,106],{"class":105},[95,33137,3574],{"class":210},[95,33139,32444],{"class":154},[95,33141,33142],{"class":210},"val loss:",[95,33144,1002],{"class":154},[95,33146,33098],{"class":101},[95,33148,1052],{"class":154},[95,33150,33151],{"class":210}," val acc:",[95,33153,1002],{"class":154},[95,33155,33098],{"class":101},[95,33157,1052],{"class":154},[95,33159,3574],{"class":210},[95,33161,33162],{"class":105},".format(epoch,val_loss_all[",[95,33164,638],{"class":101},[95,33166,323],{"class":154},[95,33168,33169],{"class":105},"],val_acc_all[",[95,33171,638],{"class":101},[95,33173,323],{"class":154},[95,33175,33128],{"class":105},[95,33177,33179],{"class":97,"line":33178},153,[95,33180,2382],{"emptyLinePlaceholder":21},[95,33182,33184],{"class":97,"line":33183},154,[95,33185,33186],{"class":164},"        # 判断准确度--->保存最优模型\n",[95,33188,33190,33192,33195,33197,33199,33201,33203],{"class":97,"line":33189},155,[95,33191,2479],{"class":101},[95,33193,33194],{"class":105}," val_acc_all[",[95,33196,638],{"class":101},[95,33198,323],{"class":154},[95,33200,1046],{"class":105},[95,33202,1066],{"class":101},[95,33204,33205],{"class":105},"best_acc:\n",[95,33207,33209],{"class":97,"line":33208},156,[95,33210,33211],{"class":164},"            # 保存当前模型准确度\n",[95,33213,33215,33218,33220,33222,33225,33227,33229],{"class":97,"line":33214},157,[95,33216,33217],{"class":105},"            best_acc:",[95,33219,145],{"class":154},[95,33221,151],{"class":101},[95,33223,33224],{"class":105},"val_acc_all[",[95,33226,638],{"class":101},[95,33228,323],{"class":154},[95,33230,33231],{"class":105},"]\n",[95,33233,33235],{"class":97,"line":33234},158,[95,33236,33237],{"class":164},"            # 保存当前的准确度\n",[95,33239,33241],{"class":97,"line":33240},159,[95,33242,33243],{"class":164},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[95,33245,33247,33250,33252],{"class":97,"line":33246},160,[95,33248,33249],{"class":105},"            best_model_wts",[95,33251,151],{"class":101},[95,33253,32299],{"class":105},[95,33255,33257],{"class":97,"line":33256},161,[95,33258,2382],{"emptyLinePlaceholder":21},[95,33260,33262],{"class":97,"line":33261},162,[95,33263,33264],{"class":164},"        # 计算耗时\n",[95,33266,33268,33271,33273,33276,33278],{"class":97,"line":33267},163,[95,33269,33270],{"class":105},"        time_use",[95,33272,151],{"class":101},[95,33274,33275],{"class":105},"time.time()",[95,33277,638],{"class":101},[95,33279,33280],{"class":105},"since\n",[95,33282,33284,33286,33288,33291,33293,33296,33298,33300,33302,33304,33306,33309,33312,33315,33317,33320,33322,33324],{"class":97,"line":33283},164,[95,33285,32436],{"class":154},[95,33287,106],{"class":105},[95,33289,33290],{"class":210},"'训练和验证耗费的时间",[95,33292,1002],{"class":154},[95,33294,33295],{"class":101},":.0f",[95,33297,1052],{"class":154},[95,33299,650],{"class":210},[95,33301,1002],{"class":154},[95,33303,33295],{"class":101},[95,33305,1052],{"class":154},[95,33307,33308],{"class":210},"s'",[95,33310,33311],{"class":105},".format(time_use",[95,33313,33314],{"class":101},"\u002F\u002F",[95,33316,1013],{"class":154},[95,33318,33319],{"class":105},",time_use",[95,33321,434],{"class":101},[95,33323,1013],{"class":154},[95,33325,30482],{"class":105},[95,33327,33329],{"class":97,"line":33328},165,[95,33330,33331],{"class":164},"    # 选择最优参数\n",[95,33333,33335],{"class":97,"line":33334},166,[95,33336,33337],{"class":164},"    # 加载最高准确率下的模型参数\n",[95,33339,33341],{"class":97,"line":33340},167,[95,33342,33343],{"class":164},"    # model.load_state_dict(best_model_wts)\n",[95,33345,33347,33350,33353],{"class":97,"line":33346},168,[95,33348,33349],{"class":105},"    torch.save(model.state_dict(best_model_wts), ",[95,33351,33352],{"class":210},"'.\u002Fbest_model.pth'",[95,33354,112],{"class":105},[95,33356,33358],{"class":97,"line":33357},169,[95,33359,33360],{"class":164},"    # 或者写成\n",[95,33362,33364],{"class":97,"line":33363},170,[95,33365,33366],{"class":164},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[95,33368,33370],{"class":97,"line":33369},171,[95,33371,33372],{"class":164},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[95,33374,33376,33379,33381,33384,33387,33389],{"class":97,"line":33375},172,[95,33377,33378],{"class":105},"    train_process",[95,33380,151],{"class":101},[95,33382,33383],{"class":105},"pd.DataFrame(",[95,33385,33386],{"class":5199},"data",[95,33388,151],{"class":101},[95,33390,1528],{"class":105},[95,33392,33394,33397,33399,33402],{"class":97,"line":33393},173,[95,33395,33396],{"class":210},"        \"epoch\"",[95,33398,965],{"class":105},[95,33400,33401],{"class":154},"range",[95,33403,33404],{"class":105},"(num_epochs),\n",[95,33406,33408,33411],{"class":97,"line":33407},174,[95,33409,33410],{"class":210},"        \"train_loss_all\"",[95,33412,33413],{"class":105},":train_loss_all,\n",[95,33415,33417,33420],{"class":97,"line":33416},175,[95,33418,33419],{"class":210},"        \"val_loss_all\"",[95,33421,33422],{"class":105},":val_loss_all,\n",[95,33424,33426,33429],{"class":97,"line":33425},176,[95,33427,33428],{"class":210},"        \"train_acc_all\"",[95,33430,33431],{"class":105},":train_acc_all,\n",[95,33433,33435,33438],{"class":97,"line":33434},177,[95,33436,33437],{"class":210},"        \"val_acc_all\"",[95,33439,33440],{"class":105},":val_acc_all\n",[95,33442,33444],{"class":97,"line":33443},178,[95,33445,33446],{"class":105},"    })\n",[95,33448,33450],{"class":97,"line":33449},179,[95,33451,33452],{"class":164},"    # 返回训练保存的过程\n",[95,33454,33456,33458],{"class":97,"line":33455},180,[95,33457,4072],{"class":101},[95,33459,33460],{"class":105}," train_process\n",[95,33462,33464],{"class":97,"line":33463},181,[95,33465,2382],{"emptyLinePlaceholder":21},[95,33467,33469],{"class":97,"line":33468},182,[95,33470,33471],{"class":164},"# 将loss值和精度按照图片的形式展示出来\n",[95,33473,33475,33477,33480],{"class":97,"line":33474},183,[95,33476,31932],{"class":101},[95,33478,33479],{"class":1945}," matplot_acc_loss",[95,33481,33482],{"class":105},"(train_process):\n",[95,33484,33486],{"class":97,"line":33485},184,[95,33487,33488],{"class":164},"    # 设置图的大小\n",[95,33490,33492,33495,33497,33499,33501,33503,33505,33507],{"class":97,"line":33491},185,[95,33493,33494],{"class":105},"    plt.figure(",[95,33496,31678],{"class":5199},[95,33498,151],{"class":101},[95,33500,106],{"class":105},[95,33502,604],{"class":154},[95,33504,484],{"class":105},[95,33506,399],{"class":154},[95,33508,30482],{"class":105},[95,33510,33512],{"class":97,"line":33511},186,[95,33513,33514],{"class":164},"    # 设置图中有几张图\n",[95,33516,33518],{"class":97,"line":33517},187,[95,33519,33520],{"class":164},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[95,33522,33524],{"class":97,"line":33523},188,[95,33525,33526],{"class":164},"    # ①loss图\n",[95,33528,33530,33532,33534,33536,33538,33540,33542],{"class":97,"line":33529},189,[95,33531,31712],{"class":105},[95,33533,323],{"class":154},[95,33535,484],{"class":105},[95,33537,183],{"class":154},[95,33539,484],{"class":105},[95,33541,323],{"class":154},[95,33543,112],{"class":105},[95,33545,33547],{"class":97,"line":33546},190,[95,33548,33549],{"class":164},"    # 补充:\n",[95,33551,33553],{"class":97,"line":33552},191,[95,33554,33555],{"class":164},"    # plt.subplot(nrows, ncols, index)\n",[95,33557,33559],{"class":97,"line":33558},192,[95,33560,33561],{"class":164},"    # nrows：行数\n",[95,33563,33565],{"class":97,"line":33564},193,[95,33566,33567],{"class":164},"    # ncols：列数\n",[95,33569,33571],{"class":97,"line":33570},194,[95,33572,33573],{"class":164},"    # index：目前选中第几个子图（从1开始）\n",[95,33575,33577,33580,33583,33586,33589,33591,33594,33596,33599],{"class":97,"line":33576},195,[95,33578,33579],{"class":105},"    plt.plot(train_process[",[95,33581,33582],{"class":210},"\"epoch\"",[95,33584,33585],{"class":105},"],train_process.train_loss_all,",[95,33587,33588],{"class":210},"'ro-'",[95,33590,484],{"class":105},[95,33592,33593],{"class":5199},"label",[95,33595,151],{"class":101},[95,33597,33598],{"class":210},"'train loss'",[95,33600,112],{"class":105},[95,33602,33604,33606,33608,33611,33614,33616,33618,33620,33623],{"class":97,"line":33603},196,[95,33605,33579],{"class":105},[95,33607,33582],{"class":210},[95,33609,33610],{"class":105},"],train_process.val_loss_all,",[95,33612,33613],{"class":210},"'bs--'",[95,33615,484],{"class":105},[95,33617,33593],{"class":5199},[95,33619,151],{"class":101},[95,33621,33622],{"class":210},"'val loss'",[95,33624,112],{"class":105},[95,33626,33628],{"class":97,"line":33627},197,[95,33629,33630],{"class":164},"    # 添加一个图例\n",[95,33632,33634],{"class":97,"line":33633},198,[95,33635,33636],{"class":105},"    plt.legend()\n",[95,33638,33640],{"class":97,"line":33639},199,[95,33641,33642],{"class":164},"    # 给轴添加标签\n",[95,33644,33646,33649,33652],{"class":97,"line":33645},200,[95,33647,33648],{"class":105},"    plt.xlabel(",[95,33650,33651],{"class":210},"'epoch'",[95,33653,112],{"class":105},[95,33655,33657,33660,33663],{"class":97,"line":33656},201,[95,33658,33659],{"class":105},"    plt.ylabel(",[95,33661,33662],{"class":210},"'loss'",[95,33664,112],{"class":105},[95,33666,33668],{"class":97,"line":33667},202,[95,33669,33670],{"class":164},"    # ②准确度图\n",[95,33672,33674,33676,33678,33680,33682,33684,33686],{"class":97,"line":33673},203,[95,33675,31712],{"class":105},[95,33677,323],{"class":154},[95,33679,484],{"class":105},[95,33681,183],{"class":154},[95,33683,484],{"class":105},[95,33685,183],{"class":154},[95,33687,112],{"class":105},[95,33689,33691,33693,33695,33698,33700,33702,33704,33706,33709],{"class":97,"line":33690},204,[95,33692,33579],{"class":105},[95,33694,33582],{"class":210},[95,33696,33697],{"class":105},"],train_process.train_acc_all,",[95,33699,33588],{"class":210},[95,33701,484],{"class":105},[95,33703,33593],{"class":5199},[95,33705,151],{"class":101},[95,33707,33708],{"class":210},"'train acc'",[95,33710,112],{"class":105},[95,33712,33714,33716,33718,33721,33723,33725,33727,33729,33732],{"class":97,"line":33713},205,[95,33715,33579],{"class":105},[95,33717,33582],{"class":210},[95,33719,33720],{"class":105},"],train_process.val_acc_all,",[95,33722,33613],{"class":210},[95,33724,484],{"class":105},[95,33726,33593],{"class":5199},[95,33728,151],{"class":101},[95,33730,33731],{"class":210},"'val acc'",[95,33733,112],{"class":105},[95,33735,33737],{"class":97,"line":33736},206,[95,33738,33739],{"class":164},"    # 添加图例\n",[95,33741,33743],{"class":97,"line":33742},207,[95,33744,33636],{"class":105},[95,33746,33748,33750,33752],{"class":97,"line":33747},208,[95,33749,33648],{"class":105},[95,33751,33582],{"class":210},[95,33753,112],{"class":105},[95,33755,33757,33759,33762],{"class":97,"line":33756},209,[95,33758,33659],{"class":105},[95,33760,33761],{"class":210},"\"acc\"",[95,33763,112],{"class":105},[95,33765,33767],{"class":97,"line":33766},210,[95,33768,33769],{"class":105},"    plt.show()\n",[95,33771,33773],{"class":97,"line":33772},211,[95,33774,2382],{"emptyLinePlaceholder":21},[95,33776,33778],{"class":97,"line":33777},212,[95,33779,33780],{"class":164},"# 正式开始训练:\n",[95,33782,33784,33786,33788,33790,33792],{"class":97,"line":33783},213,[95,33785,1513],{"class":101},[95,33787,31205],{"class":154},[95,33789,2931],{"class":101},[95,33791,31210],{"class":210},[95,33793,3721],{"class":105},[95,33795,33797],{"class":97,"line":33796},214,[95,33798,33799],{"class":164},"    # 将模型实例化\n",[95,33801,33803,33806,33808],{"class":97,"line":33802},215,[95,33804,33805],{"class":105},"    LeNet",[95,33807,151],{"class":101},[95,33809,33810],{"class":105},"LeNet()\n",[95,33812,33814,33817,33819],{"class":97,"line":33813},216,[95,33815,33816],{"class":105},"    train_dataloader,val_dataloader",[95,33818,151],{"class":101},[95,33820,33821],{"class":105},"train_val_data_process()\n",[95,33823,33825,33827,33829,33832,33835,33837,33839],{"class":97,"line":33824},217,[95,33826,33378],{"class":105},[95,33828,151],{"class":101},[95,33830,33831],{"class":105},"train_model_process(LeNet,train_dataloader,val_dataloader,",[95,33833,33834],{"class":5199},"num_epochs",[95,33836,151],{"class":101},[95,33838,806],{"class":154},[95,33840,112],{"class":105},[95,33842,33844],{"class":97,"line":33843},218,[95,33845,33846],{"class":105},"    matplot_acc_loss(train_process)\n",[10,33848,33849],{},"画图的补充点学习：",[10,33851,33852],{},[1444,33853],{"alt":14,"src":33854},"\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",[49,33856,33857],{"start":1161},[52,33858,33859],{},"测试",[86,33861,33863],{"className":30363,"code":33862,"language":30365,"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",[92,33864,33865,33871,33881,33893,33903,33908,33918,33928,33932,33937,33946,33963,33975,33992,34003,34019,34024,34035,34046,34057,34064,34068,34073,34083,34088,34105,34113,34117,34122,34131,34140,34144,34149,34154,34159,34166,34171,34183,34193,34203,34208,34212,34217,34226,34231,34247,34252,34257,34262,34276,34281,34295,34299,34304,34319,34324,34336,34340,34345,34357,34362,34370,34375,34380,34390,34395,34404,34409,34414,34418,34423,34428,34444,34452,34457,34462,34521,34527,34532,34543,34551,34559,34563,34568,34572,34577,34585,34590,34606,34611,34621,34631],{"__ignoreMap":14},[95,33866,33867,33869],{"class":97,"line":98},[95,33868,30377],{"class":101},[95,33870,30380],{"class":105},[95,33872,33873,33875,33877,33879],{"class":97,"line":15},[95,33874,30377],{"class":101},[95,33876,31400],{"class":105},[95,33878,31368],{"class":101},[95,33880,31405],{"class":105},[95,33882,33883,33885,33888,33890],{"class":97,"line":1161},[95,33884,30722],{"class":101},[95,33886,33887],{"class":105}," jupyter_client.consoleapp ",[95,33889,30377],{"class":101},[95,33891,33892],{"class":105}," classes\n",[95,33894,33895,33897,33899,33901],{"class":97,"line":1176},[95,33896,30722],{"class":101},[95,33898,31383],{"class":105},[95,33900,30377],{"class":101},[95,33902,31388],{"class":105},[95,33904,33905],{"class":97,"line":1182},[95,33906,33907],{"class":164},"# 导入数据集\n",[95,33909,33910,33912,33914,33916],{"class":97,"line":1196},[95,33911,30722],{"class":101},[95,33913,31353],{"class":105},[95,33915,30377],{"class":101},[95,33917,31358],{"class":105},[95,33919,33920,33922,33924,33926],{"class":97,"line":1202},[95,33921,30722],{"class":101},[95,33923,31899],{"class":105},[95,33925,30377],{"class":101},[95,33927,31904],{"class":105},[95,33929,33930],{"class":97,"line":1293},[95,33931,2382],{"emptyLinePlaceholder":21},[95,33933,33934],{"class":97,"line":1299},[95,33935,33936],{"class":164},"# 测试数据处理\n",[95,33938,33939,33941,33944],{"class":97,"line":1311},[95,33940,31932],{"class":101},[95,33942,33943],{"class":1945}," test_data_process",[95,33945,31938],{"class":105},[95,33947,33948,33951,33953,33955,33957,33959,33961],{"class":97,"line":1594},[95,33949,33950],{"class":105},"    test_data",[95,33952,151],{"class":101},[95,33954,31440],{"class":105},[95,33956,31443],{"class":5199},[95,33958,151],{"class":101},[95,33960,31448],{"class":210},[95,33962,31451],{"class":105},[95,33964,33965,33968,33970,33973],{"class":97,"line":1599},[95,33966,33967],{"class":5199},"                           train",[95,33969,151],{"class":101},[95,33971,33972],{"class":154},"False",[95,33974,31451],{"class":105},[95,33976,33977,33980,33982,33984,33986,33988,33990],{"class":97,"line":1605},[95,33978,33979],{"class":5199},"                           transform",[95,33981,151],{"class":101},[95,33983,31478],{"class":105},[95,33985,31481],{"class":5199},[95,33987,151],{"class":101},[95,33989,1007],{"class":154},[95,33991,31489],{"class":105},[95,33993,33994,33997,33999,34001],{"class":97,"line":1610},[95,33995,33996],{"class":5199},"                           download",[95,33998,151],{"class":101},[95,34000,31461],{"class":154},[95,34002,112],{"class":105},[95,34004,34005,34008,34010,34012,34014,34016],{"class":97,"line":1624},[95,34006,34007],{"class":105},"    test_dataloader",[95,34009,151],{"class":101},[95,34011,31519],{"class":105},[95,34013,31522],{"class":5199},[95,34015,151],{"class":101},[95,34017,34018],{"class":105},"test_data,\n",[95,34020,34021],{"class":97,"line":1629},[95,34022,34023],{"class":164},"                                    # 这里是一张一张进行测试\n",[95,34025,34026,34029,34031,34033],{"class":97,"line":1635},[95,34027,34028],{"class":5199},"                                    batch_size",[95,34030,151],{"class":101},[95,34032,323],{"class":154},[95,34034,31451],{"class":105},[95,34036,34037,34040,34042,34044],{"class":97,"line":1656},[95,34038,34039],{"class":5199},"                                    shuffle",[95,34041,151],{"class":101},[95,34043,31461],{"class":154},[95,34045,31451],{"class":105},[95,34047,34048,34051,34053,34055],{"class":97,"line":1661},[95,34049,34050],{"class":5199},"                                    num_workers",[95,34052,151],{"class":101},[95,34054,297],{"class":154},[95,34056,112],{"class":105},[95,34058,34059,34061],{"class":97,"line":1675},[95,34060,4072],{"class":101},[95,34062,34063],{"class":105}," test_dataloader\n",[95,34065,34066],{"class":97,"line":1680},[95,34067,2382],{"emptyLinePlaceholder":21},[95,34069,34070],{"class":97,"line":1709},[95,34071,34072],{"class":164},"# 定义模型测试函数\n",[95,34074,34075,34077,34080],{"class":97,"line":1714},[95,34076,31932],{"class":101},[95,34078,34079],{"class":1945}," test_model_process",[95,34081,34082],{"class":105},"(model,test_dataloader):\n",[95,34084,34085],{"class":97,"line":1731},[95,34086,34087],{"class":164},"    # 将模型放到设备当中，先进行判断\n",[95,34089,34090,34092,34094,34096,34098,34100,34102],{"class":97,"line":1736},[95,34091,31222],{"class":105},[95,34093,151],{"class":101},[95,34095,31229],{"class":210},[95,34097,1686],{"class":101},[95,34099,31234],{"class":105},[95,34101,1683],{"class":101},[95,34103,34104],{"class":210}," \"cpu\"\n",[95,34106,34107,34109,34111],{"class":97,"line":1741},[95,34108,31274],{"class":105},[95,34110,151],{"class":101},[95,34112,32274],{"class":105},[95,34114,34115],{"class":97,"line":1746},[95,34116,2382],{"emptyLinePlaceholder":21},[95,34118,34119],{"class":97,"line":1760},[95,34120,34121],{"class":164},"    # 设置初始化参数\n",[95,34123,34124,34127,34129],{"class":97,"line":1765},[95,34125,34126],{"class":105},"    test_corrects",[95,34128,151],{"class":101},[95,34130,32327],{"class":154},[95,34132,34133,34136,34138],{"class":97,"line":2559},[95,34134,34135],{"class":105},"    test_num",[95,34137,151],{"class":101},[95,34139,3067],{"class":154},[95,34141,34142],{"class":97,"line":2573},[95,34143,2382],{"emptyLinePlaceholder":21},[95,34145,34146],{"class":97,"line":2581},[95,34147,34148],{"class":164},"    # 进行模型测试\n",[95,34150,34151],{"class":97,"line":2586},[95,34152,34153],{"class":164},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[95,34155,34156],{"class":97,"line":2592},[95,34157,34158],{"class":164},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[95,34160,34161,34164],{"class":97,"line":2598},[95,34162,34163],{"class":101},"    with",[95,34165,32869],{"class":105},[95,34167,34168],{"class":97,"line":2603},[95,34169,34170],{"class":164},"        # 从数据中进行\n",[95,34172,34173,34175,34178,34180],{"class":97,"line":7931},[95,34174,3385],{"class":101},[95,34176,34177],{"class":105}," test_data_x,test_data_y ",[95,34179,26028],{"class":101},[95,34181,34182],{"class":105}," test_dataloader:\n",[95,34184,34185,34188,34190],{"class":97,"line":7955},[95,34186,34187],{"class":105},"            test_data_x",[95,34189,151],{"class":101},[95,34191,34192],{"class":105},"test_data_x.to(device)\n",[95,34194,34195,34198,34200],{"class":97,"line":7960},[95,34196,34197],{"class":105},"            test_data_y",[95,34199,151],{"class":101},[95,34201,34202],{"class":105},"test_data_y.to(device)\n",[95,34204,34205],{"class":97,"line":7966},[95,34206,34207],{"class":164},"            # 设置为验证模式\n",[95,34209,34210],{"class":97,"line":7993},[95,34211,32860],{"class":105},[95,34213,34214],{"class":97,"line":7998},[95,34215,34216],{"class":164},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[95,34218,34219,34221,34223],{"class":97,"line":8004},[95,34220,32645],{"class":105},[95,34222,151],{"class":101},[95,34224,34225],{"class":105},"model(test_data_x)\n",[95,34227,34228],{"class":97,"line":8016},[95,34229,34230],{"class":164},"            # 查找每一行中最大值对应的下标\n",[95,34232,34233,34235,34237,34239,34241,34243,34245],{"class":97,"line":8028},[95,34234,32662],{"class":105},[95,34236,151],{"class":101},[95,34238,32667],{"class":105},[95,34240,32670],{"class":5199},[95,34242,151],{"class":101},[95,34244,323],{"class":154},[95,34246,112],{"class":105},[95,34248,34249],{"class":97,"line":8040},[95,34250,34251],{"class":164},"            # 计算正确率\n",[95,34253,34254],{"class":97,"line":9699},[95,34255,34256],{"class":164},"            # .data表示是一个不带梯度信息的tensor\n",[95,34258,34259],{"class":97,"line":9724},[95,34260,34261],{"class":164},"            # 如果预测正确，则准确度test_corrects加1\n",[95,34263,34264,34267,34269,34271,34273],{"class":97,"line":9747},[95,34265,34266],{"class":105},"            test_corrects",[95,34268,9460],{"class":101},[95,34270,32772],{"class":105},[95,34272,2931],{"class":101},[95,34274,34275],{"class":105},"test_data_y.data)\n",[95,34277,34278],{"class":97,"line":9771},[95,34279,34280],{"class":164},"            # 将所有的测试样本进行累计\n",[95,34282,34283,34286,34288,34291,34293],{"class":97,"line":9776},[95,34284,34285],{"class":105},"            test_num",[95,34287,9460],{"class":101},[95,34289,34290],{"class":105},"test_data_x.size(",[95,34292,297],{"class":154},[95,34294,112],{"class":105},[95,34296,34297],{"class":97,"line":9781},[95,34298,2382],{"emptyLinePlaceholder":21},[95,34300,34301],{"class":97,"line":9786},[95,34302,34303],{"class":164},"        # 计算准确度\n",[95,34305,34306,34309,34311,34314,34316],{"class":97,"line":9795},[95,34307,34308],{"class":105},"        test_acc",[95,34310,151],{"class":101},[95,34312,34313],{"class":105},"test_corrects.double().item()",[95,34315,690],{"class":101},[95,34317,34318],{"class":105},"test_num\n",[95,34320,34321],{"class":97,"line":9800},[95,34322,34323],{"class":164},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[95,34325,34326,34328,34330,34333],{"class":97,"line":9806},[95,34327,32436],{"class":154},[95,34329,106],{"class":105},[95,34331,34332],{"class":210},"\"测试的准确率：\"",[95,34334,34335],{"class":105},",test_acc)\n",[95,34337,34338],{"class":97,"line":9827},[95,34339,2382],{"emptyLinePlaceholder":21},[95,34341,34342],{"class":97,"line":9833},[95,34343,34344],{"class":164},"# 实现模型的测试功能\n",[95,34346,34347,34349,34351,34353,34355],{"class":97,"line":9847},[95,34348,1513],{"class":101},[95,34350,31205],{"class":154},[95,34352,2931],{"class":101},[95,34354,31210],{"class":210},[95,34356,3721],{"class":105},[95,34358,34359],{"class":97,"line":9853},[95,34360,34361],{"class":164},"    # 加载模型\n",[95,34363,34364,34366,34368],{"class":97,"line":9880},[95,34365,31274],{"class":105},[95,34367,151],{"class":101},[95,34369,33810],{"class":105},[95,34371,34372],{"class":97,"line":9889},[95,34373,34374],{"class":164},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[95,34376,34377],{"class":97,"line":9895},[95,34378,34379],{"class":164},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[95,34381,34382,34385,34388],{"class":97,"line":9903},[95,34383,34384],{"class":105},"    model.load_state_dict(torch.load(",[95,34386,34387],{"class":210},"'best_model.pth'",[95,34389,30482],{"class":105},[95,34391,34392],{"class":97,"line":9908},[95,34393,34394],{"class":164},"    # 数据加载\n",[95,34396,34397,34399,34401],{"class":97,"line":16587},[95,34398,34007],{"class":105},[95,34400,151],{"class":101},[95,34402,34403],{"class":105},"test_data_process()\n",[95,34405,34406],{"class":97,"line":16593},[95,34407,34408],{"class":164},"    # 加载模型测试的函数\n",[95,34410,34411],{"class":97,"line":16616},[95,34412,34413],{"class":105},"    test_model_process(model,test_dataloader)\n",[95,34415,34416],{"class":97,"line":16622},[95,34417,2382],{"emptyLinePlaceholder":21},[95,34419,34420],{"class":97,"line":16645},[95,34421,34422],{"class":164},"    # 验证集推理实现：\n",[95,34424,34425],{"class":97,"line":16659},[95,34426,34427],{"class":164},"    # 加载数据加载的更详细一些\n",[95,34429,34430,34432,34434,34436,34438,34440,34442],{"class":97,"line":16679},[95,34431,31222],{"class":105},[95,34433,151],{"class":101},[95,34435,31229],{"class":210},[95,34437,1686],{"class":101},[95,34439,31234],{"class":105},[95,34441,1683],{"class":101},[95,34443,34104],{"class":210},[95,34445,34446,34448,34450],{"class":97,"line":16685},[95,34447,31274],{"class":105},[95,34449,151],{"class":101},[95,34451,32274],{"class":105},[95,34453,34454],{"class":97,"line":16696},[95,34455,34456],{"class":164},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[95,34458,34459],{"class":97,"line":16719},[95,34460,34461],{"class":164},"    # 顺序不可改变\n",[95,34463,34464,34467,34469,34471,34474,34476,34479,34481,34484,34486,34489,34491,34494,34496,34499,34501,34504,34506,34509,34511,34514,34516,34519],{"class":97,"line":16741},[95,34465,34466],{"class":105},"    classes",[95,34468,151],{"class":101},[95,34470,996],{"class":105},[95,34472,34473],{"class":210},"'T-shirt\u002Ftop'",[95,34475,484],{"class":105},[95,34477,34478],{"class":210},"'Trouser'",[95,34480,484],{"class":105},[95,34482,34483],{"class":210},"'Pullover'",[95,34485,484],{"class":105},[95,34487,34488],{"class":210},"'Dress'",[95,34490,484],{"class":105},[95,34492,34493],{"class":210},"'Coat'",[95,34495,484],{"class":105},[95,34497,34498],{"class":210},"'Sandal'",[95,34500,484],{"class":105},[95,34502,34503],{"class":210},"'Shirt'",[95,34505,484],{"class":105},[95,34507,34508],{"class":210},"'Sneaker'",[95,34510,484],{"class":105},[95,34512,34513],{"class":210},"'Bag'",[95,34515,484],{"class":105},[95,34517,34518],{"class":210},"'Ankle boot'",[95,34520,33231],{"class":105},[95,34522,34523,34525],{"class":97,"line":16746},[95,34524,34163],{"class":101},[95,34526,32869],{"class":105},[95,34528,34529],{"class":97,"line":16752},[95,34530,34531],{"class":164},"        # 将数据和标签都放到设备当中\n",[95,34533,34534,34536,34539,34541],{"class":97,"line":16766},[95,34535,3385],{"class":101},[95,34537,34538],{"class":105}," b_x,b_y ",[95,34540,26028],{"class":101},[95,34542,34182],{"class":105},[95,34544,34545,34547,34549],{"class":97,"line":16779},[95,34546,32595],{"class":105},[95,34548,151],{"class":101},[95,34550,32600],{"class":105},[95,34552,34553,34555,34557],{"class":97,"line":16784},[95,34554,32610],{"class":105},[95,34556,151],{"class":101},[95,34558,32615],{"class":105},[95,34560,34561],{"class":97,"line":16798},[95,34562,2382],{"emptyLinePlaceholder":21},[95,34564,34565],{"class":97,"line":16803},[95,34566,34567],{"class":164},"            # 设置模型为验证模式\n",[95,34569,34570],{"class":97,"line":16809},[95,34571,32860],{"class":105},[95,34573,34574],{"class":97,"line":16814},[95,34575,34576],{"class":164},"            # 模型推理结果\n",[95,34578,34579,34581,34583],{"class":97,"line":16828},[95,34580,32645],{"class":105},[95,34582,151],{"class":101},[95,34584,32650],{"class":105},[95,34586,34587],{"class":97,"line":16833},[95,34588,34589],{"class":164},"            # 获取最大下标，最大下标就是类别号\n",[95,34591,34592,34594,34596,34598,34600,34602,34604],{"class":97,"line":16838},[95,34593,32662],{"class":105},[95,34595,151],{"class":101},[95,34597,32667],{"class":105},[95,34599,32670],{"class":5199},[95,34601,151],{"class":101},[95,34603,323],{"class":154},[95,34605,112],{"class":105},[95,34607,34608],{"class":97,"line":16852},[95,34609,34610],{"class":164},"            # 取出张量中的数值\n",[95,34612,34613,34616,34618],{"class":97,"line":16864},[95,34614,34615],{"class":105},"            result",[95,34617,151],{"class":101},[95,34619,34620],{"class":105},"pre_lab.item()\n",[95,34622,34623,34626,34628],{"class":97,"line":16869},[95,34624,34625],{"class":105},"            label",[95,34627,151],{"class":101},[95,34629,34630],{"class":105},"b_y.item()\n",[95,34632,34633,34636,34638,34641,34644,34647,34649,34652],{"class":97,"line":16882},[95,34634,34635],{"class":154},"            print",[95,34637,106],{"class":105},[95,34639,34640],{"class":210},"\"预测值：\"",[95,34642,34643],{"class":105},",classes[result],",[95,34645,34646],{"class":210},"\"------\"",[95,34648,484],{"class":105},[95,34650,34651],{"class":210},"\"真实值：\"",[95,34653,34654],{"class":105},",classes[label])\n",[10,34656,34657],{},"（2）AlexNet",[49,34659,34660],{},[52,34661,34662],{},"神经网络构建",[86,34664,34666],{"className":30363,"code":34665,"language":30365,"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",[92,34667,34668,34674,34684,34694,34706,34710,34727,34735,34750,34762,34804,34831,34874,34900,34944,34987,35030,35057,35061,35071,35076,35104,35123,35142,35146,35151,35159,35174,35184,35198,35208,35223,35238,35253,35264,35268,35273,35283,35298,35303,35317,35332,35344,35349,35360,35365,35371,35376,35388,35408,35413,35422],{"__ignoreMap":14},[95,34669,34670,34672],{"class":97,"line":98},[95,34671,30377],{"class":101},[95,34673,30380],{"class":105},[95,34675,34676,34678,34680,34682],{"class":97,"line":15},[95,34677,30722],{"class":101},[95,34679,30725],{"class":105},[95,34681,30377],{"class":101},[95,34683,30730],{"class":105},[95,34685,34686,34688,34690,34692],{"class":97,"line":1161},[95,34687,30722],{"class":101},[95,34689,30742],{"class":105},[95,34691,30377],{"class":101},[95,34693,30747],{"class":105},[95,34695,34696,34698,34701,34703],{"class":97,"line":1176},[95,34697,30377],{"class":101},[95,34699,34700],{"class":105}," torch.nn.functional ",[95,34702,31368],{"class":101},[95,34704,34705],{"class":105}," F\n",[95,34707,34708],{"class":97,"line":1182},[95,34709,2382],{"emptyLinePlaceholder":21},[95,34711,34712,34714,34717,34719,34721,34723,34725],{"class":97,"line":1196},[95,34713,14677],{"class":101},[95,34715,34716],{"class":1945}," AlexNet",[95,34718,106],{"class":105},[95,34720,30763],{"class":1945},[95,34722,664],{"class":105},[95,34724,30768],{"class":1945},[95,34726,30771],{"class":105},[95,34728,34729,34731,34733],{"class":97,"line":1202},[95,34730,30786],{"class":101},[95,34732,30789],{"class":154},[95,34734,30792],{"class":105},[95,34736,34737,34739,34742,34744,34746,34748],{"class":97,"line":1293},[95,34738,30802],{"class":154},[95,34740,34741],{"class":105},"(AlexNet,",[95,34743,30808],{"class":154},[95,34745,30811],{"class":105},[95,34747,30814],{"class":154},[95,34749,1958],{"class":105},[95,34751,34752,34754,34757,34759],{"class":97,"line":1299},[95,34753,30830],{"class":154},[95,34755,34756],{"class":105},".ReLu",[95,34758,151],{"class":101},[95,34760,34761],{"class":105},"nn.ReLU()\n",[95,34763,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802],{"class":97,"line":1311},[95,34765,30830],{"class":154},[95,34767,30833],{"class":105},[95,34769,151],{"class":101},[95,34771,30838],{"class":105},[95,34773,30841],{"class":5199},[95,34775,151],{"class":101},[95,34777,323],{"class":154},[95,34779,484],{"class":105},[95,34781,30850],{"class":5199},[95,34783,151],{"class":101},[95,34785,315],{"class":154},[95,34787,484],{"class":105},[95,34789,30859],{"class":5199},[95,34791,151],{"class":101},[95,34793,578],{"class":154},[95,34795,484],{"class":105},[95,34797,30914],{"class":5199},[95,34799,151],{"class":101},[95,34801,399],{"class":154},[95,34803,112],{"class":105},[95,34805,34806,34808,34810,34812,34815,34817,34819,34821,34823,34825,34827,34829],{"class":97,"line":1594},[95,34807,30830],{"class":154},[95,34809,30898],{"class":105},[95,34811,151],{"class":101},[95,34813,34814],{"class":105},"nn.MaxPool2d(",[95,34816,30859],{"class":5199},[95,34818,151],{"class":101},[95,34820,177],{"class":154},[95,34822,484],{"class":105},[95,34824,30914],{"class":5199},[95,34826,151],{"class":101},[95,34828,183],{"class":154},[95,34830,112],{"class":105},[95,34832,34833,34835,34837,34839,34841,34843,34845,34847,34849,34851,34853,34856,34858,34860,34862,34864,34866,34868,34870,34872],{"class":97,"line":1599},[95,34834,30830],{"class":154},[95,34836,30927],{"class":105},[95,34838,151],{"class":101},[95,34840,30838],{"class":105},[95,34842,30841],{"class":5199},[95,34844,151],{"class":101},[95,34846,315],{"class":154},[95,34848,484],{"class":105},[95,34850,30850],{"class":5199},[95,34852,151],{"class":101},[95,34854,34855],{"class":154},"256",[95,34857,484],{"class":105},[95,34859,30859],{"class":5199},[95,34861,151],{"class":101},[95,34863,425],{"class":154},[95,34865,484],{"class":105},[95,34867,30868],{"class":5199},[95,34869,151],{"class":101},[95,34871,183],{"class":154},[95,34873,112],{"class":105},[95,34875,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894,34896,34898],{"class":97,"line":1605},[95,34877,30830],{"class":154},[95,34879,30962],{"class":105},[95,34881,151],{"class":101},[95,34883,34814],{"class":105},[95,34885,30859],{"class":5199},[95,34887,151],{"class":101},[95,34889,177],{"class":154},[95,34891,484],{"class":105},[95,34893,30914],{"class":5199},[95,34895,151],{"class":101},[95,34897,183],{"class":154},[95,34899,112],{"class":105},[95,34901,34902,34904,34907,34909,34911,34913,34915,34917,34919,34921,34923,34926,34928,34930,34932,34934,34936,34938,34940,34942],{"class":97,"line":1610},[95,34903,30830],{"class":154},[95,34905,34906],{"class":105},".c5",[95,34908,151],{"class":101},[95,34910,30838],{"class":105},[95,34912,30841],{"class":5199},[95,34914,151],{"class":101},[95,34916,34855],{"class":154},[95,34918,484],{"class":105},[95,34920,30850],{"class":5199},[95,34922,151],{"class":101},[95,34924,34925],{"class":154},"384",[95,34927,484],{"class":105},[95,34929,30859],{"class":5199},[95,34931,151],{"class":101},[95,34933,177],{"class":154},[95,34935,484],{"class":105},[95,34937,30868],{"class":5199},[95,34939,151],{"class":101},[95,34941,323],{"class":154},[95,34943,112],{"class":105},[95,34945,34946,34948,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985],{"class":97,"line":1624},[95,34947,30830],{"class":154},[95,34949,34950],{"class":105},".c6",[95,34952,151],{"class":101},[95,34954,30838],{"class":105},[95,34956,30841],{"class":5199},[95,34958,151],{"class":101},[95,34960,34925],{"class":154},[95,34962,484],{"class":105},[95,34964,30850],{"class":5199},[95,34966,151],{"class":101},[95,34968,34925],{"class":154},[95,34970,484],{"class":105},[95,34972,30859],{"class":5199},[95,34974,151],{"class":101},[95,34976,177],{"class":154},[95,34978,484],{"class":105},[95,34980,30868],{"class":5199},[95,34982,151],{"class":101},[95,34984,323],{"class":154},[95,34986,112],{"class":105},[95,34988,34989,34991,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028],{"class":97,"line":1629},[95,34990,30830],{"class":154},[95,34992,34993],{"class":105},".c7",[95,34995,151],{"class":101},[95,34997,30838],{"class":105},[95,34999,30841],{"class":5199},[95,35001,151],{"class":101},[95,35003,34925],{"class":154},[95,35005,484],{"class":105},[95,35007,30850],{"class":5199},[95,35009,151],{"class":101},[95,35011,34855],{"class":154},[95,35013,484],{"class":105},[95,35015,30859],{"class":5199},[95,35017,151],{"class":101},[95,35019,177],{"class":154},[95,35021,484],{"class":105},[95,35023,30868],{"class":5199},[95,35025,151],{"class":101},[95,35027,323],{"class":154},[95,35029,112],{"class":105},[95,35031,35032,35034,35037,35039,35041,35043,35045,35047,35049,35051,35053,35055],{"class":97,"line":1635},[95,35033,30830],{"class":154},[95,35035,35036],{"class":105},".s8",[95,35038,151],{"class":101},[95,35040,34814],{"class":105},[95,35042,30859],{"class":5199},[95,35044,151],{"class":101},[95,35046,177],{"class":154},[95,35048,484],{"class":105},[95,35050,30914],{"class":5199},[95,35052,151],{"class":101},[95,35054,183],{"class":154},[95,35056,112],{"class":105},[95,35058,35059],{"class":97,"line":1656},[95,35060,30987],{"class":164},[95,35062,35063,35065,35067,35069],{"class":97,"line":1661},[95,35064,30830],{"class":154},[95,35066,30994],{"class":105},[95,35068,151],{"class":101},[95,35070,30999],{"class":105},[95,35072,35073],{"class":97,"line":1675},[95,35074,35075],{"class":164},"       # 定义全连接层\n",[95,35077,35078,35080,35083,35085,35087,35089,35091,35093,35095,35097,35099,35102],{"class":97,"line":1680},[95,35079,30830],{"class":154},[95,35081,35082],{"class":105},".f1",[95,35084,151],{"class":101},[95,35086,31016],{"class":105},[95,35088,450],{"class":154},[95,35090,561],{"class":101},[95,35092,450],{"class":154},[95,35094,561],{"class":101},[95,35096,34855],{"class":154},[95,35098,484],{"class":105},[95,35100,35101],{"class":154},"4096",[95,35103,112],{"class":105},[95,35105,35106,35108,35111,35113,35115,35117,35119,35121],{"class":97,"line":1709},[95,35107,30830],{"class":154},[95,35109,35110],{"class":105},".f2",[95,35112,151],{"class":101},[95,35114,31016],{"class":105},[95,35116,35101],{"class":154},[95,35118,484],{"class":105},[95,35120,35101],{"class":154},[95,35122,112],{"class":105},[95,35124,35125,35127,35130,35132,35134,35136,35138,35140],{"class":97,"line":1714},[95,35126,30830],{"class":154},[95,35128,35129],{"class":105},".f3",[95,35131,151],{"class":101},[95,35133,31016],{"class":105},[95,35135,35101],{"class":154},[95,35137,484],{"class":105},[95,35139,552],{"class":154},[95,35141,112],{"class":105},[95,35143,35144],{"class":97,"line":1731},[95,35145,2382],{"emptyLinePlaceholder":21},[95,35147,35148],{"class":97,"line":1736},[95,35149,35150],{"class":164},"    # 定义前向传播\n",[95,35152,35153,35155,35157],{"class":97,"line":1741},[95,35154,30786],{"class":101},[95,35156,31078],{"class":1945},[95,35158,31081],{"class":105},[95,35160,35161,35163,35165,35167,35170,35172],{"class":97,"line":1746},[95,35162,31086],{"class":105},[95,35164,151],{"class":101},[95,35166,30808],{"class":154},[95,35168,35169],{"class":105},".ReLu(",[95,35171,30808],{"class":154},[95,35173,31098],{"class":105},[95,35175,35176,35178,35180,35182],{"class":97,"line":1760},[95,35177,31086],{"class":105},[95,35179,151],{"class":101},[95,35181,30808],{"class":154},[95,35183,31109],{"class":105},[95,35185,35186,35188,35190,35192,35194,35196],{"class":97,"line":1765},[95,35187,31086],{"class":105},[95,35189,151],{"class":101},[95,35191,30808],{"class":154},[95,35193,35169],{"class":105},[95,35195,30808],{"class":154},[95,35197,31124],{"class":105},[95,35199,35200,35202,35204,35206],{"class":97,"line":2559},[95,35201,31086],{"class":105},[95,35203,151],{"class":101},[95,35205,30808],{"class":154},[95,35207,31135],{"class":105},[95,35209,35210,35212,35214,35216,35218,35220],{"class":97,"line":2573},[95,35211,31086],{"class":105},[95,35213,151],{"class":101},[95,35215,30808],{"class":154},[95,35217,35169],{"class":105},[95,35219,30808],{"class":154},[95,35221,35222],{"class":105},".c5(x))\n",[95,35224,35225,35227,35229,35231,35233,35235],{"class":97,"line":2581},[95,35226,31086],{"class":105},[95,35228,151],{"class":101},[95,35230,30808],{"class":154},[95,35232,35169],{"class":105},[95,35234,30808],{"class":154},[95,35236,35237],{"class":105},".c6(x))\n",[95,35239,35240,35242,35244,35246,35248,35250],{"class":97,"line":2586},[95,35241,31086],{"class":105},[95,35243,151],{"class":101},[95,35245,30808],{"class":154},[95,35247,35169],{"class":105},[95,35249,30808],{"class":154},[95,35251,35252],{"class":105},".c7(x))\n",[95,35254,35255,35257,35259,35261],{"class":97,"line":2592},[95,35256,31086],{"class":105},[95,35258,151],{"class":101},[95,35260,30808],{"class":154},[95,35262,35263],{"class":105},".s8(x)\n",[95,35265,35266],{"class":97,"line":2598},[95,35267,2382],{"emptyLinePlaceholder":21},[95,35269,35270],{"class":97,"line":2603},[95,35271,35272],{"class":164},"        # 展平加线性全连接层\n",[95,35274,35275,35277,35279,35281],{"class":97,"line":7931},[95,35276,31086],{"class":105},[95,35278,151],{"class":101},[95,35280,30808],{"class":154},[95,35282,31146],{"class":105},[95,35284,35285,35287,35289,35291,35293,35295],{"class":97,"line":7955},[95,35286,31086],{"class":105},[95,35288,151],{"class":101},[95,35290,30808],{"class":154},[95,35292,35169],{"class":105},[95,35294,30808],{"class":154},[95,35296,35297],{"class":105},".f1(x))\n",[95,35299,35300],{"class":97,"line":7960},[95,35301,35302],{"class":164},"        # 还需要dropout对神经元随机进行失活\n",[95,35304,35305,35307,35309,35312,35315],{"class":97,"line":7966},[95,35306,31086],{"class":105},[95,35308,151],{"class":101},[95,35310,35311],{"class":105},"F.dropout(x,",[95,35313,35314],{"class":154},"0.5",[95,35316,112],{"class":105},[95,35318,35319,35321,35323,35325,35327,35329],{"class":97,"line":7993},[95,35320,31086],{"class":105},[95,35322,151],{"class":101},[95,35324,30808],{"class":154},[95,35326,35169],{"class":105},[95,35328,30808],{"class":154},[95,35330,35331],{"class":105},".f2(x))\n",[95,35333,35334,35336,35338,35340,35342],{"class":97,"line":7998},[95,35335,31086],{"class":105},[95,35337,151],{"class":101},[95,35339,35311],{"class":105},[95,35341,35314],{"class":154},[95,35343,112],{"class":105},[95,35345,35346],{"class":97,"line":8004},[95,35347,35348],{"class":164},"        # 直接输出\n",[95,35350,35351,35353,35355,35357],{"class":97,"line":8016},[95,35352,31086],{"class":105},[95,35354,151],{"class":101},[95,35356,30808],{"class":154},[95,35358,35359],{"class":105},".f3(x)\n",[95,35361,35362],{"class":97,"line":8028},[95,35363,35364],{"class":164},"        # 前向传播输出\n",[95,35366,35367,35369],{"class":97,"line":8040},[95,35368,14735],{"class":101},[95,35370,31194],{"class":105},[95,35372,35373],{"class":97,"line":9699},[95,35374,35375],{"class":164},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[95,35377,35378,35380,35382,35384,35386],{"class":97,"line":9724},[95,35379,1513],{"class":101},[95,35381,31205],{"class":154},[95,35383,2931],{"class":101},[95,35385,31210],{"class":210},[95,35387,3721],{"class":105},[95,35389,35390,35392,35394,35396,35398,35400,35402,35404,35406],{"class":97,"line":9747},[95,35391,31222],{"class":105},[95,35393,151],{"class":101},[95,35395,30436],{"class":105},[95,35397,31229],{"class":210},[95,35399,1686],{"class":101},[95,35401,31234],{"class":105},[95,35403,1683],{"class":101},[95,35405,30461],{"class":210},[95,35407,112],{"class":105},[95,35409,35410],{"class":97,"line":9771},[95,35411,35412],{"class":164},"    # 模型实例化，然后将实例化的模型放到设备中\n",[95,35414,35415,35417,35419],{"class":97,"line":9776},[95,35416,31274],{"class":105},[95,35418,151],{"class":101},[95,35420,35421],{"class":105},"AlexNet().to(device)\n",[95,35423,35424,35426,35428,35430,35432,35435,35437,35439],{"class":97,"line":9781},[95,35425,31284],{"class":154},[95,35427,31287],{"class":105},[95,35429,323],{"class":154},[95,35431,484],{"class":105},[95,35433,35434],{"class":154},"227",[95,35436,484],{"class":105},[95,35438,35434],{"class":154},[95,35440,31300],{"class":105},[49,35442,35443],{"start":15},[52,35444,31313],{},[86,35446,35448],{"className":30363,"code":35447,"language":30365,"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",[92,35449,35450,35456,35462,35472,35478,35488,35498,35508,35518,35528,35532,35543,35553,35557,35561,35565,35573,35585,35595,35611,35621,35653,35667,35677,35687,35691,35701,35715,35725,35735,35745,35751,35755,35759,35763,35767,35771,35779,35799,35803,35807,35811,35815,35819,35835,35839,35843,35851,35855,35859,35867,35871,35875,35879,35887,35891,35895,35899,35903,35911,35915,35923,35927,35935,35939,35947,35951,35959,35963,35967,35975,35979,35983,35987,35999,36023,36037,36041,36045,36049,36057,36061,36069,36073,36081,36085,36093,36097,36105,36109,36117,36121,36133,36137,36145,36149,36157,36161,36165,36169,36173,36181,36185,36201,36205,36213,36217,36221,36225,36229,36233,36237,36241,36257,36261,36273,36277,36289,36293,36305,36309,36317,36321,36329,36333,36337,36342,36348,36352,36361,36365,36382,36386,36395,36399,36417,36430,36435,36448,36452,36456,36464,36468,36472,36480,36484,36492,36496,36504,36508,36512,36554,36596,36600,36604,36620,36624,36640,36644,36648,36656,36660,36664,36676,36714,36719,36724,36733,36737,36751,36761,36767,36773,36779,36785,36789,36793,36799,36803,36807,36815,36819,36837,36841,36845,36849,36865,36869,36873,36877,36881,36885,36905,36925,36929,36933,36937,36945,36953,36957,36973,36993,37013,37017,37021,37029,37037,37041,37045,37049,37061,37065,37075,37083,37100],{"__ignoreMap":14},[95,35451,35452,35454],{"class":97,"line":98},[95,35453,30377],{"class":101},[95,35455,31807],{"class":105},[95,35457,35458,35460],{"class":97,"line":15},[95,35459,30377],{"class":101},[95,35461,31814],{"class":105},[95,35463,35464,35466,35468,35470],{"class":97,"line":1161},[95,35465,30377],{"class":101},[95,35467,31825],{"class":105},[95,35469,31368],{"class":101},[95,35471,31830],{"class":105},[95,35473,35474,35476],{"class":97,"line":1176},[95,35475,30377],{"class":101},[95,35477,30380],{"class":105},[95,35479,35480,35482,35484,35486],{"class":97,"line":1182},[95,35481,30722],{"class":101},[95,35483,31400],{"class":105},[95,35485,30377],{"class":101},[95,35487,31847],{"class":105},[95,35489,35490,35492,35494,35496],{"class":97,"line":1196},[95,35491,30722],{"class":101},[95,35493,31353],{"class":105},[95,35495,30377],{"class":101},[95,35497,31358],{"class":105},[95,35499,35500,35502,35504,35506],{"class":97,"line":1202},[95,35501,30722],{"class":101},[95,35503,31383],{"class":105},[95,35505,30377],{"class":101},[95,35507,31388],{"class":105},[95,35509,35510,35512,35514,35516],{"class":97,"line":1293},[95,35511,30377],{"class":101},[95,35513,31400],{"class":105},[95,35515,31368],{"class":101},[95,35517,31405],{"class":105},[95,35519,35520,35522,35524,35526],{"class":97,"line":1299},[95,35521,30377],{"class":101},[95,35523,31417],{"class":105},[95,35525,31368],{"class":101},[95,35527,31422],{"class":105},[95,35529,35530],{"class":97,"line":1311},[95,35531,31892],{"class":164},[95,35533,35534,35536,35538,35540],{"class":97,"line":1594},[95,35535,30722],{"class":101},[95,35537,31899],{"class":105},[95,35539,30377],{"class":101},[95,35541,35542],{"class":105}," AlexNet\n",[95,35544,35545,35547,35549,35551],{"class":97,"line":1599},[95,35546,30722],{"class":101},[95,35548,30725],{"class":105},[95,35550,30377],{"class":101},[95,35552,30730],{"class":105},[95,35554,35555],{"class":97,"line":1605},[95,35556,2382],{"emptyLinePlaceholder":21},[95,35558,35559],{"class":97,"line":1610},[95,35560,2382],{"emptyLinePlaceholder":21},[95,35562,35563],{"class":97,"line":1624},[95,35564,31927],{"class":164},[95,35566,35567,35569,35571],{"class":97,"line":1629},[95,35568,31932],{"class":101},[95,35570,31935],{"class":1945},[95,35572,31938],{"class":105},[95,35574,35575,35577,35579,35581,35583],{"class":97,"line":1635},[95,35576,31943],{"class":105},[95,35578,151],{"class":101},[95,35580,31440],{"class":105},[95,35582,31448],{"class":210},[95,35584,31451],{"class":105},[95,35586,35587,35589,35591,35593],{"class":97,"line":1656},[95,35588,31956],{"class":5199},[95,35590,151],{"class":101},[95,35592,31461],{"class":154},[95,35594,31451],{"class":105},[95,35596,35597,35599,35601,35603,35605,35607,35609],{"class":97,"line":1661},[95,35598,31967],{"class":5199},[95,35600,151],{"class":101},[95,35602,31478],{"class":105},[95,35604,31481],{"class":5199},[95,35606,151],{"class":101},[95,35608,35434],{"class":154},[95,35610,31489],{"class":105},[95,35612,35613,35615,35617,35619],{"class":97,"line":1675},[95,35614,31984],{"class":5199},[95,35616,151],{"class":101},[95,35618,31461],{"class":154},[95,35620,112],{"class":105},[95,35622,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651],{"class":97,"line":1680},[95,35624,31995],{"class":105},[95,35626,151],{"class":101},[95,35628,32000],{"class":105},[95,35630,32003],{"class":154},[95,35632,106],{"class":105},[95,35634,32008],{"class":154},[95,35636,561],{"class":101},[95,35638,7341],{"class":154},[95,35640,32015],{"class":105},[95,35642,32003],{"class":154},[95,35644,106],{"class":105},[95,35646,32022],{"class":154},[95,35648,561],{"class":101},[95,35650,7341],{"class":154},[95,35652,32029],{"class":105},[95,35654,35655,35657,35659,35661,35663,35665],{"class":97,"line":1709},[95,35656,32034],{"class":105},[95,35658,151],{"class":101},[95,35660,32039],{"class":105},[95,35662,31522],{"class":5199},[95,35664,151],{"class":101},[95,35666,31527],{"class":105},[95,35668,35669,35671,35673,35675],{"class":97,"line":1714},[95,35670,32050],{"class":5199},[95,35672,151],{"class":101},[95,35674,32055],{"class":154},[95,35676,31451],{"class":105},[95,35678,35679,35681,35683,35685],{"class":97,"line":1731},[95,35680,32062],{"class":5199},[95,35682,151],{"class":101},[95,35684,31461],{"class":154},[95,35686,31451],{"class":105},[95,35688,35689],{"class":97,"line":1736},[95,35690,32073],{"class":164},[95,35692,35693,35695,35697,35699],{"class":97,"line":1741},[95,35694,32078],{"class":5199},[95,35696,151],{"class":101},[95,35698,501],{"class":154},[95,35700,112],{"class":105},[95,35702,35703,35705,35707,35709,35711,35713],{"class":97,"line":1746},[95,35704,32089],{"class":105},[95,35706,151],{"class":101},[95,35708,31519],{"class":105},[95,35710,31522],{"class":5199},[95,35712,151],{"class":101},[95,35714,32100],{"class":105},[95,35716,35717,35719,35721,35723],{"class":97,"line":1760},[95,35718,32105],{"class":5199},[95,35720,151],{"class":101},[95,35722,32055],{"class":154},[95,35724,31451],{"class":105},[95,35726,35727,35729,35731,35733],{"class":97,"line":1765},[95,35728,32116],{"class":5199},[95,35730,151],{"class":101},[95,35732,31461],{"class":154},[95,35734,31451],{"class":105},[95,35736,35737,35739,35741,35743],{"class":97,"line":2559},[95,35738,32127],{"class":5199},[95,35740,151],{"class":101},[95,35742,501],{"class":154},[95,35744,112],{"class":105},[95,35746,35747,35749],{"class":97,"line":2573},[95,35748,4072],{"class":101},[95,35750,32140],{"class":105},[95,35752,35753],{"class":97,"line":2581},[95,35754,2382],{"emptyLinePlaceholder":21},[95,35756,35757],{"class":97,"line":2586},[95,35758,32149],{"class":164},[95,35760,35761],{"class":97,"line":2592},[95,35762,32154],{"class":164},[95,35764,35765],{"class":97,"line":2598},[95,35766,2382],{"emptyLinePlaceholder":21},[95,35768,35769],{"class":97,"line":2603},[95,35770,32163],{"class":164},[95,35772,35773,35775,35777],{"class":97,"line":7931},[95,35774,31932],{"class":101},[95,35776,32170],{"class":1945},[95,35778,32173],{"class":105},[95,35780,35781,35783,35785,35787,35789,35791,35793,35795,35797],{"class":97,"line":7955},[95,35782,31222],{"class":105},[95,35784,151],{"class":101},[95,35786,30436],{"class":105},[95,35788,31229],{"class":210},[95,35790,1686],{"class":101},[95,35792,31234],{"class":105},[95,35794,1683],{"class":101},[95,35796,32192],{"class":210},[95,35798,112],{"class":105},[95,35800,35801],{"class":97,"line":7960},[95,35802,2382],{"emptyLinePlaceholder":21},[95,35804,35805],{"class":97,"line":7966},[95,35806,2382],{"emptyLinePlaceholder":21},[95,35808,35809],{"class":97,"line":7993},[95,35810,32207],{"class":164},[95,35812,35813],{"class":97,"line":7998},[95,35814,32212],{"class":164},[95,35816,35817],{"class":97,"line":8004},[95,35818,32217],{"class":164},[95,35820,35821,35823,35825,35827,35829,35831,35833],{"class":97,"line":8016},[95,35822,32222],{"class":105},[95,35824,151],{"class":101},[95,35826,32227],{"class":105},[95,35828,32230],{"class":5199},[95,35830,151],{"class":101},[95,35832,32235],{"class":154},[95,35834,112],{"class":105},[95,35836,35837],{"class":97,"line":8028},[95,35838,2382],{"emptyLinePlaceholder":21},[95,35840,35841],{"class":97,"line":8040},[95,35842,32246],{"class":164},[95,35844,35845,35847,35849],{"class":97,"line":9699},[95,35846,32251],{"class":105},[95,35848,151],{"class":101},[95,35850,32256],{"class":105},[95,35852,35853],{"class":97,"line":9724},[95,35854,2382],{"emptyLinePlaceholder":21},[95,35856,35857],{"class":97,"line":9747},[95,35858,32265],{"class":164},[95,35860,35861,35863,35865],{"class":97,"line":9771},[95,35862,31274],{"class":105},[95,35864,151],{"class":101},[95,35866,32274],{"class":105},[95,35868,35869],{"class":97,"line":9776},[95,35870,32279],{"class":164},[95,35872,35873],{"class":97,"line":9781},[95,35874,32284],{"class":164},[95,35876,35877],{"class":97,"line":9786},[95,35878,32289],{"class":164},[95,35880,35881,35883,35885],{"class":97,"line":9795},[95,35882,32294],{"class":105},[95,35884,151],{"class":101},[95,35886,32299],{"class":105},[95,35888,35889],{"class":97,"line":9800},[95,35890,2382],{"emptyLinePlaceholder":21},[95,35892,35893],{"class":97,"line":9806},[95,35894,2382],{"emptyLinePlaceholder":21},[95,35896,35897],{"class":97,"line":9827},[95,35898,32312],{"class":164},[95,35900,35901],{"class":97,"line":9833},[95,35902,32317],{"class":164},[95,35904,35905,35907,35909],{"class":97,"line":9847},[95,35906,32322],{"class":105},[95,35908,151],{"class":101},[95,35910,32327],{"class":154},[95,35912,35913],{"class":97,"line":9853},[95,35914,32332],{"class":164},[95,35916,35917,35919,35921],{"class":97,"line":9880},[95,35918,32337],{"class":105},[95,35920,151],{"class":101},[95,35922,32342],{"class":105},[95,35924,35925],{"class":97,"line":9889},[95,35926,32347],{"class":164},[95,35928,35929,35931,35933],{"class":97,"line":9895},[95,35930,32352],{"class":105},[95,35932,151],{"class":101},[95,35934,32342],{"class":105},[95,35936,35937],{"class":97,"line":9903},[95,35938,32361],{"class":164},[95,35940,35941,35943,35945],{"class":97,"line":9908},[95,35942,32366],{"class":105},[95,35944,151],{"class":101},[95,35946,32342],{"class":105},[95,35948,35949],{"class":97,"line":16587},[95,35950,32375],{"class":164},[95,35952,35953,35955,35957],{"class":97,"line":16593},[95,35954,32380],{"class":105},[95,35956,151],{"class":101},[95,35958,32342],{"class":105},[95,35960,35961],{"class":97,"line":16616},[95,35962,2382],{"emptyLinePlaceholder":21},[95,35964,35965],{"class":97,"line":16622},[95,35966,32393],{"class":164},[95,35968,35969,35971,35973],{"class":97,"line":16645},[95,35970,32398],{"class":105},[95,35972,151],{"class":101},[95,35974,32403],{"class":105},[95,35976,35977],{"class":97,"line":16659},[95,35978,2382],{"emptyLinePlaceholder":21},[95,35980,35981],{"class":97,"line":16679},[95,35982,2382],{"emptyLinePlaceholder":21},[95,35984,35985],{"class":97,"line":16685},[95,35986,32416],{"class":164},[95,35988,35989,35991,35993,35995,35997],{"class":97,"line":16696},[95,35990,3183],{"class":101},[95,35992,32423],{"class":105},[95,35994,26028],{"class":101},[95,35996,32428],{"class":154},[95,35998,32431],{"class":105},[95,36000,36001,36003,36005,36007,36009,36011,36013,36015,36017,36019,36021],{"class":97,"line":16719},[95,36002,32436],{"class":154},[95,36004,106],{"class":105},[95,36006,32441],{"class":210},[95,36008,32444],{"class":154},[95,36010,690],{"class":210},[95,36012,32444],{"class":154},[95,36014,357],{"class":210},[95,36016,32453],{"class":105},[95,36018,638],{"class":101},[95,36020,323],{"class":154},[95,36022,30482],{"class":105},[95,36024,36025,36027,36029,36031,36033,36035],{"class":97,"line":16741},[95,36026,32436],{"class":154},[95,36028,106],{"class":105},[95,36030,32468],{"class":210},[95,36032,561],{"class":101},[95,36034,552],{"class":154},[95,36036,112],{"class":105},[95,36038,36039],{"class":97,"line":16746},[95,36040,2382],{"emptyLinePlaceholder":21},[95,36042,36043],{"class":97,"line":16752},[95,36044,32483],{"class":164},[95,36046,36047],{"class":97,"line":16766},[95,36048,32488],{"class":164},[95,36050,36051,36053,36055],{"class":97,"line":16779},[95,36052,32493],{"class":105},[95,36054,151],{"class":101},[95,36056,32327],{"class":154},[95,36058,36059],{"class":97,"line":16784},[95,36060,32502],{"class":164},[95,36062,36063,36065,36067],{"class":97,"line":16798},[95,36064,32507],{"class":105},[95,36066,151],{"class":101},[95,36068,3067],{"class":154},[95,36070,36071],{"class":97,"line":16803},[95,36072,32516],{"class":164},[95,36074,36075,36077,36079],{"class":97,"line":16809},[95,36076,32521],{"class":105},[95,36078,151],{"class":101},[95,36080,32327],{"class":154},[95,36082,36083],{"class":97,"line":16814},[95,36084,32530],{"class":164},[95,36086,36087,36089,36091],{"class":97,"line":16828},[95,36088,32535],{"class":105},[95,36090,151],{"class":101},[95,36092,3067],{"class":154},[95,36094,36095],{"class":97,"line":16833},[95,36096,32544],{"class":164},[95,36098,36099,36101,36103],{"class":97,"line":16838},[95,36100,32549],{"class":105},[95,36102,151],{"class":101},[95,36104,3067],{"class":154},[95,36106,36107],{"class":97,"line":16852},[95,36108,32558],{"class":164},[95,36110,36111,36113,36115],{"class":97,"line":16864},[95,36112,32563],{"class":105},[95,36114,151],{"class":101},[95,36116,3067],{"class":154},[95,36118,36119],{"class":97,"line":16869},[95,36120,32572],{"class":164},[95,36122,36123,36125,36127,36129,36131],{"class":97,"line":16882},[95,36124,3385],{"class":101},[95,36126,31586],{"class":105},[95,36128,26028],{"class":101},[95,36130,31591],{"class":154},[95,36132,32585],{"class":105},[95,36134,36135],{"class":97,"line":16887},[95,36136,32590],{"class":164},[95,36138,36139,36141,36143],{"class":97,"line":16892},[95,36140,32595],{"class":105},[95,36142,151],{"class":101},[95,36144,32600],{"class":105},[95,36146,36147],{"class":97,"line":16897},[95,36148,32605],{"class":164},[95,36150,36151,36153,36155],{"class":97,"line":16910},[95,36152,32610],{"class":105},[95,36154,151],{"class":101},[95,36156,32615],{"class":105},[95,36158,36159],{"class":97,"line":16915},[95,36160,32621],{"class":164},[95,36162,36163],{"class":97,"line":32618},[95,36164,32627],{"class":105},[95,36166,36167],{"class":97,"line":32624},[95,36168,32633],{"class":164},[95,36170,36171],{"class":97,"line":32630},[95,36172,32639],{"class":164},[95,36174,36175,36177,36179],{"class":97,"line":32636},[95,36176,32645],{"class":105},[95,36178,151],{"class":101},[95,36180,32650],{"class":105},[95,36182,36183],{"class":97,"line":32642},[95,36184,32656],{"class":164},[95,36186,36187,36189,36191,36193,36195,36197,36199],{"class":97,"line":32653},[95,36188,32662],{"class":105},[95,36190,151],{"class":101},[95,36192,32667],{"class":105},[95,36194,32670],{"class":5199},[95,36196,151],{"class":101},[95,36198,323],{"class":154},[95,36200,112],{"class":105},[95,36202,36203],{"class":97,"line":32659},[95,36204,32682],{"class":164},[95,36206,36207,36209,36211],{"class":97,"line":32679},[95,36208,32688],{"class":105},[95,36210,151],{"class":101},[95,36212,32693],{"class":105},[95,36214,36215],{"class":97,"line":32685},[95,36216,32699],{"class":164},[95,36218,36219],{"class":97,"line":32696},[95,36220,32705],{"class":105},[95,36222,36223],{"class":97,"line":32702},[95,36224,32711],{"class":164},[95,36226,36227],{"class":97,"line":32708},[95,36228,32717],{"class":105},[95,36230,36231],{"class":97,"line":32714},[95,36232,32723],{"class":164},[95,36234,36235],{"class":97,"line":32720},[95,36236,32729],{"class":105},[95,36238,36239],{"class":97,"line":32726},[95,36240,32735],{"class":164},[95,36242,36243,36245,36247,36249,36251,36253,36255],{"class":97,"line":32732},[95,36244,32741],{"class":105},[95,36246,9460],{"class":101},[95,36248,32746],{"class":105},[95,36250,561],{"class":101},[95,36252,32751],{"class":105},[95,36254,297],{"class":154},[95,36256,112],{"class":105},[95,36258,36259],{"class":97,"line":32738},[95,36260,32761],{"class":164},[95,36262,36263,36265,36267,36269,36271],{"class":97,"line":32758},[95,36264,32767],{"class":105},[95,36266,9460],{"class":101},[95,36268,32772],{"class":105},[95,36270,2931],{"class":101},[95,36272,32777],{"class":105},[95,36274,36275],{"class":97,"line":32764},[95,36276,32783],{"class":164},[95,36278,36279,36281,36283,36285,36287],{"class":97,"line":32780},[95,36280,32789],{"class":105},[95,36282,9460],{"class":101},[95,36284,32751],{"class":105},[95,36286,297],{"class":154},[95,36288,112],{"class":105},[95,36290,36291],{"class":97,"line":32786},[95,36292,32803],{"class":164},[95,36294,36295,36297,36299,36301,36303],{"class":97,"line":32800},[95,36296,3385],{"class":101},[95,36298,32811],{"class":105},[95,36300,26028],{"class":101},[95,36302,31591],{"class":154},[95,36304,32818],{"class":105},[95,36306,36307],{"class":97,"line":32806},[95,36308,32824],{"class":164},[95,36310,36311,36313,36315],{"class":97,"line":32821},[95,36312,32595],{"class":105},[95,36314,151],{"class":101},[95,36316,32600],{"class":105},[95,36318,36319],{"class":97,"line":32827},[95,36320,32839],{"class":164},[95,36322,36323,36325,36327],{"class":97,"line":32836},[95,36324,32610],{"class":105},[95,36326,151],{"class":101},[95,36328,32615],{"class":105},[95,36330,36331],{"class":97,"line":32842},[95,36332,32854],{"class":164},[95,36334,36335],{"class":97,"line":32851},[95,36336,32860],{"class":105},[95,36338,36339],{"class":97,"line":32857},[95,36340,36341],{"class":164},"            # 验证时不计算梯度以节省内存\u002F计算\n",[95,36343,36344,36346],{"class":97,"line":32863},[95,36345,32866],{"class":101},[95,36347,32869],{"class":105},[95,36349,36350],{"class":97,"line":32872},[95,36351,32875],{"class":164},[95,36353,36354,36357,36359],{"class":97,"line":32878},[95,36355,36356],{"class":105},"                output",[95,36358,151],{"class":101},[95,36360,32650],{"class":105},[95,36362,36363],{"class":97,"line":32889},[95,36364,32892],{"class":164},[95,36366,36367,36370,36372,36374,36376,36378,36380],{"class":97,"line":32895},[95,36368,36369],{"class":105},"                pre_lab",[95,36371,151],{"class":101},[95,36373,32667],{"class":105},[95,36375,32670],{"class":5199},[95,36377,151],{"class":101},[95,36379,323],{"class":154},[95,36381,112],{"class":105},[95,36383,36384],{"class":97,"line":32914},[95,36385,32917],{"class":164},[95,36387,36388,36391,36393],{"class":97,"line":32920},[95,36389,36390],{"class":105},"                val_batch_loss",[95,36392,151],{"class":101},[95,36394,32693],{"class":105},[95,36396,36397],{"class":97,"line":32931},[95,36398,32934],{"class":164},[95,36400,36401,36404,36406,36409,36411,36413,36415],{"class":97,"line":32937},[95,36402,36403],{"class":105},"                val_loss",[95,36405,9460],{"class":101},[95,36407,36408],{"class":105},"val_batch_loss.item()",[95,36410,561],{"class":101},[95,36412,32751],{"class":105},[95,36414,297],{"class":154},[95,36416,112],{"class":105},[95,36418,36419,36422,36424,36426,36428],{"class":97,"line":32957},[95,36420,36421],{"class":105},"                val_corrects",[95,36423,9460],{"class":101},[95,36425,32772],{"class":105},[95,36427,2931],{"class":101},[95,36429,32777],{"class":105},[95,36431,36432],{"class":97,"line":32973},[95,36433,36434],{"class":164},"            # 当前用于验证的样本数量\n",[95,36436,36437,36440,36442,36444,36446],{"class":97,"line":32979},[95,36438,36439],{"class":105},"            val_num",[95,36441,9460],{"class":101},[95,36443,32751],{"class":105},[95,36445,297],{"class":154},[95,36447,112],{"class":105},[95,36449,36450],{"class":97,"line":32993},[95,36451,32996],{"class":164},[95,36453,36454],{"class":97,"line":32999},[95,36455,33002],{"class":164},[95,36457,36458,36460,36462],{"class":97,"line":33005},[95,36459,33008],{"class":105},[95,36461,690],{"class":101},[95,36463,33013],{"class":105},[95,36465,36466],{"class":97,"line":33016},[95,36467,33019],{"class":164},[95,36469,36470],{"class":97,"line":33022},[95,36471,33025],{"class":164},[95,36473,36474,36476,36478],{"class":97,"line":33028},[95,36475,33031],{"class":105},[95,36477,690],{"class":101},[95,36479,33013],{"class":105},[95,36481,36482],{"class":97,"line":33038},[95,36483,33041],{"class":164},[95,36485,36486,36488,36490],{"class":97,"line":33044},[95,36487,33047],{"class":105},[95,36489,690],{"class":101},[95,36491,33052],{"class":105},[95,36493,36494],{"class":97,"line":33055},[95,36495,33058],{"class":164},[95,36497,36498,36500,36502],{"class":97,"line":33061},[95,36499,33064],{"class":105},[95,36501,690],{"class":101},[95,36503,33052],{"class":105},[95,36505,36506],{"class":97,"line":33071},[95,36507,2382],{"emptyLinePlaceholder":21},[95,36509,36510],{"class":97,"line":33076},[95,36511,33079],{"class":164},[95,36513,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552],{"class":97,"line":33082},[95,36515,32436],{"class":154},[95,36517,106],{"class":105},[95,36519,3574],{"class":210},[95,36521,32444],{"class":154},[95,36523,33093],{"class":210},[95,36525,1002],{"class":154},[95,36527,33098],{"class":101},[95,36529,1052],{"class":154},[95,36531,33103],{"class":210},[95,36533,1002],{"class":154},[95,36535,33098],{"class":101},[95,36537,1052],{"class":154},[95,36539,3574],{"class":210},[95,36541,33114],{"class":105},[95,36543,638],{"class":101},[95,36545,323],{"class":154},[95,36547,33121],{"class":105},[95,36549,638],{"class":101},[95,36551,323],{"class":154},[95,36553,33128],{"class":105},[95,36555,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594],{"class":97,"line":33131},[95,36557,32436],{"class":154},[95,36559,106],{"class":105},[95,36561,3574],{"class":210},[95,36563,32444],{"class":154},[95,36565,33142],{"class":210},[95,36567,1002],{"class":154},[95,36569,33098],{"class":101},[95,36571,1052],{"class":154},[95,36573,33151],{"class":210},[95,36575,1002],{"class":154},[95,36577,33098],{"class":101},[95,36579,1052],{"class":154},[95,36581,3574],{"class":210},[95,36583,33162],{"class":105},[95,36585,638],{"class":101},[95,36587,323],{"class":154},[95,36589,33169],{"class":105},[95,36591,638],{"class":101},[95,36593,323],{"class":154},[95,36595,33128],{"class":105},[95,36597,36598],{"class":97,"line":33178},[95,36599,2382],{"emptyLinePlaceholder":21},[95,36601,36602],{"class":97,"line":33183},[95,36603,33186],{"class":164},[95,36605,36606,36608,36610,36612,36614,36616,36618],{"class":97,"line":33189},[95,36607,2479],{"class":101},[95,36609,33194],{"class":105},[95,36611,638],{"class":101},[95,36613,323],{"class":154},[95,36615,1046],{"class":105},[95,36617,1066],{"class":101},[95,36619,33205],{"class":105},[95,36621,36622],{"class":97,"line":33208},[95,36623,33211],{"class":164},[95,36625,36626,36628,36630,36632,36634,36636,36638],{"class":97,"line":33214},[95,36627,33217],{"class":105},[95,36629,145],{"class":154},[95,36631,151],{"class":101},[95,36633,33224],{"class":105},[95,36635,638],{"class":101},[95,36637,323],{"class":154},[95,36639,33231],{"class":105},[95,36641,36642],{"class":97,"line":33234},[95,36643,33237],{"class":164},[95,36645,36646],{"class":97,"line":33240},[95,36647,33243],{"class":164},[95,36649,36650,36652,36654],{"class":97,"line":33246},[95,36651,33249],{"class":105},[95,36653,151],{"class":101},[95,36655,32299],{"class":105},[95,36657,36658],{"class":97,"line":33256},[95,36659,2382],{"emptyLinePlaceholder":21},[95,36661,36662],{"class":97,"line":33261},[95,36663,33264],{"class":164},[95,36665,36666,36668,36670,36672,36674],{"class":97,"line":33267},[95,36667,33270],{"class":105},[95,36669,151],{"class":101},[95,36671,33275],{"class":105},[95,36673,638],{"class":101},[95,36675,33280],{"class":105},[95,36677,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712],{"class":97,"line":33283},[95,36679,32436],{"class":154},[95,36681,106],{"class":105},[95,36683,33290],{"class":210},[95,36685,1002],{"class":154},[95,36687,33295],{"class":101},[95,36689,1052],{"class":154},[95,36691,650],{"class":210},[95,36693,1002],{"class":154},[95,36695,33295],{"class":101},[95,36697,1052],{"class":154},[95,36699,33308],{"class":210},[95,36701,33311],{"class":105},[95,36703,33314],{"class":101},[95,36705,1013],{"class":154},[95,36707,33319],{"class":105},[95,36709,434],{"class":101},[95,36711,1013],{"class":154},[95,36713,30482],{"class":105},[95,36715,36716],{"class":97,"line":33328},[95,36717,36718],{"class":164},"    # 选择最优参数并保存\n",[95,36720,36721],{"class":97,"line":33334},[95,36722,36723],{"class":164},"    # 保存最佳模型权重字典\n",[95,36725,36726,36729,36731],{"class":97,"line":33340},[95,36727,36728],{"class":105},"    torch.save(best_model_wts,",[95,36730,33352],{"class":210},[95,36732,112],{"class":105},[95,36734,36735],{"class":97,"line":33346},[95,36736,33372],{"class":164},[95,36738,36739,36741,36743,36745,36747,36749],{"class":97,"line":33357},[95,36740,33378],{"class":105},[95,36742,151],{"class":101},[95,36744,33383],{"class":105},[95,36746,33386],{"class":5199},[95,36748,151],{"class":101},[95,36750,1528],{"class":105},[95,36752,36753,36755,36757,36759],{"class":97,"line":33363},[95,36754,33396],{"class":210},[95,36756,965],{"class":105},[95,36758,33401],{"class":154},[95,36760,33404],{"class":105},[95,36762,36763,36765],{"class":97,"line":33369},[95,36764,33410],{"class":210},[95,36766,33413],{"class":105},[95,36768,36769,36771],{"class":97,"line":33375},[95,36770,33419],{"class":210},[95,36772,33422],{"class":105},[95,36774,36775,36777],{"class":97,"line":33393},[95,36776,33428],{"class":210},[95,36778,33431],{"class":105},[95,36780,36781,36783],{"class":97,"line":33407},[95,36782,33437],{"class":210},[95,36784,33440],{"class":105},[95,36786,36787],{"class":97,"line":33416},[95,36788,33446],{"class":105},[95,36790,36791],{"class":97,"line":33425},[95,36792,33452],{"class":164},[95,36794,36795,36797],{"class":97,"line":33434},[95,36796,4072],{"class":101},[95,36798,33460],{"class":105},[95,36800,36801],{"class":97,"line":33443},[95,36802,2382],{"emptyLinePlaceholder":21},[95,36804,36805],{"class":97,"line":33449},[95,36806,33471],{"class":164},[95,36808,36809,36811,36813],{"class":97,"line":33455},[95,36810,31932],{"class":101},[95,36812,33479],{"class":1945},[95,36814,33482],{"class":105},[95,36816,36817],{"class":97,"line":33463},[95,36818,33488],{"class":164},[95,36820,36821,36823,36825,36827,36829,36831,36833,36835],{"class":97,"line":33468},[95,36822,33494],{"class":105},[95,36824,31678],{"class":5199},[95,36826,151],{"class":101},[95,36828,106],{"class":105},[95,36830,604],{"class":154},[95,36832,484],{"class":105},[95,36834,399],{"class":154},[95,36836,30482],{"class":105},[95,36838,36839],{"class":97,"line":33474},[95,36840,33514],{"class":164},[95,36842,36843],{"class":97,"line":33485},[95,36844,33520],{"class":164},[95,36846,36847],{"class":97,"line":33491},[95,36848,33526],{"class":164},[95,36850,36851,36853,36855,36857,36859,36861,36863],{"class":97,"line":33511},[95,36852,31712],{"class":105},[95,36854,323],{"class":154},[95,36856,484],{"class":105},[95,36858,183],{"class":154},[95,36860,484],{"class":105},[95,36862,323],{"class":154},[95,36864,112],{"class":105},[95,36866,36867],{"class":97,"line":33517},[95,36868,33549],{"class":164},[95,36870,36871],{"class":97,"line":33523},[95,36872,33555],{"class":164},[95,36874,36875],{"class":97,"line":33529},[95,36876,33561],{"class":164},[95,36878,36879],{"class":97,"line":33546},[95,36880,33567],{"class":164},[95,36882,36883],{"class":97,"line":33552},[95,36884,33573],{"class":164},[95,36886,36887,36889,36891,36893,36895,36897,36899,36901,36903],{"class":97,"line":33558},[95,36888,33579],{"class":105},[95,36890,33582],{"class":210},[95,36892,33585],{"class":105},[95,36894,33588],{"class":210},[95,36896,484],{"class":105},[95,36898,33593],{"class":5199},[95,36900,151],{"class":101},[95,36902,33598],{"class":210},[95,36904,112],{"class":105},[95,36906,36907,36909,36911,36913,36915,36917,36919,36921,36923],{"class":97,"line":33564},[95,36908,33579],{"class":105},[95,36910,33582],{"class":210},[95,36912,33610],{"class":105},[95,36914,33613],{"class":210},[95,36916,484],{"class":105},[95,36918,33593],{"class":5199},[95,36920,151],{"class":101},[95,36922,33622],{"class":210},[95,36924,112],{"class":105},[95,36926,36927],{"class":97,"line":33570},[95,36928,33630],{"class":164},[95,36930,36931],{"class":97,"line":33576},[95,36932,33636],{"class":105},[95,36934,36935],{"class":97,"line":33603},[95,36936,33642],{"class":164},[95,36938,36939,36941,36943],{"class":97,"line":33627},[95,36940,33648],{"class":105},[95,36942,33651],{"class":210},[95,36944,112],{"class":105},[95,36946,36947,36949,36951],{"class":97,"line":33633},[95,36948,33659],{"class":105},[95,36950,33662],{"class":210},[95,36952,112],{"class":105},[95,36954,36955],{"class":97,"line":33639},[95,36956,33670],{"class":164},[95,36958,36959,36961,36963,36965,36967,36969,36971],{"class":97,"line":33645},[95,36960,31712],{"class":105},[95,36962,323],{"class":154},[95,36964,484],{"class":105},[95,36966,183],{"class":154},[95,36968,484],{"class":105},[95,36970,183],{"class":154},[95,36972,112],{"class":105},[95,36974,36975,36977,36979,36981,36983,36985,36987,36989,36991],{"class":97,"line":33656},[95,36976,33579],{"class":105},[95,36978,33582],{"class":210},[95,36980,33697],{"class":105},[95,36982,33588],{"class":210},[95,36984,484],{"class":105},[95,36986,33593],{"class":5199},[95,36988,151],{"class":101},[95,36990,33708],{"class":210},[95,36992,112],{"class":105},[95,36994,36995,36997,36999,37001,37003,37005,37007,37009,37011],{"class":97,"line":33667},[95,36996,33579],{"class":105},[95,36998,33582],{"class":210},[95,37000,33720],{"class":105},[95,37002,33613],{"class":210},[95,37004,484],{"class":105},[95,37006,33593],{"class":5199},[95,37008,151],{"class":101},[95,37010,33731],{"class":210},[95,37012,112],{"class":105},[95,37014,37015],{"class":97,"line":33673},[95,37016,33739],{"class":164},[95,37018,37019],{"class":97,"line":33690},[95,37020,33636],{"class":105},[95,37022,37023,37025,37027],{"class":97,"line":33713},[95,37024,33648],{"class":105},[95,37026,33582],{"class":210},[95,37028,112],{"class":105},[95,37030,37031,37033,37035],{"class":97,"line":33736},[95,37032,33659],{"class":105},[95,37034,33761],{"class":210},[95,37036,112],{"class":105},[95,37038,37039],{"class":97,"line":33742},[95,37040,33769],{"class":105},[95,37042,37043],{"class":97,"line":33747},[95,37044,2382],{"emptyLinePlaceholder":21},[95,37046,37047],{"class":97,"line":33756},[95,37048,33780],{"class":164},[95,37050,37051,37053,37055,37057,37059],{"class":97,"line":33766},[95,37052,1513],{"class":101},[95,37054,31205],{"class":154},[95,37056,2931],{"class":101},[95,37058,31210],{"class":210},[95,37060,3721],{"class":105},[95,37062,37063],{"class":97,"line":33772},[95,37064,33799],{"class":164},[95,37066,37067,37070,37072],{"class":97,"line":33777},[95,37068,37069],{"class":105},"    AlexNet",[95,37071,151],{"class":101},[95,37073,37074],{"class":105},"AlexNet()\n",[95,37076,37077,37079,37081],{"class":97,"line":33783},[95,37078,33816],{"class":105},[95,37080,151],{"class":101},[95,37082,33821],{"class":105},[95,37084,37085,37087,37089,37092,37094,37096,37098],{"class":97,"line":33796},[95,37086,33378],{"class":105},[95,37088,151],{"class":101},[95,37090,37091],{"class":105},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[95,37093,33834],{"class":5199},[95,37095,151],{"class":101},[95,37097,806],{"class":154},[95,37099,112],{"class":105},[95,37101,37102],{"class":97,"line":33802},[95,37103,33846],{"class":105},[49,37105,37106],{"start":1161},[52,37107,33859],{},[86,37109,37111],{"className":30363,"code":37110,"language":30365,"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",[92,37112,37113,37119,37129,37139,37149,37153,37163,37173,37184,37188,37192,37196,37204,37220,37230,37246,37256,37270,37274,37284,37294,37304,37310,37314,37318,37326,37330,37346,37354,37358,37362,37370,37378,37382,37386,37390,37394,37400,37404,37414,37422,37430,37434,37438,37442,37450,37454,37470,37474,37478,37482,37494,37498,37510,37514,37518,37530,37534,37544,37548,37552,37564,37568,37576,37580,37584,37592,37596,37604,37608,37612,37616,37620,37624,37640,37648,37652,37656,37704,37710,37714,37724,37732,37740,37744,37748,37752,37756,37764,37768,37784,37788,37796,37804],{"__ignoreMap":14},[95,37114,37115,37117],{"class":97,"line":98},[95,37116,30377],{"class":101},[95,37118,30380],{"class":105},[95,37120,37121,37123,37125,37127],{"class":97,"line":15},[95,37122,30377],{"class":101},[95,37124,31400],{"class":105},[95,37126,31368],{"class":101},[95,37128,31405],{"class":105},[95,37130,37131,37133,37135,37137],{"class":97,"line":1161},[95,37132,30722],{"class":101},[95,37134,33887],{"class":105},[95,37136,30377],{"class":101},[95,37138,33892],{"class":105},[95,37140,37141,37143,37145,37147],{"class":97,"line":1176},[95,37142,30722],{"class":101},[95,37144,31383],{"class":105},[95,37146,30377],{"class":101},[95,37148,31388],{"class":105},[95,37150,37151],{"class":97,"line":1182},[95,37152,33907],{"class":164},[95,37154,37155,37157,37159,37161],{"class":97,"line":1196},[95,37156,30722],{"class":101},[95,37158,31353],{"class":105},[95,37160,30377],{"class":101},[95,37162,31358],{"class":105},[95,37164,37165,37167,37169,37171],{"class":97,"line":1202},[95,37166,30722],{"class":101},[95,37168,31899],{"class":105},[95,37170,30377],{"class":101},[95,37172,35542],{"class":105},[95,37174,37175,37177,37180,37182],{"class":97,"line":1293},[95,37176,30722],{"class":101},[95,37178,37179],{"class":105}," 练习.AlexNet.model ",[95,37181,30377],{"class":101},[95,37183,35542],{"class":105},[95,37185,37186],{"class":97,"line":1299},[95,37187,2382],{"emptyLinePlaceholder":21},[95,37189,37190],{"class":97,"line":1311},[95,37191,2382],{"emptyLinePlaceholder":21},[95,37193,37194],{"class":97,"line":1594},[95,37195,33936],{"class":164},[95,37197,37198,37200,37202],{"class":97,"line":1599},[95,37199,31932],{"class":101},[95,37201,33943],{"class":1945},[95,37203,31938],{"class":105},[95,37205,37206,37208,37210,37212,37214,37216,37218],{"class":97,"line":1605},[95,37207,33950],{"class":105},[95,37209,151],{"class":101},[95,37211,31440],{"class":105},[95,37213,31443],{"class":5199},[95,37215,151],{"class":101},[95,37217,31448],{"class":210},[95,37219,31451],{"class":105},[95,37221,37222,37224,37226,37228],{"class":97,"line":1610},[95,37223,33967],{"class":5199},[95,37225,151],{"class":101},[95,37227,33972],{"class":154},[95,37229,31451],{"class":105},[95,37231,37232,37234,37236,37238,37240,37242,37244],{"class":97,"line":1624},[95,37233,33979],{"class":5199},[95,37235,151],{"class":101},[95,37237,31478],{"class":105},[95,37239,31481],{"class":5199},[95,37241,151],{"class":101},[95,37243,35434],{"class":154},[95,37245,31489],{"class":105},[95,37247,37248,37250,37252,37254],{"class":97,"line":1629},[95,37249,33996],{"class":5199},[95,37251,151],{"class":101},[95,37253,31461],{"class":154},[95,37255,112],{"class":105},[95,37257,37258,37260,37262,37264,37266,37268],{"class":97,"line":1635},[95,37259,34007],{"class":105},[95,37261,151],{"class":101},[95,37263,31519],{"class":105},[95,37265,31522],{"class":5199},[95,37267,151],{"class":101},[95,37269,34018],{"class":105},[95,37271,37272],{"class":97,"line":1656},[95,37273,34023],{"class":164},[95,37275,37276,37278,37280,37282],{"class":97,"line":1661},[95,37277,34028],{"class":5199},[95,37279,151],{"class":101},[95,37281,323],{"class":154},[95,37283,31451],{"class":105},[95,37285,37286,37288,37290,37292],{"class":97,"line":1675},[95,37287,34039],{"class":5199},[95,37289,151],{"class":101},[95,37291,31461],{"class":154},[95,37293,31451],{"class":105},[95,37295,37296,37298,37300,37302],{"class":97,"line":1680},[95,37297,34050],{"class":5199},[95,37299,151],{"class":101},[95,37301,297],{"class":154},[95,37303,112],{"class":105},[95,37305,37306,37308],{"class":97,"line":1709},[95,37307,4072],{"class":101},[95,37309,34063],{"class":105},[95,37311,37312],{"class":97,"line":1714},[95,37313,2382],{"emptyLinePlaceholder":21},[95,37315,37316],{"class":97,"line":1731},[95,37317,34072],{"class":164},[95,37319,37320,37322,37324],{"class":97,"line":1736},[95,37321,31932],{"class":101},[95,37323,34079],{"class":1945},[95,37325,34082],{"class":105},[95,37327,37328],{"class":97,"line":1741},[95,37329,34087],{"class":164},[95,37331,37332,37334,37336,37338,37340,37342,37344],{"class":97,"line":1746},[95,37333,31222],{"class":105},[95,37335,151],{"class":101},[95,37337,31229],{"class":210},[95,37339,1686],{"class":101},[95,37341,31234],{"class":105},[95,37343,1683],{"class":101},[95,37345,34104],{"class":210},[95,37347,37348,37350,37352],{"class":97,"line":1760},[95,37349,31274],{"class":105},[95,37351,151],{"class":101},[95,37353,32274],{"class":105},[95,37355,37356],{"class":97,"line":1765},[95,37357,2382],{"emptyLinePlaceholder":21},[95,37359,37360],{"class":97,"line":2559},[95,37361,34121],{"class":164},[95,37363,37364,37366,37368],{"class":97,"line":2573},[95,37365,34126],{"class":105},[95,37367,151],{"class":101},[95,37369,32327],{"class":154},[95,37371,37372,37374,37376],{"class":97,"line":2581},[95,37373,34135],{"class":105},[95,37375,151],{"class":101},[95,37377,3067],{"class":154},[95,37379,37380],{"class":97,"line":2586},[95,37381,2382],{"emptyLinePlaceholder":21},[95,37383,37384],{"class":97,"line":2592},[95,37385,34148],{"class":164},[95,37387,37388],{"class":97,"line":2598},[95,37389,34153],{"class":164},[95,37391,37392],{"class":97,"line":2603},[95,37393,34158],{"class":164},[95,37395,37396,37398],{"class":97,"line":7931},[95,37397,34163],{"class":101},[95,37399,32869],{"class":105},[95,37401,37402],{"class":97,"line":7955},[95,37403,34170],{"class":164},[95,37405,37406,37408,37410,37412],{"class":97,"line":7960},[95,37407,3385],{"class":101},[95,37409,34177],{"class":105},[95,37411,26028],{"class":101},[95,37413,34182],{"class":105},[95,37415,37416,37418,37420],{"class":97,"line":7966},[95,37417,34187],{"class":105},[95,37419,151],{"class":101},[95,37421,34192],{"class":105},[95,37423,37424,37426,37428],{"class":97,"line":7993},[95,37425,34197],{"class":105},[95,37427,151],{"class":101},[95,37429,34202],{"class":105},[95,37431,37432],{"class":97,"line":7998},[95,37433,34207],{"class":164},[95,37435,37436],{"class":97,"line":8004},[95,37437,32860],{"class":105},[95,37439,37440],{"class":97,"line":8016},[95,37441,34216],{"class":164},[95,37443,37444,37446,37448],{"class":97,"line":8028},[95,37445,32645],{"class":105},[95,37447,151],{"class":101},[95,37449,34225],{"class":105},[95,37451,37452],{"class":97,"line":8040},[95,37453,34230],{"class":164},[95,37455,37456,37458,37460,37462,37464,37466,37468],{"class":97,"line":9699},[95,37457,32662],{"class":105},[95,37459,151],{"class":101},[95,37461,32667],{"class":105},[95,37463,32670],{"class":5199},[95,37465,151],{"class":101},[95,37467,323],{"class":154},[95,37469,112],{"class":105},[95,37471,37472],{"class":97,"line":9724},[95,37473,34251],{"class":164},[95,37475,37476],{"class":97,"line":9747},[95,37477,34256],{"class":164},[95,37479,37480],{"class":97,"line":9771},[95,37481,34261],{"class":164},[95,37483,37484,37486,37488,37490,37492],{"class":97,"line":9776},[95,37485,34266],{"class":105},[95,37487,9460],{"class":101},[95,37489,32772],{"class":105},[95,37491,2931],{"class":101},[95,37493,34275],{"class":105},[95,37495,37496],{"class":97,"line":9781},[95,37497,34280],{"class":164},[95,37499,37500,37502,37504,37506,37508],{"class":97,"line":9786},[95,37501,34285],{"class":105},[95,37503,9460],{"class":101},[95,37505,34290],{"class":105},[95,37507,297],{"class":154},[95,37509,112],{"class":105},[95,37511,37512],{"class":97,"line":9795},[95,37513,2382],{"emptyLinePlaceholder":21},[95,37515,37516],{"class":97,"line":9800},[95,37517,34303],{"class":164},[95,37519,37520,37522,37524,37526,37528],{"class":97,"line":9806},[95,37521,34308],{"class":105},[95,37523,151],{"class":101},[95,37525,34313],{"class":105},[95,37527,690],{"class":101},[95,37529,34318],{"class":105},[95,37531,37532],{"class":97,"line":9827},[95,37533,34323],{"class":164},[95,37535,37536,37538,37540,37542],{"class":97,"line":9833},[95,37537,32436],{"class":154},[95,37539,106],{"class":105},[95,37541,34332],{"class":210},[95,37543,34335],{"class":105},[95,37545,37546],{"class":97,"line":9847},[95,37547,2382],{"emptyLinePlaceholder":21},[95,37549,37550],{"class":97,"line":9853},[95,37551,34344],{"class":164},[95,37553,37554,37556,37558,37560,37562],{"class":97,"line":9880},[95,37555,1513],{"class":101},[95,37557,31205],{"class":154},[95,37559,2931],{"class":101},[95,37561,31210],{"class":210},[95,37563,3721],{"class":105},[95,37565,37566],{"class":97,"line":9889},[95,37567,34361],{"class":164},[95,37569,37570,37572,37574],{"class":97,"line":9895},[95,37571,31274],{"class":105},[95,37573,151],{"class":101},[95,37575,37074],{"class":105},[95,37577,37578],{"class":97,"line":9903},[95,37579,34374],{"class":164},[95,37581,37582],{"class":97,"line":9908},[95,37583,34379],{"class":164},[95,37585,37586,37588,37590],{"class":97,"line":16587},[95,37587,34384],{"class":105},[95,37589,34387],{"class":210},[95,37591,30482],{"class":105},[95,37593,37594],{"class":97,"line":16593},[95,37595,34394],{"class":164},[95,37597,37598,37600,37602],{"class":97,"line":16616},[95,37599,34007],{"class":105},[95,37601,151],{"class":101},[95,37603,34403],{"class":105},[95,37605,37606],{"class":97,"line":16622},[95,37607,34408],{"class":164},[95,37609,37610],{"class":97,"line":16645},[95,37611,34413],{"class":105},[95,37613,37614],{"class":97,"line":16659},[95,37615,2382],{"emptyLinePlaceholder":21},[95,37617,37618],{"class":97,"line":16679},[95,37619,34422],{"class":164},[95,37621,37622],{"class":97,"line":16685},[95,37623,34427],{"class":164},[95,37625,37626,37628,37630,37632,37634,37636,37638],{"class":97,"line":16696},[95,37627,31222],{"class":105},[95,37629,151],{"class":101},[95,37631,31229],{"class":210},[95,37633,1686],{"class":101},[95,37635,31234],{"class":105},[95,37637,1683],{"class":101},[95,37639,34104],{"class":210},[95,37641,37642,37644,37646],{"class":97,"line":16719},[95,37643,31274],{"class":105},[95,37645,151],{"class":101},[95,37647,32274],{"class":105},[95,37649,37650],{"class":97,"line":16741},[95,37651,34456],{"class":164},[95,37653,37654],{"class":97,"line":16746},[95,37655,34461],{"class":164},[95,37657,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702],{"class":97,"line":16752},[95,37659,34466],{"class":105},[95,37661,151],{"class":101},[95,37663,996],{"class":105},[95,37665,34473],{"class":210},[95,37667,484],{"class":105},[95,37669,34478],{"class":210},[95,37671,484],{"class":105},[95,37673,34483],{"class":210},[95,37675,484],{"class":105},[95,37677,34488],{"class":210},[95,37679,484],{"class":105},[95,37681,34493],{"class":210},[95,37683,484],{"class":105},[95,37685,34498],{"class":210},[95,37687,484],{"class":105},[95,37689,34503],{"class":210},[95,37691,484],{"class":105},[95,37693,34508],{"class":210},[95,37695,484],{"class":105},[95,37697,34513],{"class":210},[95,37699,484],{"class":105},[95,37701,34518],{"class":210},[95,37703,33231],{"class":105},[95,37705,37706,37708],{"class":97,"line":16766},[95,37707,34163],{"class":101},[95,37709,32869],{"class":105},[95,37711,37712],{"class":97,"line":16779},[95,37713,34531],{"class":164},[95,37715,37716,37718,37720,37722],{"class":97,"line":16784},[95,37717,3385],{"class":101},[95,37719,34538],{"class":105},[95,37721,26028],{"class":101},[95,37723,34182],{"class":105},[95,37725,37726,37728,37730],{"class":97,"line":16798},[95,37727,32595],{"class":105},[95,37729,151],{"class":101},[95,37731,32600],{"class":105},[95,37733,37734,37736,37738],{"class":97,"line":16803},[95,37735,32610],{"class":105},[95,37737,151],{"class":101},[95,37739,32615],{"class":105},[95,37741,37742],{"class":97,"line":16809},[95,37743,2382],{"emptyLinePlaceholder":21},[95,37745,37746],{"class":97,"line":16814},[95,37747,34567],{"class":164},[95,37749,37750],{"class":97,"line":16828},[95,37751,32860],{"class":105},[95,37753,37754],{"class":97,"line":16833},[95,37755,34576],{"class":164},[95,37757,37758,37760,37762],{"class":97,"line":16838},[95,37759,32645],{"class":105},[95,37761,151],{"class":101},[95,37763,32650],{"class":105},[95,37765,37766],{"class":97,"line":16852},[95,37767,34589],{"class":164},[95,37769,37770,37772,37774,37776,37778,37780,37782],{"class":97,"line":16864},[95,37771,32662],{"class":105},[95,37773,151],{"class":101},[95,37775,32667],{"class":105},[95,37777,32670],{"class":5199},[95,37779,151],{"class":101},[95,37781,323],{"class":154},[95,37783,112],{"class":105},[95,37785,37786],{"class":97,"line":16869},[95,37787,34610],{"class":164},[95,37789,37790,37792,37794],{"class":97,"line":16882},[95,37791,34615],{"class":105},[95,37793,151],{"class":101},[95,37795,34620],{"class":105},[95,37797,37798,37800,37802],{"class":97,"line":16887},[95,37799,34625],{"class":105},[95,37801,151],{"class":101},[95,37803,34630],{"class":105},[95,37805,37806,37808,37810,37812,37814,37816,37818,37820],{"class":97,"line":16892},[95,37807,34635],{"class":154},[95,37809,106],{"class":105},[95,37811,34640],{"class":210},[95,37813,34643],{"class":105},[95,37815,34646],{"class":210},[95,37817,484],{"class":105},[95,37819,34651],{"class":210},[95,37821,34654],{"class":105},[66,37823,37825],{"id":37824},"_22vgg","2.2.VGG",[21981,37827,37829],{"id":37828},"_221原理","2.2.1.原理",[10,37831,37832],{},[1444,37833],{"alt":14,"src":37834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[10,37836,37837],{},[1444,37838],{"alt":14,"src":37839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[10,37841,37842],{},[1444,37843],{"alt":14,"src":37844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[10,37846,37847],{},"参数详细描述：",[10,37849,37850],{},[1444,37851],{"alt":14,"src":37852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[10,37854,37855],{},[1444,37856],{"alt":14,"src":37857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[10,37859,37860],{},[1444,37861],{"alt":14,"src":37862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[10,37864,37865],{},[1444,37866],{"alt":14,"src":37867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[10,37869,37870],{},[1444,37871],{"alt":14,"src":37872},"\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",[21981,37874,37876],{"id":37875},"_222代码实现","2.2.2.代码实现",[49,37878,37879],{},[52,37880,37881],{},"网络搭建",[86,37883,37885],{"className":30363,"code":37884,"language":30365,"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",[92,37886,37887,37893,37905,37915,37925,37929,37946,37954,37973,37978,37983,37995,38033,38038,38074,38078,38107,38112,38117,38128,38164,38168,38204,38208,38236,38240,38245,38256,38292,38296,38332,38336,38372,38376,38404,38408,38413,38424,38461,38465,38501,38505,38541,38545,38573,38577,38582,38593,38629,38633,38669,38673,38709,38713,38741,38745,38750,38761,38766,38771,38776,38797,38801,38813,38817,38829,38833,38837,38842,38847,38862,38867,38877,38882,38897,38902,38921,38926,38935,38940,38950,38955,38960,38974,38979,38993,39001,39005,39009,39017,39028,39039,39050,39061,39072,39083,39089,39093,39098,39111,39131,39137,39146],{"__ignoreMap":14},[95,37888,37889,37891],{"class":97,"line":98},[95,37890,30377],{"class":101},[95,37892,30380],{"class":105},[95,37894,37895,37897,37900,37902],{"class":97,"line":15},[95,37896,30722],{"class":101},[95,37898,37899],{"class":105}," sympy.core.sympify ",[95,37901,30377],{"class":101},[95,37903,37904],{"class":105}," kernS\n",[95,37906,37907,37909,37911,37913],{"class":97,"line":1161},[95,37908,30722],{"class":101},[95,37910,30725],{"class":105},[95,37912,30377],{"class":101},[95,37914,30730],{"class":105},[95,37916,37917,37919,37921,37923],{"class":97,"line":1176},[95,37918,30722],{"class":101},[95,37920,30742],{"class":105},[95,37922,30377],{"class":101},[95,37924,30747],{"class":105},[95,37926,37927],{"class":97,"line":1182},[95,37928,2382],{"emptyLinePlaceholder":21},[95,37930,37931,37933,37936,37938,37940,37942,37944],{"class":97,"line":1196},[95,37932,14677],{"class":101},[95,37934,37935],{"class":1945}," VGG16",[95,37937,106],{"class":105},[95,37939,30763],{"class":1945},[95,37941,664],{"class":105},[95,37943,30768],{"class":1945},[95,37945,30771],{"class":105},[95,37947,37948,37950,37952],{"class":97,"line":1202},[95,37949,30786],{"class":101},[95,37951,30789],{"class":154},[95,37953,30792],{"class":105},[95,37955,37956,37958,37960,37963,37965,37967,37969,37971],{"class":97,"line":1293},[95,37957,30802],{"class":154},[95,37959,106],{"class":105},[95,37961,37962],{"class":154},"VGG16",[95,37964,12418],{"class":105},[95,37966,30808],{"class":154},[95,37968,30811],{"class":105},[95,37970,30814],{"class":154},[95,37972,1958],{"class":105},[95,37974,37975],{"class":97,"line":1299},[95,37976,37977],{"class":164},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[95,37979,37980],{"class":97,"line":1311},[95,37981,37982],{"class":164},"        # 这里用的是灰度图\n",[95,37984,37985,37987,37990,37992],{"class":97,"line":1594},[95,37986,30830],{"class":154},[95,37988,37989],{"class":105},".block1",[95,37991,151],{"class":101},[95,37993,37994],{"class":105},"nn.Sequential(\n",[95,37996,37997,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030],{"class":97,"line":1599},[95,37998,37999],{"class":105},"            nn.Conv2d(",[95,38001,30841],{"class":5199},[95,38003,151],{"class":101},[95,38005,323],{"class":154},[95,38007,484],{"class":105},[95,38009,30850],{"class":5199},[95,38011,151],{"class":101},[95,38013,309],{"class":154},[95,38015,484],{"class":105},[95,38017,30859],{"class":5199},[95,38019,151],{"class":101},[95,38021,177],{"class":154},[95,38023,484],{"class":105},[95,38025,30868],{"class":5199},[95,38027,151],{"class":101},[95,38029,323],{"class":154},[95,38031,38032],{"class":105},"),\n",[95,38034,38035],{"class":97,"line":1605},[95,38036,38037],{"class":105},"            nn.ReLU(),\n",[95,38039,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072],{"class":97,"line":1610},[95,38041,37999],{"class":105},[95,38043,30841],{"class":5199},[95,38045,151],{"class":101},[95,38047,309],{"class":154},[95,38049,484],{"class":105},[95,38051,30850],{"class":5199},[95,38053,151],{"class":101},[95,38055,309],{"class":154},[95,38057,484],{"class":105},[95,38059,30859],{"class":5199},[95,38061,151],{"class":101},[95,38063,177],{"class":154},[95,38065,484],{"class":105},[95,38067,30868],{"class":5199},[95,38069,151],{"class":101},[95,38071,323],{"class":154},[95,38073,38032],{"class":105},[95,38075,38076],{"class":97,"line":1624},[95,38077,38037],{"class":105},[95,38079,38080,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103,38105],{"class":97,"line":1629},[95,38081,38082],{"class":105},"            nn.MaxPool2d(",[95,38084,30859],{"class":5199},[95,38086,151],{"class":101},[95,38088,183],{"class":154},[95,38090,484],{"class":105},[95,38092,30914],{"class":5199},[95,38094,151],{"class":101},[95,38096,183],{"class":154},[95,38098,484],{"class":105},[95,38100,30868],{"class":5199},[95,38102,151],{"class":101},[95,38104,297],{"class":154},[95,38106,112],{"class":105},[95,38108,38109],{"class":97,"line":1635},[95,38110,38111],{"class":105},"        )\n",[95,38113,38114],{"class":97,"line":1656},[95,38115,38116],{"class":164},"        # 第二层\n",[95,38118,38119,38121,38124,38126],{"class":97,"line":1661},[95,38120,30830],{"class":154},[95,38122,38123],{"class":105},".block2",[95,38125,151],{"class":101},[95,38127,37994],{"class":105},[95,38129,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162],{"class":97,"line":1675},[95,38131,37999],{"class":105},[95,38133,30841],{"class":5199},[95,38135,151],{"class":101},[95,38137,309],{"class":154},[95,38139,484],{"class":105},[95,38141,30850],{"class":5199},[95,38143,151],{"class":101},[95,38145,32055],{"class":154},[95,38147,484],{"class":105},[95,38149,30859],{"class":5199},[95,38151,151],{"class":101},[95,38153,177],{"class":154},[95,38155,484],{"class":105},[95,38157,30868],{"class":5199},[95,38159,151],{"class":101},[95,38161,323],{"class":154},[95,38163,38032],{"class":105},[95,38165,38166],{"class":97,"line":1680},[95,38167,38037],{"class":105},[95,38169,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202],{"class":97,"line":1709},[95,38171,37999],{"class":105},[95,38173,30841],{"class":5199},[95,38175,151],{"class":101},[95,38177,32055],{"class":154},[95,38179,484],{"class":105},[95,38181,30850],{"class":5199},[95,38183,151],{"class":101},[95,38185,32055],{"class":154},[95,38187,484],{"class":105},[95,38189,30859],{"class":5199},[95,38191,151],{"class":101},[95,38193,177],{"class":154},[95,38195,484],{"class":105},[95,38197,30868],{"class":5199},[95,38199,151],{"class":101},[95,38201,323],{"class":154},[95,38203,38032],{"class":105},[95,38205,38206],{"class":97,"line":1714},[95,38207,38037],{"class":105},[95,38209,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234],{"class":97,"line":1731},[95,38211,38082],{"class":105},[95,38213,30859],{"class":5199},[95,38215,151],{"class":101},[95,38217,183],{"class":154},[95,38219,484],{"class":105},[95,38221,30914],{"class":5199},[95,38223,151],{"class":101},[95,38225,183],{"class":154},[95,38227,484],{"class":105},[95,38229,30868],{"class":5199},[95,38231,151],{"class":101},[95,38233,297],{"class":154},[95,38235,112],{"class":105},[95,38237,38238],{"class":97,"line":1736},[95,38239,38111],{"class":105},[95,38241,38242],{"class":97,"line":1741},[95,38243,38244],{"class":164},"        # 第三层\n",[95,38246,38247,38249,38252,38254],{"class":97,"line":1746},[95,38248,30830],{"class":154},[95,38250,38251],{"class":105},".block3",[95,38253,151],{"class":101},[95,38255,37994],{"class":105},[95,38257,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290],{"class":97,"line":1760},[95,38259,37999],{"class":105},[95,38261,30841],{"class":5199},[95,38263,151],{"class":101},[95,38265,32055],{"class":154},[95,38267,484],{"class":105},[95,38269,30850],{"class":5199},[95,38271,151],{"class":101},[95,38273,34855],{"class":154},[95,38275,484],{"class":105},[95,38277,30859],{"class":5199},[95,38279,151],{"class":101},[95,38281,177],{"class":154},[95,38283,484],{"class":105},[95,38285,30868],{"class":5199},[95,38287,151],{"class":101},[95,38289,323],{"class":154},[95,38291,38032],{"class":105},[95,38293,38294],{"class":97,"line":1765},[95,38295,38037],{"class":105},[95,38297,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330],{"class":97,"line":2559},[95,38299,37999],{"class":105},[95,38301,30841],{"class":5199},[95,38303,151],{"class":101},[95,38305,34855],{"class":154},[95,38307,484],{"class":105},[95,38309,30850],{"class":5199},[95,38311,151],{"class":101},[95,38313,34855],{"class":154},[95,38315,484],{"class":105},[95,38317,30859],{"class":5199},[95,38319,151],{"class":101},[95,38321,177],{"class":154},[95,38323,484],{"class":105},[95,38325,30868],{"class":5199},[95,38327,151],{"class":101},[95,38329,323],{"class":154},[95,38331,38032],{"class":105},[95,38333,38334],{"class":97,"line":2573},[95,38335,38037],{"class":105},[95,38337,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370],{"class":97,"line":2581},[95,38339,37999],{"class":105},[95,38341,30841],{"class":5199},[95,38343,151],{"class":101},[95,38345,34855],{"class":154},[95,38347,484],{"class":105},[95,38349,30850],{"class":5199},[95,38351,151],{"class":101},[95,38353,34855],{"class":154},[95,38355,484],{"class":105},[95,38357,30859],{"class":5199},[95,38359,151],{"class":101},[95,38361,177],{"class":154},[95,38363,484],{"class":105},[95,38365,30868],{"class":5199},[95,38367,151],{"class":101},[95,38369,323],{"class":154},[95,38371,38032],{"class":105},[95,38373,38374],{"class":97,"line":2586},[95,38375,38037],{"class":105},[95,38377,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402],{"class":97,"line":2592},[95,38379,38082],{"class":105},[95,38381,30859],{"class":5199},[95,38383,151],{"class":101},[95,38385,183],{"class":154},[95,38387,484],{"class":105},[95,38389,30914],{"class":5199},[95,38391,151],{"class":101},[95,38393,183],{"class":154},[95,38395,484],{"class":105},[95,38397,30868],{"class":5199},[95,38399,151],{"class":101},[95,38401,297],{"class":154},[95,38403,112],{"class":105},[95,38405,38406],{"class":97,"line":2598},[95,38407,38111],{"class":105},[95,38409,38410],{"class":97,"line":2603},[95,38411,38412],{"class":164},"        # 第四层\n",[95,38414,38415,38417,38420,38422],{"class":97,"line":7931},[95,38416,30830],{"class":154},[95,38418,38419],{"class":105},".block4",[95,38421,151],{"class":101},[95,38423,37994],{"class":105},[95,38425,38426,38428,38430,38432,38434,38436,38438,38440,38443,38445,38447,38449,38451,38453,38455,38457,38459],{"class":97,"line":7955},[95,38427,37999],{"class":105},[95,38429,30841],{"class":5199},[95,38431,151],{"class":101},[95,38433,34855],{"class":154},[95,38435,484],{"class":105},[95,38437,30850],{"class":5199},[95,38439,151],{"class":101},[95,38441,38442],{"class":154},"512",[95,38444,484],{"class":105},[95,38446,30859],{"class":5199},[95,38448,151],{"class":101},[95,38450,177],{"class":154},[95,38452,484],{"class":105},[95,38454,30868],{"class":5199},[95,38456,151],{"class":101},[95,38458,323],{"class":154},[95,38460,38032],{"class":105},[95,38462,38463],{"class":97,"line":7960},[95,38464,38037],{"class":105},[95,38466,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499],{"class":97,"line":7966},[95,38468,37999],{"class":105},[95,38470,30841],{"class":5199},[95,38472,151],{"class":101},[95,38474,38442],{"class":154},[95,38476,484],{"class":105},[95,38478,30850],{"class":5199},[95,38480,151],{"class":101},[95,38482,38442],{"class":154},[95,38484,484],{"class":105},[95,38486,30859],{"class":5199},[95,38488,151],{"class":101},[95,38490,177],{"class":154},[95,38492,484],{"class":105},[95,38494,30868],{"class":5199},[95,38496,151],{"class":101},[95,38498,323],{"class":154},[95,38500,38032],{"class":105},[95,38502,38503],{"class":97,"line":7993},[95,38504,38037],{"class":105},[95,38506,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539],{"class":97,"line":7998},[95,38508,37999],{"class":105},[95,38510,30841],{"class":5199},[95,38512,151],{"class":101},[95,38514,38442],{"class":154},[95,38516,484],{"class":105},[95,38518,30850],{"class":5199},[95,38520,151],{"class":101},[95,38522,38442],{"class":154},[95,38524,484],{"class":105},[95,38526,30859],{"class":5199},[95,38528,151],{"class":101},[95,38530,177],{"class":154},[95,38532,484],{"class":105},[95,38534,30868],{"class":5199},[95,38536,151],{"class":101},[95,38538,323],{"class":154},[95,38540,38032],{"class":105},[95,38542,38543],{"class":97,"line":8004},[95,38544,38037],{"class":105},[95,38546,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571],{"class":97,"line":8016},[95,38548,38082],{"class":105},[95,38550,30859],{"class":5199},[95,38552,151],{"class":101},[95,38554,183],{"class":154},[95,38556,484],{"class":105},[95,38558,30914],{"class":5199},[95,38560,151],{"class":101},[95,38562,183],{"class":154},[95,38564,484],{"class":105},[95,38566,30868],{"class":5199},[95,38568,151],{"class":101},[95,38570,297],{"class":154},[95,38572,112],{"class":105},[95,38574,38575],{"class":97,"line":8028},[95,38576,38111],{"class":105},[95,38578,38579],{"class":97,"line":8040},[95,38580,38581],{"class":164},"        # 第五层\n",[95,38583,38584,38586,38589,38591],{"class":97,"line":9699},[95,38585,30830],{"class":154},[95,38587,38588],{"class":105},".block5",[95,38590,151],{"class":101},[95,38592,37994],{"class":105},[95,38594,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627],{"class":97,"line":9724},[95,38596,37999],{"class":105},[95,38598,30841],{"class":5199},[95,38600,151],{"class":101},[95,38602,38442],{"class":154},[95,38604,484],{"class":105},[95,38606,30850],{"class":5199},[95,38608,151],{"class":101},[95,38610,38442],{"class":154},[95,38612,484],{"class":105},[95,38614,30859],{"class":5199},[95,38616,151],{"class":101},[95,38618,177],{"class":154},[95,38620,484],{"class":105},[95,38622,30868],{"class":5199},[95,38624,151],{"class":101},[95,38626,323],{"class":154},[95,38628,38032],{"class":105},[95,38630,38631],{"class":97,"line":9747},[95,38632,38037],{"class":105},[95,38634,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":97,"line":9771},[95,38636,37999],{"class":105},[95,38638,30841],{"class":5199},[95,38640,151],{"class":101},[95,38642,38442],{"class":154},[95,38644,484],{"class":105},[95,38646,30850],{"class":5199},[95,38648,151],{"class":101},[95,38650,38442],{"class":154},[95,38652,484],{"class":105},[95,38654,30859],{"class":5199},[95,38656,151],{"class":101},[95,38658,177],{"class":154},[95,38660,484],{"class":105},[95,38662,30868],{"class":5199},[95,38664,151],{"class":101},[95,38666,323],{"class":154},[95,38668,38032],{"class":105},[95,38670,38671],{"class":97,"line":9776},[95,38672,38037],{"class":105},[95,38674,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707],{"class":97,"line":9781},[95,38676,37999],{"class":105},[95,38678,30841],{"class":5199},[95,38680,151],{"class":101},[95,38682,38442],{"class":154},[95,38684,484],{"class":105},[95,38686,30850],{"class":5199},[95,38688,151],{"class":101},[95,38690,38442],{"class":154},[95,38692,484],{"class":105},[95,38694,30859],{"class":5199},[95,38696,151],{"class":101},[95,38698,177],{"class":154},[95,38700,484],{"class":105},[95,38702,30868],{"class":5199},[95,38704,151],{"class":101},[95,38706,323],{"class":154},[95,38708,38032],{"class":105},[95,38710,38711],{"class":97,"line":9786},[95,38712,38037],{"class":105},[95,38714,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739],{"class":97,"line":9795},[95,38716,38082],{"class":105},[95,38718,30859],{"class":5199},[95,38720,151],{"class":101},[95,38722,183],{"class":154},[95,38724,484],{"class":105},[95,38726,30914],{"class":5199},[95,38728,151],{"class":101},[95,38730,183],{"class":154},[95,38732,484],{"class":105},[95,38734,30868],{"class":5199},[95,38736,151],{"class":101},[95,38738,297],{"class":154},[95,38740,112],{"class":105},[95,38742,38743],{"class":97,"line":9800},[95,38744,38111],{"class":105},[95,38746,38747],{"class":97,"line":9806},[95,38748,38749],{"class":164},"        # 全连接层\n",[95,38751,38752,38754,38757,38759],{"class":97,"line":9827},[95,38753,30830],{"class":154},[95,38755,38756],{"class":105},".block6",[95,38758,151],{"class":101},[95,38760,37994],{"class":105},[95,38762,38763],{"class":97,"line":9833},[95,38764,38765],{"class":164},"            # 平展操作\n",[95,38767,38768],{"class":97,"line":9847},[95,38769,38770],{"class":164},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[95,38772,38773],{"class":97,"line":9853},[95,38774,38775],{"class":105},"            nn.Flatten(),\n",[95,38777,38778,38781,38783,38785,38787,38789,38791,38793,38795],{"class":97,"line":9880},[95,38779,38780],{"class":105},"            nn.Linear(",[95,38782,475],{"class":154},[95,38784,561],{"class":101},[95,38786,475],{"class":154},[95,38788,561],{"class":101},[95,38790,38442],{"class":154},[95,38792,484],{"class":105},[95,38794,34855],{"class":154},[95,38796,38032],{"class":105},[95,38798,38799],{"class":97,"line":9889},[95,38800,38037],{"class":105},[95,38802,38803,38805,38807,38809,38811],{"class":97,"line":9895},[95,38804,38780],{"class":105},[95,38806,34855],{"class":154},[95,38808,484],{"class":105},[95,38810,32055],{"class":154},[95,38812,38032],{"class":105},[95,38814,38815],{"class":97,"line":9903},[95,38816,38037],{"class":105},[95,38818,38819,38821,38823,38825,38827],{"class":97,"line":9908},[95,38820,38780],{"class":105},[95,38822,32055],{"class":154},[95,38824,484],{"class":105},[95,38826,552],{"class":154},[95,38828,112],{"class":105},[95,38830,38831],{"class":97,"line":16587},[95,38832,38111],{"class":105},[95,38834,38835],{"class":97,"line":16593},[95,38836,2382],{"emptyLinePlaceholder":21},[95,38838,38839],{"class":97,"line":16616},[95,38840,38841],{"class":164},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[95,38843,38844],{"class":97,"line":16622},[95,38845,38846],{"class":164},"        # 循环遍历模型\n",[95,38848,38849,38851,38854,38856,38859],{"class":97,"line":16645},[95,38850,3385],{"class":101},[95,38852,38853],{"class":105}," m ",[95,38855,26028],{"class":101},[95,38857,38858],{"class":154}," self",[95,38860,38861],{"class":105},".modules():\n",[95,38863,38864],{"class":97,"line":16659},[95,38865,38866],{"class":164},"            # print(m)\n",[95,38868,38869,38871,38874],{"class":97,"line":16679},[95,38870,4624],{"class":101},[95,38872,38873],{"class":154}," isinstance",[95,38875,38876],{"class":105},"(m,nn.Conv2d):\n",[95,38878,38879],{"class":97,"line":16685},[95,38880,38881],{"class":164},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[95,38883,38884,38887,38890,38892,38895],{"class":97,"line":16696},[95,38885,38886],{"class":105},"                nn.init.kaiming_normal_(m.weight,",[95,38888,38889],{"class":5199},"nonlinearity",[95,38891,151],{"class":101},[95,38893,38894],{"class":210},"'relu'",[95,38896,112],{"class":105},[95,38898,38899],{"class":97,"line":16719},[95,38900,38901],{"class":164},"                # 判断b参数是否存在\n",[95,38903,38904,38907,38910,38913,38916,38919],{"class":97,"line":16741},[95,38905,38906],{"class":101},"                if",[95,38908,38909],{"class":105}," m.bias ",[95,38911,38912],{"class":101},"is",[95,38914,38915],{"class":101}," not",[95,38917,38918],{"class":154}," None",[95,38920,3721],{"class":105},[95,38922,38923],{"class":97,"line":16746},[95,38924,38925],{"class":164},"                    # 如果参数不存在的化初始化b=0\n",[95,38927,38928,38931,38933],{"class":97,"line":16752},[95,38929,38930],{"class":105},"                    nn.init.constant_(m.bias,",[95,38932,297],{"class":154},[95,38934,112],{"class":105},[95,38936,38937],{"class":97,"line":16766},[95,38938,38939],{"class":164},"            # 全连接层初始化\n",[95,38941,38942,38945,38947],{"class":97,"line":16779},[95,38943,38944],{"class":101},"            elif",[95,38946,38873],{"class":154},[95,38948,38949],{"class":105},"(m,nn.Linear):\n",[95,38951,38952],{"class":97,"line":16784},[95,38953,38954],{"class":164},"                # 这个初始化方法是利用的是正太分布的方式\n",[95,38956,38957],{"class":97,"line":16798},[95,38958,38959],{"class":164},"                # 均值为0，方差为0.01\n",[95,38961,38962,38965,38967,38969,38972],{"class":97,"line":16803},[95,38963,38964],{"class":105},"                nn.init.normal_(m.weight,",[95,38966,297],{"class":154},[95,38968,484],{"class":105},[95,38970,38971],{"class":154},"0.01",[95,38973,112],{"class":105},[95,38975,38976],{"class":97,"line":16809},[95,38977,38978],{"class":164},"                # 初始化b参数\n",[95,38980,38981,38983,38985,38987,38989,38991],{"class":97,"line":16814},[95,38982,38906],{"class":101},[95,38984,38909],{"class":105},[95,38986,38912],{"class":101},[95,38988,38915],{"class":101},[95,38990,38918],{"class":154},[95,38992,3721],{"class":105},[95,38994,38995,38997,38999],{"class":97,"line":16828},[95,38996,38930],{"class":105},[95,38998,297],{"class":154},[95,39000,112],{"class":105},[95,39002,39003],{"class":97,"line":16833},[95,39004,2382],{"emptyLinePlaceholder":21},[95,39006,39007],{"class":97,"line":16838},[95,39008,35150],{"class":164},[95,39010,39011,39013,39015],{"class":97,"line":16852},[95,39012,30786],{"class":101},[95,39014,31078],{"class":1945},[95,39016,31081],{"class":105},[95,39018,39019,39021,39023,39025],{"class":97,"line":16864},[95,39020,31086],{"class":105},[95,39022,151],{"class":101},[95,39024,30808],{"class":154},[95,39026,39027],{"class":105},".block1(x)\n",[95,39029,39030,39032,39034,39036],{"class":97,"line":16869},[95,39031,31086],{"class":105},[95,39033,151],{"class":101},[95,39035,30808],{"class":154},[95,39037,39038],{"class":105},".block2(x)\n",[95,39040,39041,39043,39045,39047],{"class":97,"line":16882},[95,39042,31086],{"class":105},[95,39044,151],{"class":101},[95,39046,30808],{"class":154},[95,39048,39049],{"class":105},".block3(x)\n",[95,39051,39052,39054,39056,39058],{"class":97,"line":16887},[95,39053,31086],{"class":105},[95,39055,151],{"class":101},[95,39057,30808],{"class":154},[95,39059,39060],{"class":105},".block4(x)\n",[95,39062,39063,39065,39067,39069],{"class":97,"line":16892},[95,39064,31086],{"class":105},[95,39066,151],{"class":101},[95,39068,30808],{"class":154},[95,39070,39071],{"class":105},".block5(x)\n",[95,39073,39074,39076,39078,39080],{"class":97,"line":16897},[95,39075,31086],{"class":105},[95,39077,151],{"class":101},[95,39079,30808],{"class":154},[95,39081,39082],{"class":105},".block6(x)\n",[95,39084,39085,39087],{"class":97,"line":16910},[95,39086,14735],{"class":101},[95,39088,31194],{"class":105},[95,39090,39091],{"class":97,"line":16915},[95,39092,2382],{"emptyLinePlaceholder":21},[95,39094,39095],{"class":97,"line":32618},[95,39096,39097],{"class":164},"# 验证模型\n",[95,39099,39100,39102,39104,39106,39109],{"class":97,"line":32624},[95,39101,1513],{"class":101},[95,39103,31205],{"class":154},[95,39105,2931],{"class":101},[95,39107,39108],{"class":210},"'__main__'",[95,39110,3721],{"class":105},[95,39112,39113,39115,39117,39119,39121,39123,39125,39127,39129],{"class":97,"line":32630},[95,39114,31222],{"class":105},[95,39116,151],{"class":101},[95,39118,30436],{"class":105},[95,39120,31229],{"class":210},[95,39122,1686],{"class":101},[95,39124,31234],{"class":105},[95,39126,1683],{"class":101},[95,39128,30461],{"class":210},[95,39130,112],{"class":105},[95,39132,39133,39135],{"class":97,"line":32636},[95,39134,31284],{"class":154},[95,39136,30470],{"class":105},[95,39138,39139,39141,39143],{"class":97,"line":32642},[95,39140,31274],{"class":105},[95,39142,151],{"class":101},[95,39144,39145],{"class":105},"VGG16().to(device)\n",[95,39147,39148,39150,39152,39154,39156,39158,39160,39162],{"class":97,"line":32653},[95,39149,31284],{"class":154},[95,39151,31287],{"class":105},[95,39153,323],{"class":154},[95,39155,484],{"class":105},[95,39157,31486],{"class":154},[95,39159,484],{"class":105},[95,39161,31486],{"class":154},[95,39163,31300],{"class":105},[49,39165,39166],{"start":15},[52,39167,39168],{},"训练代码",[10,39170,39171],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[10,39173,39174],{},"解决方式:",[10,39176,39177],{},"①权重初始化",[86,39179,39181],{"className":30363,"code":39180,"language":30365,"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",[92,39182,39183,39188,39193,39205,39210,39218,39223,39236,39241,39255,39260,39269,39274,39283,39288,39293,39306,39311,39325],{"__ignoreMap":14},[95,39184,39185],{"class":97,"line":98},[95,39186,39187],{"class":164},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[95,39189,39190],{"class":97,"line":15},[95,39191,39192],{"class":164},"# 循环遍历模型\n",[95,39194,39195,39197,39199,39201,39203],{"class":97,"line":1161},[95,39196,3007],{"class":101},[95,39198,38853],{"class":105},[95,39200,26028],{"class":101},[95,39202,38858],{"class":154},[95,39204,38861],{"class":105},[95,39206,39207],{"class":97,"line":1176},[95,39208,39209],{"class":164},"    # print(m)\n",[95,39211,39212,39214,39216],{"class":97,"line":1182},[95,39213,3083],{"class":101},[95,39215,38873],{"class":154},[95,39217,38876],{"class":105},[95,39219,39220],{"class":97,"line":1196},[95,39221,39222],{"class":164},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[95,39224,39225,39228,39230,39232,39234],{"class":97,"line":1202},[95,39226,39227],{"class":105},"        nn.init.kaiming_normal_(m.weight,",[95,39229,38889],{"class":5199},[95,39231,151],{"class":101},[95,39233,38894],{"class":210},[95,39235,112],{"class":105},[95,39237,39238],{"class":97,"line":1293},[95,39239,39240],{"class":164},"        # 判断b参数是否存在\n",[95,39242,39243,39245,39247,39249,39251,39253],{"class":97,"line":1299},[95,39244,2479],{"class":101},[95,39246,38909],{"class":105},[95,39248,38912],{"class":101},[95,39250,38915],{"class":101},[95,39252,38918],{"class":154},[95,39254,3721],{"class":105},[95,39256,39257],{"class":97,"line":1311},[95,39258,39259],{"class":164},"            # 如果参数不存在的化初始化b=0\n",[95,39261,39262,39265,39267],{"class":97,"line":1594},[95,39263,39264],{"class":105},"            nn.init.constant_(m.bias,",[95,39266,297],{"class":154},[95,39268,112],{"class":105},[95,39270,39271],{"class":97,"line":1599},[95,39272,39273],{"class":164},"    # 全连接层初始化\n",[95,39275,39276,39279,39281],{"class":97,"line":1605},[95,39277,39278],{"class":101},"    elif",[95,39280,38873],{"class":154},[95,39282,38949],{"class":105},[95,39284,39285],{"class":97,"line":1610},[95,39286,39287],{"class":164},"        # 这个初始化方法是利用的是正太分布的方式\n",[95,39289,39290],{"class":97,"line":1624},[95,39291,39292],{"class":164},"        # 均值为0，方差为0.01\n",[95,39294,39295,39298,39300,39302,39304],{"class":97,"line":1629},[95,39296,39297],{"class":105},"        nn.init.normal_(m.weight,",[95,39299,297],{"class":154},[95,39301,484],{"class":105},[95,39303,38971],{"class":154},[95,39305,112],{"class":105},[95,39307,39308],{"class":97,"line":1635},[95,39309,39310],{"class":164},"        # 初始化b参数\n",[95,39312,39313,39315,39317,39319,39321,39323],{"class":97,"line":1656},[95,39314,2479],{"class":101},[95,39316,38909],{"class":105},[95,39318,38912],{"class":101},[95,39320,38915],{"class":101},[95,39322,38918],{"class":154},[95,39324,3721],{"class":105},[95,39326,39327,39329,39331],{"class":97,"line":1661},[95,39328,39264],{"class":105},[95,39330,297],{"class":154},[95,39332,112],{"class":105},[10,39334,39335],{},"②尽可能地增加批次",[10,39337,39338],{},"训练完整代码：",[86,39340,39341],{"className":30363,"code":37884,"language":30365,"meta":14,"style":14},[92,39342,39343,39349,39359,39369,39379,39383,39399,39407,39425,39429,39433,39443,39479,39483,39519,39523,39551,39555,39559,39569,39605,39609,39645,39649,39677,39681,39685,39695,39731,39735,39771,39775,39811,39815,39843,39847,39851,39861,39897,39901,39937,39941,39977,39981,40009,40013,40017,40027,40063,40067,40103,40107,40143,40147,40175,40179,40183,40193,40197,40201,40205,40225,40229,40241,40245,40257,40261,40265,40269,40273,40285,40289,40297,40301,40313,40317,40331,40335,40343,40347,40355,40359,40363,40375,40379,40393,40401,40405,40409,40417,40427,40437,40447,40457,40467,40477,40483,40487,40491,40503,40523,40529,40537],{"__ignoreMap":14},[95,39344,39345,39347],{"class":97,"line":98},[95,39346,30377],{"class":101},[95,39348,30380],{"class":105},[95,39350,39351,39353,39355,39357],{"class":97,"line":15},[95,39352,30722],{"class":101},[95,39354,37899],{"class":105},[95,39356,30377],{"class":101},[95,39358,37904],{"class":105},[95,39360,39361,39363,39365,39367],{"class":97,"line":1161},[95,39362,30722],{"class":101},[95,39364,30725],{"class":105},[95,39366,30377],{"class":101},[95,39368,30730],{"class":105},[95,39370,39371,39373,39375,39377],{"class":97,"line":1176},[95,39372,30722],{"class":101},[95,39374,30742],{"class":105},[95,39376,30377],{"class":101},[95,39378,30747],{"class":105},[95,39380,39381],{"class":97,"line":1182},[95,39382,2382],{"emptyLinePlaceholder":21},[95,39384,39385,39387,39389,39391,39393,39395,39397],{"class":97,"line":1196},[95,39386,14677],{"class":101},[95,39388,37935],{"class":1945},[95,39390,106],{"class":105},[95,39392,30763],{"class":1945},[95,39394,664],{"class":105},[95,39396,30768],{"class":1945},[95,39398,30771],{"class":105},[95,39400,39401,39403,39405],{"class":97,"line":1202},[95,39402,30786],{"class":101},[95,39404,30789],{"class":154},[95,39406,30792],{"class":105},[95,39408,39409,39411,39413,39415,39417,39419,39421,39423],{"class":97,"line":1293},[95,39410,30802],{"class":154},[95,39412,106],{"class":105},[95,39414,37962],{"class":154},[95,39416,12418],{"class":105},[95,39418,30808],{"class":154},[95,39420,30811],{"class":105},[95,39422,30814],{"class":154},[95,39424,1958],{"class":105},[95,39426,39427],{"class":97,"line":1299},[95,39428,37977],{"class":164},[95,39430,39431],{"class":97,"line":1311},[95,39432,37982],{"class":164},[95,39434,39435,39437,39439,39441],{"class":97,"line":1594},[95,39436,30830],{"class":154},[95,39438,37989],{"class":105},[95,39440,151],{"class":101},[95,39442,37994],{"class":105},[95,39444,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477],{"class":97,"line":1599},[95,39446,37999],{"class":105},[95,39448,30841],{"class":5199},[95,39450,151],{"class":101},[95,39452,323],{"class":154},[95,39454,484],{"class":105},[95,39456,30850],{"class":5199},[95,39458,151],{"class":101},[95,39460,309],{"class":154},[95,39462,484],{"class":105},[95,39464,30859],{"class":5199},[95,39466,151],{"class":101},[95,39468,177],{"class":154},[95,39470,484],{"class":105},[95,39472,30868],{"class":5199},[95,39474,151],{"class":101},[95,39476,323],{"class":154},[95,39478,38032],{"class":105},[95,39480,39481],{"class":97,"line":1605},[95,39482,38037],{"class":105},[95,39484,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517],{"class":97,"line":1610},[95,39486,37999],{"class":105},[95,39488,30841],{"class":5199},[95,39490,151],{"class":101},[95,39492,309],{"class":154},[95,39494,484],{"class":105},[95,39496,30850],{"class":5199},[95,39498,151],{"class":101},[95,39500,309],{"class":154},[95,39502,484],{"class":105},[95,39504,30859],{"class":5199},[95,39506,151],{"class":101},[95,39508,177],{"class":154},[95,39510,484],{"class":105},[95,39512,30868],{"class":5199},[95,39514,151],{"class":101},[95,39516,323],{"class":154},[95,39518,38032],{"class":105},[95,39520,39521],{"class":97,"line":1624},[95,39522,38037],{"class":105},[95,39524,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549],{"class":97,"line":1629},[95,39526,38082],{"class":105},[95,39528,30859],{"class":5199},[95,39530,151],{"class":101},[95,39532,183],{"class":154},[95,39534,484],{"class":105},[95,39536,30914],{"class":5199},[95,39538,151],{"class":101},[95,39540,183],{"class":154},[95,39542,484],{"class":105},[95,39544,30868],{"class":5199},[95,39546,151],{"class":101},[95,39548,297],{"class":154},[95,39550,112],{"class":105},[95,39552,39553],{"class":97,"line":1635},[95,39554,38111],{"class":105},[95,39556,39557],{"class":97,"line":1656},[95,39558,38116],{"class":164},[95,39560,39561,39563,39565,39567],{"class":97,"line":1661},[95,39562,30830],{"class":154},[95,39564,38123],{"class":105},[95,39566,151],{"class":101},[95,39568,37994],{"class":105},[95,39570,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603],{"class":97,"line":1675},[95,39572,37999],{"class":105},[95,39574,30841],{"class":5199},[95,39576,151],{"class":101},[95,39578,309],{"class":154},[95,39580,484],{"class":105},[95,39582,30850],{"class":5199},[95,39584,151],{"class":101},[95,39586,32055],{"class":154},[95,39588,484],{"class":105},[95,39590,30859],{"class":5199},[95,39592,151],{"class":101},[95,39594,177],{"class":154},[95,39596,484],{"class":105},[95,39598,30868],{"class":5199},[95,39600,151],{"class":101},[95,39602,323],{"class":154},[95,39604,38032],{"class":105},[95,39606,39607],{"class":97,"line":1680},[95,39608,38037],{"class":105},[95,39610,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643],{"class":97,"line":1709},[95,39612,37999],{"class":105},[95,39614,30841],{"class":5199},[95,39616,151],{"class":101},[95,39618,32055],{"class":154},[95,39620,484],{"class":105},[95,39622,30850],{"class":5199},[95,39624,151],{"class":101},[95,39626,32055],{"class":154},[95,39628,484],{"class":105},[95,39630,30859],{"class":5199},[95,39632,151],{"class":101},[95,39634,177],{"class":154},[95,39636,484],{"class":105},[95,39638,30868],{"class":5199},[95,39640,151],{"class":101},[95,39642,323],{"class":154},[95,39644,38032],{"class":105},[95,39646,39647],{"class":97,"line":1714},[95,39648,38037],{"class":105},[95,39650,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675],{"class":97,"line":1731},[95,39652,38082],{"class":105},[95,39654,30859],{"class":5199},[95,39656,151],{"class":101},[95,39658,183],{"class":154},[95,39660,484],{"class":105},[95,39662,30914],{"class":5199},[95,39664,151],{"class":101},[95,39666,183],{"class":154},[95,39668,484],{"class":105},[95,39670,30868],{"class":5199},[95,39672,151],{"class":101},[95,39674,297],{"class":154},[95,39676,112],{"class":105},[95,39678,39679],{"class":97,"line":1736},[95,39680,38111],{"class":105},[95,39682,39683],{"class":97,"line":1741},[95,39684,38244],{"class":164},[95,39686,39687,39689,39691,39693],{"class":97,"line":1746},[95,39688,30830],{"class":154},[95,39690,38251],{"class":105},[95,39692,151],{"class":101},[95,39694,37994],{"class":105},[95,39696,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729],{"class":97,"line":1760},[95,39698,37999],{"class":105},[95,39700,30841],{"class":5199},[95,39702,151],{"class":101},[95,39704,32055],{"class":154},[95,39706,484],{"class":105},[95,39708,30850],{"class":5199},[95,39710,151],{"class":101},[95,39712,34855],{"class":154},[95,39714,484],{"class":105},[95,39716,30859],{"class":5199},[95,39718,151],{"class":101},[95,39720,177],{"class":154},[95,39722,484],{"class":105},[95,39724,30868],{"class":5199},[95,39726,151],{"class":101},[95,39728,323],{"class":154},[95,39730,38032],{"class":105},[95,39732,39733],{"class":97,"line":1765},[95,39734,38037],{"class":105},[95,39736,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769],{"class":97,"line":2559},[95,39738,37999],{"class":105},[95,39740,30841],{"class":5199},[95,39742,151],{"class":101},[95,39744,34855],{"class":154},[95,39746,484],{"class":105},[95,39748,30850],{"class":5199},[95,39750,151],{"class":101},[95,39752,34855],{"class":154},[95,39754,484],{"class":105},[95,39756,30859],{"class":5199},[95,39758,151],{"class":101},[95,39760,177],{"class":154},[95,39762,484],{"class":105},[95,39764,30868],{"class":5199},[95,39766,151],{"class":101},[95,39768,323],{"class":154},[95,39770,38032],{"class":105},[95,39772,39773],{"class":97,"line":2573},[95,39774,38037],{"class":105},[95,39776,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809],{"class":97,"line":2581},[95,39778,37999],{"class":105},[95,39780,30841],{"class":5199},[95,39782,151],{"class":101},[95,39784,34855],{"class":154},[95,39786,484],{"class":105},[95,39788,30850],{"class":5199},[95,39790,151],{"class":101},[95,39792,34855],{"class":154},[95,39794,484],{"class":105},[95,39796,30859],{"class":5199},[95,39798,151],{"class":101},[95,39800,177],{"class":154},[95,39802,484],{"class":105},[95,39804,30868],{"class":5199},[95,39806,151],{"class":101},[95,39808,323],{"class":154},[95,39810,38032],{"class":105},[95,39812,39813],{"class":97,"line":2586},[95,39814,38037],{"class":105},[95,39816,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841],{"class":97,"line":2592},[95,39818,38082],{"class":105},[95,39820,30859],{"class":5199},[95,39822,151],{"class":101},[95,39824,183],{"class":154},[95,39826,484],{"class":105},[95,39828,30914],{"class":5199},[95,39830,151],{"class":101},[95,39832,183],{"class":154},[95,39834,484],{"class":105},[95,39836,30868],{"class":5199},[95,39838,151],{"class":101},[95,39840,297],{"class":154},[95,39842,112],{"class":105},[95,39844,39845],{"class":97,"line":2598},[95,39846,38111],{"class":105},[95,39848,39849],{"class":97,"line":2603},[95,39850,38412],{"class":164},[95,39852,39853,39855,39857,39859],{"class":97,"line":7931},[95,39854,30830],{"class":154},[95,39856,38419],{"class":105},[95,39858,151],{"class":101},[95,39860,37994],{"class":105},[95,39862,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895],{"class":97,"line":7955},[95,39864,37999],{"class":105},[95,39866,30841],{"class":5199},[95,39868,151],{"class":101},[95,39870,34855],{"class":154},[95,39872,484],{"class":105},[95,39874,30850],{"class":5199},[95,39876,151],{"class":101},[95,39878,38442],{"class":154},[95,39880,484],{"class":105},[95,39882,30859],{"class":5199},[95,39884,151],{"class":101},[95,39886,177],{"class":154},[95,39888,484],{"class":105},[95,39890,30868],{"class":5199},[95,39892,151],{"class":101},[95,39894,323],{"class":154},[95,39896,38032],{"class":105},[95,39898,39899],{"class":97,"line":7960},[95,39900,38037],{"class":105},[95,39902,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935],{"class":97,"line":7966},[95,39904,37999],{"class":105},[95,39906,30841],{"class":5199},[95,39908,151],{"class":101},[95,39910,38442],{"class":154},[95,39912,484],{"class":105},[95,39914,30850],{"class":5199},[95,39916,151],{"class":101},[95,39918,38442],{"class":154},[95,39920,484],{"class":105},[95,39922,30859],{"class":5199},[95,39924,151],{"class":101},[95,39926,177],{"class":154},[95,39928,484],{"class":105},[95,39930,30868],{"class":5199},[95,39932,151],{"class":101},[95,39934,323],{"class":154},[95,39936,38032],{"class":105},[95,39938,39939],{"class":97,"line":7993},[95,39940,38037],{"class":105},[95,39942,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975],{"class":97,"line":7998},[95,39944,37999],{"class":105},[95,39946,30841],{"class":5199},[95,39948,151],{"class":101},[95,39950,38442],{"class":154},[95,39952,484],{"class":105},[95,39954,30850],{"class":5199},[95,39956,151],{"class":101},[95,39958,38442],{"class":154},[95,39960,484],{"class":105},[95,39962,30859],{"class":5199},[95,39964,151],{"class":101},[95,39966,177],{"class":154},[95,39968,484],{"class":105},[95,39970,30868],{"class":5199},[95,39972,151],{"class":101},[95,39974,323],{"class":154},[95,39976,38032],{"class":105},[95,39978,39979],{"class":97,"line":8004},[95,39980,38037],{"class":105},[95,39982,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007],{"class":97,"line":8016},[95,39984,38082],{"class":105},[95,39986,30859],{"class":5199},[95,39988,151],{"class":101},[95,39990,183],{"class":154},[95,39992,484],{"class":105},[95,39994,30914],{"class":5199},[95,39996,151],{"class":101},[95,39998,183],{"class":154},[95,40000,484],{"class":105},[95,40002,30868],{"class":5199},[95,40004,151],{"class":101},[95,40006,297],{"class":154},[95,40008,112],{"class":105},[95,40010,40011],{"class":97,"line":8028},[95,40012,38111],{"class":105},[95,40014,40015],{"class":97,"line":8040},[95,40016,38581],{"class":164},[95,40018,40019,40021,40023,40025],{"class":97,"line":9699},[95,40020,30830],{"class":154},[95,40022,38588],{"class":105},[95,40024,151],{"class":101},[95,40026,37994],{"class":105},[95,40028,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061],{"class":97,"line":9724},[95,40030,37999],{"class":105},[95,40032,30841],{"class":5199},[95,40034,151],{"class":101},[95,40036,38442],{"class":154},[95,40038,484],{"class":105},[95,40040,30850],{"class":5199},[95,40042,151],{"class":101},[95,40044,38442],{"class":154},[95,40046,484],{"class":105},[95,40048,30859],{"class":5199},[95,40050,151],{"class":101},[95,40052,177],{"class":154},[95,40054,484],{"class":105},[95,40056,30868],{"class":5199},[95,40058,151],{"class":101},[95,40060,323],{"class":154},[95,40062,38032],{"class":105},[95,40064,40065],{"class":97,"line":9747},[95,40066,38037],{"class":105},[95,40068,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101],{"class":97,"line":9771},[95,40070,37999],{"class":105},[95,40072,30841],{"class":5199},[95,40074,151],{"class":101},[95,40076,38442],{"class":154},[95,40078,484],{"class":105},[95,40080,30850],{"class":5199},[95,40082,151],{"class":101},[95,40084,38442],{"class":154},[95,40086,484],{"class":105},[95,40088,30859],{"class":5199},[95,40090,151],{"class":101},[95,40092,177],{"class":154},[95,40094,484],{"class":105},[95,40096,30868],{"class":5199},[95,40098,151],{"class":101},[95,40100,323],{"class":154},[95,40102,38032],{"class":105},[95,40104,40105],{"class":97,"line":9776},[95,40106,38037],{"class":105},[95,40108,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141],{"class":97,"line":9781},[95,40110,37999],{"class":105},[95,40112,30841],{"class":5199},[95,40114,151],{"class":101},[95,40116,38442],{"class":154},[95,40118,484],{"class":105},[95,40120,30850],{"class":5199},[95,40122,151],{"class":101},[95,40124,38442],{"class":154},[95,40126,484],{"class":105},[95,40128,30859],{"class":5199},[95,40130,151],{"class":101},[95,40132,177],{"class":154},[95,40134,484],{"class":105},[95,40136,30868],{"class":5199},[95,40138,151],{"class":101},[95,40140,323],{"class":154},[95,40142,38032],{"class":105},[95,40144,40145],{"class":97,"line":9786},[95,40146,38037],{"class":105},[95,40148,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173],{"class":97,"line":9795},[95,40150,38082],{"class":105},[95,40152,30859],{"class":5199},[95,40154,151],{"class":101},[95,40156,183],{"class":154},[95,40158,484],{"class":105},[95,40160,30914],{"class":5199},[95,40162,151],{"class":101},[95,40164,183],{"class":154},[95,40166,484],{"class":105},[95,40168,30868],{"class":5199},[95,40170,151],{"class":101},[95,40172,297],{"class":154},[95,40174,112],{"class":105},[95,40176,40177],{"class":97,"line":9800},[95,40178,38111],{"class":105},[95,40180,40181],{"class":97,"line":9806},[95,40182,38749],{"class":164},[95,40184,40185,40187,40189,40191],{"class":97,"line":9827},[95,40186,30830],{"class":154},[95,40188,38756],{"class":105},[95,40190,151],{"class":101},[95,40192,37994],{"class":105},[95,40194,40195],{"class":97,"line":9833},[95,40196,38765],{"class":164},[95,40198,40199],{"class":97,"line":9847},[95,40200,38770],{"class":164},[95,40202,40203],{"class":97,"line":9853},[95,40204,38775],{"class":105},[95,40206,40207,40209,40211,40213,40215,40217,40219,40221,40223],{"class":97,"line":9880},[95,40208,38780],{"class":105},[95,40210,475],{"class":154},[95,40212,561],{"class":101},[95,40214,475],{"class":154},[95,40216,561],{"class":101},[95,40218,38442],{"class":154},[95,40220,484],{"class":105},[95,40222,34855],{"class":154},[95,40224,38032],{"class":105},[95,40226,40227],{"class":97,"line":9889},[95,40228,38037],{"class":105},[95,40230,40231,40233,40235,40237,40239],{"class":97,"line":9895},[95,40232,38780],{"class":105},[95,40234,34855],{"class":154},[95,40236,484],{"class":105},[95,40238,32055],{"class":154},[95,40240,38032],{"class":105},[95,40242,40243],{"class":97,"line":9903},[95,40244,38037],{"class":105},[95,40246,40247,40249,40251,40253,40255],{"class":97,"line":9908},[95,40248,38780],{"class":105},[95,40250,32055],{"class":154},[95,40252,484],{"class":105},[95,40254,552],{"class":154},[95,40256,112],{"class":105},[95,40258,40259],{"class":97,"line":16587},[95,40260,38111],{"class":105},[95,40262,40263],{"class":97,"line":16593},[95,40264,2382],{"emptyLinePlaceholder":21},[95,40266,40267],{"class":97,"line":16616},[95,40268,38841],{"class":164},[95,40270,40271],{"class":97,"line":16622},[95,40272,38846],{"class":164},[95,40274,40275,40277,40279,40281,40283],{"class":97,"line":16645},[95,40276,3385],{"class":101},[95,40278,38853],{"class":105},[95,40280,26028],{"class":101},[95,40282,38858],{"class":154},[95,40284,38861],{"class":105},[95,40286,40287],{"class":97,"line":16659},[95,40288,38866],{"class":164},[95,40290,40291,40293,40295],{"class":97,"line":16679},[95,40292,4624],{"class":101},[95,40294,38873],{"class":154},[95,40296,38876],{"class":105},[95,40298,40299],{"class":97,"line":16685},[95,40300,38881],{"class":164},[95,40302,40303,40305,40307,40309,40311],{"class":97,"line":16696},[95,40304,38886],{"class":105},[95,40306,38889],{"class":5199},[95,40308,151],{"class":101},[95,40310,38894],{"class":210},[95,40312,112],{"class":105},[95,40314,40315],{"class":97,"line":16719},[95,40316,38901],{"class":164},[95,40318,40319,40321,40323,40325,40327,40329],{"class":97,"line":16741},[95,40320,38906],{"class":101},[95,40322,38909],{"class":105},[95,40324,38912],{"class":101},[95,40326,38915],{"class":101},[95,40328,38918],{"class":154},[95,40330,3721],{"class":105},[95,40332,40333],{"class":97,"line":16746},[95,40334,38925],{"class":164},[95,40336,40337,40339,40341],{"class":97,"line":16752},[95,40338,38930],{"class":105},[95,40340,297],{"class":154},[95,40342,112],{"class":105},[95,40344,40345],{"class":97,"line":16766},[95,40346,38939],{"class":164},[95,40348,40349,40351,40353],{"class":97,"line":16779},[95,40350,38944],{"class":101},[95,40352,38873],{"class":154},[95,40354,38949],{"class":105},[95,40356,40357],{"class":97,"line":16784},[95,40358,38954],{"class":164},[95,40360,40361],{"class":97,"line":16798},[95,40362,38959],{"class":164},[95,40364,40365,40367,40369,40371,40373],{"class":97,"line":16803},[95,40366,38964],{"class":105},[95,40368,297],{"class":154},[95,40370,484],{"class":105},[95,40372,38971],{"class":154},[95,40374,112],{"class":105},[95,40376,40377],{"class":97,"line":16809},[95,40378,38978],{"class":164},[95,40380,40381,40383,40385,40387,40389,40391],{"class":97,"line":16814},[95,40382,38906],{"class":101},[95,40384,38909],{"class":105},[95,40386,38912],{"class":101},[95,40388,38915],{"class":101},[95,40390,38918],{"class":154},[95,40392,3721],{"class":105},[95,40394,40395,40397,40399],{"class":97,"line":16828},[95,40396,38930],{"class":105},[95,40398,297],{"class":154},[95,40400,112],{"class":105},[95,40402,40403],{"class":97,"line":16833},[95,40404,2382],{"emptyLinePlaceholder":21},[95,40406,40407],{"class":97,"line":16838},[95,40408,35150],{"class":164},[95,40410,40411,40413,40415],{"class":97,"line":16852},[95,40412,30786],{"class":101},[95,40414,31078],{"class":1945},[95,40416,31081],{"class":105},[95,40418,40419,40421,40423,40425],{"class":97,"line":16864},[95,40420,31086],{"class":105},[95,40422,151],{"class":101},[95,40424,30808],{"class":154},[95,40426,39027],{"class":105},[95,40428,40429,40431,40433,40435],{"class":97,"line":16869},[95,40430,31086],{"class":105},[95,40432,151],{"class":101},[95,40434,30808],{"class":154},[95,40436,39038],{"class":105},[95,40438,40439,40441,40443,40445],{"class":97,"line":16882},[95,40440,31086],{"class":105},[95,40442,151],{"class":101},[95,40444,30808],{"class":154},[95,40446,39049],{"class":105},[95,40448,40449,40451,40453,40455],{"class":97,"line":16887},[95,40450,31086],{"class":105},[95,40452,151],{"class":101},[95,40454,30808],{"class":154},[95,40456,39060],{"class":105},[95,40458,40459,40461,40463,40465],{"class":97,"line":16892},[95,40460,31086],{"class":105},[95,40462,151],{"class":101},[95,40464,30808],{"class":154},[95,40466,39071],{"class":105},[95,40468,40469,40471,40473,40475],{"class":97,"line":16897},[95,40470,31086],{"class":105},[95,40472,151],{"class":101},[95,40474,30808],{"class":154},[95,40476,39082],{"class":105},[95,40478,40479,40481],{"class":97,"line":16910},[95,40480,14735],{"class":101},[95,40482,31194],{"class":105},[95,40484,40485],{"class":97,"line":16915},[95,40486,2382],{"emptyLinePlaceholder":21},[95,40488,40489],{"class":97,"line":32618},[95,40490,39097],{"class":164},[95,40492,40493,40495,40497,40499,40501],{"class":97,"line":32624},[95,40494,1513],{"class":101},[95,40496,31205],{"class":154},[95,40498,2931],{"class":101},[95,40500,39108],{"class":210},[95,40502,3721],{"class":105},[95,40504,40505,40507,40509,40511,40513,40515,40517,40519,40521],{"class":97,"line":32630},[95,40506,31222],{"class":105},[95,40508,151],{"class":101},[95,40510,30436],{"class":105},[95,40512,31229],{"class":210},[95,40514,1686],{"class":101},[95,40516,31234],{"class":105},[95,40518,1683],{"class":101},[95,40520,30461],{"class":210},[95,40522,112],{"class":105},[95,40524,40525,40527],{"class":97,"line":32636},[95,40526,31284],{"class":154},[95,40528,30470],{"class":105},[95,40530,40531,40533,40535],{"class":97,"line":32642},[95,40532,31274],{"class":105},[95,40534,151],{"class":101},[95,40536,39145],{"class":105},[95,40538,40539,40541,40543,40545,40547,40549,40551,40553],{"class":97,"line":32653},[95,40540,31284],{"class":154},[95,40542,31287],{"class":105},[95,40544,323],{"class":154},[95,40546,484],{"class":105},[95,40548,31486],{"class":154},[95,40550,484],{"class":105},[95,40552,31486],{"class":154},[95,40554,31300],{"class":105},[49,40556,40557],{"start":1161},[52,40558,40559],{},"测试代码",[86,40561,40563],{"className":30363,"code":40562,"language":30365,"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",[92,40564,40565,40571,40581,40591,40595,40605,40616,40620,40624,40628,40636,40652,40662,40678,40688,40702,40706,40716,40726,40736,40742,40746,40750,40758,40762,40778,40786,40790,40794,40802,40810,40814,40818,40822,40826,40832,40836,40846,40854,40862,40866,40870,40874,40882,40886,40902,40906,40910,40914,40926,40930,40942,40946,40950,40962,40966,40976,40980,40984,40996,41000,41009,41013,41017,41025,41029,41037,41041,41045,41049,41053,41057,41073,41081,41085,41089,41137,41143,41147,41157,41165,41173,41177,41181,41185,41189,41197,41201,41217,41221,41229,41237],{"__ignoreMap":14},[95,40566,40567,40569],{"class":97,"line":98},[95,40568,30377],{"class":101},[95,40570,30380],{"class":105},[95,40572,40573,40575,40577,40579],{"class":97,"line":15},[95,40574,30377],{"class":101},[95,40576,31400],{"class":105},[95,40578,31368],{"class":101},[95,40580,31405],{"class":105},[95,40582,40583,40585,40587,40589],{"class":97,"line":1161},[95,40584,30722],{"class":101},[95,40586,31383],{"class":105},[95,40588,30377],{"class":101},[95,40590,31388],{"class":105},[95,40592,40593],{"class":97,"line":1176},[95,40594,33907],{"class":164},[95,40596,40597,40599,40601,40603],{"class":97,"line":1182},[95,40598,30722],{"class":101},[95,40600,31353],{"class":105},[95,40602,30377],{"class":101},[95,40604,31358],{"class":105},[95,40606,40607,40609,40611,40613],{"class":97,"line":1196},[95,40608,30722],{"class":101},[95,40610,31899],{"class":105},[95,40612,30377],{"class":101},[95,40614,40615],{"class":154}," VGG16\n",[95,40617,40618],{"class":97,"line":1202},[95,40619,2382],{"emptyLinePlaceholder":21},[95,40621,40622],{"class":97,"line":1293},[95,40623,2382],{"emptyLinePlaceholder":21},[95,40625,40626],{"class":97,"line":1299},[95,40627,33936],{"class":164},[95,40629,40630,40632,40634],{"class":97,"line":1311},[95,40631,31932],{"class":101},[95,40633,33943],{"class":1945},[95,40635,31938],{"class":105},[95,40637,40638,40640,40642,40644,40646,40648,40650],{"class":97,"line":1594},[95,40639,33950],{"class":105},[95,40641,151],{"class":101},[95,40643,31440],{"class":105},[95,40645,31443],{"class":5199},[95,40647,151],{"class":101},[95,40649,31448],{"class":210},[95,40651,31451],{"class":105},[95,40653,40654,40656,40658,40660],{"class":97,"line":1599},[95,40655,33967],{"class":5199},[95,40657,151],{"class":101},[95,40659,33972],{"class":154},[95,40661,31451],{"class":105},[95,40663,40664,40666,40668,40670,40672,40674,40676],{"class":97,"line":1605},[95,40665,33979],{"class":5199},[95,40667,151],{"class":101},[95,40669,31478],{"class":105},[95,40671,31481],{"class":5199},[95,40673,151],{"class":101},[95,40675,31486],{"class":154},[95,40677,31489],{"class":105},[95,40679,40680,40682,40684,40686],{"class":97,"line":1610},[95,40681,33996],{"class":5199},[95,40683,151],{"class":101},[95,40685,31461],{"class":154},[95,40687,112],{"class":105},[95,40689,40690,40692,40694,40696,40698,40700],{"class":97,"line":1624},[95,40691,34007],{"class":105},[95,40693,151],{"class":101},[95,40695,31519],{"class":105},[95,40697,31522],{"class":5199},[95,40699,151],{"class":101},[95,40701,34018],{"class":105},[95,40703,40704],{"class":97,"line":1629},[95,40705,34023],{"class":164},[95,40707,40708,40710,40712,40714],{"class":97,"line":1635},[95,40709,34028],{"class":5199},[95,40711,151],{"class":101},[95,40713,323],{"class":154},[95,40715,31451],{"class":105},[95,40717,40718,40720,40722,40724],{"class":97,"line":1656},[95,40719,34039],{"class":5199},[95,40721,151],{"class":101},[95,40723,31461],{"class":154},[95,40725,31451],{"class":105},[95,40727,40728,40730,40732,40734],{"class":97,"line":1661},[95,40729,34050],{"class":5199},[95,40731,151],{"class":101},[95,40733,297],{"class":154},[95,40735,112],{"class":105},[95,40737,40738,40740],{"class":97,"line":1675},[95,40739,4072],{"class":101},[95,40741,34063],{"class":105},[95,40743,40744],{"class":97,"line":1680},[95,40745,2382],{"emptyLinePlaceholder":21},[95,40747,40748],{"class":97,"line":1709},[95,40749,34072],{"class":164},[95,40751,40752,40754,40756],{"class":97,"line":1714},[95,40753,31932],{"class":101},[95,40755,34079],{"class":1945},[95,40757,34082],{"class":105},[95,40759,40760],{"class":97,"line":1731},[95,40761,34087],{"class":164},[95,40763,40764,40766,40768,40770,40772,40774,40776],{"class":97,"line":1736},[95,40765,31222],{"class":105},[95,40767,151],{"class":101},[95,40769,31229],{"class":210},[95,40771,1686],{"class":101},[95,40773,31234],{"class":105},[95,40775,1683],{"class":101},[95,40777,34104],{"class":210},[95,40779,40780,40782,40784],{"class":97,"line":1741},[95,40781,31274],{"class":105},[95,40783,151],{"class":101},[95,40785,32274],{"class":105},[95,40787,40788],{"class":97,"line":1746},[95,40789,2382],{"emptyLinePlaceholder":21},[95,40791,40792],{"class":97,"line":1760},[95,40793,34121],{"class":164},[95,40795,40796,40798,40800],{"class":97,"line":1765},[95,40797,34126],{"class":105},[95,40799,151],{"class":101},[95,40801,32327],{"class":154},[95,40803,40804,40806,40808],{"class":97,"line":2559},[95,40805,34135],{"class":105},[95,40807,151],{"class":101},[95,40809,3067],{"class":154},[95,40811,40812],{"class":97,"line":2573},[95,40813,2382],{"emptyLinePlaceholder":21},[95,40815,40816],{"class":97,"line":2581},[95,40817,34148],{"class":164},[95,40819,40820],{"class":97,"line":2586},[95,40821,34153],{"class":164},[95,40823,40824],{"class":97,"line":2592},[95,40825,34158],{"class":164},[95,40827,40828,40830],{"class":97,"line":2598},[95,40829,34163],{"class":101},[95,40831,32869],{"class":105},[95,40833,40834],{"class":97,"line":2603},[95,40835,34170],{"class":164},[95,40837,40838,40840,40842,40844],{"class":97,"line":7931},[95,40839,3385],{"class":101},[95,40841,34177],{"class":105},[95,40843,26028],{"class":101},[95,40845,34182],{"class":105},[95,40847,40848,40850,40852],{"class":97,"line":7955},[95,40849,34187],{"class":105},[95,40851,151],{"class":101},[95,40853,34192],{"class":105},[95,40855,40856,40858,40860],{"class":97,"line":7960},[95,40857,34197],{"class":105},[95,40859,151],{"class":101},[95,40861,34202],{"class":105},[95,40863,40864],{"class":97,"line":7966},[95,40865,34207],{"class":164},[95,40867,40868],{"class":97,"line":7993},[95,40869,32860],{"class":105},[95,40871,40872],{"class":97,"line":7998},[95,40873,34216],{"class":164},[95,40875,40876,40878,40880],{"class":97,"line":8004},[95,40877,32645],{"class":105},[95,40879,151],{"class":101},[95,40881,34225],{"class":105},[95,40883,40884],{"class":97,"line":8016},[95,40885,34230],{"class":164},[95,40887,40888,40890,40892,40894,40896,40898,40900],{"class":97,"line":8028},[95,40889,32662],{"class":105},[95,40891,151],{"class":101},[95,40893,32667],{"class":105},[95,40895,32670],{"class":5199},[95,40897,151],{"class":101},[95,40899,323],{"class":154},[95,40901,112],{"class":105},[95,40903,40904],{"class":97,"line":8040},[95,40905,34251],{"class":164},[95,40907,40908],{"class":97,"line":9699},[95,40909,34256],{"class":164},[95,40911,40912],{"class":97,"line":9724},[95,40913,34261],{"class":164},[95,40915,40916,40918,40920,40922,40924],{"class":97,"line":9747},[95,40917,34266],{"class":105},[95,40919,9460],{"class":101},[95,40921,32772],{"class":105},[95,40923,2931],{"class":101},[95,40925,34275],{"class":105},[95,40927,40928],{"class":97,"line":9771},[95,40929,34280],{"class":164},[95,40931,40932,40934,40936,40938,40940],{"class":97,"line":9776},[95,40933,34285],{"class":105},[95,40935,9460],{"class":101},[95,40937,34290],{"class":105},[95,40939,297],{"class":154},[95,40941,112],{"class":105},[95,40943,40944],{"class":97,"line":9781},[95,40945,2382],{"emptyLinePlaceholder":21},[95,40947,40948],{"class":97,"line":9786},[95,40949,34303],{"class":164},[95,40951,40952,40954,40956,40958,40960],{"class":97,"line":9795},[95,40953,34308],{"class":105},[95,40955,151],{"class":101},[95,40957,34313],{"class":105},[95,40959,690],{"class":101},[95,40961,34318],{"class":105},[95,40963,40964],{"class":97,"line":9800},[95,40965,34323],{"class":164},[95,40967,40968,40970,40972,40974],{"class":97,"line":9806},[95,40969,32436],{"class":154},[95,40971,106],{"class":105},[95,40973,34332],{"class":210},[95,40975,34335],{"class":105},[95,40977,40978],{"class":97,"line":9827},[95,40979,2382],{"emptyLinePlaceholder":21},[95,40981,40982],{"class":97,"line":9833},[95,40983,34344],{"class":164},[95,40985,40986,40988,40990,40992,40994],{"class":97,"line":9847},[95,40987,1513],{"class":101},[95,40989,31205],{"class":154},[95,40991,2931],{"class":101},[95,40993,31210],{"class":210},[95,40995,3721],{"class":105},[95,40997,40998],{"class":97,"line":9853},[95,40999,34361],{"class":164},[95,41001,41002,41004,41006],{"class":97,"line":9880},[95,41003,31274],{"class":105},[95,41005,151],{"class":101},[95,41007,41008],{"class":105},"VGG16()\n",[95,41010,41011],{"class":97,"line":9889},[95,41012,34374],{"class":164},[95,41014,41015],{"class":97,"line":9895},[95,41016,34379],{"class":164},[95,41018,41019,41021,41023],{"class":97,"line":9903},[95,41020,34384],{"class":105},[95,41022,34387],{"class":210},[95,41024,30482],{"class":105},[95,41026,41027],{"class":97,"line":9908},[95,41028,34394],{"class":164},[95,41030,41031,41033,41035],{"class":97,"line":16587},[95,41032,34007],{"class":105},[95,41034,151],{"class":101},[95,41036,34403],{"class":105},[95,41038,41039],{"class":97,"line":16593},[95,41040,34408],{"class":164},[95,41042,41043],{"class":97,"line":16616},[95,41044,34413],{"class":105},[95,41046,41047],{"class":97,"line":16622},[95,41048,2382],{"emptyLinePlaceholder":21},[95,41050,41051],{"class":97,"line":16645},[95,41052,34422],{"class":164},[95,41054,41055],{"class":97,"line":16659},[95,41056,34427],{"class":164},[95,41058,41059,41061,41063,41065,41067,41069,41071],{"class":97,"line":16679},[95,41060,31222],{"class":105},[95,41062,151],{"class":101},[95,41064,31229],{"class":210},[95,41066,1686],{"class":101},[95,41068,31234],{"class":105},[95,41070,1683],{"class":101},[95,41072,34104],{"class":210},[95,41074,41075,41077,41079],{"class":97,"line":16685},[95,41076,31274],{"class":105},[95,41078,151],{"class":101},[95,41080,32274],{"class":105},[95,41082,41083],{"class":97,"line":16696},[95,41084,34456],{"class":164},[95,41086,41087],{"class":97,"line":16719},[95,41088,34461],{"class":164},[95,41090,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135],{"class":97,"line":16741},[95,41092,34466],{"class":105},[95,41094,151],{"class":101},[95,41096,996],{"class":105},[95,41098,34473],{"class":210},[95,41100,484],{"class":105},[95,41102,34478],{"class":210},[95,41104,484],{"class":105},[95,41106,34483],{"class":210},[95,41108,484],{"class":105},[95,41110,34488],{"class":210},[95,41112,484],{"class":105},[95,41114,34493],{"class":210},[95,41116,484],{"class":105},[95,41118,34498],{"class":210},[95,41120,484],{"class":105},[95,41122,34503],{"class":210},[95,41124,484],{"class":105},[95,41126,34508],{"class":210},[95,41128,484],{"class":105},[95,41130,34513],{"class":210},[95,41132,484],{"class":105},[95,41134,34518],{"class":210},[95,41136,33231],{"class":105},[95,41138,41139,41141],{"class":97,"line":16746},[95,41140,34163],{"class":101},[95,41142,32869],{"class":105},[95,41144,41145],{"class":97,"line":16752},[95,41146,34531],{"class":164},[95,41148,41149,41151,41153,41155],{"class":97,"line":16766},[95,41150,3385],{"class":101},[95,41152,34538],{"class":105},[95,41154,26028],{"class":101},[95,41156,34182],{"class":105},[95,41158,41159,41161,41163],{"class":97,"line":16779},[95,41160,32595],{"class":105},[95,41162,151],{"class":101},[95,41164,32600],{"class":105},[95,41166,41167,41169,41171],{"class":97,"line":16784},[95,41168,32610],{"class":105},[95,41170,151],{"class":101},[95,41172,32615],{"class":105},[95,41174,41175],{"class":97,"line":16798},[95,41176,2382],{"emptyLinePlaceholder":21},[95,41178,41179],{"class":97,"line":16803},[95,41180,34567],{"class":164},[95,41182,41183],{"class":97,"line":16809},[95,41184,32860],{"class":105},[95,41186,41187],{"class":97,"line":16814},[95,41188,34576],{"class":164},[95,41190,41191,41193,41195],{"class":97,"line":16828},[95,41192,32645],{"class":105},[95,41194,151],{"class":101},[95,41196,32650],{"class":105},[95,41198,41199],{"class":97,"line":16833},[95,41200,34589],{"class":164},[95,41202,41203,41205,41207,41209,41211,41213,41215],{"class":97,"line":16838},[95,41204,32662],{"class":105},[95,41206,151],{"class":101},[95,41208,32667],{"class":105},[95,41210,32670],{"class":5199},[95,41212,151],{"class":101},[95,41214,323],{"class":154},[95,41216,112],{"class":105},[95,41218,41219],{"class":97,"line":16852},[95,41220,34610],{"class":164},[95,41222,41223,41225,41227],{"class":97,"line":16864},[95,41224,34615],{"class":105},[95,41226,151],{"class":101},[95,41228,34620],{"class":105},[95,41230,41231,41233,41235],{"class":97,"line":16869},[95,41232,34625],{"class":105},[95,41234,151],{"class":101},[95,41236,34630],{"class":105},[95,41238,41239,41241,41243,41245,41247,41249,41251,41253],{"class":97,"line":16882},[95,41240,34635],{"class":154},[95,41242,106],{"class":105},[95,41244,34640],{"class":210},[95,41246,34643],{"class":105},[95,41248,34646],{"class":210},[95,41250,484],{"class":105},[95,41252,34651],{"class":210},[95,41254,34654],{"class":105},[66,41256,41258],{"id":41257},"_23googlenet","2.3.GoogLeNet",[21981,41260,41262],{"id":41261},"_231原理","2.3.1.原理",[49,41264,41265],{},[52,41266,41267],{},"网络结构",[10,41269,41270],{},[1444,41271],{"alt":14,"src":41272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[10,41274,41275],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[10,41277,41278],{},[1444,41279],{"alt":14,"src":41280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[10,41282,41283],{},[1444,41284],{"alt":14,"src":41285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[10,41287,41288],{},[1444,41289],{"alt":14,"src":41290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[49,41292,41293],{"start":15},[52,41294,41295],{},"1x1卷积的优点",[10,41297,41298],{},[1444,41299],{"alt":14,"src":41300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[49,41302,41303],{"start":1161},[52,41304,41305],{},"全局平均池化层优点",[10,41307,41308],{},[1444,41309],{"alt":14,"src":41310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[10,41312,41313],{},[1444,41314],{"alt":14,"src":41315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[49,41317,41318],{"start":1176},[52,41319,41320],{},"参数详细描述",[10,41322,41323],{},[1444,41324],{"alt":14,"src":41325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[10,41327,41328],{},[1444,41329],{"alt":14,"src":41330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[10,41332,41333],{},[1444,41334],{"alt":14,"src":41335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[10,41337,41338],{},[1444,41339],{"alt":14,"src":41340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[10,41342,41343],{},[1444,41344],{"alt":14,"src":41345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[10,41347,41348],{},[1444,41349],{"alt":14,"src":41350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[10,41352,41353],{},[1444,41354],{"alt":14,"src":41355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[10,41357,41358],{},[1444,41359],{"alt":14,"src":41360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[10,41362,41363],{},[1444,41364],{"alt":14,"src":41365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[10,41367,41368],{},[1444,41369],{"alt":14,"src":41370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[10,41372,41373],{},[1444,41374],{"alt":14,"src":41375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[10,41377,41378],{},[1444,41379],{"alt":14,"src":41380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[10,41382,41383],{},[1444,41384],{"alt":14,"src":41385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[10,41387,41388],{},[1444,41389],{"alt":14,"src":41390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[10,41392,41393],{},[1444,41394],{"alt":14,"src":41395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[10,41397,41398],{},[1444,41399],{"alt":14,"src":41400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[10,41402,41403],{},[1444,41404],{"alt":14,"src":41405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[10,41407,41408],{},[1444,41409],{"alt":14,"src":41410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[10,41412,41413],{},[1444,41414],{"alt":14,"src":41415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[10,41417,41418],{},[1444,41419],{"alt":14,"src":41420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[10,41422,41423],{},[1444,41424],{"alt":14,"src":41425},"\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",[21981,41427,41429],{"id":41428},"_232代码实现","2.3.2.代码实现",[49,41431,41432],{},[52,41433,30696],{},[10,41435,41436],{},"根据原理一步一步搭建即可",[86,41438,41440],{"className":30363,"code":41439,"language":30365,"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",[92,41441,41442,41448,41458,41468,41472,41489,41498,41513,41523,41528,41561,41566,41603,41650,41655,41691,41738,41743,41748,41783,41815,41819,41827,41843,41867,41892,41913,41918,41933,41937,41941,41946,41963,41968,41977,41992,42003,42047,42051,42079,42083,42094,42122,42126,42163,42167,42195,42199,42210,42246,42278,42306,42310,42321,42355,42387,42419,42452,42486,42514,42518,42529,42562,42594,42608,42612,42625,42629,42634,42646,42654,42676,42681,42686,42691,42696,42701,42706,42720,42728,42737,42750,42765,42774,42778,42786,42797,42808,42819,42830,42841,42847,42851,42856,42868,42888,42897],{"__ignoreMap":14},[95,41443,41444,41446],{"class":97,"line":98},[95,41445,30377],{"class":101},[95,41447,30380],{"class":105},[95,41449,41450,41452,41454,41456],{"class":97,"line":15},[95,41451,30722],{"class":101},[95,41453,30725],{"class":105},[95,41455,30377],{"class":101},[95,41457,30730],{"class":105},[95,41459,41460,41462,41464,41466],{"class":97,"line":1161},[95,41461,30722],{"class":101},[95,41463,30742],{"class":105},[95,41465,30377],{"class":101},[95,41467,30747],{"class":105},[95,41469,41470],{"class":97,"line":1176},[95,41471,2382],{"emptyLinePlaceholder":21},[95,41473,41474,41476,41479,41481,41483,41485,41487],{"class":97,"line":1182},[95,41475,14677],{"class":101},[95,41477,41478],{"class":1945}," Inception",[95,41480,106],{"class":105},[95,41482,30763],{"class":1945},[95,41484,664],{"class":105},[95,41486,30768],{"class":1945},[95,41488,30771],{"class":105},[95,41490,41491,41493,41495],{"class":97,"line":1196},[95,41492,30786],{"class":101},[95,41494,30789],{"class":154},[95,41496,41497],{"class":105},"(self,in_channels,c1,c2,c3,c4):\n",[95,41499,41500,41502,41505,41507,41509,41511],{"class":97,"line":1202},[95,41501,30802],{"class":154},[95,41503,41504],{"class":105},"(Inception,",[95,41506,30808],{"class":154},[95,41508,30811],{"class":105},[95,41510,30814],{"class":154},[95,41512,1958],{"class":105},[95,41514,41515,41517,41519,41521],{"class":97,"line":1293},[95,41516,30830],{"class":154},[95,41518,34756],{"class":105},[95,41520,151],{"class":101},[95,41522,34761],{"class":105},[95,41524,41525],{"class":97,"line":1299},[95,41526,41527],{"class":164},"        # 路线1：定义1*1卷积\n",[95,41529,41530,41532,41535,41537,41539,41541,41543,41546,41548,41550,41553,41555,41557,41559],{"class":97,"line":1311},[95,41531,30830],{"class":154},[95,41533,41534],{"class":105},".p1_1",[95,41536,151],{"class":101},[95,41538,30838],{"class":105},[95,41540,30841],{"class":5199},[95,41542,151],{"class":101},[95,41544,41545],{"class":105},"in_channels,",[95,41547,30850],{"class":5199},[95,41549,151],{"class":101},[95,41551,41552],{"class":105},"c1,",[95,41554,30859],{"class":5199},[95,41556,151],{"class":101},[95,41558,323],{"class":154},[95,41560,112],{"class":105},[95,41562,41563],{"class":97,"line":1594},[95,41564,41565],{"class":164},"        # 路线2：定义1*1卷积和3*3\n",[95,41567,41568,41570,41573,41575,41577,41579,41581,41583,41585,41587,41590,41592,41595,41597,41599,41601],{"class":97,"line":1599},[95,41569,30830],{"class":154},[95,41571,41572],{"class":105},".p2_1",[95,41574,151],{"class":101},[95,41576,30838],{"class":105},[95,41578,30841],{"class":5199},[95,41580,151],{"class":101},[95,41582,41545],{"class":105},[95,41584,30850],{"class":5199},[95,41586,151],{"class":101},[95,41588,41589],{"class":105},"c2[",[95,41591,297],{"class":154},[95,41593,41594],{"class":105},"],",[95,41596,30859],{"class":5199},[95,41598,151],{"class":101},[95,41600,323],{"class":154},[95,41602,112],{"class":105},[95,41604,41605,41607,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648],{"class":97,"line":1605},[95,41606,30830],{"class":154},[95,41608,41609],{"class":105},".p2_2",[95,41611,151],{"class":101},[95,41613,30838],{"class":105},[95,41615,30841],{"class":5199},[95,41617,151],{"class":101},[95,41619,41589],{"class":105},[95,41621,297],{"class":154},[95,41623,41594],{"class":105},[95,41625,30850],{"class":5199},[95,41627,151],{"class":101},[95,41629,41589],{"class":105},[95,41631,323],{"class":154},[95,41633,41594],{"class":105},[95,41635,30859],{"class":5199},[95,41637,151],{"class":101},[95,41639,177],{"class":154},[95,41641,484],{"class":105},[95,41643,30868],{"class":5199},[95,41645,151],{"class":101},[95,41647,323],{"class":154},[95,41649,112],{"class":105},[95,41651,41652],{"class":97,"line":1610},[95,41653,41654],{"class":164},"        # 路线3：定义1*1卷积和5*5\n",[95,41656,41657,41659,41662,41664,41666,41668,41670,41672,41674,41676,41679,41681,41683,41685,41687,41689],{"class":97,"line":1624},[95,41658,30830],{"class":154},[95,41660,41661],{"class":105},".p3_1",[95,41663,151],{"class":101},[95,41665,30838],{"class":105},[95,41667,30841],{"class":5199},[95,41669,151],{"class":101},[95,41671,41545],{"class":105},[95,41673,30850],{"class":5199},[95,41675,151],{"class":101},[95,41677,41678],{"class":105},"c3[",[95,41680,297],{"class":154},[95,41682,41594],{"class":105},[95,41684,30859],{"class":5199},[95,41686,151],{"class":101},[95,41688,323],{"class":154},[95,41690,112],{"class":105},[95,41692,41693,41695,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736],{"class":97,"line":1629},[95,41694,30830],{"class":154},[95,41696,41697],{"class":105},".p3_2",[95,41699,151],{"class":101},[95,41701,30838],{"class":105},[95,41703,30841],{"class":5199},[95,41705,151],{"class":101},[95,41707,41678],{"class":105},[95,41709,297],{"class":154},[95,41711,41594],{"class":105},[95,41713,30850],{"class":5199},[95,41715,151],{"class":101},[95,41717,41678],{"class":105},[95,41719,323],{"class":154},[95,41721,41594],{"class":105},[95,41723,30859],{"class":5199},[95,41725,151],{"class":101},[95,41727,425],{"class":154},[95,41729,484],{"class":105},[95,41731,30868],{"class":5199},[95,41733,151],{"class":101},[95,41735,183],{"class":154},[95,41737,112],{"class":105},[95,41739,41740],{"class":97,"line":1635},[95,41741,41742],{"class":164},"        # 路线4：定义3*3最大池化和1*1卷积\n",[95,41744,41745],{"class":97,"line":1656},[95,41746,41747],{"class":164},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[95,41749,41750,41752,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781],{"class":97,"line":1661},[95,41751,30830],{"class":154},[95,41753,41754],{"class":105},".p4_1",[95,41756,151],{"class":101},[95,41758,34814],{"class":105},[95,41760,30859],{"class":5199},[95,41762,151],{"class":101},[95,41764,177],{"class":154},[95,41766,484],{"class":105},[95,41768,30914],{"class":5199},[95,41770,151],{"class":101},[95,41772,323],{"class":154},[95,41774,484],{"class":105},[95,41776,30868],{"class":5199},[95,41778,151],{"class":101},[95,41780,323],{"class":154},[95,41782,112],{"class":105},[95,41784,41785,41787,41790,41792,41794,41796,41798,41800,41802,41804,41807,41809,41811,41813],{"class":97,"line":1675},[95,41786,30830],{"class":154},[95,41788,41789],{"class":105},".p4_2",[95,41791,151],{"class":101},[95,41793,30838],{"class":105},[95,41795,30841],{"class":5199},[95,41797,151],{"class":101},[95,41799,41545],{"class":105},[95,41801,30850],{"class":5199},[95,41803,151],{"class":101},[95,41805,41806],{"class":105},"c4,",[95,41808,30859],{"class":5199},[95,41810,151],{"class":101},[95,41812,323],{"class":154},[95,41814,112],{"class":105},[95,41816,41817],{"class":97,"line":1680},[95,41818,2382],{"emptyLinePlaceholder":21},[95,41820,41821,41823,41825],{"class":97,"line":1709},[95,41822,30786],{"class":101},[95,41824,31078],{"class":1945},[95,41826,31081],{"class":105},[95,41828,41829,41832,41834,41836,41838,41840],{"class":97,"line":1714},[95,41830,41831],{"class":105},"        p1",[95,41833,151],{"class":101},[95,41835,30808],{"class":154},[95,41837,35169],{"class":105},[95,41839,30808],{"class":154},[95,41841,41842],{"class":105},".p1_1(x))\n",[95,41844,41845,41847,41849,41851,41853,41855,41858,41860,41862,41864],{"class":97,"line":1731},[95,41846,7068],{"class":105},[95,41848,151],{"class":101},[95,41850,30808],{"class":154},[95,41852,35169],{"class":105},[95,41854,30808],{"class":154},[95,41856,41857],{"class":105},".p2_2(",[95,41859,30808],{"class":154},[95,41861,35169],{"class":105},[95,41863,30808],{"class":154},[95,41865,41866],{"class":105},".p2_1(x))))\n",[95,41868,41869,41872,41874,41876,41878,41880,41883,41885,41887,41889],{"class":97,"line":1736},[95,41870,41871],{"class":105},"        p3",[95,41873,151],{"class":101},[95,41875,30808],{"class":154},[95,41877,35169],{"class":105},[95,41879,30808],{"class":154},[95,41881,41882],{"class":105},".p3_2(",[95,41884,30808],{"class":154},[95,41886,35169],{"class":105},[95,41888,30808],{"class":154},[95,41890,41891],{"class":105},".p3_1(x))))\n",[95,41893,41894,41897,41899,41901,41903,41905,41908,41910],{"class":97,"line":1741},[95,41895,41896],{"class":105},"        p4",[95,41898,151],{"class":101},[95,41900,30808],{"class":154},[95,41902,35169],{"class":105},[95,41904,30808],{"class":154},[95,41906,41907],{"class":105},".p4_2(",[95,41909,30808],{"class":154},[95,41911,41912],{"class":105},".p4_1(x)))\n",[95,41914,41915],{"class":97,"line":1746},[95,41916,41917],{"class":164},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[95,41919,41920,41922,41925,41927,41929,41931],{"class":97,"line":1760},[95,41921,14735],{"class":101},[95,41923,41924],{"class":105}," torch.cat((p1,p2,p3,p4),",[95,41926,32670],{"class":5199},[95,41928,151],{"class":101},[95,41930,323],{"class":154},[95,41932,112],{"class":105},[95,41934,41935],{"class":97,"line":1765},[95,41936,2382],{"emptyLinePlaceholder":21},[95,41938,41939],{"class":97,"line":2559},[95,41940,2382],{"emptyLinePlaceholder":21},[95,41942,41943],{"class":97,"line":2573},[95,41944,41945],{"class":164},"# 搭建GoogLeNet网络\n",[95,41947,41948,41950,41953,41955,41957,41959,41961],{"class":97,"line":2581},[95,41949,14677],{"class":101},[95,41951,41952],{"class":1945}," GoogLeNet",[95,41954,106],{"class":105},[95,41956,30763],{"class":1945},[95,41958,664],{"class":105},[95,41960,30768],{"class":1945},[95,41962,30771],{"class":105},[95,41964,41965],{"class":97,"line":2586},[95,41966,41967],{"class":164},"    # 必须把Inception导入到里边\n",[95,41969,41970,41972,41974],{"class":97,"line":2592},[95,41971,30786],{"class":101},[95,41973,30789],{"class":154},[95,41975,41976],{"class":105},"(self,Inception):\n",[95,41978,41979,41981,41984,41986,41988,41990],{"class":97,"line":2598},[95,41980,30802],{"class":154},[95,41982,41983],{"class":105},"(GoogLeNet,",[95,41985,30808],{"class":154},[95,41987,30811],{"class":105},[95,41989,30814],{"class":154},[95,41991,1958],{"class":105},[95,41993,41994,41996,41999,42001],{"class":97,"line":2603},[95,41995,30830],{"class":154},[95,41997,41998],{"class":105},".b1",[95,42000,151],{"class":101},[95,42002,37994],{"class":105},[95,42004,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045],{"class":97,"line":7931},[95,42006,37999],{"class":105},[95,42008,30841],{"class":5199},[95,42010,151],{"class":101},[95,42012,323],{"class":154},[95,42014,484],{"class":105},[95,42016,30850],{"class":5199},[95,42018,151],{"class":101},[95,42020,309],{"class":154},[95,42022,484],{"class":105},[95,42024,30859],{"class":5199},[95,42026,151],{"class":101},[95,42028,475],{"class":154},[95,42030,484],{"class":105},[95,42032,30914],{"class":5199},[95,42034,151],{"class":101},[95,42036,183],{"class":154},[95,42038,484],{"class":105},[95,42040,30868],{"class":5199},[95,42042,151],{"class":101},[95,42044,177],{"class":154},[95,42046,38032],{"class":105},[95,42048,42049],{"class":97,"line":7955},[95,42050,38037],{"class":105},[95,42052,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077],{"class":97,"line":7960},[95,42054,38082],{"class":105},[95,42056,30859],{"class":5199},[95,42058,151],{"class":101},[95,42060,177],{"class":154},[95,42062,484],{"class":105},[95,42064,30914],{"class":5199},[95,42066,151],{"class":101},[95,42068,183],{"class":154},[95,42070,484],{"class":105},[95,42072,30868],{"class":5199},[95,42074,151],{"class":101},[95,42076,323],{"class":154},[95,42078,112],{"class":105},[95,42080,42081],{"class":97,"line":7966},[95,42082,38111],{"class":105},[95,42084,42085,42087,42090,42092],{"class":97,"line":7993},[95,42086,30830],{"class":154},[95,42088,42089],{"class":105},".b2",[95,42091,151],{"class":101},[95,42093,37994],{"class":105},[95,42095,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120],{"class":97,"line":7998},[95,42097,37999],{"class":105},[95,42099,30841],{"class":5199},[95,42101,151],{"class":101},[95,42103,309],{"class":154},[95,42105,484],{"class":105},[95,42107,30850],{"class":5199},[95,42109,151],{"class":101},[95,42111,309],{"class":154},[95,42113,484],{"class":105},[95,42115,30859],{"class":5199},[95,42117,151],{"class":101},[95,42119,323],{"class":154},[95,42121,38032],{"class":105},[95,42123,42124],{"class":97,"line":8004},[95,42125,38037],{"class":105},[95,42127,42128,42130,42132,42134,42136,42138,42140,42142,42145,42147,42149,42151,42153,42155,42157,42159,42161],{"class":97,"line":8016},[95,42129,37999],{"class":105},[95,42131,30841],{"class":5199},[95,42133,151],{"class":101},[95,42135,309],{"class":154},[95,42137,484],{"class":105},[95,42139,30850],{"class":5199},[95,42141,151],{"class":101},[95,42143,42144],{"class":154},"192",[95,42146,484],{"class":105},[95,42148,30859],{"class":5199},[95,42150,151],{"class":101},[95,42152,177],{"class":154},[95,42154,484],{"class":105},[95,42156,30868],{"class":5199},[95,42158,151],{"class":101},[95,42160,323],{"class":154},[95,42162,38032],{"class":105},[95,42164,42165],{"class":97,"line":8028},[95,42166,38037],{"class":105},[95,42168,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193],{"class":97,"line":8040},[95,42170,38082],{"class":105},[95,42172,30859],{"class":5199},[95,42174,151],{"class":101},[95,42176,177],{"class":154},[95,42178,484],{"class":105},[95,42180,30914],{"class":5199},[95,42182,151],{"class":101},[95,42184,183],{"class":154},[95,42186,484],{"class":105},[95,42188,30868],{"class":5199},[95,42190,151],{"class":101},[95,42192,323],{"class":154},[95,42194,112],{"class":105},[95,42196,42197],{"class":97,"line":9699},[95,42198,38111],{"class":105},[95,42200,42201,42203,42206,42208],{"class":97,"line":9724},[95,42202,30830],{"class":154},[95,42204,42205],{"class":105},".b3",[95,42207,151],{"class":101},[95,42209,37994],{"class":105},[95,42211,42212,42215,42217,42219,42221,42224,42226,42228,42230,42233,42235,42237,42239,42242,42244],{"class":97,"line":9747},[95,42213,42214],{"class":105},"            Inception(",[95,42216,42144],{"class":154},[95,42218,484],{"class":105},[95,42220,309],{"class":154},[95,42222,42223],{"class":105},",(",[95,42225,315],{"class":154},[95,42227,484],{"class":105},[95,42229,32055],{"class":154},[95,42231,42232],{"class":105},"),(",[95,42234,707],{"class":154},[95,42236,484],{"class":105},[95,42238,303],{"class":154},[95,42240,42241],{"class":105},"),",[95,42243,303],{"class":154},[95,42245,38032],{"class":105},[95,42247,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276],{"class":97,"line":9771},[95,42249,42214],{"class":105},[95,42251,34855],{"class":154},[95,42253,484],{"class":105},[95,42255,32055],{"class":154},[95,42257,42223],{"class":105},[95,42259,32055],{"class":154},[95,42261,484],{"class":105},[95,42263,42144],{"class":154},[95,42265,42232],{"class":105},[95,42267,303],{"class":154},[95,42269,484],{"class":105},[95,42271,315],{"class":154},[95,42273,42241],{"class":105},[95,42275,309],{"class":154},[95,42277,38032],{"class":105},[95,42279,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304],{"class":97,"line":9776},[95,42281,38082],{"class":105},[95,42283,30859],{"class":5199},[95,42285,151],{"class":101},[95,42287,177],{"class":154},[95,42289,484],{"class":105},[95,42291,30914],{"class":5199},[95,42293,151],{"class":101},[95,42295,183],{"class":154},[95,42297,484],{"class":105},[95,42299,30868],{"class":5199},[95,42301,151],{"class":101},[95,42303,323],{"class":154},[95,42305,112],{"class":105},[95,42307,42308],{"class":97,"line":9781},[95,42309,38111],{"class":105},[95,42311,42312,42314,42317,42319],{"class":97,"line":9786},[95,42313,30830],{"class":154},[95,42315,42316],{"class":105},".b4",[95,42318,151],{"class":101},[95,42320,37994],{"class":105},[95,42322,42323,42325,42328,42330,42332,42334,42336,42338,42341,42343,42345,42347,42349,42351,42353],{"class":97,"line":9795},[95,42324,42214],{"class":105},[95,42326,42327],{"class":154},"480",[95,42329,484],{"class":105},[95,42331,42144],{"class":154},[95,42333,42223],{"class":105},[95,42335,315],{"class":154},[95,42337,484],{"class":105},[95,42339,42340],{"class":154},"208",[95,42342,42232],{"class":105},[95,42344,707],{"class":154},[95,42346,484],{"class":105},[95,42348,713],{"class":154},[95,42350,42241],{"class":105},[95,42352,309],{"class":154},[95,42354,38032],{"class":105},[95,42356,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385],{"class":97,"line":9800},[95,42358,42214],{"class":105},[95,42360,38442],{"class":154},[95,42362,484],{"class":105},[95,42364,21031],{"class":154},[95,42366,42223],{"class":105},[95,42368,724],{"class":154},[95,42370,484],{"class":105},[95,42372,31486],{"class":154},[95,42374,42232],{"class":105},[95,42376,906],{"class":154},[95,42378,484],{"class":105},[95,42380,309],{"class":154},[95,42382,42241],{"class":105},[95,42384,309],{"class":154},[95,42386,38032],{"class":105},[95,42388,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417],{"class":97,"line":9806},[95,42390,42214],{"class":105},[95,42392,38442],{"class":154},[95,42394,484],{"class":105},[95,42396,32055],{"class":154},[95,42398,42223],{"class":105},[95,42400,32055],{"class":154},[95,42402,484],{"class":105},[95,42404,34855],{"class":154},[95,42406,42232],{"class":105},[95,42408,906],{"class":154},[95,42410,484],{"class":105},[95,42412,309],{"class":154},[95,42414,42241],{"class":105},[95,42416,309],{"class":154},[95,42418,38032],{"class":105},[95,42420,42421,42423,42425,42427,42429,42431,42433,42435,42438,42440,42442,42444,42446,42448,42450],{"class":97,"line":9827},[95,42422,42214],{"class":105},[95,42424,38442],{"class":154},[95,42426,484],{"class":105},[95,42428,724],{"class":154},[95,42430,42223],{"class":105},[95,42432,32055],{"class":154},[95,42434,484],{"class":105},[95,42436,42437],{"class":154},"288",[95,42439,42232],{"class":105},[95,42441,303],{"class":154},[95,42443,484],{"class":105},[95,42445,309],{"class":154},[95,42447,42241],{"class":105},[95,42449,309],{"class":154},[95,42451,38032],{"class":105},[95,42453,42454,42456,42459,42461,42463,42465,42467,42469,42472,42474,42476,42478,42480,42482,42484],{"class":97,"line":9833},[95,42455,42214],{"class":105},[95,42457,42458],{"class":154},"528",[95,42460,484],{"class":105},[95,42462,34855],{"class":154},[95,42464,42223],{"class":105},[95,42466,21031],{"class":154},[95,42468,484],{"class":105},[95,42470,42471],{"class":154},"320",[95,42473,42232],{"class":105},[95,42475,303],{"class":154},[95,42477,484],{"class":105},[95,42479,32055],{"class":154},[95,42481,42241],{"class":105},[95,42483,32055],{"class":154},[95,42485,38032],{"class":105},[95,42487,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512],{"class":97,"line":9847},[95,42489,38082],{"class":105},[95,42491,30859],{"class":5199},[95,42493,151],{"class":101},[95,42495,177],{"class":154},[95,42497,484],{"class":105},[95,42499,30914],{"class":5199},[95,42501,151],{"class":101},[95,42503,183],{"class":154},[95,42505,484],{"class":105},[95,42507,30868],{"class":5199},[95,42509,151],{"class":101},[95,42511,323],{"class":154},[95,42513,112],{"class":105},[95,42515,42516],{"class":97,"line":9853},[95,42517,38111],{"class":105},[95,42519,42520,42522,42525,42527],{"class":97,"line":9880},[95,42521,30830],{"class":154},[95,42523,42524],{"class":105},".b5",[95,42526,151],{"class":101},[95,42528,37994],{"class":105},[95,42530,42531,42533,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560],{"class":97,"line":9889},[95,42532,42214],{"class":105},[95,42534,42535],{"class":154},"832",[95,42537,484],{"class":105},[95,42539,34855],{"class":154},[95,42541,42223],{"class":105},[95,42543,21031],{"class":154},[95,42545,484],{"class":105},[95,42547,42471],{"class":154},[95,42549,42232],{"class":105},[95,42551,303],{"class":154},[95,42553,484],{"class":105},[95,42555,32055],{"class":154},[95,42557,42241],{"class":105},[95,42559,32055],{"class":154},[95,42561,38032],{"class":105},[95,42563,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592],{"class":97,"line":9895},[95,42565,42214],{"class":105},[95,42567,42535],{"class":154},[95,42569,484],{"class":105},[95,42571,34925],{"class":154},[95,42573,42223],{"class":105},[95,42575,42144],{"class":154},[95,42577,484],{"class":105},[95,42579,34925],{"class":154},[95,42581,42232],{"class":105},[95,42583,713],{"class":154},[95,42585,484],{"class":105},[95,42587,32055],{"class":154},[95,42589,42241],{"class":105},[95,42591,32055],{"class":154},[95,42593,38032],{"class":105},[95,42595,42596,42599,42601,42603,42605],{"class":97,"line":9903},[95,42597,42598],{"class":105},"            nn.AdaptiveAvgPool2d((",[95,42600,323],{"class":154},[95,42602,484],{"class":105},[95,42604,323],{"class":154},[95,42606,42607],{"class":105},")),\n",[95,42609,42610],{"class":97,"line":9908},[95,42611,38775],{"class":105},[95,42613,42614,42616,42619,42621,42623],{"class":97,"line":16587},[95,42615,38780],{"class":105},[95,42617,42618],{"class":154},"1024",[95,42620,484],{"class":105},[95,42622,552],{"class":154},[95,42624,112],{"class":105},[95,42626,42627],{"class":97,"line":16593},[95,42628,38111],{"class":105},[95,42630,42631],{"class":97,"line":16616},[95,42632,42633],{"class":164},"        # 对模型参数初始化\n",[95,42635,42636,42638,42640,42642,42644],{"class":97,"line":16622},[95,42637,3385],{"class":101},[95,42639,38853],{"class":105},[95,42641,26028],{"class":101},[95,42643,38858],{"class":154},[95,42645,38861],{"class":105},[95,42647,42648,42650,42652],{"class":97,"line":16645},[95,42649,4624],{"class":101},[95,42651,38873],{"class":154},[95,42653,38876],{"class":105},[95,42655,42656,42658,42661,42663,42666,42668,42670,42672,42674],{"class":97,"line":16659},[95,42657,38886],{"class":105},[95,42659,42660],{"class":5199},"mode",[95,42662,151],{"class":101},[95,42664,42665],{"class":210},"'fan_out'",[95,42667,484],{"class":105},[95,42669,38889],{"class":5199},[95,42671,151],{"class":101},[95,42673,38894],{"class":210},[95,42675,112],{"class":105},[95,42677,42678],{"class":97,"line":16679},[95,42679,42680],{"class":164},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[95,42682,42683],{"class":97,"line":16685},[95,42684,42685],{"class":164},"                # ② mode = 'fan_out'决定使用的fan值：\n",[95,42687,42688],{"class":97,"line":16696},[95,42689,42690],{"class":164},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[95,42692,42693],{"class":97,"line":16719},[95,42694,42695],{"class":164},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[95,42697,42698],{"class":97,"line":16741},[95,42699,42700],{"class":164},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[95,42702,42703],{"class":97,"line":16746},[95,42704,42705],{"class":164},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[95,42707,42708,42710,42712,42714,42716,42718],{"class":97,"line":16752},[95,42709,38906],{"class":101},[95,42711,38909],{"class":105},[95,42713,38912],{"class":101},[95,42715,38915],{"class":101},[95,42717,38918],{"class":154},[95,42719,3721],{"class":105},[95,42721,42722,42724,42726],{"class":97,"line":16766},[95,42723,38930],{"class":105},[95,42725,297],{"class":154},[95,42727,112],{"class":105},[95,42729,42730,42733,42735],{"class":97,"line":16779},[95,42731,42732],{"class":101},"                elif",[95,42734,38873],{"class":154},[95,42736,38949],{"class":105},[95,42738,42739,42742,42744,42746,42748],{"class":97,"line":16784},[95,42740,42741],{"class":105},"                    nn.init.normal_(m.weight,",[95,42743,297],{"class":154},[95,42745,484],{"class":105},[95,42747,38971],{"class":154},[95,42749,112],{"class":105},[95,42751,42752,42755,42757,42759,42761,42763],{"class":97,"line":16798},[95,42753,42754],{"class":101},"                    if",[95,42756,38909],{"class":105},[95,42758,38912],{"class":101},[95,42760,38915],{"class":101},[95,42762,38918],{"class":154},[95,42764,3721],{"class":105},[95,42766,42767,42770,42772],{"class":97,"line":16803},[95,42768,42769],{"class":105},"                        nn.init.constant_(m.bias,",[95,42771,297],{"class":154},[95,42773,112],{"class":105},[95,42775,42776],{"class":97,"line":16809},[95,42777,35150],{"class":164},[95,42779,42780,42782,42784],{"class":97,"line":16814},[95,42781,30786],{"class":101},[95,42783,31078],{"class":1945},[95,42785,31081],{"class":105},[95,42787,42788,42790,42792,42794],{"class":97,"line":16828},[95,42789,31086],{"class":105},[95,42791,151],{"class":101},[95,42793,30808],{"class":154},[95,42795,42796],{"class":105},".b1(x)\n",[95,42798,42799,42801,42803,42805],{"class":97,"line":16833},[95,42800,31086],{"class":105},[95,42802,151],{"class":101},[95,42804,30808],{"class":154},[95,42806,42807],{"class":105},".b2(x)\n",[95,42809,42810,42812,42814,42816],{"class":97,"line":16838},[95,42811,31086],{"class":105},[95,42813,151],{"class":101},[95,42815,30808],{"class":154},[95,42817,42818],{"class":105},".b3(x)\n",[95,42820,42821,42823,42825,42827],{"class":97,"line":16852},[95,42822,31086],{"class":105},[95,42824,151],{"class":101},[95,42826,30808],{"class":154},[95,42828,42829],{"class":105},".b4(x)\n",[95,42831,42832,42834,42836,42838],{"class":97,"line":16864},[95,42833,31086],{"class":105},[95,42835,151],{"class":101},[95,42837,30808],{"class":154},[95,42839,42840],{"class":105},".b5(x)\n",[95,42842,42843,42845],{"class":97,"line":16869},[95,42844,14735],{"class":101},[95,42846,31194],{"class":105},[95,42848,42849],{"class":97,"line":16882},[95,42850,2382],{"emptyLinePlaceholder":21},[95,42852,42853],{"class":97,"line":16887},[95,42854,42855],{"class":164},"# 模型展示\n",[95,42857,42858,42860,42862,42864,42866],{"class":97,"line":16892},[95,42859,1513],{"class":101},[95,42861,31205],{"class":154},[95,42863,2931],{"class":101},[95,42865,31210],{"class":210},[95,42867,3721],{"class":105},[95,42869,42870,42872,42874,42876,42878,42880,42882,42884,42886],{"class":97,"line":16897},[95,42871,31222],{"class":105},[95,42873,151],{"class":101},[95,42875,30436],{"class":105},[95,42877,31229],{"class":210},[95,42879,1686],{"class":101},[95,42881,31234],{"class":105},[95,42883,1683],{"class":101},[95,42885,30461],{"class":210},[95,42887,112],{"class":105},[95,42889,42890,42892,42894],{"class":97,"line":16910},[95,42891,31274],{"class":105},[95,42893,151],{"class":101},[95,42895,42896],{"class":105},"GoogLeNet(Inception).to(device)\n",[95,42898,42899,42901,42903,42905,42907,42909,42911,42913],{"class":97,"line":16915},[95,42900,31284],{"class":154},[95,42902,31287],{"class":105},[95,42904,323],{"class":154},[95,42906,484],{"class":105},[95,42908,31486],{"class":154},[95,42910,484],{"class":105},[95,42912,31486],{"class":154},[95,42914,31300],{"class":105},[49,42916,42917],{"start":15},[52,42918,39168],{},[86,42920,42922],{"className":30363,"code":42921,"language":30365,"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",[92,42923,42924,42930,42936,42946,42952,42962,42972,42982,42992,43002,43006,43017,43027,43031,43035,43039,43047,43059,43069,43085,43095,43127,43141,43151,43161,43165,43175,43189,43199,43209,43219,43225,43229,43233,43237,43241,43245,43253,43273,43277,43281,43285,43289,43293,43309,43313,43317,43325,43329,43333,43341,43345,43349,43353,43361,43365,43369,43373,43377,43385,43389,43397,43401,43409,43413,43421,43425,43433,43437,43441,43449,43453,43457,43461,43473,43497,43511,43515,43519,43523,43531,43535,43543,43547,43555,43559,43567,43571,43579,43583,43591,43595,43607,43611,43619,43623,43631,43635,43639,43643,43647,43655,43659,43675,43679,43687,43691,43695,43699,43703,43707,43711,43715,43731,43735,43747,43751,43763,43767,43779,43783,43791,43795,43803,43807,43811,43815,43821,43825,43833,43837,43853,43857,43865,43869,43885,43897,43901,43913,43917,43921,43929,43933,43937,43945,43949,43957,43961,43969,43973,43977,44019,44061,44065,44069,44085,44089,44105,44109,44113,44121,44125,44129,44141,44179,44183,44187,44195,44199,44213,44223,44229,44235,44241,44247,44251,44255,44261,44265,44269,44277,44281,44299,44303,44307,44311,44327,44331,44335,44339,44343,44347,44367,44387,44391,44395,44399,44407,44415,44419,44435,44455,44475,44479,44483,44491,44499,44503,44507,44511,44523,44527,44537,44545,44562],{"__ignoreMap":14},[95,42925,42926,42928],{"class":97,"line":98},[95,42927,30377],{"class":101},[95,42929,31807],{"class":105},[95,42931,42932,42934],{"class":97,"line":15},[95,42933,30377],{"class":101},[95,42935,31814],{"class":105},[95,42937,42938,42940,42942,42944],{"class":97,"line":1161},[95,42939,30377],{"class":101},[95,42941,31825],{"class":105},[95,42943,31368],{"class":101},[95,42945,31830],{"class":105},[95,42947,42948,42950],{"class":97,"line":1176},[95,42949,30377],{"class":101},[95,42951,30380],{"class":105},[95,42953,42954,42956,42958,42960],{"class":97,"line":1182},[95,42955,30722],{"class":101},[95,42957,31400],{"class":105},[95,42959,30377],{"class":101},[95,42961,31847],{"class":105},[95,42963,42964,42966,42968,42970],{"class":97,"line":1196},[95,42965,30722],{"class":101},[95,42967,31353],{"class":105},[95,42969,30377],{"class":101},[95,42971,31358],{"class":105},[95,42973,42974,42976,42978,42980],{"class":97,"line":1202},[95,42975,30722],{"class":101},[95,42977,31383],{"class":105},[95,42979,30377],{"class":101},[95,42981,31388],{"class":105},[95,42983,42984,42986,42988,42990],{"class":97,"line":1293},[95,42985,30377],{"class":101},[95,42987,31400],{"class":105},[95,42989,31368],{"class":101},[95,42991,31405],{"class":105},[95,42993,42994,42996,42998,43000],{"class":97,"line":1299},[95,42995,30377],{"class":101},[95,42997,31417],{"class":105},[95,42999,31368],{"class":101},[95,43001,31422],{"class":105},[95,43003,43004],{"class":97,"line":1311},[95,43005,31892],{"class":164},[95,43007,43008,43010,43012,43014],{"class":97,"line":1594},[95,43009,30722],{"class":101},[95,43011,31899],{"class":105},[95,43013,30377],{"class":101},[95,43015,43016],{"class":105}," GoogLeNet, Inception\n",[95,43018,43019,43021,43023,43025],{"class":97,"line":1599},[95,43020,30722],{"class":101},[95,43022,30725],{"class":105},[95,43024,30377],{"class":101},[95,43026,30730],{"class":105},[95,43028,43029],{"class":97,"line":1605},[95,43030,2382],{"emptyLinePlaceholder":21},[95,43032,43033],{"class":97,"line":1610},[95,43034,2382],{"emptyLinePlaceholder":21},[95,43036,43037],{"class":97,"line":1624},[95,43038,31927],{"class":164},[95,43040,43041,43043,43045],{"class":97,"line":1629},[95,43042,31932],{"class":101},[95,43044,31935],{"class":1945},[95,43046,31938],{"class":105},[95,43048,43049,43051,43053,43055,43057],{"class":97,"line":1635},[95,43050,31943],{"class":105},[95,43052,151],{"class":101},[95,43054,31440],{"class":105},[95,43056,31448],{"class":210},[95,43058,31451],{"class":105},[95,43060,43061,43063,43065,43067],{"class":97,"line":1656},[95,43062,31956],{"class":5199},[95,43064,151],{"class":101},[95,43066,31461],{"class":154},[95,43068,31451],{"class":105},[95,43070,43071,43073,43075,43077,43079,43081,43083],{"class":97,"line":1661},[95,43072,31967],{"class":5199},[95,43074,151],{"class":101},[95,43076,31478],{"class":105},[95,43078,31481],{"class":5199},[95,43080,151],{"class":101},[95,43082,35434],{"class":154},[95,43084,31489],{"class":105},[95,43086,43087,43089,43091,43093],{"class":97,"line":1675},[95,43088,31984],{"class":5199},[95,43090,151],{"class":101},[95,43092,31461],{"class":154},[95,43094,112],{"class":105},[95,43096,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125],{"class":97,"line":1680},[95,43098,31995],{"class":105},[95,43100,151],{"class":101},[95,43102,32000],{"class":105},[95,43104,32003],{"class":154},[95,43106,106],{"class":105},[95,43108,32008],{"class":154},[95,43110,561],{"class":101},[95,43112,7341],{"class":154},[95,43114,32015],{"class":105},[95,43116,32003],{"class":154},[95,43118,106],{"class":105},[95,43120,32022],{"class":154},[95,43122,561],{"class":101},[95,43124,7341],{"class":154},[95,43126,32029],{"class":105},[95,43128,43129,43131,43133,43135,43137,43139],{"class":97,"line":1709},[95,43130,32034],{"class":105},[95,43132,151],{"class":101},[95,43134,32039],{"class":105},[95,43136,31522],{"class":5199},[95,43138,151],{"class":101},[95,43140,31527],{"class":105},[95,43142,43143,43145,43147,43149],{"class":97,"line":1714},[95,43144,32050],{"class":5199},[95,43146,151],{"class":101},[95,43148,303],{"class":154},[95,43150,31451],{"class":105},[95,43152,43153,43155,43157,43159],{"class":97,"line":1731},[95,43154,32062],{"class":5199},[95,43156,151],{"class":101},[95,43158,31461],{"class":154},[95,43160,31451],{"class":105},[95,43162,43163],{"class":97,"line":1736},[95,43164,32073],{"class":164},[95,43166,43167,43169,43171,43173],{"class":97,"line":1741},[95,43168,32078],{"class":5199},[95,43170,151],{"class":101},[95,43172,501],{"class":154},[95,43174,112],{"class":105},[95,43176,43177,43179,43181,43183,43185,43187],{"class":97,"line":1746},[95,43178,32089],{"class":105},[95,43180,151],{"class":101},[95,43182,31519],{"class":105},[95,43184,31522],{"class":5199},[95,43186,151],{"class":101},[95,43188,32100],{"class":105},[95,43190,43191,43193,43195,43197],{"class":97,"line":1760},[95,43192,32105],{"class":5199},[95,43194,151],{"class":101},[95,43196,303],{"class":154},[95,43198,31451],{"class":105},[95,43200,43201,43203,43205,43207],{"class":97,"line":1765},[95,43202,32116],{"class":5199},[95,43204,151],{"class":101},[95,43206,31461],{"class":154},[95,43208,31451],{"class":105},[95,43210,43211,43213,43215,43217],{"class":97,"line":2559},[95,43212,32127],{"class":5199},[95,43214,151],{"class":101},[95,43216,501],{"class":154},[95,43218,112],{"class":105},[95,43220,43221,43223],{"class":97,"line":2573},[95,43222,4072],{"class":101},[95,43224,32140],{"class":105},[95,43226,43227],{"class":97,"line":2581},[95,43228,2382],{"emptyLinePlaceholder":21},[95,43230,43231],{"class":97,"line":2586},[95,43232,32149],{"class":164},[95,43234,43235],{"class":97,"line":2592},[95,43236,32154],{"class":164},[95,43238,43239],{"class":97,"line":2598},[95,43240,2382],{"emptyLinePlaceholder":21},[95,43242,43243],{"class":97,"line":2603},[95,43244,32163],{"class":164},[95,43246,43247,43249,43251],{"class":97,"line":7931},[95,43248,31932],{"class":101},[95,43250,32170],{"class":1945},[95,43252,32173],{"class":105},[95,43254,43255,43257,43259,43261,43263,43265,43267,43269,43271],{"class":97,"line":7955},[95,43256,31222],{"class":105},[95,43258,151],{"class":101},[95,43260,30436],{"class":105},[95,43262,31229],{"class":210},[95,43264,1686],{"class":101},[95,43266,31234],{"class":105},[95,43268,1683],{"class":101},[95,43270,32192],{"class":210},[95,43272,112],{"class":105},[95,43274,43275],{"class":97,"line":7960},[95,43276,2382],{"emptyLinePlaceholder":21},[95,43278,43279],{"class":97,"line":7966},[95,43280,2382],{"emptyLinePlaceholder":21},[95,43282,43283],{"class":97,"line":7993},[95,43284,32207],{"class":164},[95,43286,43287],{"class":97,"line":7998},[95,43288,32212],{"class":164},[95,43290,43291],{"class":97,"line":8004},[95,43292,32217],{"class":164},[95,43294,43295,43297,43299,43301,43303,43305,43307],{"class":97,"line":8016},[95,43296,32222],{"class":105},[95,43298,151],{"class":101},[95,43300,32227],{"class":105},[95,43302,32230],{"class":5199},[95,43304,151],{"class":101},[95,43306,32235],{"class":154},[95,43308,112],{"class":105},[95,43310,43311],{"class":97,"line":8028},[95,43312,2382],{"emptyLinePlaceholder":21},[95,43314,43315],{"class":97,"line":8040},[95,43316,32246],{"class":164},[95,43318,43319,43321,43323],{"class":97,"line":9699},[95,43320,32251],{"class":105},[95,43322,151],{"class":101},[95,43324,32256],{"class":105},[95,43326,43327],{"class":97,"line":9724},[95,43328,2382],{"emptyLinePlaceholder":21},[95,43330,43331],{"class":97,"line":9747},[95,43332,32265],{"class":164},[95,43334,43335,43337,43339],{"class":97,"line":9771},[95,43336,31274],{"class":105},[95,43338,151],{"class":101},[95,43340,32274],{"class":105},[95,43342,43343],{"class":97,"line":9776},[95,43344,32279],{"class":164},[95,43346,43347],{"class":97,"line":9781},[95,43348,32284],{"class":164},[95,43350,43351],{"class":97,"line":9786},[95,43352,32289],{"class":164},[95,43354,43355,43357,43359],{"class":97,"line":9795},[95,43356,32294],{"class":105},[95,43358,151],{"class":101},[95,43360,32299],{"class":105},[95,43362,43363],{"class":97,"line":9800},[95,43364,2382],{"emptyLinePlaceholder":21},[95,43366,43367],{"class":97,"line":9806},[95,43368,2382],{"emptyLinePlaceholder":21},[95,43370,43371],{"class":97,"line":9827},[95,43372,32312],{"class":164},[95,43374,43375],{"class":97,"line":9833},[95,43376,32317],{"class":164},[95,43378,43379,43381,43383],{"class":97,"line":9847},[95,43380,32322],{"class":105},[95,43382,151],{"class":101},[95,43384,32327],{"class":154},[95,43386,43387],{"class":97,"line":9853},[95,43388,32332],{"class":164},[95,43390,43391,43393,43395],{"class":97,"line":9880},[95,43392,32337],{"class":105},[95,43394,151],{"class":101},[95,43396,32342],{"class":105},[95,43398,43399],{"class":97,"line":9889},[95,43400,32347],{"class":164},[95,43402,43403,43405,43407],{"class":97,"line":9895},[95,43404,32352],{"class":105},[95,43406,151],{"class":101},[95,43408,32342],{"class":105},[95,43410,43411],{"class":97,"line":9903},[95,43412,32361],{"class":164},[95,43414,43415,43417,43419],{"class":97,"line":9908},[95,43416,32366],{"class":105},[95,43418,151],{"class":101},[95,43420,32342],{"class":105},[95,43422,43423],{"class":97,"line":16587},[95,43424,32375],{"class":164},[95,43426,43427,43429,43431],{"class":97,"line":16593},[95,43428,32380],{"class":105},[95,43430,151],{"class":101},[95,43432,32342],{"class":105},[95,43434,43435],{"class":97,"line":16616},[95,43436,2382],{"emptyLinePlaceholder":21},[95,43438,43439],{"class":97,"line":16622},[95,43440,32393],{"class":164},[95,43442,43443,43445,43447],{"class":97,"line":16645},[95,43444,32398],{"class":105},[95,43446,151],{"class":101},[95,43448,32403],{"class":105},[95,43450,43451],{"class":97,"line":16659},[95,43452,2382],{"emptyLinePlaceholder":21},[95,43454,43455],{"class":97,"line":16679},[95,43456,2382],{"emptyLinePlaceholder":21},[95,43458,43459],{"class":97,"line":16685},[95,43460,32416],{"class":164},[95,43462,43463,43465,43467,43469,43471],{"class":97,"line":16696},[95,43464,3183],{"class":101},[95,43466,32423],{"class":105},[95,43468,26028],{"class":101},[95,43470,32428],{"class":154},[95,43472,32431],{"class":105},[95,43474,43475,43477,43479,43481,43483,43485,43487,43489,43491,43493,43495],{"class":97,"line":16719},[95,43476,32436],{"class":154},[95,43478,106],{"class":105},[95,43480,32441],{"class":210},[95,43482,32444],{"class":154},[95,43484,690],{"class":210},[95,43486,32444],{"class":154},[95,43488,357],{"class":210},[95,43490,32453],{"class":105},[95,43492,638],{"class":101},[95,43494,323],{"class":154},[95,43496,30482],{"class":105},[95,43498,43499,43501,43503,43505,43507,43509],{"class":97,"line":16741},[95,43500,32436],{"class":154},[95,43502,106],{"class":105},[95,43504,32468],{"class":210},[95,43506,561],{"class":101},[95,43508,552],{"class":154},[95,43510,112],{"class":105},[95,43512,43513],{"class":97,"line":16746},[95,43514,2382],{"emptyLinePlaceholder":21},[95,43516,43517],{"class":97,"line":16752},[95,43518,32483],{"class":164},[95,43520,43521],{"class":97,"line":16766},[95,43522,32488],{"class":164},[95,43524,43525,43527,43529],{"class":97,"line":16779},[95,43526,32493],{"class":105},[95,43528,151],{"class":101},[95,43530,32327],{"class":154},[95,43532,43533],{"class":97,"line":16784},[95,43534,32502],{"class":164},[95,43536,43537,43539,43541],{"class":97,"line":16798},[95,43538,32507],{"class":105},[95,43540,151],{"class":101},[95,43542,3067],{"class":154},[95,43544,43545],{"class":97,"line":16803},[95,43546,32516],{"class":164},[95,43548,43549,43551,43553],{"class":97,"line":16809},[95,43550,32521],{"class":105},[95,43552,151],{"class":101},[95,43554,32327],{"class":154},[95,43556,43557],{"class":97,"line":16814},[95,43558,32530],{"class":164},[95,43560,43561,43563,43565],{"class":97,"line":16828},[95,43562,32535],{"class":105},[95,43564,151],{"class":101},[95,43566,3067],{"class":154},[95,43568,43569],{"class":97,"line":16833},[95,43570,32544],{"class":164},[95,43572,43573,43575,43577],{"class":97,"line":16838},[95,43574,32549],{"class":105},[95,43576,151],{"class":101},[95,43578,3067],{"class":154},[95,43580,43581],{"class":97,"line":16852},[95,43582,32558],{"class":164},[95,43584,43585,43587,43589],{"class":97,"line":16864},[95,43586,32563],{"class":105},[95,43588,151],{"class":101},[95,43590,3067],{"class":154},[95,43592,43593],{"class":97,"line":16869},[95,43594,32572],{"class":164},[95,43596,43597,43599,43601,43603,43605],{"class":97,"line":16882},[95,43598,3385],{"class":101},[95,43600,31586],{"class":105},[95,43602,26028],{"class":101},[95,43604,31591],{"class":154},[95,43606,32585],{"class":105},[95,43608,43609],{"class":97,"line":16887},[95,43610,32590],{"class":164},[95,43612,43613,43615,43617],{"class":97,"line":16892},[95,43614,32595],{"class":105},[95,43616,151],{"class":101},[95,43618,32600],{"class":105},[95,43620,43621],{"class":97,"line":16897},[95,43622,32605],{"class":164},[95,43624,43625,43627,43629],{"class":97,"line":16910},[95,43626,32610],{"class":105},[95,43628,151],{"class":101},[95,43630,32615],{"class":105},[95,43632,43633],{"class":97,"line":16915},[95,43634,32621],{"class":164},[95,43636,43637],{"class":97,"line":32618},[95,43638,32627],{"class":105},[95,43640,43641],{"class":97,"line":32624},[95,43642,32633],{"class":164},[95,43644,43645],{"class":97,"line":32630},[95,43646,32639],{"class":164},[95,43648,43649,43651,43653],{"class":97,"line":32636},[95,43650,32645],{"class":105},[95,43652,151],{"class":101},[95,43654,32650],{"class":105},[95,43656,43657],{"class":97,"line":32642},[95,43658,32656],{"class":164},[95,43660,43661,43663,43665,43667,43669,43671,43673],{"class":97,"line":32653},[95,43662,32662],{"class":105},[95,43664,151],{"class":101},[95,43666,32667],{"class":105},[95,43668,32670],{"class":5199},[95,43670,151],{"class":101},[95,43672,323],{"class":154},[95,43674,112],{"class":105},[95,43676,43677],{"class":97,"line":32659},[95,43678,32682],{"class":164},[95,43680,43681,43683,43685],{"class":97,"line":32679},[95,43682,32688],{"class":105},[95,43684,151],{"class":101},[95,43686,32693],{"class":105},[95,43688,43689],{"class":97,"line":32685},[95,43690,32699],{"class":164},[95,43692,43693],{"class":97,"line":32696},[95,43694,32705],{"class":105},[95,43696,43697],{"class":97,"line":32702},[95,43698,32711],{"class":164},[95,43700,43701],{"class":97,"line":32708},[95,43702,32717],{"class":105},[95,43704,43705],{"class":97,"line":32714},[95,43706,32723],{"class":164},[95,43708,43709],{"class":97,"line":32720},[95,43710,32729],{"class":105},[95,43712,43713],{"class":97,"line":32726},[95,43714,32735],{"class":164},[95,43716,43717,43719,43721,43723,43725,43727,43729],{"class":97,"line":32732},[95,43718,32741],{"class":105},[95,43720,9460],{"class":101},[95,43722,32746],{"class":105},[95,43724,561],{"class":101},[95,43726,32751],{"class":105},[95,43728,297],{"class":154},[95,43730,112],{"class":105},[95,43732,43733],{"class":97,"line":32738},[95,43734,32761],{"class":164},[95,43736,43737,43739,43741,43743,43745],{"class":97,"line":32758},[95,43738,32767],{"class":105},[95,43740,9460],{"class":101},[95,43742,32772],{"class":105},[95,43744,2931],{"class":101},[95,43746,32777],{"class":105},[95,43748,43749],{"class":97,"line":32764},[95,43750,32783],{"class":164},[95,43752,43753,43755,43757,43759,43761],{"class":97,"line":32780},[95,43754,32789],{"class":105},[95,43756,9460],{"class":101},[95,43758,32751],{"class":105},[95,43760,297],{"class":154},[95,43762,112],{"class":105},[95,43764,43765],{"class":97,"line":32786},[95,43766,32803],{"class":164},[95,43768,43769,43771,43773,43775,43777],{"class":97,"line":32800},[95,43770,3385],{"class":101},[95,43772,32811],{"class":105},[95,43774,26028],{"class":101},[95,43776,31591],{"class":154},[95,43778,32818],{"class":105},[95,43780,43781],{"class":97,"line":32806},[95,43782,32824],{"class":164},[95,43784,43785,43787,43789],{"class":97,"line":32821},[95,43786,32595],{"class":105},[95,43788,151],{"class":101},[95,43790,32600],{"class":105},[95,43792,43793],{"class":97,"line":32827},[95,43794,32839],{"class":164},[95,43796,43797,43799,43801],{"class":97,"line":32836},[95,43798,32610],{"class":105},[95,43800,151],{"class":101},[95,43802,32615],{"class":105},[95,43804,43805],{"class":97,"line":32842},[95,43806,32854],{"class":164},[95,43808,43809],{"class":97,"line":32851},[95,43810,32860],{"class":105},[95,43812,43813],{"class":97,"line":32857},[95,43814,36341],{"class":164},[95,43816,43817,43819],{"class":97,"line":32863},[95,43818,32866],{"class":101},[95,43820,32869],{"class":105},[95,43822,43823],{"class":97,"line":32872},[95,43824,32875],{"class":164},[95,43826,43827,43829,43831],{"class":97,"line":32878},[95,43828,36356],{"class":105},[95,43830,151],{"class":101},[95,43832,32650],{"class":105},[95,43834,43835],{"class":97,"line":32889},[95,43836,32892],{"class":164},[95,43838,43839,43841,43843,43845,43847,43849,43851],{"class":97,"line":32895},[95,43840,36369],{"class":105},[95,43842,151],{"class":101},[95,43844,32667],{"class":105},[95,43846,32670],{"class":5199},[95,43848,151],{"class":101},[95,43850,323],{"class":154},[95,43852,112],{"class":105},[95,43854,43855],{"class":97,"line":32914},[95,43856,32917],{"class":164},[95,43858,43859,43861,43863],{"class":97,"line":32920},[95,43860,36390],{"class":105},[95,43862,151],{"class":101},[95,43864,32693],{"class":105},[95,43866,43867],{"class":97,"line":32931},[95,43868,32934],{"class":164},[95,43870,43871,43873,43875,43877,43879,43881,43883],{"class":97,"line":32937},[95,43872,36403],{"class":105},[95,43874,9460],{"class":101},[95,43876,36408],{"class":105},[95,43878,561],{"class":101},[95,43880,32751],{"class":105},[95,43882,297],{"class":154},[95,43884,112],{"class":105},[95,43886,43887,43889,43891,43893,43895],{"class":97,"line":32957},[95,43888,36421],{"class":105},[95,43890,9460],{"class":101},[95,43892,32772],{"class":105},[95,43894,2931],{"class":101},[95,43896,32777],{"class":105},[95,43898,43899],{"class":97,"line":32973},[95,43900,36434],{"class":164},[95,43902,43903,43905,43907,43909,43911],{"class":97,"line":32979},[95,43904,36439],{"class":105},[95,43906,9460],{"class":101},[95,43908,32751],{"class":105},[95,43910,297],{"class":154},[95,43912,112],{"class":105},[95,43914,43915],{"class":97,"line":32993},[95,43916,32996],{"class":164},[95,43918,43919],{"class":97,"line":32999},[95,43920,33002],{"class":164},[95,43922,43923,43925,43927],{"class":97,"line":33005},[95,43924,33008],{"class":105},[95,43926,690],{"class":101},[95,43928,33013],{"class":105},[95,43930,43931],{"class":97,"line":33016},[95,43932,33019],{"class":164},[95,43934,43935],{"class":97,"line":33022},[95,43936,33025],{"class":164},[95,43938,43939,43941,43943],{"class":97,"line":33028},[95,43940,33031],{"class":105},[95,43942,690],{"class":101},[95,43944,33013],{"class":105},[95,43946,43947],{"class":97,"line":33038},[95,43948,33041],{"class":164},[95,43950,43951,43953,43955],{"class":97,"line":33044},[95,43952,33047],{"class":105},[95,43954,690],{"class":101},[95,43956,33052],{"class":105},[95,43958,43959],{"class":97,"line":33055},[95,43960,33058],{"class":164},[95,43962,43963,43965,43967],{"class":97,"line":33061},[95,43964,33064],{"class":105},[95,43966,690],{"class":101},[95,43968,33052],{"class":105},[95,43970,43971],{"class":97,"line":33071},[95,43972,2382],{"emptyLinePlaceholder":21},[95,43974,43975],{"class":97,"line":33076},[95,43976,33079],{"class":164},[95,43978,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017],{"class":97,"line":33082},[95,43980,32436],{"class":154},[95,43982,106],{"class":105},[95,43984,3574],{"class":210},[95,43986,32444],{"class":154},[95,43988,33093],{"class":210},[95,43990,1002],{"class":154},[95,43992,33098],{"class":101},[95,43994,1052],{"class":154},[95,43996,33103],{"class":210},[95,43998,1002],{"class":154},[95,44000,33098],{"class":101},[95,44002,1052],{"class":154},[95,44004,3574],{"class":210},[95,44006,33114],{"class":105},[95,44008,638],{"class":101},[95,44010,323],{"class":154},[95,44012,33121],{"class":105},[95,44014,638],{"class":101},[95,44016,323],{"class":154},[95,44018,33128],{"class":105},[95,44020,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059],{"class":97,"line":33131},[95,44022,32436],{"class":154},[95,44024,106],{"class":105},[95,44026,3574],{"class":210},[95,44028,32444],{"class":154},[95,44030,33142],{"class":210},[95,44032,1002],{"class":154},[95,44034,33098],{"class":101},[95,44036,1052],{"class":154},[95,44038,33151],{"class":210},[95,44040,1002],{"class":154},[95,44042,33098],{"class":101},[95,44044,1052],{"class":154},[95,44046,3574],{"class":210},[95,44048,33162],{"class":105},[95,44050,638],{"class":101},[95,44052,323],{"class":154},[95,44054,33169],{"class":105},[95,44056,638],{"class":101},[95,44058,323],{"class":154},[95,44060,33128],{"class":105},[95,44062,44063],{"class":97,"line":33178},[95,44064,2382],{"emptyLinePlaceholder":21},[95,44066,44067],{"class":97,"line":33183},[95,44068,33186],{"class":164},[95,44070,44071,44073,44075,44077,44079,44081,44083],{"class":97,"line":33189},[95,44072,2479],{"class":101},[95,44074,33194],{"class":105},[95,44076,638],{"class":101},[95,44078,323],{"class":154},[95,44080,1046],{"class":105},[95,44082,1066],{"class":101},[95,44084,33205],{"class":105},[95,44086,44087],{"class":97,"line":33208},[95,44088,33211],{"class":164},[95,44090,44091,44093,44095,44097,44099,44101,44103],{"class":97,"line":33214},[95,44092,33217],{"class":105},[95,44094,145],{"class":154},[95,44096,151],{"class":101},[95,44098,33224],{"class":105},[95,44100,638],{"class":101},[95,44102,323],{"class":154},[95,44104,33231],{"class":105},[95,44106,44107],{"class":97,"line":33234},[95,44108,33237],{"class":164},[95,44110,44111],{"class":97,"line":33240},[95,44112,33243],{"class":164},[95,44114,44115,44117,44119],{"class":97,"line":33246},[95,44116,33249],{"class":105},[95,44118,151],{"class":101},[95,44120,32299],{"class":105},[95,44122,44123],{"class":97,"line":33256},[95,44124,2382],{"emptyLinePlaceholder":21},[95,44126,44127],{"class":97,"line":33261},[95,44128,33264],{"class":164},[95,44130,44131,44133,44135,44137,44139],{"class":97,"line":33267},[95,44132,33270],{"class":105},[95,44134,151],{"class":101},[95,44136,33275],{"class":105},[95,44138,638],{"class":101},[95,44140,33280],{"class":105},[95,44142,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177],{"class":97,"line":33283},[95,44144,32436],{"class":154},[95,44146,106],{"class":105},[95,44148,33290],{"class":210},[95,44150,1002],{"class":154},[95,44152,33295],{"class":101},[95,44154,1052],{"class":154},[95,44156,650],{"class":210},[95,44158,1002],{"class":154},[95,44160,33295],{"class":101},[95,44162,1052],{"class":154},[95,44164,33308],{"class":210},[95,44166,33311],{"class":105},[95,44168,33314],{"class":101},[95,44170,1013],{"class":154},[95,44172,33319],{"class":105},[95,44174,434],{"class":101},[95,44176,1013],{"class":154},[95,44178,30482],{"class":105},[95,44180,44181],{"class":97,"line":33328},[95,44182,36718],{"class":164},[95,44184,44185],{"class":97,"line":33334},[95,44186,36723],{"class":164},[95,44188,44189,44191,44193],{"class":97,"line":33340},[95,44190,36728],{"class":105},[95,44192,33352],{"class":210},[95,44194,112],{"class":105},[95,44196,44197],{"class":97,"line":33346},[95,44198,33372],{"class":164},[95,44200,44201,44203,44205,44207,44209,44211],{"class":97,"line":33357},[95,44202,33378],{"class":105},[95,44204,151],{"class":101},[95,44206,33383],{"class":105},[95,44208,33386],{"class":5199},[95,44210,151],{"class":101},[95,44212,1528],{"class":105},[95,44214,44215,44217,44219,44221],{"class":97,"line":33363},[95,44216,33396],{"class":210},[95,44218,965],{"class":105},[95,44220,33401],{"class":154},[95,44222,33404],{"class":105},[95,44224,44225,44227],{"class":97,"line":33369},[95,44226,33410],{"class":210},[95,44228,33413],{"class":105},[95,44230,44231,44233],{"class":97,"line":33375},[95,44232,33419],{"class":210},[95,44234,33422],{"class":105},[95,44236,44237,44239],{"class":97,"line":33393},[95,44238,33428],{"class":210},[95,44240,33431],{"class":105},[95,44242,44243,44245],{"class":97,"line":33407},[95,44244,33437],{"class":210},[95,44246,33440],{"class":105},[95,44248,44249],{"class":97,"line":33416},[95,44250,33446],{"class":105},[95,44252,44253],{"class":97,"line":33425},[95,44254,33452],{"class":164},[95,44256,44257,44259],{"class":97,"line":33434},[95,44258,4072],{"class":101},[95,44260,33460],{"class":105},[95,44262,44263],{"class":97,"line":33443},[95,44264,2382],{"emptyLinePlaceholder":21},[95,44266,44267],{"class":97,"line":33449},[95,44268,33471],{"class":164},[95,44270,44271,44273,44275],{"class":97,"line":33455},[95,44272,31932],{"class":101},[95,44274,33479],{"class":1945},[95,44276,33482],{"class":105},[95,44278,44279],{"class":97,"line":33463},[95,44280,33488],{"class":164},[95,44282,44283,44285,44287,44289,44291,44293,44295,44297],{"class":97,"line":33468},[95,44284,33494],{"class":105},[95,44286,31678],{"class":5199},[95,44288,151],{"class":101},[95,44290,106],{"class":105},[95,44292,604],{"class":154},[95,44294,484],{"class":105},[95,44296,399],{"class":154},[95,44298,30482],{"class":105},[95,44300,44301],{"class":97,"line":33474},[95,44302,33514],{"class":164},[95,44304,44305],{"class":97,"line":33485},[95,44306,33520],{"class":164},[95,44308,44309],{"class":97,"line":33491},[95,44310,33526],{"class":164},[95,44312,44313,44315,44317,44319,44321,44323,44325],{"class":97,"line":33511},[95,44314,31712],{"class":105},[95,44316,323],{"class":154},[95,44318,484],{"class":105},[95,44320,183],{"class":154},[95,44322,484],{"class":105},[95,44324,323],{"class":154},[95,44326,112],{"class":105},[95,44328,44329],{"class":97,"line":33517},[95,44330,33549],{"class":164},[95,44332,44333],{"class":97,"line":33523},[95,44334,33555],{"class":164},[95,44336,44337],{"class":97,"line":33529},[95,44338,33561],{"class":164},[95,44340,44341],{"class":97,"line":33546},[95,44342,33567],{"class":164},[95,44344,44345],{"class":97,"line":33552},[95,44346,33573],{"class":164},[95,44348,44349,44351,44353,44355,44357,44359,44361,44363,44365],{"class":97,"line":33558},[95,44350,33579],{"class":105},[95,44352,33582],{"class":210},[95,44354,33585],{"class":105},[95,44356,33588],{"class":210},[95,44358,484],{"class":105},[95,44360,33593],{"class":5199},[95,44362,151],{"class":101},[95,44364,33598],{"class":210},[95,44366,112],{"class":105},[95,44368,44369,44371,44373,44375,44377,44379,44381,44383,44385],{"class":97,"line":33564},[95,44370,33579],{"class":105},[95,44372,33582],{"class":210},[95,44374,33610],{"class":105},[95,44376,33613],{"class":210},[95,44378,484],{"class":105},[95,44380,33593],{"class":5199},[95,44382,151],{"class":101},[95,44384,33622],{"class":210},[95,44386,112],{"class":105},[95,44388,44389],{"class":97,"line":33570},[95,44390,33630],{"class":164},[95,44392,44393],{"class":97,"line":33576},[95,44394,33636],{"class":105},[95,44396,44397],{"class":97,"line":33603},[95,44398,33642],{"class":164},[95,44400,44401,44403,44405],{"class":97,"line":33627},[95,44402,33648],{"class":105},[95,44404,33651],{"class":210},[95,44406,112],{"class":105},[95,44408,44409,44411,44413],{"class":97,"line":33633},[95,44410,33659],{"class":105},[95,44412,33662],{"class":210},[95,44414,112],{"class":105},[95,44416,44417],{"class":97,"line":33639},[95,44418,33670],{"class":164},[95,44420,44421,44423,44425,44427,44429,44431,44433],{"class":97,"line":33645},[95,44422,31712],{"class":105},[95,44424,323],{"class":154},[95,44426,484],{"class":105},[95,44428,183],{"class":154},[95,44430,484],{"class":105},[95,44432,183],{"class":154},[95,44434,112],{"class":105},[95,44436,44437,44439,44441,44443,44445,44447,44449,44451,44453],{"class":97,"line":33656},[95,44438,33579],{"class":105},[95,44440,33582],{"class":210},[95,44442,33697],{"class":105},[95,44444,33588],{"class":210},[95,44446,484],{"class":105},[95,44448,33593],{"class":5199},[95,44450,151],{"class":101},[95,44452,33708],{"class":210},[95,44454,112],{"class":105},[95,44456,44457,44459,44461,44463,44465,44467,44469,44471,44473],{"class":97,"line":33667},[95,44458,33579],{"class":105},[95,44460,33582],{"class":210},[95,44462,33720],{"class":105},[95,44464,33613],{"class":210},[95,44466,484],{"class":105},[95,44468,33593],{"class":5199},[95,44470,151],{"class":101},[95,44472,33731],{"class":210},[95,44474,112],{"class":105},[95,44476,44477],{"class":97,"line":33673},[95,44478,33739],{"class":164},[95,44480,44481],{"class":97,"line":33690},[95,44482,33636],{"class":105},[95,44484,44485,44487,44489],{"class":97,"line":33713},[95,44486,33648],{"class":105},[95,44488,33582],{"class":210},[95,44490,112],{"class":105},[95,44492,44493,44495,44497],{"class":97,"line":33736},[95,44494,33659],{"class":105},[95,44496,33761],{"class":210},[95,44498,112],{"class":105},[95,44500,44501],{"class":97,"line":33742},[95,44502,33769],{"class":105},[95,44504,44505],{"class":97,"line":33747},[95,44506,2382],{"emptyLinePlaceholder":21},[95,44508,44509],{"class":97,"line":33756},[95,44510,33780],{"class":164},[95,44512,44513,44515,44517,44519,44521],{"class":97,"line":33766},[95,44514,1513],{"class":101},[95,44516,31205],{"class":154},[95,44518,2931],{"class":101},[95,44520,31210],{"class":210},[95,44522,3721],{"class":105},[95,44524,44525],{"class":97,"line":33772},[95,44526,33799],{"class":164},[95,44528,44529,44532,44534],{"class":97,"line":33777},[95,44530,44531],{"class":105},"    GoogLeNet",[95,44533,151],{"class":101},[95,44535,44536],{"class":105},"GoogLeNet(Inception)\n",[95,44538,44539,44541,44543],{"class":97,"line":33783},[95,44540,33816],{"class":105},[95,44542,151],{"class":101},[95,44544,33821],{"class":105},[95,44546,44547,44549,44551,44554,44556,44558,44560],{"class":97,"line":33796},[95,44548,33378],{"class":105},[95,44550,151],{"class":101},[95,44552,44553],{"class":105},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[95,44555,33834],{"class":5199},[95,44557,151],{"class":101},[95,44559,1057],{"class":154},[95,44561,112],{"class":105},[95,44563,44564],{"class":97,"line":33802},[95,44565,33846],{"class":105},[49,44567,44568],{"start":1161},[52,44569,40559],{},[86,44571,44573],{"className":30363,"code":44572,"language":30365,"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",[92,44574,44575,44581,44591,44601,44605,44615,44626,44630,44634,44638,44646,44662,44672,44688,44698,44712,44716,44726,44736,44746,44752,44756,44760,44768,44772,44788,44796,44800,44804,44812,44820,44824,44828,44832,44836,44842,44846,44856,44864,44872,44876,44880,44884,44892,44896,44912,44916,44920,44924,44936,44940,44952,44956,44960,44972,44976,44986,44990,44994,45006,45010,45018,45022,45026,45034,45038,45046,45050,45054,45058,45062,45066,45082,45090,45094,45098,45146,45152,45156,45166,45174,45182,45186,45190,45194,45198,45206,45210,45226,45230,45238,45246],{"__ignoreMap":14},[95,44576,44577,44579],{"class":97,"line":98},[95,44578,30377],{"class":101},[95,44580,30380],{"class":105},[95,44582,44583,44585,44587,44589],{"class":97,"line":15},[95,44584,30377],{"class":101},[95,44586,31400],{"class":105},[95,44588,31368],{"class":101},[95,44590,31405],{"class":105},[95,44592,44593,44595,44597,44599],{"class":97,"line":1161},[95,44594,30722],{"class":101},[95,44596,31383],{"class":105},[95,44598,30377],{"class":101},[95,44600,31388],{"class":105},[95,44602,44603],{"class":97,"line":1176},[95,44604,33907],{"class":164},[95,44606,44607,44609,44611,44613],{"class":97,"line":1182},[95,44608,30722],{"class":101},[95,44610,31353],{"class":105},[95,44612,30377],{"class":101},[95,44614,31358],{"class":105},[95,44616,44617,44619,44621,44623],{"class":97,"line":1196},[95,44618,30722],{"class":101},[95,44620,31899],{"class":105},[95,44622,30377],{"class":101},[95,44624,44625],{"class":105}," GoogLeNet,Inception\n",[95,44627,44628],{"class":97,"line":1202},[95,44629,2382],{"emptyLinePlaceholder":21},[95,44631,44632],{"class":97,"line":1293},[95,44633,2382],{"emptyLinePlaceholder":21},[95,44635,44636],{"class":97,"line":1299},[95,44637,33936],{"class":164},[95,44639,44640,44642,44644],{"class":97,"line":1311},[95,44641,31932],{"class":101},[95,44643,33943],{"class":1945},[95,44645,31938],{"class":105},[95,44647,44648,44650,44652,44654,44656,44658,44660],{"class":97,"line":1594},[95,44649,33950],{"class":105},[95,44651,151],{"class":101},[95,44653,31440],{"class":105},[95,44655,31443],{"class":5199},[95,44657,151],{"class":101},[95,44659,31448],{"class":210},[95,44661,31451],{"class":105},[95,44663,44664,44666,44668,44670],{"class":97,"line":1599},[95,44665,33967],{"class":5199},[95,44667,151],{"class":101},[95,44669,33972],{"class":154},[95,44671,31451],{"class":105},[95,44673,44674,44676,44678,44680,44682,44684,44686],{"class":97,"line":1605},[95,44675,33979],{"class":5199},[95,44677,151],{"class":101},[95,44679,31478],{"class":105},[95,44681,31481],{"class":5199},[95,44683,151],{"class":101},[95,44685,35434],{"class":154},[95,44687,31489],{"class":105},[95,44689,44690,44692,44694,44696],{"class":97,"line":1610},[95,44691,33996],{"class":5199},[95,44693,151],{"class":101},[95,44695,31461],{"class":154},[95,44697,112],{"class":105},[95,44699,44700,44702,44704,44706,44708,44710],{"class":97,"line":1624},[95,44701,34007],{"class":105},[95,44703,151],{"class":101},[95,44705,31519],{"class":105},[95,44707,31522],{"class":5199},[95,44709,151],{"class":101},[95,44711,34018],{"class":105},[95,44713,44714],{"class":97,"line":1629},[95,44715,34023],{"class":164},[95,44717,44718,44720,44722,44724],{"class":97,"line":1635},[95,44719,34028],{"class":5199},[95,44721,151],{"class":101},[95,44723,323],{"class":154},[95,44725,31451],{"class":105},[95,44727,44728,44730,44732,44734],{"class":97,"line":1656},[95,44729,34039],{"class":5199},[95,44731,151],{"class":101},[95,44733,31461],{"class":154},[95,44735,31451],{"class":105},[95,44737,44738,44740,44742,44744],{"class":97,"line":1661},[95,44739,34050],{"class":5199},[95,44741,151],{"class":101},[95,44743,297],{"class":154},[95,44745,112],{"class":105},[95,44747,44748,44750],{"class":97,"line":1675},[95,44749,4072],{"class":101},[95,44751,34063],{"class":105},[95,44753,44754],{"class":97,"line":1680},[95,44755,2382],{"emptyLinePlaceholder":21},[95,44757,44758],{"class":97,"line":1709},[95,44759,34072],{"class":164},[95,44761,44762,44764,44766],{"class":97,"line":1714},[95,44763,31932],{"class":101},[95,44765,34079],{"class":1945},[95,44767,34082],{"class":105},[95,44769,44770],{"class":97,"line":1731},[95,44771,34087],{"class":164},[95,44773,44774,44776,44778,44780,44782,44784,44786],{"class":97,"line":1736},[95,44775,31222],{"class":105},[95,44777,151],{"class":101},[95,44779,31229],{"class":210},[95,44781,1686],{"class":101},[95,44783,31234],{"class":105},[95,44785,1683],{"class":101},[95,44787,34104],{"class":210},[95,44789,44790,44792,44794],{"class":97,"line":1741},[95,44791,31274],{"class":105},[95,44793,151],{"class":101},[95,44795,32274],{"class":105},[95,44797,44798],{"class":97,"line":1746},[95,44799,2382],{"emptyLinePlaceholder":21},[95,44801,44802],{"class":97,"line":1760},[95,44803,34121],{"class":164},[95,44805,44806,44808,44810],{"class":97,"line":1765},[95,44807,34126],{"class":105},[95,44809,151],{"class":101},[95,44811,32327],{"class":154},[95,44813,44814,44816,44818],{"class":97,"line":2559},[95,44815,34135],{"class":105},[95,44817,151],{"class":101},[95,44819,3067],{"class":154},[95,44821,44822],{"class":97,"line":2573},[95,44823,2382],{"emptyLinePlaceholder":21},[95,44825,44826],{"class":97,"line":2581},[95,44827,34148],{"class":164},[95,44829,44830],{"class":97,"line":2586},[95,44831,34153],{"class":164},[95,44833,44834],{"class":97,"line":2592},[95,44835,34158],{"class":164},[95,44837,44838,44840],{"class":97,"line":2598},[95,44839,34163],{"class":101},[95,44841,32869],{"class":105},[95,44843,44844],{"class":97,"line":2603},[95,44845,34170],{"class":164},[95,44847,44848,44850,44852,44854],{"class":97,"line":7931},[95,44849,3385],{"class":101},[95,44851,34177],{"class":105},[95,44853,26028],{"class":101},[95,44855,34182],{"class":105},[95,44857,44858,44860,44862],{"class":97,"line":7955},[95,44859,34187],{"class":105},[95,44861,151],{"class":101},[95,44863,34192],{"class":105},[95,44865,44866,44868,44870],{"class":97,"line":7960},[95,44867,34197],{"class":105},[95,44869,151],{"class":101},[95,44871,34202],{"class":105},[95,44873,44874],{"class":97,"line":7966},[95,44875,34207],{"class":164},[95,44877,44878],{"class":97,"line":7993},[95,44879,32860],{"class":105},[95,44881,44882],{"class":97,"line":7998},[95,44883,34216],{"class":164},[95,44885,44886,44888,44890],{"class":97,"line":8004},[95,44887,32645],{"class":105},[95,44889,151],{"class":101},[95,44891,34225],{"class":105},[95,44893,44894],{"class":97,"line":8016},[95,44895,34230],{"class":164},[95,44897,44898,44900,44902,44904,44906,44908,44910],{"class":97,"line":8028},[95,44899,32662],{"class":105},[95,44901,151],{"class":101},[95,44903,32667],{"class":105},[95,44905,32670],{"class":5199},[95,44907,151],{"class":101},[95,44909,323],{"class":154},[95,44911,112],{"class":105},[95,44913,44914],{"class":97,"line":8040},[95,44915,34251],{"class":164},[95,44917,44918],{"class":97,"line":9699},[95,44919,34256],{"class":164},[95,44921,44922],{"class":97,"line":9724},[95,44923,34261],{"class":164},[95,44925,44926,44928,44930,44932,44934],{"class":97,"line":9747},[95,44927,34266],{"class":105},[95,44929,9460],{"class":101},[95,44931,32772],{"class":105},[95,44933,2931],{"class":101},[95,44935,34275],{"class":105},[95,44937,44938],{"class":97,"line":9771},[95,44939,34280],{"class":164},[95,44941,44942,44944,44946,44948,44950],{"class":97,"line":9776},[95,44943,34285],{"class":105},[95,44945,9460],{"class":101},[95,44947,34290],{"class":105},[95,44949,297],{"class":154},[95,44951,112],{"class":105},[95,44953,44954],{"class":97,"line":9781},[95,44955,2382],{"emptyLinePlaceholder":21},[95,44957,44958],{"class":97,"line":9786},[95,44959,34303],{"class":164},[95,44961,44962,44964,44966,44968,44970],{"class":97,"line":9795},[95,44963,34308],{"class":105},[95,44965,151],{"class":101},[95,44967,34313],{"class":105},[95,44969,690],{"class":101},[95,44971,34318],{"class":105},[95,44973,44974],{"class":97,"line":9800},[95,44975,34323],{"class":164},[95,44977,44978,44980,44982,44984],{"class":97,"line":9806},[95,44979,32436],{"class":154},[95,44981,106],{"class":105},[95,44983,34332],{"class":210},[95,44985,34335],{"class":105},[95,44987,44988],{"class":97,"line":9827},[95,44989,2382],{"emptyLinePlaceholder":21},[95,44991,44992],{"class":97,"line":9833},[95,44993,34344],{"class":164},[95,44995,44996,44998,45000,45002,45004],{"class":97,"line":9847},[95,44997,1513],{"class":101},[95,44999,31205],{"class":154},[95,45001,2931],{"class":101},[95,45003,31210],{"class":210},[95,45005,3721],{"class":105},[95,45007,45008],{"class":97,"line":9853},[95,45009,34361],{"class":164},[95,45011,45012,45014,45016],{"class":97,"line":9880},[95,45013,31274],{"class":105},[95,45015,151],{"class":101},[95,45017,44536],{"class":105},[95,45019,45020],{"class":97,"line":9889},[95,45021,34374],{"class":164},[95,45023,45024],{"class":97,"line":9895},[95,45025,34379],{"class":164},[95,45027,45028,45030,45032],{"class":97,"line":9903},[95,45029,34384],{"class":105},[95,45031,34387],{"class":210},[95,45033,30482],{"class":105},[95,45035,45036],{"class":97,"line":9908},[95,45037,34394],{"class":164},[95,45039,45040,45042,45044],{"class":97,"line":16587},[95,45041,34007],{"class":105},[95,45043,151],{"class":101},[95,45045,34403],{"class":105},[95,45047,45048],{"class":97,"line":16593},[95,45049,34408],{"class":164},[95,45051,45052],{"class":97,"line":16616},[95,45053,34413],{"class":105},[95,45055,45056],{"class":97,"line":16622},[95,45057,2382],{"emptyLinePlaceholder":21},[95,45059,45060],{"class":97,"line":16645},[95,45061,34422],{"class":164},[95,45063,45064],{"class":97,"line":16659},[95,45065,34427],{"class":164},[95,45067,45068,45070,45072,45074,45076,45078,45080],{"class":97,"line":16679},[95,45069,31222],{"class":105},[95,45071,151],{"class":101},[95,45073,31229],{"class":210},[95,45075,1686],{"class":101},[95,45077,31234],{"class":105},[95,45079,1683],{"class":101},[95,45081,34104],{"class":210},[95,45083,45084,45086,45088],{"class":97,"line":16685},[95,45085,31274],{"class":105},[95,45087,151],{"class":101},[95,45089,32274],{"class":105},[95,45091,45092],{"class":97,"line":16696},[95,45093,34456],{"class":164},[95,45095,45096],{"class":97,"line":16719},[95,45097,34461],{"class":164},[95,45099,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144],{"class":97,"line":16741},[95,45101,34466],{"class":105},[95,45103,151],{"class":101},[95,45105,996],{"class":105},[95,45107,34473],{"class":210},[95,45109,484],{"class":105},[95,45111,34478],{"class":210},[95,45113,484],{"class":105},[95,45115,34483],{"class":210},[95,45117,484],{"class":105},[95,45119,34488],{"class":210},[95,45121,484],{"class":105},[95,45123,34493],{"class":210},[95,45125,484],{"class":105},[95,45127,34498],{"class":210},[95,45129,484],{"class":105},[95,45131,34503],{"class":210},[95,45133,484],{"class":105},[95,45135,34508],{"class":210},[95,45137,484],{"class":105},[95,45139,34513],{"class":210},[95,45141,484],{"class":105},[95,45143,34518],{"class":210},[95,45145,33231],{"class":105},[95,45147,45148,45150],{"class":97,"line":16746},[95,45149,34163],{"class":101},[95,45151,32869],{"class":105},[95,45153,45154],{"class":97,"line":16752},[95,45155,34531],{"class":164},[95,45157,45158,45160,45162,45164],{"class":97,"line":16766},[95,45159,3385],{"class":101},[95,45161,34538],{"class":105},[95,45163,26028],{"class":101},[95,45165,34182],{"class":105},[95,45167,45168,45170,45172],{"class":97,"line":16779},[95,45169,32595],{"class":105},[95,45171,151],{"class":101},[95,45173,32600],{"class":105},[95,45175,45176,45178,45180],{"class":97,"line":16784},[95,45177,32610],{"class":105},[95,45179,151],{"class":101},[95,45181,32615],{"class":105},[95,45183,45184],{"class":97,"line":16798},[95,45185,2382],{"emptyLinePlaceholder":21},[95,45187,45188],{"class":97,"line":16803},[95,45189,34567],{"class":164},[95,45191,45192],{"class":97,"line":16809},[95,45193,32860],{"class":105},[95,45195,45196],{"class":97,"line":16814},[95,45197,34576],{"class":164},[95,45199,45200,45202,45204],{"class":97,"line":16828},[95,45201,32645],{"class":105},[95,45203,151],{"class":101},[95,45205,32650],{"class":105},[95,45207,45208],{"class":97,"line":16833},[95,45209,34589],{"class":164},[95,45211,45212,45214,45216,45218,45220,45222,45224],{"class":97,"line":16838},[95,45213,32662],{"class":105},[95,45215,151],{"class":101},[95,45217,32667],{"class":105},[95,45219,32670],{"class":5199},[95,45221,151],{"class":101},[95,45223,323],{"class":154},[95,45225,112],{"class":105},[95,45227,45228],{"class":97,"line":16852},[95,45229,34610],{"class":164},[95,45231,45232,45234,45236],{"class":97,"line":16864},[95,45233,34615],{"class":105},[95,45235,151],{"class":101},[95,45237,34620],{"class":105},[95,45239,45240,45242,45244],{"class":97,"line":16869},[95,45241,34625],{"class":105},[95,45243,151],{"class":101},[95,45245,34630],{"class":105},[95,45247,45248,45250,45252,45254,45256,45258,45260,45262],{"class":97,"line":16882},[95,45249,34635],{"class":154},[95,45251,106],{"class":105},[95,45253,34640],{"class":210},[95,45255,34643],{"class":105},[95,45257,34646],{"class":210},[95,45259,484],{"class":105},[95,45261,34651],{"class":210},[95,45263,34654],{"class":105},[66,45265,45267],{"id":45266},"_24训练自己的数据集","2.4.训练自己的数据集",[10,45269,45270],{},"猫狗分类任务",[10,45272,45273],{},"划分数据集和验证集",[86,45275,45277],{"className":30363,"code":45276,"language":30365,"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",[92,45278,45279,45284,45291,45296,45307,45314,45318,45328,45342,45351,45355,45360,45370,45390,45394,45399,45409,45420,45433,45437,45442,45451,45461,45472,45476,45481,45491,45495,45500,45505,45510,45515,45520,45524,45534,45561,45574,45586,45613,45618,45623,45637,45642,45654,45669,45684,45692,45696,45701,45707,45719,45732,45737,45742,45747,45797,45803,45807],{"__ignoreMap":14},[95,45280,45281],{"class":97,"line":98},[95,45282,45283],{"class":164},"# 创建脚本，用于划分数据集和验证集\n",[95,45285,45286,45288],{"class":97,"line":15},[95,45287,30377],{"class":101},[95,45289,45290],{"class":105}," os\n",[95,45292,45293],{"class":97,"line":1161},[95,45294,45295],{"class":164},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[95,45297,45298,45300,45303,45305],{"class":97,"line":1176},[95,45299,30722],{"class":101},[95,45301,45302],{"class":105}," shutil ",[95,45304,30377],{"class":101},[95,45306,31807],{"class":105},[95,45308,45309,45311],{"class":97,"line":1182},[95,45310,30377],{"class":101},[95,45312,45313],{"class":105}," random\n",[95,45315,45316],{"class":97,"line":1196},[95,45317,2382],{"emptyLinePlaceholder":21},[95,45319,45320,45322,45325],{"class":97,"line":1202},[95,45321,31932],{"class":101},[95,45323,45324],{"class":1945}," mkfile",[95,45326,45327],{"class":105},"(file):\n",[95,45329,45330,45332,45334,45337,45340],{"class":97,"line":1293},[95,45331,3083],{"class":101},[95,45333,38915],{"class":101},[95,45335,45336],{"class":105}," os.path.exists(",[95,45338,45339],{"class":5199},"file",[95,45341,30771],{"class":105},[95,45343,45344,45347,45349],{"class":97,"line":1299},[95,45345,45346],{"class":105},"        os.makedirs(",[95,45348,45339],{"class":5199},[95,45350,112],{"class":105},[95,45352,45353],{"class":97,"line":1311},[95,45354,2382],{"emptyLinePlaceholder":21},[95,45356,45357],{"class":97,"line":1594},[95,45358,45359],{"class":164},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[95,45361,45362,45365,45367],{"class":97,"line":1599},[95,45363,45364],{"class":105},"file_path",[95,45366,151],{"class":101},[95,45368,45369],{"class":210},"'data_cat_dog'\n",[95,45371,45372,45375,45377,45380,45382,45385,45387],{"class":97,"line":1605},[95,45373,45374],{"class":105},"flower_class",[95,45376,151],{"class":101},[95,45378,45379],{"class":105},"[cla ",[95,45381,3007],{"class":101},[95,45383,45384],{"class":105}," cla ",[95,45386,26028],{"class":101},[95,45388,45389],{"class":105}," os.listdir(file_path)]\n",[95,45391,45392],{"class":97,"line":1610},[95,45393,2382],{"emptyLinePlaceholder":21},[95,45395,45396],{"class":97,"line":1624},[95,45397,45398],{"class":164},"# 创建训练集train文件夹\n",[95,45400,45401,45404,45407],{"class":97,"line":1629},[95,45402,45403],{"class":105},"mkfile(",[95,45405,45406],{"class":210},"'data\u002Ftrain'",[95,45408,112],{"class":105},[95,45410,45411,45413,45415,45417],{"class":97,"line":1635},[95,45412,3007],{"class":101},[95,45414,45384],{"class":105},[95,45416,26028],{"class":101},[95,45418,45419],{"class":105}," flower_class:\n",[95,45421,45422,45425,45428,45430],{"class":97,"line":1656},[95,45423,45424],{"class":105},"    mkfile(",[95,45426,45427],{"class":210},"'data\u002Ftrain\u002F'",[95,45429,587],{"class":101},[95,45431,45432],{"class":105},"cla)\n",[95,45434,45435],{"class":97,"line":1661},[95,45436,2382],{"emptyLinePlaceholder":21},[95,45438,45439],{"class":97,"line":1675},[95,45440,45441],{"class":164},"# 创建验证集val文件夹\n",[95,45443,45444,45446,45449],{"class":97,"line":1680},[95,45445,45403],{"class":105},[95,45447,45448],{"class":210},"'data\u002Ftest'",[95,45450,112],{"class":105},[95,45452,45453,45455,45457,45459],{"class":97,"line":1709},[95,45454,3007],{"class":101},[95,45456,45384],{"class":105},[95,45458,26028],{"class":101},[95,45460,45419],{"class":105},[95,45462,45463,45465,45468,45470],{"class":97,"line":1714},[95,45464,45424],{"class":105},[95,45466,45467],{"class":210},"'data\u002Ftest\u002F'",[95,45469,587],{"class":101},[95,45471,45432],{"class":105},[95,45473,45474],{"class":97,"line":1731},[95,45475,2382],{"emptyLinePlaceholder":21},[95,45477,45478],{"class":97,"line":1736},[95,45479,45480],{"class":164},"# 划分比例，训练集：测试集=9：1\n",[95,45482,45483,45486,45488],{"class":97,"line":1741},[95,45484,45485],{"class":105},"split_rate",[95,45487,151],{"class":101},[95,45489,45490],{"class":154},"0.1\n",[95,45492,45493],{"class":97,"line":1746},[95,45494,2382],{"emptyLinePlaceholder":21},[95,45496,45497],{"class":97,"line":1760},[95,45498,45499],{"class":164},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[95,45501,45502],{"class":97,"line":1765},[95,45503,45504],{"class":164},"# cla_path：当前类别的原始图片路径\n",[95,45506,45507],{"class":97,"line":2559},[95,45508,45509],{"class":164},"# images：当前类别下所有图片的文件名列表\n",[95,45511,45512],{"class":97,"line":2573},[95,45513,45514],{"class":164},"# num：该类别图片总数\n",[95,45516,45517],{"class":97,"line":2581},[95,45518,45519],{"class":164},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[95,45521,45522],{"class":97,"line":2586},[95,45523,2382],{"emptyLinePlaceholder":21},[95,45525,45526,45528,45530,45532],{"class":97,"line":2592},[95,45527,3007],{"class":101},[95,45529,45384],{"class":105},[95,45531,26028],{"class":101},[95,45533,45419],{"class":105},[95,45535,45536,45539,45541,45544,45546,45549,45552,45554,45556,45558],{"class":97,"line":2598},[95,45537,45538],{"class":105},"    cla_path ",[95,45540,151],{"class":101},[95,45542,45543],{"class":105}," file_path ",[95,45545,587],{"class":101},[95,45547,45548],{"class":210}," '\u002F'",[95,45550,45551],{"class":101}," +",[95,45553,45384],{"class":105},[95,45555,587],{"class":101},[95,45557,45548],{"class":210},[95,45559,45560],{"class":164},"  # 某一类别的子目录\n",[95,45562,45563,45566,45568,45571],{"class":97,"line":2603},[95,45564,45565],{"class":105},"    images ",[95,45567,151],{"class":101},[95,45569,45570],{"class":105}," os.listdir(cla_path)  ",[95,45572,45573],{"class":164},"# iamges 列表存储了该目录下所有图像的名称\n",[95,45575,45576,45579,45581,45583],{"class":97,"line":7931},[95,45577,45578],{"class":105},"    num ",[95,45580,151],{"class":101},[95,45582,7314],{"class":154},[95,45584,45585],{"class":105},"(images)\n",[95,45587,45588,45591,45593,45596,45598,45600,45602,45605,45607,45610],{"class":97,"line":7955},[95,45589,45590],{"class":105},"    eval_index ",[95,45592,151],{"class":101},[95,45594,45595],{"class":105}," random.sample(images, ",[95,45597,599],{"class":5199},[95,45599,151],{"class":101},[95,45601,109],{"class":154},[95,45603,45604],{"class":105},"(num ",[95,45606,561],{"class":101},[95,45608,45609],{"class":105}," split_rate))  ",[95,45611,45612],{"class":164},"# 从images列表中随机抽取 k 个图像名称\n",[95,45614,45615],{"class":97,"line":7960},[95,45616,45617],{"class":164},"    # 遍历该类别下的所有图片\n",[95,45619,45620],{"class":97,"line":7966},[95,45621,45622],{"class":164},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[95,45624,45625,45627,45630,45632,45634],{"class":97,"line":7993},[95,45626,3183],{"class":101},[95,45628,45629],{"class":105}," index, image ",[95,45631,26028],{"class":101},[95,45633,31591],{"class":154},[95,45635,45636],{"class":105},"(images):\n",[95,45638,45639],{"class":97,"line":7998},[95,45640,45641],{"class":164},"        # eval_index 中保存验证集val的图像名称\n",[95,45643,45644,45646,45649,45651],{"class":97,"line":8004},[95,45645,2479],{"class":101},[95,45647,45648],{"class":105}," image ",[95,45650,26028],{"class":101},[95,45652,45653],{"class":105}," eval_index:\n",[95,45655,45656,45659,45661,45664,45666],{"class":97,"line":8016},[95,45657,45658],{"class":105},"            image_path ",[95,45660,151],{"class":101},[95,45662,45663],{"class":105}," cla_path ",[95,45665,587],{"class":101},[95,45667,45668],{"class":105}," image\n",[95,45670,45671,45674,45676,45679,45681],{"class":97,"line":8028},[95,45672,45673],{"class":105},"            new_path ",[95,45675,151],{"class":101},[95,45677,45678],{"class":210}," 'data\u002Ftest\u002F'",[95,45680,45551],{"class":101},[95,45682,45683],{"class":105}," cla\n",[95,45685,45686,45689],{"class":97,"line":8040},[95,45687,45688],{"class":105},"            copy(image_path, new_path)  ",[95,45690,45691],{"class":164},"# 将选中的图像复制到新路径\n",[95,45693,45694],{"class":97,"line":9699},[95,45695,2382],{"emptyLinePlaceholder":21},[95,45697,45698],{"class":97,"line":9724},[95,45699,45700],{"class":164},"        # 其余的图像保存在训练集train中\n",[95,45702,45703,45705],{"class":97,"line":9747},[95,45704,2516],{"class":101},[95,45706,3721],{"class":105},[95,45708,45709,45711,45713,45715,45717],{"class":97,"line":9771},[95,45710,45658],{"class":105},[95,45712,151],{"class":101},[95,45714,45663],{"class":105},[95,45716,587],{"class":101},[95,45718,45668],{"class":105},[95,45720,45721,45723,45725,45728,45730],{"class":97,"line":9776},[95,45722,45673],{"class":105},[95,45724,151],{"class":101},[95,45726,45727],{"class":210}," 'data\u002Ftrain\u002F'",[95,45729,45551],{"class":101},[95,45731,45683],{"class":105},[95,45733,45734],{"class":97,"line":9781},[95,45735,45736],{"class":105},"            copy(image_path, new_path)\n",[95,45738,45739],{"class":97,"line":9786},[95,45740,45741],{"class":164},"            # 打印进度条信息\n",[95,45743,45744],{"class":97,"line":9795},[95,45745,45746],{"class":164},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[95,45748,45749,45751,45753,45755,45758,45760,45762,45765,45767,45769,45771,45774,45777,45779,45781,45784,45787,45789,45791,45794],{"class":97,"line":9800},[95,45750,32436],{"class":154},[95,45752,106],{"class":105},[95,45754,357],{"class":210},[95,45756,45757],{"class":154},"\\r",[95,45759,996],{"class":210},[95,45761,32444],{"class":154},[95,45763,45764],{"class":210},"] processing [",[95,45766,32444],{"class":154},[95,45768,690],{"class":210},[95,45770,32444],{"class":154},[95,45772,45773],{"class":210},"]\"",[95,45775,45776],{"class":105},".format(cla, index ",[95,45778,587],{"class":101},[95,45780,25103],{"class":154},[95,45782,45783],{"class":105},", num), ",[95,45785,45786],{"class":5199},"end",[95,45788,151],{"class":101},[95,45790,7635],{"class":210},[95,45792,45793],{"class":105},")  ",[95,45795,45796],{"class":164},"# processing bar\n",[95,45798,45799,45801],{"class":97,"line":9806},[95,45800,31284],{"class":154},[95,45802,1958],{"class":105},[95,45804,45805],{"class":97,"line":9827},[95,45806,2382],{"emptyLinePlaceholder":21},[95,45808,45809,45811,45813,45816],{"class":97,"line":9833},[95,45810,30400],{"class":154},[95,45812,106],{"class":105},[95,45814,45815],{"class":210},"\"processing done!\"",[95,45817,112],{"class":105},[10,45819,45820],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21981,45822,45824],{"id":45823},"_242模型代码","2.4.2.模型代码",[10,45826,45827],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[86,45829,45831],{"className":30363,"code":45830,"language":30365,"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",[92,45832,45833,45839,45849,45859,45863,45879,45887,45901,45911,45915,45945,45949,45983,46029,46033,46067,46113,46117,46121,46155,46185,46189,46197,46211,46233,46255,46273,46277,46291,46295,46299,46315,46319,46327,46341,46351,46395,46399,46427,46431,46441,46469,46473,46509,46513,46541,46545,46555,46587,46619,46647,46651,46661,46693,46725,46757,46789,46821,46849,46853,46863,46895,46927,46939,46943,46955,46959,46963,46975,46983,47003,47007,47011,47015,47019,47023,47027,47041,47049,47057,47069,47083,47091,47095,47103,47113,47123,47133,47143,47153,47159,47163,47167,47179,47199,47207],{"__ignoreMap":14},[95,45834,45835,45837],{"class":97,"line":98},[95,45836,30377],{"class":101},[95,45838,30380],{"class":105},[95,45840,45841,45843,45845,45847],{"class":97,"line":15},[95,45842,30722],{"class":101},[95,45844,30725],{"class":105},[95,45846,30377],{"class":101},[95,45848,30730],{"class":105},[95,45850,45851,45853,45855,45857],{"class":97,"line":1161},[95,45852,30722],{"class":101},[95,45854,30742],{"class":105},[95,45856,30377],{"class":101},[95,45858,30747],{"class":105},[95,45860,45861],{"class":97,"line":1176},[95,45862,2382],{"emptyLinePlaceholder":21},[95,45864,45865,45867,45869,45871,45873,45875,45877],{"class":97,"line":1182},[95,45866,14677],{"class":101},[95,45868,41478],{"class":1945},[95,45870,106],{"class":105},[95,45872,30763],{"class":1945},[95,45874,664],{"class":105},[95,45876,30768],{"class":1945},[95,45878,30771],{"class":105},[95,45880,45881,45883,45885],{"class":97,"line":1196},[95,45882,30786],{"class":101},[95,45884,30789],{"class":154},[95,45886,41497],{"class":105},[95,45888,45889,45891,45893,45895,45897,45899],{"class":97,"line":1202},[95,45890,30802],{"class":154},[95,45892,41504],{"class":105},[95,45894,30808],{"class":154},[95,45896,30811],{"class":105},[95,45898,30814],{"class":154},[95,45900,1958],{"class":105},[95,45902,45903,45905,45907,45909],{"class":97,"line":1293},[95,45904,30830],{"class":154},[95,45906,34756],{"class":105},[95,45908,151],{"class":101},[95,45910,34761],{"class":105},[95,45912,45913],{"class":97,"line":1299},[95,45914,41527],{"class":164},[95,45916,45917,45919,45921,45923,45925,45927,45929,45931,45933,45935,45937,45939,45941,45943],{"class":97,"line":1311},[95,45918,30830],{"class":154},[95,45920,41534],{"class":105},[95,45922,151],{"class":101},[95,45924,30838],{"class":105},[95,45926,30841],{"class":5199},[95,45928,151],{"class":101},[95,45930,41545],{"class":105},[95,45932,30850],{"class":5199},[95,45934,151],{"class":101},[95,45936,41552],{"class":105},[95,45938,30859],{"class":5199},[95,45940,151],{"class":101},[95,45942,323],{"class":154},[95,45944,112],{"class":105},[95,45946,45947],{"class":97,"line":1594},[95,45948,41565],{"class":164},[95,45950,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981],{"class":97,"line":1599},[95,45952,30830],{"class":154},[95,45954,41572],{"class":105},[95,45956,151],{"class":101},[95,45958,30838],{"class":105},[95,45960,30841],{"class":5199},[95,45962,151],{"class":101},[95,45964,41545],{"class":105},[95,45966,30850],{"class":5199},[95,45968,151],{"class":101},[95,45970,41589],{"class":105},[95,45972,297],{"class":154},[95,45974,41594],{"class":105},[95,45976,30859],{"class":5199},[95,45978,151],{"class":101},[95,45980,323],{"class":154},[95,45982,112],{"class":105},[95,45984,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027],{"class":97,"line":1605},[95,45986,30830],{"class":154},[95,45988,41609],{"class":105},[95,45990,151],{"class":101},[95,45992,30838],{"class":105},[95,45994,30841],{"class":5199},[95,45996,151],{"class":101},[95,45998,41589],{"class":105},[95,46000,297],{"class":154},[95,46002,41594],{"class":105},[95,46004,30850],{"class":5199},[95,46006,151],{"class":101},[95,46008,41589],{"class":105},[95,46010,323],{"class":154},[95,46012,41594],{"class":105},[95,46014,30859],{"class":5199},[95,46016,151],{"class":101},[95,46018,177],{"class":154},[95,46020,484],{"class":105},[95,46022,30868],{"class":5199},[95,46024,151],{"class":101},[95,46026,323],{"class":154},[95,46028,112],{"class":105},[95,46030,46031],{"class":97,"line":1610},[95,46032,41654],{"class":164},[95,46034,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065],{"class":97,"line":1624},[95,46036,30830],{"class":154},[95,46038,41661],{"class":105},[95,46040,151],{"class":101},[95,46042,30838],{"class":105},[95,46044,30841],{"class":5199},[95,46046,151],{"class":101},[95,46048,41545],{"class":105},[95,46050,30850],{"class":5199},[95,46052,151],{"class":101},[95,46054,41678],{"class":105},[95,46056,297],{"class":154},[95,46058,41594],{"class":105},[95,46060,30859],{"class":5199},[95,46062,151],{"class":101},[95,46064,323],{"class":154},[95,46066,112],{"class":105},[95,46068,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111],{"class":97,"line":1629},[95,46070,30830],{"class":154},[95,46072,41697],{"class":105},[95,46074,151],{"class":101},[95,46076,30838],{"class":105},[95,46078,30841],{"class":5199},[95,46080,151],{"class":101},[95,46082,41678],{"class":105},[95,46084,297],{"class":154},[95,46086,41594],{"class":105},[95,46088,30850],{"class":5199},[95,46090,151],{"class":101},[95,46092,41678],{"class":105},[95,46094,323],{"class":154},[95,46096,41594],{"class":105},[95,46098,30859],{"class":5199},[95,46100,151],{"class":101},[95,46102,425],{"class":154},[95,46104,484],{"class":105},[95,46106,30868],{"class":5199},[95,46108,151],{"class":101},[95,46110,183],{"class":154},[95,46112,112],{"class":105},[95,46114,46115],{"class":97,"line":1635},[95,46116,41742],{"class":164},[95,46118,46119],{"class":97,"line":1656},[95,46120,41747],{"class":164},[95,46122,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153],{"class":97,"line":1661},[95,46124,30830],{"class":154},[95,46126,41754],{"class":105},[95,46128,151],{"class":101},[95,46130,34814],{"class":105},[95,46132,30859],{"class":5199},[95,46134,151],{"class":101},[95,46136,177],{"class":154},[95,46138,484],{"class":105},[95,46140,30914],{"class":5199},[95,46142,151],{"class":101},[95,46144,323],{"class":154},[95,46146,484],{"class":105},[95,46148,30868],{"class":5199},[95,46150,151],{"class":101},[95,46152,323],{"class":154},[95,46154,112],{"class":105},[95,46156,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183],{"class":97,"line":1675},[95,46158,30830],{"class":154},[95,46160,41789],{"class":105},[95,46162,151],{"class":101},[95,46164,30838],{"class":105},[95,46166,30841],{"class":5199},[95,46168,151],{"class":101},[95,46170,41545],{"class":105},[95,46172,30850],{"class":5199},[95,46174,151],{"class":101},[95,46176,41806],{"class":105},[95,46178,30859],{"class":5199},[95,46180,151],{"class":101},[95,46182,323],{"class":154},[95,46184,112],{"class":105},[95,46186,46187],{"class":97,"line":1680},[95,46188,2382],{"emptyLinePlaceholder":21},[95,46190,46191,46193,46195],{"class":97,"line":1709},[95,46192,30786],{"class":101},[95,46194,31078],{"class":1945},[95,46196,31081],{"class":105},[95,46198,46199,46201,46203,46205,46207,46209],{"class":97,"line":1714},[95,46200,41831],{"class":105},[95,46202,151],{"class":101},[95,46204,30808],{"class":154},[95,46206,35169],{"class":105},[95,46208,30808],{"class":154},[95,46210,41842],{"class":105},[95,46212,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231],{"class":97,"line":1731},[95,46214,7068],{"class":105},[95,46216,151],{"class":101},[95,46218,30808],{"class":154},[95,46220,35169],{"class":105},[95,46222,30808],{"class":154},[95,46224,41857],{"class":105},[95,46226,30808],{"class":154},[95,46228,35169],{"class":105},[95,46230,30808],{"class":154},[95,46232,41866],{"class":105},[95,46234,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253],{"class":97,"line":1736},[95,46236,41871],{"class":105},[95,46238,151],{"class":101},[95,46240,30808],{"class":154},[95,46242,35169],{"class":105},[95,46244,30808],{"class":154},[95,46246,41882],{"class":105},[95,46248,30808],{"class":154},[95,46250,35169],{"class":105},[95,46252,30808],{"class":154},[95,46254,41891],{"class":105},[95,46256,46257,46259,46261,46263,46265,46267,46269,46271],{"class":97,"line":1741},[95,46258,41896],{"class":105},[95,46260,151],{"class":101},[95,46262,30808],{"class":154},[95,46264,35169],{"class":105},[95,46266,30808],{"class":154},[95,46268,41907],{"class":105},[95,46270,30808],{"class":154},[95,46272,41912],{"class":105},[95,46274,46275],{"class":97,"line":1746},[95,46276,41917],{"class":164},[95,46278,46279,46281,46283,46285,46287,46289],{"class":97,"line":1760},[95,46280,14735],{"class":101},[95,46282,41924],{"class":105},[95,46284,32670],{"class":5199},[95,46286,151],{"class":101},[95,46288,323],{"class":154},[95,46290,112],{"class":105},[95,46292,46293],{"class":97,"line":1765},[95,46294,2382],{"emptyLinePlaceholder":21},[95,46296,46297],{"class":97,"line":2559},[95,46298,41945],{"class":164},[95,46300,46301,46303,46305,46307,46309,46311,46313],{"class":97,"line":2573},[95,46302,14677],{"class":101},[95,46304,41952],{"class":1945},[95,46306,106],{"class":105},[95,46308,30763],{"class":1945},[95,46310,664],{"class":105},[95,46312,30768],{"class":1945},[95,46314,30771],{"class":105},[95,46316,46317],{"class":97,"line":2581},[95,46318,41967],{"class":164},[95,46320,46321,46323,46325],{"class":97,"line":2586},[95,46322,30786],{"class":101},[95,46324,30789],{"class":154},[95,46326,41976],{"class":105},[95,46328,46329,46331,46333,46335,46337,46339],{"class":97,"line":2592},[95,46330,30802],{"class":154},[95,46332,41983],{"class":105},[95,46334,30808],{"class":154},[95,46336,30811],{"class":105},[95,46338,30814],{"class":154},[95,46340,1958],{"class":105},[95,46342,46343,46345,46347,46349],{"class":97,"line":2598},[95,46344,30830],{"class":154},[95,46346,41998],{"class":105},[95,46348,151],{"class":101},[95,46350,37994],{"class":105},[95,46352,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393],{"class":97,"line":2603},[95,46354,37999],{"class":105},[95,46356,30841],{"class":5199},[95,46358,151],{"class":101},[95,46360,177],{"class":154},[95,46362,484],{"class":105},[95,46364,30850],{"class":5199},[95,46366,151],{"class":101},[95,46368,309],{"class":154},[95,46370,484],{"class":105},[95,46372,30859],{"class":5199},[95,46374,151],{"class":101},[95,46376,475],{"class":154},[95,46378,484],{"class":105},[95,46380,30914],{"class":5199},[95,46382,151],{"class":101},[95,46384,183],{"class":154},[95,46386,484],{"class":105},[95,46388,30868],{"class":5199},[95,46390,151],{"class":101},[95,46392,177],{"class":154},[95,46394,38032],{"class":105},[95,46396,46397],{"class":97,"line":7931},[95,46398,38037],{"class":105},[95,46400,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423,46425],{"class":97,"line":7955},[95,46402,38082],{"class":105},[95,46404,30859],{"class":5199},[95,46406,151],{"class":101},[95,46408,177],{"class":154},[95,46410,484],{"class":105},[95,46412,30914],{"class":5199},[95,46414,151],{"class":101},[95,46416,183],{"class":154},[95,46418,484],{"class":105},[95,46420,30868],{"class":5199},[95,46422,151],{"class":101},[95,46424,323],{"class":154},[95,46426,112],{"class":105},[95,46428,46429],{"class":97,"line":7960},[95,46430,38111],{"class":105},[95,46432,46433,46435,46437,46439],{"class":97,"line":7966},[95,46434,30830],{"class":154},[95,46436,42089],{"class":105},[95,46438,151],{"class":101},[95,46440,37994],{"class":105},[95,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467],{"class":97,"line":7993},[95,46444,37999],{"class":105},[95,46446,30841],{"class":5199},[95,46448,151],{"class":101},[95,46450,309],{"class":154},[95,46452,484],{"class":105},[95,46454,30850],{"class":5199},[95,46456,151],{"class":101},[95,46458,309],{"class":154},[95,46460,484],{"class":105},[95,46462,30859],{"class":5199},[95,46464,151],{"class":101},[95,46466,323],{"class":154},[95,46468,38032],{"class":105},[95,46470,46471],{"class":97,"line":7998},[95,46472,38037],{"class":105},[95,46474,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507],{"class":97,"line":8004},[95,46476,37999],{"class":105},[95,46478,30841],{"class":5199},[95,46480,151],{"class":101},[95,46482,309],{"class":154},[95,46484,484],{"class":105},[95,46486,30850],{"class":5199},[95,46488,151],{"class":101},[95,46490,42144],{"class":154},[95,46492,484],{"class":105},[95,46494,30859],{"class":5199},[95,46496,151],{"class":101},[95,46498,177],{"class":154},[95,46500,484],{"class":105},[95,46502,30868],{"class":5199},[95,46504,151],{"class":101},[95,46506,323],{"class":154},[95,46508,38032],{"class":105},[95,46510,46511],{"class":97,"line":8016},[95,46512,38037],{"class":105},[95,46514,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539],{"class":97,"line":8028},[95,46516,38082],{"class":105},[95,46518,30859],{"class":5199},[95,46520,151],{"class":101},[95,46522,177],{"class":154},[95,46524,484],{"class":105},[95,46526,30914],{"class":5199},[95,46528,151],{"class":101},[95,46530,183],{"class":154},[95,46532,484],{"class":105},[95,46534,30868],{"class":5199},[95,46536,151],{"class":101},[95,46538,323],{"class":154},[95,46540,112],{"class":105},[95,46542,46543],{"class":97,"line":8040},[95,46544,38111],{"class":105},[95,46546,46547,46549,46551,46553],{"class":97,"line":9699},[95,46548,30830],{"class":154},[95,46550,42205],{"class":105},[95,46552,151],{"class":101},[95,46554,37994],{"class":105},[95,46556,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585],{"class":97,"line":9724},[95,46558,42214],{"class":105},[95,46560,42144],{"class":154},[95,46562,484],{"class":105},[95,46564,309],{"class":154},[95,46566,42223],{"class":105},[95,46568,315],{"class":154},[95,46570,484],{"class":105},[95,46572,32055],{"class":154},[95,46574,42232],{"class":105},[95,46576,707],{"class":154},[95,46578,484],{"class":105},[95,46580,303],{"class":154},[95,46582,42241],{"class":105},[95,46584,303],{"class":154},[95,46586,38032],{"class":105},[95,46588,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617],{"class":97,"line":9747},[95,46590,42214],{"class":105},[95,46592,34855],{"class":154},[95,46594,484],{"class":105},[95,46596,32055],{"class":154},[95,46598,42223],{"class":105},[95,46600,32055],{"class":154},[95,46602,484],{"class":105},[95,46604,42144],{"class":154},[95,46606,42232],{"class":105},[95,46608,303],{"class":154},[95,46610,484],{"class":105},[95,46612,315],{"class":154},[95,46614,42241],{"class":105},[95,46616,309],{"class":154},[95,46618,38032],{"class":105},[95,46620,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645],{"class":97,"line":9771},[95,46622,38082],{"class":105},[95,46624,30859],{"class":5199},[95,46626,151],{"class":101},[95,46628,177],{"class":154},[95,46630,484],{"class":105},[95,46632,30914],{"class":5199},[95,46634,151],{"class":101},[95,46636,183],{"class":154},[95,46638,484],{"class":105},[95,46640,30868],{"class":5199},[95,46642,151],{"class":101},[95,46644,323],{"class":154},[95,46646,112],{"class":105},[95,46648,46649],{"class":97,"line":9776},[95,46650,38111],{"class":105},[95,46652,46653,46655,46657,46659],{"class":97,"line":9781},[95,46654,30830],{"class":154},[95,46656,42316],{"class":105},[95,46658,151],{"class":101},[95,46660,37994],{"class":105},[95,46662,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691],{"class":97,"line":9786},[95,46664,42214],{"class":105},[95,46666,42327],{"class":154},[95,46668,484],{"class":105},[95,46670,42144],{"class":154},[95,46672,42223],{"class":105},[95,46674,315],{"class":154},[95,46676,484],{"class":105},[95,46678,42340],{"class":154},[95,46680,42232],{"class":105},[95,46682,707],{"class":154},[95,46684,484],{"class":105},[95,46686,713],{"class":154},[95,46688,42241],{"class":105},[95,46690,309],{"class":154},[95,46692,38032],{"class":105},[95,46694,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723],{"class":97,"line":9795},[95,46696,42214],{"class":105},[95,46698,38442],{"class":154},[95,46700,484],{"class":105},[95,46702,21031],{"class":154},[95,46704,42223],{"class":105},[95,46706,724],{"class":154},[95,46708,484],{"class":105},[95,46710,31486],{"class":154},[95,46712,42232],{"class":105},[95,46714,906],{"class":154},[95,46716,484],{"class":105},[95,46718,309],{"class":154},[95,46720,42241],{"class":105},[95,46722,309],{"class":154},[95,46724,38032],{"class":105},[95,46726,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755],{"class":97,"line":9800},[95,46728,42214],{"class":105},[95,46730,38442],{"class":154},[95,46732,484],{"class":105},[95,46734,32055],{"class":154},[95,46736,42223],{"class":105},[95,46738,32055],{"class":154},[95,46740,484],{"class":105},[95,46742,34855],{"class":154},[95,46744,42232],{"class":105},[95,46746,906],{"class":154},[95,46748,484],{"class":105},[95,46750,309],{"class":154},[95,46752,42241],{"class":105},[95,46754,309],{"class":154},[95,46756,38032],{"class":105},[95,46758,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787],{"class":97,"line":9806},[95,46760,42214],{"class":105},[95,46762,38442],{"class":154},[95,46764,484],{"class":105},[95,46766,724],{"class":154},[95,46768,42223],{"class":105},[95,46770,32055],{"class":154},[95,46772,484],{"class":105},[95,46774,42437],{"class":154},[95,46776,42232],{"class":105},[95,46778,303],{"class":154},[95,46780,484],{"class":105},[95,46782,309],{"class":154},[95,46784,42241],{"class":105},[95,46786,309],{"class":154},[95,46788,38032],{"class":105},[95,46790,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819],{"class":97,"line":9827},[95,46792,42214],{"class":105},[95,46794,42458],{"class":154},[95,46796,484],{"class":105},[95,46798,34855],{"class":154},[95,46800,42223],{"class":105},[95,46802,21031],{"class":154},[95,46804,484],{"class":105},[95,46806,42471],{"class":154},[95,46808,42232],{"class":105},[95,46810,303],{"class":154},[95,46812,484],{"class":105},[95,46814,32055],{"class":154},[95,46816,42241],{"class":105},[95,46818,32055],{"class":154},[95,46820,38032],{"class":105},[95,46822,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847],{"class":97,"line":9833},[95,46824,38082],{"class":105},[95,46826,30859],{"class":5199},[95,46828,151],{"class":101},[95,46830,177],{"class":154},[95,46832,484],{"class":105},[95,46834,30914],{"class":5199},[95,46836,151],{"class":101},[95,46838,183],{"class":154},[95,46840,484],{"class":105},[95,46842,30868],{"class":5199},[95,46844,151],{"class":101},[95,46846,323],{"class":154},[95,46848,112],{"class":105},[95,46850,46851],{"class":97,"line":9847},[95,46852,38111],{"class":105},[95,46854,46855,46857,46859,46861],{"class":97,"line":9853},[95,46856,30830],{"class":154},[95,46858,42524],{"class":105},[95,46860,151],{"class":101},[95,46862,37994],{"class":105},[95,46864,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893],{"class":97,"line":9880},[95,46866,42214],{"class":105},[95,46868,42535],{"class":154},[95,46870,484],{"class":105},[95,46872,34855],{"class":154},[95,46874,42223],{"class":105},[95,46876,21031],{"class":154},[95,46878,484],{"class":105},[95,46880,42471],{"class":154},[95,46882,42232],{"class":105},[95,46884,303],{"class":154},[95,46886,484],{"class":105},[95,46888,32055],{"class":154},[95,46890,42241],{"class":105},[95,46892,32055],{"class":154},[95,46894,38032],{"class":105},[95,46896,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925],{"class":97,"line":9889},[95,46898,42214],{"class":105},[95,46900,42535],{"class":154},[95,46902,484],{"class":105},[95,46904,34925],{"class":154},[95,46906,42223],{"class":105},[95,46908,42144],{"class":154},[95,46910,484],{"class":105},[95,46912,34925],{"class":154},[95,46914,42232],{"class":105},[95,46916,713],{"class":154},[95,46918,484],{"class":105},[95,46920,32055],{"class":154},[95,46922,42241],{"class":105},[95,46924,32055],{"class":154},[95,46926,38032],{"class":105},[95,46928,46929,46931,46933,46935,46937],{"class":97,"line":9895},[95,46930,42598],{"class":105},[95,46932,323],{"class":154},[95,46934,484],{"class":105},[95,46936,323],{"class":154},[95,46938,42607],{"class":105},[95,46940,46941],{"class":97,"line":9903},[95,46942,38775],{"class":105},[95,46944,46945,46947,46949,46951,46953],{"class":97,"line":9908},[95,46946,38780],{"class":105},[95,46948,42618],{"class":154},[95,46950,484],{"class":105},[95,46952,183],{"class":154},[95,46954,112],{"class":105},[95,46956,46957],{"class":97,"line":16587},[95,46958,38111],{"class":105},[95,46960,46961],{"class":97,"line":16593},[95,46962,42633],{"class":164},[95,46964,46965,46967,46969,46971,46973],{"class":97,"line":16616},[95,46966,3385],{"class":101},[95,46968,38853],{"class":105},[95,46970,26028],{"class":101},[95,46972,38858],{"class":154},[95,46974,38861],{"class":105},[95,46976,46977,46979,46981],{"class":97,"line":16622},[95,46978,4624],{"class":101},[95,46980,38873],{"class":154},[95,46982,38876],{"class":105},[95,46984,46985,46987,46989,46991,46993,46995,46997,46999,47001],{"class":97,"line":16645},[95,46986,38886],{"class":105},[95,46988,42660],{"class":5199},[95,46990,151],{"class":101},[95,46992,42665],{"class":210},[95,46994,484],{"class":105},[95,46996,38889],{"class":5199},[95,46998,151],{"class":101},[95,47000,38894],{"class":210},[95,47002,112],{"class":105},[95,47004,47005],{"class":97,"line":16659},[95,47006,42680],{"class":164},[95,47008,47009],{"class":97,"line":16679},[95,47010,42685],{"class":164},[95,47012,47013],{"class":97,"line":16685},[95,47014,42690],{"class":164},[95,47016,47017],{"class":97,"line":16696},[95,47018,42695],{"class":164},[95,47020,47021],{"class":97,"line":16719},[95,47022,42700],{"class":164},[95,47024,47025],{"class":97,"line":16741},[95,47026,42705],{"class":164},[95,47028,47029,47031,47033,47035,47037,47039],{"class":97,"line":16746},[95,47030,38906],{"class":101},[95,47032,38909],{"class":105},[95,47034,38912],{"class":101},[95,47036,38915],{"class":101},[95,47038,38918],{"class":154},[95,47040,3721],{"class":105},[95,47042,47043,47045,47047],{"class":97,"line":16752},[95,47044,38930],{"class":105},[95,47046,297],{"class":154},[95,47048,112],{"class":105},[95,47050,47051,47053,47055],{"class":97,"line":16766},[95,47052,42732],{"class":101},[95,47054,38873],{"class":154},[95,47056,38949],{"class":105},[95,47058,47059,47061,47063,47065,47067],{"class":97,"line":16779},[95,47060,42741],{"class":105},[95,47062,297],{"class":154},[95,47064,484],{"class":105},[95,47066,38971],{"class":154},[95,47068,112],{"class":105},[95,47070,47071,47073,47075,47077,47079,47081],{"class":97,"line":16784},[95,47072,42754],{"class":101},[95,47074,38909],{"class":105},[95,47076,38912],{"class":101},[95,47078,38915],{"class":101},[95,47080,38918],{"class":154},[95,47082,3721],{"class":105},[95,47084,47085,47087,47089],{"class":97,"line":16798},[95,47086,42769],{"class":105},[95,47088,297],{"class":154},[95,47090,112],{"class":105},[95,47092,47093],{"class":97,"line":16803},[95,47094,35150],{"class":164},[95,47096,47097,47099,47101],{"class":97,"line":16809},[95,47098,30786],{"class":101},[95,47100,31078],{"class":1945},[95,47102,31081],{"class":105},[95,47104,47105,47107,47109,47111],{"class":97,"line":16814},[95,47106,31086],{"class":105},[95,47108,151],{"class":101},[95,47110,30808],{"class":154},[95,47112,42796],{"class":105},[95,47114,47115,47117,47119,47121],{"class":97,"line":16828},[95,47116,31086],{"class":105},[95,47118,151],{"class":101},[95,47120,30808],{"class":154},[95,47122,42807],{"class":105},[95,47124,47125,47127,47129,47131],{"class":97,"line":16833},[95,47126,31086],{"class":105},[95,47128,151],{"class":101},[95,47130,30808],{"class":154},[95,47132,42818],{"class":105},[95,47134,47135,47137,47139,47141],{"class":97,"line":16838},[95,47136,31086],{"class":105},[95,47138,151],{"class":101},[95,47140,30808],{"class":154},[95,47142,42829],{"class":105},[95,47144,47145,47147,47149,47151],{"class":97,"line":16852},[95,47146,31086],{"class":105},[95,47148,151],{"class":101},[95,47150,30808],{"class":154},[95,47152,42840],{"class":105},[95,47154,47155,47157],{"class":97,"line":16864},[95,47156,14735],{"class":101},[95,47158,31194],{"class":105},[95,47160,47161],{"class":97,"line":16869},[95,47162,2382],{"emptyLinePlaceholder":21},[95,47164,47165],{"class":97,"line":16882},[95,47166,42855],{"class":164},[95,47168,47169,47171,47173,47175,47177],{"class":97,"line":16887},[95,47170,1513],{"class":101},[95,47172,31205],{"class":154},[95,47174,2931],{"class":101},[95,47176,31210],{"class":210},[95,47178,3721],{"class":105},[95,47180,47181,47183,47185,47187,47189,47191,47193,47195,47197],{"class":97,"line":16892},[95,47182,31222],{"class":105},[95,47184,151],{"class":101},[95,47186,30436],{"class":105},[95,47188,31229],{"class":210},[95,47190,1686],{"class":101},[95,47192,31234],{"class":105},[95,47194,1683],{"class":101},[95,47196,30461],{"class":210},[95,47198,112],{"class":105},[95,47200,47201,47203,47205],{"class":97,"line":16897},[95,47202,31274],{"class":105},[95,47204,151],{"class":101},[95,47206,42896],{"class":105},[95,47208,47209,47211,47213,47215,47217,47219,47221,47223],{"class":97,"line":16910},[95,47210,31284],{"class":154},[95,47212,31287],{"class":105},[95,47214,323],{"class":154},[95,47216,484],{"class":105},[95,47218,31486],{"class":154},[95,47220,484],{"class":105},[95,47222,31486],{"class":154},[95,47224,31300],{"class":105},[21981,47226,47228],{"id":47227},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[10,47230,47231],{},"计算图片的均值与方差，用于训练中归一化处理操作",[86,47233,47235],{"className":30363,"code":47234,"language":30365,"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",[92,47236,47237,47242,47255,47260,47266,47271,47281,47285,47290,47300,47304,47309,47319,47336,47340,47345,47357,47369,47400,47409,47419,47429,47433,47438,47453,47457,47462,47467,47472,47482,47487,47512,47516,47521,47536,47540,47553,47557,47562,47567,47572,47577,47582,47592,47602,47625,47633,47641,47649,47653,47665,47669,47674,47678,47682,47689,47709,47733,47740,47754,47759,47764,47768,47782,47786,47798],{"__ignoreMap":14},[95,47238,47239],{"class":97,"line":98},[95,47240,47241],{"class":164},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[95,47243,47244,47246,47249,47252],{"class":97,"line":15},[95,47245,30722],{"class":101},[95,47247,47248],{"class":154}," PIL",[95,47250,47251],{"class":101}," import",[95,47253,47254],{"class":105}," Image\n",[95,47256,47257],{"class":97,"line":1161},[95,47258,47259],{"class":164},"# os 用来处理文件夹和文件路径\n",[95,47261,47262,47264],{"class":97,"line":1176},[95,47263,30377],{"class":101},[95,47265,45290],{"class":105},[95,47267,47268],{"class":97,"line":1182},[95,47269,47270],{"class":164},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[95,47272,47273,47275,47277,47279],{"class":97,"line":1196},[95,47274,30377],{"class":101},[95,47276,31365],{"class":105},[95,47278,31368],{"class":101},[95,47280,31371],{"class":105},[95,47282,47283],{"class":97,"line":1202},[95,47284,2382],{"emptyLinePlaceholder":21},[95,47286,47287],{"class":97,"line":1293},[95,47288,47289],{"class":164},"# 文件夹路径，包含所有图片文件\n",[95,47291,47292,47295,47297],{"class":97,"line":1299},[95,47293,47294],{"class":105},"folder_path ",[95,47296,151],{"class":101},[95,47298,47299],{"class":210}," 'data_cat_dog'\n",[95,47301,47302],{"class":97,"line":1311},[95,47303,2382],{"emptyLinePlaceholder":21},[95,47305,47306],{"class":97,"line":1594},[95,47307,47308],{"class":164},"# 初始化累积变量\n",[95,47310,47311,47314,47316],{"class":97,"line":1599},[95,47312,47313],{"class":105},"total_pixels ",[95,47315,151],{"class":101},[95,47317,47318],{"class":154}," 0\n",[95,47320,47321,47324,47326,47329,47331,47333],{"class":97,"line":1605},[95,47322,47323],{"class":105},"sum_normalized_pixel_values ",[95,47325,151],{"class":101},[95,47327,47328],{"class":105}," np.zeros(",[95,47330,177],{"class":154},[95,47332,45793],{"class":105},[95,47334,47335],{"class":164},"# 如果是RGB图像，需要三个通道的均值和方差\n",[95,47337,47338],{"class":97,"line":1610},[95,47339,2382],{"emptyLinePlaceholder":21},[95,47341,47342],{"class":97,"line":1624},[95,47343,47344],{"class":164},"# 遍历文件夹中的图片文件\n",[95,47346,47347,47349,47352,47354],{"class":97,"line":1629},[95,47348,3007],{"class":101},[95,47350,47351],{"class":105}," root, dirs, files ",[95,47353,26028],{"class":101},[95,47355,47356],{"class":105}," os.walk(folder_path):\n",[95,47358,47359,47361,47364,47366],{"class":97,"line":1635},[95,47360,3183],{"class":101},[95,47362,47363],{"class":105}," filename ",[95,47365,26028],{"class":101},[95,47367,47368],{"class":105}," files:\n",[95,47370,47371,47373,47376,47379,47381,47384,47386,47389,47391,47394,47397],{"class":97,"line":1656},[95,47372,2479],{"class":101},[95,47374,47375],{"class":105}," filename.endswith((",[95,47377,47378],{"class":210},"'.jpg'",[95,47380,12418],{"class":105},[95,47382,47383],{"class":210},"'.jpeg'",[95,47385,12418],{"class":105},[95,47387,47388],{"class":210},"'.png'",[95,47390,12418],{"class":105},[95,47392,47393],{"class":210},"'.bmp'",[95,47395,47396],{"class":105},")):  ",[95,47398,47399],{"class":164},"# 可根据实际情况添加其他格式\n",[95,47401,47402,47404,47406],{"class":97,"line":1661},[95,47403,45658],{"class":105},[95,47405,151],{"class":101},[95,47407,47408],{"class":105}," os.path.join(root, filename)\n",[95,47410,47411,47414,47416],{"class":97,"line":1675},[95,47412,47413],{"class":105},"            image ",[95,47415,151],{"class":101},[95,47417,47418],{"class":105}," Image.open(image_path)\n",[95,47420,47421,47424,47426],{"class":97,"line":1680},[95,47422,47423],{"class":105},"            image_array ",[95,47425,151],{"class":101},[95,47427,47428],{"class":105}," np.array(image)\n",[95,47430,47431],{"class":97,"line":1709},[95,47432,2382],{"emptyLinePlaceholder":21},[95,47434,47435],{"class":97,"line":1714},[95,47436,47437],{"class":164},"            # 归一化像素值到0-1之间\n",[95,47439,47440,47443,47445,47448,47450],{"class":97,"line":1731},[95,47441,47442],{"class":105},"            normalized_image_array ",[95,47444,151],{"class":101},[95,47446,47447],{"class":105}," image_array ",[95,47449,690],{"class":101},[95,47451,47452],{"class":154}," 255.0\n",[95,47454,47455],{"class":97,"line":1736},[95,47456,2382],{"emptyLinePlaceholder":21},[95,47458,47459],{"class":97,"line":1741},[95,47460,47461],{"class":164},"            # print(image_path)\n",[95,47463,47464],{"class":97,"line":1746},[95,47465,47466],{"class":164},"            # print(normalized_image_array.shape)\n",[95,47468,47469],{"class":97,"line":1760},[95,47470,47471],{"class":164},"            # 累积归一化后的像素值和像素数量\n",[95,47473,47474,47477,47479],{"class":97,"line":1765},[95,47475,47476],{"class":105},"            total_pixels ",[95,47478,9460],{"class":101},[95,47480,47481],{"class":105}," normalized_image_array.size\n",[95,47483,47484],{"class":97,"line":2559},[95,47485,47486],{"class":164},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[95,47488,47489,47492,47494,47497,47500,47502,47504,47506,47508,47510],{"class":97,"line":2573},[95,47490,47491],{"class":105},"            sum_normalized_pixel_values ",[95,47493,9460],{"class":101},[95,47495,47496],{"class":105}," np.sum(normalized_image_array, ",[95,47498,47499],{"class":5199},"axis",[95,47501,151],{"class":101},[95,47503,106],{"class":105},[95,47505,297],{"class":154},[95,47507,12418],{"class":105},[95,47509,323],{"class":154},[95,47511,30482],{"class":105},[95,47513,47514],{"class":97,"line":2581},[95,47515,2382],{"emptyLinePlaceholder":21},[95,47517,47518],{"class":97,"line":2586},[95,47519,47520],{"class":164},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[95,47522,47523,47526,47528,47531,47533],{"class":97,"line":2592},[95,47524,47525],{"class":105},"mean ",[95,47527,151],{"class":101},[95,47529,47530],{"class":105}," sum_normalized_pixel_values ",[95,47532,690],{"class":101},[95,47534,47535],{"class":105}," total_pixels\n",[95,47537,47538],{"class":97,"line":2598},[95,47539,2382],{"emptyLinePlaceholder":21},[95,47541,47542,47545,47547,47549,47551],{"class":97,"line":2603},[95,47543,47544],{"class":105},"sum_squared_diff ",[95,47546,151],{"class":101},[95,47548,47328],{"class":105},[95,47550,177],{"class":154},[95,47552,112],{"class":105},[95,47554,47555],{"class":97,"line":7931},[95,47556,2382],{"emptyLinePlaceholder":21},[95,47558,47559],{"class":97,"line":7955},[95,47560,47561],{"class":164},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[95,47563,47564],{"class":97,"line":7960},[95,47565,47566],{"class":164},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[95,47568,47569],{"class":97,"line":7966},[95,47570,47571],{"class":164},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[95,47573,47574],{"class":97,"line":7993},[95,47575,47576],{"class":164},"# Image.open(image_path)：打开图片\n",[95,47578,47579],{"class":97,"line":7998},[95,47580,47581],{"class":164},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[95,47583,47584,47586,47588,47590],{"class":97,"line":8004},[95,47585,3007],{"class":101},[95,47587,47351],{"class":105},[95,47589,26028],{"class":101},[95,47591,47356],{"class":105},[95,47593,47594,47596,47598,47600],{"class":97,"line":8016},[95,47595,3183],{"class":101},[95,47597,47363],{"class":105},[95,47599,26028],{"class":101},[95,47601,47368],{"class":105},[95,47603,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622],{"class":97,"line":8028},[95,47605,2479],{"class":101},[95,47607,47375],{"class":105},[95,47609,47378],{"class":210},[95,47611,12418],{"class":105},[95,47613,47383],{"class":210},[95,47615,12418],{"class":105},[95,47617,47388],{"class":210},[95,47619,12418],{"class":105},[95,47621,47393],{"class":210},[95,47623,47624],{"class":105},")):\n",[95,47626,47627,47629,47631],{"class":97,"line":8040},[95,47628,45658],{"class":105},[95,47630,151],{"class":101},[95,47632,47408],{"class":105},[95,47634,47635,47637,47639],{"class":97,"line":9699},[95,47636,47413],{"class":105},[95,47638,151],{"class":101},[95,47640,47418],{"class":105},[95,47642,47643,47645,47647],{"class":97,"line":9724},[95,47644,47423],{"class":105},[95,47646,151],{"class":101},[95,47648,47428],{"class":105},[95,47650,47651],{"class":97,"line":9747},[95,47652,47437],{"class":164},[95,47654,47655,47657,47659,47661,47663],{"class":97,"line":9771},[95,47656,47442],{"class":105},[95,47658,151],{"class":101},[95,47660,47447],{"class":105},[95,47662,690],{"class":101},[95,47664,47452],{"class":154},[95,47666,47667],{"class":97,"line":9776},[95,47668,47466],{"class":164},[95,47670,47671],{"class":97,"line":9781},[95,47672,47673],{"class":164},"            # print(mean.shape)\n",[95,47675,47676],{"class":97,"line":9786},[95,47677,47461],{"class":164},[95,47679,47680],{"class":97,"line":9795},[95,47681,2382],{"emptyLinePlaceholder":21},[95,47683,47684,47687],{"class":97,"line":9800},[95,47685,47686],{"class":101},"            try",[95,47688,3721],{"class":105},[95,47690,47691,47694,47696,47699,47701,47704,47706],{"class":97,"line":9806},[95,47692,47693],{"class":105},"                diff ",[95,47695,151],{"class":101},[95,47697,47698],{"class":105}," (normalized_image_array ",[95,47700,638],{"class":101},[95,47702,47703],{"class":105}," mean) ",[95,47705,10644],{"class":101},[95,47707,47708],{"class":154}," 2\n",[95,47710,47711,47714,47716,47719,47721,47723,47725,47727,47729,47731],{"class":97,"line":9827},[95,47712,47713],{"class":105},"                sum_squared_diff ",[95,47715,9460],{"class":101},[95,47717,47718],{"class":105}," np.sum(diff, ",[95,47720,47499],{"class":5199},[95,47722,151],{"class":101},[95,47724,106],{"class":105},[95,47726,297],{"class":154},[95,47728,12418],{"class":105},[95,47730,323],{"class":154},[95,47732,30482],{"class":105},[95,47734,47735,47738],{"class":97,"line":9833},[95,47736,47737],{"class":101},"            except",[95,47739,3721],{"class":105},[95,47741,47742,47745,47747,47749,47752],{"class":97,"line":9847},[95,47743,47744],{"class":154},"                print",[95,47746,106],{"class":105},[95,47748,158],{"class":101},[95,47750,47751],{"class":210},"\"捕获到自定义异常\"",[95,47753,112],{"class":105},[95,47755,47756],{"class":97,"line":9853},[95,47757,47758],{"class":164},"            # diff = (normalized_image_array - mean) ** 2\n",[95,47760,47761],{"class":97,"line":9880},[95,47762,47763],{"class":164},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[95,47765,47766],{"class":97,"line":9889},[95,47767,2382],{"emptyLinePlaceholder":21},[95,47769,47770,47773,47775,47778,47780],{"class":97,"line":9895},[95,47771,47772],{"class":105},"variance ",[95,47774,151],{"class":101},[95,47776,47777],{"class":105}," sum_squared_diff ",[95,47779,690],{"class":101},[95,47781,47535],{"class":105},[95,47783,47784],{"class":97,"line":9903},[95,47785,2382],{"emptyLinePlaceholder":21},[95,47787,47788,47790,47792,47795],{"class":97,"line":9908},[95,47789,30400],{"class":154},[95,47791,106],{"class":105},[95,47793,47794],{"class":210},"\"Mean:\"",[95,47796,47797],{"class":105},", mean)\n",[95,47799,47800,47802,47804,47807],{"class":97,"line":16587},[95,47801,30400],{"class":154},[95,47803,106],{"class":105},[95,47805,47806],{"class":210},"\"Variance:\"",[95,47808,47809],{"class":105},", variance)\n",[86,47811,47813],{"className":30363,"code":47812,"language":30365,"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",[92,47814,47815,47821,47827,47837,47843,47853,47867,47877,47887,47897,47901,47911,47921,47925,47929,47937,47942,47947,47966,47970,47975,47980,47985,47990,48031,48036,48046,48051,48064,48069,48074,48079,48084,48089,48093,48098,48103,48125,48129,48161,48175,48185,48195,48199,48209,48223,48233,48243,48253,48259,48263,48267,48271,48275,48279,48287,48307,48311,48315,48319,48323,48339,48343,48347,48355,48359,48363,48371,48375,48379,48383,48391,48395,48399,48403,48411,48415,48423,48427,48435,48439,48447,48451,48459,48463,48467,48475,48479,48483,48495,48519,48533,48537,48541,48545,48553,48557,48565,48569,48577,48581,48589,48593,48601,48605,48613,48617,48629,48633,48641,48645,48653,48657,48661,48665,48669,48677,48681,48697,48701,48709,48713,48717,48721,48725,48729,48733,48737,48753,48757,48769,48773,48785,48789,48801,48805,48813,48817,48825,48829,48833,48837,48843,48847,48855,48859,48875,48879,48887,48891,48907,48919,48923,48935,48939,48943,48951,48955,48959,48967,48971,48979,48983,48991,48995,48999,49041,49083,49087,49091,49107,49111,49127,49131,49135,49143,49147,49151,49163,49201,49205,49209,49217,49221,49235,49245,49251,49257,49263,49269,49273,49277,49283,49287,49291,49299,49303,49321,49325,49329,49333,49349,49353,49357,49361,49365,49369,49389,49409,49413,49417,49421,49429,49437,49441,49457,49477,49497,49501,49506,49515,49524,49529,49534,49539,49552,49557,49566,49575,49592],{"__ignoreMap":14},[95,47816,47817,47819],{"class":97,"line":98},[95,47818,30377],{"class":101},[95,47820,31807],{"class":105},[95,47822,47823,47825],{"class":97,"line":15},[95,47824,30377],{"class":101},[95,47826,31814],{"class":105},[95,47828,47829,47831,47833,47835],{"class":97,"line":1161},[95,47830,30377],{"class":101},[95,47832,31825],{"class":105},[95,47834,31368],{"class":101},[95,47836,31830],{"class":105},[95,47838,47839,47841],{"class":97,"line":1176},[95,47840,30377],{"class":101},[95,47842,30380],{"class":105},[95,47844,47845,47847,47849,47851],{"class":97,"line":1182},[95,47846,30722],{"class":101},[95,47848,31400],{"class":105},[95,47850,30377],{"class":101},[95,47852,31847],{"class":105},[95,47854,47855,47857,47859,47861,47864],{"class":97,"line":1196},[95,47856,30722],{"class":101},[95,47858,31353],{"class":105},[95,47860,30377],{"class":101},[95,47862,47863],{"class":105}," ImageFolder ",[95,47865,47866],{"class":164},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[95,47868,47869,47871,47873,47875],{"class":97,"line":1202},[95,47870,30722],{"class":101},[95,47872,31383],{"class":105},[95,47874,30377],{"class":101},[95,47876,31388],{"class":105},[95,47878,47879,47881,47883,47885],{"class":97,"line":1293},[95,47880,30377],{"class":101},[95,47882,31400],{"class":105},[95,47884,31368],{"class":101},[95,47886,31405],{"class":105},[95,47888,47889,47891,47893,47895],{"class":97,"line":1299},[95,47890,30377],{"class":101},[95,47892,31417],{"class":105},[95,47894,31368],{"class":101},[95,47896,31422],{"class":105},[95,47898,47899],{"class":97,"line":1311},[95,47900,31892],{"class":164},[95,47902,47903,47905,47907,47909],{"class":97,"line":1594},[95,47904,30722],{"class":101},[95,47906,31899],{"class":105},[95,47908,30377],{"class":101},[95,47910,43016],{"class":105},[95,47912,47913,47915,47917,47919],{"class":97,"line":1599},[95,47914,30722],{"class":101},[95,47916,30725],{"class":105},[95,47918,30377],{"class":101},[95,47920,30730],{"class":105},[95,47922,47923],{"class":97,"line":1605},[95,47924,2382],{"emptyLinePlaceholder":21},[95,47926,47927],{"class":97,"line":1610},[95,47928,31927],{"class":164},[95,47930,47931,47933,47935],{"class":97,"line":1624},[95,47932,31932],{"class":101},[95,47934,31935],{"class":1945},[95,47936,31938],{"class":105},[95,47938,47939],{"class":97,"line":1629},[95,47940,47941],{"class":164},"    # 导入自己的数据集，并进行数据处理\n",[95,47943,47944],{"class":97,"line":1635},[95,47945,47946],{"class":164},"    # 定义数据集的路径\n",[95,47948,47949,47952,47954,47956,47958,47960,47964],{"class":97,"line":1656},[95,47950,47951],{"class":154},"    ROOT_PATH",[95,47953,151],{"class":101},[95,47955,776],{"class":101},[95,47957,357],{"class":210},[95,47959,664],{"class":154},[95,47961,47963],{"class":47962},"sA_wV","\u002Fdata\u002Ftrain",[95,47965,25118],{"class":210},[95,47967,47968],{"class":97,"line":1661},[95,47969,2382],{"emptyLinePlaceholder":21},[95,47971,47972],{"class":97,"line":1675},[95,47973,47974],{"class":164},"    # 定义归一化方法\n",[95,47976,47977],{"class":97,"line":1680},[95,47978,47979],{"class":164},"    # 这里需要先计算一下数据集的均值和方差\n",[95,47981,47982],{"class":97,"line":1709},[95,47983,47984],{"class":164},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[95,47986,47987],{"class":97,"line":1714},[95,47988,47989],{"class":164},"    # 第一个参数是均值，第二个参数是方差\n",[95,47991,47992,47995,47997,48000,48003,48005,48008,48010,48013,48016,48019,48021,48024,48026,48029],{"class":97,"line":1731},[95,47993,47994],{"class":105},"    normalize",[95,47996,151],{"class":101},[95,47998,47999],{"class":105},"transforms.Normalize([",[95,48001,48002],{"class":154},"0.162",[95,48004,484],{"class":105},[95,48006,48007],{"class":154},"0.151",[95,48009,484],{"class":105},[95,48011,48012],{"class":154},"0.138",[95,48014,48015],{"class":105},"],[",[95,48017,48018],{"class":154},"0.058",[95,48020,484],{"class":105},[95,48022,48023],{"class":154},"0.052",[95,48025,484],{"class":105},[95,48027,48028],{"class":154},"0.048",[95,48030,4639],{"class":105},[95,48032,48033],{"class":97,"line":1736},[95,48034,48035],{"class":164},"    # 定义数据集处理方法变量\n",[95,48037,48038,48041,48043],{"class":97,"line":1741},[95,48039,48040],{"class":105},"    train_transform",[95,48042,151],{"class":101},[95,48044,48045],{"class":105},"transforms.Compose([\n",[95,48047,48048],{"class":97,"line":1746},[95,48049,48050],{"class":164},"        # 调整图像大小为224*224\n",[95,48052,48053,48056,48058,48060,48062],{"class":97,"line":1760},[95,48054,48055],{"class":105},"        transforms.Resize((",[95,48057,31486],{"class":154},[95,48059,484],{"class":105},[95,48061,31486],{"class":154},[95,48063,42607],{"class":105},[95,48065,48066],{"class":97,"line":1765},[95,48067,48068],{"class":164},"        # 将图像转换为张量\n",[95,48070,48071],{"class":97,"line":2559},[95,48072,48073],{"class":105},"        transforms.ToTensor(),\n",[95,48075,48076],{"class":97,"line":2573},[95,48077,48078],{"class":105},"        normalize])\n",[95,48080,48081],{"class":97,"line":2581},[95,48082,48083],{"class":164},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[95,48085,48086],{"class":97,"line":2586},[95,48087,48088],{"class":164},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[95,48090,48091],{"class":97,"line":2592},[95,48092,2382],{"emptyLinePlaceholder":21},[95,48094,48095],{"class":97,"line":2598},[95,48096,48097],{"class":164},"    # 加载数据集\n",[95,48099,48100],{"class":97,"line":2603},[95,48101,48102],{"class":164},"    # 传入数据集路径与处理方法\n",[95,48104,48105,48107,48109,48112,48115,48117,48120,48122],{"class":97,"line":7931},[95,48106,31943],{"class":105},[95,48108,151],{"class":101},[95,48110,48111],{"class":105},"ImageFolder(",[95,48113,48114],{"class":154},"ROOT_PATH",[95,48116,484],{"class":105},[95,48118,48119],{"class":5199},"transform",[95,48121,151],{"class":101},[95,48123,48124],{"class":105},"train_transform)\n",[95,48126,48127],{"class":97,"line":7955},[95,48128,2382],{"emptyLinePlaceholder":21},[95,48130,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159],{"class":97,"line":7960},[95,48132,31995],{"class":105},[95,48134,151],{"class":101},[95,48136,32000],{"class":105},[95,48138,32003],{"class":154},[95,48140,106],{"class":105},[95,48142,32008],{"class":154},[95,48144,561],{"class":101},[95,48146,7341],{"class":154},[95,48148,32015],{"class":105},[95,48150,32003],{"class":154},[95,48152,106],{"class":105},[95,48154,32022],{"class":154},[95,48156,561],{"class":101},[95,48158,7341],{"class":154},[95,48160,32029],{"class":105},[95,48162,48163,48165,48167,48169,48171,48173],{"class":97,"line":7966},[95,48164,32034],{"class":105},[95,48166,151],{"class":101},[95,48168,32039],{"class":105},[95,48170,31522],{"class":5199},[95,48172,151],{"class":101},[95,48174,31527],{"class":105},[95,48176,48177,48179,48181,48183],{"class":97,"line":7993},[95,48178,32050],{"class":5199},[95,48180,151],{"class":101},[95,48182,303],{"class":154},[95,48184,31451],{"class":105},[95,48186,48187,48189,48191,48193],{"class":97,"line":7998},[95,48188,32062],{"class":5199},[95,48190,151],{"class":101},[95,48192,31461],{"class":154},[95,48194,31451],{"class":105},[95,48196,48197],{"class":97,"line":8004},[95,48198,32073],{"class":164},[95,48200,48201,48203,48205,48207],{"class":97,"line":8016},[95,48202,32078],{"class":5199},[95,48204,151],{"class":101},[95,48206,501],{"class":154},[95,48208,112],{"class":105},[95,48210,48211,48213,48215,48217,48219,48221],{"class":97,"line":8028},[95,48212,32089],{"class":105},[95,48214,151],{"class":101},[95,48216,31519],{"class":105},[95,48218,31522],{"class":5199},[95,48220,151],{"class":101},[95,48222,32100],{"class":105},[95,48224,48225,48227,48229,48231],{"class":97,"line":8040},[95,48226,32105],{"class":5199},[95,48228,151],{"class":101},[95,48230,303],{"class":154},[95,48232,31451],{"class":105},[95,48234,48235,48237,48239,48241],{"class":97,"line":9699},[95,48236,32116],{"class":5199},[95,48238,151],{"class":101},[95,48240,31461],{"class":154},[95,48242,31451],{"class":105},[95,48244,48245,48247,48249,48251],{"class":97,"line":9724},[95,48246,32127],{"class":5199},[95,48248,151],{"class":101},[95,48250,501],{"class":154},[95,48252,112],{"class":105},[95,48254,48255,48257],{"class":97,"line":9747},[95,48256,4072],{"class":101},[95,48258,32140],{"class":105},[95,48260,48261],{"class":97,"line":9771},[95,48262,2382],{"emptyLinePlaceholder":21},[95,48264,48265],{"class":97,"line":9776},[95,48266,32149],{"class":164},[95,48268,48269],{"class":97,"line":9781},[95,48270,32154],{"class":164},[95,48272,48273],{"class":97,"line":9786},[95,48274,2382],{"emptyLinePlaceholder":21},[95,48276,48277],{"class":97,"line":9795},[95,48278,32163],{"class":164},[95,48280,48281,48283,48285],{"class":97,"line":9800},[95,48282,31932],{"class":101},[95,48284,32170],{"class":1945},[95,48286,32173],{"class":105},[95,48288,48289,48291,48293,48295,48297,48299,48301,48303,48305],{"class":97,"line":9806},[95,48290,31222],{"class":105},[95,48292,151],{"class":101},[95,48294,30436],{"class":105},[95,48296,31229],{"class":210},[95,48298,1686],{"class":101},[95,48300,31234],{"class":105},[95,48302,1683],{"class":101},[95,48304,32192],{"class":210},[95,48306,112],{"class":105},[95,48308,48309],{"class":97,"line":9827},[95,48310,2382],{"emptyLinePlaceholder":21},[95,48312,48313],{"class":97,"line":9833},[95,48314,32207],{"class":164},[95,48316,48317],{"class":97,"line":9847},[95,48318,32212],{"class":164},[95,48320,48321],{"class":97,"line":9853},[95,48322,32217],{"class":164},[95,48324,48325,48327,48329,48331,48333,48335,48337],{"class":97,"line":9880},[95,48326,32222],{"class":105},[95,48328,151],{"class":101},[95,48330,32227],{"class":105},[95,48332,32230],{"class":5199},[95,48334,151],{"class":101},[95,48336,32235],{"class":154},[95,48338,112],{"class":105},[95,48340,48341],{"class":97,"line":9889},[95,48342,2382],{"emptyLinePlaceholder":21},[95,48344,48345],{"class":97,"line":9895},[95,48346,32246],{"class":164},[95,48348,48349,48351,48353],{"class":97,"line":9903},[95,48350,32251],{"class":105},[95,48352,151],{"class":101},[95,48354,32256],{"class":105},[95,48356,48357],{"class":97,"line":9908},[95,48358,2382],{"emptyLinePlaceholder":21},[95,48360,48361],{"class":97,"line":16587},[95,48362,32265],{"class":164},[95,48364,48365,48367,48369],{"class":97,"line":16593},[95,48366,31274],{"class":105},[95,48368,151],{"class":101},[95,48370,32274],{"class":105},[95,48372,48373],{"class":97,"line":16616},[95,48374,32279],{"class":164},[95,48376,48377],{"class":97,"line":16622},[95,48378,32284],{"class":164},[95,48380,48381],{"class":97,"line":16645},[95,48382,32289],{"class":164},[95,48384,48385,48387,48389],{"class":97,"line":16659},[95,48386,32294],{"class":105},[95,48388,151],{"class":101},[95,48390,32299],{"class":105},[95,48392,48393],{"class":97,"line":16679},[95,48394,2382],{"emptyLinePlaceholder":21},[95,48396,48397],{"class":97,"line":16685},[95,48398,32312],{"class":164},[95,48400,48401],{"class":97,"line":16696},[95,48402,32317],{"class":164},[95,48404,48405,48407,48409],{"class":97,"line":16719},[95,48406,32322],{"class":105},[95,48408,151],{"class":101},[95,48410,32327],{"class":154},[95,48412,48413],{"class":97,"line":16741},[95,48414,32332],{"class":164},[95,48416,48417,48419,48421],{"class":97,"line":16746},[95,48418,32337],{"class":105},[95,48420,151],{"class":101},[95,48422,32342],{"class":105},[95,48424,48425],{"class":97,"line":16752},[95,48426,32347],{"class":164},[95,48428,48429,48431,48433],{"class":97,"line":16766},[95,48430,32352],{"class":105},[95,48432,151],{"class":101},[95,48434,32342],{"class":105},[95,48436,48437],{"class":97,"line":16779},[95,48438,32361],{"class":164},[95,48440,48441,48443,48445],{"class":97,"line":16784},[95,48442,32366],{"class":105},[95,48444,151],{"class":101},[95,48446,32342],{"class":105},[95,48448,48449],{"class":97,"line":16798},[95,48450,32375],{"class":164},[95,48452,48453,48455,48457],{"class":97,"line":16803},[95,48454,32380],{"class":105},[95,48456,151],{"class":101},[95,48458,32342],{"class":105},[95,48460,48461],{"class":97,"line":16809},[95,48462,2382],{"emptyLinePlaceholder":21},[95,48464,48465],{"class":97,"line":16814},[95,48466,32393],{"class":164},[95,48468,48469,48471,48473],{"class":97,"line":16828},[95,48470,32398],{"class":105},[95,48472,151],{"class":101},[95,48474,32403],{"class":105},[95,48476,48477],{"class":97,"line":16833},[95,48478,2382],{"emptyLinePlaceholder":21},[95,48480,48481],{"class":97,"line":16838},[95,48482,32416],{"class":164},[95,48484,48485,48487,48489,48491,48493],{"class":97,"line":16852},[95,48486,3183],{"class":101},[95,48488,32423],{"class":105},[95,48490,26028],{"class":101},[95,48492,32428],{"class":154},[95,48494,32431],{"class":105},[95,48496,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517],{"class":97,"line":16864},[95,48498,32436],{"class":154},[95,48500,106],{"class":105},[95,48502,32441],{"class":210},[95,48504,32444],{"class":154},[95,48506,690],{"class":210},[95,48508,32444],{"class":154},[95,48510,357],{"class":210},[95,48512,32453],{"class":105},[95,48514,638],{"class":101},[95,48516,323],{"class":154},[95,48518,30482],{"class":105},[95,48520,48521,48523,48525,48527,48529,48531],{"class":97,"line":16869},[95,48522,32436],{"class":154},[95,48524,106],{"class":105},[95,48526,32468],{"class":210},[95,48528,561],{"class":101},[95,48530,552],{"class":154},[95,48532,112],{"class":105},[95,48534,48535],{"class":97,"line":16882},[95,48536,2382],{"emptyLinePlaceholder":21},[95,48538,48539],{"class":97,"line":16887},[95,48540,32483],{"class":164},[95,48542,48543],{"class":97,"line":16892},[95,48544,32488],{"class":164},[95,48546,48547,48549,48551],{"class":97,"line":16897},[95,48548,32493],{"class":105},[95,48550,151],{"class":101},[95,48552,32327],{"class":154},[95,48554,48555],{"class":97,"line":16910},[95,48556,32502],{"class":164},[95,48558,48559,48561,48563],{"class":97,"line":16915},[95,48560,32507],{"class":105},[95,48562,151],{"class":101},[95,48564,3067],{"class":154},[95,48566,48567],{"class":97,"line":32618},[95,48568,32516],{"class":164},[95,48570,48571,48573,48575],{"class":97,"line":32624},[95,48572,32521],{"class":105},[95,48574,151],{"class":101},[95,48576,32327],{"class":154},[95,48578,48579],{"class":97,"line":32630},[95,48580,32530],{"class":164},[95,48582,48583,48585,48587],{"class":97,"line":32636},[95,48584,32535],{"class":105},[95,48586,151],{"class":101},[95,48588,3067],{"class":154},[95,48590,48591],{"class":97,"line":32642},[95,48592,32544],{"class":164},[95,48594,48595,48597,48599],{"class":97,"line":32653},[95,48596,32549],{"class":105},[95,48598,151],{"class":101},[95,48600,3067],{"class":154},[95,48602,48603],{"class":97,"line":32659},[95,48604,32558],{"class":164},[95,48606,48607,48609,48611],{"class":97,"line":32679},[95,48608,32563],{"class":105},[95,48610,151],{"class":101},[95,48612,3067],{"class":154},[95,48614,48615],{"class":97,"line":32685},[95,48616,32572],{"class":164},[95,48618,48619,48621,48623,48625,48627],{"class":97,"line":32696},[95,48620,3385],{"class":101},[95,48622,31586],{"class":105},[95,48624,26028],{"class":101},[95,48626,31591],{"class":154},[95,48628,32585],{"class":105},[95,48630,48631],{"class":97,"line":32702},[95,48632,32590],{"class":164},[95,48634,48635,48637,48639],{"class":97,"line":32708},[95,48636,32595],{"class":105},[95,48638,151],{"class":101},[95,48640,32600],{"class":105},[95,48642,48643],{"class":97,"line":32714},[95,48644,32605],{"class":164},[95,48646,48647,48649,48651],{"class":97,"line":32720},[95,48648,32610],{"class":105},[95,48650,151],{"class":101},[95,48652,32615],{"class":105},[95,48654,48655],{"class":97,"line":32726},[95,48656,32621],{"class":164},[95,48658,48659],{"class":97,"line":32732},[95,48660,32627],{"class":105},[95,48662,48663],{"class":97,"line":32738},[95,48664,32633],{"class":164},[95,48666,48667],{"class":97,"line":32758},[95,48668,32639],{"class":164},[95,48670,48671,48673,48675],{"class":97,"line":32764},[95,48672,32645],{"class":105},[95,48674,151],{"class":101},[95,48676,32650],{"class":105},[95,48678,48679],{"class":97,"line":32780},[95,48680,32656],{"class":164},[95,48682,48683,48685,48687,48689,48691,48693,48695],{"class":97,"line":32786},[95,48684,32662],{"class":105},[95,48686,151],{"class":101},[95,48688,32667],{"class":105},[95,48690,32670],{"class":5199},[95,48692,151],{"class":101},[95,48694,323],{"class":154},[95,48696,112],{"class":105},[95,48698,48699],{"class":97,"line":32800},[95,48700,32682],{"class":164},[95,48702,48703,48705,48707],{"class":97,"line":32806},[95,48704,32688],{"class":105},[95,48706,151],{"class":101},[95,48708,32693],{"class":105},[95,48710,48711],{"class":97,"line":32821},[95,48712,32699],{"class":164},[95,48714,48715],{"class":97,"line":32827},[95,48716,32705],{"class":105},[95,48718,48719],{"class":97,"line":32836},[95,48720,32711],{"class":164},[95,48722,48723],{"class":97,"line":32842},[95,48724,32717],{"class":105},[95,48726,48727],{"class":97,"line":32851},[95,48728,32723],{"class":164},[95,48730,48731],{"class":97,"line":32857},[95,48732,32729],{"class":105},[95,48734,48735],{"class":97,"line":32863},[95,48736,32735],{"class":164},[95,48738,48739,48741,48743,48745,48747,48749,48751],{"class":97,"line":32872},[95,48740,32741],{"class":105},[95,48742,9460],{"class":101},[95,48744,32746],{"class":105},[95,48746,561],{"class":101},[95,48748,32751],{"class":105},[95,48750,297],{"class":154},[95,48752,112],{"class":105},[95,48754,48755],{"class":97,"line":32878},[95,48756,32761],{"class":164},[95,48758,48759,48761,48763,48765,48767],{"class":97,"line":32889},[95,48760,32767],{"class":105},[95,48762,9460],{"class":101},[95,48764,32772],{"class":105},[95,48766,2931],{"class":101},[95,48768,32777],{"class":105},[95,48770,48771],{"class":97,"line":32895},[95,48772,32783],{"class":164},[95,48774,48775,48777,48779,48781,48783],{"class":97,"line":32914},[95,48776,32789],{"class":105},[95,48778,9460],{"class":101},[95,48780,32751],{"class":105},[95,48782,297],{"class":154},[95,48784,112],{"class":105},[95,48786,48787],{"class":97,"line":32920},[95,48788,32803],{"class":164},[95,48790,48791,48793,48795,48797,48799],{"class":97,"line":32931},[95,48792,3385],{"class":101},[95,48794,32811],{"class":105},[95,48796,26028],{"class":101},[95,48798,31591],{"class":154},[95,48800,32818],{"class":105},[95,48802,48803],{"class":97,"line":32937},[95,48804,32824],{"class":164},[95,48806,48807,48809,48811],{"class":97,"line":32957},[95,48808,32595],{"class":105},[95,48810,151],{"class":101},[95,48812,32600],{"class":105},[95,48814,48815],{"class":97,"line":32973},[95,48816,32839],{"class":164},[95,48818,48819,48821,48823],{"class":97,"line":32979},[95,48820,32610],{"class":105},[95,48822,151],{"class":101},[95,48824,32615],{"class":105},[95,48826,48827],{"class":97,"line":32993},[95,48828,32854],{"class":164},[95,48830,48831],{"class":97,"line":32999},[95,48832,32860],{"class":105},[95,48834,48835],{"class":97,"line":33005},[95,48836,36341],{"class":164},[95,48838,48839,48841],{"class":97,"line":33016},[95,48840,32866],{"class":101},[95,48842,32869],{"class":105},[95,48844,48845],{"class":97,"line":33022},[95,48846,32875],{"class":164},[95,48848,48849,48851,48853],{"class":97,"line":33028},[95,48850,36356],{"class":105},[95,48852,151],{"class":101},[95,48854,32650],{"class":105},[95,48856,48857],{"class":97,"line":33038},[95,48858,32892],{"class":164},[95,48860,48861,48863,48865,48867,48869,48871,48873],{"class":97,"line":33044},[95,48862,36369],{"class":105},[95,48864,151],{"class":101},[95,48866,32667],{"class":105},[95,48868,32670],{"class":5199},[95,48870,151],{"class":101},[95,48872,323],{"class":154},[95,48874,112],{"class":105},[95,48876,48877],{"class":97,"line":33055},[95,48878,32917],{"class":164},[95,48880,48881,48883,48885],{"class":97,"line":33061},[95,48882,36390],{"class":105},[95,48884,151],{"class":101},[95,48886,32693],{"class":105},[95,48888,48889],{"class":97,"line":33071},[95,48890,32934],{"class":164},[95,48892,48893,48895,48897,48899,48901,48903,48905],{"class":97,"line":33076},[95,48894,36403],{"class":105},[95,48896,9460],{"class":101},[95,48898,36408],{"class":105},[95,48900,561],{"class":101},[95,48902,32751],{"class":105},[95,48904,297],{"class":154},[95,48906,112],{"class":105},[95,48908,48909,48911,48913,48915,48917],{"class":97,"line":33082},[95,48910,36421],{"class":105},[95,48912,9460],{"class":101},[95,48914,32772],{"class":105},[95,48916,2931],{"class":101},[95,48918,32777],{"class":105},[95,48920,48921],{"class":97,"line":33131},[95,48922,36434],{"class":164},[95,48924,48925,48927,48929,48931,48933],{"class":97,"line":33178},[95,48926,36439],{"class":105},[95,48928,9460],{"class":101},[95,48930,32751],{"class":105},[95,48932,297],{"class":154},[95,48934,112],{"class":105},[95,48936,48937],{"class":97,"line":33183},[95,48938,32996],{"class":164},[95,48940,48941],{"class":97,"line":33189},[95,48942,33002],{"class":164},[95,48944,48945,48947,48949],{"class":97,"line":33208},[95,48946,33008],{"class":105},[95,48948,690],{"class":101},[95,48950,33013],{"class":105},[95,48952,48953],{"class":97,"line":33214},[95,48954,33019],{"class":164},[95,48956,48957],{"class":97,"line":33234},[95,48958,33025],{"class":164},[95,48960,48961,48963,48965],{"class":97,"line":33240},[95,48962,33031],{"class":105},[95,48964,690],{"class":101},[95,48966,33013],{"class":105},[95,48968,48969],{"class":97,"line":33246},[95,48970,33041],{"class":164},[95,48972,48973,48975,48977],{"class":97,"line":33256},[95,48974,33047],{"class":105},[95,48976,690],{"class":101},[95,48978,33052],{"class":105},[95,48980,48981],{"class":97,"line":33261},[95,48982,33058],{"class":164},[95,48984,48985,48987,48989],{"class":97,"line":33267},[95,48986,33064],{"class":105},[95,48988,690],{"class":101},[95,48990,33052],{"class":105},[95,48992,48993],{"class":97,"line":33283},[95,48994,2382],{"emptyLinePlaceholder":21},[95,48996,48997],{"class":97,"line":33328},[95,48998,33079],{"class":164},[95,49000,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039],{"class":97,"line":33334},[95,49002,32436],{"class":154},[95,49004,106],{"class":105},[95,49006,3574],{"class":210},[95,49008,32444],{"class":154},[95,49010,33093],{"class":210},[95,49012,1002],{"class":154},[95,49014,33098],{"class":101},[95,49016,1052],{"class":154},[95,49018,33103],{"class":210},[95,49020,1002],{"class":154},[95,49022,33098],{"class":101},[95,49024,1052],{"class":154},[95,49026,3574],{"class":210},[95,49028,33114],{"class":105},[95,49030,638],{"class":101},[95,49032,323],{"class":154},[95,49034,33121],{"class":105},[95,49036,638],{"class":101},[95,49038,323],{"class":154},[95,49040,33128],{"class":105},[95,49042,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081],{"class":97,"line":33340},[95,49044,32436],{"class":154},[95,49046,106],{"class":105},[95,49048,3574],{"class":210},[95,49050,32444],{"class":154},[95,49052,33142],{"class":210},[95,49054,1002],{"class":154},[95,49056,33098],{"class":101},[95,49058,1052],{"class":154},[95,49060,33151],{"class":210},[95,49062,1002],{"class":154},[95,49064,33098],{"class":101},[95,49066,1052],{"class":154},[95,49068,3574],{"class":210},[95,49070,33162],{"class":105},[95,49072,638],{"class":101},[95,49074,323],{"class":154},[95,49076,33169],{"class":105},[95,49078,638],{"class":101},[95,49080,323],{"class":154},[95,49082,33128],{"class":105},[95,49084,49085],{"class":97,"line":33346},[95,49086,2382],{"emptyLinePlaceholder":21},[95,49088,49089],{"class":97,"line":33357},[95,49090,33186],{"class":164},[95,49092,49093,49095,49097,49099,49101,49103,49105],{"class":97,"line":33363},[95,49094,2479],{"class":101},[95,49096,33194],{"class":105},[95,49098,638],{"class":101},[95,49100,323],{"class":154},[95,49102,1046],{"class":105},[95,49104,1066],{"class":101},[95,49106,33205],{"class":105},[95,49108,49109],{"class":97,"line":33369},[95,49110,33211],{"class":164},[95,49112,49113,49115,49117,49119,49121,49123,49125],{"class":97,"line":33375},[95,49114,33217],{"class":105},[95,49116,145],{"class":154},[95,49118,151],{"class":101},[95,49120,33224],{"class":105},[95,49122,638],{"class":101},[95,49124,323],{"class":154},[95,49126,33231],{"class":105},[95,49128,49129],{"class":97,"line":33393},[95,49130,33237],{"class":164},[95,49132,49133],{"class":97,"line":33407},[95,49134,33243],{"class":164},[95,49136,49137,49139,49141],{"class":97,"line":33416},[95,49138,33249],{"class":105},[95,49140,151],{"class":101},[95,49142,32299],{"class":105},[95,49144,49145],{"class":97,"line":33425},[95,49146,2382],{"emptyLinePlaceholder":21},[95,49148,49149],{"class":97,"line":33434},[95,49150,33264],{"class":164},[95,49152,49153,49155,49157,49159,49161],{"class":97,"line":33443},[95,49154,33270],{"class":105},[95,49156,151],{"class":101},[95,49158,33275],{"class":105},[95,49160,638],{"class":101},[95,49162,33280],{"class":105},[95,49164,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199],{"class":97,"line":33449},[95,49166,32436],{"class":154},[95,49168,106],{"class":105},[95,49170,33290],{"class":210},[95,49172,1002],{"class":154},[95,49174,33295],{"class":101},[95,49176,1052],{"class":154},[95,49178,650],{"class":210},[95,49180,1002],{"class":154},[95,49182,33295],{"class":101},[95,49184,1052],{"class":154},[95,49186,33308],{"class":210},[95,49188,33311],{"class":105},[95,49190,33314],{"class":101},[95,49192,1013],{"class":154},[95,49194,33319],{"class":105},[95,49196,434],{"class":101},[95,49198,1013],{"class":154},[95,49200,30482],{"class":105},[95,49202,49203],{"class":97,"line":33455},[95,49204,36718],{"class":164},[95,49206,49207],{"class":97,"line":33463},[95,49208,36723],{"class":164},[95,49210,49211,49213,49215],{"class":97,"line":33468},[95,49212,36728],{"class":105},[95,49214,33352],{"class":210},[95,49216,112],{"class":105},[95,49218,49219],{"class":97,"line":33474},[95,49220,33372],{"class":164},[95,49222,49223,49225,49227,49229,49231,49233],{"class":97,"line":33485},[95,49224,33378],{"class":105},[95,49226,151],{"class":101},[95,49228,33383],{"class":105},[95,49230,33386],{"class":5199},[95,49232,151],{"class":101},[95,49234,1528],{"class":105},[95,49236,49237,49239,49241,49243],{"class":97,"line":33491},[95,49238,33396],{"class":210},[95,49240,965],{"class":105},[95,49242,33401],{"class":154},[95,49244,33404],{"class":105},[95,49246,49247,49249],{"class":97,"line":33511},[95,49248,33410],{"class":210},[95,49250,33413],{"class":105},[95,49252,49253,49255],{"class":97,"line":33517},[95,49254,33419],{"class":210},[95,49256,33422],{"class":105},[95,49258,49259,49261],{"class":97,"line":33523},[95,49260,33428],{"class":210},[95,49262,33431],{"class":105},[95,49264,49265,49267],{"class":97,"line":33529},[95,49266,33437],{"class":210},[95,49268,33440],{"class":105},[95,49270,49271],{"class":97,"line":33546},[95,49272,33446],{"class":105},[95,49274,49275],{"class":97,"line":33552},[95,49276,33452],{"class":164},[95,49278,49279,49281],{"class":97,"line":33558},[95,49280,4072],{"class":101},[95,49282,33460],{"class":105},[95,49284,49285],{"class":97,"line":33564},[95,49286,2382],{"emptyLinePlaceholder":21},[95,49288,49289],{"class":97,"line":33570},[95,49290,33471],{"class":164},[95,49292,49293,49295,49297],{"class":97,"line":33576},[95,49294,31932],{"class":101},[95,49296,33479],{"class":1945},[95,49298,33482],{"class":105},[95,49300,49301],{"class":97,"line":33603},[95,49302,33488],{"class":164},[95,49304,49305,49307,49309,49311,49313,49315,49317,49319],{"class":97,"line":33627},[95,49306,33494],{"class":105},[95,49308,31678],{"class":5199},[95,49310,151],{"class":101},[95,49312,106],{"class":105},[95,49314,604],{"class":154},[95,49316,484],{"class":105},[95,49318,399],{"class":154},[95,49320,30482],{"class":105},[95,49322,49323],{"class":97,"line":33633},[95,49324,33514],{"class":164},[95,49326,49327],{"class":97,"line":33639},[95,49328,33520],{"class":164},[95,49330,49331],{"class":97,"line":33645},[95,49332,33526],{"class":164},[95,49334,49335,49337,49339,49341,49343,49345,49347],{"class":97,"line":33656},[95,49336,31712],{"class":105},[95,49338,323],{"class":154},[95,49340,484],{"class":105},[95,49342,183],{"class":154},[95,49344,484],{"class":105},[95,49346,323],{"class":154},[95,49348,112],{"class":105},[95,49350,49351],{"class":97,"line":33667},[95,49352,33549],{"class":164},[95,49354,49355],{"class":97,"line":33673},[95,49356,33555],{"class":164},[95,49358,49359],{"class":97,"line":33690},[95,49360,33561],{"class":164},[95,49362,49363],{"class":97,"line":33713},[95,49364,33567],{"class":164},[95,49366,49367],{"class":97,"line":33736},[95,49368,33573],{"class":164},[95,49370,49371,49373,49375,49377,49379,49381,49383,49385,49387],{"class":97,"line":33742},[95,49372,33579],{"class":105},[95,49374,33582],{"class":210},[95,49376,33585],{"class":105},[95,49378,33588],{"class":210},[95,49380,484],{"class":105},[95,49382,33593],{"class":5199},[95,49384,151],{"class":101},[95,49386,33598],{"class":210},[95,49388,112],{"class":105},[95,49390,49391,49393,49395,49397,49399,49401,49403,49405,49407],{"class":97,"line":33747},[95,49392,33579],{"class":105},[95,49394,33582],{"class":210},[95,49396,33610],{"class":105},[95,49398,33613],{"class":210},[95,49400,484],{"class":105},[95,49402,33593],{"class":5199},[95,49404,151],{"class":101},[95,49406,33622],{"class":210},[95,49408,112],{"class":105},[95,49410,49411],{"class":97,"line":33756},[95,49412,33630],{"class":164},[95,49414,49415],{"class":97,"line":33766},[95,49416,33636],{"class":105},[95,49418,49419],{"class":97,"line":33772},[95,49420,33642],{"class":164},[95,49422,49423,49425,49427],{"class":97,"line":33777},[95,49424,33648],{"class":105},[95,49426,33651],{"class":210},[95,49428,112],{"class":105},[95,49430,49431,49433,49435],{"class":97,"line":33783},[95,49432,33659],{"class":105},[95,49434,33662],{"class":210},[95,49436,112],{"class":105},[95,49438,49439],{"class":97,"line":33796},[95,49440,33670],{"class":164},[95,49442,49443,49445,49447,49449,49451,49453,49455],{"class":97,"line":33802},[95,49444,31712],{"class":105},[95,49446,323],{"class":154},[95,49448,484],{"class":105},[95,49450,183],{"class":154},[95,49452,484],{"class":105},[95,49454,183],{"class":154},[95,49456,112],{"class":105},[95,49458,49459,49461,49463,49465,49467,49469,49471,49473,49475],{"class":97,"line":33813},[95,49460,33579],{"class":105},[95,49462,33582],{"class":210},[95,49464,33697],{"class":105},[95,49466,33588],{"class":210},[95,49468,484],{"class":105},[95,49470,33593],{"class":5199},[95,49472,151],{"class":101},[95,49474,33708],{"class":210},[95,49476,112],{"class":105},[95,49478,49479,49481,49483,49485,49487,49489,49491,49493,49495],{"class":97,"line":33824},[95,49480,33579],{"class":105},[95,49482,33582],{"class":210},[95,49484,33720],{"class":105},[95,49486,33613],{"class":210},[95,49488,484],{"class":105},[95,49490,33593],{"class":5199},[95,49492,151],{"class":101},[95,49494,33731],{"class":210},[95,49496,112],{"class":105},[95,49498,49499],{"class":97,"line":33843},[95,49500,33739],{"class":164},[95,49502,49504],{"class":97,"line":49503},219,[95,49505,33636],{"class":105},[95,49507,49509,49511,49513],{"class":97,"line":49508},220,[95,49510,33648],{"class":105},[95,49512,33582],{"class":210},[95,49514,112],{"class":105},[95,49516,49518,49520,49522],{"class":97,"line":49517},221,[95,49519,33659],{"class":105},[95,49521,33761],{"class":210},[95,49523,112],{"class":105},[95,49525,49527],{"class":97,"line":49526},222,[95,49528,33769],{"class":105},[95,49530,49532],{"class":97,"line":49531},223,[95,49533,2382],{"emptyLinePlaceholder":21},[95,49535,49537],{"class":97,"line":49536},224,[95,49538,33780],{"class":164},[95,49540,49542,49544,49546,49548,49550],{"class":97,"line":49541},225,[95,49543,1513],{"class":101},[95,49545,31205],{"class":154},[95,49547,2931],{"class":101},[95,49549,31210],{"class":210},[95,49551,3721],{"class":105},[95,49553,49555],{"class":97,"line":49554},226,[95,49556,33799],{"class":164},[95,49558,49560,49562,49564],{"class":97,"line":49559},227,[95,49561,44531],{"class":105},[95,49563,151],{"class":101},[95,49565,44536],{"class":105},[95,49567,49569,49571,49573],{"class":97,"line":49568},228,[95,49570,33816],{"class":105},[95,49572,151],{"class":101},[95,49574,33821],{"class":105},[95,49576,49578,49580,49582,49584,49586,49588,49590],{"class":97,"line":49577},229,[95,49579,33378],{"class":105},[95,49581,151],{"class":101},[95,49583,44553],{"class":105},[95,49585,33834],{"class":5199},[95,49587,151],{"class":101},[95,49589,1013],{"class":154},[95,49591,112],{"class":105},[95,49593,49595],{"class":97,"line":49594},230,[95,49596,33846],{"class":105},[21981,49598,49600],{"id":49599},"_242测试代码","2.4.2.测试代码",[10,49602,49603],{},"使用测试集进行测试与推理",[86,49605,49607],{"className":30363,"code":49606,"language":30365,"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",[92,49608,49609,49615,49625,49635,49646,49656,49660,49664,49672,49677,49681,49698,49702,49706,49710,49714,49718,49750,49754,49762,49766,49778,49782,49786,49790,49794,49798,49802,49806,49810,49828,49842,49846,49856,49866,49876,49882,49886,49890,49898,49902,49918,49926,49930,49934,49942,49950,49954,49958,49962,49966,49972,49976,49986,49994,50002,50006,50010,50014,50022,50026,50042,50046,50050,50054,50066,50070,50082,50086,50090,50102,50106,50116,50120,50124,50136,50140,50148,50152,50156,50164,50168,50176,50180,50184,50188,50192,50196,50212,50220,50224,50228,50246,50252,50256,50266,50274,50282,50286,50290,50294,50298,50306,50310,50326,50330,50338,50346],{"__ignoreMap":14},[95,49610,49611,49613],{"class":97,"line":98},[95,49612,30377],{"class":101},[95,49614,30380],{"class":105},[95,49616,49617,49619,49621,49623],{"class":97,"line":15},[95,49618,30377],{"class":101},[95,49620,31400],{"class":105},[95,49622,31368],{"class":101},[95,49624,31405],{"class":105},[95,49626,49627,49629,49631,49633],{"class":97,"line":1161},[95,49628,30722],{"class":101},[95,49630,31383],{"class":105},[95,49632,30377],{"class":101},[95,49634,31388],{"class":105},[95,49636,49637,49639,49641,49643],{"class":97,"line":1176},[95,49638,30722],{"class":101},[95,49640,31353],{"class":105},[95,49642,30377],{"class":101},[95,49644,49645],{"class":105}," ImageFolder\n",[95,49647,49648,49650,49652,49654],{"class":97,"line":1182},[95,49649,30722],{"class":101},[95,49651,31899],{"class":105},[95,49653,30377],{"class":101},[95,49655,44625],{"class":105},[95,49657,49658],{"class":97,"line":1196},[95,49659,2382],{"emptyLinePlaceholder":21},[95,49661,49662],{"class":97,"line":1202},[95,49663,33936],{"class":164},[95,49665,49666,49668,49670],{"class":97,"line":1293},[95,49667,31932],{"class":101},[95,49669,33943],{"class":1945},[95,49671,31938],{"class":105},[95,49673,49674],{"class":97,"line":1299},[95,49675,49676],{"class":164},"   # 导入自己的数据集，并进行数据处理\n",[95,49678,49679],{"class":97,"line":1311},[95,49680,47946],{"class":164},[95,49682,49683,49685,49687,49689,49691,49693,49696],{"class":97,"line":1594},[95,49684,47951],{"class":154},[95,49686,151],{"class":101},[95,49688,776],{"class":101},[95,49690,357],{"class":210},[95,49692,664],{"class":154},[95,49694,49695],{"class":47962},"\u002Fdata\u002Ftest",[95,49697,25118],{"class":210},[95,49699,49700],{"class":97,"line":1599},[95,49701,2382],{"emptyLinePlaceholder":21},[95,49703,49704],{"class":97,"line":1605},[95,49705,47974],{"class":164},[95,49707,49708],{"class":97,"line":1610},[95,49709,47979],{"class":164},[95,49711,49712],{"class":97,"line":1624},[95,49713,47984],{"class":164},[95,49715,49716],{"class":97,"line":1629},[95,49717,47989],{"class":164},[95,49719,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748],{"class":97,"line":1635},[95,49721,47994],{"class":105},[95,49723,151],{"class":101},[95,49725,47999],{"class":105},[95,49727,48002],{"class":154},[95,49729,484],{"class":105},[95,49731,48007],{"class":154},[95,49733,484],{"class":105},[95,49735,48012],{"class":154},[95,49737,48015],{"class":105},[95,49739,48018],{"class":154},[95,49741,484],{"class":105},[95,49743,48023],{"class":154},[95,49745,484],{"class":105},[95,49747,48028],{"class":154},[95,49749,4639],{"class":105},[95,49751,49752],{"class":97,"line":1656},[95,49753,48035],{"class":164},[95,49755,49756,49758,49760],{"class":97,"line":1661},[95,49757,48040],{"class":105},[95,49759,151],{"class":101},[95,49761,48045],{"class":105},[95,49763,49764],{"class":97,"line":1675},[95,49765,48050],{"class":164},[95,49767,49768,49770,49772,49774,49776],{"class":97,"line":1680},[95,49769,48055],{"class":105},[95,49771,31486],{"class":154},[95,49773,484],{"class":105},[95,49775,31486],{"class":154},[95,49777,42607],{"class":105},[95,49779,49780],{"class":97,"line":1709},[95,49781,48068],{"class":164},[95,49783,49784],{"class":97,"line":1714},[95,49785,48073],{"class":105},[95,49787,49788],{"class":97,"line":1731},[95,49789,48078],{"class":105},[95,49791,49792],{"class":97,"line":1736},[95,49793,48083],{"class":164},[95,49795,49796],{"class":97,"line":1741},[95,49797,48088],{"class":164},[95,49799,49800],{"class":97,"line":1746},[95,49801,2382],{"emptyLinePlaceholder":21},[95,49803,49804],{"class":97,"line":1760},[95,49805,48097],{"class":164},[95,49807,49808],{"class":97,"line":1765},[95,49809,48102],{"class":164},[95,49811,49812,49814,49816,49818,49820,49822,49824,49826],{"class":97,"line":2559},[95,49813,33950],{"class":105},[95,49815,151],{"class":101},[95,49817,48111],{"class":105},[95,49819,48114],{"class":154},[95,49821,484],{"class":105},[95,49823,48119],{"class":5199},[95,49825,151],{"class":101},[95,49827,48124],{"class":105},[95,49829,49830,49832,49834,49836,49838,49840],{"class":97,"line":2573},[95,49831,34007],{"class":105},[95,49833,151],{"class":101},[95,49835,31519],{"class":105},[95,49837,31522],{"class":5199},[95,49839,151],{"class":101},[95,49841,34018],{"class":105},[95,49843,49844],{"class":97,"line":2581},[95,49845,34023],{"class":164},[95,49847,49848,49850,49852,49854],{"class":97,"line":2586},[95,49849,34028],{"class":5199},[95,49851,151],{"class":101},[95,49853,323],{"class":154},[95,49855,31451],{"class":105},[95,49857,49858,49860,49862,49864],{"class":97,"line":2592},[95,49859,34039],{"class":5199},[95,49861,151],{"class":101},[95,49863,31461],{"class":154},[95,49865,31451],{"class":105},[95,49867,49868,49870,49872,49874],{"class":97,"line":2598},[95,49869,34050],{"class":5199},[95,49871,151],{"class":101},[95,49873,297],{"class":154},[95,49875,112],{"class":105},[95,49877,49878,49880],{"class":97,"line":2603},[95,49879,4072],{"class":101},[95,49881,34063],{"class":105},[95,49883,49884],{"class":97,"line":7931},[95,49885,2382],{"emptyLinePlaceholder":21},[95,49887,49888],{"class":97,"line":7955},[95,49889,34072],{"class":164},[95,49891,49892,49894,49896],{"class":97,"line":7960},[95,49893,31932],{"class":101},[95,49895,34079],{"class":1945},[95,49897,34082],{"class":105},[95,49899,49900],{"class":97,"line":7966},[95,49901,34087],{"class":164},[95,49903,49904,49906,49908,49910,49912,49914,49916],{"class":97,"line":7993},[95,49905,31222],{"class":105},[95,49907,151],{"class":101},[95,49909,31229],{"class":210},[95,49911,1686],{"class":101},[95,49913,31234],{"class":105},[95,49915,1683],{"class":101},[95,49917,34104],{"class":210},[95,49919,49920,49922,49924],{"class":97,"line":7998},[95,49921,31274],{"class":105},[95,49923,151],{"class":101},[95,49925,32274],{"class":105},[95,49927,49928],{"class":97,"line":8004},[95,49929,2382],{"emptyLinePlaceholder":21},[95,49931,49932],{"class":97,"line":8016},[95,49933,34121],{"class":164},[95,49935,49936,49938,49940],{"class":97,"line":8028},[95,49937,34126],{"class":105},[95,49939,151],{"class":101},[95,49941,32327],{"class":154},[95,49943,49944,49946,49948],{"class":97,"line":8040},[95,49945,34135],{"class":105},[95,49947,151],{"class":101},[95,49949,3067],{"class":154},[95,49951,49952],{"class":97,"line":9699},[95,49953,2382],{"emptyLinePlaceholder":21},[95,49955,49956],{"class":97,"line":9724},[95,49957,34148],{"class":164},[95,49959,49960],{"class":97,"line":9747},[95,49961,34153],{"class":164},[95,49963,49964],{"class":97,"line":9771},[95,49965,34158],{"class":164},[95,49967,49968,49970],{"class":97,"line":9776},[95,49969,34163],{"class":101},[95,49971,32869],{"class":105},[95,49973,49974],{"class":97,"line":9781},[95,49975,34170],{"class":164},[95,49977,49978,49980,49982,49984],{"class":97,"line":9786},[95,49979,3385],{"class":101},[95,49981,34177],{"class":105},[95,49983,26028],{"class":101},[95,49985,34182],{"class":105},[95,49987,49988,49990,49992],{"class":97,"line":9795},[95,49989,34187],{"class":105},[95,49991,151],{"class":101},[95,49993,34192],{"class":105},[95,49995,49996,49998,50000],{"class":97,"line":9800},[95,49997,34197],{"class":105},[95,49999,151],{"class":101},[95,50001,34202],{"class":105},[95,50003,50004],{"class":97,"line":9806},[95,50005,34207],{"class":164},[95,50007,50008],{"class":97,"line":9827},[95,50009,32860],{"class":105},[95,50011,50012],{"class":97,"line":9833},[95,50013,34216],{"class":164},[95,50015,50016,50018,50020],{"class":97,"line":9847},[95,50017,32645],{"class":105},[95,50019,151],{"class":101},[95,50021,34225],{"class":105},[95,50023,50024],{"class":97,"line":9853},[95,50025,34230],{"class":164},[95,50027,50028,50030,50032,50034,50036,50038,50040],{"class":97,"line":9880},[95,50029,32662],{"class":105},[95,50031,151],{"class":101},[95,50033,32667],{"class":105},[95,50035,32670],{"class":5199},[95,50037,151],{"class":101},[95,50039,323],{"class":154},[95,50041,112],{"class":105},[95,50043,50044],{"class":97,"line":9889},[95,50045,34251],{"class":164},[95,50047,50048],{"class":97,"line":9895},[95,50049,34256],{"class":164},[95,50051,50052],{"class":97,"line":9903},[95,50053,34261],{"class":164},[95,50055,50056,50058,50060,50062,50064],{"class":97,"line":9908},[95,50057,34266],{"class":105},[95,50059,9460],{"class":101},[95,50061,32772],{"class":105},[95,50063,2931],{"class":101},[95,50065,34275],{"class":105},[95,50067,50068],{"class":97,"line":16587},[95,50069,34280],{"class":164},[95,50071,50072,50074,50076,50078,50080],{"class":97,"line":16593},[95,50073,34285],{"class":105},[95,50075,9460],{"class":101},[95,50077,34290],{"class":105},[95,50079,297],{"class":154},[95,50081,112],{"class":105},[95,50083,50084],{"class":97,"line":16616},[95,50085,2382],{"emptyLinePlaceholder":21},[95,50087,50088],{"class":97,"line":16622},[95,50089,34303],{"class":164},[95,50091,50092,50094,50096,50098,50100],{"class":97,"line":16645},[95,50093,34308],{"class":105},[95,50095,151],{"class":101},[95,50097,34313],{"class":105},[95,50099,690],{"class":101},[95,50101,34318],{"class":105},[95,50103,50104],{"class":97,"line":16659},[95,50105,34323],{"class":164},[95,50107,50108,50110,50112,50114],{"class":97,"line":16679},[95,50109,32436],{"class":154},[95,50111,106],{"class":105},[95,50113,34332],{"class":210},[95,50115,34335],{"class":105},[95,50117,50118],{"class":97,"line":16685},[95,50119,2382],{"emptyLinePlaceholder":21},[95,50121,50122],{"class":97,"line":16696},[95,50123,34344],{"class":164},[95,50125,50126,50128,50130,50132,50134],{"class":97,"line":16719},[95,50127,1513],{"class":101},[95,50129,31205],{"class":154},[95,50131,2931],{"class":101},[95,50133,31210],{"class":210},[95,50135,3721],{"class":105},[95,50137,50138],{"class":97,"line":16741},[95,50139,34361],{"class":164},[95,50141,50142,50144,50146],{"class":97,"line":16746},[95,50143,31274],{"class":105},[95,50145,151],{"class":101},[95,50147,44536],{"class":105},[95,50149,50150],{"class":97,"line":16752},[95,50151,34374],{"class":164},[95,50153,50154],{"class":97,"line":16766},[95,50155,34379],{"class":164},[95,50157,50158,50160,50162],{"class":97,"line":16779},[95,50159,34384],{"class":105},[95,50161,34387],{"class":210},[95,50163,30482],{"class":105},[95,50165,50166],{"class":97,"line":16784},[95,50167,34394],{"class":164},[95,50169,50170,50172,50174],{"class":97,"line":16798},[95,50171,34007],{"class":105},[95,50173,151],{"class":101},[95,50175,34403],{"class":105},[95,50177,50178],{"class":97,"line":16803},[95,50179,34408],{"class":164},[95,50181,50182],{"class":97,"line":16809},[95,50183,34413],{"class":105},[95,50185,50186],{"class":97,"line":16814},[95,50187,2382],{"emptyLinePlaceholder":21},[95,50189,50190],{"class":97,"line":16828},[95,50191,34422],{"class":164},[95,50193,50194],{"class":97,"line":16833},[95,50195,34427],{"class":164},[95,50197,50198,50200,50202,50204,50206,50208,50210],{"class":97,"line":16838},[95,50199,31222],{"class":105},[95,50201,151],{"class":101},[95,50203,31229],{"class":210},[95,50205,1686],{"class":101},[95,50207,31234],{"class":105},[95,50209,1683],{"class":101},[95,50211,34104],{"class":210},[95,50213,50214,50216,50218],{"class":97,"line":16852},[95,50215,31274],{"class":105},[95,50217,151],{"class":101},[95,50219,32274],{"class":105},[95,50221,50222],{"class":97,"line":16864},[95,50223,34456],{"class":164},[95,50225,50226],{"class":97,"line":16869},[95,50227,34461],{"class":164},[95,50229,50230,50232,50234,50236,50239,50241,50244],{"class":97,"line":16882},[95,50231,34466],{"class":105},[95,50233,151],{"class":101},[95,50235,996],{"class":105},[95,50237,50238],{"class":210},"'猫'",[95,50240,484],{"class":105},[95,50242,50243],{"class":210},"'狗'",[95,50245,33231],{"class":105},[95,50247,50248,50250],{"class":97,"line":16887},[95,50249,34163],{"class":101},[95,50251,32869],{"class":105},[95,50253,50254],{"class":97,"line":16892},[95,50255,34531],{"class":164},[95,50257,50258,50260,50262,50264],{"class":97,"line":16897},[95,50259,3385],{"class":101},[95,50261,34538],{"class":105},[95,50263,26028],{"class":101},[95,50265,34182],{"class":105},[95,50267,50268,50270,50272],{"class":97,"line":16910},[95,50269,32595],{"class":105},[95,50271,151],{"class":101},[95,50273,32600],{"class":105},[95,50275,50276,50278,50280],{"class":97,"line":16915},[95,50277,32610],{"class":105},[95,50279,151],{"class":101},[95,50281,32615],{"class":105},[95,50283,50284],{"class":97,"line":32618},[95,50285,2382],{"emptyLinePlaceholder":21},[95,50287,50288],{"class":97,"line":32624},[95,50289,34567],{"class":164},[95,50291,50292],{"class":97,"line":32630},[95,50293,32860],{"class":105},[95,50295,50296],{"class":97,"line":32636},[95,50297,34576],{"class":164},[95,50299,50300,50302,50304],{"class":97,"line":32642},[95,50301,32645],{"class":105},[95,50303,151],{"class":101},[95,50305,32650],{"class":105},[95,50307,50308],{"class":97,"line":32653},[95,50309,34589],{"class":164},[95,50311,50312,50314,50316,50318,50320,50322,50324],{"class":97,"line":32659},[95,50313,32662],{"class":105},[95,50315,151],{"class":101},[95,50317,32667],{"class":105},[95,50319,32670],{"class":5199},[95,50321,151],{"class":101},[95,50323,323],{"class":154},[95,50325,112],{"class":105},[95,50327,50328],{"class":97,"line":32679},[95,50329,34610],{"class":164},[95,50331,50332,50334,50336],{"class":97,"line":32685},[95,50333,34615],{"class":105},[95,50335,151],{"class":101},[95,50337,34620],{"class":105},[95,50339,50340,50342,50344],{"class":97,"line":32696},[95,50341,34625],{"class":105},[95,50343,151],{"class":101},[95,50345,34630],{"class":105},[95,50347,50348,50350,50352,50354,50356,50358,50360,50362],{"class":97,"line":32702},[95,50349,34635],{"class":154},[95,50351,106],{"class":105},[95,50353,34640],{"class":210},[95,50355,34643],{"class":105},[95,50357,34646],{"class":210},[95,50359,484],{"class":105},[95,50361,34651],{"class":210},[95,50363,34654],{"class":105},[5109,50365,50366],{},"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":50368},[50369,50370,50371,50372],{"id":30576,"depth":1161,"text":30577},{"id":37824,"depth":1161,"text":37825},{"id":41257,"depth":1161,"text":41258},{"id":45266,"depth":1161,"text":45267},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30568,"description":23360},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50379,"title":50380,"body":50381,"description":23360,"extension":18,"meta":50388,"navigation":21,"path":50389,"seo":50390,"stem":50391,"__hash__":50392},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50382,"toc":50386},[50383],[33,50384,50380],{"id":50385},"_3yolo模型学习",{"title":14,"searchDepth":15,"depth":15,"links":50387},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50380,"description":23360},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":4,"title":5,"body":50394,"description":17,"extension":18,"meta":50400,"navigation":21,"path":22,"seo":50401,"stem":24,"__hash__":25},{"type":7,"value":50395,"toc":50398},[50396],[10,50397,12],{},{"title":14,"searchDepth":15,"depth":15,"links":50399},[],{"category":20},{"title":5,"description":17},{"id":50403,"title":50404,"body":50405,"description":23360,"extension":18,"meta":50430,"navigation":21,"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],[33,50408,50404],{"id":50409},"_1工具",[10,50411,50412],{},"提示错误插件：有问题会提前报错",[10,50414,50415],{},[1444,50416],{"alt":14,"src":50417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[10,50419,50420],{},[344,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",[23849],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[10,50426,50427],{},"alt键加上下箭头可以实现语句的移动",{"title":14,"searchDepth":15,"depth":15,"links":50429},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50404,"description":23360},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50436,"title":50437,"body":50438,"description":23360,"extension":18,"meta":53302,"navigation":21,"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],[33,50441,50437],{"id":50442},"_2基础语法",[37,50444,50446],{"id":50445},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[66,50448,50450],{"id":50449},"_211-js组成","2.1.1 js组成",[49,50452,50453],{},[52,50454,50455],{},"js是编程语言，html和css不是编程语言，是标记语言",[10,50457,50458],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[49,50460,50461],{"start":15},[52,50462,50463],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[66,50465,50467],{"id":50466},"_212-js书写位置","2.1.2 js书写位置",[49,50469,50470],{},[52,50471,50472],{},[255,50473,50474],{},"内部 JavaScript",[10,50476,50477],{},[1444,50478],{"alt":14,"src":50479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[49,50481,50482],{"start":15},[52,50483,50484],{},[255,50485,50486],{},"外部 JavaScript",[10,50488,50489],{},[1444,50490],{"alt":14,"src":50491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[49,50493,50494],{"start":1161},[52,50495,50496],{},[255,50497,50498],{},"内联 JavaScript",[10,50500,50501],{},[1444,50502],{"alt":14,"src":50503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[66,50505,50507],{"id":50506},"_213-javascript注释","2.1.3 JavaScript注释",[10,50509,50510],{},[1444,50511],{"alt":14,"src":50512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[10,50514,50515],{},"alt+shift+a一定要记住！",[66,50517,50519],{"id":50518},"_214-javascript结束符","2.1.4 JavaScript结束符",[10,50521,50522],{},[1444,50523],{"alt":14,"src":50524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[66,50526,50528],{"id":50527},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[49,50530,50531],{},[52,50532,50533],{},"输出语法：",[10,50535,50536],{},"①document.write('要出的内容')",[10,50538,50539],{},"向body内输出内容；",[10,50541,50542],{},"如果输出的内容写的是标签，也会被解析cheng",[10,50544,50545],{},"②alert('要出的内容')",[10,50547,50548],{},"页面弹出警告对话框",[10,50550,50551],{},"③console.log('控制台打印')",[10,50553,50554],{},"控制台输出语法，程序员调试使用",[10,50556,50557],{},"输入log就行，自动生成：",[10,50559,50560],{},[1444,50561],{"alt":14,"src":50562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[49,50564,50565],{"start":15},[52,50566,50567],{},"输入语法：",[10,50569,50570],{},[1444,50571],{"alt":14,"src":50572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[66,50574,50576],{"id":50575},"_2116-字面量","21.1.6 字面量",[10,50578,50579],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[10,50581,50582],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[37,50584,50586],{"id":50585},"_22-变量","2.2 变量",[49,50588,50589],{},[52,50590,50591],{},"变量声明",[10,50593,50594],{},"let 变量名",[1113,50596,50597,50600],{},[52,50598,50599],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[52,50601,50602],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[49,50604,50605],{"start":15},[52,50606,50607],{},"变量赋值",[86,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",[92,50614,50615,50620],{"__ignoreMap":14},[95,50616,50617],{"class":97,"line":98},[95,50618,50619],{"class":105},"let age\n",[95,50621,50622],{"class":97,"line":15},[95,50623,50624],{"class":105},"age=18\n",[49,50626,50627,50630],{"start":1161},[52,50628,50629],{},"连这些（变量的初始化）：let age=18",[52,50631,50632],{},"更新变量",[10,50634,50635],{},[1444,50636],{"alt":14,"src":50637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[49,50639,50640],{"start":1182},[52,50641,50642],{},"声明多个变量",[10,50644,50645],{},[1444,50646],{"alt":14,"src":50647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[49,50649,50650],{"start":1196},[52,50651,50652],{},"变量命名规则与规范",[10,50654,50655],{},[1444,50656],{"alt":14,"src":50657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[10,50659,50660],{},"遵守小驼峰！",[49,50662,50663],{"start":1202},[52,50664,50665],{},"变量拓展-let和var的区别",[10,50667,50668],{},[1444,50669],{"alt":14,"src":50670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[37,50672,50674],{"id":50673},"_23-数组","2.3 数组",[86,50676,50678],{"className":50610,"code":50677,"language":50612,"meta":14,"style":14},"let arr = []\n",[92,50679,50680],{"__ignoreMap":14},[95,50681,50682],{"class":97,"line":98},[95,50683,50677],{"class":105},[10,50685,50686],{},[1444,50687],{"alt":14,"src":50688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[10,50690,50691],{},[1444,50692],{"alt":14,"src":50693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[37,50695,50697],{"id":50696},"_24-常量","2.4 常量",[10,50699,50700],{},[1444,50701],{"alt":14,"src":50702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[10,50704,50705],{},"const — 类似于 let ，但是变量的值无法被修改",[37,50707,50709],{"id":50708},"_25-数据类型","2.5 数据类型",[10,50711,50712],{},[1444,50713],{"alt":14,"src":50714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[49,50716,50717,50720],{},[52,50718,50719],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[52,50721,50722],{},"算数运算符：",[10,50724,50725],{},[1444,50726],{"alt":14,"src":50727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[49,50729,50730],{"start":1161},[52,50731,50732],{},"数字类型（Number）",[10,50734,50735],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[10,50737,50738],{},[1444,50739],{"alt":14,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[49,50742,50743],{"start":1176},[52,50744,50745],{},"字符串类型（string）",[10,50747,50748],{},[1444,50749],{"alt":14,"src":50750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[10,50752,50753],{},"反引号也是可以使用的",[10,50755,50756],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[10,50758,50759],{},"例如：document.write(\"我今年\"+age+\"岁\")",[49,50761,50762],{"start":1182},[52,50763,50764],{},"模板字符串",[10,50766,50767],{},[1444,50768],{"alt":14,"src":50769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[10,50771,50772],{},"类似于python的字符串格式化",[49,50774,50775],{"start":1196},[52,50776,50777],{},"布尔类型",[10,50779,50780],{},"true 和 false",[49,50782,50783],{"start":1202},[52,50784,50785],{},"未定义类型（underfined）",[10,50787,50788],{},"表示没有赋值",[10,50790,50791],{},"未定义类型是比较特殊的类型，只有一个值undefined",[10,50793,50794],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[49,50796,50797],{"start":1293},[52,50798,50799],{},"null（空类型）",[10,50801,50802],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[10,50804,50805],{},"赋值了，但是内容为空",[86,50807,50809],{"className":50610,"code":50808,"language":50612,"meta":14,"style":14},"typeof null\n输出的是'object'，是一个对象数据类型\n",[92,50810,50811,50816],{"__ignoreMap":14},[95,50812,50813],{"class":97,"line":98},[95,50814,50815],{"class":105},"typeof null\n",[95,50817,50818],{"class":97,"line":15},[95,50819,50820],{"class":105},"输出的是'object'，是一个对象数据类型\n",[49,50822,50823],{"start":1299},[52,50824,50825],{},"控制台检测数据类型",[10,50827,50828],{},[1444,50829],{"alt":14,"src":50830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[49,50832,50833],{"start":1311},[52,50834,50835],{},"类型转换",[10,50837,50838],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[10,50840,50841],{},"转换方式：隐式转换和显示转换",[10,50843,50844],{},"①隐式转换",[1113,50846,50847,50850,50853,50856],{},[52,50848,50849],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[52,50851,50852],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[52,50854,50855],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[52,50857,50858],{},"任何数据和字符串相加结果都是字符串",[10,50860,50861],{},"②显示转换",[10,50863,50864],{},[1444,50865],{"alt":14,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[10,50868,50869],{},[1444,50870],{"alt":14,"src":50871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[10,50873,50874],{},"在输入的时候要用好隐式转换，简单写起来",[10,50876,50877],{},"let num = +prompt(’请输入数字：‘)",[10,50879,50880],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[10,50882,50883],{},"console.log(parseInt('12.333px'))",[10,50885,50886],{},"输出为：12",[10,50888,50889],{},"console.log(parseInt('a'a'a12.333px'))",[10,50891,50892],{},"输出：NaN",[37,50894,50896],{"id":50895},"_26-运算符","2.6 运算符",[66,50898,50900],{"id":50899},"_261-赋值运算符","2.6.1 赋值运算符",[10,50902,50903],{},[1444,50904],{"alt":14,"src":50905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[66,50907,50909],{"id":50908},"_262-一元运算符","2.6.2 一元运算符",[10,50911,50912],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[10,50914,50915],{},[1444,50916],{"alt":14,"src":50917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[10,50919,50920],{},[1444,50921],{"alt":14,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[10,50924,50925],{},"两者的区别：",[10,50927,50928],{},[1444,50929],{"alt":14,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[10,50932,50933],{},"前置先自加；后置后加，代码执行完之后再加",[66,50935,50937],{"id":50936},"_263-比较运算符","2.6.3 比较运算符",[10,50939,50940],{},[1444,50941],{"alt":14,"src":50942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[10,50944,50945],{},"比较运算符也有隐式转换",[10,50947,50948],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[10,50950,50951],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[10,50953,50954],{},"要使用三等，开发的时候",[10,50956,50957],{},"NaN不等于任何人，包括它自己",[10,50959,50960],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[10,50962,50963],{},"7\u002F10=0.7",[10,50965,50966],{},"最后：0.5+0.2=0.7",[10,50968,50969],{},"字符串比较，比较的是字符对应的ASCII码",[66,50971,50973],{"id":50972},"_264-逻辑运算符","2.6.4 逻辑运算符",[10,50975,50976],{},[1444,50977],{"alt":14,"src":50978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[10,50980,50981],{},[1444,50982],{"alt":14,"src":50983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[10,50985,50986],{},[1444,50987],{"alt":14,"src":50988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[10,50990,50991],{},"上述题目选D",[10,50993,50994],{},"与真2假1；或真1假2",[66,50996,50998],{"id":50997},"_265-运算符优先级","2.6.5 运算符优先级",[10,51000,51001],{},[1444,51002],{"alt":14,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[10,51005,51006],{},"先算逻辑与，后算逻辑或",[37,51008,51010],{"id":51009},"_27-语句","2.7 语句",[10,51012,51013],{},"表达式：是可以被求值的代码，会有结果给我们",[10,51015,51016],{},"语句：语句是可以被执行的代码，例如prompt()",[10,51018,51019],{},[1444,51020],{"alt":14,"src":51021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[10,51023,51024],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[10,51026,51027],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[66,51029,51031],{"id":51030},"_271-分支语句","2.7.1 分支语句",[21981,51033,51035],{"id":51034},"_2711-if分支语句","2.7.1.1 if分支语句",[10,51037,51038],{},"if语句单行简单的话，可以不写{}，写在一行就行",[49,51040,51041],{},[52,51042,51043],{},"单分支语句",[10,51045,51046],{},[1444,51047],{"alt":14,"src":51048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[10,51050,51051],{},"除了0，所有数字都为真",[86,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",[92,51056,51057,51062,51067,51072,51076],{"__ignoreMap":14},[95,51058,51059],{"class":97,"line":98},[95,51060,51061],{"class":105},"if（0) {\n",[95,51063,51064],{"class":97,"line":15},[95,51065,51066],{"class":105},"    let a=1\n",[95,51068,51069],{"class":97,"line":1161},[95,51070,51071],{"class":105},"    alert(typeof a)\n",[95,51073,51074],{"class":97,"line":1176},[95,51075,1547],{"class":105},[95,51077,51078],{"class":97,"line":1182},[95,51079,51080],{"class":105},"不输出，括号为假\n",[49,51082,51083],{"start":15},[52,51084,51085],{},"双分支语句",[10,51087,51088],{},[1444,51089],{"alt":14,"src":51090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[49,51092,51093],{"start":1161},[52,51094,51095],{},"多分支语句",[10,51097,51098],{},[1444,51099],{"alt":14,"src":51100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21981,51102,51104],{"id":51103},"_2712-三元运算符","2.7.1.2 三元运算符",[10,51106,51107],{},[1444,51108],{"alt":14,"src":51109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21981,51111,51113],{"id":51112},"_2713-switch语句","2.7.1.3 switch语句",[10,51115,51116],{},[1444,51117],{"alt":14,"src":51118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[10,51120,51121],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[66,51123,51125],{"id":51124},"_272-循环语句","2.7.2 循环语句",[21981,51127,51129],{"id":51128},"_2721-断点演示","2.7.2.1 断点演示",[10,51131,51132],{},[1444,51133],{"alt":14,"src":51134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21981,51136,51138],{"id":51137},"_2722-while循环","2.7.2.2 while循环",[10,51140,51141],{},[1444,51142],{"alt":14,"src":51143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[10,51145,51146],{},[1444,51147],{"alt":14,"src":51148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21981,51150,51152],{"id":51151},"_2723-for循环","2.7.2.3 for循环",[10,51154,51155],{},[1444,51156],{"alt":14,"src":51157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[10,51159,51160],{},"for(;;) {",[10,51162,1052],{},[10,51164,51165],{},"表示无限循环",[10,51167,51168],{},[1444,51169],{"alt":14,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21981,51172,51174],{"id":51173},"_2724-循环的退出","2.7.2.4 循环的退出",[10,51176,51177],{},[1444,51178],{"alt":14,"src":51179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[37,51181,51183],{"id":51182},"_28-数组","2.8 数组",[66,51185,51187],{"id":51186},"_281-基础认识","2.8.1 基础认识",[10,51189,51190],{},[1444,51191],{"alt":14,"src":51192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[10,51194,51195],{},[1444,51196],{"alt":14,"src":51197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[10,51199,51200],{},[1444,51201],{"alt":14,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[10,51204,51205],{},[1444,51206],{"alt":14,"src":51207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[66,51209,51211],{"id":51210},"_282-操作数组","2.8.2 操作数组",[10,51213,51214],{},[1444,51215],{"alt":14,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[49,51218,51219],{},[52,51220,51221],{},"添加元素",[10,51223,51224],{},[1444,51225],{"alt":14,"src":51226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[10,51228,51229],{},"console.log(arr.push('green'))",[10,51231,51232],{},"输出结果：为新数组的长度",[10,51234,51235],{},[1444,51236],{"alt":14,"src":51237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[10,51239,51240],{},"push用的非常多，一定要记住",[49,51242,51243],{},[52,51244,51245],{},"删除元素",[10,51247,51248],{},[1444,51249],{"alt":14,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[10,51252,51253],{},[1444,51254],{"alt":14,"src":51255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[10,51257,51258],{},[1444,51259],{"alt":14,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[66,51262,51264],{"id":51263},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[86,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",[92,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},[95,51271,51272,51275,51279,51282],{"class":97,"line":98},[95,51273,51274],{"class":105},"\u003C!",[95,51276,51278],{"class":51277},"s9eBZ","DOCTYPE",[95,51280,51281],{"class":1945}," html",[95,51283,51284],{"class":105},">\n",[95,51286,51287,51289,51291,51294,51296,51299],{"class":97,"line":15},[95,51288,1016],{"class":105},[95,51290,50612],{"class":51277},[95,51292,51293],{"class":1945}," lang",[95,51295,151],{"class":105},[95,51297,51298],{"class":210},"\"en\"",[95,51300,51284],{"class":105},[95,51302,51303],{"class":97,"line":1161},[95,51304,2382],{"emptyLinePlaceholder":21},[95,51306,51307,51309,51312],{"class":97,"line":1176},[95,51308,1016],{"class":105},[95,51310,51311],{"class":51277},"head",[95,51313,51284],{"class":105},[95,51315,51316,51319,51322,51325,51327,51330],{"class":97,"line":1182},[95,51317,51318],{"class":105},"    \u003C",[95,51320,51321],{"class":51277},"meta",[95,51323,51324],{"class":1945}," charset",[95,51326,151],{"class":105},[95,51328,51329],{"class":210},"\"UTF-8\"",[95,51331,51284],{"class":105},[95,51333,51334,51336,51338,51341,51343,51346,51349,51351,51354],{"class":97,"line":1196},[95,51335,51318],{"class":105},[95,51337,51321],{"class":51277},[95,51339,51340],{"class":1945}," http-equiv",[95,51342,151],{"class":105},[95,51344,51345],{"class":210},"\"X-UA-Compatible\"",[95,51347,51348],{"class":1945}," content",[95,51350,151],{"class":105},[95,51352,51353],{"class":210},"\"IE=edge\"",[95,51355,51284],{"class":105},[95,51357,51358,51360,51362,51364,51366,51369,51371,51373,51376],{"class":97,"line":1202},[95,51359,51318],{"class":105},[95,51361,51321],{"class":51277},[95,51363,14903],{"class":1945},[95,51365,151],{"class":105},[95,51367,51368],{"class":210},"\"viewport\"",[95,51370,51348],{"class":1945},[95,51372,151],{"class":105},[95,51374,51375],{"class":210},"\"width=device-width, initial-scale=1.0\"",[95,51377,51284],{"class":105},[95,51379,51380,51382,51385,51388,51390],{"class":97,"line":1293},[95,51381,51318],{"class":105},[95,51383,51384],{"class":51277},"title",[95,51386,51387],{"class":105},">Document\u003C\u002F",[95,51389,51384],{"class":51277},[95,51391,51284],{"class":105},[95,51393,51394,51396,51398],{"class":97,"line":1299},[95,51395,51318],{"class":105},[95,51397,5109],{"class":51277},[95,51399,51284],{"class":105},[95,51401,51402,51405],{"class":97,"line":1311},[95,51403,51404],{"class":51277},"        *",[95,51406,15555],{"class":105},[95,51408,51409,51412,51415,51417],{"class":97,"line":1594},[95,51410,51411],{"class":154},"            margin",[95,51413,51414],{"class":105},": ",[95,51416,297],{"class":154},[95,51418,1272],{"class":105},[95,51420,51421,51424,51426,51428],{"class":97,"line":1599},[95,51422,51423],{"class":154},"            padding",[95,51425,51414],{"class":105},[95,51427,297],{"class":154},[95,51429,1272],{"class":105},[95,51431,51432],{"class":97,"line":1605},[95,51433,2511],{"class":105},[95,51435,51436],{"class":97,"line":1610},[95,51437,2382],{"emptyLinePlaceholder":21},[95,51439,51440,51443],{"class":97,"line":1624},[95,51441,51442],{"class":1945},"        .box",[95,51444,15555],{"class":105},[95,51446,51447,51450,51452,51455],{"class":97,"line":1629},[95,51448,51449],{"class":154},"            display",[95,51451,51414],{"class":105},[95,51453,51454],{"class":154},"flex",[95,51456,1272],{"class":105},[95,51458,51459,51462,51464,51467,51470],{"class":97,"line":1635},[95,51460,51461],{"class":154},"            width",[95,51463,51414],{"class":105},[95,51465,51466],{"class":154},"700",[95,51468,51469],{"class":101},"px",[95,51471,1272],{"class":105},[95,51473,51474,51477,51479,51481,51483],{"class":97,"line":1656},[95,51475,51476],{"class":154},"            height",[95,51478,51414],{"class":105},[95,51480,3955],{"class":154},[95,51482,51469],{"class":101},[95,51484,1272],{"class":105},[95,51486,51487,51490,51492,51494,51496,51499,51502],{"class":97,"line":1661},[95,51488,51489],{"class":154},"            border-left",[95,51491,51414],{"class":105},[95,51493,323],{"class":154},[95,51495,51469],{"class":101},[95,51497,51498],{"class":154}," solid",[95,51500,51501],{"class":154}," pink",[95,51503,1272],{"class":105},[95,51505,51506,51509,51511,51513,51515,51517,51519],{"class":97,"line":1675},[95,51507,51508],{"class":154},"            border-bottom",[95,51510,51414],{"class":105},[95,51512,323],{"class":154},[95,51514,51469],{"class":101},[95,51516,51498],{"class":154},[95,51518,51501],{"class":154},[95,51520,1272],{"class":105},[95,51522,51523,51525,51527,51529,51531,51534],{"class":97,"line":1680},[95,51524,51411],{"class":154},[95,51526,51414],{"class":105},[95,51528,762],{"class":154},[95,51530,51469],{"class":101},[95,51532,51533],{"class":154}," auto",[95,51535,1272],{"class":105},[95,51537,51538,51541,51543,51546],{"class":97,"line":1709},[95,51539,51540],{"class":154},"            justify-content",[95,51542,51414],{"class":105},[95,51544,51545],{"class":154},"space-around",[95,51547,1272],{"class":105},[95,51549,51550,51553,51555,51558],{"class":97,"line":1714},[95,51551,51552],{"class":154},"            align-items",[95,51554,51414],{"class":105},[95,51556,51557],{"class":154},"flex-end",[95,51559,1272],{"class":105},[95,51561,51562,51565,51567,51570],{"class":97,"line":1731},[95,51563,51564],{"class":154},"            text-align",[95,51566,51414],{"class":105},[95,51568,51569],{"class":154},"center",[95,51571,1272],{"class":105},[95,51573,51574],{"class":97,"line":1736},[95,51575,2511],{"class":105},[95,51577,51578],{"class":97,"line":1741},[95,51579,2382],{"emptyLinePlaceholder":21},[95,51581,51582,51584,51586,51589],{"class":97,"line":1746},[95,51583,51442],{"class":1945},[95,51585,1066],{"class":101},[95,51587,51588],{"class":51277},"div",[95,51590,15555],{"class":105},[95,51592,51593,51595,51597,51599],{"class":97,"line":1760},[95,51594,51449],{"class":154},[95,51596,51414],{"class":105},[95,51598,51454],{"class":154},[95,51600,1272],{"class":105},[95,51602,51603,51605,51607,51609,51611],{"class":97,"line":1765},[95,51604,51461],{"class":154},[95,51606,51414],{"class":105},[95,51608,762],{"class":154},[95,51610,51469],{"class":101},[95,51612,1272],{"class":105},[95,51614,51615,51618,51620,51623],{"class":97,"line":2559},[95,51616,51617],{"class":154},"            background-color",[95,51619,51414],{"class":105},[95,51621,51622],{"class":154},"pink",[95,51624,1272],{"class":105},[95,51626,51627,51630,51632,51635],{"class":97,"line":2573},[95,51628,51629],{"class":154},"            flex-direction",[95,51631,51414],{"class":105},[95,51633,51634],{"class":154},"column",[95,51636,1272],{"class":105},[95,51638,51639,51641,51643,51646],{"class":97,"line":2581},[95,51640,51540],{"class":154},[95,51642,51414],{"class":105},[95,51644,51645],{"class":154},"space-between",[95,51647,1272],{"class":105},[95,51649,51650],{"class":97,"line":2586},[95,51651,2511],{"class":105},[95,51653,51654],{"class":97,"line":2592},[95,51655,2382],{"emptyLinePlaceholder":21},[95,51657,51658,51660,51663,51666],{"class":97,"line":2598},[95,51659,51442],{"class":1945},[95,51661,51662],{"class":51277}," div",[95,51664,51665],{"class":51277}," span",[95,51667,15555],{"class":105},[95,51669,51670],{"class":97,"line":2603},[95,51671,2382],{"emptyLinePlaceholder":21},[95,51673,51674,51677,51679,51682,51684],{"class":97,"line":7931},[95,51675,51676],{"class":154},"            margin-top",[95,51678,51414],{"class":105},[95,51680,51681],{"class":154},"-20",[95,51683,51469],{"class":101},[95,51685,1272],{"class":105},[95,51687,51688],{"class":97,"line":7955},[95,51689,2511],{"class":105},[95,51691,51692],{"class":97,"line":7960},[95,51693,2382],{"emptyLinePlaceholder":21},[95,51695,51696,51698,51700,51703],{"class":97,"line":7966},[95,51697,51442],{"class":1945},[95,51699,51662],{"class":51277},[95,51701,51702],{"class":51277}," h4",[95,51704,15555],{"class":105},[95,51706,51707,51710,51712,51715,51717],{"class":97,"line":7993},[95,51708,51709],{"class":154},"            margin-bottom",[95,51711,51414],{"class":105},[95,51713,51714],{"class":154},"-35",[95,51716,51469],{"class":101},[95,51718,1272],{"class":105},[95,51720,51721,51723,51725,51727,51729],{"class":97,"line":7998},[95,51722,51461],{"class":154},[95,51724,51414],{"class":105},[95,51726,462],{"class":154},[95,51728,51469],{"class":101},[95,51730,1272],{"class":105},[95,51732,51733,51736,51738,51741,51743],{"class":97,"line":8004},[95,51734,51735],{"class":154},"            margin-left",[95,51737,51414],{"class":105},[95,51739,51740],{"class":154},"-10",[95,51742,51469],{"class":101},[95,51744,1272],{"class":105},[95,51746,51747],{"class":97,"line":8016},[95,51748,2511],{"class":105},[95,51750,51751,51754,51756],{"class":97,"line":8028},[95,51752,51753],{"class":105},"    \u003C\u002F",[95,51755,5109],{"class":51277},[95,51757,51284],{"class":105},[95,51759,51760,51763,51765],{"class":97,"line":8040},[95,51761,51762],{"class":105},"\u003C\u002F",[95,51764,51311],{"class":51277},[95,51766,51284],{"class":105},[95,51768,51769],{"class":97,"line":9699},[95,51770,2382],{"emptyLinePlaceholder":21},[95,51772,51773,51775,51778],{"class":97,"line":9724},[95,51774,1016],{"class":105},[95,51776,51777],{"class":51277},"body",[95,51779,51284],{"class":105},[95,51781,51782],{"class":97,"line":9747},[95,51783,2382],{"emptyLinePlaceholder":21},[95,51785,51786,51788,51791],{"class":97,"line":9771},[95,51787,51318],{"class":105},[95,51789,51790],{"class":51277},"script",[95,51792,51284],{"class":105},[95,51794,51795],{"class":97,"line":9776},[95,51796,51797],{"class":164},"        \u002F\u002F 1. 四次弹框效果\n",[95,51799,51800],{"class":97,"line":9781},[95,51801,51802],{"class":164},"        \u002F\u002F 声明一个新的数组\n",[95,51804,51805,51808,51811,51813],{"class":97,"line":9786},[95,51806,51807],{"class":101},"        let",[95,51809,51810],{"class":105}," arr ",[95,51812,151],{"class":101},[95,51814,51815],{"class":105}," []\n",[95,51817,51818,51820,51822,51825,51827,51829,51831,51833,51835,51838,51840,51842],{"class":97,"line":9795},[95,51819,3385],{"class":101},[95,51821,1640],{"class":105},[95,51823,51824],{"class":101},"let",[95,51826,9421],{"class":105},[95,51828,151],{"class":101},[95,51830,25103],{"class":154},[95,51832,9428],{"class":105},[95,51834,1570],{"class":101},[95,51836,51837],{"class":154}," 4",[95,51839,3196],{"class":105},[95,51841,2274],{"class":101},[95,51843,12425],{"class":105},[95,51845,51846],{"class":97,"line":9800},[95,51847,51848],{"class":164},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[95,51850,51851],{"class":97,"line":9806},[95,51852,51853],{"class":164},"            \u002F\u002F arr.push(num)\n",[95,51855,51856,51859,51862,51864,51867,51869,51872,51874,51877],{"class":97,"line":9827},[95,51857,51858],{"class":105},"            arr.",[95,51860,51861],{"class":1945},"push",[95,51863,106],{"class":105},[95,51865,51866],{"class":1945},"prompt",[95,51868,106],{"class":105},[95,51870,51871],{"class":210},"`请输入第${",[95,51873,547],{"class":105},[95,51875,51876],{"class":210},"}季度的数据:`",[95,51878,30482],{"class":105},[95,51880,51881],{"class":97,"line":9833},[95,51882,51883],{"class":164},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[95,51885,51886],{"class":97,"line":9847},[95,51887,2511],{"class":105},[95,51889,51890],{"class":97,"line":9853},[95,51891,51892],{"class":164},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[95,51894,51895],{"class":97,"line":9880},[95,51896,51897],{"class":164},"        \u002F\u002F 盒子开头\n",[95,51899,51900,51903,51906,51908,51911],{"class":97,"line":9889},[95,51901,51902],{"class":105},"        document.",[95,51904,51905],{"class":1945},"write",[95,51907,106],{"class":105},[95,51909,51910],{"class":210},"` \u003Cdiv class=\"box\">`",[95,51912,112],{"class":105},[95,51914,51915],{"class":97,"line":9895},[95,51916,2382],{"emptyLinePlaceholder":21},[95,51918,51919],{"class":97,"line":9903},[95,51920,51921],{"class":164},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[95,51923,51924,51926,51928,51930,51932,51934,51936,51938,51940,51943,51946,51948,51950],{"class":97,"line":9908},[95,51925,3385],{"class":101},[95,51927,1640],{"class":105},[95,51929,51824],{"class":101},[95,51931,9421],{"class":105},[95,51933,151],{"class":101},[95,51935,4075],{"class":154},[95,51937,9428],{"class":105},[95,51939,1016],{"class":101},[95,51941,51942],{"class":105}," arr.",[95,51944,51945],{"class":154},"length",[95,51947,3196],{"class":105},[95,51949,2274],{"class":101},[95,51951,12425],{"class":105},[95,51953,51954,51957,51959,51961],{"class":97,"line":16587},[95,51955,51956],{"class":105},"            document.",[95,51958,51905],{"class":1945},[95,51960,106],{"class":105},[95,51962,51963],{"class":210},"`\n",[95,51965,51966,51969,51971,51973,51975,51977],{"class":97,"line":16593},[95,51967,51968],{"class":210},"              \u003Cdiv style=\"height: ${",[95,51970,3862],{"class":105},[95,51972,996],{"class":210},[95,51974,547],{"class":105},[95,51976,1046],{"class":210},[95,51978,51979],{"class":210},"}px;\">\n",[95,51981,51982,51985,51987,51989,51991,51993],{"class":97,"line":16616},[95,51983,51984],{"class":210},"                \u003Cspan>${",[95,51986,3862],{"class":105},[95,51988,996],{"class":210},[95,51990,547],{"class":105},[95,51992,1046],{"class":210},[95,51994,51995],{"class":210},"}\u003C\u002Fspan>\n",[95,51997,51998,52001,52003,52005,52007],{"class":97,"line":16622},[95,51999,52000],{"class":210},"                \u003Ch4>第${",[95,52002,547],{"class":105},[95,52004,45551],{"class":101},[95,52006,25103],{"class":154},[95,52008,52009],{"class":210},"}季度\u003C\u002Fh4>\n",[95,52011,52012],{"class":97,"line":16645},[95,52013,52014],{"class":210},"              \u003C\u002Fdiv>          \n",[95,52016,52017,52020],{"class":97,"line":16659},[95,52018,52019],{"class":210},"            `",[95,52021,112],{"class":105},[95,52023,52024],{"class":97,"line":16679},[95,52025,2511],{"class":105},[95,52027,52028],{"class":97,"line":16685},[95,52029,52030],{"class":164},"        \u002F\u002F 盒子结尾\n",[95,52032,52033,52035,52037,52039,52042],{"class":97,"line":16696},[95,52034,51902],{"class":105},[95,52036,51905],{"class":1945},[95,52038,106],{"class":105},[95,52040,52041],{"class":210},"` \u003C\u002Fdiv>`",[95,52043,112],{"class":105},[95,52045,52046,52048,52050],{"class":97,"line":16719},[95,52047,51753],{"class":105},[95,52049,51790],{"class":51277},[95,52051,51284],{"class":105},[95,52053,52054,52056,52058],{"class":97,"line":16741},[95,52055,51762],{"class":105},[95,52057,51777],{"class":51277},[95,52059,51284],{"class":105},[95,52061,52062],{"class":97,"line":16746},[95,52063,2382],{"emptyLinePlaceholder":21},[95,52065,52066,52068,52070],{"class":97,"line":16752},[95,52067,51762],{"class":105},[95,52069,50612],{"class":51277},[95,52071,51284],{"class":105},[66,52073,52075],{"id":52074},"_284-冒泡排序","2.8.4 冒泡排序",[86,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",[92,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},[95,52082,52083,52085,52087,52089],{"class":97,"line":98},[95,52084,51274],{"class":105},[95,52086,51278],{"class":51277},[95,52088,51281],{"class":1945},[95,52090,51284],{"class":105},[95,52092,52093,52095,52097,52099,52101,52103],{"class":97,"line":15},[95,52094,1016],{"class":105},[95,52096,50612],{"class":51277},[95,52098,51293],{"class":1945},[95,52100,151],{"class":105},[95,52102,51298],{"class":210},[95,52104,51284],{"class":105},[95,52106,52107],{"class":97,"line":1161},[95,52108,2382],{"emptyLinePlaceholder":21},[95,52110,52111,52113,52115],{"class":97,"line":1176},[95,52112,1016],{"class":105},[95,52114,51311],{"class":51277},[95,52116,51284],{"class":105},[95,52118,52119,52122,52124,52126,52128,52130],{"class":97,"line":1182},[95,52120,52121],{"class":105},"  \u003C",[95,52123,51321],{"class":51277},[95,52125,51324],{"class":1945},[95,52127,151],{"class":105},[95,52129,51329],{"class":210},[95,52131,51284],{"class":105},[95,52133,52134,52136,52138,52140,52142,52144,52146,52148,52150],{"class":97,"line":1196},[95,52135,52121],{"class":105},[95,52137,51321],{"class":51277},[95,52139,14903],{"class":1945},[95,52141,151],{"class":105},[95,52143,51368],{"class":210},[95,52145,51348],{"class":1945},[95,52147,151],{"class":105},[95,52149,51375],{"class":210},[95,52151,51284],{"class":105},[95,52153,52154,52156,52158,52160,52162],{"class":97,"line":1202},[95,52155,52121],{"class":105},[95,52157,51384],{"class":51277},[95,52159,51387],{"class":105},[95,52161,51384],{"class":51277},[95,52163,51284],{"class":105},[95,52165,52166,52168,52170],{"class":97,"line":1293},[95,52167,51762],{"class":105},[95,52169,51311],{"class":51277},[95,52171,51284],{"class":105},[95,52173,52174],{"class":97,"line":1299},[95,52175,2382],{"emptyLinePlaceholder":21},[95,52177,52178,52180,52182],{"class":97,"line":1311},[95,52179,1016],{"class":105},[95,52181,51777],{"class":51277},[95,52183,51284],{"class":105},[95,52185,52186,52188,52190],{"class":97,"line":1594},[95,52187,52121],{"class":105},[95,52189,51790],{"class":51277},[95,52191,51284],{"class":105},[95,52193,52194,52197,52199,52201,52204,52206,52208,52210,52212,52214,52216,52218,52220,52222],{"class":97,"line":1599},[95,52195,52196],{"class":101},"    let",[95,52198,51810],{"class":105},[95,52200,151],{"class":101},[95,52202,52203],{"class":105}," [",[95,52205,425],{"class":154},[95,52207,12418],{"class":105},[95,52209,399],{"class":154},[95,52211,12418],{"class":105},[95,52213,177],{"class":154},[95,52215,12418],{"class":105},[95,52217,183],{"class":154},[95,52219,12418],{"class":105},[95,52221,323],{"class":154},[95,52223,33231],{"class":105},[95,52225,52226,52228,52230,52232,52234,52236,52238,52240,52242,52244,52246,52249,52251,52253,52255],{"class":97,"line":1605},[95,52227,3183],{"class":101},[95,52229,1640],{"class":105},[95,52231,51824],{"class":101},[95,52233,9421],{"class":105},[95,52235,151],{"class":101},[95,52237,4075],{"class":154},[95,52239,9428],{"class":105},[95,52241,1016],{"class":101},[95,52243,51942],{"class":105},[95,52245,51945],{"class":154},[95,52247,52248],{"class":101}," -",[95,52250,25103],{"class":154},[95,52252,3196],{"class":105},[95,52254,2274],{"class":101},[95,52256,12425],{"class":105},[95,52258,52259,52262,52264,52266,52268,52270,52272,52274,52276,52278,52280,52282,52284,52286,52288,52290,52292],{"class":97,"line":1610},[95,52260,52261],{"class":101},"      for",[95,52263,1640],{"class":105},[95,52265,51824],{"class":101},[95,52267,9483],{"class":105},[95,52269,151],{"class":101},[95,52271,4075],{"class":154},[95,52273,9490],{"class":105},[95,52275,1016],{"class":101},[95,52277,51942],{"class":105},[95,52279,51945],{"class":154},[95,52281,52248],{"class":101},[95,52283,9421],{"class":105},[95,52285,638],{"class":101},[95,52287,25103],{"class":154},[95,52289,9497],{"class":105},[95,52291,2274],{"class":101},[95,52293,12425],{"class":105},[95,52295,52296],{"class":97,"line":1624},[95,52297,52298],{"class":164},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[95,52300,52301,52303,52306,52308,52311,52313,52315],{"class":97,"line":1629},[95,52302,2479],{"class":101},[95,52304,52305],{"class":105}," (arr[j] ",[95,52307,1066],{"class":101},[95,52309,52310],{"class":105}," arr[j ",[95,52312,587],{"class":101},[95,52314,25103],{"class":154},[95,52316,52317],{"class":105},"]) {\n",[95,52319,52320],{"class":97,"line":1635},[95,52321,52322],{"class":164},"          \u002F\u002F 交换两个变量\n",[95,52324,52325,52328,52331,52333],{"class":97,"line":1656},[95,52326,52327],{"class":101},"          let",[95,52329,52330],{"class":105}," tmp ",[95,52332,151],{"class":101},[95,52334,52335],{"class":105}," arr[j]\n",[95,52337,52338,52341,52343,52345,52347,52349],{"class":97,"line":1661},[95,52339,52340],{"class":105},"          arr[j] ",[95,52342,151],{"class":101},[95,52344,52310],{"class":105},[95,52346,587],{"class":101},[95,52348,25103],{"class":154},[95,52350,33231],{"class":105},[95,52352,52353,52356,52358,52360,52362,52364],{"class":97,"line":1675},[95,52354,52355],{"class":105},"          arr[j ",[95,52357,587],{"class":101},[95,52359,25103],{"class":154},[95,52361,4425],{"class":105},[95,52363,151],{"class":101},[95,52365,52366],{"class":105}," tmp\n",[95,52368,52369],{"class":97,"line":1680},[95,52370,2511],{"class":105},[95,52372,52373],{"class":97,"line":1709},[95,52374,52375],{"class":105},"      }\n",[95,52377,52378],{"class":97,"line":1714},[95,52379,2169],{"class":105},[95,52381,52382,52385,52387],{"class":97,"line":1731},[95,52383,52384],{"class":105},"    document.",[95,52386,51905],{"class":1945},[95,52388,52389],{"class":105},"(arr)\n",[95,52391,52392,52395,52397],{"class":97,"line":1736},[95,52393,52394],{"class":105},"  \u003C\u002F",[95,52396,51790],{"class":51277},[95,52398,51284],{"class":105},[95,52400,52401,52403,52405],{"class":97,"line":1741},[95,52402,51762],{"class":105},[95,52404,51777],{"class":51277},[95,52406,51284],{"class":105},[95,52408,52409],{"class":97,"line":1746},[95,52410,2382],{"emptyLinePlaceholder":21},[95,52412,52413,52415,52417],{"class":97,"line":1760},[95,52414,51762],{"class":105},[95,52416,50612],{"class":51277},[95,52418,51284],{"class":105},[10,52420,52421],{},[1444,52422],{"alt":14,"src":52423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[10,52425,52426],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[10,52428,52429],{},"let arr = [4, 2, 5, 1, 3]",[10,52431,52432],{},"\u002F\u002F 1.升序排列写法",[10,52434,52435],{},"arr.sort(function (a, b) {",[10,52437,52438],{},"return a - b",[10,52440,52441],{},"})",[10,52443,52444],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[10,52446,52447],{},"\u002F\u002F 降序排列写法",[10,52449,52435],{},[10,52451,52452],{},"return b - a",[10,52454,52441],{},[10,52456,52457],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[37,52459,52461],{"id":52460},"_29-函数","2.9 函数",[10,52463,52464],{},[1444,52465],{"alt":14,"src":52466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[10,52468,52469],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[10,52471,52472],{},"函数的声明用function",[10,52474,52475],{},"函数里边可以嵌套函数",[66,52477,52479],{"id":52478},"_291-函数传参","2.9.1 函数传参",[10,52481,52482],{},[1444,52483],{"alt":14,"src":52484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[10,52486,52487],{},[1444,52488],{"alt":14,"src":52489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1113,52491,52492,52495,52498,52501,52504,52507],{},[52,52493,52494],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[52,52496,52497],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[52,52499,52500],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[52,52502,52503],{},"开发中尽量保持形参和实参个数一致",[52,52505,52506],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[52,52508,52509],{},"形参只在函数中有用，所以不需要进行声明这个变量",[10,52511,52512],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[66,52514,52516],{"id":52515},"_292-函数的返回值","2.9.2 函数的返回值",[10,52518,52519],{},[1444,52520],{"alt":14,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[10,52523,52524],{},[1444,52525],{"alt":14,"src":52526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1113,52528,52529,52532,52535,52538,52541],{},[52,52530,52531],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[52,52533,52534],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[52,52536,52537],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[52,52539,52540],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[52,52542,52543],{},"断点调试:进入函数内部看执行过程F11",[66,52545,52547],{"id":52546},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[86,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",[92,52552,52553,52558,52563,52567,52572],{"__ignoreMap":14},[95,52554,52555],{"class":97,"line":98},[95,52556,52557],{"class":105},"    function fn(a, b) {\n",[95,52559,52560],{"class":97,"line":15},[95,52561,52562],{"class":105},"      console.log(a + b);\n",[95,52564,52565],{"class":97,"line":1161},[95,52566,2169],{"class":105},[95,52568,52569],{"class":97,"line":1176},[95,52570,52571],{"class":105},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[95,52573,52574],{"class":97,"line":1182},[95,52575,52576],{"class":105},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[66,52578,52580],{"id":52579},"_294-作用域","2.9.4 作用域",[1113,52582,52583,52589,52594,52597,52600],{},[52,52584,52585,52586],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[255,52587,52588],{},"作用域",[52,52590,52591],{},[255,52592,52593],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[52,52595,52596],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[52,52598,52599],{},"函数内部可以直接所使用全局变量",[52,52601,52602],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[10,52604,14616],{},[86,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",[92,52609,52610,52615,52620,52624,52629,52634,52639],{"__ignoreMap":14},[95,52611,52612],{"class":97,"line":98},[95,52613,52614],{"class":105},"    function fun() {\n",[95,52616,52617],{"class":97,"line":15},[95,52618,52619],{"class":105},"      num = 10\n",[95,52621,52622],{"class":97,"line":1161},[95,52623,2169],{"class":105},[95,52625,52626],{"class":97,"line":1176},[95,52627,52628],{"class":105},"    fun()\n",[95,52630,52631],{"class":97,"line":1182},[95,52632,52633],{"class":105},"    console.log(num)\n",[95,52635,52636],{"class":97,"line":1196},[95,52637,52638],{"class":105},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[95,52640,52641],{"class":97,"line":1202},[95,52642,52643],{"class":105},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1113,52645,52646,52649],{},[52,52647,52648],{},"函数内部的形参可以看做是局部变量",[52,52650,52651],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[10,52653,52654,52655],{},"变量访问原则： ",[255,52656,52657],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[66,52659,52661],{"id":52660},"_295-匿名函数","2.9.5 匿名函数",[10,52663,52664],{},"函数可以分为具名函数和匿名函数",[10,52666,52667],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[49,52669,52670],{},[52,52671,52672],{},"函数表达式",[10,52674,52675],{},[1444,52676],{"alt":14,"src":52677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[10,52679,52680],{},"里边也可以写参数",[10,52682,52683],{},"具名函数调用位置可以随意调整；",[10,52685,52686],{},"匿名函数函数表达式形式只能在声明后才可以使用",[49,52688,52689],{"start":15},[52,52690,52691],{},"立即执行函数",[10,52693,52694],{},[1444,52695],{"alt":14,"src":52696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[10,52698,52699],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[10,52701,52702],{},"写法：两个小括号，然后在第一个小括号中写function",[10,52704,52705],{},"(function () {})();",[10,52707,52708],{},"不要落下最后的;",[10,52710,52711],{},"立即执行函数必须要加;",[10,52713,52714],{},"分号写前写后都没问题",[10,52716,52717],{},"写前：",[10,52719,52720],{},"(function() {})()",[10,52722,52723],{},";(function () {})();",[10,52725,52726],{},"写后:",[10,52728,52729],{},"(function() {})();",[10,52731,52705],{},[10,52733,52734],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[10,52736,52737],{},"还有一种写法：",[10,52739,52740],{},"(function(){}());",[10,52742,52743],{},"或者:",[10,52745,52746],{},"!function(){}();",[10,52748,52749],{},"立即执行函数有时候也是可以加名字的：",[10,52751,52752],{},"(function flexible(window,document) {}(window,document));",[10,52754,52755],{},"省一些调用方法",[66,52757,52759],{"id":52758},"_296-逻辑中断","2.9.6 逻辑中断!!!",[10,52761,52762],{},[1444,52763],{"alt":14,"src":52764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[10,52766,52767],{},"这样就不用非得给x,y初始化了",[10,52769,52770],{},[1444,52771],{"alt":14,"src":52772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[10,52774,52775],{},"代码执行时先看左边",[10,52777,52778],{},"例如：console.log(false && 3+5)",[10,52780,52781],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[10,52783,52784],{},"&&都是真时，就返回最后一个真值",[10,52786,52787],{},"console.log(11 && 22)",[10,52789,52790],{},"输出22",[10,52792,52793],{},"逻辑与：遇真则真",[10,52795,14616],{},[10,52797,52798],{},"let age=1",[10,52800,52801],{},"console.log(11 || age++)",[10,52803,52804],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[10,52806,52807],{},"console.log(11 || 22)",[10,52809,52810],{},"||逻辑或遇到真就直接输出，输出结果为11",[10,52812,52813],{},"||如果都是假的话，就取最后一个假的值了",[66,52815,52817],{"id":52816},"_297-转换为boolean型","2.9.7 转换为Boolean型",[10,52819,52820],{},"显示转换：",[10,52822,52823,52826,52827],{},[255,52824,52825],{},"记忆","： ",[255,52828,52829],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[10,52831,52832],{},"空字符串为假，其他字符串全为真",[10,52834,52835],{},[1444,52836],{"alt":14,"src":52837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[10,52839,52840],{},"隐式转换：",[10,52842,52843],{},[1444,52844],{"alt":14,"src":52845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[10,52847,52848],{},"隐式转换:",[10,52850,52851],{},"null+3=3",[10,52853,52854],{},"undefined+3=NaN",[10,52856,52857],{},"null==undefined 输出true,他两个都当0看",[10,52859,52860],{},"null===undefined 输出false",[10,52862,52863],{},"undefined做任何操作都是NaN",[10,52865,52866],{},"NaN不等于NaN，NaN表示计算错误",[37,52868,52870],{"id":52869},"_210-对象","2.10 对象",[66,52872,52874],{"id":52873},"_2101-对象的介绍","2.10.1 对象的介绍",[10,52876,52877],{},"对象也是一种数据类型，里边的数据是无序的",[10,52879,52880],{},"对象由属性和方法组成",[10,52882,52883],{},[1444,52884],{"alt":14,"src":52885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[10,52887,52888],{},[1444,52889],{"alt":14,"src":52890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[10,52892,52893],{},[1444,52894],{"alt":14,"src":52895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[66,52897,52899],{"id":52898},"_2102-对象属性","2.10.2 对象属性",[10,52901,52902],{},[1444,52903],{"alt":14,"src":52904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[49,52906,52907],{},[52,52908,52909],{},"查询对象",[10,52911,52912],{},"对象名.属性 goods.uname",[10,52914,52915],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[10,52917,52918],{},"不带字符串的属性名也可以使用 对象名['属性名']",[10,52920,52921],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[10,52923,52924],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[49,52926,52927],{"start":15},[52,52928,52929],{},"重新赋值",[10,52931,52932],{},"对象名.属性=新值",[49,52934,52935],{"start":1161},[52,52936,52937],{},"增加新数据",[10,52939,52932],{},[49,52941,52942],{"start":1176},[52,52943,52944],{},"删除对象中的属性",[10,52946,52947],{},"delete 对象名.属性",[66,52949,52951],{"id":52950},"_2103-对象方法","2.10.3 对象方法",[10,52953,52954],{},[1444,52955],{"alt":14,"src":52956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[10,52958,52959],{},"后边跟的是匿名函数",[10,52961,52962],{},"对象外面的叫函数；对象内部的叫方法",[10,52964,52965],{},[1444,52966],{"alt":14,"src":52967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[66,52969,52971],{"id":52970},"_2104-遍历对象","2.10.4 遍历对象",[10,52973,52974],{},"理解为加括号的python字典遍历",[10,52976,52977],{},[1444,52978],{"alt":14,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[10,52981,52982],{},"k是字符串类型",[10,52984,52985],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[86,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",[92,52990,52991,52996,53001,53006,53011],{"__ignoreMap":14},[95,52992,52993],{"class":97,"line":98},[95,52994,52995],{"class":105},"   let arr = [1, 2, 3]\n",[95,52997,52998],{"class":97,"line":15},[95,52999,53000],{"class":105},"    for (let k in arr) {\n",[95,53002,53003],{"class":97,"line":1161},[95,53004,53005],{"class":105},"      console.log(k)\n",[95,53007,53008],{"class":97,"line":1176},[95,53009,53010],{"class":105},"      console.log(arr[k])\n",[95,53012,53013],{"class":97,"line":1182},[95,53014,2169],{"class":105},[10,53016,53017],{},[1444,53018],{"alt":14,"src":53019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[10,53021,53022],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[10,53024,53025],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[10,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",[10,53033,53034],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[66,53036,53038],{"id":53037},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[10,53040,53041],{},"数组中放对象信息",[86,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",[92,53048,53049,53057,53062,53067,53072,53077,53082,53087,53092,53097,53102,53107,53112,53116,53120],{"__ignoreMap":14},[95,53050,53051,53053,53055],{"class":97,"line":98},[95,53052,1016],{"class":105},[95,53054,51790],{"class":51277},[95,53056,51284],{"class":105},[95,53058,53059],{"class":97,"line":15},[95,53060,53061],{"class":105},"    let students = [\n",[95,53063,53064],{"class":97,"line":1161},[95,53065,53066],{"class":105},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[95,53068,53069],{"class":97,"line":1176},[95,53070,53071],{"class":105},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[95,53073,53074],{"class":97,"line":1182},[95,53075,53076],{"class":105},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[95,53078,53079],{"class":97,"line":1196},[95,53080,53081],{"class":105},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[95,53083,53084],{"class":97,"line":1202},[95,53085,53086],{"class":105},"    ]\n",[95,53088,53089],{"class":97,"line":1293},[95,53090,53091],{"class":105},"    for (let i = 0; i \u003C students.length; i++) {\n",[95,53093,53094],{"class":97,"line":1299},[95,53095,53096],{"class":105},"      for (let k in students[i]) {\n",[95,53098,53099],{"class":97,"line":1311},[95,53100,53101],{"class":105},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[95,53103,53104],{"class":97,"line":1594},[95,53105,53106],{"class":105},"        \u002F\u002F输出每个人的名字：\n",[95,53108,53109],{"class":97,"line":1599},[95,53110,53111],{"class":105},"        \u002F\u002Fconsole.log(students[i].name)\n",[95,53113,53114],{"class":97,"line":1605},[95,53115,52375],{"class":105},[95,53117,53118],{"class":97,"line":1610},[95,53119,2169],{"class":105},[95,53121,53122,53124,53126],{"class":97,"line":1624},[95,53123,52394],{"class":105},[95,53125,51790],{"class":51277},[95,53127,51284],{"class":105},[66,53129,53131],{"id":53130},"_2106-内置对象","2.10.6 内置对象",[10,53133,53134],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[49,53136,53137],{},[52,53138,53139],{},"数学对象Math",[10,53141,53142],{},[1444,53143],{"alt":14,"src":53144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[10,53146,53147],{},[344,53148,53151],{"href":53149,"rel":53150},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23849],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[10,53153,53154],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[10,53156,53157],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[10,53159,53160],{},"数组不可以使用Math中的max,min来求最大值与最小值",[10,53162,53163],{},"null是一个空对象，可以认为：null类似于let obj={}",[10,53165,53166],{},"null属于对象数据类型",[49,53168,53169],{"start":15},[52,53170,53171],{},"生成任意范围随机数",[10,53173,53174],{},[1444,53175],{"alt":14,"src":53176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[10,53178,53179],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[10,53181,53182],{},"乘以几就取不到几",[10,53184,53185],{},"取数组中的随机元素：",[10,53187,53188],{},"let arr = ['red', 'green', 'blue']",[10,53190,53191],{},"let random = Math.floor(Math.random() * arr.length)",[10,53193,53194],{},"console.log(arr[random])",[10,53196,53197],{},"这个函数得到的是全闭区间",[10,53199,53200],{},"function getRandom(N, M) {",[10,53202,53203],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[10,53205,1052],{},[10,53207,53208],{},"console.log(getRandom(4, 8))",[66,53210,53212],{"id":53211},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[10,53214,53215],{},[1444,53216],{"alt":14,"src":53217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[10,53219,53220],{},[1444,53221],{"alt":14,"src":53222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[10,53224,53225],{},[1444,53226],{"alt":14,"src":53227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[10,53229,53230],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[10,53232,53233],{},[1444,53234],{"alt":14,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[10,53237,53238],{},[1444,53239],{"alt":14,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[10,53242,53243],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[10,53245,53246],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[10,53248,53249],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5109,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":1161,"text":50450},{"id":50466,"depth":1161,"text":50467},{"id":50506,"depth":1161,"text":50507},{"id":50518,"depth":1161,"text":50519},{"id":50527,"depth":1161,"text":50528},{"id":50575,"depth":1161,"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":1161,"text":50900},{"id":50908,"depth":1161,"text":50909},{"id":50936,"depth":1161,"text":50937},{"id":50972,"depth":1161,"text":50973},{"id":50997,"depth":1161,"text":50998},{"id":51009,"depth":15,"text":51010,"children":53275},[53276,53277],{"id":51030,"depth":1161,"text":51031},{"id":51124,"depth":1161,"text":51125},{"id":51182,"depth":15,"text":51183,"children":53279},[53280,53281,53282,53283],{"id":51186,"depth":1161,"text":51187},{"id":51210,"depth":1161,"text":51211},{"id":51263,"depth":1161,"text":51264},{"id":52074,"depth":1161,"text":52075},{"id":52460,"depth":15,"text":52461,"children":53285},[53286,53287,53288,53289,53290,53291,53292],{"id":52478,"depth":1161,"text":52479},{"id":52515,"depth":1161,"text":52516},{"id":52546,"depth":1161,"text":52547},{"id":52579,"depth":1161,"text":52580},{"id":52660,"depth":1161,"text":52661},{"id":52758,"depth":1161,"text":52759},{"id":52816,"depth":1161,"text":52817},{"id":52869,"depth":15,"text":52870,"children":53294},[53295,53296,53297,53298,53299,53300,53301],{"id":52873,"depth":1161,"text":52874},{"id":52898,"depth":1161,"text":52899},{"id":52950,"depth":1161,"text":52951},{"id":52970,"depth":1161,"text":52971},{"id":53037,"depth":1161,"text":53038},{"id":53130,"depth":1161,"text":53131},{"id":53211,"depth":1161,"text":53212},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50437,"description":23360},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53308,"title":53309,"body":53310,"description":23360,"extension":18,"meta":76650,"navigation":21,"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],[33,53313,53309],{"id":53314},"_3web-apis",[10,53316,53317],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[10,53319,53320],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[10,53322,53323],{},[1444,53324],{"alt":14,"src":53325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[10,53327,53328],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[10,53330,53331],{},"建议数组和对象使用 const 来声明",[10,53333,53334],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[37,53336,53338],{"id":53337},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[66,53340,53342],{"id":53341},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[10,53344,53345,53348],{},[92,53346,53347],{},"document"," = HTML 文件解析后的对象化表示；",[10,53350,53351,53353],{},[92,53352,53347],{}," ≠ HTML 文件本身",[10,53355,53356,53361],{},[255,53357,53358],{},[92,53359,53360],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[10,53363,53364,53368],{},[255,53365,53366],{},[92,53367,53347],{}," ：容器里的内容，代表当前加载的网页（DOM）",[10,53370,53371],{},"document实际上为window.document的简写",[66,53373,53375],{"id":53374},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[10,53377,53378],{},[1444,53379],{"alt":14,"src":53380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[10,53382,53383],{},[1444,53384],{"alt":14,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[10,53387,53388],{},[1444,53389],{"alt":14,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[10,53392,53393],{},"console.dir()",[10,53395,53396],{},"dir用来打印对象",[1113,53398,53399,53402,53405],{},[52,53400,53401],{},"任何一个标签，都是一个对象",[52,53403,53404],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[52,53406,53407],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[10,53409,53410],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[66,53412,53414],{"id":53413},"_312-获取dom对象","3.1.2 获取DoM对象",[10,53416,53417],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[10,53419,53420],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[10,53422,53423],{},[255,53424,53425],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[49,53427,53428],{},[52,53429,53430],{},"利用CSS选择器来获取标签元素",[10,53432,53433],{},[1444,53434],{"alt":14,"src":53435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[10,53437,53438],{},"里边的选择器必须必须加引号！！！",[10,53440,53441],{},"只选择第一个元素",[86,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",[92,53446,53447,53455,53476,53495,53503,53508,53513,53518,53526],{"__ignoreMap":14},[95,53448,53449,53451,53453],{"class":97,"line":98},[95,53450,1016],{"class":105},[95,53452,51777],{"class":51277},[95,53454,51284],{"class":105},[95,53456,53457,53459,53461,53464,53466,53469,53472,53474],{"class":97,"line":15},[95,53458,52121],{"class":105},[95,53460,51588],{"class":51277},[95,53462,53463],{"class":1945}," class",[95,53465,151],{"class":105},[95,53467,53468],{"class":210},"\"box\"",[95,53470,53471],{"class":105},">123\u003C\u002F",[95,53473,51588],{"class":51277},[95,53475,51284],{"class":105},[95,53477,53478,53480,53482,53484,53486,53488,53491,53493],{"class":97,"line":1161},[95,53479,52121],{"class":105},[95,53481,51588],{"class":51277},[95,53483,53463],{"class":1945},[95,53485,151],{"class":105},[95,53487,53468],{"class":210},[95,53489,53490],{"class":105},">456\u003C\u002F",[95,53492,51588],{"class":51277},[95,53494,51284],{"class":105},[95,53496,53497,53499,53501],{"class":97,"line":1176},[95,53498,52121],{"class":105},[95,53500,51790],{"class":51277},[95,53502,51284],{"class":105},[95,53504,53505],{"class":97,"line":1182},[95,53506,53507],{"class":105},"    \u002F\u002F 1.获取匹配的第一个元素\n",[95,53509,53510],{"class":97,"line":1196},[95,53511,53512],{"class":105},"    const box = document.querySelector('div')\n",[95,53514,53515],{"class":97,"line":1202},[95,53516,53517],{"class":105},"    console.dir(box)\n",[95,53519,53520,53522,53524],{"class":97,"line":1293},[95,53521,52394],{"class":105},[95,53523,51790],{"class":51277},[95,53525,51284],{"class":105},[95,53527,53528,53530,53532],{"class":97,"line":1299},[95,53529,51762],{"class":105},[95,53531,51777],{"class":51277},[95,53533,51284],{"class":105},[10,53535,53536],{},"只选123，不选456",[10,53538,53539],{},[1444,53540],{"alt":14,"src":53541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[10,53543,53544],{},"返回的是一个数组的集合，不能对其进行直接修改",[10,53546,53547],{},[1444,53548],{"alt":14,"src":53549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[10,53551,53552],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[10,53554,53555],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[49,53557,53558],{"start":15},[52,53559,53560],{},"其他方法来获取标签元素",[10,53562,53563],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[10,53565,53566],{},[1444,53567],{"alt":14,"src":53568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[66,53570,53572],{"id":53571},"_313-操作元素的内容","3.1.3 操作元素的内容",[10,53574,53575],{},"设置修改DOM元素内容有两种方式：",[1113,53577,53578,53581,53584,53587],{},[52,53579,53580],{},"元素.innerText=''",[52,53582,53583],{},"元素.innerHTML=''",[52,53585,53586],{},"不写字符串输出数字也是可以的",[52,53588,53589],{},"元素.innerHtml=1",[21981,53591,53593],{"id":53592},"_3131-innertext","3.1.3.1 innerText",[10,53595,53596],{},[1444,53597],{"alt":14,"src":53598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[10,53600,53601],{},"思路：实现了修改盒子中的内容！",[10,53603,53604],{},"它只显示纯文本，不解析标签",[21981,53606,53608],{"id":53607},"_3132-innerhtml","3.1.3.2 innerHTML",[10,53610,53611],{},[1444,53612],{"alt":14,"src":53613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[10,53615,53616],{},"相比于innerText，他的强大之处在于可以解析标签",[66,53618,53620],{"id":53619},"_314-操作元素属性","3.1.4 操作元素属性",[21981,53622,53624],{"id":53623},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[10,53626,53627],{},[1444,53628],{"alt":14,"src":53629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21981,53631,53633],{"id":53632},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[10,53635,53636],{},[1444,53637],{"alt":14,"src":53638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[10,53640,53641],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[10,53643,53644],{},"div.style.backgroundColor = 'hotpink'",[10,53646,53647],{},"如果按照css的写法，-表示减，就会出错",[10,53649,53650],{},"body元素不需要再获取，直接用就行！！！！！！",[10,53652,53653],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[10,53655,53656],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[10,53658,53659],{},[1444,53660],{"alt":14,"src":53661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[10,53663,53664],{},[1444,53665],{"alt":14,"src":53666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[49,53668,53669,53672,53675,53678,53681,53684],{},[52,53670,53671],{},"className这个方式就是修改很多样式的时候来使用的！",[52,53673,53674],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[52,53676,53677],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[52,53679,53680],{},"className为属性名，如果还用class的话就导致与关键字冲突",[52,53682,53683],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[52,53685,53686,53687,53692],{},"解析标签的时候就变为了",[51588,53688],{"className":53689},[53690,53691],"nav","box",[53693,53694],"br",{},[10,53696,53697],{},"例子：",[51588,53699],{"className":53700},[53690],[51790,53702,53703],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[10,53705,53706],{},[1444,53707],{"alt":14,"src":53708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[10,53710,53711],{},"追加和删除类名用classList",[10,53713,53714],{},"常用于类似于开关的操作",[10,53716,53717],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[10,53719,53720],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21981,53722,53724],{"id":53723},"_3143-牢记点","3.1.4.3 牢记点",[49,53726,53727,53730,53733,53736,53739,53742,53745,53748,53751],{},[52,53728,53729],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[52,53731,53732],{},"使用style属性操作css时不要忘记引号",[52,53734,53735],{},"使用className或者classList时也不要忘记引号",[52,53737,53738],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[52,53740,53741],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[52,53743,53744],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[52,53746,53747],{},"若： let arr=['1','2',3] arr[0]=1",[52,53749,53750],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[52,53752,53753],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[66,53755,53757],{"id":53756},"_315-操作表单元素","3.1.5 操作表单元素",[49,53759,53760],{},[52,53761,53762],{},"天生的属性",[10,53764,53765],{},[1444,53766],{"alt":14,"src":53767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[10,53769,53770],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[10,53772,53773],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[10,53775,53776],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[10,53778,53779],{},[1444,53780],{"alt":14,"src":53781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[86,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",[92,53786,53787,53792,53824,53829,53834,53839,53844,53848,53853,53858,53875,53887,53892],{"__ignoreMap":14},[95,53788,53789],{"class":97,"line":98},[95,53790,53791],{"class":105},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[95,53793,53794,53796,53799,53802,53804,53807,53809,53811,53813,53815,53817,53819,53822],{"class":97,"line":15},[95,53795,1016],{"class":105},[95,53797,53798],{"class":51277},"input",[95,53800,53801],{"class":1945}," type",[95,53803,151],{"class":105},[95,53805,53806],{"class":210},"\"checkbox\"",[95,53808,14903],{"class":1945},[95,53810,151],{"class":105},[95,53812,7635],{"class":210},[95,53814,14942],{"class":1945},[95,53816,151],{"class":105},[95,53818,7635],{"class":210},[95,53820,53821],{"class":1945}," checked",[95,53823,51284],{"class":105},[95,53825,53826],{"class":97,"line":1161},[95,53827,53828],{"class":105},"不选的话：\n",[95,53830,53831],{"class":97,"line":1176},[95,53832,53833],{"class":105},"const input = document.querySelector('input')\n",[95,53835,53836],{"class":97,"line":1182},[95,53837,53838],{"class":105},"input.checked=false\n",[95,53840,53841],{"class":97,"line":1196},[95,53842,53843],{"class":105},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[95,53845,53846],{"class":97,"line":1202},[95,53847,2382],{"emptyLinePlaceholder":21},[95,53849,53850],{"class":97,"line":1293},[95,53851,53852],{"class":105},"禁用按钮：\n",[95,53854,53855],{"class":97,"line":1299},[95,53856,53857],{"class":105},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[95,53859,53860,53862,53865,53868,53871,53873],{"class":97,"line":1311},[95,53861,1016],{"class":105},[95,53863,53864],{"class":51277},"button",[95,53866,53867],{"class":1945}," disabled",[95,53869,53870],{"class":105},">点击\u003C\u002F",[95,53872,53864],{"class":51277},[95,53874,51284],{"class":105},[95,53876,53877,53879,53881,53883,53885],{"class":97,"line":1594},[95,53878,1016],{"class":105},[95,53880,53864],{"class":51277},[95,53882,53870],{"class":105},[95,53884,53864],{"class":51277},[95,53886,51284],{"class":105},[95,53888,53889],{"class":97,"line":1599},[95,53890,53891],{"class":105},"const bt = document.querySelector('button')\n",[95,53893,53894],{"class":97,"line":1605},[95,53895,53896],{"class":105},"bt.disabled = false\n",[49,53898,53899],{"start":15},[52,53900,53901],{},"自定义属性",[10,53903,53904],{},[1444,53905],{"alt":14,"src":53906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[86,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",[92,53911,53912,53920,53948,53967,53986,54005,54024,54032,54037,54042,54047,54052,54060],{"__ignoreMap":14},[95,53913,53914,53916,53918],{"class":97,"line":98},[95,53915,1016],{"class":105},[95,53917,51777],{"class":51277},[95,53919,51284],{"class":105},[95,53921,53922,53924,53926,53929,53931,53933,53936,53938,53941,53944,53946],{"class":97,"line":15},[95,53923,52121],{"class":105},[95,53925,51588],{"class":51277},[95,53927,53928],{"class":1945}," data-id",[95,53930,151],{"class":105},[95,53932,3660],{"class":210},[95,53934,53935],{"class":1945}," data-spm",[95,53937,151],{"class":105},[95,53939,53940],{"class":210},"\"我不知道\"",[95,53942,53943],{"class":105},">1\u003C\u002F",[95,53945,51588],{"class":51277},[95,53947,51284],{"class":105},[95,53949,53950,53952,53954,53956,53958,53960,53963,53965],{"class":97,"line":1161},[95,53951,52121],{"class":105},[95,53953,51588],{"class":51277},[95,53955,53928],{"class":1945},[95,53957,151],{"class":105},[95,53959,3683],{"class":210},[95,53961,53962],{"class":105},">2\u003C\u002F",[95,53964,51588],{"class":51277},[95,53966,51284],{"class":105},[95,53968,53969,53971,53973,53975,53977,53979,53982,53984],{"class":97,"line":1176},[95,53970,52121],{"class":105},[95,53972,51588],{"class":51277},[95,53974,53928],{"class":1945},[95,53976,151],{"class":105},[95,53978,3696],{"class":210},[95,53980,53981],{"class":105},">3\u003C\u002F",[95,53983,51588],{"class":51277},[95,53985,51284],{"class":105},[95,53987,53988,53990,53992,53994,53996,53998,54001,54003],{"class":97,"line":1182},[95,53989,52121],{"class":105},[95,53991,51588],{"class":51277},[95,53993,53928],{"class":1945},[95,53995,151],{"class":105},[95,53997,3709],{"class":210},[95,53999,54000],{"class":105},">4\u003C\u002F",[95,54002,51588],{"class":51277},[95,54004,51284],{"class":105},[95,54006,54007,54009,54011,54013,54015,54017,54020,54022],{"class":97,"line":1196},[95,54008,52121],{"class":105},[95,54010,51588],{"class":51277},[95,54012,53928],{"class":1945},[95,54014,151],{"class":105},[95,54016,3730],{"class":210},[95,54018,54019],{"class":105},">5\u003C\u002F",[95,54021,51588],{"class":51277},[95,54023,51284],{"class":105},[95,54025,54026,54028,54030],{"class":97,"line":1202},[95,54027,52121],{"class":105},[95,54029,51790],{"class":51277},[95,54031,51284],{"class":105},[95,54033,54034],{"class":97,"line":1293},[95,54035,54036],{"class":105},"    const one = document.querySelector('div')\n",[95,54038,54039],{"class":97,"line":1299},[95,54040,54041],{"class":105},"    console.log(one.dataset)\n",[95,54043,54044],{"class":97,"line":1311},[95,54045,54046],{"class":105},"    console.log(one.dataset.id)\n",[95,54048,54049],{"class":97,"line":1594},[95,54050,54051],{"class":105},"    console.log(one.dataset.spm)\n",[95,54053,54054,54056,54058],{"class":97,"line":1599},[95,54055,52394],{"class":105},[95,54057,51790],{"class":51277},[95,54059,51284],{"class":105},[95,54061,54062,54064,54066],{"class":97,"line":1605},[95,54063,51762],{"class":105},[95,54065,51777],{"class":51277},[95,54067,51284],{"class":105},[10,54069,54070],{},[1444,54071],{"alt":14,"src":54072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[10,54074,54075],{},"document.querySelector选择的是第一个对象（元素）",[66,54077,54079],{"id":54078},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[10,54081,54082],{},[1444,54083],{"alt":14,"src":54084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[10,54086,54087],{},[1444,54088],{"alt":14,"src":54089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[10,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",[10,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",[10,54103,54104],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[10,54106,54107],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[10,54109,54110],{},"单位为毫秒！！！",[10,54112,54113],{},"可以搭配匿名函数来用！！！",[10,54115,54116],{},"setInterval(function () {",[10,54118,54119],{},"alert('两秒执行一次')",[10,54121,54122],{},"}, 2000)",[10,54124,54125],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[10,54127,54128],{},"function fn() {",[10,54130,54131],{},"document.write(1)",[10,54133,1052],{},[10,54135,54136],{},"setInterval(fn, 1000)",[10,54138,54139],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[10,54141,54142],{},"setInterval('fn()', 1000)",[10,54144,54145],{},[1444,54146],{"alt":14,"src":54147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21981,54149,54151],{"id":54150},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[86,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",[92,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},[95,54158,54159,54161,54163,54165],{"class":97,"line":98},[95,54160,51274],{"class":105},[95,54162,51278],{"class":51277},[95,54164,51281],{"class":1945},[95,54166,51284],{"class":105},[95,54168,54169,54171,54173,54175,54177,54179],{"class":97,"line":15},[95,54170,1016],{"class":105},[95,54172,50612],{"class":51277},[95,54174,51293],{"class":1945},[95,54176,151],{"class":105},[95,54178,51298],{"class":210},[95,54180,51284],{"class":105},[95,54182,54183],{"class":97,"line":1161},[95,54184,2382],{"emptyLinePlaceholder":21},[95,54186,54187,54189,54191],{"class":97,"line":1176},[95,54188,1016],{"class":105},[95,54190,51311],{"class":51277},[95,54192,51284],{"class":105},[95,54194,54195,54197,54199,54201,54203,54205],{"class":97,"line":1182},[95,54196,52121],{"class":105},[95,54198,51321],{"class":51277},[95,54200,51324],{"class":1945},[95,54202,151],{"class":105},[95,54204,51329],{"class":210},[95,54206,51284],{"class":105},[95,54208,54209,54211,54213,54215,54217,54219,54221,54223,54225],{"class":97,"line":1196},[95,54210,52121],{"class":105},[95,54212,51321],{"class":51277},[95,54214,14903],{"class":1945},[95,54216,151],{"class":105},[95,54218,51368],{"class":210},[95,54220,51348],{"class":1945},[95,54222,151],{"class":105},[95,54224,51375],{"class":210},[95,54226,51284],{"class":105},[95,54228,54229,54231,54233,54235,54237],{"class":97,"line":1202},[95,54230,52121],{"class":105},[95,54232,51384],{"class":51277},[95,54234,51387],{"class":105},[95,54236,51384],{"class":51277},[95,54238,51284],{"class":105},[95,54240,54241,54243,54245],{"class":97,"line":1293},[95,54242,51762],{"class":105},[95,54244,51311],{"class":51277},[95,54246,51284],{"class":105},[95,54248,54249],{"class":97,"line":1299},[95,54250,2382],{"emptyLinePlaceholder":21},[95,54252,54253,54255,54257],{"class":97,"line":1311},[95,54254,1016],{"class":105},[95,54256,51777],{"class":51277},[95,54258,51284],{"class":105},[95,54260,54261,54263,54266,54268,54270,54272,54274,54276,54278,54281,54283,54286,54289,54291,54294],{"class":97,"line":1594},[95,54262,52121],{"class":105},[95,54264,54265],{"class":51277},"textarea",[95,54267,14903],{"class":1945},[95,54269,151],{"class":105},[95,54271,7635],{"class":210},[95,54273,14942],{"class":1945},[95,54275,151],{"class":105},[95,54277,7635],{"class":210},[95,54279,54280],{"class":1945}," cols",[95,54282,151],{"class":105},[95,54284,54285],{"class":210},"\"30\"",[95,54287,54288],{"class":1945}," rows",[95,54290,151],{"class":105},[95,54292,54293],{"class":210},"\"10\"",[95,54295,51284],{"class":105},[95,54297,54298],{"class":97,"line":1599},[95,54299,54300],{"class":105},"        用户注册协议\n",[95,54302,54303],{"class":97,"line":1605},[95,54304,54305],{"class":105},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[95,54307,54308],{"class":97,"line":1610},[95,54309,54310],{"class":105},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[95,54312,54313,54315,54317],{"class":97,"line":1624},[95,54314,51753],{"class":105},[95,54316,54265],{"class":51277},[95,54318,51284],{"class":105},[95,54320,54321,54323,54325],{"class":97,"line":1629},[95,54322,52121],{"class":105},[95,54324,53693],{"class":51277},[95,54326,51284],{"class":105},[95,54328,54329,54331,54333,54335,54337,54340,54342,54345,54347],{"class":97,"line":1635},[95,54330,52121],{"class":105},[95,54332,53864],{"class":51277},[95,54334,53463],{"class":1945},[95,54336,151],{"class":105},[95,54338,54339],{"class":210},"\"btn\"",[95,54341,53867],{"class":1945},[95,54343,54344],{"class":105},">我已经阅读用户协议(5)\u003C\u002F",[95,54346,53864],{"class":51277},[95,54348,51284],{"class":105},[95,54350,54351,54353,54355],{"class":97,"line":1656},[95,54352,52121],{"class":105},[95,54354,51790],{"class":51277},[95,54356,51284],{"class":105},[95,54358,54359],{"class":97,"line":1661},[95,54360,54361],{"class":164},"    \u002F\u002F 1. 获取元素\n",[95,54363,54364,54366,54369,54371,54374,54377,54379,54382],{"class":97,"line":1675},[95,54365,11204],{"class":101},[95,54367,54368],{"class":154}," btn",[95,54370,13547],{"class":101},[95,54372,54373],{"class":105}," document.",[95,54375,54376],{"class":1945},"querySelector",[95,54378,106],{"class":105},[95,54380,54381],{"class":210},"'.btn'",[95,54383,112],{"class":105},[95,54385,54386],{"class":97,"line":1680},[95,54387,54388],{"class":164},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[95,54390,54391],{"class":97,"line":1709},[95,54392,54393],{"class":164},"    \u002F\u002F 2. 倒计时\n",[95,54395,54396,54398,54400,54402],{"class":97,"line":1714},[95,54397,52196],{"class":101},[95,54399,9421],{"class":105},[95,54401,151],{"class":101},[95,54403,54404],{"class":154}," 5\n",[95,54406,54407],{"class":97,"line":1731},[95,54408,54409],{"class":164},"    \u002F\u002F 2.1 开启定时器\n",[95,54411,54412,54414,54417,54419,54422,54424,54427],{"class":97,"line":1736},[95,54413,52196],{"class":101},[95,54415,54416],{"class":105}," n ",[95,54418,151],{"class":101},[95,54420,54421],{"class":1945}," setInterval",[95,54423,106],{"class":105},[95,54425,54426],{"class":101},"function",[95,54428,54429],{"class":105}," () {\n",[95,54431,54432,54435],{"class":97,"line":1741},[95,54433,54434],{"class":105},"      i",[95,54436,54437],{"class":101},"--\n",[95,54439,54440,54443,54445,54448,54450],{"class":97,"line":1746},[95,54441,54442],{"class":105},"      btn.innerHTML ",[95,54444,151],{"class":101},[95,54446,54447],{"class":210}," `我已经阅读用户协议(${",[95,54449,547],{"class":105},[95,54451,54452],{"class":210},"})`\n",[95,54454,54455,54458,54461,54464,54466],{"class":97,"line":1760},[95,54456,54457],{"class":101},"      if",[95,54459,54460],{"class":105}," (i ",[95,54462,54463],{"class":101},"===",[95,54465,4075],{"class":154},[95,54467,12425],{"class":105},[95,54469,54470,54473,54476],{"class":97,"line":1765},[95,54471,54472],{"class":1945},"        clearInterval",[95,54474,54475],{"class":105},"(n)  ",[95,54477,54478],{"class":164},"\u002F\u002F 关闭定时器\n",[95,54480,54481],{"class":97,"line":2559},[95,54482,54483],{"class":164},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[95,54485,54486,54489,54491],{"class":97,"line":2573},[95,54487,54488],{"class":105},"        btn.disabled ",[95,54490,151],{"class":101},[95,54492,54493],{"class":154}," false\n",[95,54495,54496,54499,54501],{"class":97,"line":2581},[95,54497,54498],{"class":105},"        btn.innerHTML ",[95,54500,151],{"class":101},[95,54502,54503],{"class":210}," '同意'\n",[95,54505,54506],{"class":97,"line":2586},[95,54507,52375],{"class":105},[95,54509,54510,54513,54515],{"class":97,"line":2592},[95,54511,54512],{"class":105},"    }, ",[95,54514,6393],{"class":154},[95,54516,112],{"class":105},[95,54518,54519],{"class":97,"line":2598},[95,54520,2382],{"emptyLinePlaceholder":21},[95,54522,54523,54525,54527],{"class":97,"line":2603},[95,54524,52394],{"class":105},[95,54526,51790],{"class":51277},[95,54528,51284],{"class":105},[95,54530,54531,54533,54535],{"class":97,"line":7931},[95,54532,51762],{"class":105},[95,54534,51777],{"class":51277},[95,54536,51284],{"class":105},[95,54538,54539],{"class":97,"line":7955},[95,54540,2382],{"emptyLinePlaceholder":21},[95,54542,54543,54545,54547],{"class":97,"line":7960},[95,54544,51762],{"class":105},[95,54546,50612],{"class":51277},[95,54548,51284],{"class":105},[10,54550,54551],{},"不要一直想着用死循环,避免死循环",[10,54553,54554,54557],{},[92,54555,54556],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21981,54559,54561],{"id":54560},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[49,54563,54564],{},[52,54565,54566],{},"法1",[86,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",[92,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},[95,54573,54574,54576,54578,54580],{"class":97,"line":98},[95,54575,51274],{"class":105},[95,54577,51278],{"class":51277},[95,54579,51281],{"class":1945},[95,54581,51284],{"class":105},[95,54583,54584,54586,54588,54590,54592,54594],{"class":97,"line":15},[95,54585,1016],{"class":105},[95,54587,50612],{"class":51277},[95,54589,51293],{"class":1945},[95,54591,151],{"class":105},[95,54593,51298],{"class":210},[95,54595,51284],{"class":105},[95,54597,54598],{"class":97,"line":1161},[95,54599,2382],{"emptyLinePlaceholder":21},[95,54601,54602,54604,54606],{"class":97,"line":1176},[95,54603,1016],{"class":105},[95,54605,51311],{"class":51277},[95,54607,51284],{"class":105},[95,54609,54610,54612,54614,54616,54618,54620],{"class":97,"line":1182},[95,54611,52121],{"class":105},[95,54613,51321],{"class":51277},[95,54615,51324],{"class":1945},[95,54617,151],{"class":105},[95,54619,51329],{"class":210},[95,54621,51284],{"class":105},[95,54623,54624,54626,54628,54630,54632,54634,54636,54638,54640],{"class":97,"line":1196},[95,54625,52121],{"class":105},[95,54627,51321],{"class":51277},[95,54629,14903],{"class":1945},[95,54631,151],{"class":105},[95,54633,51368],{"class":210},[95,54635,51348],{"class":1945},[95,54637,151],{"class":105},[95,54639,51375],{"class":210},[95,54641,51284],{"class":105},[95,54643,54644,54646,54648,54650,54652],{"class":97,"line":1202},[95,54645,52121],{"class":105},[95,54647,51384],{"class":51277},[95,54649,51387],{"class":105},[95,54651,51384],{"class":51277},[95,54653,51284],{"class":105},[95,54655,54656,54658,54660],{"class":97,"line":1293},[95,54657,52121],{"class":105},[95,54659,5109],{"class":51277},[95,54661,51284],{"class":105},[95,54663,54664,54666],{"class":97,"line":1299},[95,54665,6386],{"class":51277},[95,54667,15555],{"class":105},[95,54669,54670,54673,54675,54677],{"class":97,"line":1311},[95,54671,54672],{"class":154},"      padding",[95,54674,51414],{"class":105},[95,54676,297],{"class":154},[95,54678,1272],{"class":105},[95,54680,54681,54684,54686,54688],{"class":97,"line":1594},[95,54682,54683],{"class":154},"      margin",[95,54685,51414],{"class":105},[95,54687,297],{"class":154},[95,54689,1272],{"class":105},[95,54691,54692],{"class":97,"line":1599},[95,54693,2169],{"class":105},[95,54695,54696],{"class":97,"line":1605},[95,54697,2382],{"emptyLinePlaceholder":21},[95,54699,54700,54703],{"class":97,"line":1610},[95,54701,54702],{"class":51277},"    li",[95,54704,15555],{"class":105},[95,54706,54707,54710,54712,54715],{"class":97,"line":1624},[95,54708,54709],{"class":154},"      list-style",[95,54711,51414],{"class":105},[95,54713,54714],{"class":154},"none",[95,54716,1272],{"class":105},[95,54718,54719],{"class":97,"line":1629},[95,54720,2169],{"class":105},[95,54722,54723],{"class":97,"line":1635},[95,54724,2382],{"emptyLinePlaceholder":21},[95,54726,54727,54730],{"class":97,"line":1656},[95,54728,54729],{"class":1945},"    .box",[95,54731,15555],{"class":105},[95,54733,54734,54737,54739,54742],{"class":97,"line":1661},[95,54735,54736],{"class":154},"      position",[95,54738,51414],{"class":105},[95,54740,54741],{"class":154},"relative",[95,54743,1272],{"class":105},[95,54745,54746,54749,54751,54754,54756],{"class":97,"line":1675},[95,54747,54748],{"class":154},"      width",[95,54750,51414],{"class":105},[95,54752,54753],{"class":154},"976",[95,54755,51469],{"class":101},[95,54757,1272],{"class":105},[95,54759,54760,54763,54765,54767,54769],{"class":97,"line":1680},[95,54761,54762],{"class":154},"      height",[95,54764,51414],{"class":105},[95,54766,1521],{"class":154},[95,54768,51469],{"class":101},[95,54770,1272],{"class":105},[95,54772,54773,54775,54777,54779,54781,54783],{"class":97,"line":1709},[95,54774,54683],{"class":154},[95,54776,51414],{"class":105},[95,54778,417],{"class":154},[95,54780,51469],{"class":101},[95,54782,51533],{"class":154},[95,54784,1272],{"class":105},[95,54786,54787],{"class":97,"line":1714},[95,54788,2169],{"class":105},[95,54790,54791],{"class":97,"line":1731},[95,54792,2382],{"emptyLinePlaceholder":21},[95,54794,54795,54798],{"class":97,"line":1736},[95,54796,54797],{"class":1945},"    .slider-footer",[95,54799,15555],{"class":105},[95,54801,54802,54804,54806,54809],{"class":97,"line":1741},[95,54803,54736],{"class":154},[95,54805,51414],{"class":105},[95,54807,54808],{"class":154},"absolute",[95,54810,1272],{"class":105},[95,54812,54813,54816,54818,54820],{"class":97,"line":1746},[95,54814,54815],{"class":154},"      left",[95,54817,51414],{"class":105},[95,54819,297],{"class":154},[95,54821,1272],{"class":105},[95,54823,54824,54827,54829,54831],{"class":97,"line":1760},[95,54825,54826],{"class":154},"      bottom",[95,54828,51414],{"class":105},[95,54830,297],{"class":154},[95,54832,1272],{"class":105},[95,54834,54835,54837,54839,54841,54843],{"class":97,"line":1765},[95,54836,54748],{"class":154},[95,54838,51414],{"class":105},[95,54840,417],{"class":154},[95,54842,434],{"class":101},[95,54844,1272],{"class":105},[95,54846,54847,54849,54851,54853,54855],{"class":97,"line":2559},[95,54848,54762],{"class":154},[95,54850,51414],{"class":105},[95,54852,681],{"class":154},[95,54854,434],{"class":101},[95,54856,1272],{"class":105},[95,54858,54859,54862,54864,54867],{"class":97,"line":2573},[95,54860,54861],{"class":154},"      background-color",[95,54863,51414],{"class":105},[95,54865,54866],{"class":154},"skyblue",[95,54868,1272],{"class":105},[95,54870,54871],{"class":97,"line":2581},[95,54872,2169],{"class":105},[95,54874,54875],{"class":97,"line":2586},[95,54876,2382],{"emptyLinePlaceholder":21},[95,54878,54879,54881,54883],{"class":97,"line":2592},[95,54880,54797],{"class":1945},[95,54882,6808],{"class":51277},[95,54884,15555],{"class":105},[95,54886,54887,54889,54891,54893],{"class":97,"line":2598},[95,54888,54736],{"class":154},[95,54890,51414],{"class":105},[95,54892,54808],{"class":154},[95,54894,1272],{"class":105},[95,54896,54897,54900,54902,54904,54906],{"class":97,"line":2603},[95,54898,54899],{"class":154},"      font-size",[95,54901,51414],{"class":105},[95,54903,1007],{"class":154},[95,54905,51469],{"class":101},[95,54907,1272],{"class":105},[95,54909,54910,54912,54914,54916,54918],{"class":97,"line":7931},[95,54911,54815],{"class":154},[95,54913,51414],{"class":105},[95,54915,806],{"class":154},[95,54917,51469],{"class":101},[95,54919,1272],{"class":105},[95,54921,54922,54925,54927,54929,54931],{"class":97,"line":7955},[95,54923,54924],{"class":154},"      top",[95,54926,51414],{"class":105},[95,54928,425],{"class":154},[95,54930,51469],{"class":101},[95,54932,1272],{"class":105},[95,54934,54935],{"class":97,"line":7960},[95,54936,2169],{"class":105},[95,54938,54939],{"class":97,"line":7966},[95,54940,2382],{"emptyLinePlaceholder":21},[95,54942,54943,54946],{"class":97,"line":7993},[95,54944,54945],{"class":51277},"    ul",[95,54947,15555],{"class":105},[95,54949,54950,54952,54954,54956],{"class":97,"line":7998},[95,54951,54736],{"class":154},[95,54953,51414],{"class":105},[95,54955,54808],{"class":154},[95,54957,1272],{"class":105},[95,54959,54960,54962,54964,54966,54968],{"class":97,"line":8004},[95,54961,54924],{"class":154},[95,54963,51414],{"class":105},[95,54965,887],{"class":154},[95,54967,51469],{"class":101},[95,54969,1272],{"class":105},[95,54971,54972,54974,54976,54978,54980],{"class":97,"line":8016},[95,54973,54815],{"class":154},[95,54975,51414],{"class":105},[95,54977,806],{"class":154},[95,54979,51469],{"class":101},[95,54981,1272],{"class":105},[95,54983,54984,54987,54989,54991],{"class":97,"line":8028},[95,54985,54986],{"class":154},"      display",[95,54988,51414],{"class":105},[95,54990,51454],{"class":154},[95,54992,1272],{"class":105},[95,54994,54995,54998,55000,55002],{"class":97,"line":8040},[95,54996,54997],{"class":154},"      justify-content",[95,54999,51414],{"class":105},[95,55001,51645],{"class":154},[95,55003,1272],{"class":105},[95,55005,55006,55008,55010,55012],{"class":97,"line":9699},[95,55007,54736],{"class":154},[95,55009,51414],{"class":105},[95,55011,54808],{"class":154},[95,55013,1272],{"class":105},[95,55015,55016,55018,55020,55022,55024],{"class":97,"line":9724},[95,55017,54748],{"class":154},[95,55019,51414],{"class":105},[95,55021,3974],{"class":154},[95,55023,51469],{"class":101},[95,55025,1272],{"class":105},[95,55027,55028,55030,55032,55034,55036],{"class":97,"line":9747},[95,55029,54762],{"class":154},[95,55031,51414],{"class":105},[95,55033,806],{"class":154},[95,55035,51469],{"class":101},[95,55037,1272],{"class":105},[95,55039,55040],{"class":97,"line":9771},[95,55041,2169],{"class":105},[95,55043,55044],{"class":97,"line":9776},[95,55045,2382],{"emptyLinePlaceholder":21},[95,55047,55048,55050,55053],{"class":97,"line":9781},[95,55049,54945],{"class":51277},[95,55051,55052],{"class":51277}," li",[95,55054,15555],{"class":105},[95,55056,55057,55059,55061,55063,55065],{"class":97,"line":9786},[95,55058,54748],{"class":154},[95,55060,51414],{"class":105},[95,55062,806],{"class":154},[95,55064,51469],{"class":101},[95,55066,1272],{"class":105},[95,55068,55069,55071,55073,55075,55077],{"class":97,"line":9795},[95,55070,54762],{"class":154},[95,55072,51414],{"class":105},[95,55074,806],{"class":154},[95,55076,51469],{"class":101},[95,55078,1272],{"class":105},[95,55080,55081,55083,55085,55088,55090,55092,55094,55096,55098,55100,55102,55105],{"class":97,"line":9800},[95,55082,54861],{"class":154},[95,55084,51414],{"class":105},[95,55086,55087],{"class":154},"rgba",[95,55089,106],{"class":105},[95,55091,297],{"class":154},[95,55093,12418],{"class":105},[95,55095,297],{"class":154},[95,55097,12418],{"class":105},[95,55099,297],{"class":154},[95,55101,12418],{"class":105},[95,55103,55104],{"class":154},".4",[95,55106,2701],{"class":105},[95,55108,55109,55112,55114,55116,55118],{"class":97,"line":9806},[95,55110,55111],{"class":154},"      border-radius",[95,55113,51414],{"class":105},[95,55115,552],{"class":154},[95,55117,51469],{"class":101},[95,55119,1272],{"class":105},[95,55121,55122],{"class":97,"line":9827},[95,55123,2169],{"class":105},[95,55125,55126],{"class":97,"line":9833},[95,55127,2382],{"emptyLinePlaceholder":21},[95,55129,55130,55133],{"class":97,"line":9847},[95,55131,55132],{"class":1945},"    .activate",[95,55134,15555],{"class":105},[95,55136,55137,55139,55141,55144],{"class":97,"line":9853},[95,55138,54861],{"class":154},[95,55140,51414],{"class":105},[95,55142,55143],{"class":154},"#f7f7f7",[95,55145,1272],{"class":105},[95,55147,55148],{"class":97,"line":9880},[95,55149,2169],{"class":105},[95,55151,55152,55154,55156],{"class":97,"line":9889},[95,55153,52394],{"class":105},[95,55155,5109],{"class":51277},[95,55157,51284],{"class":105},[95,55159,55160,55162,55164],{"class":97,"line":9895},[95,55161,51762],{"class":105},[95,55163,51311],{"class":51277},[95,55165,51284],{"class":105},[95,55167,55168],{"class":97,"line":9903},[95,55169,2382],{"emptyLinePlaceholder":21},[95,55171,55172,55174,55176],{"class":97,"line":9908},[95,55173,1016],{"class":105},[95,55175,51777],{"class":51277},[95,55177,51284],{"class":105},[95,55179,55180,55182,55184,55186,55188,55190],{"class":97,"line":16587},[95,55181,52121],{"class":105},[95,55183,51588],{"class":51277},[95,55185,53463],{"class":1945},[95,55187,151],{"class":105},[95,55189,53468],{"class":210},[95,55191,51284],{"class":105},[95,55193,55194,55196,55198,55200,55202,55205],{"class":97,"line":16593},[95,55195,51318],{"class":105},[95,55197,51588],{"class":51277},[95,55199,53463],{"class":1945},[95,55201,151],{"class":105},[95,55203,55204],{"class":210},"\"slider-wrapper\"",[95,55206,51284],{"class":105},[95,55208,55209,55212,55214,55217,55219,55222,55225,55227,55229],{"class":97,"line":16616},[95,55210,55211],{"class":105},"      \u003C",[95,55213,1444],{"class":51277},[95,55215,55216],{"class":1945}," src",[95,55218,151],{"class":105},[95,55220,55221],{"class":210},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[95,55223,55224],{"class":1945}," alt",[95,55226,151],{"class":105},[95,55228,7635],{"class":210},[95,55230,51284],{"class":105},[95,55232,55233,55235,55237],{"class":97,"line":16622},[95,55234,51753],{"class":105},[95,55236,51588],{"class":51277},[95,55238,51284],{"class":105},[95,55240,55241,55243,55245,55247,55249,55252],{"class":97,"line":16645},[95,55242,51318],{"class":105},[95,55244,51588],{"class":51277},[95,55246,53463],{"class":1945},[95,55248,151],{"class":105},[95,55250,55251],{"class":210},"\"slider-footer\"",[95,55253,51284],{"class":105},[95,55255,55256,55258,55260,55263,55265],{"class":97,"line":16659},[95,55257,55211],{"class":105},[95,55259,10],{"class":51277},[95,55261,55262],{"class":105},">对人类来说会不会太超前了?\u003C\u002F",[95,55264,10],{"class":51277},[95,55266,51284],{"class":105},[95,55268,55269,55271,55273],{"class":97,"line":16679},[95,55270,55211],{"class":105},[95,55272,1113],{"class":51277},[95,55274,51284],{"class":105},[95,55276,55277,55280,55282,55284,55286,55289,55292,55294],{"class":97,"line":16685},[95,55278,55279],{"class":105},"        \u003C",[95,55281,52],{"class":51277},[95,55283,53463],{"class":1945},[95,55285,151],{"class":105},[95,55287,55288],{"class":210},"\"activate\"",[95,55290,55291],{"class":105},">\u003C\u002F",[95,55293,52],{"class":51277},[95,55295,51284],{"class":105},[95,55297,55298,55300,55302,55304,55306],{"class":97,"line":16696},[95,55299,55279],{"class":105},[95,55301,52],{"class":51277},[95,55303,55291],{"class":105},[95,55305,52],{"class":51277},[95,55307,51284],{"class":105},[95,55309,55310,55312,55314,55316,55318],{"class":97,"line":16719},[95,55311,55279],{"class":105},[95,55313,52],{"class":51277},[95,55315,55291],{"class":105},[95,55317,52],{"class":51277},[95,55319,51284],{"class":105},[95,55321,55322,55324,55326,55328,55330],{"class":97,"line":16741},[95,55323,55279],{"class":105},[95,55325,52],{"class":51277},[95,55327,55291],{"class":105},[95,55329,52],{"class":51277},[95,55331,51284],{"class":105},[95,55333,55334,55336,55338,55340,55342],{"class":97,"line":16746},[95,55335,55279],{"class":105},[95,55337,52],{"class":51277},[95,55339,55291],{"class":105},[95,55341,52],{"class":51277},[95,55343,51284],{"class":105},[95,55345,55346,55348,55350,55352,55354],{"class":97,"line":16752},[95,55347,55279],{"class":105},[95,55349,52],{"class":51277},[95,55351,55291],{"class":105},[95,55353,52],{"class":51277},[95,55355,51284],{"class":105},[95,55357,55358,55360,55362,55364,55366],{"class":97,"line":16766},[95,55359,55279],{"class":105},[95,55361,52],{"class":51277},[95,55363,55291],{"class":105},[95,55365,52],{"class":51277},[95,55367,51284],{"class":105},[95,55369,55370,55372,55374,55376,55378],{"class":97,"line":16779},[95,55371,55279],{"class":105},[95,55373,52],{"class":51277},[95,55375,55291],{"class":105},[95,55377,52],{"class":51277},[95,55379,51284],{"class":105},[95,55381,55382,55385,55387],{"class":97,"line":16784},[95,55383,55384],{"class":105},"      \u003C\u002F",[95,55386,1113],{"class":51277},[95,55388,51284],{"class":105},[95,55390,55391,55393,55395],{"class":97,"line":16798},[95,55392,51753],{"class":105},[95,55394,51588],{"class":51277},[95,55396,51284],{"class":105},[95,55398,55399,55401,55403],{"class":97,"line":16803},[95,55400,52394],{"class":105},[95,55402,51588],{"class":51277},[95,55404,51284],{"class":105},[95,55406,55407,55409,55411],{"class":97,"line":16809},[95,55408,52121],{"class":105},[95,55410,51790],{"class":51277},[95,55412,51284],{"class":105},[95,55414,55415,55417,55420,55422],{"class":97,"line":16814},[95,55416,11204],{"class":101},[95,55418,55419],{"class":154}," arrImage",[95,55421,13547],{"class":101},[95,55423,55424],{"class":105}," [\n",[95,55426,55427,55430,55433,55436,55439,55442,55445],{"class":97,"line":16828},[95,55428,55429],{"class":105},"      { url: ",[95,55431,55432],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[95,55434,55435],{"class":105},", title: ",[95,55437,55438],{"class":210},"'对人类来说会不会太超前了?'",[95,55440,55441],{"class":105},", color: ",[95,55443,55444],{"class":210},"'rgba(100,67,68)'",[95,55446,55447],{"class":105}," },\n",[95,55449,55450,55452,55455,55457,55460,55462,55465],{"class":97,"line":16833},[95,55451,55429],{"class":105},[95,55453,55454],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[95,55456,55435],{"class":105},[95,55458,55459],{"class":210},"'开启剑与雪的黑暗传说!'",[95,55461,55441],{"class":105},[95,55463,55464],{"class":210},"'rgba(43,35,26)'",[95,55466,55447],{"class":105},[95,55468,55469,55471,55474,55476,55479,55481,55484],{"class":97,"line":16838},[95,55470,55429],{"class":105},[95,55472,55473],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[95,55475,55435],{"class":105},[95,55477,55478],{"class":210},"'真正的jo厨出现了!'",[95,55480,55441],{"class":105},[95,55482,55483],{"class":210},"'rgba(36,31,33)'",[95,55485,55447],{"class":105},[95,55487,55488,55490,55493,55495,55498,55500,55503],{"class":97,"line":16852},[95,55489,55429],{"class":105},[95,55491,55492],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[95,55494,55435],{"class":105},[95,55496,55497],{"class":210},"'李玉刚:让世界通过b站看到东方大国文化'",[95,55499,55441],{"class":105},[95,55501,55502],{"class":210},"'rgba(139,98,66)'",[95,55504,55447],{"class":105},[95,55506,55507,55509,55512,55514,55517,55519,55522],{"class":97,"line":16864},[95,55508,55429],{"class":105},[95,55510,55511],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[95,55513,55435],{"class":105},[95,55515,55516],{"class":210},"'快来分享你的寒假日常吧'",[95,55518,55441],{"class":105},[95,55520,55521],{"class":210},"'rgba(67,90,92)'",[95,55523,55447],{"class":105},[95,55525,55526,55528,55531,55533,55536,55538,55541],{"class":97,"line":16869},[95,55527,55429],{"class":105},[95,55529,55530],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[95,55532,55435],{"class":105},[95,55534,55535],{"class":210},"'哔哩哔哩小年YEAR'",[95,55537,55441],{"class":105},[95,55539,55540],{"class":210},"'rgba(166,131,143)'",[95,55542,55447],{"class":105},[95,55544,55545,55547,55550,55552,55555,55557,55560],{"class":97,"line":16882},[95,55546,55429],{"class":105},[95,55548,55549],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[95,55551,55435],{"class":105},[95,55553,55554],{"class":210},"'一站式解决你的电脑配置问题'",[95,55556,55441],{"class":105},[95,55558,55559],{"class":210},"'rgba(53,29,25)'",[95,55561,55447],{"class":105},[95,55563,55564,55566,55569,55571,55574,55576,55579],{"class":97,"line":16887},[95,55565,55429],{"class":105},[95,55567,55568],{"class":210},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[95,55570,55435],{"class":105},[95,55572,55573],{"class":210},"'谁不想和小猫咪贴贴呢?'",[95,55575,55441],{"class":105},[95,55577,55578],{"class":210},"'rgba(99,72,114)'",[95,55580,55581],{"class":105}," }\n",[95,55583,55584],{"class":97,"line":16892},[95,55585,53086],{"class":105},[95,55587,55588,55590,55593,55595,55597,55599,55601,55604],{"class":97,"line":16897},[95,55589,11204],{"class":101},[95,55591,55592],{"class":154}," img",[95,55594,13547],{"class":101},[95,55596,54373],{"class":105},[95,55598,54376],{"class":1945},[95,55600,106],{"class":105},[95,55602,55603],{"class":210},"'.slider-wrapper img'",[95,55605,112],{"class":105},[95,55607,55608,55610,55612,55614,55616,55618,55620,55623],{"class":97,"line":16910},[95,55609,11204],{"class":101},[95,55611,6808],{"class":154},[95,55613,13547],{"class":101},[95,55615,54373],{"class":105},[95,55617,54376],{"class":1945},[95,55619,106],{"class":105},[95,55621,55622],{"class":210},"'.slider-footer p'",[95,55624,112],{"class":105},[95,55626,55627,55629,55632,55634,55636,55638,55640,55643],{"class":97,"line":16915},[95,55628,11204],{"class":101},[95,55630,55631],{"class":154}," color",[95,55633,13547],{"class":101},[95,55635,54373],{"class":105},[95,55637,54376],{"class":1945},[95,55639,106],{"class":105},[95,55641,55642],{"class":210},"'.slider-footer'",[95,55644,112],{"class":105},[95,55646,55647,55649,55652,55654,55656,55659,55661,55664],{"class":97,"line":32618},[95,55648,11204],{"class":101},[95,55650,55651],{"class":154}," lis",[95,55653,13547],{"class":101},[95,55655,54373],{"class":105},[95,55657,55658],{"class":1945},"querySelectorAll",[95,55660,106],{"class":105},[95,55662,55663],{"class":210},"'.slider-footer ul li'",[95,55665,112],{"class":105},[95,55667,55668,55670,55672,55674],{"class":97,"line":32624},[95,55669,52196],{"class":101},[95,55671,9421],{"class":105},[95,55673,151],{"class":101},[95,55675,55676],{"class":154}," 1\n",[95,55678,55679,55681,55684,55686,55688,55690,55692],{"class":97,"line":32630},[95,55680,52196],{"class":101},[95,55682,55683],{"class":105}," timer ",[95,55685,151],{"class":101},[95,55687,54421],{"class":1945},[95,55689,106],{"class":105},[95,55691,54426],{"class":101},[95,55693,54429],{"class":105},[95,55695,55696,55699,55701],{"class":97,"line":32636},[95,55697,55698],{"class":105},"      img.src ",[95,55700,151],{"class":101},[95,55702,55703],{"class":105}," arrImage[i].url\n",[95,55705,55706,55709,55711],{"class":97,"line":32642},[95,55707,55708],{"class":105},"      p.innerHTML ",[95,55710,151],{"class":101},[95,55712,55713],{"class":105}," arrImage[i].title\n",[95,55715,55716,55719,55721],{"class":97,"line":32653},[95,55717,55718],{"class":105},"      color.style.backgroundColor ",[95,55720,151],{"class":101},[95,55722,55723],{"class":105}," arrImage[i].color\n",[95,55725,55726],{"class":97,"line":32659},[95,55727,55728],{"class":164},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[95,55730,55731],{"class":97,"line":32679},[95,55732,55733],{"class":164},"      \u002F\u002F li.classList.add('activate')\n",[95,55735,55736],{"class":97,"line":32685},[95,55737,55738],{"class":164},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[95,55740,55741],{"class":97,"line":32696},[95,55742,55743],{"class":164},"      \u002F\u002F lis[i].classList.remove('activate')\n",[95,55745,55746,55749,55751,55753,55756,55759,55762,55764,55767],{"class":97,"line":32702},[95,55747,55748],{"class":105},"      document.",[95,55750,54376],{"class":1945},[95,55752,106],{"class":105},[95,55754,55755],{"class":210},"'.activate'",[95,55757,55758],{"class":105},")?.classList.",[95,55760,55761],{"class":1945},"toggle",[95,55763,106],{"class":105},[95,55765,55766],{"class":210},"'activate'",[95,55768,112],{"class":105},[95,55770,55771,55774,55776,55778,55780],{"class":97,"line":32708},[95,55772,55773],{"class":105},"      lis[i].classList.",[95,55775,5317],{"class":1945},[95,55777,106],{"class":105},[95,55779,55766],{"class":210},[95,55781,112],{"class":105},[95,55783,55784],{"class":97,"line":32714},[95,55785,2382],{"emptyLinePlaceholder":21},[95,55787,55788,55791,55793,55795,55797,55799,55801,55803,55806],{"class":97,"line":32720},[95,55789,55790],{"class":105},"      i ",[95,55792,151],{"class":101},[95,55794,54460],{"class":105},[95,55796,587],{"class":101},[95,55798,25103],{"class":154},[95,55800,13697],{"class":105},[95,55802,434],{"class":101},[95,55804,55805],{"class":105}," arrImage.",[95,55807,55808],{"class":154},"length\n",[95,55810,55811],{"class":97,"line":32726},[95,55812,2382],{"emptyLinePlaceholder":21},[95,55814,55815,55817,55819],{"class":97,"line":32732},[95,55816,54512],{"class":105},[95,55818,6393],{"class":154},[95,55820,112],{"class":105},[95,55822,55823,55825,55827],{"class":97,"line":32738},[95,55824,52394],{"class":105},[95,55826,51790],{"class":51277},[95,55828,51284],{"class":105},[95,55830,55831,55833,55835],{"class":97,"line":32758},[95,55832,51762],{"class":105},[95,55834,51777],{"class":51277},[95,55836,51284],{"class":105},[95,55838,55839],{"class":97,"line":32764},[95,55840,2382],{"emptyLinePlaceholder":21},[95,55842,55843,55845,55847],{"class":97,"line":32780},[95,55844,51762],{"class":105},[95,55846,50612],{"class":51277},[95,55848,51284],{"class":105},[10,55850,55851],{},[1444,55852],{"alt":14,"src":55853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[10,55855,55856],{},"?.就是短路保护,确保输出正常进行",[10,55858,55859],{},"不要忘记取余%,有时候可以用",[10,55861,55862],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[49,55864,55865],{"start":15},[52,55866,55867],{},"法2",[86,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",[92,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},[95,55874,55875,55877,55879,55881],{"class":97,"line":98},[95,55876,51274],{"class":105},[95,55878,51278],{"class":51277},[95,55880,51281],{"class":1945},[95,55882,51284],{"class":105},[95,55884,55885,55887,55889,55891,55893,55895],{"class":97,"line":15},[95,55886,1016],{"class":105},[95,55888,50612],{"class":51277},[95,55890,51293],{"class":1945},[95,55892,151],{"class":105},[95,55894,51298],{"class":210},[95,55896,51284],{"class":105},[95,55898,55899],{"class":97,"line":1161},[95,55900,2382],{"emptyLinePlaceholder":21},[95,55902,55903,55905,55907],{"class":97,"line":1176},[95,55904,1016],{"class":105},[95,55906,51311],{"class":51277},[95,55908,51284],{"class":105},[95,55910,55911,55913,55915,55917,55919,55921],{"class":97,"line":1182},[95,55912,52121],{"class":105},[95,55914,51321],{"class":51277},[95,55916,51324],{"class":1945},[95,55918,151],{"class":105},[95,55920,51329],{"class":210},[95,55922,51284],{"class":105},[95,55924,55925,55927,55929,55931,55933,55935,55937,55939,55941],{"class":97,"line":1196},[95,55926,52121],{"class":105},[95,55928,51321],{"class":51277},[95,55930,14903],{"class":1945},[95,55932,151],{"class":105},[95,55934,51368],{"class":210},[95,55936,51348],{"class":1945},[95,55938,151],{"class":105},[95,55940,51375],{"class":210},[95,55942,51284],{"class":105},[95,55944,55945,55947,55949,55951,55953],{"class":97,"line":1202},[95,55946,52121],{"class":105},[95,55948,51384],{"class":51277},[95,55950,51387],{"class":105},[95,55952,51384],{"class":51277},[95,55954,51284],{"class":105},[95,55956,55957,55959,55961],{"class":97,"line":1293},[95,55958,52121],{"class":105},[95,55960,5109],{"class":51277},[95,55962,51284],{"class":105},[95,55964,55965,55967],{"class":97,"line":1299},[95,55966,6386],{"class":51277},[95,55968,15555],{"class":105},[95,55970,55971,55973,55975,55977],{"class":97,"line":1311},[95,55972,54672],{"class":154},[95,55974,51414],{"class":105},[95,55976,297],{"class":154},[95,55978,1272],{"class":105},[95,55980,55981,55983,55985,55987],{"class":97,"line":1594},[95,55982,54683],{"class":154},[95,55984,51414],{"class":105},[95,55986,297],{"class":154},[95,55988,1272],{"class":105},[95,55990,55991],{"class":97,"line":1599},[95,55992,2169],{"class":105},[95,55994,55995],{"class":97,"line":1605},[95,55996,2382],{"emptyLinePlaceholder":21},[95,55998,55999,56001],{"class":97,"line":1610},[95,56000,54702],{"class":51277},[95,56002,15555],{"class":105},[95,56004,56005,56007,56009,56011],{"class":97,"line":1624},[95,56006,54709],{"class":154},[95,56008,51414],{"class":105},[95,56010,54714],{"class":154},[95,56012,1272],{"class":105},[95,56014,56015],{"class":97,"line":1629},[95,56016,2169],{"class":105},[95,56018,56019],{"class":97,"line":1635},[95,56020,2382],{"emptyLinePlaceholder":21},[95,56022,56023,56025],{"class":97,"line":1656},[95,56024,54729],{"class":1945},[95,56026,15555],{"class":105},[95,56028,56029,56031,56033,56035],{"class":97,"line":1661},[95,56030,54736],{"class":154},[95,56032,51414],{"class":105},[95,56034,54741],{"class":154},[95,56036,1272],{"class":105},[95,56038,56039,56041,56043,56045,56047],{"class":97,"line":1675},[95,56040,54748],{"class":154},[95,56042,51414],{"class":105},[95,56044,54753],{"class":154},[95,56046,51469],{"class":101},[95,56048,1272],{"class":105},[95,56050,56051,56053,56055,56057,56059],{"class":97,"line":1680},[95,56052,54762],{"class":154},[95,56054,51414],{"class":105},[95,56056,1521],{"class":154},[95,56058,51469],{"class":101},[95,56060,1272],{"class":105},[95,56062,56063,56065,56067,56069,56071,56073],{"class":97,"line":1709},[95,56064,54683],{"class":154},[95,56066,51414],{"class":105},[95,56068,417],{"class":154},[95,56070,51469],{"class":101},[95,56072,51533],{"class":154},[95,56074,1272],{"class":105},[95,56076,56077],{"class":97,"line":1714},[95,56078,2169],{"class":105},[95,56080,56081],{"class":97,"line":1731},[95,56082,2382],{"emptyLinePlaceholder":21},[95,56084,56085,56087],{"class":97,"line":1736},[95,56086,54797],{"class":1945},[95,56088,15555],{"class":105},[95,56090,56091,56093,56095,56097],{"class":97,"line":1741},[95,56092,54736],{"class":154},[95,56094,51414],{"class":105},[95,56096,54808],{"class":154},[95,56098,1272],{"class":105},[95,56100,56101,56103,56105,56107],{"class":97,"line":1746},[95,56102,54815],{"class":154},[95,56104,51414],{"class":105},[95,56106,297],{"class":154},[95,56108,1272],{"class":105},[95,56110,56111,56113,56115,56117],{"class":97,"line":1760},[95,56112,54826],{"class":154},[95,56114,51414],{"class":105},[95,56116,297],{"class":154},[95,56118,1272],{"class":105},[95,56120,56121,56123,56125,56127,56129],{"class":97,"line":1765},[95,56122,54748],{"class":154},[95,56124,51414],{"class":105},[95,56126,417],{"class":154},[95,56128,434],{"class":101},[95,56130,1272],{"class":105},[95,56132,56133,56135,56137,56139,56141],{"class":97,"line":2559},[95,56134,54762],{"class":154},[95,56136,51414],{"class":105},[95,56138,681],{"class":154},[95,56140,434],{"class":101},[95,56142,1272],{"class":105},[95,56144,56145,56147,56149,56151],{"class":97,"line":2573},[95,56146,54861],{"class":154},[95,56148,51414],{"class":105},[95,56150,54866],{"class":154},[95,56152,1272],{"class":105},[95,56154,56155],{"class":97,"line":2581},[95,56156,2169],{"class":105},[95,56158,56159],{"class":97,"line":2586},[95,56160,2382],{"emptyLinePlaceholder":21},[95,56162,56163,56165,56167],{"class":97,"line":2592},[95,56164,54797],{"class":1945},[95,56166,6808],{"class":51277},[95,56168,15555],{"class":105},[95,56170,56171,56173,56175,56177],{"class":97,"line":2598},[95,56172,54736],{"class":154},[95,56174,51414],{"class":105},[95,56176,54808],{"class":154},[95,56178,1272],{"class":105},[95,56180,56181,56183,56185,56187,56189],{"class":97,"line":2603},[95,56182,54899],{"class":154},[95,56184,51414],{"class":105},[95,56186,1007],{"class":154},[95,56188,51469],{"class":101},[95,56190,1272],{"class":105},[95,56192,56193,56195,56197,56199,56201],{"class":97,"line":7931},[95,56194,54815],{"class":154},[95,56196,51414],{"class":105},[95,56198,806],{"class":154},[95,56200,51469],{"class":101},[95,56202,1272],{"class":105},[95,56204,56205,56207,56209,56211,56213],{"class":97,"line":7955},[95,56206,54924],{"class":154},[95,56208,51414],{"class":105},[95,56210,425],{"class":154},[95,56212,51469],{"class":101},[95,56214,1272],{"class":105},[95,56216,56217],{"class":97,"line":7960},[95,56218,2169],{"class":105},[95,56220,56221],{"class":97,"line":7966},[95,56222,2382],{"emptyLinePlaceholder":21},[95,56224,56225,56227],{"class":97,"line":7993},[95,56226,54945],{"class":51277},[95,56228,15555],{"class":105},[95,56230,56231,56233,56235,56237],{"class":97,"line":7998},[95,56232,54736],{"class":154},[95,56234,51414],{"class":105},[95,56236,54808],{"class":154},[95,56238,1272],{"class":105},[95,56240,56241,56243,56245,56247,56249],{"class":97,"line":8004},[95,56242,54924],{"class":154},[95,56244,51414],{"class":105},[95,56246,887],{"class":154},[95,56248,51469],{"class":101},[95,56250,1272],{"class":105},[95,56252,56253,56255,56257,56259,56261],{"class":97,"line":8016},[95,56254,54815],{"class":154},[95,56256,51414],{"class":105},[95,56258,806],{"class":154},[95,56260,51469],{"class":101},[95,56262,1272],{"class":105},[95,56264,56265,56267,56269,56271],{"class":97,"line":8028},[95,56266,54986],{"class":154},[95,56268,51414],{"class":105},[95,56270,51454],{"class":154},[95,56272,1272],{"class":105},[95,56274,56275,56277,56279,56281],{"class":97,"line":8040},[95,56276,54997],{"class":154},[95,56278,51414],{"class":105},[95,56280,51645],{"class":154},[95,56282,1272],{"class":105},[95,56284,56285,56287,56289,56291],{"class":97,"line":9699},[95,56286,54736],{"class":154},[95,56288,51414],{"class":105},[95,56290,54808],{"class":154},[95,56292,1272],{"class":105},[95,56294,56295,56297,56299,56301,56303],{"class":97,"line":9724},[95,56296,54748],{"class":154},[95,56298,51414],{"class":105},[95,56300,3974],{"class":154},[95,56302,51469],{"class":101},[95,56304,1272],{"class":105},[95,56306,56307,56309,56311,56313,56315],{"class":97,"line":9747},[95,56308,54762],{"class":154},[95,56310,51414],{"class":105},[95,56312,806],{"class":154},[95,56314,51469],{"class":101},[95,56316,1272],{"class":105},[95,56318,56319],{"class":97,"line":9771},[95,56320,2169],{"class":105},[95,56322,56323],{"class":97,"line":9776},[95,56324,2382],{"emptyLinePlaceholder":21},[95,56326,56327,56329,56331],{"class":97,"line":9781},[95,56328,54945],{"class":51277},[95,56330,55052],{"class":51277},[95,56332,15555],{"class":105},[95,56334,56335,56337,56339,56341,56343],{"class":97,"line":9786},[95,56336,54748],{"class":154},[95,56338,51414],{"class":105},[95,56340,806],{"class":154},[95,56342,51469],{"class":101},[95,56344,1272],{"class":105},[95,56346,56347,56349,56351,56353,56355],{"class":97,"line":9795},[95,56348,54762],{"class":154},[95,56350,51414],{"class":105},[95,56352,806],{"class":154},[95,56354,51469],{"class":101},[95,56356,1272],{"class":105},[95,56358,56359,56361,56363,56365,56367,56369,56371,56373,56375,56377,56379,56381],{"class":97,"line":9800},[95,56360,54861],{"class":154},[95,56362,51414],{"class":105},[95,56364,55087],{"class":154},[95,56366,106],{"class":105},[95,56368,297],{"class":154},[95,56370,12418],{"class":105},[95,56372,297],{"class":154},[95,56374,12418],{"class":105},[95,56376,297],{"class":154},[95,56378,12418],{"class":105},[95,56380,55104],{"class":154},[95,56382,2701],{"class":105},[95,56384,56385,56387,56389,56391,56393],{"class":97,"line":9806},[95,56386,55111],{"class":154},[95,56388,51414],{"class":105},[95,56390,552],{"class":154},[95,56392,51469],{"class":101},[95,56394,1272],{"class":105},[95,56396,56397],{"class":97,"line":9827},[95,56398,2169],{"class":105},[95,56400,56401],{"class":97,"line":9833},[95,56402,2382],{"emptyLinePlaceholder":21},[95,56404,56405,56407],{"class":97,"line":9847},[95,56406,55132],{"class":1945},[95,56408,15555],{"class":105},[95,56410,56411,56413,56415,56417],{"class":97,"line":9853},[95,56412,54861],{"class":154},[95,56414,51414],{"class":105},[95,56416,55143],{"class":154},[95,56418,1272],{"class":105},[95,56420,56421],{"class":97,"line":9880},[95,56422,2169],{"class":105},[95,56424,56425,56427,56429],{"class":97,"line":9889},[95,56426,52394],{"class":105},[95,56428,5109],{"class":51277},[95,56430,51284],{"class":105},[95,56432,56433,56435,56437],{"class":97,"line":9895},[95,56434,51762],{"class":105},[95,56436,51311],{"class":51277},[95,56438,51284],{"class":105},[95,56440,56441],{"class":97,"line":9903},[95,56442,2382],{"emptyLinePlaceholder":21},[95,56444,56445,56447,56449],{"class":97,"line":9908},[95,56446,1016],{"class":105},[95,56448,51777],{"class":51277},[95,56450,51284],{"class":105},[95,56452,56453,56455,56457,56459,56461,56463],{"class":97,"line":16587},[95,56454,52121],{"class":105},[95,56456,51588],{"class":51277},[95,56458,53463],{"class":1945},[95,56460,151],{"class":105},[95,56462,53468],{"class":210},[95,56464,51284],{"class":105},[95,56466,56467,56469,56471,56473,56475,56477],{"class":97,"line":16593},[95,56468,51318],{"class":105},[95,56470,51588],{"class":51277},[95,56472,53463],{"class":1945},[95,56474,151],{"class":105},[95,56476,55204],{"class":210},[95,56478,51284],{"class":105},[95,56480,56481,56483,56485,56487,56489,56491,56493,56495,56497],{"class":97,"line":16616},[95,56482,55211],{"class":105},[95,56484,1444],{"class":51277},[95,56486,55216],{"class":1945},[95,56488,151],{"class":105},[95,56490,55221],{"class":210},[95,56492,55224],{"class":1945},[95,56494,151],{"class":105},[95,56496,7635],{"class":210},[95,56498,51284],{"class":105},[95,56500,56501,56503,56505],{"class":97,"line":16622},[95,56502,51753],{"class":105},[95,56504,51588],{"class":51277},[95,56506,51284],{"class":105},[95,56508,56509,56511,56513,56515,56517,56519],{"class":97,"line":16645},[95,56510,51318],{"class":105},[95,56512,51588],{"class":51277},[95,56514,53463],{"class":1945},[95,56516,151],{"class":105},[95,56518,55251],{"class":210},[95,56520,51284],{"class":105},[95,56522,56523,56525,56527,56529,56531],{"class":97,"line":16659},[95,56524,55211],{"class":105},[95,56526,10],{"class":51277},[95,56528,55262],{"class":105},[95,56530,10],{"class":51277},[95,56532,51284],{"class":105},[95,56534,56535,56537,56539],{"class":97,"line":16679},[95,56536,55211],{"class":105},[95,56538,1113],{"class":51277},[95,56540,51284],{"class":105},[95,56542,56543,56545,56547,56549,56551,56553,56555,56557],{"class":97,"line":16685},[95,56544,55279],{"class":105},[95,56546,52],{"class":51277},[95,56548,53463],{"class":1945},[95,56550,151],{"class":105},[95,56552,55288],{"class":210},[95,56554,55291],{"class":105},[95,56556,52],{"class":51277},[95,56558,51284],{"class":105},[95,56560,56561,56563,56565,56567,56569],{"class":97,"line":16696},[95,56562,55279],{"class":105},[95,56564,52],{"class":51277},[95,56566,55291],{"class":105},[95,56568,52],{"class":51277},[95,56570,51284],{"class":105},[95,56572,56573,56575,56577,56579,56581],{"class":97,"line":16719},[95,56574,55279],{"class":105},[95,56576,52],{"class":51277},[95,56578,55291],{"class":105},[95,56580,52],{"class":51277},[95,56582,51284],{"class":105},[95,56584,56585,56587,56589,56591,56593],{"class":97,"line":16741},[95,56586,55279],{"class":105},[95,56588,52],{"class":51277},[95,56590,55291],{"class":105},[95,56592,52],{"class":51277},[95,56594,51284],{"class":105},[95,56596,56597,56599,56601,56603,56605],{"class":97,"line":16746},[95,56598,55279],{"class":105},[95,56600,52],{"class":51277},[95,56602,55291],{"class":105},[95,56604,52],{"class":51277},[95,56606,51284],{"class":105},[95,56608,56609,56611,56613,56615,56617],{"class":97,"line":16752},[95,56610,55279],{"class":105},[95,56612,52],{"class":51277},[95,56614,55291],{"class":105},[95,56616,52],{"class":51277},[95,56618,51284],{"class":105},[95,56620,56621,56623,56625,56627,56629],{"class":97,"line":16766},[95,56622,55279],{"class":105},[95,56624,52],{"class":51277},[95,56626,55291],{"class":105},[95,56628,52],{"class":51277},[95,56630,51284],{"class":105},[95,56632,56633,56635,56637,56639,56641],{"class":97,"line":16779},[95,56634,55279],{"class":105},[95,56636,52],{"class":51277},[95,56638,55291],{"class":105},[95,56640,52],{"class":51277},[95,56642,51284],{"class":105},[95,56644,56645,56647,56649],{"class":97,"line":16784},[95,56646,55384],{"class":105},[95,56648,1113],{"class":51277},[95,56650,51284],{"class":105},[95,56652,56653,56655,56657],{"class":97,"line":16798},[95,56654,51753],{"class":105},[95,56656,51588],{"class":51277},[95,56658,51284],{"class":105},[95,56660,56661,56663,56665],{"class":97,"line":16803},[95,56662,52394],{"class":105},[95,56664,51588],{"class":51277},[95,56666,51284],{"class":105},[95,56668,56669,56671,56673],{"class":97,"line":16809},[95,56670,52121],{"class":105},[95,56672,51790],{"class":51277},[95,56674,51284],{"class":105},[95,56676,56677,56679,56682,56684],{"class":97,"line":16814},[95,56678,11204],{"class":101},[95,56680,56681],{"class":154}," sliderData",[95,56683,13547],{"class":101},[95,56685,55424],{"class":105},[95,56687,56688,56690,56692,56694,56696,56698,56700],{"class":97,"line":16828},[95,56689,55429],{"class":105},[95,56691,55432],{"class":210},[95,56693,55435],{"class":105},[95,56695,55438],{"class":210},[95,56697,55441],{"class":105},[95,56699,55444],{"class":210},[95,56701,55447],{"class":105},[95,56703,56704,56706,56708,56710,56712,56714,56716],{"class":97,"line":16833},[95,56705,55429],{"class":105},[95,56707,55454],{"class":210},[95,56709,55435],{"class":105},[95,56711,55459],{"class":210},[95,56713,55441],{"class":105},[95,56715,55464],{"class":210},[95,56717,55447],{"class":105},[95,56719,56720,56722,56724,56726,56728,56730,56732],{"class":97,"line":16838},[95,56721,55429],{"class":105},[95,56723,55473],{"class":210},[95,56725,55435],{"class":105},[95,56727,55478],{"class":210},[95,56729,55441],{"class":105},[95,56731,55483],{"class":210},[95,56733,55447],{"class":105},[95,56735,56736,56738,56740,56742,56744,56746,56748],{"class":97,"line":16852},[95,56737,55429],{"class":105},[95,56739,55492],{"class":210},[95,56741,55435],{"class":105},[95,56743,55497],{"class":210},[95,56745,55441],{"class":105},[95,56747,55502],{"class":210},[95,56749,55447],{"class":105},[95,56751,56752,56754,56756,56758,56760,56762,56764],{"class":97,"line":16864},[95,56753,55429],{"class":105},[95,56755,55511],{"class":210},[95,56757,55435],{"class":105},[95,56759,55516],{"class":210},[95,56761,55441],{"class":105},[95,56763,55521],{"class":210},[95,56765,55447],{"class":105},[95,56767,56768,56770,56772,56774,56776,56778,56780],{"class":97,"line":16869},[95,56769,55429],{"class":105},[95,56771,55530],{"class":210},[95,56773,55435],{"class":105},[95,56775,55535],{"class":210},[95,56777,55441],{"class":105},[95,56779,55540],{"class":210},[95,56781,55447],{"class":105},[95,56783,56784,56786,56788,56790,56792,56794,56796],{"class":97,"line":16882},[95,56785,55429],{"class":105},[95,56787,55549],{"class":210},[95,56789,55435],{"class":105},[95,56791,55554],{"class":210},[95,56793,55441],{"class":105},[95,56795,55559],{"class":210},[95,56797,55447],{"class":105},[95,56799,56800,56802,56804,56806,56808,56810,56812],{"class":97,"line":16887},[95,56801,55429],{"class":105},[95,56803,55568],{"class":210},[95,56805,55435],{"class":105},[95,56807,55573],{"class":210},[95,56809,55441],{"class":105},[95,56811,55578],{"class":210},[95,56813,55581],{"class":105},[95,56815,56816],{"class":97,"line":16892},[95,56817,53086],{"class":105},[95,56819,56820],{"class":97,"line":16897},[95,56821,56822],{"class":164},"    \u002F\u002F 1.获取元素\n",[95,56824,56825,56827,56829,56831,56833,56835,56837,56839],{"class":97,"line":16910},[95,56826,11204],{"class":101},[95,56828,55592],{"class":154},[95,56830,13547],{"class":101},[95,56832,54373],{"class":105},[95,56834,54376],{"class":1945},[95,56836,106],{"class":105},[95,56838,55603],{"class":210},[95,56840,112],{"class":105},[95,56842,56843,56845,56847,56849,56851,56853,56855,56857],{"class":97,"line":16915},[95,56844,11204],{"class":101},[95,56846,6808],{"class":154},[95,56848,13547],{"class":101},[95,56850,54373],{"class":105},[95,56852,54376],{"class":1945},[95,56854,106],{"class":105},[95,56856,55622],{"class":210},[95,56858,112],{"class":105},[95,56860,56861,56863,56865,56867],{"class":97,"line":32618},[95,56862,52196],{"class":101},[95,56864,9421],{"class":105},[95,56866,151],{"class":101},[95,56868,47318],{"class":154},[95,56870,56871],{"class":97,"line":32624},[95,56872,56873],{"class":164},"    \u002F\u002F 2.开启定时器\n",[95,56875,56876],{"class":97,"line":32630},[95,56877,56878],{"class":164},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[95,56880,56881,56884,56886,56888],{"class":97,"line":32636},[95,56882,56883],{"class":1945},"    setInterval",[95,56885,106],{"class":105},[95,56887,54426],{"class":101},[95,56889,54429],{"class":105},[95,56891,56892,56894],{"class":97,"line":32642},[95,56893,54434],{"class":105},[95,56895,2684],{"class":101},[95,56897,56898,56900,56902,56904,56907,56909],{"class":97,"line":32653},[95,56899,54457],{"class":101},[95,56901,54460],{"class":105},[95,56903,1692],{"class":101},[95,56905,56906],{"class":105}," sliderData.",[95,56908,51945],{"class":154},[95,56910,12425],{"class":105},[95,56912,56913,56916,56918],{"class":97,"line":32659},[95,56914,56915],{"class":105},"        i ",[95,56917,151],{"class":101},[95,56919,47318],{"class":154},[95,56921,56922],{"class":97,"line":32679},[95,56923,52375],{"class":105},[95,56925,56926],{"class":97,"line":32685},[95,56927,56928],{"class":164},"      \u002F\u002F 更换图片路径\n",[95,56930,56931,56933,56935],{"class":97,"line":32696},[95,56932,55698],{"class":105},[95,56934,151],{"class":101},[95,56936,56937],{"class":105}," sliderData[i].url\n",[95,56939,56940],{"class":97,"line":32702},[95,56941,56942],{"class":164},"      \u002F\u002F 把文字写到p里面\n",[95,56944,56945,56947,56949],{"class":97,"line":32708},[95,56946,55708],{"class":105},[95,56948,151],{"class":101},[95,56950,56951],{"class":105}," sliderData[i].title\n",[95,56953,56954],{"class":97,"line":32714},[95,56955,56956],{"class":164},"      \u002F\u002F 小圆点\n",[95,56958,56959],{"class":97,"line":32720},[95,56960,56961],{"class":164},"      \u002F\u002F 先删除以前的active\n",[95,56963,56964],{"class":97,"line":32726},[95,56965,56966],{"class":164},"      \u002F\u002F 只让当前li添加active\n",[95,56968,56969,56971,56973,56975,56978,56981,56984,56986,56988],{"class":97,"line":32732},[95,56970,55748],{"class":105},[95,56972,54376],{"class":1945},[95,56974,106],{"class":105},[95,56976,56977],{"class":210},"'.slider-footer .activate'",[95,56979,56980],{"class":105},").classList.",[95,56982,56983],{"class":1945},"remove",[95,56985,106],{"class":105},[95,56987,55766],{"class":210},[95,56989,112],{"class":105},[95,56991,56992,56994,56996,56998,57001,57003,57005,57007,57010,57012,57014,57016,57018],{"class":97,"line":32738},[95,56993,55748],{"class":105},[95,56995,54376],{"class":1945},[95,56997,106],{"class":105},[95,56999,57000],{"class":210},"`.slider-footer ul li:nth-child(${",[95,57002,547],{"class":105},[95,57004,45551],{"class":101},[95,57006,25103],{"class":154},[95,57008,57009],{"class":210},"})`",[95,57011,56980],{"class":105},[95,57013,5317],{"class":1945},[95,57015,106],{"class":105},[95,57017,55766],{"class":210},[95,57019,112],{"class":105},[95,57021,57022],{"class":97,"line":32758},[95,57023,2382],{"emptyLinePlaceholder":21},[95,57025,57026,57028,57030],{"class":97,"line":32764},[95,57027,54512],{"class":105},[95,57029,6393],{"class":154},[95,57031,112],{"class":105},[95,57033,57034],{"class":97,"line":32780},[95,57035,2382],{"emptyLinePlaceholder":21},[95,57037,57038,57040,57042],{"class":97,"line":32786},[95,57039,52394],{"class":105},[95,57041,51790],{"class":51277},[95,57043,51284],{"class":105},[95,57045,57046,57048,57050],{"class":97,"line":32800},[95,57047,51762],{"class":105},[95,57049,51777],{"class":51277},[95,57051,51284],{"class":105},[95,57053,57054],{"class":97,"line":32806},[95,57055,2382],{"emptyLinePlaceholder":21},[95,57057,57058,57060,57062],{"class":97,"line":32821},[95,57059,51762],{"class":105},[95,57061,50612],{"class":51277},[95,57063,51284],{"class":105},[66,57065,57067],{"id":57066},"_317-重要知识点","3.1.7 重要知识点",[10,57069,57070,57071],{},"浏览器在渲染文本时， ",[255,57072,57073],{},"没有空格或换行符就没有“断行点”",[10,57075,57076],{},[1444,57077],{"alt":14,"src":57078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[10,57080,57081],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[10,57083,57084],{},[1444,57085],{"alt":14,"src":57086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[10,57088,57089],{},[1444,57090],{"alt":14,"src":57091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[37,57093,57095],{"id":57094},"_32-dom事件基础","3.2 DOM事件基础",[66,57097,57099],{"id":57098},"_321-事件监听","3.2.1 事件监听",[10,57101,57102],{},[1444,57103],{"alt":14,"src":57104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[10,57106,57107],{},"事件监听有响应的发生",[10,57109,57110],{},[1444,57111],{"alt":14,"src":57112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[10,57114,57115],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[10,57117,57118],{},"对于有名函数,要执行的函数名后边不要加()",[66,57120,57122],{"id":57121},"_322-随机点名案例","3.2.2 随机点名案例",[86,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",[92,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},[95,57129,57130,57132,57134,57136],{"class":97,"line":98},[95,57131,51274],{"class":105},[95,57133,51278],{"class":51277},[95,57135,51281],{"class":1945},[95,57137,51284],{"class":105},[95,57139,57140,57142,57144,57146,57148,57150],{"class":97,"line":15},[95,57141,1016],{"class":105},[95,57143,50612],{"class":51277},[95,57145,51293],{"class":1945},[95,57147,151],{"class":105},[95,57149,51298],{"class":210},[95,57151,51284],{"class":105},[95,57153,57154],{"class":97,"line":1161},[95,57155,2382],{"emptyLinePlaceholder":21},[95,57157,57158,57160,57162],{"class":97,"line":1176},[95,57159,1016],{"class":105},[95,57161,51311],{"class":51277},[95,57163,51284],{"class":105},[95,57165,57166,57168,57170,57172,57174,57176],{"class":97,"line":1182},[95,57167,52121],{"class":105},[95,57169,51321],{"class":51277},[95,57171,51324],{"class":1945},[95,57173,151],{"class":105},[95,57175,51329],{"class":210},[95,57177,51284],{"class":105},[95,57179,57180,57182,57184,57186,57188,57190,57192,57194,57196],{"class":97,"line":1196},[95,57181,52121],{"class":105},[95,57183,51321],{"class":51277},[95,57185,14903],{"class":1945},[95,57187,151],{"class":105},[95,57189,51368],{"class":210},[95,57191,51348],{"class":1945},[95,57193,151],{"class":105},[95,57195,51375],{"class":210},[95,57197,51284],{"class":105},[95,57199,57200,57202,57204,57206,57208],{"class":97,"line":1202},[95,57201,52121],{"class":105},[95,57203,51384],{"class":51277},[95,57205,51387],{"class":105},[95,57207,51384],{"class":51277},[95,57209,51284],{"class":105},[95,57211,57212,57214,57216],{"class":97,"line":1293},[95,57213,52121],{"class":105},[95,57215,5109],{"class":51277},[95,57217,51284],{"class":105},[95,57219,57220,57222],{"class":97,"line":1299},[95,57221,6386],{"class":51277},[95,57223,15555],{"class":105},[95,57225,57226,57228,57230,57232],{"class":97,"line":1311},[95,57227,54683],{"class":154},[95,57229,51414],{"class":105},[95,57231,297],{"class":154},[95,57233,1272],{"class":105},[95,57235,57236,57238,57240,57242],{"class":97,"line":1594},[95,57237,54672],{"class":154},[95,57239,51414],{"class":105},[95,57241,297],{"class":154},[95,57243,1272],{"class":105},[95,57245,57246],{"class":97,"line":1599},[95,57247,2169],{"class":105},[95,57249,57250],{"class":97,"line":1605},[95,57251,2382],{"emptyLinePlaceholder":21},[95,57253,57254,57257],{"class":97,"line":1610},[95,57255,57256],{"class":51277},"    h2",[95,57258,15555],{"class":105},[95,57260,57261,57264,57266,57268],{"class":97,"line":1624},[95,57262,57263],{"class":154},"      text-align",[95,57265,51414],{"class":105},[95,57267,51569],{"class":154},[95,57269,1272],{"class":105},[95,57271,57272],{"class":97,"line":1629},[95,57273,2169],{"class":105},[95,57275,57276],{"class":97,"line":1635},[95,57277,2382],{"emptyLinePlaceholder":21},[95,57279,57280,57282],{"class":97,"line":1656},[95,57281,54729],{"class":1945},[95,57283,15555],{"class":105},[95,57285,57286,57288,57290,57292,57294],{"class":97,"line":1661},[95,57287,54748],{"class":154},[95,57289,51414],{"class":105},[95,57291,1521],{"class":154},[95,57293,51469],{"class":101},[95,57295,1272],{"class":105},[95,57297,57298,57300,57302,57304,57306,57308],{"class":97,"line":1675},[95,57299,54683],{"class":154},[95,57301,51414],{"class":105},[95,57303,762],{"class":154},[95,57305,51469],{"class":101},[95,57307,51533],{"class":154},[95,57309,1272],{"class":105},[95,57311,57312,57314,57316,57318],{"class":97,"line":1680},[95,57313,54986],{"class":154},[95,57315,51414],{"class":105},[95,57317,51454],{"class":154},[95,57319,1272],{"class":105},[95,57321,57322,57324,57326,57328,57330],{"class":97,"line":1709},[95,57323,54899],{"class":154},[95,57325,51414],{"class":105},[95,57327,931],{"class":154},[95,57329,51469],{"class":101},[95,57331,1272],{"class":105},[95,57333,57334,57337,57339,57341,57343],{"class":97,"line":1714},[95,57335,57336],{"class":154},"      line-height",[95,57338,51414],{"class":105},[95,57340,507],{"class":154},[95,57342,51469],{"class":101},[95,57344,1272],{"class":105},[95,57346,57347],{"class":97,"line":1731},[95,57348,2169],{"class":105},[95,57350,57351],{"class":97,"line":1736},[95,57352,2382],{"emptyLinePlaceholder":21},[95,57354,57355,57358],{"class":97,"line":1741},[95,57356,57357],{"class":1945},"    .qs",[95,57359,15555],{"class":105},[95,57361,57362],{"class":97,"line":1746},[95,57363,2382],{"emptyLinePlaceholder":21},[95,57365,57366,57368,57370,57373,57375],{"class":97,"line":1760},[95,57367,54748],{"class":154},[95,57369,51414],{"class":105},[95,57371,57372],{"class":154},"450",[95,57374,51469],{"class":101},[95,57376,1272],{"class":105},[95,57378,57379,57381,57383,57385,57387],{"class":97,"line":1765},[95,57380,54762],{"class":154},[95,57382,51414],{"class":105},[95,57384,507],{"class":154},[95,57386,51469],{"class":101},[95,57388,1272],{"class":105},[95,57390,57391,57394,57396,57399],{"class":97,"line":2559},[95,57392,57393],{"class":154},"      color",[95,57395,51414],{"class":105},[95,57397,57398],{"class":154},"red",[95,57400,1272],{"class":105},[95,57402,57403],{"class":97,"line":2573},[95,57404,2382],{"emptyLinePlaceholder":21},[95,57406,57407],{"class":97,"line":2581},[95,57408,2169],{"class":105},[95,57410,57411],{"class":97,"line":2586},[95,57412,2382],{"emptyLinePlaceholder":21},[95,57414,57415,57418],{"class":97,"line":2592},[95,57416,57417],{"class":1945},"    .btns",[95,57419,15555],{"class":105},[95,57421,57422,57424,57426,57428],{"class":97,"line":2598},[95,57423,57263],{"class":154},[95,57425,51414],{"class":105},[95,57427,51569],{"class":154},[95,57429,1272],{"class":105},[95,57431,57432],{"class":97,"line":2603},[95,57433,2169],{"class":105},[95,57435,57436],{"class":97,"line":7931},[95,57437,2382],{"emptyLinePlaceholder":21},[95,57439,57440,57442,57445],{"class":97,"line":7955},[95,57441,57417],{"class":1945},[95,57443,57444],{"class":51277}," button",[95,57446,15555],{"class":105},[95,57448,57449,57451,57453,57455,57457],{"class":97,"line":7960},[95,57450,54748],{"class":154},[95,57452,51414],{"class":105},[95,57454,923],{"class":154},[95,57456,51469],{"class":101},[95,57458,1272],{"class":105},[95,57460,57461,57463,57465,57467,57469],{"class":97,"line":7966},[95,57462,54762],{"class":154},[95,57464,51414],{"class":105},[95,57466,379],{"class":154},[95,57468,51469],{"class":101},[95,57470,1272],{"class":105},[95,57472,57473,57475,57477,57479,57482,57484],{"class":97,"line":7993},[95,57474,54683],{"class":154},[95,57476,51414],{"class":105},[95,57478,297],{"class":154},[95,57480,57481],{"class":154}," 50",[95,57483,51469],{"class":101},[95,57485,1272],{"class":105},[95,57487,57488],{"class":97,"line":7998},[95,57489,2169],{"class":105},[95,57491,57492,57494,57496],{"class":97,"line":8004},[95,57493,52394],{"class":105},[95,57495,5109],{"class":51277},[95,57497,51284],{"class":105},[95,57499,57500,57502,57504],{"class":97,"line":8016},[95,57501,51762],{"class":105},[95,57503,51311],{"class":51277},[95,57505,51284],{"class":105},[95,57507,57508],{"class":97,"line":8028},[95,57509,2382],{"emptyLinePlaceholder":21},[95,57511,57512,57514,57516],{"class":97,"line":8040},[95,57513,1016],{"class":105},[95,57515,51777],{"class":51277},[95,57517,51284],{"class":105},[95,57519,57520,57522,57524,57527,57529],{"class":97,"line":9699},[95,57521,52121],{"class":105},[95,57523,37],{"class":51277},[95,57525,57526],{"class":105},">随机点名\u003C\u002F",[95,57528,37],{"class":51277},[95,57530,51284],{"class":105},[95,57532,57533,57535,57537,57539,57541,57543],{"class":97,"line":9724},[95,57534,52121],{"class":105},[95,57536,51588],{"class":51277},[95,57538,53463],{"class":1945},[95,57540,151],{"class":105},[95,57542,53468],{"class":210},[95,57544,51284],{"class":105},[95,57546,57547,57549,57551,57554,57556],{"class":97,"line":9747},[95,57548,51318],{"class":105},[95,57550,95],{"class":51277},[95,57552,57553],{"class":105},">名字是：\u003C\u002F",[95,57555,95],{"class":51277},[95,57557,51284],{"class":105},[95,57559,57560,57562,57564,57566,57568,57571,57574,57576],{"class":97,"line":9771},[95,57561,51318],{"class":105},[95,57563,51588],{"class":51277},[95,57565,53463],{"class":1945},[95,57567,151],{"class":105},[95,57569,57570],{"class":210},"\"qs\"",[95,57572,57573],{"class":105},">这里显示姓名\u003C\u002F",[95,57575,51588],{"class":51277},[95,57577,51284],{"class":105},[95,57579,57580,57582,57584],{"class":97,"line":9776},[95,57581,52394],{"class":105},[95,57583,51588],{"class":51277},[95,57585,51284],{"class":105},[95,57587,57588,57590,57592,57594,57596,57599],{"class":97,"line":9781},[95,57589,52121],{"class":105},[95,57591,51588],{"class":51277},[95,57593,53463],{"class":1945},[95,57595,151],{"class":105},[95,57597,57598],{"class":210},"\"btns\"",[95,57600,51284],{"class":105},[95,57602,57603,57605,57607,57609,57611,57614,57617,57619],{"class":97,"line":9786},[95,57604,51318],{"class":105},[95,57606,53864],{"class":51277},[95,57608,53463],{"class":1945},[95,57610,151],{"class":105},[95,57612,57613],{"class":210},"\"start\"",[95,57615,57616],{"class":105},">开始\u003C\u002F",[95,57618,53864],{"class":51277},[95,57620,51284],{"class":105},[95,57622,57623,57625,57627,57629,57631,57634,57637,57639],{"class":97,"line":9795},[95,57624,51318],{"class":105},[95,57626,53864],{"class":51277},[95,57628,53463],{"class":1945},[95,57630,151],{"class":105},[95,57632,57633],{"class":210},"\"end\"",[95,57635,57636],{"class":105},">结束\u003C\u002F",[95,57638,53864],{"class":51277},[95,57640,51284],{"class":105},[95,57642,57643,57645,57647],{"class":97,"line":9800},[95,57644,52394],{"class":105},[95,57646,51588],{"class":51277},[95,57648,51284],{"class":105},[95,57650,57651],{"class":97,"line":9806},[95,57652,2382],{"emptyLinePlaceholder":21},[95,57654,57655,57657,57659],{"class":97,"line":9827},[95,57656,52121],{"class":105},[95,57658,51790],{"class":51277},[95,57660,51284],{"class":105},[95,57662,57663],{"class":97,"line":9833},[95,57664,57665],{"class":164},"    \u002F\u002F 数据数组\n",[95,57667,57668,57670,57673,57675,57677,57680,57682,57685,57687,57690,57692,57695,57697,57700],{"class":97,"line":9847},[95,57669,11204],{"class":101},[95,57671,57672],{"class":154}," arr",[95,57674,13547],{"class":101},[95,57676,52203],{"class":105},[95,57678,57679],{"class":210},"'马超'",[95,57681,12418],{"class":105},[95,57683,57684],{"class":210},"'黄忠'",[95,57686,12418],{"class":105},[95,57688,57689],{"class":210},"'赵云'",[95,57691,12418],{"class":105},[95,57693,57694],{"class":210},"'关羽'",[95,57696,12418],{"class":105},[95,57698,57699],{"class":210},"'张飞'",[95,57701,33231],{"class":105},[95,57703,57704,57706,57709,57711,57713,57715,57717,57720],{"class":97,"line":9853},[95,57705,11204],{"class":101},[95,57707,57708],{"class":154}," qs",[95,57710,13547],{"class":101},[95,57712,54373],{"class":105},[95,57714,54376],{"class":1945},[95,57716,106],{"class":105},[95,57718,57719],{"class":210},"'.qs'",[95,57721,112],{"class":105},[95,57723,57724],{"class":97,"line":9880},[95,57725,57726],{"class":164},"    \u002F\u002F 1.业务1.开始按钮模块\n",[95,57728,57729,57731,57733,57735,57737,57739,57741,57744],{"class":97,"line":9889},[95,57730,11204],{"class":101},[95,57732,4166],{"class":154},[95,57734,13547],{"class":101},[95,57736,54373],{"class":105},[95,57738,54376],{"class":1945},[95,57740,106],{"class":105},[95,57742,57743],{"class":210},"'.start'",[95,57745,112],{"class":105},[95,57747,57748],{"class":97,"line":9895},[95,57749,57750],{"class":164},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[95,57752,57753,57755,57758,57760],{"class":97,"line":9903},[95,57754,52196],{"class":101},[95,57756,57757],{"class":105}," timerId ",[95,57759,151],{"class":101},[95,57761,47318],{"class":154},[95,57763,57764],{"class":97,"line":9908},[95,57765,57766],{"class":164},"    \u002F\u002F 随机号要全局变量\n",[95,57768,57769,57771,57774,57776],{"class":97,"line":16587},[95,57770,52196],{"class":101},[95,57772,57773],{"class":105}," random ",[95,57775,151],{"class":101},[95,57777,47318],{"class":154},[95,57779,57780],{"class":97,"line":16593},[95,57781,57782],{"class":164},"    \u002F\u002F 1.1 添加点击事件\n",[95,57784,57785,57788,57791,57793,57796,57798,57800],{"class":97,"line":16616},[95,57786,57787],{"class":105},"    start.",[95,57789,57790],{"class":1945},"addEventListener",[95,57792,106],{"class":105},[95,57794,57795],{"class":210},"'click'",[95,57797,12418],{"class":105},[95,57799,54426],{"class":101},[95,57801,54429],{"class":105},[95,57803,57804,57807,57809,57811,57813,57815],{"class":97,"line":16622},[95,57805,57806],{"class":105},"      timerId ",[95,57808,151],{"class":101},[95,57810,54421],{"class":1945},[95,57812,106],{"class":105},[95,57814,54426],{"class":101},[95,57816,54429],{"class":105},[95,57818,57819],{"class":97,"line":16645},[95,57820,57821],{"class":164},"        \u002F\u002F 随机数\n",[95,57823,57824,57827,57829,57832,57835,57838,57840,57842,57844,57846],{"class":97,"line":16659},[95,57825,57826],{"class":105},"        random ",[95,57828,151],{"class":101},[95,57830,57831],{"class":1945}," parseInt",[95,57833,57834],{"class":105},"(Math.",[95,57836,57837],{"class":1945},"random",[95,57839,13033],{"class":105},[95,57841,561],{"class":101},[95,57843,51942],{"class":105},[95,57845,51945],{"class":154},[95,57847,112],{"class":105},[95,57849,57850,57853,57855],{"class":97,"line":16679},[95,57851,57852],{"class":105},"        qs.innerHTML ",[95,57854,151],{"class":101},[95,57856,57857],{"class":105}," arr[random]\n",[95,57859,57860,57863,57865],{"class":97,"line":16685},[95,57861,57862],{"class":105},"      }, ",[95,57864,379],{"class":154},[95,57866,112],{"class":105},[95,57868,57869],{"class":97,"line":16696},[95,57870,57871],{"class":164},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[95,57873,57874,57876,57879,57881,57884,57886],{"class":97,"line":16719},[95,57875,54457],{"class":101},[95,57877,57878],{"class":105}," (arr.",[95,57880,51945],{"class":154},[95,57882,57883],{"class":101}," ===",[95,57885,25103],{"class":154},[95,57887,12425],{"class":105},[95,57889,57890],{"class":97,"line":16741},[95,57891,57892],{"class":164},"        \u002F\u002F start.disabled = true\n",[95,57894,57895],{"class":97,"line":16746},[95,57896,57897],{"class":164},"        \u002F\u002F end.disabled = true\n",[95,57899,57900],{"class":97,"line":16752},[95,57901,57902],{"class":164},"        \u002F\u002F 可以合起来写\n",[95,57904,57905,57908,57910,57913,57915],{"class":97,"line":16766},[95,57906,57907],{"class":105},"        start.disabled ",[95,57909,151],{"class":101},[95,57911,57912],{"class":105}," end.disabled ",[95,57914,151],{"class":101},[95,57916,57917],{"class":154}," true\n",[95,57919,57920],{"class":97,"line":16779},[95,57921,52375],{"class":105},[95,57923,57924],{"class":97,"line":16784},[95,57925,33446],{"class":105},[95,57927,57928],{"class":97,"line":16798},[95,57929,57930],{"class":164},"    \u002F\u002F 1.2 关闭按钮模块\n",[95,57932,57933,57935,57937,57939,57941,57943,57945,57948],{"class":97,"line":16803},[95,57934,11204],{"class":101},[95,57936,4182],{"class":154},[95,57938,13547],{"class":101},[95,57940,54373],{"class":105},[95,57942,54376],{"class":1945},[95,57944,106],{"class":105},[95,57946,57947],{"class":210},"'.end'",[95,57949,112],{"class":105},[95,57951,57952,57955,57957,57959,57961,57963,57965],{"class":97,"line":16809},[95,57953,57954],{"class":105},"    end.",[95,57956,57790],{"class":1945},[95,57958,106],{"class":105},[95,57960,57795],{"class":210},[95,57962,12418],{"class":105},[95,57964,54426],{"class":101},[95,57966,54429],{"class":105},[95,57968,57969,57972],{"class":97,"line":16814},[95,57970,57971],{"class":1945},"      clearInterval",[95,57973,57974],{"class":105},"(timerId)\n",[95,57976,57977],{"class":97,"line":16828},[95,57978,57979],{"class":164},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[95,57981,57982,57985,57988,57991,57993],{"class":97,"line":16833},[95,57983,57984],{"class":105},"      arr.",[95,57986,57987],{"class":1945},"splice",[95,57989,57990],{"class":105},"(random, ",[95,57992,323],{"class":154},[95,57994,112],{"class":105},[95,57996,57997],{"class":97,"line":16838},[95,57998,33446],{"class":105},[95,58000,58001],{"class":97,"line":16852},[95,58002,2382],{"emptyLinePlaceholder":21},[95,58004,58005,58007,58009],{"class":97,"line":16864},[95,58006,52394],{"class":105},[95,58008,51790],{"class":51277},[95,58010,51284],{"class":105},[95,58012,58013,58015,58017],{"class":97,"line":16869},[95,58014,51762],{"class":105},[95,58016,51777],{"class":51277},[95,58018,51284],{"class":105},[95,58020,58021],{"class":97,"line":16882},[95,58022,2382],{"emptyLinePlaceholder":21},[95,58024,58025,58027,58029],{"class":97,"line":16887},[95,58026,51762],{"class":105},[95,58028,50612],{"class":51277},[95,58030,51284],{"class":105},[10,58032,58033],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[66,58035,58037],{"id":58036},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[86,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",[92,58042,58043,58053,58067,58071,58079,58093,58113,58125,58133,58137,58145,58157,58165,58184,58201,58217,58227,58231,58239,58247,58251],{"__ignoreMap":14},[95,58044,58045,58047,58049,58051],{"class":97,"line":98},[95,58046,51274],{"class":105},[95,58048,51278],{"class":51277},[95,58050,51281],{"class":1945},[95,58052,51284],{"class":105},[95,58054,58055,58057,58059,58061,58063,58065],{"class":97,"line":15},[95,58056,1016],{"class":105},[95,58058,50612],{"class":51277},[95,58060,51293],{"class":1945},[95,58062,151],{"class":105},[95,58064,51298],{"class":210},[95,58066,51284],{"class":105},[95,58068,58069],{"class":97,"line":1161},[95,58070,2382],{"emptyLinePlaceholder":21},[95,58072,58073,58075,58077],{"class":97,"line":1176},[95,58074,1016],{"class":105},[95,58076,51311],{"class":51277},[95,58078,51284],{"class":105},[95,58080,58081,58083,58085,58087,58089,58091],{"class":97,"line":1182},[95,58082,52121],{"class":105},[95,58084,51321],{"class":51277},[95,58086,51324],{"class":1945},[95,58088,151],{"class":105},[95,58090,51329],{"class":210},[95,58092,51284],{"class":105},[95,58094,58095,58097,58099,58101,58103,58105,58107,58109,58111],{"class":97,"line":1196},[95,58096,52121],{"class":105},[95,58098,51321],{"class":51277},[95,58100,14903],{"class":1945},[95,58102,151],{"class":105},[95,58104,51368],{"class":210},[95,58106,51348],{"class":1945},[95,58108,151],{"class":105},[95,58110,51375],{"class":210},[95,58112,51284],{"class":105},[95,58114,58115,58117,58119,58121,58123],{"class":97,"line":1202},[95,58116,52121],{"class":105},[95,58118,51384],{"class":51277},[95,58120,51387],{"class":105},[95,58122,51384],{"class":51277},[95,58124,51284],{"class":105},[95,58126,58127,58129,58131],{"class":97,"line":1293},[95,58128,51762],{"class":105},[95,58130,51311],{"class":51277},[95,58132,51284],{"class":105},[95,58134,58135],{"class":97,"line":1299},[95,58136,2382],{"emptyLinePlaceholder":21},[95,58138,58139,58141,58143],{"class":97,"line":1311},[95,58140,1016],{"class":105},[95,58142,51777],{"class":51277},[95,58144,51284],{"class":105},[95,58146,58147,58149,58151,58153,58155],{"class":97,"line":1594},[95,58148,52121],{"class":105},[95,58150,53864],{"class":51277},[95,58152,53870],{"class":105},[95,58154,53864],{"class":51277},[95,58156,51284],{"class":105},[95,58158,58159,58161,58163],{"class":97,"line":1599},[95,58160,52121],{"class":105},[95,58162,51790],{"class":51277},[95,58164,51284],{"class":105},[95,58166,58167,58169,58171,58173,58175,58177,58179,58182],{"class":97,"line":1605},[95,58168,11204],{"class":101},[95,58170,54368],{"class":154},[95,58172,13547],{"class":101},[95,58174,54373],{"class":105},[95,58176,54376],{"class":1945},[95,58178,106],{"class":105},[95,58180,58181],{"class":210},"'button'",[95,58183,112],{"class":105},[95,58185,58186,58189,58191,58193,58195,58197,58199],{"class":97,"line":1610},[95,58187,58188],{"class":105},"    btn.",[95,58190,57790],{"class":1945},[95,58192,106],{"class":105},[95,58194,57795],{"class":210},[95,58196,12418],{"class":105},[95,58198,54426],{"class":101},[95,58200,54429],{"class":105},[95,58202,58203,58206,58208,58210,58213,58215],{"class":97,"line":1624},[95,58204,58205],{"class":101},"      const",[95,58207,2222],{"class":154},[95,58209,13547],{"class":101},[95,58211,58212],{"class":105}," Math.",[95,58214,57837],{"class":1945},[95,58216,1958],{"class":105},[95,58218,58219,58222,58225],{"class":97,"line":1629},[95,58220,58221],{"class":105},"      console.",[95,58223,58224],{"class":1945},"log",[95,58226,119],{"class":105},[95,58228,58229],{"class":97,"line":1635},[95,58230,33446],{"class":105},[95,58232,58233,58235,58237],{"class":97,"line":1656},[95,58234,52394],{"class":105},[95,58236,51790],{"class":51277},[95,58238,51284],{"class":105},[95,58240,58241,58243,58245],{"class":97,"line":1661},[95,58242,51762],{"class":105},[95,58244,51777],{"class":51277},[95,58246,51284],{"class":105},[95,58248,58249],{"class":97,"line":1675},[95,58250,2382],{"emptyLinePlaceholder":21},[95,58252,58253,58255,58257],{"class":97,"line":1680},[95,58254,51762],{"class":105},[95,58256,50612],{"class":51277},[95,58258,51284],{"class":105},[10,58260,58261],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[10,58263,58264],{},"常量不可以重新赋值",[10,58266,58267],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[86,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",[92,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},[95,58274,58275,58277,58279,58281],{"class":97,"line":98},[95,58276,51274],{"class":105},[95,58278,51278],{"class":51277},[95,58280,51281],{"class":1945},[95,58282,51284],{"class":105},[95,58284,58285,58287,58289,58291,58293,58295],{"class":97,"line":15},[95,58286,1016],{"class":105},[95,58288,50612],{"class":51277},[95,58290,51293],{"class":1945},[95,58292,151],{"class":105},[95,58294,51298],{"class":210},[95,58296,51284],{"class":105},[95,58298,58299],{"class":97,"line":1161},[95,58300,2382],{"emptyLinePlaceholder":21},[95,58302,58303,58305,58307],{"class":97,"line":1176},[95,58304,1016],{"class":105},[95,58306,51311],{"class":51277},[95,58308,51284],{"class":105},[95,58310,58311,58313,58315,58317,58319,58321],{"class":97,"line":1182},[95,58312,52121],{"class":105},[95,58314,51321],{"class":51277},[95,58316,51324],{"class":1945},[95,58318,151],{"class":105},[95,58320,51329],{"class":210},[95,58322,51284],{"class":105},[95,58324,58325,58327,58329,58331,58333,58335,58337,58339,58341],{"class":97,"line":1196},[95,58326,52121],{"class":105},[95,58328,51321],{"class":51277},[95,58330,14903],{"class":1945},[95,58332,151],{"class":105},[95,58334,51368],{"class":210},[95,58336,51348],{"class":1945},[95,58338,151],{"class":105},[95,58340,51375],{"class":210},[95,58342,51284],{"class":105},[95,58344,58345,58347,58349,58351,58353],{"class":97,"line":1202},[95,58346,52121],{"class":105},[95,58348,51384],{"class":51277},[95,58350,51387],{"class":105},[95,58352,51384],{"class":51277},[95,58354,51284],{"class":105},[95,58356,58357,58359,58361],{"class":97,"line":1293},[95,58358,51762],{"class":105},[95,58360,51311],{"class":51277},[95,58362,51284],{"class":105},[95,58364,58365],{"class":97,"line":1299},[95,58366,2382],{"emptyLinePlaceholder":21},[95,58368,58369,58371,58373],{"class":97,"line":1311},[95,58370,1016],{"class":105},[95,58372,51777],{"class":51277},[95,58374,51284],{"class":105},[95,58376,58377,58379,58381,58383,58385],{"class":97,"line":1594},[95,58378,52121],{"class":105},[95,58380,53864],{"class":51277},[95,58382,53870],{"class":105},[95,58384,53864],{"class":51277},[95,58386,51284],{"class":105},[95,58388,58389,58391,58393],{"class":97,"line":1599},[95,58390,52121],{"class":105},[95,58392,51790],{"class":51277},[95,58394,51284],{"class":105},[95,58396,58397,58399,58401,58403],{"class":97,"line":1605},[95,58398,11204],{"class":101},[95,58400,2222],{"class":154},[95,58402,13547],{"class":101},[95,58404,58405],{"class":154}," 10\n",[95,58407,58408,58410,58412,58414,58416,58418,58420,58422],{"class":97,"line":1610},[95,58409,11204],{"class":101},[95,58411,54368],{"class":154},[95,58413,13547],{"class":101},[95,58415,54373],{"class":105},[95,58417,54376],{"class":1945},[95,58419,106],{"class":105},[95,58421,58181],{"class":210},[95,58423,112],{"class":105},[95,58425,58426,58428,58430,58432,58434,58436,58438],{"class":97,"line":1624},[95,58427,58188],{"class":105},[95,58429,57790],{"class":1945},[95,58431,106],{"class":105},[95,58433,57795],{"class":210},[95,58435,12418],{"class":105},[95,58437,54426],{"class":101},[95,58439,54429],{"class":105},[95,58441,58442,58444,58446,58448,58450,58452],{"class":97,"line":1629},[95,58443,58205],{"class":101},[95,58445,2222],{"class":154},[95,58447,13547],{"class":101},[95,58449,58212],{"class":105},[95,58451,57837],{"class":1945},[95,58453,1958],{"class":105},[95,58455,58456,58458,58460],{"class":97,"line":1635},[95,58457,58221],{"class":105},[95,58459,58224],{"class":1945},[95,58461,119],{"class":105},[95,58463,58464],{"class":97,"line":1656},[95,58465,33446],{"class":105},[95,58467,58468,58470,58472],{"class":97,"line":1661},[95,58469,52394],{"class":105},[95,58471,51790],{"class":51277},[95,58473,51284],{"class":105},[95,58475,58476,58478,58480],{"class":97,"line":1675},[95,58477,51762],{"class":105},[95,58479,51777],{"class":51277},[95,58481,51284],{"class":105},[95,58483,58484],{"class":97,"line":1680},[95,58485,2382],{"emptyLinePlaceholder":21},[95,58487,58488,58490,58492],{"class":97,"line":1709},[95,58489,51762],{"class":105},[95,58491,50612],{"class":51277},[95,58493,51284],{"class":105},[10,58495,58496],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[86,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",[92,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},[95,58503,58504,58506,58508,58510],{"class":97,"line":98},[95,58505,51274],{"class":105},[95,58507,51278],{"class":51277},[95,58509,51281],{"class":1945},[95,58511,51284],{"class":105},[95,58513,58514,58516,58518,58520,58522,58524],{"class":97,"line":15},[95,58515,1016],{"class":105},[95,58517,50612],{"class":51277},[95,58519,51293],{"class":1945},[95,58521,151],{"class":105},[95,58523,51298],{"class":210},[95,58525,51284],{"class":105},[95,58527,58528],{"class":97,"line":1161},[95,58529,2382],{"emptyLinePlaceholder":21},[95,58531,58532,58534,58536],{"class":97,"line":1176},[95,58533,1016],{"class":105},[95,58535,51311],{"class":51277},[95,58537,51284],{"class":105},[95,58539,58540,58542,58544,58546,58548,58550],{"class":97,"line":1182},[95,58541,52121],{"class":105},[95,58543,51321],{"class":51277},[95,58545,51324],{"class":1945},[95,58547,151],{"class":105},[95,58549,51329],{"class":210},[95,58551,51284],{"class":105},[95,58553,58554,58556,58558,58560,58562,58564,58566,58568,58570],{"class":97,"line":1196},[95,58555,52121],{"class":105},[95,58557,51321],{"class":51277},[95,58559,14903],{"class":1945},[95,58561,151],{"class":105},[95,58563,51368],{"class":210},[95,58565,51348],{"class":1945},[95,58567,151],{"class":105},[95,58569,51375],{"class":210},[95,58571,51284],{"class":105},[95,58573,58574,58576,58578,58580,58582],{"class":97,"line":1202},[95,58575,52121],{"class":105},[95,58577,51384],{"class":51277},[95,58579,51387],{"class":105},[95,58581,51384],{"class":51277},[95,58583,51284],{"class":105},[95,58585,58586,58588,58590],{"class":97,"line":1293},[95,58587,51762],{"class":105},[95,58589,51311],{"class":51277},[95,58591,51284],{"class":105},[95,58593,58594],{"class":97,"line":1299},[95,58595,2382],{"emptyLinePlaceholder":21},[95,58597,58598,58600,58602],{"class":97,"line":1311},[95,58599,1016],{"class":105},[95,58601,51777],{"class":51277},[95,58603,51284],{"class":105},[95,58605,58606,58608,58610,58612,58614],{"class":97,"line":1594},[95,58607,52121],{"class":105},[95,58609,53864],{"class":51277},[95,58611,53870],{"class":105},[95,58613,53864],{"class":51277},[95,58615,51284],{"class":105},[95,58617,58618,58620,58622],{"class":97,"line":1599},[95,58619,52121],{"class":105},[95,58621,51790],{"class":51277},[95,58623,51284],{"class":105},[95,58625,58626,58628,58630,58632],{"class":97,"line":1605},[95,58627,11204],{"class":101},[95,58629,2222],{"class":154},[95,58631,13547],{"class":101},[95,58633,58405],{"class":154},[95,58635,58636,58638,58640,58642,58644,58646,58648,58650],{"class":97,"line":1610},[95,58637,11204],{"class":101},[95,58639,54368],{"class":154},[95,58641,13547],{"class":101},[95,58643,54373],{"class":105},[95,58645,54376],{"class":1945},[95,58647,106],{"class":105},[95,58649,58181],{"class":210},[95,58651,112],{"class":105},[95,58653,58654,58656,58658,58660,58662,58664,58666],{"class":97,"line":1624},[95,58655,58188],{"class":105},[95,58657,57790],{"class":1945},[95,58659,106],{"class":105},[95,58661,57795],{"class":210},[95,58663,12418],{"class":105},[95,58665,54426],{"class":101},[95,58667,54429],{"class":105},[95,58669,58670,58673,58675,58677,58679],{"class":97,"line":1629},[95,58671,58672],{"class":105},"      num ",[95,58674,151],{"class":101},[95,58676,58212],{"class":105},[95,58678,57837],{"class":1945},[95,58680,1958],{"class":105},[95,58682,58683,58685,58687],{"class":97,"line":1635},[95,58684,58221],{"class":105},[95,58686,58224],{"class":1945},[95,58688,119],{"class":105},[95,58690,58691],{"class":97,"line":1656},[95,58692,33446],{"class":105},[95,58694,58695,58697,58699],{"class":97,"line":1661},[95,58696,52394],{"class":105},[95,58698,51790],{"class":51277},[95,58700,51284],{"class":105},[95,58702,58703,58705,58707],{"class":97,"line":1675},[95,58704,51762],{"class":105},[95,58706,51777],{"class":51277},[95,58708,51284],{"class":105},[95,58710,58711],{"class":97,"line":1680},[95,58712,2382],{"emptyLinePlaceholder":21},[95,58714,58715,58717,58719],{"class":97,"line":1709},[95,58716,51762],{"class":105},[95,58718,50612],{"class":51277},[95,58720,51284],{"class":105},[10,58722,58723],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[66,58725,58727],{"id":58726},"_324-事件监听版本","3.2.4 事件监听版本",[10,58729,58730],{},[1444,58731],{"alt":14,"src":58732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[10,58734,58735],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[10,58737,58738],{},"这种方式会覆盖前边的事件监听:",[86,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",[92,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},[95,58745,58746,58748,58750,58752],{"class":97,"line":98},[95,58747,51274],{"class":105},[95,58749,51278],{"class":51277},[95,58751,51281],{"class":1945},[95,58753,51284],{"class":105},[95,58755,58756,58758,58760,58762,58764,58766],{"class":97,"line":15},[95,58757,1016],{"class":105},[95,58759,50612],{"class":51277},[95,58761,51293],{"class":1945},[95,58763,151],{"class":105},[95,58765,51298],{"class":210},[95,58767,51284],{"class":105},[95,58769,58770],{"class":97,"line":1161},[95,58771,2382],{"emptyLinePlaceholder":21},[95,58773,58774,58776,58778],{"class":97,"line":1176},[95,58775,1016],{"class":105},[95,58777,51311],{"class":51277},[95,58779,51284],{"class":105},[95,58781,58782,58784,58786,58788,58790,58792],{"class":97,"line":1182},[95,58783,52121],{"class":105},[95,58785,51321],{"class":51277},[95,58787,51324],{"class":1945},[95,58789,151],{"class":105},[95,58791,51329],{"class":210},[95,58793,51284],{"class":105},[95,58795,58796,58798,58800,58802,58804,58806,58808,58810,58812],{"class":97,"line":1196},[95,58797,52121],{"class":105},[95,58799,51321],{"class":51277},[95,58801,14903],{"class":1945},[95,58803,151],{"class":105},[95,58805,51368],{"class":210},[95,58807,51348],{"class":1945},[95,58809,151],{"class":105},[95,58811,51375],{"class":210},[95,58813,51284],{"class":105},[95,58815,58816,58818,58820,58822,58824],{"class":97,"line":1202},[95,58817,52121],{"class":105},[95,58819,51384],{"class":51277},[95,58821,51387],{"class":105},[95,58823,51384],{"class":51277},[95,58825,51284],{"class":105},[95,58827,58828,58830,58832],{"class":97,"line":1293},[95,58829,51762],{"class":105},[95,58831,51311],{"class":51277},[95,58833,51284],{"class":105},[95,58835,58836],{"class":97,"line":1299},[95,58837,2382],{"emptyLinePlaceholder":21},[95,58839,58840,58842,58844],{"class":97,"line":1311},[95,58841,1016],{"class":105},[95,58843,51777],{"class":51277},[95,58845,51284],{"class":105},[95,58847,58848,58850,58852,58854,58856],{"class":97,"line":1594},[95,58849,52121],{"class":105},[95,58851,53864],{"class":51277},[95,58853,53870],{"class":105},[95,58855,53864],{"class":51277},[95,58857,51284],{"class":105},[95,58859,58860,58862,58864],{"class":97,"line":1599},[95,58861,52121],{"class":105},[95,58863,51790],{"class":51277},[95,58865,51284],{"class":105},[95,58867,58868,58870,58872,58874,58876,58878,58880,58882],{"class":97,"line":1605},[95,58869,11204],{"class":101},[95,58871,54368],{"class":154},[95,58873,13547],{"class":101},[95,58875,54373],{"class":105},[95,58877,54376],{"class":1945},[95,58879,106],{"class":105},[95,58881,58181],{"class":210},[95,58883,112],{"class":105},[95,58885,58886,58888,58891,58893,58896],{"class":97,"line":1610},[95,58887,58188],{"class":105},[95,58889,58890],{"class":1945},"onclick",[95,58892,13547],{"class":101},[95,58894,58895],{"class":101}," function",[95,58897,54429],{"class":105},[95,58899,58900,58903,58905,58907],{"class":97,"line":1624},[95,58901,58902],{"class":1945},"      alert",[95,58904,106],{"class":105},[95,58906,578],{"class":154},[95,58908,112],{"class":105},[95,58910,58911],{"class":97,"line":1629},[95,58912,2169],{"class":105},[95,58914,58915,58917,58919,58921,58923],{"class":97,"line":1635},[95,58916,58188],{"class":105},[95,58918,58890],{"class":1945},[95,58920,13547],{"class":101},[95,58922,58895],{"class":101},[95,58924,54429],{"class":105},[95,58926,58927,58929,58931,58933],{"class":97,"line":1656},[95,58928,58902],{"class":1945},[95,58930,106],{"class":105},[95,58932,856],{"class":154},[95,58934,112],{"class":105},[95,58936,58937],{"class":97,"line":1661},[95,58938,2169],{"class":105},[95,58940,58941,58943,58945],{"class":97,"line":1675},[95,58942,52394],{"class":105},[95,58944,51790],{"class":51277},[95,58946,51284],{"class":105},[95,58948,58949,58951,58953],{"class":97,"line":1680},[95,58950,51762],{"class":105},[95,58952,51777],{"class":51277},[95,58954,51284],{"class":105},[95,58956,58957],{"class":97,"line":1709},[95,58958,2382],{"emptyLinePlaceholder":21},[95,58960,58961,58963,58965],{"class":97,"line":1714},[95,58962,51762],{"class":105},[95,58964,50612],{"class":51277},[95,58966,51284],{"class":105},[10,58968,58969],{},"只要点击就输出结果为22,前边11被覆盖了",[86,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",[92,58974,58975,58980,58985,58989,58994,58999],{"__ignoreMap":14},[95,58976,58977],{"class":97,"line":98},[95,58978,58979],{"class":105},"  btn.addEventListener('click', function () {\n",[95,58981,58982],{"class":97,"line":15},[95,58983,58984],{"class":105},"      alert(11)\n",[95,58986,58987],{"class":97,"line":1161},[95,58988,33446],{"class":105},[95,58990,58991],{"class":97,"line":1176},[95,58992,58993],{"class":105},"    btn.addEventListener('click', function () {\n",[95,58995,58996],{"class":97,"line":1182},[95,58997,58998],{"class":105},"      alert(22)\n",[95,59000,59001],{"class":97,"line":1196},[95,59002,33446],{"class":105},[10,59004,59005],{},"点击第一次输出11,第二次点击为22",[66,59007,59009],{"id":59008},"_325-事件类型","3.2.5 事件类型",[10,59011,59012],{},[1444,59013],{"alt":14,"src":59014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21981,59016,59018],{"id":59017},"_3251-鼠标事件","3.2.5.1 鼠标事件",[10,59020,59021],{},"补充知识:",[10,59023,59024],{},"轮播图自动播放模块,可以使用",[10,59026,59027],{},"let timerId = setInterval(function () {",[10,59029,59030],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[10,59032,59033],{},"用js方法模拟进行点击事件,click必须加()",[10,59035,59036],{},"next.click()",[10,59038,59039],{},"}, 1000)",[10,59041,59042],{},[1444,59043],{"alt":14,"src":59044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[86,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",[92,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},[95,59051,59052],{"class":97,"line":98},[95,59053,2382],{"emptyLinePlaceholder":21},[95,59055,59056,59058,59060,59062],{"class":97,"line":15},[95,59057,51274],{"class":105},[95,59059,51278],{"class":101},[95,59061,51281],{"class":154},[95,59063,51284],{"class":105},[95,59065,59066,59068,59070,59072,59074,59076],{"class":97,"line":1161},[95,59067,1016],{"class":105},[95,59069,50612],{"class":51277},[95,59071,51293],{"class":1945},[95,59073,151],{"class":105},[95,59075,51298],{"class":210},[95,59077,51284],{"class":105},[95,59079,59080],{"class":97,"line":1176},[95,59081,2382],{"emptyLinePlaceholder":21},[95,59083,59084,59086,59088],{"class":97,"line":1182},[95,59085,1016],{"class":105},[95,59087,51311],{"class":51277},[95,59089,51284],{"class":105},[95,59091,59092,59094,59096,59098,59100,59102],{"class":97,"line":1196},[95,59093,52121],{"class":105},[95,59095,51321],{"class":51277},[95,59097,51324],{"class":1945},[95,59099,151],{"class":105},[95,59101,51329],{"class":210},[95,59103,59104],{"class":105}," \u002F>\n",[95,59106,59107,59109,59111,59113,59115,59117,59119,59121,59123],{"class":97,"line":1202},[95,59108,52121],{"class":105},[95,59110,51321],{"class":51277},[95,59112,51340],{"class":1945},[95,59114,151],{"class":105},[95,59116,51345],{"class":210},[95,59118,51348],{"class":1945},[95,59120,151],{"class":105},[95,59122,51353],{"class":210},[95,59124,59104],{"class":105},[95,59126,59127,59129,59131,59133,59135,59137,59139,59141,59143],{"class":97,"line":1293},[95,59128,52121],{"class":105},[95,59130,51321],{"class":51277},[95,59132,14903],{"class":1945},[95,59134,151],{"class":105},[95,59136,51368],{"class":210},[95,59138,51348],{"class":1945},[95,59140,151],{"class":105},[95,59142,51375],{"class":210},[95,59144,59104],{"class":105},[95,59146,59147,59149,59151,59154,59156],{"class":97,"line":1299},[95,59148,52121],{"class":105},[95,59150,51384],{"class":51277},[95,59152,59153],{"class":105},">轮播图点击切换\u003C\u002F",[95,59155,51384],{"class":51277},[95,59157,51284],{"class":105},[95,59159,59160,59162,59164],{"class":97,"line":1311},[95,59161,52121],{"class":105},[95,59163,5109],{"class":51277},[95,59165,51284],{"class":105},[95,59167,59168],{"class":97,"line":1594},[95,59169,59170],{"class":105},"    * {\n",[95,59172,59173],{"class":97,"line":1599},[95,59174,59175],{"class":105},"      box-sizing: border-box;\n",[95,59177,59178],{"class":97,"line":1605},[95,59179,2169],{"class":105},[95,59181,59182],{"class":97,"line":1610},[95,59183,2382],{"emptyLinePlaceholder":21},[95,59185,59186],{"class":97,"line":1624},[95,59187,59188],{"class":105},"    .slider {\n",[95,59190,59191],{"class":97,"line":1629},[95,59192,59193],{"class":105},"      width: 560px;\n",[95,59195,59196],{"class":97,"line":1635},[95,59197,59198],{"class":105},"      height: 400px;\n",[95,59200,59201],{"class":97,"line":1656},[95,59202,59203],{"class":105},"      overflow: hidden;\n",[95,59205,59206],{"class":97,"line":1661},[95,59207,2169],{"class":105},[95,59209,59210],{"class":97,"line":1675},[95,59211,2382],{"emptyLinePlaceholder":21},[95,59213,59214],{"class":97,"line":1680},[95,59215,59216],{"class":105},"    .slider-wrapper {\n",[95,59218,59219],{"class":97,"line":1709},[95,59220,59221],{"class":105},"      width: 100%;\n",[95,59223,59224],{"class":97,"line":1714},[95,59225,59226],{"class":105},"      height: 320px;\n",[95,59228,59229],{"class":97,"line":1731},[95,59230,2169],{"class":105},[95,59232,59233],{"class":97,"line":1736},[95,59234,2382],{"emptyLinePlaceholder":21},[95,59236,59237],{"class":97,"line":1741},[95,59238,59239],{"class":105},"    .slider-wrapper img {\n",[95,59241,59242],{"class":97,"line":1746},[95,59243,59221],{"class":105},[95,59245,59246],{"class":97,"line":1760},[95,59247,59248],{"class":105},"      height: 100%;\n",[95,59250,59251],{"class":97,"line":1765},[95,59252,59253],{"class":105},"      display: block;\n",[95,59255,59256],{"class":97,"line":2559},[95,59257,2169],{"class":105},[95,59259,59260],{"class":97,"line":2573},[95,59261,2382],{"emptyLinePlaceholder":21},[95,59263,59264],{"class":97,"line":2581},[95,59265,59266],{"class":105},"    .slider-footer {\n",[95,59268,59269],{"class":97,"line":2586},[95,59270,59271],{"class":105},"      height: 80px;\n",[95,59273,59274],{"class":97,"line":2592},[95,59275,59276],{"class":105},"      background-color: rgb(100, 67, 68);\n",[95,59278,59279],{"class":97,"line":2598},[95,59280,59281],{"class":105},"      padding: 12px 12px 0 12px;\n",[95,59283,59284],{"class":97,"line":2603},[95,59285,59286],{"class":105},"      position: relative;\n",[95,59288,59289],{"class":97,"line":7931},[95,59290,2169],{"class":105},[95,59292,59293],{"class":97,"line":7955},[95,59294,2382],{"emptyLinePlaceholder":21},[95,59296,59297],{"class":97,"line":7960},[95,59298,59299],{"class":105},"    .slider-footer .toggle {\n",[95,59301,59302],{"class":97,"line":7966},[95,59303,59304],{"class":105},"      position: absolute;\n",[95,59306,59307],{"class":97,"line":7993},[95,59308,59309],{"class":105},"      right: 0;\n",[95,59311,59312],{"class":97,"line":7998},[95,59313,59314],{"class":105},"      top: 12px;\n",[95,59316,59317],{"class":97,"line":8004},[95,59318,59319],{"class":105},"      display: flex;\n",[95,59321,59322],{"class":97,"line":8016},[95,59323,2169],{"class":105},[95,59325,59326],{"class":97,"line":8028},[95,59327,2382],{"emptyLinePlaceholder":21},[95,59329,59330],{"class":97,"line":8040},[95,59331,59332],{"class":105},"    .slider-footer .toggle button {\n",[95,59334,59335],{"class":97,"line":9699},[95,59336,59337],{"class":105},"      margin-right: 12px;\n",[95,59339,59340],{"class":97,"line":9724},[95,59341,59342],{"class":105},"      width: 28px;\n",[95,59344,59345],{"class":97,"line":9747},[95,59346,59347],{"class":105},"      height: 28px;\n",[95,59349,59350],{"class":97,"line":9771},[95,59351,59352],{"class":105},"      appearance: none;\n",[95,59354,59355],{"class":97,"line":9776},[95,59356,59357],{"class":105},"      border: none;\n",[95,59359,59360],{"class":97,"line":9781},[95,59361,59362],{"class":105},"      background: rgba(255, 255, 255, 0.1);\n",[95,59364,59365],{"class":97,"line":9786},[95,59366,59367],{"class":105},"      color: #fff;\n",[95,59369,59370],{"class":97,"line":9795},[95,59371,59372],{"class":105},"      border-radius: 4px;\n",[95,59374,59375],{"class":97,"line":9800},[95,59376,59377],{"class":105},"      cursor: pointer;\n",[95,59379,59380],{"class":97,"line":9806},[95,59381,2169],{"class":105},[95,59383,59384],{"class":97,"line":9827},[95,59385,2382],{"emptyLinePlaceholder":21},[95,59387,59388],{"class":97,"line":9833},[95,59389,59390],{"class":105},"    .slider-footer .toggle button:hover {\n",[95,59392,59393],{"class":97,"line":9847},[95,59394,59395],{"class":105},"      background: rgba(255, 255, 255, 0.2);\n",[95,59397,59398],{"class":97,"line":9853},[95,59399,2169],{"class":105},[95,59401,59402],{"class":97,"line":9880},[95,59403,2382],{"emptyLinePlaceholder":21},[95,59405,59406],{"class":97,"line":9889},[95,59407,59408],{"class":105},"    .slider-footer p {\n",[95,59410,59411],{"class":97,"line":9895},[95,59412,59413],{"class":105},"      margin: 0;\n",[95,59415,59416],{"class":97,"line":9903},[95,59417,59367],{"class":105},[95,59419,59420],{"class":97,"line":9908},[95,59421,59422],{"class":105},"      font-size: 18px;\n",[95,59424,59425],{"class":97,"line":16587},[95,59426,59427],{"class":105},"      margin-bottom: 10px;\n",[95,59429,59430],{"class":97,"line":16593},[95,59431,2169],{"class":105},[95,59433,59434],{"class":97,"line":16616},[95,59435,2382],{"emptyLinePlaceholder":21},[95,59437,59438],{"class":97,"line":16622},[95,59439,59440],{"class":105},"    .slider-indicator {\n",[95,59442,59443],{"class":97,"line":16645},[95,59444,59413],{"class":105},[95,59446,59447],{"class":97,"line":16659},[95,59448,59449],{"class":105},"      padding: 0;\n",[95,59451,59452],{"class":97,"line":16679},[95,59453,59454],{"class":105},"      list-style: none;\n",[95,59456,59457],{"class":97,"line":16685},[95,59458,59319],{"class":105},[95,59460,59461],{"class":97,"line":16696},[95,59462,59463],{"class":105},"      align-items: center;\n",[95,59465,59466],{"class":97,"line":16719},[95,59467,2169],{"class":105},[95,59469,59470],{"class":97,"line":16741},[95,59471,2382],{"emptyLinePlaceholder":21},[95,59473,59474],{"class":97,"line":16746},[95,59475,59476],{"class":105},"    .slider-indicator li {\n",[95,59478,59479],{"class":97,"line":16752},[95,59480,59481],{"class":105},"      width: 8px;\n",[95,59483,59484],{"class":97,"line":16766},[95,59485,59486],{"class":105},"      height: 8px;\n",[95,59488,59489],{"class":97,"line":16779},[95,59490,59491],{"class":105},"      margin: 4px;\n",[95,59493,59494],{"class":97,"line":16784},[95,59495,59496],{"class":105},"      border-radius: 50%;\n",[95,59498,59499],{"class":97,"line":16798},[95,59500,59501],{"class":105},"      background: #fff;\n",[95,59503,59504],{"class":97,"line":16803},[95,59505,59506],{"class":105},"      opacity: 0.4;\n",[95,59508,59509],{"class":97,"line":16809},[95,59510,59377],{"class":105},[95,59512,59513],{"class":97,"line":16814},[95,59514,2169],{"class":105},[95,59516,59517],{"class":97,"line":16828},[95,59518,2382],{"emptyLinePlaceholder":21},[95,59520,59521],{"class":97,"line":16833},[95,59522,59523],{"class":105},"    .slider-indicator li.active {\n",[95,59525,59526],{"class":97,"line":16838},[95,59527,59528],{"class":105},"      width: 12px;\n",[95,59530,59531],{"class":97,"line":16852},[95,59532,59533],{"class":105},"      height: 12px;\n",[95,59535,59536],{"class":97,"line":16864},[95,59537,59538],{"class":105},"      opacity: 1;\n",[95,59540,59541],{"class":97,"line":16869},[95,59542,2169],{"class":105},[95,59544,59545,59547,59549],{"class":97,"line":16882},[95,59546,52394],{"class":105},[95,59548,5109],{"class":51277},[95,59550,51284],{"class":105},[95,59552,59553,59555,59557],{"class":97,"line":16887},[95,59554,51762],{"class":105},[95,59556,51311],{"class":51277},[95,59558,51284],{"class":105},[95,59560,59561],{"class":97,"line":16892},[95,59562,2382],{"emptyLinePlaceholder":21},[95,59564,59565,59567,59569],{"class":97,"line":16897},[95,59566,1016],{"class":105},[95,59568,51777],{"class":51277},[95,59570,51284],{"class":105},[95,59572,59573,59575,59577,59579,59581,59584],{"class":97,"line":16910},[95,59574,52121],{"class":105},[95,59576,51588],{"class":51277},[95,59578,53463],{"class":1945},[95,59580,151],{"class":105},[95,59582,59583],{"class":210},"\"slider\"",[95,59585,51284],{"class":105},[95,59587,59588,59590,59592,59594,59596,59598],{"class":97,"line":16915},[95,59589,51318],{"class":105},[95,59591,51588],{"class":51277},[95,59593,53463],{"class":1945},[95,59595,151],{"class":105},[95,59597,55204],{"class":210},[95,59599,51284],{"class":105},[95,59601,59602,59604,59606,59608,59610,59613,59615,59617,59619],{"class":97,"line":32618},[95,59603,55211],{"class":105},[95,59605,1444],{"class":51277},[95,59607,55216],{"class":1945},[95,59609,151],{"class":105},[95,59611,59612],{"class":210},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[95,59614,55224],{"class":1945},[95,59616,151],{"class":105},[95,59618,7635],{"class":210},[95,59620,59104],{"class":105},[95,59622,59623,59625,59627],{"class":97,"line":32624},[95,59624,51753],{"class":105},[95,59626,51588],{"class":51277},[95,59628,51284],{"class":105},[95,59630,59631,59633,59635,59637,59639,59641],{"class":97,"line":32630},[95,59632,51318],{"class":105},[95,59634,51588],{"class":51277},[95,59636,53463],{"class":1945},[95,59638,151],{"class":105},[95,59640,55251],{"class":210},[95,59642,51284],{"class":105},[95,59644,59645,59647,59649,59652,59654],{"class":97,"line":32636},[95,59646,55211],{"class":105},[95,59648,10],{"class":51277},[95,59650,59651],{"class":105},">对人类来说会不会太超前了？\u003C\u002F",[95,59653,10],{"class":51277},[95,59655,51284],{"class":105},[95,59657,59658,59660,59662,59664,59666,59669],{"class":97,"line":32642},[95,59659,55211],{"class":105},[95,59661,1113],{"class":51277},[95,59663,53463],{"class":1945},[95,59665,151],{"class":105},[95,59667,59668],{"class":210},"\"slider-indicator\"",[95,59670,51284],{"class":105},[95,59672,59673,59675,59677,59679,59681,59684,59686,59688],{"class":97,"line":32653},[95,59674,55279],{"class":105},[95,59676,52],{"class":51277},[95,59678,53463],{"class":1945},[95,59680,151],{"class":105},[95,59682,59683],{"class":210},"\"active\"",[95,59685,55291],{"class":105},[95,59687,52],{"class":51277},[95,59689,51284],{"class":105},[95,59691,59692,59694,59696,59698,59700],{"class":97,"line":32659},[95,59693,55279],{"class":105},[95,59695,52],{"class":51277},[95,59697,55291],{"class":105},[95,59699,52],{"class":51277},[95,59701,51284],{"class":105},[95,59703,59704,59706,59708,59710,59712],{"class":97,"line":32679},[95,59705,55279],{"class":105},[95,59707,52],{"class":51277},[95,59709,55291],{"class":105},[95,59711,52],{"class":51277},[95,59713,51284],{"class":105},[95,59715,59716,59718,59720,59722,59724],{"class":97,"line":32685},[95,59717,55279],{"class":105},[95,59719,52],{"class":51277},[95,59721,55291],{"class":105},[95,59723,52],{"class":51277},[95,59725,51284],{"class":105},[95,59727,59728,59730,59732,59734,59736],{"class":97,"line":32696},[95,59729,55279],{"class":105},[95,59731,52],{"class":51277},[95,59733,55291],{"class":105},[95,59735,52],{"class":51277},[95,59737,51284],{"class":105},[95,59739,59740,59742,59744,59746,59748],{"class":97,"line":32702},[95,59741,55279],{"class":105},[95,59743,52],{"class":51277},[95,59745,55291],{"class":105},[95,59747,52],{"class":51277},[95,59749,51284],{"class":105},[95,59751,59752,59754,59756,59758,59760],{"class":97,"line":32708},[95,59753,55279],{"class":105},[95,59755,52],{"class":51277},[95,59757,55291],{"class":105},[95,59759,52],{"class":51277},[95,59761,51284],{"class":105},[95,59763,59764,59766,59768,59770,59772],{"class":97,"line":32714},[95,59765,55279],{"class":105},[95,59767,52],{"class":51277},[95,59769,55291],{"class":105},[95,59771,52],{"class":51277},[95,59773,51284],{"class":105},[95,59775,59776,59778,59780],{"class":97,"line":32720},[95,59777,55384],{"class":105},[95,59779,1113],{"class":51277},[95,59781,51284],{"class":105},[95,59783,59784,59786,59788,59790,59792,59795],{"class":97,"line":32726},[95,59785,55211],{"class":105},[95,59787,51588],{"class":51277},[95,59789,53463],{"class":1945},[95,59791,151],{"class":105},[95,59793,59794],{"class":210},"\"toggle\"",[95,59796,51284],{"class":105},[95,59798,59799,59801,59803,59805,59807,59810,59812,59815,59817,59819],{"class":97,"line":32732},[95,59800,55279],{"class":105},[95,59802,53864],{"class":51277},[95,59804,53463],{"class":1945},[95,59806,151],{"class":105},[95,59808,59809],{"class":210},"\"prev\"",[95,59811,1066],{"class":105},[95,59813,59814],{"class":154},"&lt;",[95,59816,51762],{"class":105},[95,59818,53864],{"class":51277},[95,59820,51284],{"class":105},[95,59822,59823,59825,59827,59829,59831,59834,59836,59839,59841,59843],{"class":97,"line":32738},[95,59824,55279],{"class":105},[95,59826,53864],{"class":51277},[95,59828,53463],{"class":1945},[95,59830,151],{"class":105},[95,59832,59833],{"class":210},"\"next\"",[95,59835,1066],{"class":105},[95,59837,59838],{"class":154},"&gt;",[95,59840,51762],{"class":105},[95,59842,53864],{"class":51277},[95,59844,51284],{"class":105},[95,59846,59847,59849,59851],{"class":97,"line":32758},[95,59848,55384],{"class":105},[95,59850,51588],{"class":51277},[95,59852,51284],{"class":105},[95,59854,59855,59857,59859],{"class":97,"line":32764},[95,59856,51753],{"class":105},[95,59858,51588],{"class":51277},[95,59860,51284],{"class":105},[95,59862,59863,59865,59867],{"class":97,"line":32780},[95,59864,52394],{"class":105},[95,59866,51588],{"class":51277},[95,59868,51284],{"class":105},[95,59870,59871,59873,59875],{"class":97,"line":32786},[95,59872,52121],{"class":105},[95,59874,51790],{"class":51277},[95,59876,51284],{"class":105},[95,59878,59879],{"class":97,"line":32800},[95,59880,59881],{"class":105},"    \u002F\u002F 1. 初始数据\n",[95,59883,59884],{"class":97,"line":32806},[95,59885,59886],{"class":105},"    const data = [\n",[95,59888,59889],{"class":97,"line":32821},[95,59890,59891],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[95,59893,59894],{"class":97,"line":32827},[95,59895,59896],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[95,59898,59899],{"class":97,"line":32836},[95,59900,59901],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[95,59903,59904],{"class":97,"line":32842},[95,59905,59906],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[95,59908,59909],{"class":97,"line":32851},[95,59910,59911],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[95,59913,59914],{"class":97,"line":32857},[95,59915,59916],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[95,59918,59919],{"class":97,"line":32863},[95,59920,59921],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[95,59923,59924],{"class":97,"line":32872},[95,59925,59926],{"class":105},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[95,59928,59929],{"class":97,"line":32878},[95,59930,53086],{"class":105},[95,59932,59933],{"class":97,"line":32889},[95,59934,59935],{"class":105},"    \u002F\u002F 获取元素\n",[95,59937,59938],{"class":97,"line":32895},[95,59939,59940],{"class":105},"    const img = document.querySelector('.slider-wrapper img')\n",[95,59942,59943],{"class":97,"line":32914},[95,59944,59945],{"class":105},"    const p = document.querySelector('.slider-footer p')\n",[95,59947,59948],{"class":97,"line":32920},[95,59949,59950],{"class":105},"    const footer = document.querySelector('.slider-footer')\n",[95,59952,59953],{"class":97,"line":32931},[95,59954,59955],{"class":105},"    \u002F\u002F 1. 右按钮业务\n",[95,59957,59958],{"class":97,"line":32937},[95,59959,59960],{"class":105},"    \u002F\u002F 1.1 获取右侧按钮 \n",[95,59962,59963],{"class":97,"line":32957},[95,59964,59965],{"class":105},"    const next = document.querySelector('.next')\n",[95,59967,59968],{"class":97,"line":32973},[95,59969,59970],{"class":105},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[95,59972,59973],{"class":97,"line":32979},[95,59974,59975],{"class":105},"    \u002F\u002F 1.2 注册点击事件\n",[95,59977,59978],{"class":97,"line":32993},[95,59979,2382],{"emptyLinePlaceholder":21},[95,59981,59982],{"class":97,"line":32999},[95,59983,59984],{"class":105},"    next.addEventListener('click', function () {\n",[95,59986,59987],{"class":97,"line":33005},[95,59988,59989],{"class":105},"      \u002F\u002F console.log(11)\n",[95,59991,59992],{"class":97,"line":33016},[95,59993,59994],{"class":105},"      i++\n",[95,59996,59997],{"class":97,"line":33022},[95,59998,59999],{"class":105},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[95,60001,60002],{"class":97,"line":33028},[95,60003,60004],{"class":105},"      \u002F\u002F if (i >= 8) {\n",[95,60006,60007],{"class":97,"line":33038},[95,60008,60009],{"class":105},"      \u002F\u002F   i = 0\n",[95,60011,60012],{"class":97,"line":33044},[95,60013,60014],{"class":105},"      \u002F\u002F }\n",[95,60016,60017],{"class":97,"line":33055},[95,60018,60019],{"class":105},"      i = i >= data.length ? 0 : i\n",[95,60021,60022],{"class":97,"line":33061},[95,60023,60024],{"class":105},"      \u002F\u002F 1.3 得到对应的对象\n",[95,60026,60027],{"class":97,"line":33071},[95,60028,60029],{"class":105},"      \u002F\u002F console.log(data[i])\n",[95,60031,60032],{"class":97,"line":33076},[95,60033,60034],{"class":105},"      \u002F\u002F 调用函数\n",[95,60036,60037],{"class":97,"line":33082},[95,60038,60039],{"class":105},"      toggle()\n",[95,60041,60042],{"class":97,"line":33131},[95,60043,33446],{"class":105},[95,60045,60046],{"class":97,"line":33178},[95,60047,2382],{"emptyLinePlaceholder":21},[95,60049,60050],{"class":97,"line":33183},[95,60051,60052],{"class":105},"    \u002F\u002F 2. 左侧按钮业务\n",[95,60054,60055],{"class":97,"line":33189},[95,60056,60057],{"class":105},"    \u002F\u002F 2.1 获取左侧按钮 \n",[95,60059,60060],{"class":97,"line":33208},[95,60061,60062],{"class":105},"    const prev = document.querySelector('.prev')\n",[95,60064,60065],{"class":97,"line":33214},[95,60066,59975],{"class":105},[95,60068,60069],{"class":97,"line":33234},[95,60070,60071],{"class":105},"    prev.addEventListener('click', function () {\n",[95,60073,60074],{"class":97,"line":33240},[95,60075,60076],{"class":105},"      i--\n",[95,60078,60079],{"class":97,"line":33246},[95,60080,60081],{"class":105},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[95,60083,60084],{"class":97,"line":33256},[95,60085,60086],{"class":105},"      \u002F\u002F if (i \u003C 0) {\n",[95,60088,60089],{"class":97,"line":33261},[95,60090,60091],{"class":105},"      \u002F\u002F   i = 7\n",[95,60093,60094],{"class":97,"line":33267},[95,60095,60014],{"class":105},[95,60097,60098],{"class":97,"line":33283},[95,60099,60100],{"class":105},"      i = i \u003C 0 ? data.length - 1 : i\n",[95,60102,60103],{"class":97,"line":33328},[95,60104,60024],{"class":105},[95,60106,60107],{"class":97,"line":33334},[95,60108,60029],{"class":105},[95,60110,60111],{"class":97,"line":33340},[95,60112,60034],{"class":105},[95,60114,60115],{"class":97,"line":33346},[95,60116,60039],{"class":105},[95,60118,60119],{"class":97,"line":33357},[95,60120,33446],{"class":105},[95,60122,60123],{"class":97,"line":33363},[95,60124,2382],{"emptyLinePlaceholder":21},[95,60126,60127],{"class":97,"line":33369},[95,60128,60129],{"class":105},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[95,60131,60132],{"class":97,"line":33375},[95,60133,60134],{"class":105},"    function toggle() {\n",[95,60136,60137],{"class":97,"line":33393},[95,60138,60139],{"class":105},"      \u002F\u002F 1.4 渲染对应的数据\n",[95,60141,60142],{"class":97,"line":33407},[95,60143,60144],{"class":105},"      img.src = data[i].url\n",[95,60146,60147],{"class":97,"line":33416},[95,60148,60149],{"class":105},"      p.innerHTML = data[i].title\n",[95,60151,60152],{"class":97,"line":33425},[95,60153,60154],{"class":105},"      footer.style.backgroundColor = data[i].color\n",[95,60156,60157],{"class":97,"line":33434},[95,60158,60159],{"class":105},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[95,60161,60162],{"class":97,"line":33443},[95,60163,60164],{"class":105},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[95,60166,60167],{"class":97,"line":33449},[95,60168,60169],{"class":105},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[95,60171,60172],{"class":97,"line":33455},[95,60173,2169],{"class":105},[95,60175,60176],{"class":97,"line":33463},[95,60177,2382],{"emptyLinePlaceholder":21},[95,60179,60180],{"class":97,"line":33468},[95,60181,60182],{"class":105},"    \u002F\u002F 3. 自动播放模块\n",[95,60184,60185],{"class":97,"line":33474},[95,60186,60187],{"class":105},"    let timerId = setInterval(function () {\n",[95,60189,60190],{"class":97,"line":33485},[95,60191,60192],{"class":105},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[95,60194,60195],{"class":97,"line":33491},[95,60196,60197],{"class":105},"      next.click()\n",[95,60199,60200],{"class":97,"line":33511},[95,60201,60202],{"class":105},"    }, 1000)\n",[95,60204,60205],{"class":97,"line":33517},[95,60206,2382],{"emptyLinePlaceholder":21},[95,60208,60209],{"class":97,"line":33523},[95,60210,60211],{"class":105},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[95,60213,60214],{"class":97,"line":33529},[95,60215,60216],{"class":105},"    const slider = document.querySelector('.slider')\n",[95,60218,60219],{"class":97,"line":33546},[95,60220,60221],{"class":105},"    \u002F\u002F 注册事件\n",[95,60223,60224],{"class":97,"line":33552},[95,60225,60226],{"class":105},"    slider.addEventListener('mouseenter', function () {\n",[95,60228,60229],{"class":97,"line":33558},[95,60230,60231],{"class":105},"      \u002F\u002F 停止定时器\n",[95,60233,60234],{"class":97,"line":33564},[95,60235,60236],{"class":105},"      clearInterval(timerId)\n",[95,60238,60239],{"class":97,"line":33570},[95,60240,33446],{"class":105},[95,60242,60243],{"class":97,"line":33576},[95,60244,2382],{"emptyLinePlaceholder":21},[95,60246,60247],{"class":97,"line":33603},[95,60248,60249],{"class":105},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[95,60251,60252],{"class":97,"line":33627},[95,60253,60221],{"class":105},[95,60255,60256],{"class":97,"line":33633},[95,60257,60258],{"class":105},"    slider.addEventListener('mouseleave', function () {\n",[95,60260,60261],{"class":97,"line":33639},[95,60262,60231],{"class":105},[95,60264,60265],{"class":97,"line":33645},[95,60266,60267],{"class":105},"      if (timerId) clearInterval(timerId)\n",[95,60269,60270],{"class":97,"line":33656},[95,60271,60272],{"class":105},"      \u002F\u002F 开启定时器\n",[95,60274,60275],{"class":97,"line":33667},[95,60276,60277],{"class":105},"      timerId = setInterval(function () {\n",[95,60279,60280],{"class":97,"line":33673},[95,60281,60282],{"class":105},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[95,60284,60285],{"class":97,"line":33690},[95,60286,60287],{"class":105},"        next.click()\n",[95,60289,60290],{"class":97,"line":33713},[95,60291,60292],{"class":105},"      }, 1000)\n",[95,60294,60295],{"class":97,"line":33736},[95,60296,33446],{"class":105},[95,60298,60299,60301,60303],{"class":97,"line":33742},[95,60300,52394],{"class":105},[95,60302,51790],{"class":51277},[95,60304,51284],{"class":105},[95,60306,60307,60309,60311],{"class":97,"line":33747},[95,60308,51762],{"class":105},[95,60310,51777],{"class":51277},[95,60312,51284],{"class":105},[95,60314,60315],{"class":97,"line":33756},[95,60316,2382],{"emptyLinePlaceholder":21},[95,60318,60319,60321,60323],{"class":97,"line":33766},[95,60320,51762],{"class":105},[95,60322,50612],{"class":51277},[95,60324,51284],{"class":105},[21981,60326,60328],{"id":60327},"_3252-焦点事件","3.2.5.2 焦点事件",[10,60330,60331],{},"小米搜索框案例：",[86,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",[92,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},[95,60338,60339,60341,60343,60345],{"class":97,"line":98},[95,60340,51274],{"class":105},[95,60342,51278],{"class":51277},[95,60344,51281],{"class":1945},[95,60346,51284],{"class":105},[95,60348,60349,60351,60353,60355,60357,60359],{"class":97,"line":15},[95,60350,1016],{"class":105},[95,60352,50612],{"class":51277},[95,60354,51293],{"class":1945},[95,60356,151],{"class":105},[95,60358,51298],{"class":210},[95,60360,51284],{"class":105},[95,60362,60363],{"class":97,"line":1161},[95,60364,2382],{"emptyLinePlaceholder":21},[95,60366,60367,60369,60371],{"class":97,"line":1176},[95,60368,1016],{"class":105},[95,60370,51311],{"class":51277},[95,60372,51284],{"class":105},[95,60374,60375,60377,60379,60381,60383,60385],{"class":97,"line":1182},[95,60376,51318],{"class":105},[95,60378,51321],{"class":51277},[95,60380,51324],{"class":1945},[95,60382,151],{"class":105},[95,60384,51329],{"class":210},[95,60386,51284],{"class":105},[95,60388,60389,60391,60393,60395,60397,60399,60401,60403,60405],{"class":97,"line":1196},[95,60390,51318],{"class":105},[95,60392,51321],{"class":51277},[95,60394,51340],{"class":1945},[95,60396,151],{"class":105},[95,60398,51345],{"class":210},[95,60400,51348],{"class":1945},[95,60402,151],{"class":105},[95,60404,51353],{"class":210},[95,60406,51284],{"class":105},[95,60408,60409,60411,60413,60415,60417,60419,60421,60423,60425],{"class":97,"line":1202},[95,60410,51318],{"class":105},[95,60412,51321],{"class":51277},[95,60414,14903],{"class":1945},[95,60416,151],{"class":105},[95,60418,51368],{"class":210},[95,60420,51348],{"class":1945},[95,60422,151],{"class":105},[95,60424,51375],{"class":210},[95,60426,51284],{"class":105},[95,60428,60429,60431,60433,60435,60437],{"class":97,"line":1293},[95,60430,51318],{"class":105},[95,60432,51384],{"class":51277},[95,60434,51387],{"class":105},[95,60436,51384],{"class":51277},[95,60438,51284],{"class":105},[95,60440,60441,60443,60445],{"class":97,"line":1299},[95,60442,51318],{"class":105},[95,60444,5109],{"class":51277},[95,60446,51284],{"class":105},[95,60448,60449,60451],{"class":97,"line":1311},[95,60450,51404],{"class":51277},[95,60452,15555],{"class":105},[95,60454,60455,60457,60459,60461],{"class":97,"line":1594},[95,60456,51411],{"class":154},[95,60458,51414],{"class":105},[95,60460,297],{"class":154},[95,60462,1272],{"class":105},[95,60464,60465,60467,60469,60471],{"class":97,"line":1599},[95,60466,51423],{"class":154},[95,60468,51414],{"class":105},[95,60470,297],{"class":154},[95,60472,1272],{"class":105},[95,60474,60475,60478,60480,60483],{"class":97,"line":1605},[95,60476,60477],{"class":154},"            box-sizing",[95,60479,51414],{"class":105},[95,60481,60482],{"class":154},"border-box",[95,60484,1272],{"class":105},[95,60486,60487],{"class":97,"line":1610},[95,60488,2511],{"class":105},[95,60490,60491],{"class":97,"line":1624},[95,60492,2382],{"emptyLinePlaceholder":21},[95,60494,60495,60498],{"class":97,"line":1629},[95,60496,60497],{"class":51277},"        ul",[95,60499,15555],{"class":105},[95,60501,60502],{"class":97,"line":1635},[95,60503,2382],{"emptyLinePlaceholder":21},[95,60505,60506,60509,60511,60513],{"class":97,"line":1656},[95,60507,60508],{"class":154},"            list-style",[95,60510,51414],{"class":105},[95,60512,54714],{"class":154},[95,60514,1272],{"class":105},[95,60516,60517],{"class":97,"line":1661},[95,60518,2511],{"class":105},[95,60520,60521],{"class":97,"line":1675},[95,60522,2382],{"emptyLinePlaceholder":21},[95,60524,60525,60528],{"class":97,"line":1680},[95,60526,60527],{"class":1945},"        .mi",[95,60529,15555],{"class":105},[95,60531,60532,60535,60537,60539],{"class":97,"line":1709},[95,60533,60534],{"class":154},"            position",[95,60536,51414],{"class":105},[95,60538,54741],{"class":154},[95,60540,1272],{"class":105},[95,60542,60543,60545,60547,60550,60552],{"class":97,"line":1714},[95,60544,51461],{"class":154},[95,60546,51414],{"class":105},[95,60548,60549],{"class":154},"223",[95,60551,51469],{"class":101},[95,60553,1272],{"class":105},[95,60555,60556,60558,60560,60562,60564,60566],{"class":97,"line":1731},[95,60557,51411],{"class":154},[95,60559,51414],{"class":105},[95,60561,417],{"class":154},[95,60563,51469],{"class":101},[95,60565,51533],{"class":154},[95,60567,1272],{"class":105},[95,60569,60570],{"class":97,"line":1736},[95,60571,2511],{"class":105},[95,60573,60574],{"class":97,"line":1741},[95,60575,2382],{"emptyLinePlaceholder":21},[95,60577,60578,60580,60583],{"class":97,"line":1746},[95,60579,60527],{"class":1945},[95,60581,60582],{"class":51277}," input",[95,60584,15555],{"class":105},[95,60586,60587,60589,60591,60593,60595],{"class":97,"line":1760},[95,60588,51461],{"class":154},[95,60590,51414],{"class":105},[95,60592,60549],{"class":154},[95,60594,51469],{"class":101},[95,60596,1272],{"class":105},[95,60598,60599,60601,60603,60605,60607],{"class":97,"line":1765},[95,60600,51476],{"class":154},[95,60602,51414],{"class":105},[95,60604,713],{"class":154},[95,60606,51469],{"class":101},[95,60608,1272],{"class":105},[95,60610,60611,60613,60615,60617,60619,60621],{"class":97,"line":2559},[95,60612,51423],{"class":154},[95,60614,51414],{"class":105},[95,60616,297],{"class":154},[95,60618,2020],{"class":154},[95,60620,51469],{"class":101},[95,60622,1272],{"class":105},[95,60624,60625,60628,60630,60632,60634],{"class":97,"line":2573},[95,60626,60627],{"class":154},"            font-size",[95,60629,51414],{"class":105},[95,60631,655],{"class":154},[95,60633,51469],{"class":101},[95,60635,1272],{"class":105},[95,60637,60638,60641,60643,60645,60647],{"class":97,"line":2581},[95,60639,60640],{"class":154},"            line-height",[95,60642,51414],{"class":105},[95,60644,713],{"class":154},[95,60646,51469],{"class":101},[95,60648,1272],{"class":105},[95,60650,60651,60654,60656,60658,60660,60662,60665],{"class":97,"line":2586},[95,60652,60653],{"class":154},"            border",[95,60655,51414],{"class":105},[95,60657,323],{"class":154},[95,60659,51469],{"class":101},[95,60661,51498],{"class":154},[95,60663,60664],{"class":154}," #e0e0e0",[95,60666,1272],{"class":105},[95,60668,60669,60672,60674,60676],{"class":97,"line":2592},[95,60670,60671],{"class":154},"            outline",[95,60673,51414],{"class":105},[95,60675,54714],{"class":154},[95,60677,1272],{"class":105},[95,60679,60680],{"class":97,"line":2598},[95,60681,2511],{"class":105},[95,60683,60684],{"class":97,"line":2603},[95,60685,2382],{"emptyLinePlaceholder":21},[95,60687,60688,60690,60693],{"class":97,"line":7931},[95,60689,60527],{"class":1945},[95,60691,60692],{"class":1945}," .search",[95,60694,15555],{"class":105},[95,60696,60697,60699,60701,60703,60705,60707,60710],{"class":97,"line":7955},[95,60698,60653],{"class":154},[95,60700,51414],{"class":105},[95,60702,323],{"class":154},[95,60704,51469],{"class":101},[95,60706,51498],{"class":154},[95,60708,60709],{"class":154}," #ff6700",[95,60711,1272],{"class":105},[95,60713,60714],{"class":97,"line":7960},[95,60715,2511],{"class":105},[95,60717,60718],{"class":97,"line":7966},[95,60719,2382],{"emptyLinePlaceholder":21},[95,60721,60722,60725],{"class":97,"line":7993},[95,60723,60724],{"class":1945},"        .result-list",[95,60726,15555],{"class":105},[95,60728,60729,60731,60733,60735],{"class":97,"line":7998},[95,60730,51449],{"class":154},[95,60732,51414],{"class":105},[95,60734,54714],{"class":154},[95,60736,1272],{"class":105},[95,60738,60739,60741,60743,60745],{"class":97,"line":8004},[95,60740,60534],{"class":154},[95,60742,51414],{"class":105},[95,60744,54808],{"class":154},[95,60746,1272],{"class":105},[95,60748,60749,60752,60754,60756],{"class":97,"line":8016},[95,60750,60751],{"class":154},"            left",[95,60753,51414],{"class":105},[95,60755,297],{"class":154},[95,60757,1272],{"class":105},[95,60759,60760,60763,60765,60767,60769],{"class":97,"line":8028},[95,60761,60762],{"class":154},"            top",[95,60764,51414],{"class":105},[95,60766,713],{"class":154},[95,60768,51469],{"class":101},[95,60770,1272],{"class":105},[95,60772,60773,60775,60777,60779,60781],{"class":97,"line":8040},[95,60774,51461],{"class":154},[95,60776,51414],{"class":105},[95,60778,60549],{"class":154},[95,60780,51469],{"class":101},[95,60782,1272],{"class":105},[95,60784,60785,60787,60789,60791,60793,60795,60797],{"class":97,"line":9699},[95,60786,60653],{"class":154},[95,60788,51414],{"class":105},[95,60790,323],{"class":154},[95,60792,51469],{"class":101},[95,60794,51498],{"class":154},[95,60796,60709],{"class":154},[95,60798,1272],{"class":105},[95,60800,60801,60804,60806,60808],{"class":97,"line":9724},[95,60802,60803],{"class":154},"            border-top",[95,60805,51414],{"class":105},[95,60807,297],{"class":154},[95,60809,1272],{"class":105},[95,60811,60812,60815,60817,60820],{"class":97,"line":9747},[95,60813,60814],{"class":154},"            background",[95,60816,51414],{"class":105},[95,60818,60819],{"class":154},"#fff",[95,60821,1272],{"class":105},[95,60823,60824],{"class":97,"line":9771},[95,60825,2511],{"class":105},[95,60827,60828],{"class":97,"line":9776},[95,60829,2382],{"emptyLinePlaceholder":21},[95,60831,60832,60834,60836],{"class":97,"line":9781},[95,60833,60724],{"class":1945},[95,60835,1380],{"class":51277},[95,60837,15555],{"class":105},[95,60839,60840,60842,60844,60847],{"class":97,"line":9786},[95,60841,51449],{"class":154},[95,60843,51414],{"class":105},[95,60845,60846],{"class":154},"block",[95,60848,1272],{"class":105},[95,60850,60851,60853,60855,60857,60859,60862,60864],{"class":97,"line":9795},[95,60852,51423],{"class":154},[95,60854,51414],{"class":105},[95,60856,450],{"class":154},[95,60858,51469],{"class":101},[95,60860,60861],{"class":154}," 15",[95,60863,51469],{"class":101},[95,60865,1272],{"class":105},[95,60867,60868,60870,60872,60874,60876],{"class":97,"line":9800},[95,60869,60627],{"class":154},[95,60871,51414],{"class":105},[95,60873,604],{"class":154},[95,60875,51469],{"class":101},[95,60877,1272],{"class":105},[95,60879,60880,60883,60885,60888],{"class":97,"line":9806},[95,60881,60882],{"class":154},"            color",[95,60884,51414],{"class":105},[95,60886,60887],{"class":154},"#424242",[95,60889,1272],{"class":105},[95,60891,60892,60895,60897,60899],{"class":97,"line":9827},[95,60893,60894],{"class":154},"            text-decoration",[95,60896,51414],{"class":105},[95,60898,54714],{"class":154},[95,60900,1272],{"class":105},[95,60902,60903],{"class":97,"line":9833},[95,60904,2511],{"class":105},[95,60906,60907],{"class":97,"line":9847},[95,60908,2382],{"emptyLinePlaceholder":21},[95,60910,60911,60913,60915,60918],{"class":97,"line":9853},[95,60912,60724],{"class":1945},[95,60914,1380],{"class":51277},[95,60916,60917],{"class":1945},":hover",[95,60919,15555],{"class":105},[95,60921,60922,60924,60926,60929],{"class":97,"line":9880},[95,60923,51617],{"class":154},[95,60925,51414],{"class":105},[95,60927,60928],{"class":154},"#eee",[95,60930,1272],{"class":105},[95,60932,60933],{"class":97,"line":9889},[95,60934,2511],{"class":105},[95,60936,60937,60939,60941],{"class":97,"line":9895},[95,60938,51753],{"class":105},[95,60940,5109],{"class":51277},[95,60942,51284],{"class":105},[95,60944,60945],{"class":97,"line":9903},[95,60946,2382],{"emptyLinePlaceholder":21},[95,60948,60949,60951,60953],{"class":97,"line":9908},[95,60950,51762],{"class":105},[95,60952,51311],{"class":51277},[95,60954,51284],{"class":105},[95,60956,60957],{"class":97,"line":16587},[95,60958,2382],{"emptyLinePlaceholder":21},[95,60960,60961,60963,60965],{"class":97,"line":16593},[95,60962,1016],{"class":105},[95,60964,51777],{"class":51277},[95,60966,51284],{"class":105},[95,60968,60969,60971,60973,60975,60977,60980],{"class":97,"line":16616},[95,60970,51318],{"class":105},[95,60972,51588],{"class":51277},[95,60974,53463],{"class":1945},[95,60976,151],{"class":105},[95,60978,60979],{"class":210},"\"mi\"",[95,60981,51284],{"class":105},[95,60983,60984,60986,60988,60990,60992,60995,60998,61000,61003],{"class":97,"line":16622},[95,60985,55279],{"class":105},[95,60987,53798],{"class":51277},[95,60989,53801],{"class":1945},[95,60991,151],{"class":105},[95,60993,60994],{"class":210},"\"search\"",[95,60996,60997],{"class":1945}," placeholder",[95,60999,151],{"class":105},[95,61001,61002],{"class":210},"\"小米笔记本\"",[95,61004,51284],{"class":105},[95,61006,61007,61009,61011,61013,61015,61018],{"class":97,"line":16645},[95,61008,55279],{"class":105},[95,61010,1113],{"class":51277},[95,61012,53463],{"class":1945},[95,61014,151],{"class":105},[95,61016,61017],{"class":210},"\"result-list\"",[95,61019,51284],{"class":105},[95,61021,61022,61025,61027,61030,61032,61035,61037,61040,61043,61045,61047,61049],{"class":97,"line":16659},[95,61023,61024],{"class":105},"            \u003C",[95,61026,52],{"class":51277},[95,61028,61029],{"class":105},">\u003C",[95,61031,344],{"class":51277},[95,61033,61034],{"class":1945}," href",[95,61036,151],{"class":105},[95,61038,61039],{"class":210},"\"#\"",[95,61041,61042],{"class":105},">全部商品\u003C\u002F",[95,61044,344],{"class":51277},[95,61046,55291],{"class":105},[95,61048,52],{"class":51277},[95,61050,51284],{"class":105},[95,61052,61053,61055,61057,61059,61061,61063,61065,61067,61070,61072,61074,61076],{"class":97,"line":16679},[95,61054,61024],{"class":105},[95,61056,52],{"class":51277},[95,61058,61029],{"class":105},[95,61060,344],{"class":51277},[95,61062,61034],{"class":1945},[95,61064,151],{"class":105},[95,61066,61039],{"class":210},[95,61068,61069],{"class":105},">小米11\u003C\u002F",[95,61071,344],{"class":51277},[95,61073,55291],{"class":105},[95,61075,52],{"class":51277},[95,61077,51284],{"class":105},[95,61079,61080,61082,61084,61086,61088,61090,61092,61094,61097,61099,61101,61103],{"class":97,"line":16685},[95,61081,61024],{"class":105},[95,61083,52],{"class":51277},[95,61085,61029],{"class":105},[95,61087,344],{"class":51277},[95,61089,61034],{"class":1945},[95,61091,151],{"class":105},[95,61093,61039],{"class":210},[95,61095,61096],{"class":105},">小米10S\u003C\u002F",[95,61098,344],{"class":51277},[95,61100,55291],{"class":105},[95,61102,52],{"class":51277},[95,61104,51284],{"class":105},[95,61106,61107,61109,61111,61113,61115,61117,61119,61121,61124,61126,61128,61130],{"class":97,"line":16696},[95,61108,61024],{"class":105},[95,61110,52],{"class":51277},[95,61112,61029],{"class":105},[95,61114,344],{"class":51277},[95,61116,61034],{"class":1945},[95,61118,151],{"class":105},[95,61120,61039],{"class":210},[95,61122,61123],{"class":105},">小米笔记本\u003C\u002F",[95,61125,344],{"class":51277},[95,61127,55291],{"class":105},[95,61129,52],{"class":51277},[95,61131,51284],{"class":105},[95,61133,61134,61136,61138,61140,61142,61144,61146,61148,61151,61153,61155,61157],{"class":97,"line":16719},[95,61135,61024],{"class":105},[95,61137,52],{"class":51277},[95,61139,61029],{"class":105},[95,61141,344],{"class":51277},[95,61143,61034],{"class":1945},[95,61145,151],{"class":105},[95,61147,61039],{"class":210},[95,61149,61150],{"class":105},">小米手机\u003C\u002F",[95,61152,344],{"class":51277},[95,61154,55291],{"class":105},[95,61156,52],{"class":51277},[95,61158,51284],{"class":105},[95,61160,61161,61163,61165,61167,61169,61171,61173,61175,61178,61180,61182,61184],{"class":97,"line":16741},[95,61162,61024],{"class":105},[95,61164,52],{"class":51277},[95,61166,61029],{"class":105},[95,61168,344],{"class":51277},[95,61170,61034],{"class":1945},[95,61172,151],{"class":105},[95,61174,61039],{"class":210},[95,61176,61177],{"class":105},">黑鲨4\u003C\u002F",[95,61179,344],{"class":51277},[95,61181,55291],{"class":105},[95,61183,52],{"class":51277},[95,61185,51284],{"class":105},[95,61187,61188,61190,61192,61194,61196,61198,61200,61202,61205,61207,61209,61211],{"class":97,"line":16746},[95,61189,61024],{"class":105},[95,61191,52],{"class":51277},[95,61193,61029],{"class":105},[95,61195,344],{"class":51277},[95,61197,61034],{"class":1945},[95,61199,151],{"class":105},[95,61201,61039],{"class":210},[95,61203,61204],{"class":105},">空调\u003C\u002F",[95,61206,344],{"class":51277},[95,61208,55291],{"class":105},[95,61210,52],{"class":51277},[95,61212,51284],{"class":105},[95,61214,61215,61218,61220],{"class":97,"line":16752},[95,61216,61217],{"class":105},"        \u003C\u002F",[95,61219,1113],{"class":51277},[95,61221,51284],{"class":105},[95,61223,61224,61226,61228],{"class":97,"line":16766},[95,61225,51753],{"class":105},[95,61227,51588],{"class":51277},[95,61229,51284],{"class":105},[95,61231,61232,61234,61236],{"class":97,"line":16779},[95,61233,51318],{"class":105},[95,61235,51790],{"class":51277},[95,61237,51284],{"class":105},[95,61239,61240],{"class":97,"line":16784},[95,61241,61242],{"class":164},"        \u002F\u002F 1. 获取元素\n",[95,61244,61245,61248,61250,61252,61254,61256,61258,61261],{"class":97,"line":16798},[95,61246,61247],{"class":101},"        const",[95,61249,60582],{"class":154},[95,61251,13547],{"class":101},[95,61253,54373],{"class":105},[95,61255,54376],{"class":1945},[95,61257,106],{"class":105},[95,61259,61260],{"class":210},"'[type=search]'",[95,61262,112],{"class":105},[95,61264,61265,61267,61270,61272,61274,61276,61278,61281],{"class":97,"line":16803},[95,61266,61247],{"class":101},[95,61268,61269],{"class":154}," ul",[95,61271,13547],{"class":101},[95,61273,54373],{"class":105},[95,61275,54376],{"class":1945},[95,61277,106],{"class":105},[95,61279,61280],{"class":210},"'.result-list'",[95,61282,112],{"class":105},[95,61284,61285],{"class":97,"line":16809},[95,61286,61287],{"class":164},"        \u002F\u002F console.log(input)\n",[95,61289,61290],{"class":97,"line":16814},[95,61291,61292],{"class":164},"        \u002F\u002F 2. 监听事件 获得焦点\n",[95,61294,61295,61298,61300,61302,61305,61307,61309],{"class":97,"line":16828},[95,61296,61297],{"class":105},"        input.",[95,61299,57790],{"class":1945},[95,61301,106],{"class":105},[95,61303,61304],{"class":210},"'focus'",[95,61306,12418],{"class":105},[95,61308,54426],{"class":101},[95,61310,54429],{"class":105},[95,61312,61313],{"class":97,"line":16833},[95,61314,61315],{"class":164},"            \u002F\u002F ul显示\n",[95,61317,61318,61321,61323],{"class":97,"line":16838},[95,61319,61320],{"class":105},"            ul.style.display ",[95,61322,151],{"class":101},[95,61324,61325],{"class":210}," 'block'\n",[95,61327,61328],{"class":97,"line":16852},[95,61329,61330],{"class":164},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[95,61332,61333,61336,61338,61340,61343],{"class":97,"line":16864},[95,61334,61335],{"class":105},"            input.classList.",[95,61337,5317],{"class":1945},[95,61339,106],{"class":105},[95,61341,61342],{"class":210},"'search'",[95,61344,112],{"class":105},[95,61346,61347],{"class":97,"line":16869},[95,61348,61349],{"class":105},"        })\n",[95,61351,61352],{"class":97,"line":16882},[95,61353,61354],{"class":164},"        \u002F\u002F 3. 监听事件 失去焦点\n",[95,61356,61357,61359,61361,61363,61366,61368,61370],{"class":97,"line":16887},[95,61358,61297],{"class":105},[95,61360,57790],{"class":1945},[95,61362,106],{"class":105},[95,61364,61365],{"class":210},"'blur'",[95,61367,12418],{"class":105},[95,61369,54426],{"class":101},[95,61371,54429],{"class":105},[95,61373,61374,61376,61378],{"class":97,"line":16892},[95,61375,61320],{"class":105},[95,61377,151],{"class":101},[95,61379,61380],{"class":210}," 'none'\n",[95,61382,61383,61385,61387,61389,61391],{"class":97,"line":16897},[95,61384,61335],{"class":105},[95,61386,56983],{"class":1945},[95,61388,106],{"class":105},[95,61390,61342],{"class":210},[95,61392,112],{"class":105},[95,61394,61395],{"class":97,"line":16910},[95,61396,61349],{"class":105},[95,61398,61399,61401,61403],{"class":97,"line":16915},[95,61400,51753],{"class":105},[95,61402,51790],{"class":51277},[95,61404,51284],{"class":105},[95,61406,61407,61409,61411],{"class":97,"line":32618},[95,61408,51762],{"class":105},[95,61410,51777],{"class":51277},[95,61412,51284],{"class":105},[95,61414,61415],{"class":97,"line":32624},[95,61416,2382],{"emptyLinePlaceholder":21},[95,61418,61419,61421,61423],{"class":97,"line":32630},[95,61420,51762],{"class":105},[95,61422,50612],{"class":51277},[95,61424,51284],{"class":105},[21981,61426,61428],{"id":61427},"_3253-键盘事件","3.2.5.3 键盘事件",[10,61430,61431],{},"评论字数统计案例",[10,61433,61434],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[10,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",[5109,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":5170},[1113,61454,61455,61458],{},[52,61456,61457],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[52,61459,61460],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[86,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",[92,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},[95,61467,61468,61470,61472,61474],{"class":97,"line":98},[95,61469,51274],{"class":105},[95,61471,51278],{"class":51277},[95,61473,51281],{"class":1945},[95,61475,51284],{"class":105},[95,61477,61478,61480,61482,61484,61486,61488],{"class":97,"line":15},[95,61479,1016],{"class":105},[95,61481,50612],{"class":51277},[95,61483,51293],{"class":1945},[95,61485,151],{"class":105},[95,61487,51298],{"class":210},[95,61489,51284],{"class":105},[95,61491,61492],{"class":97,"line":1161},[95,61493,2382],{"emptyLinePlaceholder":21},[95,61495,61496,61498,61500],{"class":97,"line":1176},[95,61497,1016],{"class":105},[95,61499,51311],{"class":51277},[95,61501,51284],{"class":105},[95,61503,61504,61506,61508,61510,61512,61514],{"class":97,"line":1182},[95,61505,52121],{"class":105},[95,61507,51321],{"class":51277},[95,61509,51324],{"class":1945},[95,61511,151],{"class":105},[95,61513,51329],{"class":210},[95,61515,51284],{"class":105},[95,61517,61518,61520,61522,61524,61526,61528,61530,61532,61534],{"class":97,"line":1196},[95,61519,52121],{"class":105},[95,61521,51321],{"class":51277},[95,61523,51340],{"class":1945},[95,61525,151],{"class":105},[95,61527,51345],{"class":210},[95,61529,51348],{"class":1945},[95,61531,151],{"class":105},[95,61533,51353],{"class":210},[95,61535,51284],{"class":105},[95,61537,61538,61540,61542,61544,61546,61548,61550,61552,61554],{"class":97,"line":1202},[95,61539,52121],{"class":105},[95,61541,51321],{"class":51277},[95,61543,14903],{"class":1945},[95,61545,151],{"class":105},[95,61547,51368],{"class":210},[95,61549,51348],{"class":1945},[95,61551,151],{"class":105},[95,61553,51375],{"class":210},[95,61555,51284],{"class":105},[95,61557,61558,61560,61562,61565,61567],{"class":97,"line":1293},[95,61559,52121],{"class":105},[95,61561,51384],{"class":51277},[95,61563,61564],{"class":105},">评论回车发布\u003C\u002F",[95,61566,51384],{"class":51277},[95,61568,51284],{"class":105},[95,61570,61571,61573,61575],{"class":97,"line":1299},[95,61572,52121],{"class":105},[95,61574,5109],{"class":51277},[95,61576,51284],{"class":105},[95,61578,61579,61582],{"class":97,"line":1311},[95,61580,61581],{"class":1945},"    .wrapper",[95,61583,15555],{"class":105},[95,61585,61586,61589,61591,61593,61595],{"class":97,"line":1594},[95,61587,61588],{"class":154},"      min-width",[95,61590,51414],{"class":105},[95,61592,3969],{"class":154},[95,61594,51469],{"class":101},[95,61596,1272],{"class":105},[95,61598,61599,61602,61604,61607,61609],{"class":97,"line":1599},[95,61600,61601],{"class":154},"      max-width",[95,61603,51414],{"class":105},[95,61605,61606],{"class":154},"800",[95,61608,51469],{"class":101},[95,61610,1272],{"class":105},[95,61612,61613,61615,61617,61619],{"class":97,"line":1605},[95,61614,54986],{"class":154},[95,61616,51414],{"class":105},[95,61618,51454],{"class":154},[95,61620,1272],{"class":105},[95,61622,61623,61625,61627,61629],{"class":97,"line":1610},[95,61624,54997],{"class":154},[95,61626,51414],{"class":105},[95,61628,51557],{"class":154},[95,61630,1272],{"class":105},[95,61632,61633],{"class":97,"line":1624},[95,61634,2169],{"class":105},[95,61636,61637],{"class":97,"line":1629},[95,61638,2382],{"emptyLinePlaceholder":21},[95,61640,61641,61644],{"class":97,"line":1635},[95,61642,61643],{"class":1945},"    .avatar",[95,61645,15555],{"class":105},[95,61647,61648,61650,61652,61654,61656],{"class":97,"line":1656},[95,61649,54748],{"class":154},[95,61651,51414],{"class":105},[95,61653,713],{"class":154},[95,61655,51469],{"class":101},[95,61657,1272],{"class":105},[95,61659,61660,61662,61664,61666,61668],{"class":97,"line":1661},[95,61661,54762],{"class":154},[95,61663,51414],{"class":105},[95,61665,713],{"class":154},[95,61667,51469],{"class":101},[95,61669,1272],{"class":105},[95,61671,61672,61674,61676,61678,61680],{"class":97,"line":1675},[95,61673,55111],{"class":154},[95,61675,51414],{"class":105},[95,61677,762],{"class":154},[95,61679,434],{"class":101},[95,61681,1272],{"class":105},[95,61683,61684,61687,61689,61692],{"class":97,"line":1680},[95,61685,61686],{"class":154},"      overflow",[95,61688,51414],{"class":105},[95,61690,61691],{"class":154},"hidden",[95,61693,1272],{"class":105},[95,61695,61696,61699,61701,61704,61706,61709,61711,61714,61716,61718,61721],{"class":97,"line":1709},[95,61697,61698],{"class":154},"      background",[95,61700,51414],{"class":105},[95,61702,61703],{"class":154},"url",[95,61705,106],{"class":105},[95,61707,61708],{"class":5199},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[95,61710,13697],{"class":105},[95,61712,61713],{"class":154},"no-repeat",[95,61715,17127],{"class":154},[95,61717,24963],{"class":105},[95,61719,61720],{"class":154},"cover",[95,61722,1272],{"class":105},[95,61724,61725,61728,61730,61732,61734],{"class":97,"line":1714},[95,61726,61727],{"class":154},"      margin-right",[95,61729,51414],{"class":105},[95,61731,806],{"class":154},[95,61733,51469],{"class":101},[95,61735,1272],{"class":105},[95,61737,61738],{"class":97,"line":1731},[95,61739,2169],{"class":105},[95,61741,61742],{"class":97,"line":1736},[95,61743,2382],{"emptyLinePlaceholder":21},[95,61745,61746,61748,61751],{"class":97,"line":1741},[95,61747,61581],{"class":1945},[95,61749,61750],{"class":51277}," textarea",[95,61752,15555],{"class":105},[95,61754,61755,61758,61760,61762],{"class":97,"line":1746},[95,61756,61757],{"class":154},"      outline",[95,61759,51414],{"class":105},[95,61761,54714],{"class":154},[95,61763,1272],{"class":105},[95,61765,61766,61769,61771,61774],{"class":97,"line":1760},[95,61767,61768],{"class":154},"      border-color",[95,61770,51414],{"class":105},[95,61772,61773],{"class":154},"transparent",[95,61775,1272],{"class":105},[95,61777,61778,61781,61783,61785],{"class":97,"line":1765},[95,61779,61780],{"class":154},"      resize",[95,61782,51414],{"class":105},[95,61784,54714],{"class":154},[95,61786,1272],{"class":105},[95,61788,61789,61791,61793,61796],{"class":97,"line":2559},[95,61790,61698],{"class":154},[95,61792,51414],{"class":105},[95,61794,61795],{"class":154},"#f5f5f5",[95,61797,1272],{"class":105},[95,61799,61800,61802,61804,61806,61808],{"class":97,"line":2573},[95,61801,55111],{"class":154},[95,61803,51414],{"class":105},[95,61805,399],{"class":154},[95,61807,51469],{"class":101},[95,61809,1272],{"class":105},[95,61811,61812,61815,61817,61819],{"class":97,"line":2581},[95,61813,61814],{"class":154},"      flex",[95,61816,51414],{"class":105},[95,61818,323],{"class":154},[95,61820,1272],{"class":105},[95,61822,61823,61825,61827,61829,61831],{"class":97,"line":2586},[95,61824,54672],{"class":154},[95,61826,51414],{"class":105},[95,61828,552],{"class":154},[95,61830,51469],{"class":101},[95,61832,1272],{"class":105},[95,61834,61835,61838,61840,61842,61845,61847],{"class":97,"line":2592},[95,61836,61837],{"class":154},"      transition",[95,61839,51414],{"class":105},[95,61841,28106],{"class":154},[95,61843,61844],{"class":154}," 0.5",[95,61846,801],{"class":101},[95,61848,1272],{"class":105},[95,61850,61851,61853,61855,61857,61859],{"class":97,"line":2598},[95,61852,54762],{"class":154},[95,61854,51414],{"class":105},[95,61856,1057],{"class":154},[95,61858,51469],{"class":101},[95,61860,1272],{"class":105},[95,61862,61863],{"class":97,"line":2603},[95,61864,2169],{"class":105},[95,61866,61867],{"class":97,"line":7931},[95,61868,2382],{"emptyLinePlaceholder":21},[95,61870,61871,61873,61875,61878],{"class":97,"line":7955},[95,61872,61581],{"class":1945},[95,61874,61750],{"class":51277},[95,61876,61877],{"class":1945},":focus",[95,61879,15555],{"class":105},[95,61881,61882,61884,61886,61889],{"class":97,"line":7960},[95,61883,61768],{"class":154},[95,61885,51414],{"class":105},[95,61887,61888],{"class":154},"#e4e4e4",[95,61890,1272],{"class":105},[95,61892,61893,61895,61897,61899],{"class":97,"line":7966},[95,61894,61698],{"class":154},[95,61896,51414],{"class":105},[95,61898,60819],{"class":154},[95,61900,1272],{"class":105},[95,61902,61903,61905,61907,61909,61911],{"class":97,"line":7993},[95,61904,54762],{"class":154},[95,61906,51414],{"class":105},[95,61908,762],{"class":154},[95,61910,51469],{"class":101},[95,61912,1272],{"class":105},[95,61914,61915],{"class":97,"line":7998},[95,61916,2169],{"class":105},[95,61918,61919],{"class":97,"line":8004},[95,61920,2382],{"emptyLinePlaceholder":21},[95,61922,61923,61925,61927],{"class":97,"line":8016},[95,61924,61581],{"class":1945},[95,61926,57444],{"class":51277},[95,61928,15555],{"class":105},[95,61930,61931,61933,61935,61938],{"class":97,"line":8028},[95,61932,61698],{"class":154},[95,61934,51414],{"class":105},[95,61936,61937],{"class":154},"#00aeec",[95,61939,1272],{"class":105},[95,61941,61942,61944,61946,61948],{"class":97,"line":8040},[95,61943,57393],{"class":154},[95,61945,51414],{"class":105},[95,61947,60819],{"class":154},[95,61949,1272],{"class":105},[95,61951,61952,61955,61957,61959],{"class":97,"line":9699},[95,61953,61954],{"class":154},"      border",[95,61956,51414],{"class":105},[95,61958,54714],{"class":154},[95,61960,1272],{"class":105},[95,61962,61963,61965,61967,61969,61971],{"class":97,"line":9724},[95,61964,55111],{"class":154},[95,61966,51414],{"class":105},[95,61968,399],{"class":154},[95,61970,51469],{"class":101},[95,61972,1272],{"class":105},[95,61974,61975,61978,61980,61982,61984],{"class":97,"line":9747},[95,61976,61977],{"class":154},"      margin-left",[95,61979,51414],{"class":105},[95,61981,552],{"class":154},[95,61983,51469],{"class":101},[95,61985,1272],{"class":105},[95,61987,61988,61990,61992,61994,61996],{"class":97,"line":9771},[95,61989,54748],{"class":154},[95,61991,51414],{"class":105},[95,61993,462],{"class":154},[95,61995,51469],{"class":101},[95,61997,1272],{"class":105},[95,61999,62000,62003,62005,62008],{"class":97,"line":9776},[95,62001,62002],{"class":154},"      cursor",[95,62004,51414],{"class":105},[95,62006,62007],{"class":154},"pointer",[95,62009,1272],{"class":105},[95,62011,62012],{"class":97,"line":9781},[95,62013,2169],{"class":105},[95,62015,62016],{"class":97,"line":9786},[95,62017,2382],{"emptyLinePlaceholder":21},[95,62019,62020,62022,62025],{"class":97,"line":9795},[95,62021,61581],{"class":1945},[95,62023,62024],{"class":1945}," .total",[95,62026,15555],{"class":105},[95,62028,62029,62031,62033,62035,62037],{"class":97,"line":9800},[95,62030,61727],{"class":154},[95,62032,51414],{"class":105},[95,62034,718],{"class":154},[95,62036,51469],{"class":101},[95,62038,1272],{"class":105},[95,62040,62041,62043,62045,62048],{"class":97,"line":9806},[95,62042,57393],{"class":154},[95,62044,51414],{"class":105},[95,62046,62047],{"class":154},"#999",[95,62049,1272],{"class":105},[95,62051,62052,62055,62057,62059,62061],{"class":97,"line":9827},[95,62053,62054],{"class":154},"      margin-top",[95,62056,51414],{"class":105},[95,62058,425],{"class":154},[95,62060,51469],{"class":101},[95,62062,1272],{"class":105},[95,62064,62065,62068,62070,62072],{"class":97,"line":9833},[95,62066,62067],{"class":154},"      opacity",[95,62069,51414],{"class":105},[95,62071,297],{"class":154},[95,62073,1272],{"class":105},[95,62075,62076,62078,62080,62082,62084,62086],{"class":97,"line":9847},[95,62077,61837],{"class":154},[95,62079,51414],{"class":105},[95,62081,28106],{"class":154},[95,62083,61844],{"class":154},[95,62085,801],{"class":101},[95,62087,1272],{"class":105},[95,62089,62090],{"class":97,"line":9853},[95,62091,2169],{"class":105},[95,62093,62094],{"class":97,"line":9880},[95,62095,2382],{"emptyLinePlaceholder":21},[95,62097,62098,62101],{"class":97,"line":9889},[95,62099,62100],{"class":1945},"    .list",[95,62102,15555],{"class":105},[95,62104,62105,62107,62109,62111,62113],{"class":97,"line":9895},[95,62106,61588],{"class":154},[95,62108,51414],{"class":105},[95,62110,3969],{"class":154},[95,62112,51469],{"class":101},[95,62114,1272],{"class":105},[95,62116,62117,62119,62121,62123,62125],{"class":97,"line":9903},[95,62118,61601],{"class":154},[95,62120,51414],{"class":105},[95,62122,61606],{"class":154},[95,62124,51469],{"class":101},[95,62126,1272],{"class":105},[95,62128,62129,62131,62133,62135],{"class":97,"line":9908},[95,62130,54986],{"class":154},[95,62132,51414],{"class":105},[95,62134,51454],{"class":154},[95,62136,1272],{"class":105},[95,62138,62139],{"class":97,"line":16587},[95,62140,2169],{"class":105},[95,62142,62143],{"class":97,"line":16593},[95,62144,2382],{"emptyLinePlaceholder":21},[95,62146,62147,62149,62152],{"class":97,"line":16616},[95,62148,62100],{"class":1945},[95,62150,62151],{"class":1945}," .item",[95,62153,15555],{"class":105},[95,62155,62156,62158,62160,62162,62164],{"class":97,"line":16622},[95,62157,54748],{"class":154},[95,62159,51414],{"class":105},[95,62161,417],{"class":154},[95,62163,434],{"class":101},[95,62165,1272],{"class":105},[95,62167,62168,62170,62172,62174],{"class":97,"line":16645},[95,62169,54986],{"class":154},[95,62171,51414],{"class":105},[95,62173,51454],{"class":154},[95,62175,1272],{"class":105},[95,62177,62178],{"class":97,"line":16659},[95,62179,2169],{"class":105},[95,62181,62182],{"class":97,"line":16679},[95,62183,2382],{"emptyLinePlaceholder":21},[95,62185,62186,62188,62190,62193],{"class":97,"line":16685},[95,62187,62100],{"class":1945},[95,62189,62151],{"class":1945},[95,62191,62192],{"class":1945}," .info",[95,62194,15555],{"class":105},[95,62196,62197,62199,62201,62203],{"class":97,"line":16696},[95,62198,61814],{"class":154},[95,62200,51414],{"class":105},[95,62202,323],{"class":154},[95,62204,1272],{"class":105},[95,62206,62207,62210,62212,62214,62216,62219,62222],{"class":97,"line":16719},[95,62208,62209],{"class":154},"      border-bottom",[95,62211,51414],{"class":105},[95,62213,323],{"class":154},[95,62215,51469],{"class":101},[95,62217,62218],{"class":154}," dashed",[95,62220,62221],{"class":154}," #e4e4e4",[95,62223,1272],{"class":105},[95,62225,62226,62229,62231,62233,62235],{"class":97,"line":16741},[95,62227,62228],{"class":154},"      padding-bottom",[95,62230,51414],{"class":105},[95,62232,552],{"class":154},[95,62234,51469],{"class":101},[95,62236,1272],{"class":105},[95,62238,62239],{"class":97,"line":16746},[95,62240,2169],{"class":105},[95,62242,62243],{"class":97,"line":16752},[95,62244,2382],{"emptyLinePlaceholder":21},[95,62246,62247,62249,62251,62253],{"class":97,"line":16766},[95,62248,62100],{"class":1945},[95,62250,62151],{"class":1945},[95,62252,6808],{"class":51277},[95,62254,15555],{"class":105},[95,62256,62257,62259,62261,62263],{"class":97,"line":16779},[95,62258,54683],{"class":154},[95,62260,51414],{"class":105},[95,62262,297],{"class":154},[95,62264,1272],{"class":105},[95,62266,62267],{"class":97,"line":16784},[95,62268,2169],{"class":105},[95,62270,62271],{"class":97,"line":16798},[95,62272,2382],{"emptyLinePlaceholder":21},[95,62274,62275,62277,62279,62282],{"class":97,"line":16803},[95,62276,62100],{"class":1945},[95,62278,62151],{"class":1945},[95,62280,62281],{"class":1945}," .name",[95,62283,15555],{"class":105},[95,62285,62286,62288,62290,62293],{"class":97,"line":16809},[95,62287,57393],{"class":154},[95,62289,51414],{"class":105},[95,62291,62292],{"class":154},"#FB7299",[95,62294,1272],{"class":105},[95,62296,62297,62299,62301,62303,62305],{"class":97,"line":16814},[95,62298,54899],{"class":154},[95,62300,51414],{"class":105},[95,62302,655],{"class":154},[95,62304,51469],{"class":101},[95,62306,1272],{"class":105},[95,62308,62309,62312,62314,62317],{"class":97,"line":16828},[95,62310,62311],{"class":154},"      font-weight",[95,62313,51414],{"class":105},[95,62315,62316],{"class":154},"bold",[95,62318,1272],{"class":105},[95,62320,62321],{"class":97,"line":16833},[95,62322,2169],{"class":105},[95,62324,62325],{"class":97,"line":16838},[95,62326,2382],{"emptyLinePlaceholder":21},[95,62328,62329,62331,62333,62336],{"class":97,"line":16852},[95,62330,62100],{"class":1945},[95,62332,62151],{"class":1945},[95,62334,62335],{"class":1945}," .text",[95,62337,15555],{"class":105},[95,62339,62340,62342,62344,62347],{"class":97,"line":16864},[95,62341,57393],{"class":154},[95,62343,51414],{"class":105},[95,62345,62346],{"class":154},"#333",[95,62348,1272],{"class":105},[95,62350,62351,62353,62355,62357,62359,62361],{"class":97,"line":16869},[95,62352,54672],{"class":154},[95,62354,51414],{"class":105},[95,62356,552],{"class":154},[95,62358,51469],{"class":101},[95,62360,4075],{"class":154},[95,62362,1272],{"class":105},[95,62364,62365],{"class":97,"line":16882},[95,62366,2169],{"class":105},[95,62368,62369],{"class":97,"line":16887},[95,62370,2382],{"emptyLinePlaceholder":21},[95,62372,62373,62375,62377,62380],{"class":97,"line":16892},[95,62374,62100],{"class":1945},[95,62376,62151],{"class":1945},[95,62378,62379],{"class":1945}," .time",[95,62381,15555],{"class":105},[95,62383,62384,62386,62388,62390],{"class":97,"line":16897},[95,62385,57393],{"class":154},[95,62387,51414],{"class":105},[95,62389,62047],{"class":154},[95,62391,1272],{"class":105},[95,62393,62394,62396,62398,62400,62402],{"class":97,"line":16910},[95,62395,54899],{"class":154},[95,62397,51414],{"class":105},[95,62399,604],{"class":154},[95,62401,51469],{"class":101},[95,62403,1272],{"class":105},[95,62405,62406],{"class":97,"line":16915},[95,62407,2169],{"class":105},[95,62409,62410,62412,62414],{"class":97,"line":32618},[95,62411,52394],{"class":105},[95,62413,5109],{"class":51277},[95,62415,51284],{"class":105},[95,62417,62418,62420,62422],{"class":97,"line":32624},[95,62419,51762],{"class":105},[95,62421,51311],{"class":51277},[95,62423,51284],{"class":105},[95,62425,62426],{"class":97,"line":32630},[95,62427,2382],{"emptyLinePlaceholder":21},[95,62429,62430,62432,62434],{"class":97,"line":32636},[95,62431,1016],{"class":105},[95,62433,51777],{"class":51277},[95,62435,51284],{"class":105},[95,62437,62438,62440,62442,62444,62446,62449],{"class":97,"line":32642},[95,62439,52121],{"class":105},[95,62441,51588],{"class":51277},[95,62443,53463],{"class":1945},[95,62445,151],{"class":105},[95,62447,62448],{"class":210},"\"wrapper\"",[95,62450,51284],{"class":105},[95,62452,62453,62455,62457,62459,62461,62464,62466,62468],{"class":97,"line":32653},[95,62454,51318],{"class":105},[95,62456,547],{"class":51277},[95,62458,53463],{"class":1945},[95,62460,151],{"class":105},[95,62462,62463],{"class":210},"\"avatar\"",[95,62465,55291],{"class":105},[95,62467,547],{"class":51277},[95,62469,51284],{"class":105},[95,62471,62472,62474,62476,62478,62480,62483,62485,62487,62490,62492,62494,62496,62499,62501,62504,62506,62508],{"class":97,"line":32659},[95,62473,51318],{"class":105},[95,62475,54265],{"class":51277},[95,62477,14942],{"class":1945},[95,62479,151],{"class":105},[95,62481,62482],{"class":210},"\"tx\"",[95,62484,60997],{"class":1945},[95,62486,151],{"class":105},[95,62488,62489],{"class":210},"\"发一条友善的评论\"",[95,62491,54288],{"class":1945},[95,62493,151],{"class":105},[95,62495,3683],{"class":210},[95,62497,62498],{"class":1945}," maxlength",[95,62500,151],{"class":105},[95,62502,62503],{"class":210},"\"200\"",[95,62505,55291],{"class":105},[95,62507,54265],{"class":51277},[95,62509,51284],{"class":105},[95,62511,62512,62514,62516,62519,62521],{"class":97,"line":32679},[95,62513,51318],{"class":105},[95,62515,53864],{"class":51277},[95,62517,62518],{"class":105},">发布\u003C\u002F",[95,62520,53864],{"class":51277},[95,62522,51284],{"class":105},[95,62524,62525,62527,62529],{"class":97,"line":32685},[95,62526,52394],{"class":105},[95,62528,51588],{"class":51277},[95,62530,51284],{"class":105},[95,62532,62533,62535,62537,62539,62541,62543],{"class":97,"line":32696},[95,62534,52121],{"class":105},[95,62536,51588],{"class":51277},[95,62538,53463],{"class":1945},[95,62540,151],{"class":105},[95,62542,62448],{"class":210},[95,62544,51284],{"class":105},[95,62546,62547,62549,62551,62553,62555,62558,62561,62563],{"class":97,"line":32702},[95,62548,51318],{"class":105},[95,62550,95],{"class":51277},[95,62552,53463],{"class":1945},[95,62554,151],{"class":105},[95,62556,62557],{"class":210},"\"total\"",[95,62559,62560],{"class":105},">0\u002F200字\u003C\u002F",[95,62562,95],{"class":51277},[95,62564,51284],{"class":105},[95,62566,62567,62569,62571],{"class":97,"line":32708},[95,62568,52394],{"class":105},[95,62570,51588],{"class":51277},[95,62572,51284],{"class":105},[95,62574,62575,62577,62579,62581,62583,62586],{"class":97,"line":32714},[95,62576,52121],{"class":105},[95,62578,51588],{"class":51277},[95,62580,53463],{"class":1945},[95,62582,151],{"class":105},[95,62584,62585],{"class":210},"\"list\"",[95,62587,51284],{"class":105},[95,62589,62590,62592,62594,62596,62598,62601,62604,62606,62609],{"class":97,"line":32720},[95,62591,51318],{"class":105},[95,62593,51588],{"class":51277},[95,62595,53463],{"class":1945},[95,62597,151],{"class":105},[95,62599,62600],{"class":210},"\"item\"",[95,62602,62603],{"class":1945}," style",[95,62605,151],{"class":105},[95,62607,62608],{"class":210},"\"display: none;\"",[95,62610,51284],{"class":105},[95,62612,62613,62615,62617,62619,62621,62623,62625,62627],{"class":97,"line":32726},[95,62614,55211],{"class":105},[95,62616,547],{"class":51277},[95,62618,53463],{"class":1945},[95,62620,151],{"class":105},[95,62622,62463],{"class":210},[95,62624,55291],{"class":105},[95,62626,547],{"class":51277},[95,62628,51284],{"class":105},[95,62630,62631,62633,62635,62637,62639,62642],{"class":97,"line":32732},[95,62632,55211],{"class":105},[95,62634,51588],{"class":51277},[95,62636,53463],{"class":1945},[95,62638,151],{"class":105},[95,62640,62641],{"class":210},"\"info\"",[95,62643,51284],{"class":105},[95,62645,62646,62648,62650,62652,62654,62657,62660,62662],{"class":97,"line":32738},[95,62647,55279],{"class":105},[95,62649,10],{"class":51277},[95,62651,53463],{"class":1945},[95,62653,151],{"class":105},[95,62655,62656],{"class":210},"\"name\"",[95,62658,62659],{"class":105},">清风徐来\u003C\u002F",[95,62661,10],{"class":51277},[95,62663,51284],{"class":105},[95,62665,62666,62668,62670,62672,62674,62677,62680,62682],{"class":97,"line":32758},[95,62667,55279],{"class":105},[95,62669,10],{"class":51277},[95,62671,53463],{"class":1945},[95,62673,151],{"class":105},[95,62675,62676],{"class":210},"\"text\"",[95,62678,62679],{"class":105},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[95,62681,10],{"class":51277},[95,62683,51284],{"class":105},[95,62685,62686,62688,62690,62692,62694,62697,62700,62702],{"class":97,"line":32764},[95,62687,55279],{"class":105},[95,62689,10],{"class":51277},[95,62691,53463],{"class":1945},[95,62693,151],{"class":105},[95,62695,62696],{"class":210},"\"time\"",[95,62698,62699],{"class":105},">2022-10-10 20:29:21\u003C\u002F",[95,62701,10],{"class":51277},[95,62703,51284],{"class":105},[95,62705,62706,62708,62710],{"class":97,"line":32780},[95,62707,55384],{"class":105},[95,62709,51588],{"class":51277},[95,62711,51284],{"class":105},[95,62713,62714,62716,62718],{"class":97,"line":32786},[95,62715,51753],{"class":105},[95,62717,51588],{"class":51277},[95,62719,51284],{"class":105},[95,62721,62722,62724,62726],{"class":97,"line":32800},[95,62723,52394],{"class":105},[95,62725,51588],{"class":51277},[95,62727,51284],{"class":105},[95,62729,62730,62732,62734],{"class":97,"line":32806},[95,62731,52121],{"class":105},[95,62733,51790],{"class":51277},[95,62735,51284],{"class":105},[95,62737,62738,62740,62743,62745,62747,62749,62751,62754],{"class":97,"line":32821},[95,62739,11204],{"class":101},[95,62741,62742],{"class":154}," tx",[95,62744,13547],{"class":101},[95,62746,54373],{"class":105},[95,62748,54376],{"class":1945},[95,62750,106],{"class":105},[95,62752,62753],{"class":210},"'#tx'",[95,62755,112],{"class":105},[95,62757,62758,62760,62763,62765,62767,62769,62771,62774],{"class":97,"line":32827},[95,62759,11204],{"class":101},[95,62761,62762],{"class":154}," total",[95,62764,13547],{"class":101},[95,62766,54373],{"class":105},[95,62768,54376],{"class":1945},[95,62770,106],{"class":105},[95,62772,62773],{"class":210},"'.total'",[95,62775,112],{"class":105},[95,62777,62778],{"class":97,"line":32836},[95,62779,62780],{"class":164},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[95,62782,62783,62786,62788,62790,62792,62794,62796],{"class":97,"line":32842},[95,62784,62785],{"class":105},"    tx.",[95,62787,57790],{"class":1945},[95,62789,106],{"class":105},[95,62791,61304],{"class":210},[95,62793,12418],{"class":105},[95,62795,54426],{"class":101},[95,62797,54429],{"class":105},[95,62799,62800,62803,62805],{"class":97,"line":32851},[95,62801,62802],{"class":105},"      total.style.opacity ",[95,62804,151],{"class":101},[95,62806,55676],{"class":154},[95,62808,62809],{"class":97,"line":32857},[95,62810,33446],{"class":105},[95,62812,62813],{"class":97,"line":32863},[95,62814,62815],{"class":164},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[95,62817,62818,62820,62822,62824,62826,62828,62830],{"class":97,"line":32872},[95,62819,62785],{"class":105},[95,62821,57790],{"class":1945},[95,62823,106],{"class":105},[95,62825,61365],{"class":210},[95,62827,12418],{"class":105},[95,62829,54426],{"class":101},[95,62831,54429],{"class":105},[95,62833,62834,62836,62838],{"class":97,"line":32878},[95,62835,62802],{"class":105},[95,62837,151],{"class":101},[95,62839,47318],{"class":154},[95,62841,62842],{"class":97,"line":32889},[95,62843,33446],{"class":105},[95,62845,62846],{"class":97,"line":32895},[95,62847,62848],{"class":164},"    \u002F\u002F 3. 检测用户输入\n",[95,62850,62851,62853,62855,62857,62860,62862,62864],{"class":97,"line":32914},[95,62852,62785],{"class":105},[95,62854,57790],{"class":1945},[95,62856,106],{"class":105},[95,62858,62859],{"class":210},"'input'",[95,62861,12418],{"class":105},[95,62863,54426],{"class":101},[95,62865,54429],{"class":105},[95,62867,62868],{"class":97,"line":32920},[95,62869,62870],{"class":164},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[95,62872,62873,62876,62878,62881,62884,62886,62889,62891,62893],{"class":97,"line":32931},[95,62874,62875],{"class":105},"      total.innerHTML ",[95,62877,151],{"class":101},[95,62879,62880],{"class":210}," `${",[95,62882,62883],{"class":105},"tx",[95,62885,664],{"class":210},[95,62887,62888],{"class":105},"value",[95,62890,664],{"class":210},[95,62892,51945],{"class":154},[95,62894,62895],{"class":210},"}\u002F200字`\n",[95,62897,62898],{"class":97,"line":32937},[95,62899,33446],{"class":105},[95,62901,62902],{"class":97,"line":32957},[95,62903,2382],{"emptyLinePlaceholder":21},[95,62905,62906],{"class":97,"line":32973},[95,62907,62908],{"class":164},"    \u002F\u002F const str = 'andy'\n",[95,62910,62911],{"class":97,"line":32979},[95,62912,62913],{"class":164},"    \u002F\u002F console.log(str.length)\n",[95,62915,62916,62918,62920],{"class":97,"line":32993},[95,62917,52394],{"class":105},[95,62919,51790],{"class":51277},[95,62921,51284],{"class":105},[95,62923,62924,62926,62928],{"class":97,"line":32999},[95,62925,51762],{"class":105},[95,62927,51777],{"class":51277},[95,62929,51284],{"class":105},[95,62931,62932],{"class":97,"line":33005},[95,62933,2382],{"emptyLinePlaceholder":21},[95,62935,62936,62938,62940],{"class":97,"line":33016},[95,62937,51762],{"class":105},[95,62939,50612],{"class":51277},[95,62941,51284],{"class":105},[21981,62943,62945],{"id":62944},"_3254-change事件","3.2.5.4 change事件",[10,62947,62948],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[10,62950,62951],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[10,62953,62954],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[86,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",[92,62959,62960,62970,62984,62988,62996,63010,63030,63042,63050,63054,63062,63076,63084,63102,63120,63132,63136,63144,63152,63156],{"__ignoreMap":14},[95,62961,62962,62964,62966,62968],{"class":97,"line":98},[95,62963,51274],{"class":105},[95,62965,51278],{"class":51277},[95,62967,51281],{"class":1945},[95,62969,51284],{"class":105},[95,62971,62972,62974,62976,62978,62980,62982],{"class":97,"line":15},[95,62973,1016],{"class":105},[95,62975,50612],{"class":51277},[95,62977,51293],{"class":1945},[95,62979,151],{"class":105},[95,62981,51298],{"class":210},[95,62983,51284],{"class":105},[95,62985,62986],{"class":97,"line":1161},[95,62987,2382],{"emptyLinePlaceholder":21},[95,62989,62990,62992,62994],{"class":97,"line":1176},[95,62991,1016],{"class":105},[95,62993,51311],{"class":51277},[95,62995,51284],{"class":105},[95,62997,62998,63000,63002,63004,63006,63008],{"class":97,"line":1182},[95,62999,52121],{"class":105},[95,63001,51321],{"class":51277},[95,63003,51324],{"class":1945},[95,63005,151],{"class":105},[95,63007,51329],{"class":210},[95,63009,51284],{"class":105},[95,63011,63012,63014,63016,63018,63020,63022,63024,63026,63028],{"class":97,"line":1196},[95,63013,52121],{"class":105},[95,63015,51321],{"class":51277},[95,63017,14903],{"class":1945},[95,63019,151],{"class":105},[95,63021,51368],{"class":210},[95,63023,51348],{"class":1945},[95,63025,151],{"class":105},[95,63027,51375],{"class":210},[95,63029,51284],{"class":105},[95,63031,63032,63034,63036,63038,63040],{"class":97,"line":1202},[95,63033,52121],{"class":105},[95,63035,51384],{"class":51277},[95,63037,51387],{"class":105},[95,63039,51384],{"class":51277},[95,63041,51284],{"class":105},[95,63043,63044,63046,63048],{"class":97,"line":1293},[95,63045,51762],{"class":105},[95,63047,51311],{"class":51277},[95,63049,51284],{"class":105},[95,63051,63052],{"class":97,"line":1299},[95,63053,2382],{"emptyLinePlaceholder":21},[95,63055,63056,63058,63060],{"class":97,"line":1311},[95,63057,1016],{"class":105},[95,63059,51777],{"class":51277},[95,63061,51284],{"class":105},[95,63063,63064,63066,63068,63070,63072,63074],{"class":97,"line":1594},[95,63065,52121],{"class":105},[95,63067,53798],{"class":51277},[95,63069,53801],{"class":1945},[95,63071,151],{"class":105},[95,63073,62676],{"class":210},[95,63075,51284],{"class":105},[95,63077,63078,63080,63082],{"class":97,"line":1599},[95,63079,52121],{"class":105},[95,63081,51790],{"class":51277},[95,63083,51284],{"class":105},[95,63085,63086,63088,63090,63092,63094,63096,63098,63100],{"class":97,"line":1605},[95,63087,11204],{"class":101},[95,63089,60582],{"class":154},[95,63091,13547],{"class":101},[95,63093,54373],{"class":105},[95,63095,54376],{"class":1945},[95,63097,106],{"class":105},[95,63099,62859],{"class":210},[95,63101,112],{"class":105},[95,63103,63104,63107,63109,63111,63114,63116,63118],{"class":97,"line":1610},[95,63105,63106],{"class":105},"    input.",[95,63108,57790],{"class":1945},[95,63110,106],{"class":105},[95,63112,63113],{"class":210},"'change'",[95,63115,12418],{"class":105},[95,63117,54426],{"class":101},[95,63119,54429],{"class":105},[95,63121,63122,63124,63126,63128,63130],{"class":97,"line":1624},[95,63123,58221],{"class":105},[95,63125,58224],{"class":1945},[95,63127,106],{"class":105},[95,63129,699],{"class":154},[95,63131,112],{"class":105},[95,63133,63134],{"class":97,"line":1629},[95,63135,33446],{"class":105},[95,63137,63138,63140,63142],{"class":97,"line":1635},[95,63139,52394],{"class":105},[95,63141,51790],{"class":51277},[95,63143,51284],{"class":105},[95,63145,63146,63148,63150],{"class":97,"line":1656},[95,63147,51762],{"class":105},[95,63149,51777],{"class":51277},[95,63151,51284],{"class":105},[95,63153,63154],{"class":97,"line":1661},[95,63155,2382],{"emptyLinePlaceholder":21},[95,63157,63158,63160,63162],{"class":97,"line":1675},[95,63159,51762],{"class":105},[95,63161,50612],{"class":51277},[95,63163,51284],{"class":105},[10,63165,63166],{},"总结：内容发生改变才回去触发",[66,63168,63170],{"id":63169},"_326-事件对象","3.2.6 事件对象",[21981,63172,63174],{"id":63173},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[10,63176,63177],{},[1444,63178],{"alt":14,"src":63179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[10,63181,63182],{},[1444,63183],{"alt":14,"src":63184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[10,63186,63187],{},"点击一次，就输出了事件对象，它是个对象",[10,63189,63190],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[10,63192,63193],{},[1444,63194],{"alt":14,"src":63195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21981,63197,63199],{"id":63198},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[10,63201,63202],{},[1444,63203],{"alt":14,"src":63204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[10,63206,63207],{},"实现按特殊字符才是实现打印输出效果：",[86,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",[92,63212,63213,63221,63226,63240,63248,63253,63258,63263,63268,63273,63278,63283,63288,63293,63297,63301,63309],{"__ignoreMap":14},[95,63214,63215,63217,63219],{"class":97,"line":98},[95,63216,1016],{"class":105},[95,63218,51777],{"class":51277},[95,63220,51284],{"class":105},[95,63222,63223],{"class":97,"line":15},[95,63224,63225],{"class":164},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[95,63227,63228,63230,63232,63234,63236,63238],{"class":97,"line":1161},[95,63229,52121],{"class":105},[95,63231,53798],{"class":51277},[95,63233,53801],{"class":1945},[95,63235,151],{"class":105},[95,63237,62676],{"class":210},[95,63239,51284],{"class":105},[95,63241,63242,63244,63246],{"class":97,"line":1176},[95,63243,52121],{"class":105},[95,63245,51790],{"class":51277},[95,63247,51284],{"class":105},[95,63249,63250],{"class":97,"line":1182},[95,63251,63252],{"class":105},"    \u002F\u002F const btn = document.querySelector('button')\n",[95,63254,63255],{"class":97,"line":1196},[95,63256,63257],{"class":105},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[95,63259,63260],{"class":97,"line":1202},[95,63261,63262],{"class":105},"    \u002F\u002F   console.log(e);\n",[95,63264,63265],{"class":97,"line":1293},[95,63266,63267],{"class":105},"    \u002F\u002F })\n",[95,63269,63270],{"class":97,"line":1299},[95,63271,63272],{"class":105},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[95,63274,63275],{"class":97,"line":1311},[95,63276,63277],{"class":105},"    const input = document.querySelector('input')\n",[95,63279,63280],{"class":97,"line":1594},[95,63281,63282],{"class":105},"    input.addEventListener('keyup', function (e) {\n",[95,63284,63285],{"class":97,"line":1599},[95,63286,63287],{"class":105},"      if (e.key === 'Enter') {\n",[95,63289,63290],{"class":97,"line":1605},[95,63291,63292],{"class":105},"        console.log('我按下了回车键')\n",[95,63294,63295],{"class":97,"line":1610},[95,63296,52375],{"class":105},[95,63298,63299],{"class":97,"line":1624},[95,63300,33446],{"class":105},[95,63302,63303,63305,63307],{"class":97,"line":1629},[95,63304,52394],{"class":105},[95,63306,51790],{"class":51277},[95,63308,51284],{"class":105},[95,63310,63311,63313,63315],{"class":97,"line":1635},[95,63312,51762],{"class":105},[95,63314,51777],{"class":51277},[95,63316,51284],{"class":105},[21981,63318,63320],{"id":63319},"_3263-trim方法","3.2.6.3 trim方法",[10,63322,63323],{},[1444,63324],{"alt":14,"src":63325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[10,63327,63328],{},[1444,63329],{"alt":14,"src":63330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[10,63332,63333],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[10,63335,63336],{},"str.trim()",[66,63338,63340],{"id":63339},"_327-环境对象","3.2.7 环境对象",[10,63342,63343],{},[1444,63344],{"alt":14,"src":63345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[10,63347,63348],{},[1444,63349],{"alt":14,"src":63350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[10,63352,63353],{},[1444,63354],{"alt":14,"src":63355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[10,63357,63358],{},"实际函数调用是window.fn()",[10,63360,63361],{},"普通函数里面this指向的是window",[1113,63363,63364,63367,63370],{},[52,63365,63366],{},"在普通函数下，this指向的是window",[52,63368,63369],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[52,63371,63372],{},"箭头函数没有this",[10,63374,63375],{},"粗略记法就是：谁调用，this就指向谁",[10,63377,63378],{},[1444,63379],{"alt":14,"src":63380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[10,63382,63383],{},[1444,63384],{"alt":14,"src":63385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[10,63387,63388],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[10,63390,63391],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[86,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",[92,63396,63397,63405,63417,63425,63430,63435,63440,63445,63449,63457],{"__ignoreMap":14},[95,63398,63399,63401,63403],{"class":97,"line":98},[95,63400,1016],{"class":105},[95,63402,51777],{"class":51277},[95,63404,51284],{"class":105},[95,63406,63407,63409,63411,63413,63415],{"class":97,"line":15},[95,63408,52121],{"class":105},[95,63410,53864],{"class":51277},[95,63412,53870],{"class":105},[95,63414,53864],{"class":51277},[95,63416,51284],{"class":105},[95,63418,63419,63421,63423],{"class":97,"line":1161},[95,63420,52121],{"class":105},[95,63422,51790],{"class":51277},[95,63424,51284],{"class":105},[95,63426,63427],{"class":97,"line":1176},[95,63428,63429],{"class":105},"    const button = document.querySelector('button')\n",[95,63431,63432],{"class":97,"line":1182},[95,63433,63434],{"class":105},"    button.addEventListener('click', function () {\n",[95,63436,63437],{"class":97,"line":1196},[95,63438,63439],{"class":105},"      \u002F\u002F console.log(this);\n",[95,63441,63442],{"class":97,"line":1202},[95,63443,63444],{"class":105},"      this.style.color = 'pink'\n",[95,63446,63447],{"class":97,"line":1293},[95,63448,33446],{"class":105},[95,63450,63451,63453,63455],{"class":97,"line":1299},[95,63452,52394],{"class":105},[95,63454,51790],{"class":51277},[95,63456,51284],{"class":105},[95,63458,63459,63461,63463],{"class":97,"line":1311},[95,63460,51762],{"class":105},[95,63462,51777],{"class":51277},[95,63464,51284],{"class":105},[66,63466,63468],{"id":63467},"_328-回调函数","3.2.8 回调函数",[10,63470,63471],{},[1444,63472],{"alt":14,"src":63473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[10,63475,63476],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[10,63478,11315],{},[1113,63480,63481,63484,63487],{},[52,63482,63483],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[52,63485,63486],{},"回调函数本质还是函数，只不过把它当成参数使用",[52,63488,63489],{},"使用匿名函数做为回调函数比较常见",[66,63491,63493],{"id":63492},"_329-tab栏切换","3.2.9 tab栏切换",[10,63495,63496],{},[1444,63497],{"alt":14,"src":63498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[86,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",[92,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},[95,63505,63506,63508,63510,63512],{"class":97,"line":98},[95,63507,51274],{"class":105},[95,63509,51278],{"class":51277},[95,63511,51281],{"class":1945},[95,63513,51284],{"class":105},[95,63515,63516,63518,63520,63522,63524,63526],{"class":97,"line":15},[95,63517,1016],{"class":105},[95,63519,50612],{"class":51277},[95,63521,51293],{"class":1945},[95,63523,151],{"class":105},[95,63525,51298],{"class":210},[95,63527,51284],{"class":105},[95,63529,63530],{"class":97,"line":1161},[95,63531,2382],{"emptyLinePlaceholder":21},[95,63533,63534,63536,63538],{"class":97,"line":1176},[95,63535,1016],{"class":105},[95,63537,51311],{"class":51277},[95,63539,51284],{"class":105},[95,63541,63542,63544,63546,63548,63550,63552],{"class":97,"line":1182},[95,63543,52121],{"class":105},[95,63545,51321],{"class":51277},[95,63547,51324],{"class":1945},[95,63549,151],{"class":105},[95,63551,51329],{"class":210},[95,63553,59104],{"class":105},[95,63555,63556,63558,63560,63562,63564,63566,63568,63570,63572],{"class":97,"line":1196},[95,63557,52121],{"class":105},[95,63559,51321],{"class":51277},[95,63561,51340],{"class":1945},[95,63563,151],{"class":105},[95,63565,51345],{"class":210},[95,63567,51348],{"class":1945},[95,63569,151],{"class":105},[95,63571,51353],{"class":210},[95,63573,59104],{"class":105},[95,63575,63576,63578,63580,63582,63584,63586,63588,63590,63592],{"class":97,"line":1202},[95,63577,52121],{"class":105},[95,63579,51321],{"class":51277},[95,63581,14903],{"class":1945},[95,63583,151],{"class":105},[95,63585,51368],{"class":210},[95,63587,51348],{"class":1945},[95,63589,151],{"class":105},[95,63591,51375],{"class":210},[95,63593,59104],{"class":105},[95,63595,63596,63598,63600,63603,63605],{"class":97,"line":1293},[95,63597,52121],{"class":105},[95,63599,51384],{"class":51277},[95,63601,63602],{"class":105},">tab栏切换\u003C\u002F",[95,63604,51384],{"class":51277},[95,63606,51284],{"class":105},[95,63608,63609,63611,63613],{"class":97,"line":1299},[95,63610,52121],{"class":105},[95,63612,5109],{"class":51277},[95,63614,51284],{"class":105},[95,63616,63617,63619],{"class":97,"line":1311},[95,63618,6386],{"class":51277},[95,63620,15555],{"class":105},[95,63622,63623,63625,63627,63629],{"class":97,"line":1594},[95,63624,54683],{"class":154},[95,63626,51414],{"class":105},[95,63628,297],{"class":154},[95,63630,1272],{"class":105},[95,63632,63633,63635,63637,63639],{"class":97,"line":1599},[95,63634,54672],{"class":154},[95,63636,51414],{"class":105},[95,63638,297],{"class":154},[95,63640,1272],{"class":105},[95,63642,63643],{"class":97,"line":1605},[95,63644,2169],{"class":105},[95,63646,63647],{"class":97,"line":1610},[95,63648,2382],{"emptyLinePlaceholder":21},[95,63650,63651,63654],{"class":97,"line":1624},[95,63652,63653],{"class":1945},"    .tab",[95,63655,15555],{"class":105},[95,63657,63658,63660,63662,63665,63667],{"class":97,"line":1629},[95,63659,54748],{"class":154},[95,63661,51414],{"class":105},[95,63663,63664],{"class":154},"590",[95,63666,51469],{"class":101},[95,63668,1272],{"class":105},[95,63670,63671,63673,63675,63678,63680],{"class":97,"line":1635},[95,63672,54762],{"class":154},[95,63674,51414],{"class":105},[95,63676,63677],{"class":154},"340",[95,63679,51469],{"class":101},[95,63681,1272],{"class":105},[95,63683,63684,63686,63688,63690,63692],{"class":97,"line":1656},[95,63685,54683],{"class":154},[95,63687,51414],{"class":105},[95,63689,806],{"class":154},[95,63691,51469],{"class":101},[95,63693,1272],{"class":105},[95,63695,63696,63698,63700,63702,63704,63706,63708],{"class":97,"line":1661},[95,63697,61954],{"class":154},[95,63699,51414],{"class":105},[95,63701,323],{"class":154},[95,63703,51469],{"class":101},[95,63705,51498],{"class":154},[95,63707,62221],{"class":154},[95,63709,1272],{"class":105},[95,63711,63712],{"class":97,"line":1675},[95,63713,2169],{"class":105},[95,63715,63716],{"class":97,"line":1680},[95,63717,2382],{"emptyLinePlaceholder":21},[95,63719,63720,63723],{"class":97,"line":1709},[95,63721,63722],{"class":1945},"    .tab-nav",[95,63724,15555],{"class":105},[95,63726,63727,63729,63731,63733,63735],{"class":97,"line":1714},[95,63728,54748],{"class":154},[95,63730,51414],{"class":105},[95,63732,417],{"class":154},[95,63734,434],{"class":101},[95,63736,1272],{"class":105},[95,63738,63739,63741,63743,63745,63747],{"class":97,"line":1731},[95,63740,54762],{"class":154},[95,63742,51414],{"class":105},[95,63744,1013],{"class":154},[95,63746,51469],{"class":101},[95,63748,1272],{"class":105},[95,63750,63751,63753,63755,63757,63759],{"class":97,"line":1736},[95,63752,57336],{"class":154},[95,63754,51414],{"class":105},[95,63756,1013],{"class":154},[95,63758,51469],{"class":101},[95,63760,1272],{"class":105},[95,63762,63763,63765,63767,63769],{"class":97,"line":1741},[95,63764,54986],{"class":154},[95,63766,51414],{"class":105},[95,63768,51454],{"class":154},[95,63770,1272],{"class":105},[95,63772,63773,63775,63777,63779],{"class":97,"line":1746},[95,63774,54997],{"class":154},[95,63776,51414],{"class":105},[95,63778,51645],{"class":154},[95,63780,1272],{"class":105},[95,63782,63783],{"class":97,"line":1760},[95,63784,2169],{"class":105},[95,63786,63787],{"class":97,"line":1765},[95,63788,2382],{"emptyLinePlaceholder":21},[95,63790,63791,63793,63796],{"class":97,"line":2559},[95,63792,63722],{"class":1945},[95,63794,63795],{"class":51277}," h3",[95,63797,15555],{"class":105},[95,63799,63800,63802,63804,63806,63808],{"class":97,"line":2573},[95,63801,54899],{"class":154},[95,63803,51414],{"class":105},[95,63805,906],{"class":154},[95,63807,51469],{"class":101},[95,63809,1272],{"class":105},[95,63811,63812,63814,63816,63819],{"class":97,"line":2581},[95,63813,62311],{"class":154},[95,63815,51414],{"class":105},[95,63817,63818],{"class":154},"normal",[95,63820,1272],{"class":105},[95,63822,63823,63825,63827,63829,63831],{"class":97,"line":2586},[95,63824,61977],{"class":154},[95,63826,51414],{"class":105},[95,63828,806],{"class":154},[95,63830,51469],{"class":101},[95,63832,1272],{"class":105},[95,63834,63835],{"class":97,"line":2592},[95,63836,2169],{"class":105},[95,63838,63839],{"class":97,"line":2598},[95,63840,2382],{"emptyLinePlaceholder":21},[95,63842,63843,63845,63847],{"class":97,"line":2603},[95,63844,63722],{"class":1945},[95,63846,61269],{"class":51277},[95,63848,15555],{"class":105},[95,63850,63851,63853,63855,63857],{"class":97,"line":7931},[95,63852,54709],{"class":154},[95,63854,51414],{"class":105},[95,63856,54714],{"class":154},[95,63858,1272],{"class":105},[95,63860,63861,63863,63865,63867],{"class":97,"line":7955},[95,63862,54986],{"class":154},[95,63864,51414],{"class":105},[95,63866,51454],{"class":154},[95,63868,1272],{"class":105},[95,63870,63871,63873,63875,63877],{"class":97,"line":7960},[95,63872,54997],{"class":154},[95,63874,51414],{"class":105},[95,63876,51557],{"class":154},[95,63878,1272],{"class":105},[95,63880,63881],{"class":97,"line":7966},[95,63882,2169],{"class":105},[95,63884,63885],{"class":97,"line":7993},[95,63886,2382],{"emptyLinePlaceholder":21},[95,63888,63889,63891,63893,63895],{"class":97,"line":7998},[95,63890,63722],{"class":1945},[95,63892,61269],{"class":51277},[95,63894,55052],{"class":51277},[95,63896,15555],{"class":105},[95,63898,63899,63901,63903,63905,63907,63909],{"class":97,"line":8004},[95,63900,54683],{"class":154},[95,63902,51414],{"class":105},[95,63904,297],{"class":154},[95,63906,8933],{"class":154},[95,63908,51469],{"class":101},[95,63910,1272],{"class":105},[95,63912,63913,63915,63917,63919,63921],{"class":97,"line":8016},[95,63914,54899],{"class":154},[95,63916,51414],{"class":105},[95,63918,655],{"class":154},[95,63920,51469],{"class":101},[95,63922,1272],{"class":105},[95,63924,63925],{"class":97,"line":8028},[95,63926,2169],{"class":105},[95,63928,63929],{"class":97,"line":8040},[95,63930,2382],{"emptyLinePlaceholder":21},[95,63932,63933,63935,63937,63939,63941],{"class":97,"line":9699},[95,63934,63722],{"class":1945},[95,63936,61269],{"class":51277},[95,63938,55052],{"class":51277},[95,63940,1380],{"class":51277},[95,63942,15555],{"class":105},[95,63944,63945,63948,63950,63952],{"class":97,"line":9724},[95,63946,63947],{"class":154},"      text-decoration",[95,63949,51414],{"class":105},[95,63951,54714],{"class":154},[95,63953,1272],{"class":105},[95,63955,63956,63958,63960,63962,63964,63966,63969],{"class":97,"line":9747},[95,63957,62209],{"class":154},[95,63959,51414],{"class":105},[95,63961,183],{"class":154},[95,63963,51469],{"class":101},[95,63965,51498],{"class":154},[95,63967,63968],{"class":154}," transparent",[95,63970,1272],{"class":105},[95,63972,63973,63975,63977,63979],{"class":97,"line":9771},[95,63974,57393],{"class":154},[95,63976,51414],{"class":105},[95,63978,62346],{"class":154},[95,63980,1272],{"class":105},[95,63982,63983],{"class":97,"line":9776},[95,63984,2169],{"class":105},[95,63986,63987],{"class":97,"line":9781},[95,63988,2382],{"emptyLinePlaceholder":21},[95,63990,63991,63993,63995,63997,63999,64002],{"class":97,"line":9786},[95,63992,63722],{"class":1945},[95,63994,61269],{"class":51277},[95,63996,55052],{"class":51277},[95,63998,1380],{"class":51277},[95,64000,64001],{"class":1945},".active",[95,64003,15555],{"class":105},[95,64005,64006,64008,64010,64013],{"class":97,"line":9795},[95,64007,61768],{"class":154},[95,64009,51414],{"class":105},[95,64011,64012],{"class":154},"#e1251b",[95,64014,1272],{"class":105},[95,64016,64017,64019,64021,64023],{"class":97,"line":9800},[95,64018,57393],{"class":154},[95,64020,51414],{"class":105},[95,64022,64012],{"class":154},[95,64024,1272],{"class":105},[95,64026,64027],{"class":97,"line":9806},[95,64028,2169],{"class":105},[95,64030,64031],{"class":97,"line":9827},[95,64032,2382],{"emptyLinePlaceholder":21},[95,64034,64035,64038],{"class":97,"line":9833},[95,64036,64037],{"class":1945},"    .tab-content",[95,64039,15555],{"class":105},[95,64041,64042,64044,64046,64048,64051,64053],{"class":97,"line":9847},[95,64043,54672],{"class":154},[95,64045,51414],{"class":105},[95,64047,297],{"class":154},[95,64049,64050],{"class":154}," 16",[95,64052,51469],{"class":101},[95,64054,1272],{"class":105},[95,64056,64057],{"class":97,"line":9853},[95,64058,2169],{"class":105},[95,64060,64061],{"class":97,"line":9880},[95,64062,2382],{"emptyLinePlaceholder":21},[95,64064,64065,64067,64069],{"class":97,"line":9889},[95,64066,64037],{"class":1945},[95,64068,62151],{"class":1945},[95,64070,15555],{"class":105},[95,64072,64073,64075,64077,64079],{"class":97,"line":9895},[95,64074,54986],{"class":154},[95,64076,51414],{"class":105},[95,64078,54714],{"class":154},[95,64080,1272],{"class":105},[95,64082,64083],{"class":97,"line":9903},[95,64084,2169],{"class":105},[95,64086,64087],{"class":97,"line":9908},[95,64088,2382],{"emptyLinePlaceholder":21},[95,64090,64091,64093,64096],{"class":97,"line":16587},[95,64092,64037],{"class":1945},[95,64094,64095],{"class":1945}," .item.active",[95,64097,15555],{"class":105},[95,64099,64100,64102,64104,64106],{"class":97,"line":16593},[95,64101,54986],{"class":154},[95,64103,51414],{"class":105},[95,64105,60846],{"class":154},[95,64107,1272],{"class":105},[95,64109,64110],{"class":97,"line":16616},[95,64111,2169],{"class":105},[95,64113,64114,64116,64118],{"class":97,"line":16622},[95,64115,52394],{"class":105},[95,64117,5109],{"class":51277},[95,64119,51284],{"class":105},[95,64121,64122,64124,64126],{"class":97,"line":16645},[95,64123,51762],{"class":105},[95,64125,51311],{"class":51277},[95,64127,51284],{"class":105},[95,64129,64130],{"class":97,"line":16659},[95,64131,2382],{"emptyLinePlaceholder":21},[95,64133,64134,64136,64138],{"class":97,"line":16679},[95,64135,1016],{"class":105},[95,64137,51777],{"class":51277},[95,64139,51284],{"class":105},[95,64141,64142,64144,64146,64148,64150,64153],{"class":97,"line":16685},[95,64143,52121],{"class":105},[95,64145,51588],{"class":51277},[95,64147,53463],{"class":1945},[95,64149,151],{"class":105},[95,64151,64152],{"class":210},"\"tab\"",[95,64154,51284],{"class":105},[95,64156,64157,64159,64161,64163,64165,64168],{"class":97,"line":16696},[95,64158,51318],{"class":105},[95,64160,51588],{"class":51277},[95,64162,53463],{"class":1945},[95,64164,151],{"class":105},[95,64166,64167],{"class":210},"\"tab-nav\"",[95,64169,51284],{"class":105},[95,64171,64172,64174,64176,64179,64181],{"class":97,"line":16719},[95,64173,55211],{"class":105},[95,64175,66],{"class":51277},[95,64177,64178],{"class":105},">每日特价\u003C\u002F",[95,64180,66],{"class":51277},[95,64182,51284],{"class":105},[95,64184,64185,64187,64189],{"class":97,"line":16741},[95,64186,55211],{"class":105},[95,64188,1113],{"class":51277},[95,64190,51284],{"class":105},[95,64192,64193,64195,64197,64199,64201,64203,64205,64207,64209,64211,64214,64217,64219,64221,64223],{"class":97,"line":16746},[95,64194,55279],{"class":105},[95,64196,52],{"class":51277},[95,64198,61029],{"class":105},[95,64200,344],{"class":51277},[95,64202,53463],{"class":1945},[95,64204,151],{"class":105},[95,64206,59683],{"class":210},[95,64208,61034],{"class":1945},[95,64210,151],{"class":105},[95,64212,64213],{"class":210},"\"javascript:;\"",[95,64215,64216],{"class":105},">精选\u003C\u002F",[95,64218,344],{"class":51277},[95,64220,55291],{"class":105},[95,64222,52],{"class":51277},[95,64224,51284],{"class":105},[95,64226,64227,64229,64231,64233,64235,64237,64239,64241,64244,64246,64248,64250],{"class":97,"line":16752},[95,64228,55279],{"class":105},[95,64230,52],{"class":51277},[95,64232,61029],{"class":105},[95,64234,344],{"class":51277},[95,64236,61034],{"class":1945},[95,64238,151],{"class":105},[95,64240,64213],{"class":210},[95,64242,64243],{"class":105},">美食\u003C\u002F",[95,64245,344],{"class":51277},[95,64247,55291],{"class":105},[95,64249,52],{"class":51277},[95,64251,51284],{"class":105},[95,64253,64254,64256,64258,64260,64262,64264,64266,64268,64271,64273,64275,64277],{"class":97,"line":16766},[95,64255,55279],{"class":105},[95,64257,52],{"class":51277},[95,64259,61029],{"class":105},[95,64261,344],{"class":51277},[95,64263,61034],{"class":1945},[95,64265,151],{"class":105},[95,64267,64213],{"class":210},[95,64269,64270],{"class":105},">百货\u003C\u002F",[95,64272,344],{"class":51277},[95,64274,55291],{"class":105},[95,64276,52],{"class":51277},[95,64278,51284],{"class":105},[95,64280,64281,64283,64285,64287,64289,64291,64293,64295,64298,64300,64302,64304],{"class":97,"line":16779},[95,64282,55279],{"class":105},[95,64284,52],{"class":51277},[95,64286,61029],{"class":105},[95,64288,344],{"class":51277},[95,64290,61034],{"class":1945},[95,64292,151],{"class":105},[95,64294,64213],{"class":210},[95,64296,64297],{"class":105},">个护\u003C\u002F",[95,64299,344],{"class":51277},[95,64301,55291],{"class":105},[95,64303,52],{"class":51277},[95,64305,51284],{"class":105},[95,64307,64308,64310,64312,64314,64316,64318,64320,64322,64325,64327,64329,64331],{"class":97,"line":16784},[95,64309,55279],{"class":105},[95,64311,52],{"class":51277},[95,64313,61029],{"class":105},[95,64315,344],{"class":51277},[95,64317,61034],{"class":1945},[95,64319,151],{"class":105},[95,64321,64213],{"class":210},[95,64323,64324],{"class":105},">预告\u003C\u002F",[95,64326,344],{"class":51277},[95,64328,55291],{"class":105},[95,64330,52],{"class":51277},[95,64332,51284],{"class":105},[95,64334,64335,64337,64339],{"class":97,"line":16798},[95,64336,55384],{"class":105},[95,64338,1113],{"class":51277},[95,64340,51284],{"class":105},[95,64342,64343,64345,64347],{"class":97,"line":16803},[95,64344,51753],{"class":105},[95,64346,51588],{"class":51277},[95,64348,51284],{"class":105},[95,64350,64351,64353,64355,64357,64359,64362],{"class":97,"line":16809},[95,64352,51318],{"class":105},[95,64354,51588],{"class":51277},[95,64356,53463],{"class":1945},[95,64358,151],{"class":105},[95,64360,64361],{"class":210},"\"tab-content\"",[95,64363,51284],{"class":105},[95,64365,64366,64368,64370,64372,64374,64377,64379,64381,64383,64385,64388,64390,64392,64394,64397,64399],{"class":97,"line":16814},[95,64367,55211],{"class":105},[95,64369,51588],{"class":51277},[95,64371,53463],{"class":1945},[95,64373,151],{"class":105},[95,64375,64376],{"class":210},"\"item active\"",[95,64378,61029],{"class":105},[95,64380,1444],{"class":51277},[95,64382,55216],{"class":1945},[95,64384,151],{"class":105},[95,64386,64387],{"class":210},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[95,64389,55224],{"class":1945},[95,64391,151],{"class":105},[95,64393,7635],{"class":210},[95,64395,64396],{"class":105}," \u002F>\u003C\u002F",[95,64398,51588],{"class":51277},[95,64400,51284],{"class":105},[95,64402,64403,64405,64407,64409,64411,64413,64415,64417,64419,64421,64424,64426,64428,64430,64432,64434],{"class":97,"line":16828},[95,64404,55211],{"class":105},[95,64406,51588],{"class":51277},[95,64408,53463],{"class":1945},[95,64410,151],{"class":105},[95,64412,62600],{"class":210},[95,64414,61029],{"class":105},[95,64416,1444],{"class":51277},[95,64418,55216],{"class":1945},[95,64420,151],{"class":105},[95,64422,64423],{"class":210},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[95,64425,55224],{"class":1945},[95,64427,151],{"class":105},[95,64429,7635],{"class":210},[95,64431,64396],{"class":105},[95,64433,51588],{"class":51277},[95,64435,51284],{"class":105},[95,64437,64438,64440,64442,64444,64446,64448,64450,64452,64454,64456,64459,64461,64463,64465,64467,64469],{"class":97,"line":16833},[95,64439,55211],{"class":105},[95,64441,51588],{"class":51277},[95,64443,53463],{"class":1945},[95,64445,151],{"class":105},[95,64447,62600],{"class":210},[95,64449,61029],{"class":105},[95,64451,1444],{"class":51277},[95,64453,55216],{"class":1945},[95,64455,151],{"class":105},[95,64457,64458],{"class":210},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[95,64460,55224],{"class":1945},[95,64462,151],{"class":105},[95,64464,7635],{"class":210},[95,64466,64396],{"class":105},[95,64468,51588],{"class":51277},[95,64470,51284],{"class":105},[95,64472,64473,64475,64477,64479,64481,64483,64485,64487,64489,64491,64494,64496,64498,64500,64502,64504],{"class":97,"line":16838},[95,64474,55211],{"class":105},[95,64476,51588],{"class":51277},[95,64478,53463],{"class":1945},[95,64480,151],{"class":105},[95,64482,62600],{"class":210},[95,64484,61029],{"class":105},[95,64486,1444],{"class":51277},[95,64488,55216],{"class":1945},[95,64490,151],{"class":105},[95,64492,64493],{"class":210},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[95,64495,55224],{"class":1945},[95,64497,151],{"class":105},[95,64499,7635],{"class":210},[95,64501,64396],{"class":105},[95,64503,51588],{"class":51277},[95,64505,51284],{"class":105},[95,64507,64508,64510,64512,64514,64516,64518,64520,64522,64524,64526,64529,64531,64533,64535,64537,64539],{"class":97,"line":16852},[95,64509,55211],{"class":105},[95,64511,51588],{"class":51277},[95,64513,53463],{"class":1945},[95,64515,151],{"class":105},[95,64517,62600],{"class":210},[95,64519,61029],{"class":105},[95,64521,1444],{"class":51277},[95,64523,55216],{"class":1945},[95,64525,151],{"class":105},[95,64527,64528],{"class":210},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[95,64530,55224],{"class":1945},[95,64532,151],{"class":105},[95,64534,7635],{"class":210},[95,64536,64396],{"class":105},[95,64538,51588],{"class":51277},[95,64540,51284],{"class":105},[95,64542,64543,64545,64547],{"class":97,"line":16864},[95,64544,51753],{"class":105},[95,64546,51588],{"class":51277},[95,64548,51284],{"class":105},[95,64550,64551,64553,64555],{"class":97,"line":16869},[95,64552,52394],{"class":105},[95,64554,51588],{"class":51277},[95,64556,51284],{"class":105},[95,64558,64559,64561,64563],{"class":97,"line":16882},[95,64560,52121],{"class":105},[95,64562,51790],{"class":51277},[95,64564,51284],{"class":105},[95,64566,64567],{"class":97,"line":16887},[95,64568,64569],{"class":164},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[95,64571,64572],{"class":97,"line":16892},[95,64573,64574],{"class":164},"    \u002F\u002F 1.1 获取 a 元素 \n",[95,64576,64577,64579,64582,64584,64586,64588,64590,64593],{"class":97,"line":16897},[95,64578,11204],{"class":101},[95,64580,64581],{"class":154}," as",[95,64583,13547],{"class":101},[95,64585,54373],{"class":105},[95,64587,55658],{"class":1945},[95,64589,106],{"class":105},[95,64591,64592],{"class":210},"'.tab-nav a'",[95,64594,112],{"class":105},[95,64596,64597],{"class":97,"line":16910},[95,64598,64599],{"class":164},"    \u002F\u002F console.log(as) \n",[95,64601,64602,64604,64606,64608,64610,64612,64614,64616,64618,64621,64623,64625,64627],{"class":97,"line":16915},[95,64603,3183],{"class":101},[95,64605,1640],{"class":105},[95,64607,51824],{"class":101},[95,64609,9421],{"class":105},[95,64611,151],{"class":101},[95,64613,4075],{"class":154},[95,64615,9428],{"class":105},[95,64617,1016],{"class":101},[95,64619,64620],{"class":105}," as.",[95,64622,51945],{"class":154},[95,64624,3196],{"class":105},[95,64626,2274],{"class":101},[95,64628,12425],{"class":105},[95,64630,64631],{"class":97,"line":32618},[95,64632,64633],{"class":164},"      \u002F\u002F console.log(as[i])\n",[95,64635,64636],{"class":97,"line":32624},[95,64637,64638],{"class":164},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[95,64640,64641,64644,64646,64648,64651,64653,64655],{"class":97,"line":32630},[95,64642,64643],{"class":105},"      as[i].",[95,64645,57790],{"class":1945},[95,64647,106],{"class":105},[95,64649,64650],{"class":210},"'mouseenter'",[95,64652,12418],{"class":105},[95,64654,54426],{"class":101},[95,64656,54429],{"class":105},[95,64658,64659],{"class":97,"line":32636},[95,64660,64661],{"class":164},"        \u002F\u002F console.log('鼠标经过')\n",[95,64663,64664],{"class":97,"line":32642},[95,64665,64666],{"class":164},"        \u002F\u002F 排他思想  \n",[95,64668,64669],{"class":97,"line":32653},[95,64670,64671],{"class":164},"        \u002F\u002F 干掉别人 移除类active\n",[95,64673,64674,64676,64678,64680,64683,64685,64687,64689,64692],{"class":97,"line":32659},[95,64675,51902],{"class":105},[95,64677,54376],{"class":1945},[95,64679,106],{"class":105},[95,64681,64682],{"class":210},"'.tab-nav .active'",[95,64684,56980],{"class":105},[95,64686,56983],{"class":1945},[95,64688,106],{"class":105},[95,64690,64691],{"class":210},"'active'",[95,64693,112],{"class":105},[95,64695,64696],{"class":97,"line":32679},[95,64697,64698],{"class":164},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[95,64700,64701,64704,64707,64709,64711,64713],{"class":97,"line":32685},[95,64702,64703],{"class":154},"        this",[95,64705,64706],{"class":105},".classList.",[95,64708,5317],{"class":1945},[95,64710,106],{"class":105},[95,64712,64691],{"class":210},[95,64714,112],{"class":105},[95,64716,64717],{"class":97,"line":32696},[95,64718,2382],{"emptyLinePlaceholder":21},[95,64720,64721],{"class":97,"line":32702},[95,64722,64723],{"class":164},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[95,64725,64726],{"class":97,"line":32708},[95,64727,64728],{"class":164},"        \u002F\u002F 干掉别人\n",[95,64730,64731,64733,64735,64737,64740,64742,64744,64746,64748],{"class":97,"line":32714},[95,64732,51902],{"class":105},[95,64734,54376],{"class":1945},[95,64736,106],{"class":105},[95,64738,64739],{"class":210},"'.tab-content .active'",[95,64741,56980],{"class":105},[95,64743,56983],{"class":1945},[95,64745,106],{"class":105},[95,64747,64691],{"class":210},[95,64749,112],{"class":105},[95,64751,64752],{"class":97,"line":32720},[95,64753,64754],{"class":164},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[95,64756,64757,64759,64761,64763,64766,64768,64770,64772,64774,64776,64778,64780,64782],{"class":97,"line":32726},[95,64758,51902],{"class":105},[95,64760,54376],{"class":1945},[95,64762,106],{"class":105},[95,64764,64765],{"class":210},"`.tab-content .item:nth-child(${",[95,64767,547],{"class":105},[95,64769,45551],{"class":101},[95,64771,25103],{"class":154},[95,64773,57009],{"class":210},[95,64775,56980],{"class":105},[95,64777,5317],{"class":1945},[95,64779,106],{"class":105},[95,64781,64691],{"class":210},[95,64783,112],{"class":105},[95,64785,64786],{"class":97,"line":32732},[95,64787,2382],{"emptyLinePlaceholder":21},[95,64789,64790],{"class":97,"line":32738},[95,64791,64792],{"class":105},"      })\n",[95,64794,64795],{"class":97,"line":32758},[95,64796,2169],{"class":105},[95,64798,64799,64801,64803],{"class":97,"line":32764},[95,64800,52394],{"class":105},[95,64802,51790],{"class":51277},[95,64804,51284],{"class":105},[95,64806,64807,64809,64811],{"class":97,"line":32780},[95,64808,51762],{"class":105},[95,64810,51777],{"class":51277},[95,64812,51284],{"class":105},[95,64814,64815],{"class":97,"line":32786},[95,64816,2382],{"emptyLinePlaceholder":21},[95,64818,64819,64821,64823],{"class":97,"line":32800},[95,64820,51762],{"class":105},[95,64822,50612],{"class":51277},[95,64824,51284],{"class":105},[10,64826,64827],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[10,64829,64830],{},"在监听事件中，this指向的就是他的调用者",[10,64832,64833],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[10,64835,53697],{},[10,64837,64838],{},"(function () {",[10,64840,64841],{},"const list = document.querySelector('.xtx-elevator-list')",[10,64843,64844],{},"list.addEventListener('click', function (e) {",[10,64846,64847],{},"if (e.target.tagName === 'A') {",[10,64849,64850],{},"\u002F\u002F 排他思想",[10,64852,64853],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[10,64855,64856],{},"const old = document.querySelector('.xtx-elevator-list .active')",[10,64858,64859],{},"\u002F\u002F console.log(old);",[10,64861,64862],{},"\u002F\u002F 判断",[10,64864,64865],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[10,64867,64868],{},"if (old) old.classList.remove('active')",[10,64870,64871],{},"e.target.classList.add('active')",[10,64873,1052],{},[10,64875,52441],{},[10,64877,64878],{},"})();",[66,64880,64882],{"id":64881},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[86,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",[92,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},[95,64889,64890,64892,64894,64896],{"class":97,"line":98},[95,64891,51274],{"class":105},[95,64893,51278],{"class":51277},[95,64895,51281],{"class":1945},[95,64897,51284],{"class":105},[95,64899,64900],{"class":97,"line":15},[95,64901,2382],{"emptyLinePlaceholder":21},[95,64903,64904,64906,64908],{"class":97,"line":1161},[95,64905,1016],{"class":105},[95,64907,50612],{"class":51277},[95,64909,51284],{"class":105},[95,64911,64912],{"class":97,"line":1176},[95,64913,2382],{"emptyLinePlaceholder":21},[95,64915,64916,64918,64920,64922,64924,64926],{"class":97,"line":1182},[95,64917,1016],{"class":105},[95,64919,51311],{"class":51277},[95,64921,51293],{"class":1945},[95,64923,151],{"class":105},[95,64925,51298],{"class":210},[95,64927,51284],{"class":105},[95,64929,64930,64932,64934,64936,64938,64940],{"class":97,"line":1196},[95,64931,52121],{"class":105},[95,64933,51321],{"class":51277},[95,64935,51324],{"class":1945},[95,64937,151],{"class":105},[95,64939,51329],{"class":210},[95,64941,51284],{"class":105},[95,64943,64944,64946,64948,64950,64952],{"class":97,"line":1202},[95,64945,52121],{"class":105},[95,64947,51384],{"class":51277},[95,64949,55291],{"class":105},[95,64951,51384],{"class":51277},[95,64953,51284],{"class":105},[95,64955,64956,64958,64960],{"class":97,"line":1293},[95,64957,52121],{"class":105},[95,64959,5109],{"class":51277},[95,64961,51284],{"class":105},[95,64963,64964,64966],{"class":97,"line":1299},[95,64965,6386],{"class":51277},[95,64967,15555],{"class":105},[95,64969,64970,64972,64974,64976],{"class":97,"line":1311},[95,64971,54683],{"class":154},[95,64973,51414],{"class":105},[95,64975,297],{"class":154},[95,64977,1272],{"class":105},[95,64979,64980,64982,64984,64986],{"class":97,"line":1594},[95,64981,54672],{"class":154},[95,64983,51414],{"class":105},[95,64985,297],{"class":154},[95,64987,1272],{"class":105},[95,64989,64990],{"class":97,"line":1599},[95,64991,2169],{"class":105},[95,64993,64994],{"class":97,"line":1605},[95,64995,2382],{"emptyLinePlaceholder":21},[95,64997,64998,65001],{"class":97,"line":1610},[95,64999,65000],{"class":51277},"    table",[95,65002,15555],{"class":105},[95,65004,65005,65008,65010,65013],{"class":97,"line":1624},[95,65006,65007],{"class":154},"      border-collapse",[95,65009,51414],{"class":105},[95,65011,65012],{"class":154},"collapse",[95,65014,1272],{"class":105},[95,65016,65017,65020,65022,65024],{"class":97,"line":1629},[95,65018,65019],{"class":154},"      border-spacing",[95,65021,51414],{"class":105},[95,65023,297],{"class":154},[95,65025,1272],{"class":105},[95,65027,65028,65030,65032,65034,65036,65038,65041],{"class":97,"line":1635},[95,65029,61954],{"class":154},[95,65031,51414],{"class":105},[95,65033,323],{"class":154},[95,65035,51469],{"class":101},[95,65037,51498],{"class":154},[95,65039,65040],{"class":154}," #c0c0c0",[95,65042,1272],{"class":105},[95,65044,65045,65047,65049,65052,65054],{"class":97,"line":1656},[95,65046,54748],{"class":154},[95,65048,51414],{"class":105},[95,65050,65051],{"class":154},"500",[95,65053,51469],{"class":101},[95,65055,1272],{"class":105},[95,65057,65058,65060,65062,65064,65066,65068],{"class":97,"line":1661},[95,65059,54683],{"class":154},[95,65061,51414],{"class":105},[95,65063,417],{"class":154},[95,65065,51469],{"class":101},[95,65067,51533],{"class":154},[95,65069,1272],{"class":105},[95,65071,65072,65074,65076,65078],{"class":97,"line":1675},[95,65073,57263],{"class":154},[95,65075,51414],{"class":105},[95,65077,51569],{"class":154},[95,65079,1272],{"class":105},[95,65081,65082],{"class":97,"line":1680},[95,65083,2169],{"class":105},[95,65085,65086],{"class":97,"line":1709},[95,65087,2382],{"emptyLinePlaceholder":21},[95,65089,65090,65093],{"class":97,"line":1714},[95,65091,65092],{"class":51277},"    th",[95,65094,15555],{"class":105},[95,65096,65097,65099,65101,65104],{"class":97,"line":1731},[95,65098,54861],{"class":154},[95,65100,51414],{"class":105},[95,65102,65103],{"class":154},"#09c",[95,65105,1272],{"class":105},[95,65107,65108,65111,65113,65115,65117,65119,65122],{"class":97,"line":1736},[95,65109,65110],{"class":154},"      font",[95,65112,51414],{"class":105},[95,65114,62316],{"class":154},[95,65116,64050],{"class":154},[95,65118,51469],{"class":101},[95,65120,65121],{"class":210}," \"微软雅黑\"",[95,65123,1272],{"class":105},[95,65125,65126,65128,65130,65132],{"class":97,"line":1741},[95,65127,57393],{"class":154},[95,65129,51414],{"class":105},[95,65131,60819],{"class":154},[95,65133,1272],{"class":105},[95,65135,65136,65138,65140,65142,65144],{"class":97,"line":1746},[95,65137,54762],{"class":154},[95,65139,51414],{"class":105},[95,65141,906],{"class":154},[95,65143,51469],{"class":101},[95,65145,1272],{"class":105},[95,65147,65148],{"class":97,"line":1760},[95,65149,2169],{"class":105},[95,65151,65152],{"class":97,"line":1765},[95,65153,2382],{"emptyLinePlaceholder":21},[95,65155,65156,65159],{"class":97,"line":2559},[95,65157,65158],{"class":51277},"    td",[95,65160,15555],{"class":105},[95,65162,65163,65165,65167,65169,65171,65173,65176],{"class":97,"line":2573},[95,65164,61954],{"class":154},[95,65166,51414],{"class":105},[95,65168,323],{"class":154},[95,65170,51469],{"class":101},[95,65172,51498],{"class":154},[95,65174,65175],{"class":154}," #d0d0d0",[95,65177,1272],{"class":105},[95,65179,65180,65182,65184,65187],{"class":97,"line":2581},[95,65181,57393],{"class":154},[95,65183,51414],{"class":105},[95,65185,65186],{"class":154},"#404060",[95,65188,1272],{"class":105},[95,65190,65191,65193,65195,65197,65199],{"class":97,"line":2586},[95,65192,54672],{"class":154},[95,65194,51414],{"class":105},[95,65196,552],{"class":154},[95,65198,51469],{"class":101},[95,65200,1272],{"class":105},[95,65202,65203],{"class":97,"line":2592},[95,65204,2169],{"class":105},[95,65206,65207],{"class":97,"line":2598},[95,65208,2382],{"emptyLinePlaceholder":21},[95,65210,65211,65214],{"class":97,"line":2603},[95,65212,65213],{"class":1945},"    .allCheck",[95,65215,15555],{"class":105},[95,65217,65218,65220,65222,65224,65226],{"class":97,"line":7931},[95,65219,54748],{"class":154},[95,65221,51414],{"class":105},[95,65223,718],{"class":154},[95,65225,51469],{"class":101},[95,65227,1272],{"class":105},[95,65229,65230],{"class":97,"line":7955},[95,65231,2169],{"class":105},[95,65233,65234,65236,65238],{"class":97,"line":7960},[95,65235,52394],{"class":105},[95,65237,5109],{"class":51277},[95,65239,51284],{"class":105},[95,65241,65242,65244,65246],{"class":97,"line":7966},[95,65243,51762],{"class":105},[95,65245,51311],{"class":51277},[95,65247,51284],{"class":105},[95,65249,65250],{"class":97,"line":7993},[95,65251,2382],{"emptyLinePlaceholder":21},[95,65253,65254,65256,65258],{"class":97,"line":7998},[95,65255,1016],{"class":105},[95,65257,51777],{"class":51277},[95,65259,51284],{"class":105},[95,65261,65262,65264,65266],{"class":97,"line":8004},[95,65263,52121],{"class":105},[95,65265,243],{"class":51277},[95,65267,51284],{"class":105},[95,65269,65270,65272,65274],{"class":97,"line":8016},[95,65271,51318],{"class":105},[95,65273,249],{"class":51277},[95,65275,51284],{"class":105},[95,65277,65278,65280,65282,65284,65286,65289],{"class":97,"line":8028},[95,65279,55211],{"class":105},[95,65281,252],{"class":51277},[95,65283,53463],{"class":1945},[95,65285,151],{"class":105},[95,65287,65288],{"class":210},"\"allCheck\"",[95,65290,51284],{"class":105},[95,65292,65293,65295,65297,65299,65301,65303,65305,65307,65309,65311,65313,65316,65319,65321,65323,65325,65328,65331,65333],{"class":97,"line":8040},[95,65294,55279],{"class":105},[95,65296,53798],{"class":51277},[95,65298,53801],{"class":1945},[95,65300,151],{"class":105},[95,65302,53806],{"class":210},[95,65304,14903],{"class":1945},[95,65306,151],{"class":105},[95,65308,7635],{"class":210},[95,65310,14942],{"class":1945},[95,65312,151],{"class":105},[95,65314,65315],{"class":210},"\"checkAll\"",[95,65317,65318],{"class":105},"> \u003C",[95,65320,95],{"class":51277},[95,65322,53463],{"class":1945},[95,65324,151],{"class":105},[95,65326,65327],{"class":210},"\"all\"",[95,65329,65330],{"class":105},">全选\u003C\u002F",[95,65332,95],{"class":51277},[95,65334,51284],{"class":105},[95,65336,65337,65339,65341],{"class":97,"line":9699},[95,65338,55384],{"class":105},[95,65340,252],{"class":51277},[95,65342,51284],{"class":105},[95,65344,65345,65347,65349,65352,65354],{"class":97,"line":9724},[95,65346,55211],{"class":105},[95,65348,252],{"class":51277},[95,65350,65351],{"class":105},">商品\u003C\u002F",[95,65353,252],{"class":51277},[95,65355,51284],{"class":105},[95,65357,65358,65360,65362,65365,65367],{"class":97,"line":9747},[95,65359,55211],{"class":105},[95,65361,252],{"class":51277},[95,65363,65364],{"class":105},">商家\u003C\u002F",[95,65366,252],{"class":51277},[95,65368,51284],{"class":105},[95,65370,65371,65373,65375,65378,65380],{"class":97,"line":9771},[95,65372,55211],{"class":105},[95,65374,252],{"class":51277},[95,65376,65377],{"class":105},">价格\u003C\u002F",[95,65379,252],{"class":51277},[95,65381,51284],{"class":105},[95,65383,65384,65386,65388],{"class":97,"line":9776},[95,65385,51753],{"class":105},[95,65387,249],{"class":51277},[95,65389,51284],{"class":105},[95,65391,65392,65394,65396],{"class":97,"line":9781},[95,65393,51318],{"class":105},[95,65395,249],{"class":51277},[95,65397,51284],{"class":105},[95,65399,65400,65402,65404],{"class":97,"line":9786},[95,65401,55211],{"class":105},[95,65403,295],{"class":51277},[95,65405,51284],{"class":105},[95,65407,65408,65410,65412,65414,65416,65418,65420,65422,65425,65427,65429,65432],{"class":97,"line":9795},[95,65409,55279],{"class":105},[95,65411,53798],{"class":51277},[95,65413,53801],{"class":1945},[95,65415,151],{"class":105},[95,65417,53806],{"class":210},[95,65419,14903],{"class":1945},[95,65421,151],{"class":105},[95,65423,65424],{"class":210},"\"check\"",[95,65426,53463],{"class":1945},[95,65428,151],{"class":105},[95,65430,65431],{"class":210},"\"ck\"",[95,65433,51284],{"class":105},[95,65435,65436,65438,65440],{"class":97,"line":9800},[95,65437,55384],{"class":105},[95,65439,295],{"class":51277},[95,65441,51284],{"class":105},[95,65443,65444,65446,65448,65450,65452],{"class":97,"line":9806},[95,65445,55211],{"class":105},[95,65447,295],{"class":51277},[95,65449,61150],{"class":105},[95,65451,295],{"class":51277},[95,65453,51284],{"class":105},[95,65455,65456,65458,65460,65463,65465],{"class":97,"line":9827},[95,65457,55211],{"class":105},[95,65459,295],{"class":51277},[95,65461,65462],{"class":105},">小米\u003C\u002F",[95,65464,295],{"class":51277},[95,65466,51284],{"class":105},[95,65468,65469,65471,65473,65476,65478],{"class":97,"line":9833},[95,65470,55211],{"class":105},[95,65472,295],{"class":51277},[95,65474,65475],{"class":105},">￥1999\u003C\u002F",[95,65477,295],{"class":51277},[95,65479,51284],{"class":105},[95,65481,65482,65484,65486],{"class":97,"line":9847},[95,65483,51753],{"class":105},[95,65485,249],{"class":51277},[95,65487,51284],{"class":105},[95,65489,65490,65492,65494],{"class":97,"line":9853},[95,65491,51318],{"class":105},[95,65493,249],{"class":51277},[95,65495,51284],{"class":105},[95,65497,65498,65500,65502],{"class":97,"line":9880},[95,65499,55211],{"class":105},[95,65501,295],{"class":51277},[95,65503,51284],{"class":105},[95,65505,65506,65508,65510,65512,65514,65516,65518,65520,65522,65524,65526,65528],{"class":97,"line":9889},[95,65507,55279],{"class":105},[95,65509,53798],{"class":51277},[95,65511,53801],{"class":1945},[95,65513,151],{"class":105},[95,65515,53806],{"class":210},[95,65517,14903],{"class":1945},[95,65519,151],{"class":105},[95,65521,65424],{"class":210},[95,65523,53463],{"class":1945},[95,65525,151],{"class":105},[95,65527,65431],{"class":210},[95,65529,51284],{"class":105},[95,65531,65532,65534,65536],{"class":97,"line":9895},[95,65533,55384],{"class":105},[95,65535,295],{"class":51277},[95,65537,51284],{"class":105},[95,65539,65540,65542,65544,65547,65549],{"class":97,"line":9903},[95,65541,55211],{"class":105},[95,65543,295],{"class":51277},[95,65545,65546],{"class":105},">小米净水器\u003C\u002F",[95,65548,295],{"class":51277},[95,65550,51284],{"class":105},[95,65552,65553,65555,65557,65559,65561],{"class":97,"line":9908},[95,65554,55211],{"class":105},[95,65556,295],{"class":51277},[95,65558,65462],{"class":105},[95,65560,295],{"class":51277},[95,65562,51284],{"class":105},[95,65564,65565,65567,65569,65572,65574],{"class":97,"line":16587},[95,65566,55211],{"class":105},[95,65568,295],{"class":51277},[95,65570,65571],{"class":105},">￥4999\u003C\u002F",[95,65573,295],{"class":51277},[95,65575,51284],{"class":105},[95,65577,65578,65580,65582],{"class":97,"line":16593},[95,65579,51753],{"class":105},[95,65581,249],{"class":51277},[95,65583,51284],{"class":105},[95,65585,65586,65588,65590],{"class":97,"line":16616},[95,65587,51318],{"class":105},[95,65589,249],{"class":51277},[95,65591,51284],{"class":105},[95,65593,65594,65596,65598],{"class":97,"line":16622},[95,65595,55211],{"class":105},[95,65597,295],{"class":51277},[95,65599,51284],{"class":105},[95,65601,65602,65604,65606,65608,65610,65612,65614,65616,65618,65620,65622,65624],{"class":97,"line":16645},[95,65603,55279],{"class":105},[95,65605,53798],{"class":51277},[95,65607,53801],{"class":1945},[95,65609,151],{"class":105},[95,65611,53806],{"class":210},[95,65613,14903],{"class":1945},[95,65615,151],{"class":105},[95,65617,65424],{"class":210},[95,65619,53463],{"class":1945},[95,65621,151],{"class":105},[95,65623,65431],{"class":210},[95,65625,51284],{"class":105},[95,65627,65628,65630,65632],{"class":97,"line":16659},[95,65629,55384],{"class":105},[95,65631,295],{"class":51277},[95,65633,51284],{"class":105},[95,65635,65636,65638,65640,65643,65645],{"class":97,"line":16679},[95,65637,55211],{"class":105},[95,65639,295],{"class":51277},[95,65641,65642],{"class":105},">小米电视\u003C\u002F",[95,65644,295],{"class":51277},[95,65646,51284],{"class":105},[95,65648,65649,65651,65653,65655,65657],{"class":97,"line":16685},[95,65650,55211],{"class":105},[95,65652,295],{"class":51277},[95,65654,65462],{"class":105},[95,65656,295],{"class":51277},[95,65658,51284],{"class":105},[95,65660,65661,65663,65665,65668,65670],{"class":97,"line":16696},[95,65662,55211],{"class":105},[95,65664,295],{"class":51277},[95,65666,65667],{"class":105},">￥5999\u003C\u002F",[95,65669,295],{"class":51277},[95,65671,51284],{"class":105},[95,65673,65674,65676,65678],{"class":97,"line":16719},[95,65675,51753],{"class":105},[95,65677,249],{"class":51277},[95,65679,51284],{"class":105},[95,65681,65682,65684,65686],{"class":97,"line":16741},[95,65683,52394],{"class":105},[95,65685,243],{"class":51277},[95,65687,51284],{"class":105},[95,65689,65690,65692,65694],{"class":97,"line":16746},[95,65691,52121],{"class":105},[95,65693,51790],{"class":51277},[95,65695,51284],{"class":105},[95,65697,65698],{"class":97,"line":16752},[95,65699,65700],{"class":164},"    \u002F\u002F 1. 获取大复选框\n",[95,65702,65703,65705,65708,65710,65712,65714,65716,65719],{"class":97,"line":16766},[95,65704,11204],{"class":101},[95,65706,65707],{"class":154}," checkAll",[95,65709,13547],{"class":101},[95,65711,54373],{"class":105},[95,65713,54376],{"class":1945},[95,65715,106],{"class":105},[95,65717,65718],{"class":210},"'#checkAll'",[95,65720,112],{"class":105},[95,65722,65723],{"class":97,"line":16779},[95,65724,65725],{"class":164},"    \u002F\u002F 2. 获取所有的小复选框\n",[95,65727,65728,65730,65733,65735,65737,65739,65741,65744],{"class":97,"line":16784},[95,65729,11204],{"class":101},[95,65731,65732],{"class":154}," cks",[95,65734,13547],{"class":101},[95,65736,54373],{"class":105},[95,65738,55658],{"class":1945},[95,65740,106],{"class":105},[95,65742,65743],{"class":210},"'.ck'",[95,65745,112],{"class":105},[95,65747,65748],{"class":97,"line":16798},[95,65749,65750],{"class":164},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[95,65752,65753,65756,65758,65760,65762,65764,65766],{"class":97,"line":16803},[95,65754,65755],{"class":105},"    checkAll.",[95,65757,57790],{"class":1945},[95,65759,106],{"class":105},[95,65761,57795],{"class":210},[95,65763,12418],{"class":105},[95,65765,54426],{"class":101},[95,65767,54429],{"class":105},[95,65769,65770],{"class":97,"line":16809},[95,65771,65772],{"class":164},"      \u002F\u002F 得到当前大复选框的选中状态\n",[95,65774,65775,65778],{"class":97,"line":16814},[95,65776,65777],{"class":164},"      \u002F\u002F console.log(checkAll.checked)",[95,65779,65780],{"class":164},"  \u002F\u002F 得到 是 true 或者是 false\n",[95,65782,65783],{"class":97,"line":16828},[95,65784,65785],{"class":164},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[95,65787,65788,65790,65792,65794,65796,65798,65800,65802,65804,65807,65809,65811,65813],{"class":97,"line":16833},[95,65789,52261],{"class":101},[95,65791,1640],{"class":105},[95,65793,51824],{"class":101},[95,65795,9421],{"class":105},[95,65797,151],{"class":101},[95,65799,4075],{"class":154},[95,65801,9428],{"class":105},[95,65803,1016],{"class":101},[95,65805,65806],{"class":105}," cks.",[95,65808,51945],{"class":154},[95,65810,3196],{"class":105},[95,65812,2274],{"class":101},[95,65814,12425],{"class":105},[95,65816,65817,65820,65822,65825],{"class":97,"line":16838},[95,65818,65819],{"class":105},"        cks[i].checked ",[95,65821,151],{"class":101},[95,65823,65824],{"class":154}," this",[95,65826,65827],{"class":105},".checked\n",[95,65829,65830],{"class":97,"line":16852},[95,65831,52375],{"class":105},[95,65833,65834],{"class":97,"line":16864},[95,65835,33446],{"class":105},[95,65837,65838],{"class":97,"line":16869},[95,65839,65840],{"class":164},"    \u002F\u002F 5. 小复选框控制大复选框\n",[95,65842,65843],{"class":97,"line":16882},[95,65844,2382],{"emptyLinePlaceholder":21},[95,65846,65847,65849,65851,65853,65855,65857,65859,65861,65863,65865,65867,65869,65871],{"class":97,"line":16887},[95,65848,3183],{"class":101},[95,65850,1640],{"class":105},[95,65852,51824],{"class":101},[95,65854,9421],{"class":105},[95,65856,151],{"class":101},[95,65858,4075],{"class":154},[95,65860,9428],{"class":105},[95,65862,1016],{"class":101},[95,65864,65806],{"class":105},[95,65866,51945],{"class":154},[95,65868,3196],{"class":105},[95,65870,2274],{"class":101},[95,65872,12425],{"class":105},[95,65874,65875],{"class":97,"line":16892},[95,65876,65877],{"class":164},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[95,65879,65880,65883,65885,65887,65889,65891,65893],{"class":97,"line":16897},[95,65881,65882],{"class":105},"      cks[i].",[95,65884,57790],{"class":1945},[95,65886,106],{"class":105},[95,65888,57795],{"class":210},[95,65890,12418],{"class":105},[95,65892,54426],{"class":101},[95,65894,54429],{"class":105},[95,65896,65897],{"class":97,"line":16910},[95,65898,65899],{"class":164},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[95,65901,65902],{"class":97,"line":16915},[95,65903,65904],{"class":164},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[95,65906,65907],{"class":97,"line":32618},[95,65908,65909],{"class":164},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[95,65911,65912],{"class":97,"line":32624},[95,65913,65914],{"class":164},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[95,65916,65917,65920,65922,65924,65926,65928,65931,65933,65935,65937,65939],{"class":97,"line":32630},[95,65918,65919],{"class":105},"        checkAll.checked ",[95,65921,151],{"class":101},[95,65923,54373],{"class":105},[95,65925,55658],{"class":1945},[95,65927,106],{"class":105},[95,65929,65930],{"class":210},"'.ck:checked'",[95,65932,30811],{"class":105},[95,65934,51945],{"class":154},[95,65936,57883],{"class":101},[95,65938,65806],{"class":105},[95,65940,55808],{"class":154},[95,65942,65943],{"class":97,"line":32636},[95,65944,64792],{"class":105},[95,65946,65947],{"class":97,"line":32642},[95,65948,2169],{"class":105},[95,65950,65951,65953,65955],{"class":97,"line":32653},[95,65952,52394],{"class":105},[95,65954,51790],{"class":51277},[95,65956,51284],{"class":105},[95,65958,65959,65961,65963],{"class":97,"line":32659},[95,65960,51762],{"class":105},[95,65962,51777],{"class":51277},[95,65964,51284],{"class":105},[95,65966,65967],{"class":97,"line":32679},[95,65968,2382],{"emptyLinePlaceholder":21},[95,65970,65971,65973,65975],{"class":97,"line":32685},[95,65972,51762],{"class":105},[95,65974,50612],{"class":51277},[95,65976,51284],{"class":105},[10,65978,65979],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[10,65981,65982],{},"用好之间比较得到的布尔值！！！",[10,65984,65985,65986,65989,65990,1640,65993,690,65995,65998],{},"在 JS 里访问的时候，",[92,65987,65988],{},"checkbox.checked"," 是一个 ",[255,65991,65992],{},"布尔值",[92,65994,1344],{},[92,65996,65997],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[10,66000,66001,66002,66005,66006],{},"HTML 的 ",[92,66003,66004],{},"checked=\"checked\""," 只是 ",[255,66007,66008,66009,66012],{},"初始值；JS 的 ",[92,66010,66011],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[10,66014,66015],{},"：checked是一个伪类选择器",[10,66017,66018],{},[1444,66019],{"alt":14,"src":66020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[10,66022,66023,66026],{},[66024,66025],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[10,66028,66029],{},[1444,66030],{"alt":14,"src":66031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[37,66033,66035],{"id":66034},"_33-dom事件进阶","3.3 DOM事件进阶",[66,66037,66039],{"id":66038},"_331-事件流","3.3.1 事件流",[10,66041,66042],{},[1444,66043],{"alt":14,"src":66044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21981,66046,66048],{"id":66047},"_3311-事件捕获","3.3.1.1 事件捕获",[10,66050,66051],{},[1444,66052],{"alt":14,"src":66053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[86,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",[92,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},[95,66060,66061,66063,66065,66067],{"class":97,"line":98},[95,66062,51274],{"class":105},[95,66064,51278],{"class":51277},[95,66066,51281],{"class":1945},[95,66068,51284],{"class":105},[95,66070,66071,66073,66075,66077,66079,66081],{"class":97,"line":15},[95,66072,1016],{"class":105},[95,66074,50612],{"class":51277},[95,66076,51293],{"class":1945},[95,66078,151],{"class":105},[95,66080,51298],{"class":210},[95,66082,51284],{"class":105},[95,66084,66085],{"class":97,"line":1161},[95,66086,2382],{"emptyLinePlaceholder":21},[95,66088,66089,66091,66093],{"class":97,"line":1176},[95,66090,1016],{"class":105},[95,66092,51311],{"class":51277},[95,66094,51284],{"class":105},[95,66096,66097,66099,66101,66103,66105,66107],{"class":97,"line":1182},[95,66098,52121],{"class":105},[95,66100,51321],{"class":51277},[95,66102,51324],{"class":1945},[95,66104,151],{"class":105},[95,66106,51329],{"class":210},[95,66108,51284],{"class":105},[95,66110,66111,66113,66115,66117,66119,66121,66123,66125,66127],{"class":97,"line":1196},[95,66112,52121],{"class":105},[95,66114,51321],{"class":51277},[95,66116,14903],{"class":1945},[95,66118,151],{"class":105},[95,66120,51368],{"class":210},[95,66122,51348],{"class":1945},[95,66124,151],{"class":105},[95,66126,51375],{"class":210},[95,66128,51284],{"class":105},[95,66130,66131,66133,66135,66137,66139],{"class":97,"line":1202},[95,66132,52121],{"class":105},[95,66134,51384],{"class":51277},[95,66136,51387],{"class":105},[95,66138,51384],{"class":51277},[95,66140,51284],{"class":105},[95,66142,66143,66145,66147],{"class":97,"line":1293},[95,66144,52121],{"class":105},[95,66146,5109],{"class":51277},[95,66148,51284],{"class":105},[95,66150,66151,66154],{"class":97,"line":1299},[95,66152,66153],{"class":1945},"    .father",[95,66155,15555],{"class":105},[95,66157,66158,66160,66162,66164,66166],{"class":97,"line":1311},[95,66159,54748],{"class":154},[95,66161,51414],{"class":105},[95,66163,65051],{"class":154},[95,66165,51469],{"class":101},[95,66167,1272],{"class":105},[95,66169,66170,66172,66174,66176,66178],{"class":97,"line":1594},[95,66171,54762],{"class":154},[95,66173,51414],{"class":105},[95,66175,65051],{"class":154},[95,66177,51469],{"class":101},[95,66179,1272],{"class":105},[95,66181,66182,66184,66186,66188],{"class":97,"line":1599},[95,66183,54861],{"class":154},[95,66185,51414],{"class":105},[95,66187,51622],{"class":154},[95,66189,1272],{"class":105},[95,66191,66192],{"class":97,"line":1605},[95,66193,2169],{"class":105},[95,66195,66196],{"class":97,"line":1610},[95,66197,2382],{"emptyLinePlaceholder":21},[95,66199,66200,66203],{"class":97,"line":1624},[95,66201,66202],{"class":1945},"    .son",[95,66204,15555],{"class":105},[95,66206,66207,66209,66211,66213,66215],{"class":97,"line":1629},[95,66208,54748],{"class":154},[95,66210,51414],{"class":105},[95,66212,1704],{"class":154},[95,66214,51469],{"class":101},[95,66216,1272],{"class":105},[95,66218,66219,66221,66223,66225,66227],{"class":97,"line":1635},[95,66220,54762],{"class":154},[95,66222,51414],{"class":105},[95,66224,1704],{"class":154},[95,66226,51469],{"class":101},[95,66228,1272],{"class":105},[95,66230,66231,66233,66235,66237],{"class":97,"line":1656},[95,66232,54861],{"class":154},[95,66234,51414],{"class":105},[95,66236,54866],{"class":154},[95,66238,1272],{"class":105},[95,66240,66241],{"class":97,"line":1661},[95,66242,2169],{"class":105},[95,66244,66245,66247,66249],{"class":97,"line":1675},[95,66246,52394],{"class":105},[95,66248,5109],{"class":51277},[95,66250,51284],{"class":105},[95,66252,66253,66255,66257],{"class":97,"line":1680},[95,66254,51762],{"class":105},[95,66256,51311],{"class":51277},[95,66258,51284],{"class":105},[95,66260,66261],{"class":97,"line":1709},[95,66262,2382],{"emptyLinePlaceholder":21},[95,66264,66265,66267,66269],{"class":97,"line":1714},[95,66266,1016],{"class":105},[95,66268,51777],{"class":51277},[95,66270,51284],{"class":105},[95,66272,66273,66275,66277,66279,66281,66284],{"class":97,"line":1731},[95,66274,52121],{"class":105},[95,66276,51588],{"class":51277},[95,66278,53463],{"class":1945},[95,66280,151],{"class":105},[95,66282,66283],{"class":210},"\"father\"",[95,66285,51284],{"class":105},[95,66287,66288,66290,66292,66294,66296,66299,66301,66303],{"class":97,"line":1736},[95,66289,51318],{"class":105},[95,66291,51588],{"class":51277},[95,66293,53463],{"class":1945},[95,66295,151],{"class":105},[95,66297,66298],{"class":210},"\"son\"",[95,66300,55291],{"class":105},[95,66302,51588],{"class":51277},[95,66304,51284],{"class":105},[95,66306,66307,66309,66311],{"class":97,"line":1741},[95,66308,52394],{"class":105},[95,66310,51588],{"class":51277},[95,66312,51284],{"class":105},[95,66314,66315,66317,66319],{"class":97,"line":1746},[95,66316,52121],{"class":105},[95,66318,51790],{"class":51277},[95,66320,51284],{"class":105},[95,66322,66323,66325,66328,66330,66332,66334,66336,66339],{"class":97,"line":1760},[95,66324,11204],{"class":101},[95,66326,66327],{"class":154}," fa",[95,66329,13547],{"class":101},[95,66331,54373],{"class":105},[95,66333,54376],{"class":1945},[95,66335,106],{"class":105},[95,66337,66338],{"class":210},"'.father'",[95,66340,112],{"class":105},[95,66342,66343,66345,66348,66350,66352,66354,66356,66359],{"class":97,"line":1765},[95,66344,11204],{"class":101},[95,66346,66347],{"class":154}," son",[95,66349,13547],{"class":101},[95,66351,54373],{"class":105},[95,66353,54376],{"class":1945},[95,66355,106],{"class":105},[95,66357,66358],{"class":210},"'.son'",[95,66360,112],{"class":105},[95,66362,66363,66365,66367,66369,66371,66373,66375],{"class":97,"line":2559},[95,66364,52384],{"class":105},[95,66366,57790],{"class":1945},[95,66368,106],{"class":105},[95,66370,57795],{"class":210},[95,66372,12418],{"class":105},[95,66374,54426],{"class":101},[95,66376,54429],{"class":105},[95,66378,66379,66381,66383,66386],{"class":97,"line":2573},[95,66380,58902],{"class":1945},[95,66382,106],{"class":105},[95,66384,66385],{"class":210},"'woshiu1'",[95,66387,112],{"class":105},[95,66389,66390,66392,66394],{"class":97,"line":2581},[95,66391,54512],{"class":105},[95,66393,1344],{"class":154},[95,66395,112],{"class":105},[95,66397,66398,66401,66403,66405,66407,66409,66411],{"class":97,"line":2586},[95,66399,66400],{"class":105},"    fa.",[95,66402,57790],{"class":1945},[95,66404,106],{"class":105},[95,66406,57795],{"class":210},[95,66408,12418],{"class":105},[95,66410,54426],{"class":101},[95,66412,54429],{"class":105},[95,66414,66415,66417,66419,66422],{"class":97,"line":2592},[95,66416,58902],{"class":1945},[95,66418,106],{"class":105},[95,66420,66421],{"class":210},"'1'",[95,66423,112],{"class":105},[95,66425,66426,66428,66430],{"class":97,"line":2598},[95,66427,54512],{"class":105},[95,66429,1344],{"class":154},[95,66431,112],{"class":105},[95,66433,66434,66437,66439,66441,66443,66445,66447],{"class":97,"line":2603},[95,66435,66436],{"class":105},"    son.",[95,66438,57790],{"class":1945},[95,66440,106],{"class":105},[95,66442,57795],{"class":210},[95,66444,12418],{"class":105},[95,66446,54426],{"class":101},[95,66448,54429],{"class":105},[95,66450,66451,66453,66455,66458],{"class":97,"line":7931},[95,66452,58902],{"class":1945},[95,66454,106],{"class":105},[95,66456,66457],{"class":210},"'2'",[95,66459,112],{"class":105},[95,66461,66462,66464,66466],{"class":97,"line":7955},[95,66463,54512],{"class":105},[95,66465,1344],{"class":154},[95,66467,112],{"class":105},[95,66469,66470,66472,66474],{"class":97,"line":7960},[95,66471,52394],{"class":105},[95,66473,51790],{"class":51277},[95,66475,51284],{"class":105},[95,66477,66478,66480,66482],{"class":97,"line":7966},[95,66479,51762],{"class":105},[95,66481,51777],{"class":51277},[95,66483,51284],{"class":105},[95,66485,66486],{"class":97,"line":7993},[95,66487,2382],{"emptyLinePlaceholder":21},[95,66489,66490,66492,66494],{"class":97,"line":7998},[95,66491,51762],{"class":105},[95,66493,50612],{"class":51277},[95,66495,51284],{"class":105},[10,66497,66498],{},[1444,66499],{"alt":14,"src":66500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[10,66502,66503],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21981,66505,66507],{"id":66506},"_3312-事件冒泡","3.3.1.2 事件冒泡",[10,66509,66510],{},[1444,66511],{"alt":14,"src":66512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[10,66514,66515],{},"反着来",[10,66517,66518],{},"注意是同名事件，比如都是‘click’",[21981,66520,66522],{"id":66521},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[10,66524,66525],{},[1444,66526],{"alt":14,"src":66527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21981,66529,66531],{"id":66530},"_3314-解绑事件","3.3.1.4 解绑事件",[10,66533,66534],{},[1444,66535],{"alt":14,"src":66536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[10,66538,66539],{},[1444,66540],{"alt":14,"src":66541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21981,66543,66545],{"id":66544},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[49,66547,66548],{},[52,66549,66550],{},"事件类型的区别",[10,66552,66553],{},[1444,66554],{"alt":14,"src":66555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[10,66557,66558],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[49,66560,66561],{"start":15},[52,66562,66563],{},"注册事件的区别",[10,66565,66566],{},[1444,66567],{"alt":14,"src":66568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21981,66570,66572],{"id":66571},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[10,66574,66575],{},[1444,66576],{"alt":14,"src":66577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[10,66579,66580],{},[1444,66581],{"alt":14,"src":66582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[86,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",[92,66587,66588,66596,66613,66636,66644,66649,66654,66659,66663,66671,66679],{"__ignoreMap":14},[95,66589,66590,66592,66594],{"class":97,"line":98},[95,66591,1016],{"class":105},[95,66593,51777],{"class":51277},[95,66595,51284],{"class":105},[95,66597,66598,66600,66603,66606,66608,66611],{"class":97,"line":15},[95,66599,52121],{"class":105},[95,66601,66602],{"class":51277},"form",[95,66604,66605],{"class":1945}," action",[95,66607,151],{"class":105},[95,66609,66610],{"class":210},"\"http:\u002F\u002Fwww.itcast.cn\"",[95,66612,51284],{"class":105},[95,66614,66615,66617,66619,66621,66623,66626,66629,66631,66634],{"class":97,"line":1161},[95,66616,51318],{"class":105},[95,66618,53798],{"class":51277},[95,66620,53801],{"class":1945},[95,66622,151],{"class":105},[95,66624,66625],{"class":210},"\"submit\"",[95,66627,66628],{"class":1945}," value",[95,66630,151],{"class":105},[95,66632,66633],{"class":210},"\"免费注册\"",[95,66635,51284],{"class":105},[95,66637,66638,66640,66642],{"class":97,"line":1176},[95,66639,51318],{"class":105},[95,66641,51790],{"class":51277},[95,66643,51284],{"class":105},[95,66645,66646],{"class":97,"line":1182},[95,66647,66648],{"class":105},"      const form = document.querySelector('form')\n",[95,66650,66651],{"class":97,"line":1196},[95,66652,66653],{"class":105},"      form.addEventListener('submit', function (e) {\n",[95,66655,66656],{"class":97,"line":1202},[95,66657,66658],{"class":105},"        e.preventDefault()\n",[95,66660,66661],{"class":97,"line":1293},[95,66662,64792],{"class":105},[95,66664,66665,66667,66669],{"class":97,"line":1299},[95,66666,51753],{"class":105},[95,66668,51790],{"class":51277},[95,66670,51284],{"class":105},[95,66672,66673,66675,66677],{"class":97,"line":1311},[95,66674,52394],{"class":105},[95,66676,66602],{"class":51277},[95,66678,51284],{"class":105},[95,66680,66681,66683,66685],{"class":97,"line":1594},[95,66682,51762],{"class":105},[95,66684,51777],{"class":51277},[95,66686,51284],{"class":105},[10,66688,66689],{},"点击不在跳转！！！",[66,66691,66693],{"id":66692},"_332-事件委托","3.3.2 事件委托",[10,66695,66696],{},[1444,66697],{"alt":14,"src":66698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[86,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",[92,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},[95,66705,66706,66708,66710,66712],{"class":97,"line":98},[95,66707,51274],{"class":105},[95,66709,51278],{"class":51277},[95,66711,51281],{"class":1945},[95,66713,51284],{"class":105},[95,66715,66716,66718,66720,66722,66724,66726],{"class":97,"line":15},[95,66717,1016],{"class":105},[95,66719,50612],{"class":51277},[95,66721,51293],{"class":1945},[95,66723,151],{"class":105},[95,66725,51298],{"class":210},[95,66727,51284],{"class":105},[95,66729,66730],{"class":97,"line":1161},[95,66731,2382],{"emptyLinePlaceholder":21},[95,66733,66734,66736,66738],{"class":97,"line":1176},[95,66735,1016],{"class":105},[95,66737,51311],{"class":51277},[95,66739,51284],{"class":105},[95,66741,66742,66744,66746,66748,66750,66752],{"class":97,"line":1182},[95,66743,52121],{"class":105},[95,66745,51321],{"class":51277},[95,66747,51324],{"class":1945},[95,66749,151],{"class":105},[95,66751,51329],{"class":210},[95,66753,51284],{"class":105},[95,66755,66756,66758,66760,66762,66764,66766,66768,66770,66772],{"class":97,"line":1196},[95,66757,52121],{"class":105},[95,66759,51321],{"class":51277},[95,66761,14903],{"class":1945},[95,66763,151],{"class":105},[95,66765,51368],{"class":210},[95,66767,51348],{"class":1945},[95,66769,151],{"class":105},[95,66771,51375],{"class":210},[95,66773,51284],{"class":105},[95,66775,66776,66778,66780,66782,66784],{"class":97,"line":1202},[95,66777,52121],{"class":105},[95,66779,51384],{"class":51277},[95,66781,51387],{"class":105},[95,66783,51384],{"class":51277},[95,66785,51284],{"class":105},[95,66787,66788,66790,66792],{"class":97,"line":1293},[95,66789,51762],{"class":105},[95,66791,51311],{"class":51277},[95,66793,51284],{"class":105},[95,66795,66796],{"class":97,"line":1299},[95,66797,2382],{"emptyLinePlaceholder":21},[95,66799,66800,66802,66804],{"class":97,"line":1311},[95,66801,1016],{"class":105},[95,66803,51777],{"class":51277},[95,66805,51284],{"class":105},[95,66807,66808,66810,66812],{"class":97,"line":1594},[95,66809,52121],{"class":105},[95,66811,1113],{"class":51277},[95,66813,51284],{"class":105},[95,66815,66816,66818,66820,66822,66824],{"class":97,"line":1599},[95,66817,51318],{"class":105},[95,66819,52],{"class":51277},[95,66821,53943],{"class":105},[95,66823,52],{"class":51277},[95,66825,51284],{"class":105},[95,66827,66828,66830,66832,66834,66836],{"class":97,"line":1605},[95,66829,51318],{"class":105},[95,66831,52],{"class":51277},[95,66833,53962],{"class":105},[95,66835,52],{"class":51277},[95,66837,51284],{"class":105},[95,66839,66840,66842,66844,66846,66848],{"class":97,"line":1610},[95,66841,51318],{"class":105},[95,66843,52],{"class":51277},[95,66845,53981],{"class":105},[95,66847,52],{"class":51277},[95,66849,51284],{"class":105},[95,66851,66852,66854,66856,66858,66860],{"class":97,"line":1624},[95,66853,51318],{"class":105},[95,66855,52],{"class":51277},[95,66857,54000],{"class":105},[95,66859,52],{"class":51277},[95,66861,51284],{"class":105},[95,66863,66864,66866,66868,66870,66872],{"class":97,"line":1629},[95,66865,51318],{"class":105},[95,66867,52],{"class":51277},[95,66869,54019],{"class":105},[95,66871,52],{"class":51277},[95,66873,51284],{"class":105},[95,66875,66876,66878,66880,66883,66885],{"class":97,"line":1635},[95,66877,51318],{"class":105},[95,66879,10],{"class":51277},[95,66881,66882],{"class":105},">我不需要变色\u003C\u002F",[95,66884,10],{"class":51277},[95,66886,51284],{"class":105},[95,66888,66889,66891,66893],{"class":97,"line":1656},[95,66890,52394],{"class":105},[95,66892,1113],{"class":51277},[95,66894,51284],{"class":105},[95,66896,66897,66899,66901],{"class":97,"line":1661},[95,66898,52121],{"class":105},[95,66900,51790],{"class":51277},[95,66902,51284],{"class":105},[95,66904,66905],{"class":97,"line":1675},[95,66906,66907],{"class":164},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[95,66909,66910,66912,66914,66916,66918,66920,66922,66925],{"class":97,"line":1680},[95,66911,11204],{"class":101},[95,66913,61269],{"class":154},[95,66915,13547],{"class":101},[95,66917,54373],{"class":105},[95,66919,54376],{"class":1945},[95,66921,106],{"class":105},[95,66923,66924],{"class":210},"'ul'",[95,66926,112],{"class":105},[95,66928,66929,66932,66934,66936,66938,66940,66942,66944,66946],{"class":97,"line":1709},[95,66930,66931],{"class":105},"    ul.",[95,66933,57790],{"class":1945},[95,66935,106],{"class":105},[95,66937,57795],{"class":210},[95,66939,12418],{"class":105},[95,66941,54426],{"class":101},[95,66943,1640],{"class":105},[95,66945,180],{"class":5199},[95,66947,12425],{"class":105},[95,66949,66950],{"class":97,"line":1714},[95,66951,66952],{"class":164},"      \u002F\u002F alert(1)\n",[95,66954,66955],{"class":97,"line":1731},[95,66956,66957],{"class":164},"      \u002F\u002F e.target就是我们点击的对象\n",[95,66959,66960],{"class":97,"line":1736},[95,66961,66962],{"class":164},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[95,66964,66965],{"class":97,"line":1741},[95,66966,66967],{"class":164},"      \u002F\u002F e.target.style.color = 'red'\n",[95,66969,66970,66972,66974],{"class":97,"line":1746},[95,66971,58221],{"class":105},[95,66973,58224],{"class":1945},[95,66975,66976],{"class":105},"(e)\n",[95,66978,66979],{"class":97,"line":1760},[95,66980,2382],{"emptyLinePlaceholder":21},[95,66982,66983,66985,66988],{"class":97,"line":1765},[95,66984,58221],{"class":105},[95,66986,66987],{"class":1945},"dir",[95,66989,66990],{"class":105},"(e.target)\n",[95,66992,66993],{"class":97,"line":2559},[95,66994,2382],{"emptyLinePlaceholder":21},[95,66996,66997],{"class":97,"line":2573},[95,66998,66999],{"class":164},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[95,67001,67002],{"class":97,"line":2581},[95,67003,67004],{"class":164},"      \u002F\u002F 通过tagName来进行判断\n",[95,67006,67007,67009,67012,67014,67017],{"class":97,"line":2586},[95,67008,54457],{"class":101},[95,67010,67011],{"class":105}," (e.target.tagName ",[95,67013,54463],{"class":101},[95,67015,67016],{"class":210}," 'LI'",[95,67018,12425],{"class":105},[95,67020,67021,67024,67026],{"class":97,"line":2592},[95,67022,67023],{"class":105},"        e.target.style.color ",[95,67025,151],{"class":101},[95,67027,67028],{"class":210}," 'red'\n",[95,67030,67031],{"class":97,"line":2598},[95,67032,52375],{"class":105},[95,67034,67035],{"class":97,"line":2603},[95,67036,33446],{"class":105},[95,67038,67039,67041,67043],{"class":97,"line":7931},[95,67040,52394],{"class":105},[95,67042,51790],{"class":51277},[95,67044,51284],{"class":105},[95,67046,67047,67049,67051],{"class":97,"line":7955},[95,67048,51762],{"class":105},[95,67050,51777],{"class":51277},[95,67052,51284],{"class":105},[95,67054,67055],{"class":97,"line":7960},[95,67056,2382],{"emptyLinePlaceholder":21},[95,67058,67059,67061,67063],{"class":97,"line":7966},[95,67060,51762],{"class":105},[95,67062,50612],{"class":51277},[95,67064,51284],{"class":105},[10,67066,67067],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[10,67069,67070],{},"if(e.target.ragName==='P') {}",[10,67072,67073],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[10,67075,67076],{},"通过事件委托的方式实现tab栏切换改造：",[10,67078,67079],{},"一定要记住自定义属性！！！！！！",[10,67081,67082],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[10,67084,67085],{},"id是自定义的属性名",[10,67087,67088],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[86,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",[92,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},[95,67095,67096,67098,67100,67102],{"class":97,"line":98},[95,67097,51274],{"class":105},[95,67099,51278],{"class":51277},[95,67101,51281],{"class":1945},[95,67103,51284],{"class":105},[95,67105,67106,67108,67110,67112,67114,67116],{"class":97,"line":15},[95,67107,1016],{"class":105},[95,67109,50612],{"class":51277},[95,67111,51293],{"class":1945},[95,67113,151],{"class":105},[95,67115,51298],{"class":210},[95,67117,51284],{"class":105},[95,67119,67120],{"class":97,"line":1161},[95,67121,2382],{"emptyLinePlaceholder":21},[95,67123,67124,67126,67128],{"class":97,"line":1176},[95,67125,1016],{"class":105},[95,67127,51311],{"class":51277},[95,67129,51284],{"class":105},[95,67131,67132,67134,67136,67138,67140,67142],{"class":97,"line":1182},[95,67133,52121],{"class":105},[95,67135,51321],{"class":51277},[95,67137,51324],{"class":1945},[95,67139,151],{"class":105},[95,67141,51329],{"class":210},[95,67143,59104],{"class":105},[95,67145,67146,67148,67150,67152,67154,67156,67158,67160,67162],{"class":97,"line":1196},[95,67147,52121],{"class":105},[95,67149,51321],{"class":51277},[95,67151,51340],{"class":1945},[95,67153,151],{"class":105},[95,67155,51345],{"class":210},[95,67157,51348],{"class":1945},[95,67159,151],{"class":105},[95,67161,51353],{"class":210},[95,67163,59104],{"class":105},[95,67165,67166,67168,67170,67172,67174,67176,67178,67180,67182],{"class":97,"line":1202},[95,67167,52121],{"class":105},[95,67169,51321],{"class":51277},[95,67171,14903],{"class":1945},[95,67173,151],{"class":105},[95,67175,51368],{"class":210},[95,67177,51348],{"class":1945},[95,67179,151],{"class":105},[95,67181,51375],{"class":210},[95,67183,59104],{"class":105},[95,67185,67186,67188,67190,67192,67194],{"class":97,"line":1293},[95,67187,52121],{"class":105},[95,67189,51384],{"class":51277},[95,67191,63602],{"class":105},[95,67193,51384],{"class":51277},[95,67195,51284],{"class":105},[95,67197,67198,67200,67202],{"class":97,"line":1299},[95,67199,52121],{"class":105},[95,67201,5109],{"class":51277},[95,67203,51284],{"class":105},[95,67205,67206,67208],{"class":97,"line":1311},[95,67207,6386],{"class":51277},[95,67209,15555],{"class":105},[95,67211,67212,67214,67216,67218],{"class":97,"line":1594},[95,67213,54683],{"class":154},[95,67215,51414],{"class":105},[95,67217,297],{"class":154},[95,67219,1272],{"class":105},[95,67221,67222,67224,67226,67228],{"class":97,"line":1599},[95,67223,54672],{"class":154},[95,67225,51414],{"class":105},[95,67227,297],{"class":154},[95,67229,1272],{"class":105},[95,67231,67232],{"class":97,"line":1605},[95,67233,2169],{"class":105},[95,67235,67236],{"class":97,"line":1610},[95,67237,2382],{"emptyLinePlaceholder":21},[95,67239,67240,67242],{"class":97,"line":1624},[95,67241,63653],{"class":1945},[95,67243,15555],{"class":105},[95,67245,67246,67248,67250,67252,67254],{"class":97,"line":1629},[95,67247,54748],{"class":154},[95,67249,51414],{"class":105},[95,67251,63664],{"class":154},[95,67253,51469],{"class":101},[95,67255,1272],{"class":105},[95,67257,67258,67260,67262,67264,67266],{"class":97,"line":1635},[95,67259,54762],{"class":154},[95,67261,51414],{"class":105},[95,67263,63677],{"class":154},[95,67265,51469],{"class":101},[95,67267,1272],{"class":105},[95,67269,67270,67272,67274,67276,67278],{"class":97,"line":1656},[95,67271,54683],{"class":154},[95,67273,51414],{"class":105},[95,67275,806],{"class":154},[95,67277,51469],{"class":101},[95,67279,1272],{"class":105},[95,67281,67282,67284,67286,67288,67290,67292,67294],{"class":97,"line":1661},[95,67283,61954],{"class":154},[95,67285,51414],{"class":105},[95,67287,323],{"class":154},[95,67289,51469],{"class":101},[95,67291,51498],{"class":154},[95,67293,62221],{"class":154},[95,67295,1272],{"class":105},[95,67297,67298],{"class":97,"line":1675},[95,67299,2169],{"class":105},[95,67301,67302],{"class":97,"line":1680},[95,67303,2382],{"emptyLinePlaceholder":21},[95,67305,67306,67308],{"class":97,"line":1709},[95,67307,63722],{"class":1945},[95,67309,15555],{"class":105},[95,67311,67312,67314,67316,67318,67320],{"class":97,"line":1714},[95,67313,54748],{"class":154},[95,67315,51414],{"class":105},[95,67317,417],{"class":154},[95,67319,434],{"class":101},[95,67321,1272],{"class":105},[95,67323,67324,67326,67328,67330,67332],{"class":97,"line":1731},[95,67325,54762],{"class":154},[95,67327,51414],{"class":105},[95,67329,1013],{"class":154},[95,67331,51469],{"class":101},[95,67333,1272],{"class":105},[95,67335,67336,67338,67340,67342,67344],{"class":97,"line":1736},[95,67337,57336],{"class":154},[95,67339,51414],{"class":105},[95,67341,1013],{"class":154},[95,67343,51469],{"class":101},[95,67345,1272],{"class":105},[95,67347,67348,67350,67352,67354],{"class":97,"line":1741},[95,67349,54986],{"class":154},[95,67351,51414],{"class":105},[95,67353,51454],{"class":154},[95,67355,1272],{"class":105},[95,67357,67358,67360,67362,67364],{"class":97,"line":1746},[95,67359,54997],{"class":154},[95,67361,51414],{"class":105},[95,67363,51645],{"class":154},[95,67365,1272],{"class":105},[95,67367,67368],{"class":97,"line":1760},[95,67369,2169],{"class":105},[95,67371,67372],{"class":97,"line":1765},[95,67373,2382],{"emptyLinePlaceholder":21},[95,67375,67376,67378,67380],{"class":97,"line":2559},[95,67377,63722],{"class":1945},[95,67379,63795],{"class":51277},[95,67381,15555],{"class":105},[95,67383,67384,67386,67388,67390,67392],{"class":97,"line":2573},[95,67385,54899],{"class":154},[95,67387,51414],{"class":105},[95,67389,906],{"class":154},[95,67391,51469],{"class":101},[95,67393,1272],{"class":105},[95,67395,67396,67398,67400,67402],{"class":97,"line":2581},[95,67397,62311],{"class":154},[95,67399,51414],{"class":105},[95,67401,63818],{"class":154},[95,67403,1272],{"class":105},[95,67405,67406,67408,67410,67412,67414],{"class":97,"line":2586},[95,67407,61977],{"class":154},[95,67409,51414],{"class":105},[95,67411,806],{"class":154},[95,67413,51469],{"class":101},[95,67415,1272],{"class":105},[95,67417,67418],{"class":97,"line":2592},[95,67419,2169],{"class":105},[95,67421,67422],{"class":97,"line":2598},[95,67423,2382],{"emptyLinePlaceholder":21},[95,67425,67426,67428,67430],{"class":97,"line":2603},[95,67427,63722],{"class":1945},[95,67429,61269],{"class":51277},[95,67431,15555],{"class":105},[95,67433,67434,67436,67438,67440],{"class":97,"line":7931},[95,67435,54709],{"class":154},[95,67437,51414],{"class":105},[95,67439,54714],{"class":154},[95,67441,1272],{"class":105},[95,67443,67444,67446,67448,67450],{"class":97,"line":7955},[95,67445,54986],{"class":154},[95,67447,51414],{"class":105},[95,67449,51454],{"class":154},[95,67451,1272],{"class":105},[95,67453,67454,67456,67458,67460],{"class":97,"line":7960},[95,67455,54997],{"class":154},[95,67457,51414],{"class":105},[95,67459,51557],{"class":154},[95,67461,1272],{"class":105},[95,67463,67464],{"class":97,"line":7966},[95,67465,2169],{"class":105},[95,67467,67468],{"class":97,"line":7993},[95,67469,2382],{"emptyLinePlaceholder":21},[95,67471,67472,67474,67476,67478],{"class":97,"line":7998},[95,67473,63722],{"class":1945},[95,67475,61269],{"class":51277},[95,67477,55052],{"class":51277},[95,67479,15555],{"class":105},[95,67481,67482,67484,67486,67488,67490,67492],{"class":97,"line":8004},[95,67483,54683],{"class":154},[95,67485,51414],{"class":105},[95,67487,297],{"class":154},[95,67489,8933],{"class":154},[95,67491,51469],{"class":101},[95,67493,1272],{"class":105},[95,67495,67496,67498,67500,67502,67504],{"class":97,"line":8016},[95,67497,54899],{"class":154},[95,67499,51414],{"class":105},[95,67501,655],{"class":154},[95,67503,51469],{"class":101},[95,67505,1272],{"class":105},[95,67507,67508],{"class":97,"line":8028},[95,67509,2169],{"class":105},[95,67511,67512],{"class":97,"line":8040},[95,67513,2382],{"emptyLinePlaceholder":21},[95,67515,67516,67518,67520,67522,67524],{"class":97,"line":9699},[95,67517,63722],{"class":1945},[95,67519,61269],{"class":51277},[95,67521,55052],{"class":51277},[95,67523,1380],{"class":51277},[95,67525,15555],{"class":105},[95,67527,67528,67530,67532,67534],{"class":97,"line":9724},[95,67529,63947],{"class":154},[95,67531,51414],{"class":105},[95,67533,54714],{"class":154},[95,67535,1272],{"class":105},[95,67537,67538,67540,67542,67544,67546,67548,67550],{"class":97,"line":9747},[95,67539,62209],{"class":154},[95,67541,51414],{"class":105},[95,67543,183],{"class":154},[95,67545,51469],{"class":101},[95,67547,51498],{"class":154},[95,67549,63968],{"class":154},[95,67551,1272],{"class":105},[95,67553,67554,67556,67558,67560],{"class":97,"line":9771},[95,67555,57393],{"class":154},[95,67557,51414],{"class":105},[95,67559,62346],{"class":154},[95,67561,1272],{"class":105},[95,67563,67564],{"class":97,"line":9776},[95,67565,2169],{"class":105},[95,67567,67568],{"class":97,"line":9781},[95,67569,2382],{"emptyLinePlaceholder":21},[95,67571,67572,67574,67576,67578,67580,67582],{"class":97,"line":9786},[95,67573,63722],{"class":1945},[95,67575,61269],{"class":51277},[95,67577,55052],{"class":51277},[95,67579,1380],{"class":51277},[95,67581,64001],{"class":1945},[95,67583,15555],{"class":105},[95,67585,67586,67588,67590,67592],{"class":97,"line":9795},[95,67587,61768],{"class":154},[95,67589,51414],{"class":105},[95,67591,64012],{"class":154},[95,67593,1272],{"class":105},[95,67595,67596,67598,67600,67602],{"class":97,"line":9800},[95,67597,57393],{"class":154},[95,67599,51414],{"class":105},[95,67601,64012],{"class":154},[95,67603,1272],{"class":105},[95,67605,67606],{"class":97,"line":9806},[95,67607,2169],{"class":105},[95,67609,67610],{"class":97,"line":9827},[95,67611,2382],{"emptyLinePlaceholder":21},[95,67613,67614,67616],{"class":97,"line":9833},[95,67615,64037],{"class":1945},[95,67617,15555],{"class":105},[95,67619,67620,67622,67624,67626,67628,67630],{"class":97,"line":9847},[95,67621,54672],{"class":154},[95,67623,51414],{"class":105},[95,67625,297],{"class":154},[95,67627,64050],{"class":154},[95,67629,51469],{"class":101},[95,67631,1272],{"class":105},[95,67633,67634],{"class":97,"line":9853},[95,67635,2169],{"class":105},[95,67637,67638],{"class":97,"line":9880},[95,67639,2382],{"emptyLinePlaceholder":21},[95,67641,67642,67644,67646],{"class":97,"line":9889},[95,67643,64037],{"class":1945},[95,67645,62151],{"class":1945},[95,67647,15555],{"class":105},[95,67649,67650,67652,67654,67656],{"class":97,"line":9895},[95,67651,54986],{"class":154},[95,67653,51414],{"class":105},[95,67655,54714],{"class":154},[95,67657,1272],{"class":105},[95,67659,67660],{"class":97,"line":9903},[95,67661,2169],{"class":105},[95,67663,67664],{"class":97,"line":9908},[95,67665,2382],{"emptyLinePlaceholder":21},[95,67667,67668,67670,67673],{"class":97,"line":16587},[95,67669,64037],{"class":1945},[95,67671,67672],{"class":1945}," .active",[95,67674,15555],{"class":105},[95,67676,67677,67679,67681,67683],{"class":97,"line":16593},[95,67678,54986],{"class":154},[95,67680,51414],{"class":105},[95,67682,60846],{"class":154},[95,67684,1272],{"class":105},[95,67686,67687],{"class":97,"line":16616},[95,67688,2169],{"class":105},[95,67690,67691,67693,67695],{"class":97,"line":16622},[95,67692,52394],{"class":105},[95,67694,5109],{"class":51277},[95,67696,51284],{"class":105},[95,67698,67699,67701,67703],{"class":97,"line":16645},[95,67700,51762],{"class":105},[95,67702,51311],{"class":51277},[95,67704,51284],{"class":105},[95,67706,67707],{"class":97,"line":16659},[95,67708,2382],{"emptyLinePlaceholder":21},[95,67710,67711,67713,67715],{"class":97,"line":16679},[95,67712,1016],{"class":105},[95,67714,51777],{"class":51277},[95,67716,51284],{"class":105},[95,67718,67719,67721,67723,67725,67727,67729],{"class":97,"line":16685},[95,67720,52121],{"class":105},[95,67722,51588],{"class":51277},[95,67724,53463],{"class":1945},[95,67726,151],{"class":105},[95,67728,64152],{"class":210},[95,67730,51284],{"class":105},[95,67732,67733,67735,67737,67739,67741,67743],{"class":97,"line":16696},[95,67734,51318],{"class":105},[95,67736,51588],{"class":51277},[95,67738,53463],{"class":1945},[95,67740,151],{"class":105},[95,67742,64167],{"class":210},[95,67744,51284],{"class":105},[95,67746,67747,67749,67751,67753,67755],{"class":97,"line":16719},[95,67748,55211],{"class":105},[95,67750,66],{"class":51277},[95,67752,64178],{"class":105},[95,67754,66],{"class":51277},[95,67756,51284],{"class":105},[95,67758,67759,67761,67763],{"class":97,"line":16741},[95,67760,55211],{"class":105},[95,67762,1113],{"class":51277},[95,67764,51284],{"class":105},[95,67766,67767,67769,67771,67773,67775,67777,67779,67781,67783,67785,67787,67789,67791,67794,67796,67798,67800,67802],{"class":97,"line":16746},[95,67768,55279],{"class":105},[95,67770,52],{"class":51277},[95,67772,61029],{"class":105},[95,67774,344],{"class":51277},[95,67776,53463],{"class":1945},[95,67778,151],{"class":105},[95,67780,59683],{"class":210},[95,67782,61034],{"class":1945},[95,67784,151],{"class":105},[95,67786,64213],{"class":210},[95,67788,53928],{"class":1945},[95,67790,151],{"class":105},[95,67792,67793],{"class":210},"\"0\"",[95,67795,64216],{"class":105},[95,67797,344],{"class":51277},[95,67799,55291],{"class":105},[95,67801,52],{"class":51277},[95,67803,51284],{"class":105},[95,67805,67806,67808,67810,67812,67814,67816,67818,67820,67822,67824,67826,67828,67830,67832,67834],{"class":97,"line":16752},[95,67807,55279],{"class":105},[95,67809,52],{"class":51277},[95,67811,61029],{"class":105},[95,67813,344],{"class":51277},[95,67815,61034],{"class":1945},[95,67817,151],{"class":105},[95,67819,64213],{"class":210},[95,67821,53928],{"class":1945},[95,67823,151],{"class":105},[95,67825,3660],{"class":210},[95,67827,64243],{"class":105},[95,67829,344],{"class":51277},[95,67831,55291],{"class":105},[95,67833,52],{"class":51277},[95,67835,51284],{"class":105},[95,67837,67838,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866],{"class":97,"line":16766},[95,67839,55279],{"class":105},[95,67841,52],{"class":51277},[95,67843,61029],{"class":105},[95,67845,344],{"class":51277},[95,67847,61034],{"class":1945},[95,67849,151],{"class":105},[95,67851,64213],{"class":210},[95,67853,53928],{"class":1945},[95,67855,151],{"class":105},[95,67857,3683],{"class":210},[95,67859,64270],{"class":105},[95,67861,344],{"class":51277},[95,67863,55291],{"class":105},[95,67865,52],{"class":51277},[95,67867,51284],{"class":105},[95,67869,67870,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898],{"class":97,"line":16779},[95,67871,55279],{"class":105},[95,67873,52],{"class":51277},[95,67875,61029],{"class":105},[95,67877,344],{"class":51277},[95,67879,61034],{"class":1945},[95,67881,151],{"class":105},[95,67883,64213],{"class":210},[95,67885,53928],{"class":1945},[95,67887,151],{"class":105},[95,67889,3696],{"class":210},[95,67891,64297],{"class":105},[95,67893,344],{"class":51277},[95,67895,55291],{"class":105},[95,67897,52],{"class":51277},[95,67899,51284],{"class":105},[95,67901,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930],{"class":97,"line":16784},[95,67903,55279],{"class":105},[95,67905,52],{"class":51277},[95,67907,61029],{"class":105},[95,67909,344],{"class":51277},[95,67911,61034],{"class":1945},[95,67913,151],{"class":105},[95,67915,64213],{"class":210},[95,67917,53928],{"class":1945},[95,67919,151],{"class":105},[95,67921,3709],{"class":210},[95,67923,64324],{"class":105},[95,67925,344],{"class":51277},[95,67927,55291],{"class":105},[95,67929,52],{"class":51277},[95,67931,51284],{"class":105},[95,67933,67934,67936,67938],{"class":97,"line":16798},[95,67935,55384],{"class":105},[95,67937,1113],{"class":51277},[95,67939,51284],{"class":105},[95,67941,67942,67944,67946],{"class":97,"line":16803},[95,67943,51753],{"class":105},[95,67945,51588],{"class":51277},[95,67947,51284],{"class":105},[95,67949,67950,67952,67954,67956,67958,67960],{"class":97,"line":16809},[95,67951,51318],{"class":105},[95,67953,51588],{"class":51277},[95,67955,53463],{"class":1945},[95,67957,151],{"class":105},[95,67959,64361],{"class":210},[95,67961,51284],{"class":105},[95,67963,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994],{"class":97,"line":16814},[95,67965,55211],{"class":105},[95,67967,51588],{"class":51277},[95,67969,53463],{"class":1945},[95,67971,151],{"class":105},[95,67973,64376],{"class":210},[95,67975,61029],{"class":105},[95,67977,1444],{"class":51277},[95,67979,55216],{"class":1945},[95,67981,151],{"class":105},[95,67983,64387],{"class":210},[95,67985,55224],{"class":1945},[95,67987,151],{"class":105},[95,67989,7635],{"class":210},[95,67991,64396],{"class":105},[95,67993,51588],{"class":51277},[95,67995,51284],{"class":105},[95,67997,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028],{"class":97,"line":16828},[95,67999,55211],{"class":105},[95,68001,51588],{"class":51277},[95,68003,53463],{"class":1945},[95,68005,151],{"class":105},[95,68007,62600],{"class":210},[95,68009,61029],{"class":105},[95,68011,1444],{"class":51277},[95,68013,55216],{"class":1945},[95,68015,151],{"class":105},[95,68017,64423],{"class":210},[95,68019,55224],{"class":1945},[95,68021,151],{"class":105},[95,68023,7635],{"class":210},[95,68025,64396],{"class":105},[95,68027,51588],{"class":51277},[95,68029,51284],{"class":105},[95,68031,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062],{"class":97,"line":16833},[95,68033,55211],{"class":105},[95,68035,51588],{"class":51277},[95,68037,53463],{"class":1945},[95,68039,151],{"class":105},[95,68041,62600],{"class":210},[95,68043,61029],{"class":105},[95,68045,1444],{"class":51277},[95,68047,55216],{"class":1945},[95,68049,151],{"class":105},[95,68051,64458],{"class":210},[95,68053,55224],{"class":1945},[95,68055,151],{"class":105},[95,68057,7635],{"class":210},[95,68059,64396],{"class":105},[95,68061,51588],{"class":51277},[95,68063,51284],{"class":105},[95,68065,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096],{"class":97,"line":16838},[95,68067,55211],{"class":105},[95,68069,51588],{"class":51277},[95,68071,53463],{"class":1945},[95,68073,151],{"class":105},[95,68075,62600],{"class":210},[95,68077,61029],{"class":105},[95,68079,1444],{"class":51277},[95,68081,55216],{"class":1945},[95,68083,151],{"class":105},[95,68085,64493],{"class":210},[95,68087,55224],{"class":1945},[95,68089,151],{"class":105},[95,68091,7635],{"class":210},[95,68093,64396],{"class":105},[95,68095,51588],{"class":51277},[95,68097,51284],{"class":105},[95,68099,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130],{"class":97,"line":16852},[95,68101,55211],{"class":105},[95,68103,51588],{"class":51277},[95,68105,53463],{"class":1945},[95,68107,151],{"class":105},[95,68109,62600],{"class":210},[95,68111,61029],{"class":105},[95,68113,1444],{"class":51277},[95,68115,55216],{"class":1945},[95,68117,151],{"class":105},[95,68119,64528],{"class":210},[95,68121,55224],{"class":1945},[95,68123,151],{"class":105},[95,68125,7635],{"class":210},[95,68127,64396],{"class":105},[95,68129,51588],{"class":51277},[95,68131,51284],{"class":105},[95,68133,68134,68136,68138],{"class":97,"line":16864},[95,68135,51753],{"class":105},[95,68137,51588],{"class":51277},[95,68139,51284],{"class":105},[95,68141,68142,68144,68146],{"class":97,"line":16869},[95,68143,52394],{"class":105},[95,68145,51588],{"class":51277},[95,68147,51284],{"class":105},[95,68149,68150,68152,68154],{"class":97,"line":16882},[95,68151,52121],{"class":105},[95,68153,51790],{"class":51277},[95,68155,51284],{"class":105},[95,68157,68158],{"class":97,"line":16887},[95,68159,68160],{"class":164},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[95,68162,68163],{"class":97,"line":16892},[95,68164,68165],{"class":164},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[95,68167,68168,68170,68172,68174,68176,68178,68180,68183],{"class":97,"line":16897},[95,68169,11204],{"class":101},[95,68171,61269],{"class":154},[95,68173,13547],{"class":101},[95,68175,54373],{"class":105},[95,68177,54376],{"class":1945},[95,68179,106],{"class":105},[95,68181,68182],{"class":210},"'.tab-nav ul'",[95,68184,112],{"class":105},[95,68186,68187],{"class":97,"line":16910},[95,68188,68189],{"class":164},"    \u002F\u002F 2.添加事件\n",[95,68191,68192,68194,68196,68198,68200,68202,68204,68206,68208],{"class":97,"line":16915},[95,68193,66931],{"class":105},[95,68195,57790],{"class":1945},[95,68197,106],{"class":105},[95,68199,57795],{"class":210},[95,68201,12418],{"class":105},[95,68203,54426],{"class":101},[95,68205,1640],{"class":105},[95,68207,180],{"class":5199},[95,68209,12425],{"class":105},[95,68211,68212,68214,68216],{"class":97,"line":32618},[95,68213,58221],{"class":105},[95,68215,66987],{"class":1945},[95,68217,66990],{"class":105},[95,68219,68220],{"class":97,"line":32624},[95,68221,68222],{"class":164},"      \u002F\u002Fe.targer是我们点击的对象\n",[95,68224,68225,68227,68229,68231,68234],{"class":97,"line":32630},[95,68226,54457],{"class":101},[95,68228,67011],{"class":105},[95,68230,54463],{"class":101},[95,68232,68233],{"class":210}," 'A'",[95,68235,12425],{"class":105},[95,68237,68238,68240,68242,68244,68247,68249,68251,68253,68255],{"class":97,"line":32636},[95,68239,51902],{"class":105},[95,68241,54376],{"class":1945},[95,68243,106],{"class":105},[95,68245,68246],{"class":210},"'.active'",[95,68248,56980],{"class":105},[95,68250,56983],{"class":1945},[95,68252,106],{"class":105},[95,68254,64691],{"class":210},[95,68256,112],{"class":105},[95,68258,68259,68262,68264,68266,68268],{"class":97,"line":32642},[95,68260,68261],{"class":105},"        e.target.classList.",[95,68263,5317],{"class":1945},[95,68265,106],{"class":105},[95,68267,64691],{"class":210},[95,68269,112],{"class":105},[95,68271,68272],{"class":97,"line":32653},[95,68273,2382],{"emptyLinePlaceholder":21},[95,68275,68276],{"class":97,"line":32659},[95,68277,68278],{"class":164},"        \u002F\u002F 下面大盒子模块\n",[95,68280,68281],{"class":97,"line":32679},[95,68282,68283],{"class":164},"        \u002F\u002F console.log(e.target.dataset.id)\n",[95,68285,68286,68288,68290,68292,68294],{"class":97,"line":32685},[95,68287,61247],{"class":101},[95,68289,3014],{"class":154},[95,68291,13547],{"class":101},[95,68293,45551],{"class":101},[95,68295,68296],{"class":105},"e.target.dataset.id\n",[95,68298,68299,68301,68303,68305,68307,68309,68311,68313,68315],{"class":97,"line":32696},[95,68300,51902],{"class":105},[95,68302,54376],{"class":1945},[95,68304,106],{"class":105},[95,68306,64739],{"class":210},[95,68308,56980],{"class":105},[95,68310,56983],{"class":1945},[95,68312,106],{"class":105},[95,68314,64691],{"class":210},[95,68316,112],{"class":105},[95,68318,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343],{"class":97,"line":32702},[95,68320,51902],{"class":105},[95,68322,54376],{"class":1945},[95,68324,106],{"class":105},[95,68326,64765],{"class":210},[95,68328,547],{"class":105},[95,68330,45551],{"class":101},[95,68332,25103],{"class":154},[95,68334,57009],{"class":210},[95,68336,56980],{"class":105},[95,68338,5317],{"class":1945},[95,68340,106],{"class":105},[95,68342,64691],{"class":210},[95,68344,112],{"class":105},[95,68346,68347],{"class":97,"line":32708},[95,68348,2382],{"emptyLinePlaceholder":21},[95,68350,68351],{"class":97,"line":32714},[95,68352,52375],{"class":105},[95,68354,68355],{"class":97,"line":32720},[95,68356,33446],{"class":105},[95,68358,68359,68361,68363],{"class":97,"line":32726},[95,68360,52394],{"class":105},[95,68362,51790],{"class":51277},[95,68364,51284],{"class":105},[95,68366,68367,68369,68371],{"class":97,"line":32732},[95,68368,51762],{"class":105},[95,68370,51777],{"class":51277},[95,68372,51284],{"class":105},[95,68374,68375],{"class":97,"line":32738},[95,68376,2382],{"emptyLinePlaceholder":21},[95,68378,68379,68381,68383],{"class":97,"line":32758},[95,68380,51762],{"class":105},[95,68382,50612],{"class":51277},[95,68384,51284],{"class":105},[66,68386,68388],{"id":68387},"_333-页面加载事件","3.3.3 页面加载事件",[49,68390,68391],{},[52,68392,68393],{},"load",[10,68395,68396],{},[1444,68397],{"alt":14,"src":68398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[10,68400,68401],{},"window代表整个窗口，比document还要大",[10,68403,68404],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[10,68406,68407],{},"img.addEventListener('load', function () {",[10,68409,68410],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[10,68412,52441],{},[49,68414,68415],{"start":15},[52,68416,68417],{},"DOMContentLoaded",[10,68419,68420],{},[1444,68421],{"alt":14,"src":68422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[10,68424,68425],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[66,68427,68429],{"id":68428},"_334-元素滚动事件","3.3.4 元素滚动事件",[10,68431,68432],{},[1444,68433],{"alt":14,"src":68434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[10,68436,68437],{},[1444,68438],{"alt":14,"src":68439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[10,68441,68442],{},[1444,68443],{"alt":14,"src":68444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[10,68446,68447],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[10,68449,68450],{},"获得的是数字型数据，不带单位",[10,68452,68453],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[10,68455,68456],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[10,68458,68459],{},"它是通过document.documentElement来获取",[10,68461,68462],{},[1444,68463],{"alt":14,"src":68464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[10,68466,68467],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[66,68469,68471],{"id":68470},"_335-页面缩放事件","3.3.5 页面缩放事件",[10,68473,68474],{},[1444,68475],{"alt":14,"src":68476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[10,68478,68479],{},[1444,68480],{"alt":14,"src":68481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[66,68483,68485],{"id":68484},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[10,68487,68488],{},[1444,68489],{"alt":14,"src":68490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[10,68492,68493],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[10,68495,68496],{},[1444,68497],{"alt":14,"src":68498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[10,68500,68501],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[10,68503,68504],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[10,68506,68507],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[10,68509,68510],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[10,68512,68513],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[10,68515,68516],{},[1444,68517],{"alt":14,"src":68518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[10,68520,68521],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[10,68523,68524],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[10,68526,68527],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[10,68529,68530],{},"e.pageX-box.getBoundingClientRect()",[66,68532,68534],{"id":68533},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[10,68536,68537],{},[1444,68538],{"alt":14,"src":68539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[10,68541,68542],{},"这个是相对于视口来说的，它是个方法，不是属性值",[66,68544,68546],{"id":68545},"_338-总结","3.3.8 总结",[10,68548,68549],{},[1444,68550],{"alt":14,"src":68551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[10,68553,68554],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[10,68556,68557],{},"修改盒子的宽高只能通过width和height来实现",[66,68559,68561],{"id":68560},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[86,68563,68565],{"className":50610,"code":68564,"language":50612,"meta":14,"style":14},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[92,68566,68567,68572,68577,68582,68587],{"__ignoreMap":14},[95,68568,68569],{"class":97,"line":98},[95,68570,68571],{"class":105},"\u002F* 页面滑动 *\u002F\n",[95,68573,68574],{"class":97,"line":15},[95,68575,68576],{"class":105},"html {\n",[95,68578,68579],{"class":97,"line":1161},[95,68580,68581],{"class":105},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[95,68583,68584],{"class":97,"line":1176},[95,68585,68586],{"class":105},"  scroll-behavior: smooth;\n",[95,68588,68589],{"class":97,"line":1182},[95,68590,1547],{"class":105},[10,68592,68593],{},"默认是auto",[66,68595,68597],{"id":68596},"_3310-日期对象","3.3.10 日期对象",[21981,68599,68601],{"id":68600},"_33101-实例化","3.3.10.1 实例化",[10,68603,68604],{},[1444,68605],{"alt":14,"src":68606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21981,68608,68610],{"id":68609},"_33102-时期对象方法","3.3.10.2 时期对象方法",[10,68612,68613],{},[1444,68614],{"alt":14,"src":68615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[10,68617,68618],{},"月份+1",[10,68620,68621],{},"老外认为第一天为0，星期天",[10,68623,68624],{},"方法使用的时候必须要跟括号",[10,68626,68627],{},"快速获得日期",[10,68629,68630],{},"\u002F\u002F 得到年月日",[10,68632,68633],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[10,68635,68636],{},"\u002F\u002F 得到当地日期",[10,68638,68639],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[10,68641,68642],{},"\u002F\u002F 得到当地时间",[10,68644,68645],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[10,68647,68648],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[10,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",[10,68656,68657],{},"学会去封装函数！",[21981,68659,68661],{"id":68660},"_33103-时间戳","3.3.10.3 时间戳",[10,68663,68664],{},[1444,68665],{"alt":14,"src":68666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[10,68668,68669],{},[1444,68670],{"alt":14,"src":68671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[10,68673,68674],{},"三种方法记住一个就可以",[66,68676,68678],{"id":68677},"_3311-节点操作","3.3.11 节点操作",[21981,68680,68682],{"id":68681},"_33111-dom节点","3.3.11.1 DOM节点",[10,68684,68685],{},[1444,68686],{"alt":14,"src":68687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[10,68689,68690],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21981,68692,68694],{"id":68693},"_33112-查找节点","3.3.11.2 查找节点",[10,68696,68697],{},"前边的document.querySelector()是获取的元素",[10,68699,68700],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[10,68702,68703],{},[1444,68704],{"alt":14,"src":68705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[49,68707,68708],{},[52,68709,68710],{},"父节点",[10,68712,68713],{},[1444,68714],{"alt":14,"src":68715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[49,68717,68718],{"start":15},[52,68719,68720],{},"子节点",[10,68722,68723],{},[1444,68724],{"alt":14,"src":68725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[10,68727,68728],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[10,68730,68731],{},"children获得的是伪数组，是亲儿子",[49,68733,68734],{"start":1161},[52,68735,68736],{},"兄弟节点",[10,68738,68739],{},[1444,68740],{"alt":14,"src":68741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21981,68743,68745],{"id":68744},"_33113-增加节点","3.3.11.3 增加节点",[10,68747,68748],{},[1444,68749],{"alt":14,"src":68750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[10,68752,68753],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[10,68755,68756],{},[1444,68757],{"alt":14,"src":68758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[10,68760,68761],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[10,68763,68764],{},"下面是写法的部分展示，就按照下边的格式来写",[10,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",[10,68772,68773],{},[1444,68774],{"alt":14,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[10,68777,68778],{},"false只克隆标签，里边的内容不会克隆过来",[86,68780,68782],{"className":50610,"code":68781,"language":50612,"meta":14,"style":14},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[92,68783,68784],{"__ignoreMap":14},[95,68785,68786],{"class":97,"line":98},[95,68787,68781],{"class":105},[21981,68789,68791],{"id":68790},"_33114-删除节点","3.3.11.4 删除节点",[10,68793,68794],{},[1444,68795],{"alt":14,"src":68796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[10,68798,68799],{},"父亲删儿子",[10,68801,68802],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[66,68804,68806],{"id":68805},"_3312-m端事件","3.3.12 M端事件",[10,68808,68809],{},"M端就是移动端",[10,68811,68812],{},[1444,68813],{"alt":14,"src":68814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[66,68816,68818],{"id":68817},"_3313-插件","3.3.13 插件",[10,68820,68821],{},"要熟悉官网！！！",[10,68823,68824],{},[344,68825,68826],{"href":68826,"rel":68827},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23849],[10,68829,68830],{},[344,68831,68832],{"href":68832,"rel":68833},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23849],[66,68835,68837],{"id":68836},"_3314-学生信息表","3.3.14 学生信息表",[49,68839,68840,68843,68846,68849,68852,68855,68858,68861],{},[52,68841,68842],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[52,68844,68845],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[52,68847,68848],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[52,68850,68851],{},"用好表单元素自带的属性，value,name等",[52,68853,68854],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[52,68856,68857],{},"不要忘记事件对象",[52,68859,68860],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[52,68862,68863],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[10,68865,68866],{},"结构：",[86,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",[92,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},[95,68873,68874,68876,68878,68880],{"class":97,"line":98},[95,68875,51274],{"class":105},[95,68877,51278],{"class":51277},[95,68879,51281],{"class":1945},[95,68881,51284],{"class":105},[95,68883,68884,68886,68888,68890,68892,68894],{"class":97,"line":15},[95,68885,1016],{"class":105},[95,68887,50612],{"class":51277},[95,68889,51293],{"class":1945},[95,68891,151],{"class":105},[95,68893,51298],{"class":210},[95,68895,51284],{"class":105},[95,68897,68898],{"class":97,"line":1161},[95,68899,2382],{"emptyLinePlaceholder":21},[95,68901,68902,68904,68906],{"class":97,"line":1176},[95,68903,1016],{"class":105},[95,68905,51311],{"class":51277},[95,68907,51284],{"class":105},[95,68909,68910,68912,68914,68916,68918,68920],{"class":97,"line":1182},[95,68911,52121],{"class":105},[95,68913,51321],{"class":51277},[95,68915,51324],{"class":1945},[95,68917,151],{"class":105},[95,68919,51329],{"class":210},[95,68921,59104],{"class":105},[95,68923,68924,68926,68928,68930,68932,68934,68936,68938,68940],{"class":97,"line":1196},[95,68925,52121],{"class":105},[95,68927,51321],{"class":51277},[95,68929,14903],{"class":1945},[95,68931,151],{"class":105},[95,68933,51368],{"class":210},[95,68935,51348],{"class":1945},[95,68937,151],{"class":105},[95,68939,51375],{"class":210},[95,68941,59104],{"class":105},[95,68943,68944,68946,68948,68950,68952,68954,68956,68958,68961],{"class":97,"line":1202},[95,68945,52121],{"class":105},[95,68947,51321],{"class":51277},[95,68949,51340],{"class":1945},[95,68951,151],{"class":105},[95,68953,51345],{"class":210},[95,68955,51348],{"class":1945},[95,68957,151],{"class":105},[95,68959,68960],{"class":210},"\"ie=edge\"",[95,68962,59104],{"class":105},[95,68964,68965,68967,68969,68972,68974],{"class":97,"line":1293},[95,68966,52121],{"class":105},[95,68968,51384],{"class":51277},[95,68970,68971],{"class":105},">学生信息管理\u003C\u002F",[95,68973,51384],{"class":51277},[95,68975,51284],{"class":105},[95,68977,68978,68980,68983,68986,68988,68991,68993,68995,68998],{"class":97,"line":1299},[95,68979,52121],{"class":105},[95,68981,68982],{"class":51277},"link",[95,68984,68985],{"class":1945}," rel",[95,68987,151],{"class":105},[95,68989,68990],{"class":210},"\"stylesheet\"",[95,68992,61034],{"class":1945},[95,68994,151],{"class":105},[95,68996,68997],{"class":210},"\"css\u002Findex.css\"",[95,68999,59104],{"class":105},[95,69001,69002,69004,69006],{"class":97,"line":1311},[95,69003,51762],{"class":105},[95,69005,51311],{"class":51277},[95,69007,51284],{"class":105},[95,69009,69010],{"class":97,"line":1594},[95,69011,2382],{"emptyLinePlaceholder":21},[95,69013,69014,69016,69018],{"class":97,"line":1599},[95,69015,1016],{"class":105},[95,69017,51777],{"class":51277},[95,69019,51284],{"class":105},[95,69021,69022,69024,69026,69029,69031],{"class":97,"line":1605},[95,69023,52121],{"class":105},[95,69025,33],{"class":51277},[95,69027,69028],{"class":105},">新增学员\u003C\u002F",[95,69030,33],{"class":51277},[95,69032,51284],{"class":105},[95,69034,69035,69037,69039,69041,69043,69045,69048,69050,69052],{"class":97,"line":1610},[95,69036,52121],{"class":105},[95,69038,66602],{"class":51277},[95,69040,53463],{"class":1945},[95,69042,151],{"class":105},[95,69044,62641],{"class":210},[95,69046,69047],{"class":1945}," autocomplete",[95,69049,151],{"class":105},[95,69051,31761],{"class":210},[95,69053,51284],{"class":105},[95,69055,69056,69059,69061,69063,69065,69067,69069,69071,69074,69076,69078,69080],{"class":97,"line":1624},[95,69057,69058],{"class":105},"    姓名：\u003C",[95,69060,53798],{"class":51277},[95,69062,53801],{"class":1945},[95,69064,151],{"class":105},[95,69066,62676],{"class":210},[95,69068,53463],{"class":1945},[95,69070,151],{"class":105},[95,69072,69073],{"class":210},"\"uname\"",[95,69075,14903],{"class":1945},[95,69077,151],{"class":105},[95,69079,69073],{"class":210},[95,69081,59104],{"class":105},[95,69083,69084,69087,69089,69091,69093,69095,69097,69099,69102,69104,69106,69108],{"class":97,"line":1629},[95,69085,69086],{"class":105},"    年龄：\u003C",[95,69088,53798],{"class":51277},[95,69090,53801],{"class":1945},[95,69092,151],{"class":105},[95,69094,62676],{"class":210},[95,69096,53463],{"class":1945},[95,69098,151],{"class":105},[95,69100,69101],{"class":210},"\"age\"",[95,69103,14903],{"class":1945},[95,69105,151],{"class":105},[95,69107,69101],{"class":210},[95,69109,59104],{"class":105},[95,69111,69112],{"class":97,"line":1635},[95,69113,69114],{"class":105},"    性别:\n",[95,69116,69117,69119,69122,69124,69126,69129,69131,69133,69135],{"class":97,"line":1656},[95,69118,51318],{"class":105},[95,69120,69121],{"class":51277},"select",[95,69123,14903],{"class":1945},[95,69125,151],{"class":105},[95,69127,69128],{"class":210},"\"gender\"",[95,69130,53463],{"class":1945},[95,69132,151],{"class":105},[95,69134,69128],{"class":210},[95,69136,51284],{"class":105},[95,69138,69139,69141,69144,69146,69148,69150,69153,69155],{"class":97,"line":1661},[95,69140,55211],{"class":105},[95,69142,69143],{"class":51277},"option",[95,69145,66628],{"class":1945},[95,69147,151],{"class":105},[95,69149,9944],{"class":210},[95,69151,69152],{"class":105},">男\u003C\u002F",[95,69154,69143],{"class":51277},[95,69156,51284],{"class":105},[95,69158,69159,69161,69163,69165,69167,69169,69172,69174],{"class":97,"line":1675},[95,69160,55211],{"class":105},[95,69162,69143],{"class":51277},[95,69164,66628],{"class":1945},[95,69166,151],{"class":105},[95,69168,10013],{"class":210},[95,69170,69171],{"class":105},">女\u003C\u002F",[95,69173,69143],{"class":51277},[95,69175,51284],{"class":105},[95,69177,69178,69180,69182],{"class":97,"line":1680},[95,69179,51753],{"class":105},[95,69181,69121],{"class":51277},[95,69183,51284],{"class":105},[95,69185,69186,69189,69191,69193,69195,69197,69199,69201,69204,69206,69208,69210],{"class":97,"line":1709},[95,69187,69188],{"class":105},"    薪资：\u003C",[95,69190,53798],{"class":51277},[95,69192,53801],{"class":1945},[95,69194,151],{"class":105},[95,69196,62676],{"class":210},[95,69198,53463],{"class":1945},[95,69200,151],{"class":105},[95,69202,69203],{"class":210},"\"salary\"",[95,69205,14903],{"class":1945},[95,69207,151],{"class":105},[95,69209,69203],{"class":210},[95,69211,59104],{"class":105},[95,69213,69214,69217,69219,69221,69223,69226,69228,69230,69232],{"class":97,"line":1714},[95,69215,69216],{"class":105},"    就业城市：\u003C",[95,69218,69121],{"class":51277},[95,69220,14903],{"class":1945},[95,69222,151],{"class":105},[95,69224,69225],{"class":210},"\"city\"",[95,69227,53463],{"class":1945},[95,69229,151],{"class":105},[95,69231,69225],{"class":210},[95,69233,51284],{"class":105},[95,69235,69236,69238,69240,69242,69244,69247,69250,69252],{"class":97,"line":1731},[95,69237,55211],{"class":105},[95,69239,69143],{"class":51277},[95,69241,66628],{"class":1945},[95,69243,151],{"class":105},[95,69245,69246],{"class":210},"\"北京\"",[95,69248,69249],{"class":105},">北京\u003C\u002F",[95,69251,69143],{"class":51277},[95,69253,51284],{"class":105},[95,69255,69256,69258,69260,69262,69264,69267,69270,69272],{"class":97,"line":1736},[95,69257,55211],{"class":105},[95,69259,69143],{"class":51277},[95,69261,66628],{"class":1945},[95,69263,151],{"class":105},[95,69265,69266],{"class":210},"\"上海\"",[95,69268,69269],{"class":105},">上海\u003C\u002F",[95,69271,69143],{"class":51277},[95,69273,51284],{"class":105},[95,69275,69276,69278,69280,69282,69284,69287,69290,69292],{"class":97,"line":1741},[95,69277,55211],{"class":105},[95,69279,69143],{"class":51277},[95,69281,66628],{"class":1945},[95,69283,151],{"class":105},[95,69285,69286],{"class":210},"\"广州\"",[95,69288,69289],{"class":105},">广州\u003C\u002F",[95,69291,69143],{"class":51277},[95,69293,51284],{"class":105},[95,69295,69296,69298,69300,69302,69304,69307,69310,69312],{"class":97,"line":1746},[95,69297,55211],{"class":105},[95,69299,69143],{"class":51277},[95,69301,66628],{"class":1945},[95,69303,151],{"class":105},[95,69305,69306],{"class":210},"\"深圳\"",[95,69308,69309],{"class":105},">深圳\u003C\u002F",[95,69311,69143],{"class":51277},[95,69313,51284],{"class":105},[95,69315,69316,69318,69320,69322,69324,69327,69330,69332],{"class":97,"line":1760},[95,69317,55211],{"class":105},[95,69319,69143],{"class":51277},[95,69321,66628],{"class":1945},[95,69323,151],{"class":105},[95,69325,69326],{"class":210},"\"曹县\"",[95,69328,69329],{"class":105},">曹县\u003C\u002F",[95,69331,69143],{"class":51277},[95,69333,51284],{"class":105},[95,69335,69336,69338,69340],{"class":97,"line":1765},[95,69337,51753],{"class":105},[95,69339,69121],{"class":51277},[95,69341,51284],{"class":105},[95,69343,69344,69346,69348,69350,69352,69355,69358,69360],{"class":97,"line":2559},[95,69345,51318],{"class":105},[95,69347,53864],{"class":51277},[95,69349,53463],{"class":1945},[95,69351,151],{"class":105},[95,69353,69354],{"class":210},"\"add\"",[95,69356,69357],{"class":105},">录入\u003C\u002F",[95,69359,53864],{"class":51277},[95,69361,51284],{"class":105},[95,69363,69364,69366,69368],{"class":97,"line":2573},[95,69365,52394],{"class":105},[95,69367,66602],{"class":51277},[95,69369,51284],{"class":105},[95,69371,69372],{"class":97,"line":2581},[95,69373,2382],{"emptyLinePlaceholder":21},[95,69375,69376,69378,69380,69383,69385],{"class":97,"line":2586},[95,69377,52121],{"class":105},[95,69379,33],{"class":51277},[95,69381,69382],{"class":105},">就业榜\u003C\u002F",[95,69384,33],{"class":51277},[95,69386,51284],{"class":105},[95,69388,69389,69391,69393],{"class":97,"line":2592},[95,69390,52121],{"class":105},[95,69392,243],{"class":51277},[95,69394,51284],{"class":105},[95,69396,69397,69399,69401],{"class":97,"line":2598},[95,69398,51318],{"class":105},[95,69400,246],{"class":51277},[95,69402,51284],{"class":105},[95,69404,69405,69407,69409],{"class":97,"line":2603},[95,69406,55211],{"class":105},[95,69408,249],{"class":51277},[95,69410,51284],{"class":105},[95,69412,69413,69415,69417,69420,69422],{"class":97,"line":7931},[95,69414,55279],{"class":105},[95,69416,252],{"class":51277},[95,69418,69419],{"class":105},">序号\u003C\u002F",[95,69421,252],{"class":51277},[95,69423,51284],{"class":105},[95,69425,69426,69428,69430,69433,69435],{"class":97,"line":7955},[95,69427,55279],{"class":105},[95,69429,252],{"class":51277},[95,69431,69432],{"class":105},">姓名\u003C\u002F",[95,69434,252],{"class":51277},[95,69436,51284],{"class":105},[95,69438,69439,69441,69443,69446,69448],{"class":97,"line":7960},[95,69440,55279],{"class":105},[95,69442,252],{"class":51277},[95,69444,69445],{"class":105},">年龄\u003C\u002F",[95,69447,252],{"class":51277},[95,69449,51284],{"class":105},[95,69451,69452,69454,69456,69459,69461],{"class":97,"line":7966},[95,69453,55279],{"class":105},[95,69455,252],{"class":51277},[95,69457,69458],{"class":105},">性别\u003C\u002F",[95,69460,252],{"class":51277},[95,69462,51284],{"class":105},[95,69464,69465,69467,69469,69472,69474],{"class":97,"line":7993},[95,69466,55279],{"class":105},[95,69468,252],{"class":51277},[95,69470,69471],{"class":105},">薪资\u003C\u002F",[95,69473,252],{"class":51277},[95,69475,51284],{"class":105},[95,69477,69478,69480,69482,69485,69487],{"class":97,"line":7998},[95,69479,55279],{"class":105},[95,69481,252],{"class":51277},[95,69483,69484],{"class":105},">就业城市\u003C\u002F",[95,69486,252],{"class":51277},[95,69488,51284],{"class":105},[95,69490,69491,69493,69495,69498,69500],{"class":97,"line":8004},[95,69492,55279],{"class":105},[95,69494,252],{"class":51277},[95,69496,69497],{"class":105},">操作\u003C\u002F",[95,69499,252],{"class":51277},[95,69501,51284],{"class":105},[95,69503,69504,69506,69508],{"class":97,"line":8016},[95,69505,55384],{"class":105},[95,69507,249],{"class":51277},[95,69509,51284],{"class":105},[95,69511,69512,69514,69516],{"class":97,"line":8028},[95,69513,51753],{"class":105},[95,69515,246],{"class":51277},[95,69517,51284],{"class":105},[95,69519,69520,69522,69524],{"class":97,"line":8040},[95,69521,51318],{"class":105},[95,69523,290],{"class":51277},[95,69525,51284],{"class":105},[95,69527,69528],{"class":97,"line":9699},[95,69529,69530],{"class":164},"      \u003C!-- \n",[95,69532,69533],{"class":97,"line":9724},[95,69534,69535],{"class":164},"        \u003Ctr>\n",[95,69537,69538],{"class":97,"line":9747},[95,69539,69540],{"class":164},"          \u003Ctd>1001\u003C\u002Ftd>\n",[95,69542,69543],{"class":97,"line":9771},[95,69544,69545],{"class":164},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[95,69547,69548],{"class":97,"line":9776},[95,69549,69550],{"class":164},"          \u003Ctd>19\u003C\u002Ftd>\n",[95,69552,69553],{"class":97,"line":9781},[95,69554,69555],{"class":164},"          \u003Ctd>男\u003C\u002Ftd>\n",[95,69557,69558],{"class":97,"line":9786},[95,69559,69560],{"class":164},"          \u003Ctd>15000\u003C\u002Ftd>\n",[95,69562,69563],{"class":97,"line":9795},[95,69564,69565],{"class":164},"          \u003Ctd>上海\u003C\u002Ftd>\n",[95,69567,69568],{"class":97,"line":9800},[95,69569,69570],{"class":164},"          \u003Ctd>\n",[95,69572,69573],{"class":97,"line":9806},[95,69574,69575],{"class":164},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[95,69577,69578],{"class":97,"line":9827},[95,69579,69580],{"class":164},"          \u003C\u002Ftd>\n",[95,69582,69583],{"class":97,"line":9833},[95,69584,69585],{"class":164},"        \u003C\u002Ftr> \n",[95,69587,69588],{"class":97,"line":9847},[95,69589,69590],{"class":164},"        -->\n",[95,69592,69593,69595,69597],{"class":97,"line":9853},[95,69594,51753],{"class":105},[95,69596,290],{"class":51277},[95,69598,51284],{"class":105},[95,69600,69601,69603,69605],{"class":97,"line":9880},[95,69602,52394],{"class":105},[95,69604,243],{"class":51277},[95,69606,51284],{"class":105},[95,69608,69609,69611,69613],{"class":97,"line":9889},[95,69610,52121],{"class":105},[95,69612,51790],{"class":51277},[95,69614,51284],{"class":105},[95,69616,69617],{"class":97,"line":9895},[95,69618,59935],{"class":164},[95,69620,69621,69623,69626,69628,69630,69632,69634,69637],{"class":97,"line":9903},[95,69622,11204],{"class":101},[95,69624,69625],{"class":154}," uname",[95,69627,13547],{"class":101},[95,69629,54373],{"class":105},[95,69631,54376],{"class":1945},[95,69633,106],{"class":105},[95,69635,69636],{"class":210},"'.uname'",[95,69638,112],{"class":105},[95,69640,69641,69643,69645,69647,69649,69651,69653,69656],{"class":97,"line":9908},[95,69642,11204],{"class":101},[95,69644,15672],{"class":154},[95,69646,13547],{"class":101},[95,69648,54373],{"class":105},[95,69650,54376],{"class":1945},[95,69652,106],{"class":105},[95,69654,69655],{"class":210},"'.age'",[95,69657,112],{"class":105},[95,69659,69660,69662,69665,69667,69669,69671,69673,69676],{"class":97,"line":16587},[95,69661,11204],{"class":101},[95,69663,69664],{"class":154}," gender",[95,69666,13547],{"class":101},[95,69668,54373],{"class":105},[95,69670,54376],{"class":1945},[95,69672,106],{"class":105},[95,69674,69675],{"class":210},"'.gender'",[95,69677,112],{"class":105},[95,69679,69680,69682,69685,69687,69689,69691,69693,69696],{"class":97,"line":16593},[95,69681,11204],{"class":101},[95,69683,69684],{"class":154}," salary",[95,69686,13547],{"class":101},[95,69688,54373],{"class":105},[95,69690,54376],{"class":1945},[95,69692,106],{"class":105},[95,69694,69695],{"class":210},"'.salary'",[95,69697,112],{"class":105},[95,69699,69700,69702,69705,69707,69709,69711,69713,69716],{"class":97,"line":16616},[95,69701,11204],{"class":101},[95,69703,69704],{"class":154}," city",[95,69706,13547],{"class":101},[95,69708,54373],{"class":105},[95,69710,54376],{"class":1945},[95,69712,106],{"class":105},[95,69714,69715],{"class":210},"'.city'",[95,69717,112],{"class":105},[95,69719,69720,69722,69725,69727,69729,69731,69733,69736],{"class":97,"line":16622},[95,69721,11204],{"class":101},[95,69723,69724],{"class":154}," tbody",[95,69726,13547],{"class":101},[95,69728,54373],{"class":105},[95,69730,54376],{"class":1945},[95,69732,106],{"class":105},[95,69734,69735],{"class":210},"'tbody'",[95,69737,112],{"class":105},[95,69739,69740],{"class":97,"line":16645},[95,69741,2382],{"emptyLinePlaceholder":21},[95,69743,69744],{"class":97,"line":16659},[95,69745,69746],{"class":164},"    \u002F\u002F 获取所有带有name属性的元素\n",[95,69748,69749,69751,69754,69756,69758,69760,69762,69765],{"class":97,"line":16679},[95,69750,11204],{"class":101},[95,69752,69753],{"class":154}," items",[95,69755,13547],{"class":101},[95,69757,54373],{"class":105},[95,69759,55658],{"class":1945},[95,69761,106],{"class":105},[95,69763,69764],{"class":210},"'[name]'",[95,69766,112],{"class":105},[95,69768,69769],{"class":97,"line":16685},[95,69770,69771],{"class":164},"    \u002F\u002F 声明一个空的数组\n",[95,69773,69774,69776,69778,69780],{"class":97,"line":16696},[95,69775,11204],{"class":101},[95,69777,57672],{"class":154},[95,69779,13547],{"class":101},[95,69781,51815],{"class":105},[95,69783,69784],{"class":97,"line":16719},[95,69785,69786],{"class":164},"    \u002F\u002F 1.录入模块\n",[95,69788,69789],{"class":97,"line":16741},[95,69790,69791],{"class":164},"    \u002F\u002F 1.1这是一个表单提交事件\n",[95,69793,69794,69796,69799,69801,69803,69805,69807,69810],{"class":97,"line":16746},[95,69795,11204],{"class":101},[95,69797,69798],{"class":154}," info",[95,69800,13547],{"class":101},[95,69802,54373],{"class":105},[95,69804,54376],{"class":1945},[95,69806,106],{"class":105},[95,69808,69809],{"class":210},"'.info'",[95,69811,112],{"class":105},[95,69813,69814,69817,69819,69821,69824,69826,69828,69830,69832],{"class":97,"line":16752},[95,69815,69816],{"class":105},"    info.",[95,69818,57790],{"class":1945},[95,69820,106],{"class":105},[95,69822,69823],{"class":210},"'submit'",[95,69825,12418],{"class":105},[95,69827,54426],{"class":101},[95,69829,1640],{"class":105},[95,69831,180],{"class":5199},[95,69833,12425],{"class":105},[95,69835,69836],{"class":97,"line":16766},[95,69837,69838],{"class":164},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[95,69840,69841,69844,69847],{"class":97,"line":16779},[95,69842,69843],{"class":105},"      e.",[95,69845,69846],{"class":1945},"preventDefault",[95,69848,1958],{"class":105},[95,69850,69851],{"class":97,"line":16784},[95,69852,59989],{"class":164},[95,69854,69855],{"class":97,"line":16798},[95,69856,2382],{"emptyLinePlaceholder":21},[95,69858,69859],{"class":97,"line":16803},[95,69860,69861],{"class":164},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[95,69863,69864],{"class":97,"line":16809},[95,69865,69866],{"class":164},"      \u002F\u002F 先遍历循环\n",[95,69868,69869,69871,69873,69875,69877,69879,69881,69883,69885,69888,69890,69892,69894],{"class":97,"line":16814},[95,69870,52261],{"class":101},[95,69872,1640],{"class":105},[95,69874,51824],{"class":101},[95,69876,9421],{"class":105},[95,69878,151],{"class":101},[95,69880,4075],{"class":154},[95,69882,9428],{"class":105},[95,69884,1016],{"class":101},[95,69886,69887],{"class":105}," items.",[95,69889,51945],{"class":154},[95,69891,3196],{"class":105},[95,69893,2274],{"class":101},[95,69895,12425],{"class":105},[95,69897,69898,69900,69903,69905,69908],{"class":97,"line":16828},[95,69899,2479],{"class":101},[95,69901,69902],{"class":105}," (items[i].value ",[95,69904,54463],{"class":101},[95,69906,69907],{"class":210}," ''",[95,69909,12425],{"class":105},[95,69911,69912,69915,69918,69920,69923],{"class":97,"line":16833},[95,69913,69914],{"class":101},"          return",[95,69916,69917],{"class":1945}," alert",[95,69919,106],{"class":105},[95,69921,69922],{"class":210},"'输入内容不能为空'",[95,69924,112],{"class":105},[95,69926,69927],{"class":97,"line":16838},[95,69928,2511],{"class":105},[95,69930,69931],{"class":97,"line":16852},[95,69932,52375],{"class":105},[95,69934,69935],{"class":97,"line":16864},[95,69936,2382],{"emptyLinePlaceholder":21},[95,69938,69939],{"class":97,"line":16869},[95,69940,69941],{"class":164},"      \u002F\u002F 创建新的对象\n",[95,69943,69944,69946,69949,69951],{"class":97,"line":16882},[95,69945,58205],{"class":101},[95,69947,69948],{"class":154}," obj",[95,69950,13547],{"class":101},[95,69952,15555],{"class":105},[95,69954,69955,69958,69960,69962,69964],{"class":97,"line":16887},[95,69956,69957],{"class":105},"        stuID: arr.",[95,69959,51945],{"class":154},[95,69961,45551],{"class":101},[95,69963,25103],{"class":154},[95,69965,31451],{"class":105},[95,69967,69968],{"class":97,"line":16892},[95,69969,69970],{"class":105},"        uname: uname.value,\n",[95,69972,69973],{"class":97,"line":16897},[95,69974,69975],{"class":105},"        age: age.value,\n",[95,69977,69978],{"class":97,"line":16910},[95,69979,69980],{"class":105},"        gender: gender.value,\n",[95,69982,69983],{"class":97,"line":16915},[95,69984,69985],{"class":105},"        salary: salary.value,\n",[95,69987,69988],{"class":97,"line":32618},[95,69989,69990],{"class":105},"        city: city.value\n",[95,69992,69993],{"class":97,"line":32624},[95,69994,52375],{"class":105},[95,69996,69997],{"class":97,"line":32630},[95,69998,69999],{"class":164},"      \u002F\u002F console.log(obj);\n",[95,70001,70002],{"class":97,"line":32636},[95,70003,70004],{"class":164},"      \u002F\u002F 追加到数组里面\n",[95,70006,70007,70009,70011],{"class":97,"line":32642},[95,70008,57984],{"class":105},[95,70010,51861],{"class":1945},[95,70012,70013],{"class":105},"(obj)\n",[95,70015,70016],{"class":97,"line":32653},[95,70017,70018],{"class":164},"      \u002F\u002F console.log(arr);\n",[95,70020,70021],{"class":97,"line":32659},[95,70022,70023],{"class":164},"      \u002F\u002F 清空表单  reset重置表单\n",[95,70025,70026,70029,70031,70034],{"class":97,"line":32679},[95,70027,70028],{"class":154},"      this",[95,70030,664],{"class":105},[95,70032,70033],{"class":1945},"reset",[95,70035,1958],{"class":105},[95,70037,70038],{"class":97,"line":32685},[95,70039,70040],{"class":164},"      \u002F\u002F 调用渲染函数\n",[95,70042,70043,70046],{"class":97,"line":32696},[95,70044,70045],{"class":1945},"      render",[95,70047,1958],{"class":105},[95,70049,70050],{"class":97,"line":32702},[95,70051,33446],{"class":105},[95,70053,70054],{"class":97,"line":32708},[95,70055,70056],{"class":164},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[95,70058,70059,70062,70065],{"class":97,"line":32714},[95,70060,70061],{"class":101},"    function",[95,70063,70064],{"class":1945}," render",[95,70066,10836],{"class":105},[95,70068,70069],{"class":97,"line":32720},[95,70070,70071],{"class":164},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[95,70073,70074,70077,70079],{"class":97,"line":32726},[95,70075,70076],{"class":105},"      tbody.innerHTML ",[95,70078,151],{"class":101},[95,70080,70081],{"class":210}," ''\n",[95,70083,70084],{"class":97,"line":32732},[95,70085,70086],{"class":164},"      \u002F\u002F 遍历数组\n",[95,70088,70089,70091,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111,70113],{"class":97,"line":32738},[95,70090,52261],{"class":101},[95,70092,1640],{"class":105},[95,70094,51824],{"class":101},[95,70096,9421],{"class":105},[95,70098,151],{"class":101},[95,70100,4075],{"class":154},[95,70102,9428],{"class":105},[95,70104,1016],{"class":101},[95,70106,51942],{"class":105},[95,70108,51945],{"class":154},[95,70110,3196],{"class":105},[95,70112,2274],{"class":101},[95,70114,12425],{"class":105},[95,70116,70117,70119,70122,70124,70126,70129,70131,70134],{"class":97,"line":32758},[95,70118,61247],{"class":101},[95,70120,70121],{"class":154}," tr",[95,70123,13547],{"class":101},[95,70125,54373],{"class":105},[95,70127,70128],{"class":1945},"createElement",[95,70130,106],{"class":105},[95,70132,70133],{"class":210},"'tr'",[95,70135,112],{"class":105},[95,70137,70138,70141,70143],{"class":97,"line":32764},[95,70139,70140],{"class":105},"        tr.innerHTML ",[95,70142,151],{"class":101},[95,70144,70145],{"class":210}," `\n",[95,70147,70148,70151,70153,70155,70157,70160,70163],{"class":97,"line":32780},[95,70149,70150],{"class":210},"        \u003Ctd>${",[95,70152,3862],{"class":105},[95,70154,996],{"class":210},[95,70156,547],{"class":105},[95,70158,70159],{"class":210},"].",[95,70161,70162],{"class":105},"stuID",[95,70164,70165],{"class":210},"}\u003C\u002Ftd>\n",[95,70167,70168,70171,70173,70175,70177,70179,70182],{"class":97,"line":32786},[95,70169,70170],{"class":210},"          \u003Ctd>${",[95,70172,3862],{"class":105},[95,70174,996],{"class":210},[95,70176,547],{"class":105},[95,70178,70159],{"class":210},[95,70180,70181],{"class":105},"uname",[95,70183,70165],{"class":210},[95,70185,70186,70188,70190,70192,70194,70196,70199],{"class":97,"line":32800},[95,70187,70170],{"class":210},[95,70189,3862],{"class":105},[95,70191,996],{"class":210},[95,70193,547],{"class":105},[95,70195,70159],{"class":210},[95,70197,70198],{"class":105},"age",[95,70200,70165],{"class":210},[95,70202,70203,70205,70207,70209,70211,70213,70216],{"class":97,"line":32806},[95,70204,70170],{"class":210},[95,70206,3862],{"class":105},[95,70208,996],{"class":210},[95,70210,547],{"class":105},[95,70212,70159],{"class":210},[95,70214,70215],{"class":105},"gender",[95,70217,70165],{"class":210},[95,70219,70220,70222,70224,70226,70228,70230,70233],{"class":97,"line":32821},[95,70221,70170],{"class":210},[95,70223,3862],{"class":105},[95,70225,996],{"class":210},[95,70227,547],{"class":105},[95,70229,70159],{"class":210},[95,70231,70232],{"class":105},"salary",[95,70234,70165],{"class":210},[95,70236,70237,70239,70241,70243,70245,70247,70250],{"class":97,"line":32827},[95,70238,70170],{"class":210},[95,70240,3862],{"class":105},[95,70242,996],{"class":210},[95,70244,547],{"class":105},[95,70246,70159],{"class":210},[95,70248,70249],{"class":105},"city",[95,70251,70165],{"class":210},[95,70253,70254],{"class":97,"line":32836},[95,70255,69570],{"class":210},[95,70257,70258,70261,70263],{"class":97,"line":32842},[95,70259,70260],{"class":210},"            \u003Ca href=\"javascript:\" data-id=${",[95,70262,547],{"class":105},[95,70264,70265],{"class":210},"}>删除\u003C\u002Fa>\n",[95,70267,70268],{"class":97,"line":32851},[95,70269,70270],{"class":210},"          \u003C\u002Ftd> \n",[95,70272,70273],{"class":97,"line":32857},[95,70274,70275],{"class":210},"          `\n",[95,70277,70278],{"class":97,"line":32863},[95,70279,70280],{"class":164},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[95,70282,70283,70286,70289],{"class":97,"line":32872},[95,70284,70285],{"class":105},"        tbody.",[95,70287,70288],{"class":1945},"appendChild",[95,70290,70291],{"class":105},"(tr)\n",[95,70293,70294],{"class":97,"line":32878},[95,70295,52375],{"class":105},[95,70297,70298],{"class":97,"line":32889},[95,70299,2169],{"class":105},[95,70301,70302],{"class":97,"line":32895},[95,70303,2382],{"emptyLinePlaceholder":21},[95,70305,70306],{"class":97,"line":32914},[95,70307,70308],{"class":164},"    \u002F\u002F 3.删除委托\n",[95,70310,70311],{"class":97,"line":32920},[95,70312,70313],{"class":164},"    \u002F\u002F 3.1 事件委托 tbody\n",[95,70315,70316,70319,70321,70323,70325,70327,70329,70331,70333],{"class":97,"line":32931},[95,70317,70318],{"class":105},"    tbody.",[95,70320,57790],{"class":1945},[95,70322,106],{"class":105},[95,70324,57795],{"class":210},[95,70326,12418],{"class":105},[95,70328,54426],{"class":101},[95,70330,1640],{"class":105},[95,70332,180],{"class":5199},[95,70334,12425],{"class":105},[95,70336,70337,70339,70341,70343,70345],{"class":97,"line":32937},[95,70338,54457],{"class":101},[95,70340,67011],{"class":105},[95,70342,54463],{"class":101},[95,70344,68233],{"class":210},[95,70346,12425],{"class":105},[95,70348,70349],{"class":97,"line":32957},[95,70350,70351],{"class":164},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[95,70353,70354],{"class":97,"line":32973},[95,70355,70356],{"class":164},"        \u002F\u002F console.log(e.target.dataset.id);\n",[95,70358,70359],{"class":97,"line":32979},[95,70360,70361],{"class":164},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[95,70363,70364,70367,70369,70372,70374],{"class":97,"line":32993},[95,70365,70366],{"class":105},"        arr.",[95,70368,57987],{"class":1945},[95,70370,70371],{"class":105},"(e.target.dataset.id, ",[95,70373,323],{"class":154},[95,70375,112],{"class":105},[95,70377,70378],{"class":97,"line":32999},[95,70379,70380],{"class":164},"        \u002F\u002F 重新渲染一次\n",[95,70382,70383,70386],{"class":97,"line":33005},[95,70384,70385],{"class":1945},"        render",[95,70387,1958],{"class":105},[95,70389,70390],{"class":97,"line":33016},[95,70391,52375],{"class":105},[95,70393,70394],{"class":97,"line":33022},[95,70395,33446],{"class":105},[95,70397,70398,70400,70402],{"class":97,"line":33028},[95,70399,52394],{"class":105},[95,70401,51790],{"class":51277},[95,70403,51284],{"class":105},[95,70405,70406],{"class":97,"line":33038},[95,70407,2382],{"emptyLinePlaceholder":21},[95,70409,70410,70412,70414],{"class":97,"line":33044},[95,70411,51762],{"class":105},[95,70413,51777],{"class":51277},[95,70415,51284],{"class":105},[95,70417,70418],{"class":97,"line":33055},[95,70419,2382],{"emptyLinePlaceholder":21},[95,70421,70422,70424,70426],{"class":97,"line":33061},[95,70423,51762],{"class":105},[95,70425,50612],{"class":51277},[95,70427,51284],{"class":105},[10,70429,70430],{},"样式：",[86,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",[92,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},[95,70439,70440],{"class":97,"line":98},[95,70441,70442],{"class":105},"* {\n",[95,70444,70445,70448,70450],{"class":97,"line":15},[95,70446,70447],{"class":51277},"  margin",[95,70449,51414],{"class":105},[95,70451,70452],{"class":210},"0;\n",[95,70454,70455,70458,70460],{"class":97,"line":1161},[95,70456,70457],{"class":210},"  padding",[95,70459,51414],{"class":105},[95,70461,70452],{"class":210},[95,70463,70464],{"class":97,"line":1176},[95,70465,1547],{"class":105},[95,70467,70468],{"class":97,"line":1182},[95,70469,2382],{"emptyLinePlaceholder":21},[95,70471,70472],{"class":97,"line":1196},[95,70473,70474],{"class":210},"a {\n",[95,70476,70477,70480,70482],{"class":97,"line":1202},[95,70478,70479],{"class":51277},"  text-decoration",[95,70481,51414],{"class":105},[95,70483,70484],{"class":210},"none;\n",[95,70486,70487],{"class":97,"line":1293},[95,70488,70489],{"class":210},"  color:#721c24;\n",[95,70491,70492],{"class":97,"line":1299},[95,70493,1547],{"class":105},[95,70495,70496],{"class":97,"line":1311},[95,70497,70498],{"class":210},"h1 {\n",[95,70500,70501,70504,70506],{"class":97,"line":1594},[95,70502,70503],{"class":51277},"  text-align",[95,70505,51414],{"class":105},[95,70507,70508],{"class":210},"center;\n",[95,70510,70511],{"class":97,"line":1599},[95,70512,70513],{"class":210},"  color:#333;\n",[95,70515,70516,70518,70520],{"class":97,"line":1605},[95,70517,70447],{"class":51277},[95,70519,51414],{"class":105},[95,70521,70522],{"class":210},"20px 0;\n",[95,70524,70525],{"class":97,"line":1610},[95,70526,2656],{"class":105},[95,70528,70529],{"class":97,"line":1624},[95,70530,1547],{"class":105},[95,70532,70533],{"class":97,"line":1629},[95,70534,70535],{"class":210},"table {\n",[95,70537,70538],{"class":97,"line":1635},[95,70539,70540],{"class":210},"  margin:0 auto;\n",[95,70542,70543,70546,70548],{"class":97,"line":1656},[95,70544,70545],{"class":51277},"  width",[95,70547,51414],{"class":105},[95,70549,70550],{"class":210},"800px;\n",[95,70552,70553,70556,70558],{"class":97,"line":1661},[95,70554,70555],{"class":51277},"  border-collapse",[95,70557,51414],{"class":105},[95,70559,70560],{"class":210},"collapse;\n",[95,70562,70563],{"class":97,"line":1675},[95,70564,70565],{"class":210},"  color:#004085;\n",[95,70567,70568],{"class":97,"line":1680},[95,70569,1547],{"class":105},[95,70571,70572],{"class":97,"line":1709},[95,70573,70574],{"class":210},"th {\n",[95,70576,70577,70579,70581],{"class":97,"line":1714},[95,70578,70457],{"class":51277},[95,70580,51414],{"class":105},[95,70582,70583],{"class":210},"10px;\n",[95,70585,70586,70589,70591],{"class":97,"line":1731},[95,70587,70588],{"class":51277},"  background",[95,70590,51414],{"class":105},[95,70592,70593],{"class":164},"#cfe5ff;\n",[95,70595,70596],{"class":97,"line":1736},[95,70597,70598],{"class":105},"  \n",[95,70600,70601,70604,70606],{"class":97,"line":1741},[95,70602,70603],{"class":51277},"  font-size",[95,70605,51414],{"class":105},[95,70607,70608],{"class":210},"20px;\n",[95,70610,70611,70614,70616],{"class":97,"line":1746},[95,70612,70613],{"class":51277},"  font-weight",[95,70615,51414],{"class":105},[95,70617,70618],{"class":210},"400;\n",[95,70620,70621],{"class":97,"line":1760},[95,70622,1547],{"class":105},[95,70624,70625],{"class":97,"line":1765},[95,70626,70627],{"class":210},"td,th {\n",[95,70629,70630,70633],{"class":97,"line":2559},[95,70631,70632],{"class":210},"  border:1px solid",[95,70634,70635],{"class":164}," #b8daff;\n",[95,70637,70638],{"class":97,"line":2573},[95,70639,1547],{"class":105},[95,70641,70642],{"class":97,"line":2581},[95,70643,70644],{"class":210},"td {\n",[95,70646,70647],{"class":97,"line":2586},[95,70648,70649],{"class":210},"  padding:10px;\n",[95,70651,70652],{"class":97,"line":2592},[95,70653,70654],{"class":210},"  color:#666;\n",[95,70656,70657,70659,70661],{"class":97,"line":2598},[95,70658,70503],{"class":51277},[95,70660,51414],{"class":105},[95,70662,70508],{"class":210},[95,70664,70665,70667,70669],{"class":97,"line":2603},[95,70666,70603],{"class":51277},[95,70668,51414],{"class":105},[95,70670,70671],{"class":210},"16px;\n",[95,70673,70674],{"class":97,"line":7931},[95,70675,1547],{"class":105},[95,70677,70678],{"class":97,"line":7955},[95,70679,70680],{"class":210},"tbody tr {\n",[95,70682,70683,70685,70687],{"class":97,"line":7960},[95,70684,70588],{"class":51277},[95,70686,51414],{"class":105},[95,70688,70689],{"class":164},"#fff;\n",[95,70691,70692],{"class":97,"line":7966},[95,70693,1547],{"class":105},[95,70695,70696],{"class":97,"line":7993},[95,70697,70698],{"class":210},"tbody tr:hover {\n",[95,70700,70701,70703,70705],{"class":97,"line":7998},[95,70702,70588],{"class":51277},[95,70704,51414],{"class":105},[95,70706,70707],{"class":164},"#e1ecf8;\n",[95,70709,70710],{"class":97,"line":8004},[95,70711,1547],{"class":105},[95,70713,70714],{"class":97,"line":8016},[95,70715,70716],{"class":210},".info {\n",[95,70718,70719,70721,70723],{"class":97,"line":8028},[95,70720,70545],{"class":51277},[95,70722,51414],{"class":105},[95,70724,70725],{"class":210},"900px;\n",[95,70727,70728,70730,70732],{"class":97,"line":8040},[95,70729,70447],{"class":51277},[95,70731,51414],{"class":105},[95,70733,70734],{"class":210},"50px auto;\n",[95,70736,70737,70739,70741],{"class":97,"line":9699},[95,70738,70503],{"class":51277},[95,70740,51414],{"class":105},[95,70742,70508],{"class":210},[95,70744,70745],{"class":97,"line":9724},[95,70746,1547],{"class":105},[95,70748,70749],{"class":97,"line":9747},[95,70750,70751],{"class":210},".info  input, .info select {\n",[95,70753,70754,70756,70758],{"class":97,"line":9771},[95,70755,70545],{"class":51277},[95,70757,51414],{"class":105},[95,70759,70760],{"class":210},"80px;\n",[95,70762,70763,70766,70768],{"class":97,"line":9776},[95,70764,70765],{"class":51277},"  height",[95,70767,51414],{"class":105},[95,70769,70770],{"class":210},"27px;\n",[95,70772,70773,70776,70778],{"class":97,"line":9781},[95,70774,70775],{"class":51277},"  outline",[95,70777,51414],{"class":105},[95,70779,70484],{"class":210},[95,70781,70782,70785,70787],{"class":97,"line":9786},[95,70783,70784],{"class":51277},"  border-radius",[95,70786,51414],{"class":105},[95,70788,70789],{"class":210},"5px;\n",[95,70791,70792,70794],{"class":97,"line":9795},[95,70793,70632],{"class":210},[95,70795,70635],{"class":164},[95,70797,70798,70801,70803],{"class":97,"line":9800},[95,70799,70800],{"class":51277},"  padding-left",[95,70802,51414],{"class":105},[95,70804,70789],{"class":210},[95,70806,70807,70810,70812],{"class":97,"line":9806},[95,70808,70809],{"class":51277},"  box-sizing",[95,70811,51414],{"class":105},[95,70813,70814],{"class":210},"border-box;\n",[95,70816,70817,70820,70822],{"class":97,"line":9827},[95,70818,70819],{"class":51277},"  margin-right",[95,70821,51414],{"class":105},[95,70823,70824],{"class":210},"15px;\n",[95,70826,70827],{"class":97,"line":9833},[95,70828,1547],{"class":105},[95,70830,70831],{"class":97,"line":9847},[95,70832,70833],{"class":210},".info button {\n",[95,70835,70836,70838,70840],{"class":97,"line":9853},[95,70837,70545],{"class":51277},[95,70839,51414],{"class":105},[95,70841,70842],{"class":210},"60px;\n",[95,70844,70845,70847,70849],{"class":97,"line":9880},[95,70846,70765],{"class":51277},[95,70848,51414],{"class":105},[95,70850,70770],{"class":210},[95,70852,70853,70856,70858],{"class":97,"line":9889},[95,70854,70855],{"class":51277},"  background-color",[95,70857,51414],{"class":105},[95,70859,70860],{"class":164},"#004085;\n",[95,70862,70863,70865,70867],{"class":97,"line":9895},[95,70864,70775],{"class":51277},[95,70866,51414],{"class":105},[95,70868,70484],{"class":210},[95,70870,70871,70874,70876],{"class":97,"line":9903},[95,70872,70873],{"class":51277},"  border",[95,70875,51414],{"class":105},[95,70877,70452],{"class":210},[95,70879,70880,70883,70885],{"class":97,"line":9908},[95,70881,70882],{"class":51277},"  color",[95,70884,51414],{"class":105},[95,70886,70689],{"class":164},[95,70888,70889,70892,70894],{"class":97,"line":16587},[95,70890,70891],{"class":51277},"  cursor",[95,70893,51414],{"class":105},[95,70895,70896],{"class":210},"pointer;\n",[95,70898,70899,70901,70903],{"class":97,"line":16593},[95,70900,70784],{"class":51277},[95,70902,51414],{"class":105},[95,70904,70789],{"class":210},[95,70906,70907],{"class":97,"line":16616},[95,70908,1547],{"class":105},[95,70910,70911],{"class":97,"line":16622},[95,70912,70913],{"class":210},".info .age {\n",[95,70915,70916,70918,70920],{"class":97,"line":16645},[95,70917,70545],{"class":51277},[95,70919,51414],{"class":105},[95,70921,70922],{"class":210},"50px;\n",[95,70924,70925],{"class":97,"line":16659},[95,70926,1547],{"class":105},[10,70928,70929],{},"思路：",[10,70931,70932],{},[1444,70933],{"alt":14,"src":70934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[10,70936,70937],{},[1444,70938],{"alt":14,"src":70939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[10,70941,70942],{},[1444,70943],{"alt":14,"src":70944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[66,70946,70948],{"id":70947},"_3315-重绘回流","3.3.15 重绘回流",[10,70950,70951],{},[1444,70952],{"alt":14,"src":70953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[10,70955,70956],{},[1444,70957],{"alt":14,"src":70958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[10,70960,70961],{},[1444,70962],{"alt":14,"src":70963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[37,70965,70967],{"id":70966},"_34-bom","3.4 BOM",[10,70969,70970],{},[1444,70971],{"alt":14,"src":70972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[10,70974,70975],{},"平时写的document省略了window而已，实际上是window.document",[10,70977,70978],{},"函数也是这样，调用的时候实际为window.fn()",[10,70980,70981],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[10,70983,70984],{},"window大部分情况下可以省略",[66,70986,70988],{"id":70987},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[10,70990,70991],{},"只执行一次",[10,70993,70994],{},[1444,70995],{"alt":14,"src":70996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[10,70998,70999],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[10,71001,71002],{},[1444,71003],{"alt":14,"src":71004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[66,71006,71008],{"id":71007},"_342-js执行机制","3.4.2 JS执行机制",[10,71010,71011],{},[1444,71012],{"alt":14,"src":71013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[10,71015,71016],{},"两个的结果都是1111 3333 2222",[10,71018,71019],{},[1444,71020],{"alt":14,"src":71021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[10,71023,71024],{},[1444,71025],{"alt":14,"src":71026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[10,71028,71029],{},[1444,71030],{"alt":14,"src":71031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[10,71033,71034],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[10,71036,71037],{},"工作流程：",[10,71039,71040],{},[1444,71041],{"alt":14,"src":71042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[10,71044,71045],{},[1444,71046],{"alt":14,"src":71047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[10,71049,71050],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[10,71052,71053],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[66,71055,71057],{"id":71056},"_343-location对象","3.4.3 location对象",[10,71059,71060],{},"location对象属于window这个全局对象下的，可以 省略window",[10,71062,71063],{},[1444,71064],{"alt":14,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[10,71067,71068],{},"href可以跳转页面",[49,71070,71071],{},[52,71072,71073],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[10,71075,71076],{},"search得到提交信息之后网站后边的地址",[10,71078,71079],{},[1444,71080],{"alt":14,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[10,71083,71084],{},[1444,71085],{"alt":14,"src":71086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[49,71088,71089],{"start":15},[52,71090,71091],{},"hash:这个获取单页面应用#后边的地址",[10,71093,71094],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[10,71096,71097],{},[1444,71098],{"alt":14,"src":71099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[86,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",[92,71104,71105,71125,71145],{"__ignoreMap":14},[95,71106,71107,71109,71111,71113,71115,71118,71121,71123],{"class":97,"line":98},[95,71108,52121],{"class":105},[95,71110,344],{"class":51277},[95,71112,61034],{"class":1945},[95,71114,151],{"class":105},[95,71116,71117],{"class":210},"\"#\u002Fmy\"",[95,71119,71120],{"class":105},">我的\u003C\u002F",[95,71122,344],{"class":51277},[95,71124,51284],{"class":105},[95,71126,71127,71129,71131,71133,71135,71138,71141,71143],{"class":97,"line":15},[95,71128,52121],{"class":105},[95,71130,344],{"class":51277},[95,71132,61034],{"class":1945},[95,71134,151],{"class":105},[95,71136,71137],{"class":210},"\"#\u002Ffriend\"",[95,71139,71140],{"class":105},">关注\u003C\u002F",[95,71142,344],{"class":51277},[95,71144,51284],{"class":105},[95,71146,71147,71149,71151,71153,71155,71158,71161,71163],{"class":97,"line":1161},[95,71148,52121],{"class":105},[95,71150,344],{"class":51277},[95,71152,61034],{"class":1945},[95,71154,151],{"class":105},[95,71156,71157],{"class":210},"\"#\u002Fdownload\"",[95,71159,71160],{"class":105},">下载\u003C\u002F",[95,71162,344],{"class":51277},[95,71164,51284],{"class":105},[10,71166,71167],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[49,71169,71170],{"start":1161},[52,71171,71172,71173,71175,71176,71178],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53693,71174],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53693,71177],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[66,71180,71182],{"id":71181},"_345-navigator对象","3.4.5 navigator对象",[10,71184,71185],{},[1444,71186],{"alt":14,"src":71187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[86,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",[92,71194,71195,71200,71211,71223,71228,71279,71320,71325,71338,71350,71355],{"__ignoreMap":14},[95,71196,71197],{"class":97,"line":98},[95,71198,71199],{"class":164},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[95,71201,71202,71204,71206,71208],{"class":97,"line":15},[95,71203,332],{"class":101},[95,71205,106],{"class":105},[95,71207,54426],{"class":101},[95,71209,71210],{"class":105}," () { \n",[95,71212,71213,71215,71218,71220],{"class":97,"line":1161},[95,71214,6775],{"class":101},[95,71216,71217],{"class":154}," userAgent",[95,71219,13547],{"class":101},[95,71221,71222],{"class":105}," navigator.userAgent \n",[95,71224,71225],{"class":97,"line":1176},[95,71226,71227],{"class":164},"\u002F\u002F 验证是否为Android或iPhone \n",[95,71229,71230,71232,71235,71237,71240,71243,71245,71247,71250,71252,71255,71259,71261,71263,71265,71268,71270,71272,71274,71276],{"class":97,"line":1182},[95,71231,6775],{"class":101},[95,71233,71234],{"class":154}," android",[95,71236,13547],{"class":101},[95,71238,71239],{"class":105}," userAgent.",[95,71241,71242],{"class":1945},"match",[95,71244,106],{"class":105},[95,71246,690],{"class":210},[95,71248,71249],{"class":47962},"(Android);",[95,71251,1092],{"class":101},[95,71253,71254],{"class":154},"[\\s",[95,71256,71258],{"class":71257},"snhLl","\\\u002F",[95,71260,1046],{"class":154},[95,71262,587],{"class":101},[95,71264,106],{"class":47962},[95,71266,71267],{"class":154},"[\\d.]",[95,71269,587],{"class":101},[95,71271,535],{"class":47962},[95,71273,1092],{"class":101},[95,71275,690],{"class":210},[95,71277,71278],{"class":105},") \n",[95,71280,71281,71283,71286,71288,71290,71292,71294,71296,71299,71302,71305,71307,71309,71312,71314,71316,71318],{"class":97,"line":1196},[95,71282,6775],{"class":101},[95,71284,71285],{"class":154}," iphone",[95,71287,13547],{"class":101},[95,71289,71239],{"class":105},[95,71291,71242],{"class":1945},[95,71293,106],{"class":105},[95,71295,690],{"class":210},[95,71297,71298],{"class":47962},"(iPhone",[95,71300,71301],{"class":154},"\\s",[95,71303,71304],{"class":47962},"OS)",[95,71306,71301],{"class":154},[95,71308,106],{"class":47962},[95,71310,71311],{"class":154},"[\\d_]",[95,71313,587],{"class":101},[95,71315,535],{"class":47962},[95,71317,690],{"class":210},[95,71319,71278],{"class":105},[95,71321,71322],{"class":97,"line":1202},[95,71323,71324],{"class":164},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[95,71326,71327,71329,71332,71335],{"class":97,"line":1293},[95,71328,1513],{"class":101},[95,71330,71331],{"class":105}," (android ",[95,71333,71334],{"class":101},"||",[95,71336,71337],{"class":105}," iphone) { \n",[95,71339,71340,71343,71345,71348],{"class":97,"line":1299},[95,71341,71342],{"class":105},"location.href ",[95,71344,151],{"class":101},[95,71346,71347],{"class":210}," 'http:\u002F\u002Fm.itcast.cn'",[95,71349,2656],{"class":105},[95,71351,71352],{"class":97,"line":1311},[95,71353,71354],{"class":105},"} \n",[95,71356,71357],{"class":97,"line":1594},[95,71358,71359],{"class":105},"})()\n",[66,71361,71363],{"id":71362},"_346-histroy对象","3.4.6 histroy对象",[10,71365,71366],{},[1444,71367],{"alt":14,"src":71368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[10,71370,71371],{},"浏览器地址的前进与后退!!!",[10,71373,71374],{},"history.back() 等效于 history.go(-1)",[10,71376,71377],{},"history.forward() 等效于 history.go(1)",[37,71379,71381],{"id":71380},"_35-本地存储","3.5 本地存储",[49,71383,71384,71387,71390],{},[52,71385,71386],{},"数据存储在用户浏览器中",[52,71388,71389],{},"设置、读取方便、甚至页面刷新不丢失数据",[52,71391,71392],{},"容量较大，sessionStorage和localStorage约 5M 左右",[66,71394,71396],{"id":71395},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[10,71398,71399],{},"只能存储字符串",[10,71401,71402],{},[1444,71403],{"alt":14,"src":71404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[10,71406,71407],{},[1444,71408],{"alt":14,"src":71409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[10,71411,71412],{},"键值对要加引号,不然就会当变量来看了",[10,71414,71415],{},"localStorage.setItem('uname', 'pink')",[10,71417,71418],{},"刷新之后信息不再丢失",[10,71420,71421],{},"操作key,value会跟着变",[10,71423,71424],{},"删除只删除键就可以,即名字",[10,71426,71415],{},[10,71428,71429],{},"改:",[10,71431,71432],{},"localStorage.setItem('uname','red')",[10,71434,71435],{},"有这个键就是改,没有这个键就是改",[10,71437,71438],{},[1444,71439],{"alt":14,"src":71440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[10,71442,71443],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[10,71445,71446],{},[1444,71447],{"alt":14,"src":71448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[10,71450,71451],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[66,71453,71455],{"id":71454},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[10,71457,71458],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[10,71460,71461],{},"特性:",[49,71463,71464,71467,71470,71473],{},[52,71465,71466],{},"生命周期为关闭浏览器窗口",[52,71468,71469],{},"在同一个窗口(页面)下数据可以共享",[52,71471,71472],{},"以键值对的形式存储使用",[52,71474,71475],{},"用法跟localStorage 基本相同",[66,71477,71479],{"id":71478},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[10,71481,71482],{},"本地只能存储字符串,无法直接存储复杂数据类型",[86,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",[92,71487,71488,71496,71501,71506,71511,71516,71520,71525,71530],{"__ignoreMap":14},[95,71489,71490,71492,71494],{"class":97,"line":98},[95,71491,1016],{"class":105},[95,71493,51790],{"class":51277},[95,71495,51284],{"class":105},[95,71497,71498],{"class":97,"line":15},[95,71499,71500],{"class":105},"    const obj = {\n",[95,71502,71503],{"class":97,"line":1161},[95,71504,71505],{"class":105},"      uname: 'pink老师',\n",[95,71507,71508],{"class":97,"line":1176},[95,71509,71510],{"class":105},"      age: 18,\n",[95,71512,71513],{"class":97,"line":1182},[95,71514,71515],{"class":105},"      gender: '女'\n",[95,71517,71518],{"class":97,"line":1196},[95,71519,2169],{"class":105},[95,71521,71522],{"class":97,"line":1202},[95,71523,71524],{"class":105},"    \u002F\u002F 存储复杂数据类型\n",[95,71526,71527],{"class":97,"line":1293},[95,71528,71529],{"class":105},"    localStorage.setItem('obj', obj)\n",[95,71531,71532,71534,71536],{"class":97,"line":1299},[95,71533,52394],{"class":105},[95,71535,51790],{"class":51277},[95,71537,51284],{"class":105},[10,71539,71540],{},[1444,71541],{"alt":14,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[10,71544,71545],{},"如果获取一下数据:",[10,71547,71548],{},"log(localStorage.getItem('obj'))",[10,71550,71551],{},[1444,71552],{"alt":14,"src":71553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[10,71555,71556],{},"发现直接存对象是使用不了的!!!",[21981,71558,71560],{"id":71559},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[10,71562,71563],{},[1444,71564],{"alt":14,"src":71565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[86,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",[92,71570,71571,71579,71589,71599,71608,71616,71620,71624,71650,71669,71677,71681,71686,71691],{"__ignoreMap":14},[95,71572,71573,71575,71577],{"class":97,"line":98},[95,71574,1016],{"class":105},[95,71576,51790],{"class":51277},[95,71578,51284],{"class":105},[95,71580,71581,71583,71585,71587],{"class":97,"line":15},[95,71582,11204],{"class":101},[95,71584,69948],{"class":154},[95,71586,13547],{"class":101},[95,71588,15555],{"class":105},[95,71590,71591,71594,71597],{"class":97,"line":1161},[95,71592,71593],{"class":105},"      uname: ",[95,71595,71596],{"class":210},"'pink老师'",[95,71598,31451],{"class":105},[95,71600,71601,71604,71606],{"class":97,"line":1176},[95,71602,71603],{"class":105},"      age: ",[95,71605,756],{"class":154},[95,71607,31451],{"class":105},[95,71609,71610,71613],{"class":97,"line":1182},[95,71611,71612],{"class":105},"      gender: ",[95,71614,71615],{"class":210},"'女'\n",[95,71617,71618],{"class":97,"line":1196},[95,71619,2169],{"class":105},[95,71621,71622],{"class":97,"line":1202},[95,71623,71524],{"class":164},[95,71625,71626,71629,71632,71634,71637,71639,71642,71644,71647],{"class":97,"line":1293},[95,71627,71628],{"class":105},"  localStorage.",[95,71630,71631],{"class":1945},"setItem",[95,71633,106],{"class":105},[95,71635,71636],{"class":210},"'obj'",[95,71638,12418],{"class":105},[95,71640,71641],{"class":154},"JSON",[95,71643,664],{"class":105},[95,71645,71646],{"class":1945},"stringify",[95,71648,71649],{"class":105},"(obj))\n",[95,71651,71652,71655,71657,71660,71663,71665,71667],{"class":97,"line":1299},[95,71653,71654],{"class":105},"  console.",[95,71656,58224],{"class":1945},[95,71658,71659],{"class":105},"(localStorage.",[95,71661,71662],{"class":1945},"getItem",[95,71664,106],{"class":105},[95,71666,71636],{"class":210},[95,71668,30482],{"class":105},[95,71670,71671,71673,71675],{"class":97,"line":1311},[95,71672,52394],{"class":105},[95,71674,51790],{"class":51277},[95,71676,51284],{"class":105},[95,71678,71679],{"class":97,"line":1594},[95,71680,70598],{"class":105},[95,71682,71683],{"class":97,"line":1599},[95,71684,71685],{"class":105},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[95,71687,71688],{"class":97,"line":1605},[95,71689,71690],{"class":105},"  类型是字符串的\n",[95,71692,71693],{"class":97,"line":1610},[95,71694,71695],{"class":105},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21981,71697,71699],{"id":71698},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[10,71701,71702],{},[1444,71703],{"alt":14,"src":71704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[10,71706,71707],{},[1444,71708],{"alt":14,"src":71709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[86,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",[92,71714,71715,71723,71727,71731,71735,71739,71743,71748,71753,71758,71763,71768,71773,71778,71783],{"__ignoreMap":14},[95,71716,71717,71719,71721],{"class":97,"line":98},[95,71718,52121],{"class":105},[95,71720,51790],{"class":51277},[95,71722,51284],{"class":105},[95,71724,71725],{"class":97,"line":15},[95,71726,71500],{"class":105},[95,71728,71729],{"class":97,"line":1161},[95,71730,71505],{"class":105},[95,71732,71733],{"class":97,"line":1176},[95,71734,71510],{"class":105},[95,71736,71737],{"class":97,"line":1182},[95,71738,71515],{"class":105},[95,71740,71741],{"class":97,"line":1196},[95,71742,2169],{"class":105},[95,71744,71745],{"class":97,"line":1202},[95,71746,71747],{"class":105},"    \u002F\u002F 1.存储复杂数据类型\n",[95,71749,71750],{"class":97,"line":1293},[95,71751,71752],{"class":105},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[95,71754,71755],{"class":97,"line":1299},[95,71756,71757],{"class":105},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[95,71759,71760],{"class":97,"line":1311},[95,71761,71762],{"class":105},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[95,71764,71765],{"class":97,"line":1594},[95,71766,71767],{"class":105},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[95,71769,71770],{"class":97,"line":1599},[95,71771,71772],{"class":105},"    \u002F\u002F 取\n",[95,71774,71775],{"class":97,"line":1605},[95,71776,71777],{"class":105},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[95,71779,71780],{"class":97,"line":1610},[95,71781,71782],{"class":105},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[95,71784,71785,71787,71789],{"class":97,"line":1624},[95,71786,52394],{"class":105},[95,71788,51790],{"class":51277},[95,71790,51284],{"class":105},[10,71792,71793],{},[1444,71794],{"alt":14,"src":71795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[66,71797,71799],{"id":71798},"_356-数组map方法","3.5.6 数组map方法",[10,71801,71802],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[10,71804,71805],{},[1444,71806],{"alt":14,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[10,71809,71810],{},[1444,71811],{"alt":14,"src":71812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[10,71814,71815,71818],{},[255,71816,71817],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[10,71820,71821],{},"map有返回值，但是forEach没有返回值",[10,71823,71824],{},"map是个方法。用的时候要加 ()",[10,71826,71827],{},"map返回的是一个数组",[66,71829,71831],{"id":71830},"_357-数组中join方法","3.5.7 数组中join方法",[10,71833,71834],{},[1444,71835],{"alt":14,"src":71836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[10,71838,71839],{},"类似于python中拼接字符串一样！",[49,71841,71842,71845,71848],{},[52,71843,71844],{},"小括号为空则逗号分开",[52,71846,71847],{},"小括号为空字符串 ''，则元素之间没有分隔符",[52,71849,71850],{},"小括号用啥符号就用进行分割",[66,71852,71854],{"id":71853},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[49,71856,71857,71860,71863,71866,71869],{},[52,71858,71859],{},"记住本地时间获取快速方式：new Date().toDateString()",[52,71861,71862],{},"尽量减少DOM操作，用好map+join的渲染方式",[52,71864,71865],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[52,71867,71868],{},"return可以实现函数的结束",[52,71870,71871],{},"禁止跳转是 preventDefault() 不要忘记",[86,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",[92,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},[95,71878,71879,71881,71883,71885],{"class":97,"line":98},[95,71880,51274],{"class":105},[95,71882,51278],{"class":51277},[95,71884,51281],{"class":1945},[95,71886,51284],{"class":105},[95,71888,71889,71891,71893,71895,71897,71899],{"class":97,"line":15},[95,71890,1016],{"class":105},[95,71892,50612],{"class":51277},[95,71894,51293],{"class":1945},[95,71896,151],{"class":105},[95,71898,51298],{"class":210},[95,71900,51284],{"class":105},[95,71902,71903],{"class":97,"line":1161},[95,71904,2382],{"emptyLinePlaceholder":21},[95,71906,71907,71909,71911],{"class":97,"line":1176},[95,71908,1016],{"class":105},[95,71910,51311],{"class":51277},[95,71912,51284],{"class":105},[95,71914,71915,71917,71919,71921,71923,71925],{"class":97,"line":1182},[95,71916,52121],{"class":105},[95,71918,51321],{"class":51277},[95,71920,51324],{"class":1945},[95,71922,151],{"class":105},[95,71924,51329],{"class":210},[95,71926,51284],{"class":105},[95,71928,71929,71931,71933,71935,71937,71939,71941,71943,71945],{"class":97,"line":1196},[95,71930,52121],{"class":105},[95,71932,51321],{"class":51277},[95,71934,14903],{"class":1945},[95,71936,151],{"class":105},[95,71938,51368],{"class":210},[95,71940,51348],{"class":1945},[95,71942,151],{"class":105},[95,71944,51375],{"class":210},[95,71946,51284],{"class":105},[95,71948,71949,71951,71953,71955,71957],{"class":97,"line":1202},[95,71950,52121],{"class":105},[95,71952,51384],{"class":51277},[95,71954,51387],{"class":105},[95,71956,51384],{"class":51277},[95,71958,51284],{"class":105},[95,71960,71961,71963,71965],{"class":97,"line":1293},[95,71962,52121],{"class":105},[95,71964,5109],{"class":51277},[95,71966,51284],{"class":105},[95,71968,71969,71971],{"class":97,"line":1299},[95,71970,6386],{"class":51277},[95,71972,15555],{"class":105},[95,71974,71975,71977,71979,71981],{"class":97,"line":1311},[95,71976,54672],{"class":154},[95,71978,51414],{"class":105},[95,71980,297],{"class":154},[95,71982,1272],{"class":105},[95,71984,71985,71987,71989,71991],{"class":97,"line":1594},[95,71986,54683],{"class":154},[95,71988,51414],{"class":105},[95,71990,297],{"class":154},[95,71992,1272],{"class":105},[95,71994,71995],{"class":97,"line":1599},[95,71996,2169],{"class":105},[95,71998,71999],{"class":97,"line":1605},[95,72000,2382],{"emptyLinePlaceholder":21},[95,72002,72003,72005],{"class":97,"line":1610},[95,72004,57256],{"class":51277},[95,72006,15555],{"class":105},[95,72008,72009,72011,72013,72015],{"class":97,"line":1624},[95,72010,57263],{"class":154},[95,72012,51414],{"class":105},[95,72014,51569],{"class":154},[95,72016,1272],{"class":105},[95,72018,72019,72021,72023,72025,72027],{"class":97,"line":1629},[95,72020,62054],{"class":154},[95,72022,51414],{"class":105},[95,72024,806],{"class":154},[95,72026,51469],{"class":101},[95,72028,1272],{"class":105},[95,72030,72031],{"class":97,"line":1635},[95,72032,2169],{"class":105},[95,72034,72035],{"class":97,"line":1656},[95,72036,2382],{"emptyLinePlaceholder":21},[95,72038,72039,72042],{"class":97,"line":1661},[95,72040,72041],{"class":1945},"    .info",[95,72043,15555],{"class":105},[95,72045,72046,72048,72050,72052,72054],{"class":97,"line":1675},[95,72047,54748],{"class":154},[95,72049,51414],{"class":105},[95,72051,51466],{"class":154},[95,72053,51469],{"class":101},[95,72055,1272],{"class":105},[95,72057,72058,72060,72062,72064,72066,72068],{"class":97,"line":1680},[95,72059,54683],{"class":154},[95,72061,51414],{"class":105},[95,72063,552],{"class":154},[95,72065,51469],{"class":101},[95,72067,51533],{"class":154},[95,72069,1272],{"class":105},[95,72071,72072,72074,72076,72078],{"class":97,"line":1709},[95,72073,57263],{"class":154},[95,72075,51414],{"class":105},[95,72077,51569],{"class":154},[95,72079,1272],{"class":105},[95,72081,72082],{"class":97,"line":1714},[95,72083,2169],{"class":105},[95,72085,72086],{"class":97,"line":1731},[95,72087,2382],{"emptyLinePlaceholder":21},[95,72089,72090,72093],{"class":97,"line":1736},[95,72091,72092],{"class":1945},"    .uname",[95,72094,31451],{"class":105},[95,72096,72097,72100],{"class":97,"line":1741},[95,72098,72099],{"class":1945},"    .age",[95,72101,31451],{"class":105},[95,72103,72104,72107],{"class":97,"line":1746},[95,72105,72106],{"class":1945},"    .salary",[95,72108,15555],{"class":105},[95,72110,72111,72113,72115,72117,72119],{"class":97,"line":1760},[95,72112,54748],{"class":154},[95,72114,51414],{"class":105},[95,72116,417],{"class":154},[95,72118,51469],{"class":101},[95,72120,1272],{"class":105},[95,72122,72123,72125,72127,72129,72131],{"class":97,"line":1765},[95,72124,54762],{"class":154},[95,72126,51414],{"class":105},[95,72128,806],{"class":154},[95,72130,51469],{"class":101},[95,72132,1272],{"class":105},[95,72134,72135,72137,72139,72141],{"class":97,"line":2559},[95,72136,61757],{"class":154},[95,72138,51414],{"class":105},[95,72140,54714],{"class":154},[95,72142,1272],{"class":105},[95,72144,72145,72147,72149,72151,72153],{"class":97,"line":2573},[95,72146,61727],{"class":154},[95,72148,51414],{"class":105},[95,72150,681],{"class":154},[95,72152,51469],{"class":101},[95,72154,1272],{"class":105},[95,72156,72157],{"class":97,"line":2581},[95,72158,2169],{"class":105},[95,72160,72161],{"class":97,"line":2586},[95,72162,2382],{"emptyLinePlaceholder":21},[95,72164,72165,72168],{"class":97,"line":2592},[95,72166,72167],{"class":1945},"    .gender",[95,72169,31451],{"class":105},[95,72171,72172,72175],{"class":97,"line":2598},[95,72173,72174],{"class":1945},"    .city",[95,72176,15555],{"class":105},[95,72178,72179,72181,72183,72185,72187],{"class":97,"line":2603},[95,72180,54748],{"class":154},[95,72182,51414],{"class":105},[95,72184,417],{"class":154},[95,72186,51469],{"class":101},[95,72188,1272],{"class":105},[95,72190,72191,72193,72195,72197,72199],{"class":97,"line":7931},[95,72192,54762],{"class":154},[95,72194,51414],{"class":105},[95,72196,931],{"class":154},[95,72198,51469],{"class":101},[95,72200,1272],{"class":105},[95,72202,72203,72205,72207,72209],{"class":97,"line":7955},[95,72204,61757],{"class":154},[95,72206,51414],{"class":105},[95,72208,54714],{"class":154},[95,72210,1272],{"class":105},[95,72212,72213,72215,72217,72219,72221],{"class":97,"line":7960},[95,72214,61727],{"class":154},[95,72216,51414],{"class":105},[95,72218,681],{"class":154},[95,72220,51469],{"class":101},[95,72222,1272],{"class":105},[95,72224,72225,72227,72229,72231,72233,72235,72238,72240,72242,72244,72247,72249,72251],{"class":97,"line":7966},[95,72226,61954],{"class":154},[95,72228,51414],{"class":105},[95,72230,323],{"class":154},[95,72232,51469],{"class":101},[95,72234,51498],{"class":154},[95,72236,72237],{"class":154}," rgb",[95,72239,106],{"class":105},[95,72241,1704],{"class":154},[95,72243,12418],{"class":105},[95,72245,72246],{"class":154},"197",[95,72248,12418],{"class":105},[95,72250,72246],{"class":154},[95,72252,2701],{"class":105},[95,72254,72255],{"class":97,"line":7993},[95,72256,2169],{"class":105},[95,72258,72259],{"class":97,"line":7998},[95,72260,2382],{"emptyLinePlaceholder":21},[95,72262,72263,72266],{"class":97,"line":8004},[95,72264,72265],{"class":51277},"    button",[95,72267,15555],{"class":105},[95,72269,72270,72272,72274,72276,72278],{"class":97,"line":8016},[95,72271,54762],{"class":154},[95,72273,51414],{"class":105},[95,72275,931],{"class":154},[95,72277,51469],{"class":101},[95,72279,1272],{"class":105},[95,72281,72282,72284,72286,72288,72290],{"class":97,"line":8028},[95,72283,54748],{"class":154},[95,72285,51414],{"class":105},[95,72287,590],{"class":154},[95,72289,51469],{"class":101},[95,72291,1272],{"class":105},[95,72293,72294,72296,72298,72301,72303,72305,72307,72310,72312,72314],{"class":97,"line":8040},[95,72295,54861],{"class":154},[95,72297,51414],{"class":105},[95,72299,72300],{"class":154},"rgb",[95,72302,106],{"class":105},[95,72304,1075],{"class":154},[95,72306,12418],{"class":105},[95,72308,72309],{"class":154},"187",[95,72311,12418],{"class":105},[95,72313,405],{"class":154},[95,72315,2701],{"class":105},[95,72317,72318,72320,72322,72324],{"class":97,"line":9699},[95,72319,57393],{"class":154},[95,72321,51414],{"class":105},[95,72323,60819],{"class":154},[95,72325,1272],{"class":105},[95,72327,72328,72330,72332,72334],{"class":97,"line":9724},[95,72329,61954],{"class":154},[95,72331,51414],{"class":105},[95,72333,297],{"class":154},[95,72335,1272],{"class":105},[95,72337,72338],{"class":97,"line":9747},[95,72339,2169],{"class":105},[95,72341,72342],{"class":97,"line":9771},[95,72343,2382],{"emptyLinePlaceholder":21},[95,72345,72346,72348,72350],{"class":97,"line":9776},[95,72347,72265],{"class":51277},[95,72349,51665],{"class":51277},[95,72351,15555],{"class":105},[95,72353,72354,72356,72358,72361],{"class":97,"line":9781},[95,72355,54986],{"class":154},[95,72357,51414],{"class":105},[95,72359,72360],{"class":154},"inline-block",[95,72362,1272],{"class":105},[95,72364,72365,72367,72369,72371,72373],{"class":97,"line":9786},[95,72366,54748],{"class":154},[95,72368,51414],{"class":105},[95,72370,552],{"class":154},[95,72372,51469],{"class":101},[95,72374,1272],{"class":105},[95,72376,72377,72379,72381,72383,72385],{"class":97,"line":9795},[95,72378,54762],{"class":154},[95,72380,51414],{"class":105},[95,72382,552],{"class":154},[95,72384,51469],{"class":101},[95,72386,1272],{"class":105},[95,72388,72389,72391,72393,72395,72397],{"class":97,"line":9800},[95,72390,57336],{"class":154},[95,72392,51414],{"class":105},[95,72394,578],{"class":154},[95,72396,51469],{"class":101},[95,72398,1272],{"class":105},[95,72400,72401,72403,72405,72407,72409,72411,72414],{"class":97,"line":9806},[95,72402,61954],{"class":154},[95,72404,51414],{"class":105},[95,72406,323],{"class":154},[95,72408,51469],{"class":101},[95,72410,51498],{"class":154},[95,72412,72413],{"class":154}," #fff",[95,72415,1272],{"class":105},[95,72417,72418,72420,72422,72424,72426],{"class":97,"line":9827},[95,72419,55111],{"class":154},[95,72421,51414],{"class":105},[95,72423,425],{"class":154},[95,72425,51469],{"class":101},[95,72427,1272],{"class":105},[95,72429,72430,72432,72434,72436,72438],{"class":97,"line":9833},[95,72431,61727],{"class":154},[95,72433,51414],{"class":105},[95,72435,323],{"class":154},[95,72437,51469],{"class":101},[95,72439,1272],{"class":105},[95,72441,72442],{"class":97,"line":9847},[95,72443,2169],{"class":105},[95,72445,72446],{"class":97,"line":9853},[95,72447,2382],{"emptyLinePlaceholder":21},[95,72449,72450,72453],{"class":97,"line":9880},[95,72451,72452],{"class":1945},"    .total",[95,72454,15555],{"class":105},[95,72456,72457,72459,72461,72463,72465],{"class":97,"line":9889},[95,72458,54748],{"class":154},[95,72460,51414],{"class":105},[95,72462,61606],{"class":154},[95,72464,51469],{"class":101},[95,72466,1272],{"class":105},[95,72468,72469,72471,72473,72475,72477],{"class":97,"line":9895},[95,72470,54762],{"class":154},[95,72472,51414],{"class":105},[95,72474,507],{"class":154},[95,72476,51469],{"class":101},[95,72478,1272],{"class":105},[95,72480,72481,72483,72485,72487,72489],{"class":97,"line":9903},[95,72482,57336],{"class":154},[95,72484,51414],{"class":105},[95,72486,507],{"class":154},[95,72488,51469],{"class":101},[95,72490,1272],{"class":105},[95,72492,72493,72495,72497,72500],{"class":97,"line":9908},[95,72494,57263],{"class":154},[95,72496,51414],{"class":105},[95,72498,72499],{"class":154},"right",[95,72501,1272],{"class":105},[95,72503,72504,72506,72508,72510,72512,72514,72516,72518],{"class":97,"line":16587},[95,72505,54683],{"class":154},[95,72507,51414],{"class":105},[95,72509,507],{"class":154},[95,72511,51469],{"class":101},[95,72513,51533],{"class":154},[95,72515,2020],{"class":154},[95,72517,51469],{"class":101},[95,72519,1272],{"class":105},[95,72521,72522,72525,72527,72529,72531],{"class":97,"line":16593},[95,72523,72524],{"class":154},"      padding-right",[95,72526,51414],{"class":105},[95,72528,552],{"class":154},[95,72530,51469],{"class":101},[95,72532,1272],{"class":105},[95,72534,72535,72537,72539,72541,72543],{"class":97,"line":16616},[95,72536,54899],{"class":154},[95,72538,51414],{"class":105},[95,72540,629],{"class":154},[95,72542,51469],{"class":101},[95,72544,1272],{"class":105},[95,72546,72547,72549,72551,72553,72555,72558,72560,72563,72565,72567],{"class":97,"line":16622},[95,72548,54861],{"class":154},[95,72550,51414],{"class":105},[95,72552,72300],{"class":154},[95,72554,106],{"class":105},[95,72556,72557],{"class":154},"237",[95,72559,12418],{"class":105},[95,72561,72562],{"class":154},"235",[95,72564,12418],{"class":105},[95,72566,72562],{"class":154},[95,72568,2701],{"class":105},[95,72570,72571,72574,72576,72578],{"class":97,"line":16645},[95,72572,72573],{"class":154},"      box-sizing",[95,72575,51414],{"class":105},[95,72577,60482],{"class":154},[95,72579,1272],{"class":105},[95,72581,72582],{"class":97,"line":16659},[95,72583,2169],{"class":105},[95,72585,72586],{"class":97,"line":16679},[95,72587,2382],{"emptyLinePlaceholder":21},[95,72589,72590,72592,72594],{"class":97,"line":16685},[95,72591,72452],{"class":1945},[95,72593,51665],{"class":51277},[95,72595,15555],{"class":105},[95,72597,72598,72600,72602,72604],{"class":97,"line":16696},[95,72599,57393],{"class":154},[95,72601,51414],{"class":105},[95,72603,57398],{"class":154},[95,72605,1272],{"class":105},[95,72607,72608],{"class":97,"line":16719},[95,72609,2169],{"class":105},[95,72611,72612],{"class":97,"line":16741},[95,72613,2382],{"emptyLinePlaceholder":21},[95,72615,72616,72618],{"class":97,"line":16746},[95,72617,65000],{"class":51277},[95,72619,15555],{"class":105},[95,72621,72622,72624,72626,72628,72630],{"class":97,"line":16752},[95,72623,54748],{"class":154},[95,72625,51414],{"class":105},[95,72627,61606],{"class":154},[95,72629,51469],{"class":101},[95,72631,1272],{"class":105},[95,72633,72634,72636,72638,72641],{"class":97,"line":16766},[95,72635,54683],{"class":154},[95,72637,51414],{"class":105},[95,72639,72640],{"class":154},"auto",[95,72642,1272],{"class":105},[95,72644,72645,72647,72649,72651],{"class":97,"line":16779},[95,72646,65007],{"class":154},[95,72648,51414],{"class":105},[95,72650,65012],{"class":154},[95,72652,1272],{"class":105},[95,72654,72655],{"class":97,"line":16784},[95,72656,2169],{"class":105},[95,72658,72659],{"class":97,"line":16798},[95,72660,2382],{"emptyLinePlaceholder":21},[95,72662,72663,72665],{"class":97,"line":16803},[95,72664,65092],{"class":51277},[95,72666,15555],{"class":105},[95,72668,72669,72671,72673,72675,72677,72679,72681,72683,72685,72687],{"class":97,"line":16809},[95,72670,54861],{"class":154},[95,72672,51414],{"class":105},[95,72674,72300],{"class":154},[95,72676,106],{"class":105},[95,72678,72557],{"class":154},[95,72680,12418],{"class":105},[95,72682,72562],{"class":154},[95,72684,12418],{"class":105},[95,72686,72562],{"class":154},[95,72688,2701],{"class":105},[95,72690,72691],{"class":97,"line":16814},[95,72692,2169],{"class":105},[95,72694,72695],{"class":97,"line":16828},[95,72696,2382],{"emptyLinePlaceholder":21},[95,72698,72699,72701],{"class":97,"line":16833},[95,72700,65092],{"class":51277},[95,72702,31451],{"class":105},[95,72704,72705,72707],{"class":97,"line":16838},[95,72706,65158],{"class":51277},[95,72708,15555],{"class":105},[95,72710,72711,72713,72715,72717,72719],{"class":97,"line":16852},[95,72712,54762],{"class":154},[95,72714,51414],{"class":105},[95,72716,379],{"class":154},[95,72718,51469],{"class":101},[95,72720,1272],{"class":105},[95,72722,72723,72725,72727,72729],{"class":97,"line":16864},[95,72724,57263],{"class":154},[95,72726,51414],{"class":105},[95,72728,23720],{"class":154},[95,72730,1272],{"class":105},[95,72732,72733,72735,72737,72739,72741],{"class":97,"line":16869},[95,72734,54899],{"class":154},[95,72736,51414],{"class":105},[95,72738,655],{"class":154},[95,72740,51469],{"class":101},[95,72742,1272],{"class":105},[95,72744,72745,72747,72749,72751,72753,72755,72757,72759,72762,72764,72767,72769,72771],{"class":97,"line":16882},[95,72746,61954],{"class":154},[95,72748,51414],{"class":105},[95,72750,323],{"class":154},[95,72752,51469],{"class":101},[95,72754,51498],{"class":154},[95,72756,72237],{"class":154},[95,72758,106],{"class":105},[95,72760,72761],{"class":154},"228",[95,72763,12418],{"class":105},[95,72765,72766],{"class":154},"225",[95,72768,12418],{"class":105},[95,72770,72766],{"class":154},[95,72772,2701],{"class":105},[95,72774,72775,72778,72780,72782,72784],{"class":97,"line":16887},[95,72776,72777],{"class":154},"      padding-left",[95,72779,51414],{"class":105},[95,72781,425],{"class":154},[95,72783,51469],{"class":101},[95,72785,1272],{"class":105},[95,72787,72788,72790,72792,72794,72797,72799,72801],{"class":97,"line":16892},[95,72789,61837],{"class":154},[95,72791,51414],{"class":105},[95,72793,28106],{"class":154},[95,72795,72796],{"class":154}," linear",[95,72798,61844],{"class":154},[95,72800,801],{"class":101},[95,72802,1272],{"class":105},[95,72804,72805],{"class":97,"line":16897},[95,72806,2169],{"class":105},[95,72808,72809],{"class":97,"line":16910},[95,72810,2382],{"emptyLinePlaceholder":21},[95,72812,72813,72816,72818,72820],{"class":97,"line":16915},[95,72814,72815],{"class":51277},"    tbody",[95,72817,70121],{"class":51277},[95,72819,60917],{"class":1945},[95,72821,15555],{"class":105},[95,72823,72824,72826,72828,72830,72832,72834,72836,72838,72840,72842],{"class":97,"line":32618},[95,72825,54861],{"class":154},[95,72827,51414],{"class":105},[95,72829,72300],{"class":154},[95,72831,106],{"class":105},[95,72833,72557],{"class":154},[95,72835,12418],{"class":105},[95,72837,72562],{"class":154},[95,72839,12418],{"class":105},[95,72841,72562],{"class":154},[95,72843,2701],{"class":105},[95,72845,72846,72848,72850,72852],{"class":97,"line":32624},[95,72847,62002],{"class":154},[95,72849,51414],{"class":105},[95,72851,62007],{"class":154},[95,72853,1272],{"class":105},[95,72855,72856],{"class":97,"line":32630},[95,72857,2169],{"class":105},[95,72859,72860],{"class":97,"line":32636},[95,72861,2382],{"emptyLinePlaceholder":21},[95,72863,72864,72866,72868,72871,72873],{"class":97,"line":32642},[95,72865,72815],{"class":51277},[95,72867,70121],{"class":51277},[95,72869,72870],{"class":51277}," td",[95,72872,1380],{"class":51277},[95,72874,15555],{"class":105},[95,72876,72877,72879,72881,72883],{"class":97,"line":32653},[95,72878,54986],{"class":154},[95,72880,51414],{"class":105},[95,72882,60846],{"class":154},[95,72884,1272],{"class":105},[95,72886,72887,72889,72891,72893,72895],{"class":97,"line":32659},[95,72888,54748],{"class":154},[95,72890,51414],{"class":105},[95,72892,1013],{"class":154},[95,72894,51469],{"class":101},[95,72896,1272],{"class":105},[95,72898,72899,72901,72903,72905,72907],{"class":97,"line":32679},[95,72900,54762],{"class":154},[95,72902,51414],{"class":105},[95,72904,931],{"class":154},[95,72906,51469],{"class":101},[95,72908,1272],{"class":105},[95,72910,72911,72913,72915,72917,72919],{"class":97,"line":32685},[95,72912,57336],{"class":154},[95,72914,51414],{"class":105},[95,72916,931],{"class":154},[95,72918,51469],{"class":101},[95,72920,1272],{"class":105},[95,72922,72923,72925,72927,72929,72931],{"class":97,"line":32696},[95,72924,62054],{"class":154},[95,72926,51414],{"class":105},[95,72928,183],{"class":154},[95,72930,51469],{"class":101},[95,72932,1272],{"class":105},[95,72934,72935,72937,72939,72941],{"class":97,"line":32702},[95,72936,57393],{"class":154},[95,72938,51414],{"class":105},[95,72940,60819],{"class":154},[95,72942,1272],{"class":105},[95,72944,72945,72947,72949,72951],{"class":97,"line":32708},[95,72946,57263],{"class":154},[95,72948,51414],{"class":105},[95,72950,51569],{"class":154},[95,72952,1272],{"class":105},[95,72954,72955,72957,72959,72961],{"class":97,"line":32714},[95,72956,63947],{"class":154},[95,72958,51414],{"class":105},[95,72960,54714],{"class":154},[95,72962,1272],{"class":105},[95,72964,72965,72967,72969,72972],{"class":97,"line":32720},[95,72966,54861],{"class":154},[95,72968,51414],{"class":105},[95,72970,72971],{"class":154},"orange",[95,72973,1272],{"class":105},[95,72975,72976,72978,72980,72983,72985],{"class":97,"line":32726},[95,72977,55111],{"class":154},[95,72979,51414],{"class":105},[95,72981,72982],{"class":154},"12.5",[95,72984,51469],{"class":101},[95,72986,1272],{"class":105},[95,72988,72989],{"class":97,"line":32732},[95,72990,2169],{"class":105},[95,72992,72993,72995,72997],{"class":97,"line":32738},[95,72994,52394],{"class":105},[95,72996,5109],{"class":51277},[95,72998,51284],{"class":105},[95,73000,73001,73003,73005],{"class":97,"line":32758},[95,73002,51762],{"class":105},[95,73004,51311],{"class":51277},[95,73006,51284],{"class":105},[95,73008,73009],{"class":97,"line":32764},[95,73010,2382],{"emptyLinePlaceholder":21},[95,73012,73013,73015,73017],{"class":97,"line":32780},[95,73014,1016],{"class":105},[95,73016,51777],{"class":51277},[95,73018,51284],{"class":105},[95,73020,73021,73023,73025,73028,73030],{"class":97,"line":32786},[95,73022,52121],{"class":105},[95,73024,37],{"class":51277},[95,73026,73027],{"class":105},">学生就业统计表\u003C\u002F",[95,73029,37],{"class":51277},[95,73031,51284],{"class":105},[95,73033,73034,73036,73038,73040,73042,73044,73046,73048,73050],{"class":97,"line":32800},[95,73035,52121],{"class":105},[95,73037,66602],{"class":51277},[95,73039,53463],{"class":1945},[95,73041,151],{"class":105},[95,73043,62641],{"class":210},[95,73045,69047],{"class":1945},[95,73047,151],{"class":105},[95,73049,31761],{"class":210},[95,73051,51284],{"class":105},[95,73053,73054,73056,73058,73060,73062,73064,73066,73068,73070,73072,73074,73077,73079,73081,73083],{"class":97,"line":32806},[95,73055,51318],{"class":105},[95,73057,53798],{"class":51277},[95,73059,53801],{"class":1945},[95,73061,151],{"class":105},[95,73063,62676],{"class":210},[95,73065,14903],{"class":1945},[95,73067,151],{"class":105},[95,73069,69073],{"class":210},[95,73071,60997],{"class":1945},[95,73073,151],{"class":105},[95,73075,73076],{"class":210},"\"姓名\"",[95,73078,53463],{"class":1945},[95,73080,151],{"class":105},[95,73082,69073],{"class":210},[95,73084,51284],{"class":105},[95,73086,73087,73089,73091,73093,73095,73097,73099,73101,73103,73105,73107,73110,73112,73114,73116],{"class":97,"line":32821},[95,73088,51318],{"class":105},[95,73090,53798],{"class":51277},[95,73092,53801],{"class":1945},[95,73094,151],{"class":105},[95,73096,62676],{"class":210},[95,73098,14903],{"class":1945},[95,73100,151],{"class":105},[95,73102,69101],{"class":210},[95,73104,60997],{"class":1945},[95,73106,151],{"class":105},[95,73108,73109],{"class":210},"\"年龄\"",[95,73111,53463],{"class":1945},[95,73113,151],{"class":105},[95,73115,69101],{"class":210},[95,73117,51284],{"class":105},[95,73119,73120,73122,73124,73126,73128,73130,73132,73134,73136,73138,73140,73143,73145,73147,73149],{"class":97,"line":32827},[95,73121,51318],{"class":105},[95,73123,53798],{"class":51277},[95,73125,53801],{"class":1945},[95,73127,151],{"class":105},[95,73129,62676],{"class":210},[95,73131,14903],{"class":1945},[95,73133,151],{"class":105},[95,73135,69203],{"class":210},[95,73137,60997],{"class":1945},[95,73139,151],{"class":105},[95,73141,73142],{"class":210},"\"薪资\"",[95,73144,53463],{"class":1945},[95,73146,151],{"class":105},[95,73148,69203],{"class":210},[95,73150,51284],{"class":105},[95,73152,73153,73155,73157,73159,73161,73163,73165,73167,73169,73171,73173,73175],{"class":97,"line":32836},[95,73154,51318],{"class":105},[95,73156,69121],{"class":51277},[95,73158,14903],{"class":1945},[95,73160,151],{"class":105},[95,73162,69128],{"class":210},[95,73164,14942],{"class":1945},[95,73166,151],{"class":105},[95,73168,7635],{"class":210},[95,73170,53463],{"class":1945},[95,73172,151],{"class":105},[95,73174,69128],{"class":210},[95,73176,51284],{"class":105},[95,73178,73179,73181,73183,73185,73187,73189,73191,73193],{"class":97,"line":32842},[95,73180,55211],{"class":105},[95,73182,69143],{"class":51277},[95,73184,66628],{"class":1945},[95,73186,151],{"class":105},[95,73188,9944],{"class":210},[95,73190,69152],{"class":105},[95,73192,69143],{"class":51277},[95,73194,51284],{"class":105},[95,73196,73197,73199,73201,73203,73205,73207,73209,73211],{"class":97,"line":32851},[95,73198,55211],{"class":105},[95,73200,69143],{"class":51277},[95,73202,66628],{"class":1945},[95,73204,151],{"class":105},[95,73206,10013],{"class":210},[95,73208,69171],{"class":105},[95,73210,69143],{"class":51277},[95,73212,51284],{"class":105},[95,73214,73215,73217,73219],{"class":97,"line":32857},[95,73216,51753],{"class":105},[95,73218,69121],{"class":51277},[95,73220,51284],{"class":105},[95,73222,73223,73225,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245],{"class":97,"line":32863},[95,73224,51318],{"class":105},[95,73226,69121],{"class":51277},[95,73228,14903],{"class":1945},[95,73230,151],{"class":105},[95,73232,69225],{"class":210},[95,73234,14942],{"class":1945},[95,73236,151],{"class":105},[95,73238,7635],{"class":210},[95,73240,53463],{"class":1945},[95,73242,151],{"class":105},[95,73244,69225],{"class":210},[95,73246,51284],{"class":105},[95,73248,73249,73251,73253,73255,73257,73259,73261,73263],{"class":97,"line":32872},[95,73250,55211],{"class":105},[95,73252,69143],{"class":51277},[95,73254,66628],{"class":1945},[95,73256,151],{"class":105},[95,73258,69246],{"class":210},[95,73260,69249],{"class":105},[95,73262,69143],{"class":51277},[95,73264,51284],{"class":105},[95,73266,73267,73269,73271,73273,73275,73277,73279,73281],{"class":97,"line":32878},[95,73268,55211],{"class":105},[95,73270,69143],{"class":51277},[95,73272,66628],{"class":1945},[95,73274,151],{"class":105},[95,73276,69266],{"class":210},[95,73278,69269],{"class":105},[95,73280,69143],{"class":51277},[95,73282,51284],{"class":105},[95,73284,73285,73287,73289,73291,73293,73295,73297,73299],{"class":97,"line":32889},[95,73286,55211],{"class":105},[95,73288,69143],{"class":51277},[95,73290,66628],{"class":1945},[95,73292,151],{"class":105},[95,73294,69286],{"class":210},[95,73296,69289],{"class":105},[95,73298,69143],{"class":51277},[95,73300,51284],{"class":105},[95,73302,73303,73305,73307,73309,73311,73313,73315,73317],{"class":97,"line":32895},[95,73304,55211],{"class":105},[95,73306,69143],{"class":51277},[95,73308,66628],{"class":1945},[95,73310,151],{"class":105},[95,73312,69306],{"class":210},[95,73314,69309],{"class":105},[95,73316,69143],{"class":51277},[95,73318,51284],{"class":105},[95,73320,73321,73323,73325,73327,73329,73331,73333,73335],{"class":97,"line":32914},[95,73322,55211],{"class":105},[95,73324,69143],{"class":51277},[95,73326,66628],{"class":1945},[95,73328,151],{"class":105},[95,73330,69326],{"class":210},[95,73332,69329],{"class":105},[95,73334,69143],{"class":51277},[95,73336,51284],{"class":105},[95,73338,73339,73341,73343],{"class":97,"line":32920},[95,73340,51753],{"class":105},[95,73342,69121],{"class":51277},[95,73344,51284],{"class":105},[95,73346,73347,73349,73351],{"class":97,"line":32931},[95,73348,51318],{"class":105},[95,73350,53864],{"class":51277},[95,73352,51284],{"class":105},[95,73354,73355,73357,73359,73362,73364,73367,73369],{"class":97,"line":32937},[95,73356,55211],{"class":105},[95,73358,95],{"class":51277},[95,73360,73361],{"class":105},">+\u003C\u002F",[95,73363,95],{"class":51277},[95,73365,73366],{"class":105},">添加\u003C\u002F",[95,73368,53864],{"class":51277},[95,73370,51284],{"class":105},[95,73372,73373,73375,73377],{"class":97,"line":32957},[95,73374,52394],{"class":105},[95,73376,66602],{"class":51277},[95,73378,51284],{"class":105},[95,73380,73381,73383,73385,73387,73389,73391,73394,73396,73399,73401,73404,73406],{"class":97,"line":32973},[95,73382,52121],{"class":105},[95,73384,51588],{"class":51277},[95,73386,53463],{"class":1945},[95,73388,151],{"class":105},[95,73390,62557],{"class":210},[95,73392,73393],{"class":105},">共有数据 \u003C",[95,73395,95],{"class":51277},[95,73397,73398],{"class":105},">0\u003C\u002F",[95,73400,95],{"class":51277},[95,73402,73403],{"class":105},"> 条\u003C\u002F",[95,73405,51588],{"class":51277},[95,73407,51284],{"class":105},[95,73409,73410,73412,73414],{"class":97,"line":32979},[95,73411,52121],{"class":105},[95,73413,243],{"class":51277},[95,73415,51284],{"class":105},[95,73417,73418,73420,73422],{"class":97,"line":32993},[95,73419,51318],{"class":105},[95,73421,246],{"class":51277},[95,73423,51284],{"class":105},[95,73425,73426,73428,73430],{"class":97,"line":32999},[95,73427,55211],{"class":105},[95,73429,249],{"class":51277},[95,73431,51284],{"class":105},[95,73433,73434,73436,73438,73441,73443],{"class":97,"line":33005},[95,73435,55279],{"class":105},[95,73437,252],{"class":51277},[95,73439,73440],{"class":105},">ID\u003C\u002F",[95,73442,252],{"class":51277},[95,73444,51284],{"class":105},[95,73446,73447,73449,73451,73453,73455],{"class":97,"line":33016},[95,73448,55279],{"class":105},[95,73450,252],{"class":51277},[95,73452,69432],{"class":105},[95,73454,252],{"class":51277},[95,73456,51284],{"class":105},[95,73458,73459,73461,73463,73465,73467],{"class":97,"line":33022},[95,73460,55279],{"class":105},[95,73462,252],{"class":51277},[95,73464,69445],{"class":105},[95,73466,252],{"class":51277},[95,73468,51284],{"class":105},[95,73470,73471,73473,73475,73477,73479],{"class":97,"line":33028},[95,73472,55279],{"class":105},[95,73474,252],{"class":51277},[95,73476,69458],{"class":105},[95,73478,252],{"class":51277},[95,73480,51284],{"class":105},[95,73482,73483,73485,73487,73489,73491],{"class":97,"line":33038},[95,73484,55279],{"class":105},[95,73486,252],{"class":51277},[95,73488,69471],{"class":105},[95,73490,252],{"class":51277},[95,73492,51284],{"class":105},[95,73494,73495,73497,73499,73501,73503],{"class":97,"line":33044},[95,73496,55279],{"class":105},[95,73498,252],{"class":51277},[95,73500,69484],{"class":105},[95,73502,252],{"class":51277},[95,73504,51284],{"class":105},[95,73506,73507,73509,73511,73514,73516],{"class":97,"line":33055},[95,73508,55279],{"class":105},[95,73510,252],{"class":51277},[95,73512,73513],{"class":105},">录入时间\u003C\u002F",[95,73515,252],{"class":51277},[95,73517,51284],{"class":105},[95,73519,73520,73522,73524,73526,73528],{"class":97,"line":33061},[95,73521,55279],{"class":105},[95,73523,252],{"class":51277},[95,73525,69497],{"class":105},[95,73527,252],{"class":51277},[95,73529,51284],{"class":105},[95,73531,73532,73534,73536],{"class":97,"line":33071},[95,73533,55384],{"class":105},[95,73535,249],{"class":51277},[95,73537,51284],{"class":105},[95,73539,73540,73542,73544],{"class":97,"line":33076},[95,73541,51753],{"class":105},[95,73543,246],{"class":51277},[95,73545,51284],{"class":105},[95,73547,73548,73550,73552],{"class":97,"line":33082},[95,73549,51318],{"class":105},[95,73551,290],{"class":51277},[95,73553,51284],{"class":105},[95,73555,73556],{"class":97,"line":33131},[95,73557,73558],{"class":164},"      \u003C!-- \u003Ctr>\n",[95,73560,73561],{"class":97,"line":33178},[95,73562,73563],{"class":164},"        \u003Ctd>1\u003C\u002Ftd>\n",[95,73565,73566],{"class":97,"line":33183},[95,73567,73563],{"class":164},[95,73569,73570],{"class":97,"line":33189},[95,73571,73563],{"class":164},[95,73573,73574],{"class":97,"line":33208},[95,73575,73563],{"class":164},[95,73577,73578],{"class":97,"line":33214},[95,73579,73563],{"class":164},[95,73581,73582],{"class":97,"line":33234},[95,73583,73563],{"class":164},[95,73585,73586],{"class":97,"line":33240},[95,73587,73563],{"class":164},[95,73589,73590],{"class":97,"line":33246},[95,73591,73592],{"class":164},"        \u003Ctd>\n",[95,73594,73595],{"class":97,"line":33256},[95,73596,73597],{"class":164},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[95,73599,73600],{"class":97,"line":33261},[95,73601,73602],{"class":164},"        \u003C\u002Ftd>\n",[95,73604,73605],{"class":97,"line":33267},[95,73606,73607],{"class":164},"      \u003C\u002Ftr> -->\n",[95,73609,73610,73612,73614],{"class":97,"line":33283},[95,73611,51753],{"class":105},[95,73613,290],{"class":51277},[95,73615,51284],{"class":105},[95,73617,73618,73620,73622],{"class":97,"line":33328},[95,73619,52394],{"class":105},[95,73621,243],{"class":51277},[95,73623,51284],{"class":105},[95,73625,73626,73628,73630],{"class":97,"line":33334},[95,73627,52121],{"class":105},[95,73629,51790],{"class":51277},[95,73631,51284],{"class":105},[95,73633,73634],{"class":97,"line":33340},[95,73635,73636],{"class":164},"    \u002F\u002F const initData = [{\n",[95,73638,73639],{"class":97,"line":33346},[95,73640,73641],{"class":164},"    \u002F\u002F   unameId: 1,\n",[95,73643,73644],{"class":97,"line":33357},[95,73645,73646],{"class":164},"    \u002F\u002F   uname: '华晨宇',\n",[95,73648,73649],{"class":97,"line":33363},[95,73650,73651],{"class":164},"    \u002F\u002F   age: 22,\n",[95,73653,73654],{"class":97,"line":33369},[95,73655,73656],{"class":164},"    \u002F\u002F   salary: 12000,\n",[95,73658,73659],{"class":97,"line":33375},[95,73660,73661],{"class":164},"    \u002F\u002F   gender: '男',\n",[95,73663,73664],{"class":97,"line":33393},[95,73665,73666],{"class":164},"    \u002F\u002F   city: '北京',\n",[95,73668,73669],{"class":97,"line":33407},[95,73670,73671],{"class":164},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[95,73673,73674],{"class":97,"line":33416},[95,73675,73676],{"class":164},"    \u002F\u002F }]\n",[95,73678,73679],{"class":97,"line":33425},[95,73680,73681],{"class":164},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[95,73683,73684],{"class":97,"line":33434},[95,73685,73686],{"class":164},"    \u002F\u002F 1.渲染业务\n",[95,73688,73689],{"class":97,"line":33443},[95,73690,73691],{"class":164},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[95,73693,73694],{"class":97,"line":33449},[95,73695,73696],{"class":164},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[95,73698,73699],{"class":97,"line":33455},[95,73700,73701],{"class":164},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[95,73703,73704],{"class":97,"line":33463},[95,73705,2382],{"emptyLinePlaceholder":21},[95,73707,73708],{"class":97,"line":33468},[95,73709,73710],{"class":164},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[95,73712,73713],{"class":97,"line":33474},[95,73714,73715],{"class":164},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[95,73717,73718,73720,73722,73724],{"class":97,"line":33485},[95,73719,11204],{"class":101},[95,73721,57672],{"class":154},[95,73723,13547],{"class":101},[95,73725,51815],{"class":105},[95,73727,73728,73731,73733],{"class":97,"line":33491},[95,73729,73730],{"class":105},"    console.",[95,73732,58224],{"class":1945},[95,73734,52389],{"class":105},[95,73736,73737],{"class":97,"line":33511},[95,73738,2382],{"emptyLinePlaceholder":21},[95,73740,73741],{"class":97,"line":33517},[95,73742,73743],{"class":164},"    \u002F\u002F 时间函数\n",[95,73745,73746,73748,73751],{"class":97,"line":33523},[95,73747,70061],{"class":101},[95,73749,73750],{"class":1945}," getTime",[95,73752,10836],{"class":105},[95,73754,73755,73757,73760,73762,73764,73767],{"class":97,"line":33529},[95,73756,58205],{"class":101},[95,73758,73759],{"class":154}," date",[95,73761,13547],{"class":101},[95,73763,11561],{"class":101},[95,73765,73766],{"class":1945}," Date",[95,73768,1958],{"class":105},[95,73770,73771,73773,73775,73777,73780,73783,73785,73787,73789,73792,73795,73797,73799,73801,73803,73805,73807,73809],{"class":97,"line":33546},[95,73772,58205],{"class":101},[95,73774,16074],{"class":154},[95,73776,13547],{"class":101},[95,73778,73779],{"class":105}," date.",[95,73781,73782],{"class":1945},"getHours",[95,73784,13033],{"class":105},[95,73786,1016],{"class":101},[95,73788,2020],{"class":154},[95,73790,73791],{"class":101}," ?",[95,73793,73794],{"class":210}," '0'",[95,73796,45551],{"class":101},[95,73798,73779],{"class":105},[95,73800,73782],{"class":1945},[95,73802,13033],{"class":105},[95,73804,965],{"class":101},[95,73806,73779],{"class":105},[95,73808,73782],{"class":1945},[95,73810,1958],{"class":105},[95,73812,73813,73815,73818,73820,73822,73825,73827,73829,73831,73833,73835,73837,73839,73841,73843,73845,73847,73849],{"class":97,"line":33552},[95,73814,58205],{"class":101},[95,73816,73817],{"class":154}," m",[95,73819,13547],{"class":101},[95,73821,73779],{"class":105},[95,73823,73824],{"class":1945},"getMinutes",[95,73826,13033],{"class":105},[95,73828,1016],{"class":101},[95,73830,2020],{"class":154},[95,73832,73791],{"class":101},[95,73834,73794],{"class":210},[95,73836,45551],{"class":101},[95,73838,73779],{"class":105},[95,73840,73824],{"class":1945},[95,73842,13033],{"class":105},[95,73844,965],{"class":101},[95,73846,73779],{"class":105},[95,73848,73824],{"class":1945},[95,73850,1958],{"class":105},[95,73852,73853,73855,73857,73859,73861,73864,73866,73868,73870,73872,73874,73876,73878,73880,73882,73884,73886,73888],{"class":97,"line":33558},[95,73854,58205],{"class":101},[95,73856,8411],{"class":154},[95,73858,13547],{"class":101},[95,73860,73779],{"class":105},[95,73862,73863],{"class":1945},"getSeconds",[95,73865,13033],{"class":105},[95,73867,1016],{"class":101},[95,73869,2020],{"class":154},[95,73871,73791],{"class":101},[95,73873,73794],{"class":210},[95,73875,45551],{"class":101},[95,73877,73779],{"class":105},[95,73879,73863],{"class":1945},[95,73881,13033],{"class":105},[95,73883,965],{"class":101},[95,73885,73779],{"class":105},[95,73887,73863],{"class":1945},[95,73889,1958],{"class":105},[95,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":97,"line":33564},[95,73893,58205],{"class":101},[95,73895,73896],{"class":154}," str",[95,73898,13547],{"class":101},[95,73900,62880],{"class":210},[95,73902,73903],{"class":105},"date",[95,73905,664],{"class":210},[95,73907,73908],{"class":1945},"getFullYear",[95,73910,2409],{"class":210},[95,73912,73913],{"class":210},"}\u002F${",[95,73915,73903],{"class":105},[95,73917,664],{"class":210},[95,73919,73920],{"class":1945},"getMonth",[95,73922,13033],{"class":210},[95,73924,587],{"class":101},[95,73926,25103],{"class":154},[95,73928,73913],{"class":210},[95,73930,73903],{"class":105},[95,73932,664],{"class":210},[95,73934,73935],{"class":1945},"getDate",[95,73937,2409],{"class":210},[95,73939,73940],{"class":210},"} ${",[95,73942,521],{"class":105},[95,73944,73945],{"class":210},"}:${",[95,73947,650],{"class":105},[95,73949,73945],{"class":210},[95,73951,801],{"class":105},[95,73953,73954],{"class":210},"}`\n",[95,73956,73957,73960],{"class":97,"line":33570},[95,73958,73959],{"class":101},"      return",[95,73961,73962],{"class":105}," str\n",[95,73964,73965],{"class":97,"line":33576},[95,73966,2169],{"class":105},[95,73968,73969],{"class":97,"line":33603},[95,73970,73971],{"class":164},"    \u002F\u002F 渲染函数\n",[95,73973,73974,73976,73978,73980,73982,73984,73986,73988],{"class":97,"line":33627},[95,73975,11204],{"class":101},[95,73977,69724],{"class":154},[95,73979,13547],{"class":101},[95,73981,54373],{"class":105},[95,73983,54376],{"class":1945},[95,73985,106],{"class":105},[95,73987,69735],{"class":210},[95,73989,112],{"class":105},[95,73991,73992,73994,73996],{"class":97,"line":33633},[95,73993,70061],{"class":101},[95,73995,70064],{"class":1945},[95,73997,10836],{"class":105},[95,73999,74000],{"class":97,"line":33639},[95,74001,74002],{"class":164},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[95,74004,74005],{"class":97,"line":33645},[95,74006,74007],{"class":164},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[95,74009,74010,74012,74015,74017,74019,74022,74024,74026,74028,74031,74033,74036],{"class":97,"line":33656},[95,74011,58205],{"class":101},[95,74013,74014],{"class":154}," trArr",[95,74016,13547],{"class":101},[95,74018,51942],{"class":105},[95,74020,74021],{"class":1945},"map",[95,74023,106],{"class":105},[95,74025,54426],{"class":101},[95,74027,1640],{"class":105},[95,74029,74030],{"class":5199},"ele",[95,74032,12418],{"class":105},[95,74034,74035],{"class":5199},"index",[95,74037,12425],{"class":105},[95,74039,74040,74042],{"class":97,"line":33667},[95,74041,14735],{"class":101},[95,74043,70145],{"class":210},[95,74045,74046],{"class":97,"line":33673},[95,74047,74048],{"class":210},"      \u003Ctr>\n",[95,74050,74051,74053,74055,74057,74060],{"class":97,"line":33690},[95,74052,70150],{"class":210},[95,74054,74030],{"class":105},[95,74056,664],{"class":210},[95,74058,74059],{"class":105},"unameId",[95,74061,70165],{"class":210},[95,74063,74064,74066,74068,74070,74072],{"class":97,"line":33713},[95,74065,70150],{"class":210},[95,74067,74030],{"class":105},[95,74069,664],{"class":210},[95,74071,70181],{"class":105},[95,74073,70165],{"class":210},[95,74075,74076,74078,74080,74082,74084],{"class":97,"line":33736},[95,74077,70150],{"class":210},[95,74079,74030],{"class":105},[95,74081,664],{"class":210},[95,74083,70198],{"class":105},[95,74085,70165],{"class":210},[95,74087,74088,74090,74092,74094,74096],{"class":97,"line":33742},[95,74089,70150],{"class":210},[95,74091,74030],{"class":105},[95,74093,664],{"class":210},[95,74095,70215],{"class":105},[95,74097,70165],{"class":210},[95,74099,74100,74102,74104,74106,74108],{"class":97,"line":33747},[95,74101,70150],{"class":210},[95,74103,74030],{"class":105},[95,74105,664],{"class":210},[95,74107,70232],{"class":105},[95,74109,70165],{"class":210},[95,74111,74112,74114,74116,74118,74120],{"class":97,"line":33756},[95,74113,70150],{"class":210},[95,74115,74030],{"class":105},[95,74117,664],{"class":210},[95,74119,70249],{"class":105},[95,74121,70165],{"class":210},[95,74123,74124,74126,74128,74130,74132],{"class":97,"line":33766},[95,74125,70150],{"class":210},[95,74127,74030],{"class":105},[95,74129,664],{"class":210},[95,74131,2369],{"class":105},[95,74133,70165],{"class":210},[95,74135,74136],{"class":97,"line":33772},[95,74137,73592],{"class":210},[95,74139,74140,74143,74145],{"class":97,"line":33777},[95,74141,74142],{"class":210},"          \u003Ca href=\"#\" data-id=\"${",[95,74144,74035],{"class":105},[95,74146,74147],{"class":210},"}\">删除\u003C\u002Fa>\n",[95,74149,74150],{"class":97,"line":33783},[95,74151,73602],{"class":210},[95,74153,74154],{"class":97,"line":33796},[95,74155,74156],{"class":210},"      \u003C\u002Ftr>\n",[95,74158,74159],{"class":97,"line":33802},[95,74160,74161],{"class":210},"  `\n",[95,74163,74164],{"class":97,"line":33813},[95,74165,64792],{"class":105},[95,74167,74168,74170,74172],{"class":97,"line":33824},[95,74169,58221],{"class":105},[95,74171,58224],{"class":1945},[95,74173,74174],{"class":105},"(trArr)\n",[95,74176,74177],{"class":97,"line":33843},[95,74178,2382],{"emptyLinePlaceholder":21},[95,74180,74181],{"class":97,"line":49503},[95,74182,74183],{"class":164},"      \u002F\u002F (2) 把数组转换为字符串join\n",[95,74185,74186],{"class":97,"line":49508},[95,74187,74188],{"class":164},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[95,74190,74191,74193,74195,74198,74201,74203,74206],{"class":97,"line":49517},[95,74192,70076],{"class":105},[95,74194,151],{"class":101},[95,74196,74197],{"class":105}," trArr.",[95,74199,74200],{"class":1945},"join",[95,74202,106],{"class":105},[95,74204,74205],{"class":210},"''",[95,74207,112],{"class":105},[95,74209,74210],{"class":97,"line":49526},[95,74211,74212],{"class":164},"      \u002F\u002F 显示共有几条\n",[95,74214,74215,74217,74219,74221,74224,74227,74229,74231],{"class":97,"line":49531},[95,74216,55748],{"class":105},[95,74218,54376],{"class":1945},[95,74220,106],{"class":105},[95,74222,74223],{"class":210},"'.total span'",[95,74225,74226],{"class":105},").innerHTML ",[95,74228,151],{"class":101},[95,74230,51942],{"class":105},[95,74232,55808],{"class":154},[95,74234,74235],{"class":97,"line":49536},[95,74236,2169],{"class":105},[95,74238,74239],{"class":97,"line":49541},[95,74240,74241],{"class":164},"    \u002F\u002F render()\n",[95,74243,74244],{"class":97,"line":49554},[95,74245,2382],{"emptyLinePlaceholder":21},[95,74247,74248],{"class":97,"line":49559},[95,74249,74250],{"class":164},"    \u002F\u002F 获取DOM对象\n",[95,74252,74253,74255,74257,74259,74261,74263,74265,74267],{"class":97,"line":49568},[95,74254,11204],{"class":101},[95,74256,69798],{"class":154},[95,74258,13547],{"class":101},[95,74260,54373],{"class":105},[95,74262,54376],{"class":1945},[95,74264,106],{"class":105},[95,74266,69809],{"class":210},[95,74268,112],{"class":105},[95,74270,74271,74273,74275,74277,74279,74281,74283,74285],{"class":97,"line":49577},[95,74272,11204],{"class":101},[95,74274,69625],{"class":154},[95,74276,13547],{"class":101},[95,74278,54373],{"class":105},[95,74280,54376],{"class":1945},[95,74282,106],{"class":105},[95,74284,69636],{"class":210},[95,74286,112],{"class":105},[95,74288,74289,74291,74293,74295,74297,74299,74301,74303],{"class":97,"line":49594},[95,74290,11204],{"class":101},[95,74292,15672],{"class":154},[95,74294,13547],{"class":101},[95,74296,54373],{"class":105},[95,74298,54376],{"class":1945},[95,74300,106],{"class":105},[95,74302,69655],{"class":210},[95,74304,112],{"class":105},[95,74306,74308,74310,74312,74314,74316,74318,74320,74322],{"class":97,"line":74307},231,[95,74309,11204],{"class":101},[95,74311,69684],{"class":154},[95,74313,13547],{"class":101},[95,74315,54373],{"class":105},[95,74317,54376],{"class":1945},[95,74319,106],{"class":105},[95,74321,69695],{"class":210},[95,74323,112],{"class":105},[95,74325,74327,74329,74331,74333,74335,74337,74339,74341],{"class":97,"line":74326},232,[95,74328,11204],{"class":101},[95,74330,69664],{"class":154},[95,74332,13547],{"class":101},[95,74334,54373],{"class":105},[95,74336,54376],{"class":1945},[95,74338,106],{"class":105},[95,74340,69675],{"class":210},[95,74342,112],{"class":105},[95,74344,74346,74348,74350,74352,74354,74356,74358,74360],{"class":97,"line":74345},233,[95,74347,11204],{"class":101},[95,74349,69704],{"class":154},[95,74351,13547],{"class":101},[95,74353,54373],{"class":105},[95,74355,54376],{"class":1945},[95,74357,106],{"class":105},[95,74359,69715],{"class":210},[95,74361,112],{"class":105},[95,74363,74365],{"class":97,"line":74364},234,[95,74366,2382],{"emptyLinePlaceholder":21},[95,74368,74370],{"class":97,"line":74369},235,[95,74371,74372],{"class":164},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[95,74374,74376,74378,74380,74382,74384,74386,74388,74390,74392],{"class":97,"line":74375},236,[95,74377,69816],{"class":105},[95,74379,57790],{"class":1945},[95,74381,106],{"class":105},[95,74383,69823],{"class":210},[95,74385,12418],{"class":105},[95,74387,54426],{"class":101},[95,74389,1640],{"class":105},[95,74391,180],{"class":5199},[95,74393,12425],{"class":105},[95,74395,74397],{"class":97,"line":74396},237,[95,74398,74399],{"class":164},"      \u002F\u002F 禁止浏览器跳转\n",[95,74401,74403,74405,74407],{"class":97,"line":74402},238,[95,74404,69843],{"class":105},[95,74406,69846],{"class":1945},[95,74408,1958],{"class":105},[95,74410,74412],{"class":97,"line":74411},239,[95,74413,74414],{"class":164},"      \u002F\u002F 非空判断\n",[95,74416,74418],{"class":97,"line":74417},240,[95,74419,74420],{"class":164},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[95,74422,74424],{"class":97,"line":74423},241,[95,74425,74426],{"class":164},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[95,74428,74430,74432,74434,74436,74439,74441,74444,74447,74449,74451],{"class":97,"line":74429},242,[95,74431,54457],{"class":101},[95,74433,1640],{"class":105},[95,74435,332],{"class":101},[95,74437,74438],{"class":105},"uname.value ",[95,74440,71334],{"class":101},[95,74442,74443],{"class":101}," !",[95,74445,74446],{"class":105},"age.value ",[95,74448,71334],{"class":101},[95,74450,74443],{"class":101},[95,74452,74453],{"class":105},"salary.value) {\n",[95,74455,74457,74459,74461,74463,74465],{"class":97,"line":74456},243,[95,74458,14735],{"class":101},[95,74460,69917],{"class":1945},[95,74462,106],{"class":105},[95,74464,69922],{"class":210},[95,74466,112],{"class":105},[95,74468,74470],{"class":97,"line":74469},244,[95,74471,52375],{"class":105},[95,74473,74475,74477,74479],{"class":97,"line":74474},245,[95,74476,57984],{"class":105},[95,74478,51861],{"class":1945},[95,74480,74481],{"class":105},"({\n",[95,74483,74485],{"class":97,"line":74484},246,[95,74486,74487],{"class":164},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[95,74489,74491],{"class":97,"line":74490},247,[95,74492,74493],{"class":164},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[95,74495,74497],{"class":97,"line":74496},248,[95,74498,74499],{"class":164},"        \u002F\u002F 对象的序号应为数组长度+1\n",[95,74501,74503],{"class":97,"line":74502},249,[95,74504,74505],{"class":164},"        \u002F\u002F unameId: arr.length + 1,\n",[95,74507,74509],{"class":97,"line":74508},250,[95,74510,2382],{"emptyLinePlaceholder":21},[95,74512,74514],{"class":97,"line":74513},251,[95,74515,74516],{"class":164},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[95,74518,74520],{"class":97,"line":74519},252,[95,74521,74522],{"class":164},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[95,74524,74526],{"class":97,"line":74525},253,[95,74527,74528],{"class":164},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[95,74530,74532],{"class":97,"line":74531},254,[95,74533,74534],{"class":164},"        \u002F\u002F 0当假看\n",[95,74536,74538,74541,74543,74545,74548,74550,74552,74554,74557,74559,74561,74564,74566],{"class":97,"line":74537},255,[95,74539,74540],{"class":105},"        unameId: arr.",[95,74542,51945],{"class":154},[95,74544,73791],{"class":101},[95,74546,74547],{"class":105}," arr[arr.",[95,74549,51945],{"class":154},[95,74551,52248],{"class":101},[95,74553,25103],{"class":154},[95,74555,74556],{"class":105},"].unameId ",[95,74558,587],{"class":101},[95,74560,25103],{"class":154},[95,74562,74563],{"class":101}," :",[95,74565,25103],{"class":154},[95,74567,31451],{"class":105},[95,74569,74571],{"class":97,"line":74570},256,[95,74572,69970],{"class":105},[95,74574,74576],{"class":97,"line":74575},257,[95,74577,69975],{"class":105},[95,74579,74581],{"class":97,"line":74580},258,[95,74582,69985],{"class":105},[95,74584,74586],{"class":97,"line":74585},259,[95,74587,69980],{"class":105},[95,74589,74591],{"class":97,"line":74590},260,[95,74592,74593],{"class":105},"        city: city.value,\n",[95,74595,74597],{"class":97,"line":74596},261,[95,74598,74599],{"class":164},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[95,74601,74603],{"class":97,"line":74602},262,[95,74604,74605],{"class":164},"        \u002F\u002F time: new Date().toDateString()\n",[95,74607,74609,74612,74615],{"class":97,"line":74608},263,[95,74610,74611],{"class":105},"        time: ",[95,74613,74614],{"class":1945},"getTime",[95,74616,1958],{"class":105},[95,74618,74620],{"class":97,"line":74619},264,[95,74621,64792],{"class":105},[95,74623,74625],{"class":97,"line":74624},265,[95,74626,74627],{"class":164},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[95,74629,74631,74633],{"class":97,"line":74630},266,[95,74632,70045],{"class":1945},[95,74634,1958],{"class":105},[95,74636,74638,74640,74642,74644,74646],{"class":97,"line":74637},267,[95,74639,70028],{"class":154},[95,74641,664],{"class":105},[95,74643,70033],{"class":1945},[95,74645,13033],{"class":105},[95,74647,74648],{"class":164},"\u002F\u002F重置表单\n",[95,74650,74652],{"class":97,"line":74651},268,[95,74653,74654],{"class":164},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[95,74656,74658,74661,74663,74665,74668,74670,74672,74674,74676],{"class":97,"line":74657},269,[95,74659,74660],{"class":105},"      localStorage.",[95,74662,71631],{"class":1945},[95,74664,106],{"class":105},[95,74666,74667],{"class":210},"'data'",[95,74669,12418],{"class":105},[95,74671,71641],{"class":154},[95,74673,664],{"class":105},[95,74675,71646],{"class":1945},[95,74677,74678],{"class":105},"(arr))\n",[95,74680,74682],{"class":97,"line":74681},270,[95,74683,33446],{"class":105},[95,74685,74687],{"class":97,"line":74686},271,[95,74688,2382],{"emptyLinePlaceholder":21},[95,74690,74692],{"class":97,"line":74691},272,[95,74693,74694],{"class":164},"    \u002F\u002F 3.删除业务\n",[95,74696,74698],{"class":97,"line":74697},273,[95,74699,74700],{"class":164},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[95,74702,74704,74706,74708,74710,74712,74714,74716,74718,74720],{"class":97,"line":74703},274,[95,74705,70318],{"class":105},[95,74707,57790],{"class":1945},[95,74709,106],{"class":105},[95,74711,57795],{"class":210},[95,74713,12418],{"class":105},[95,74715,54426],{"class":101},[95,74717,1640],{"class":105},[95,74719,180],{"class":5199},[95,74721,12425],{"class":105},[95,74723,74725],{"class":97,"line":74724},275,[95,74726,74727],{"class":164},"      \u002F\u002F 判断是否点击的是删除按钮\n",[95,74729,74731,74733,74735,74737,74739],{"class":97,"line":74730},276,[95,74732,54457],{"class":101},[95,74734,67011],{"class":105},[95,74736,54463],{"class":101},[95,74738,68233],{"class":210},[95,74740,12425],{"class":105},[95,74742,74744],{"class":97,"line":74743},277,[95,74745,74746],{"class":164},"        \u002F\u002F alert(1)\n",[95,74748,74750],{"class":97,"line":74749},278,[95,74751,74752],{"class":164},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[95,74754,74756],{"class":97,"line":74755},279,[95,74757,74758],{"class":164},"        \u002F\u002F console.log(e.target)\n",[95,74760,74762],{"class":97,"line":74761},280,[95,74763,74764],{"class":164},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[95,74766,74768],{"class":97,"line":74767},281,[95,74769,2382],{"emptyLinePlaceholder":21},[95,74771,74773],{"class":97,"line":74772},282,[95,74774,74775],{"class":164},"        \u002F\u002F 确认框，确然是否真的要删除\n",[95,74777,74779],{"class":97,"line":74778},283,[95,74780,74781],{"class":164},"        \u002F\u002F confirm()为确认框\n",[95,74783,74785],{"class":97,"line":74784},284,[95,74786,74787],{"class":164},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[95,74789,74791,74793,74795,74798,74800,74803],{"class":97,"line":74790},285,[95,74792,2479],{"class":101},[95,74794,1640],{"class":105},[95,74796,74797],{"class":1945},"confirm",[95,74799,106],{"class":105},[95,74801,74802],{"class":210},"'您确定要删除这条数据吗？'",[95,74804,74805],{"class":105},")) {\n",[95,74807,74809,74812,74814,74816,74818],{"class":97,"line":74808},286,[95,74810,74811],{"class":105},"          arr.",[95,74813,57987],{"class":1945},[95,74815,70371],{"class":105},[95,74817,323],{"class":154},[95,74819,112],{"class":105},[95,74821,74823],{"class":97,"line":74822},287,[95,74824,74825],{"class":164},"          \u002F\u002F 3.4 重新渲染页面\n",[95,74827,74829,74832],{"class":97,"line":74828},288,[95,74830,74831],{"class":1945},"          render",[95,74833,1958],{"class":105},[95,74835,74837],{"class":97,"line":74836},289,[95,74838,74839],{"class":164},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[95,74841,74843,74846,74848,74850,74852,74854,74856,74858,74860],{"class":97,"line":74842},290,[95,74844,74845],{"class":105},"          localStorage.",[95,74847,71631],{"class":1945},[95,74849,106],{"class":105},[95,74851,74667],{"class":210},[95,74853,12418],{"class":105},[95,74855,71641],{"class":154},[95,74857,664],{"class":105},[95,74859,71646],{"class":1945},[95,74861,74678],{"class":105},[95,74863,74865],{"class":97,"line":74864},291,[95,74866,2511],{"class":105},[95,74868,74870],{"class":97,"line":74869},292,[95,74871,52375],{"class":105},[95,74873,74875],{"class":97,"line":74874},293,[95,74876,2382],{"emptyLinePlaceholder":21},[95,74878,74880],{"class":97,"line":74879},294,[95,74881,33446],{"class":105},[95,74883,74885],{"class":97,"line":74884},295,[95,74886,2382],{"emptyLinePlaceholder":21},[95,74888,74890,74892,74894],{"class":97,"line":74889},296,[95,74891,52394],{"class":105},[95,74893,51790],{"class":51277},[95,74895,51284],{"class":105},[95,74897,74899,74901,74903],{"class":97,"line":74898},297,[95,74900,51762],{"class":105},[95,74902,51777],{"class":51277},[95,74904,51284],{"class":105},[95,74906,74908],{"class":97,"line":74907},298,[95,74909,2382],{"emptyLinePlaceholder":21},[95,74911,74913,74915,74917],{"class":97,"line":74912},299,[95,74914,51762],{"class":105},[95,74916,50612],{"class":51277},[95,74918,51284],{"class":105},[37,74920,74922],{"id":74921},"_36-正则表达式","3.6 正则表达式",[10,74924,74925],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[10,74927,74928],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[10,74930,74931],{},"正则表达式的作用：",[1113,74933,74934,74941,74947],{},[52,74935,74936,74937,74940],{},"表单验证（ ",[255,74938,74939],{},"匹配"," ）",[52,74942,74943,74944,74940],{},"过滤敏感词（ ",[255,74945,74946],{},"替换",[52,74948,74949,74950,74940],{},"字符串中提取我们想要的部分（ ",[255,74951,74952],{},"提取",[66,74954,74956],{"id":74955},"_361-语法","3.6.1 语法",[10,74958,74959],{},"正则表达式使用步骤：",[49,74961,74962,74965],{},[52,74963,74964],{},"定义规则",[52,74966,74967],{},"查找是否匹配",[10,74969,74970],{},"正则表达式里边不需要写引号",[10,74972,74973],{},[1444,74974],{"alt":14,"src":74975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[10,74977,74978],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[10,74980,74981],{},"reg.test(str)",[10,74983,74984],{},[1444,74985],{"alt":14,"src":74986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[10,74988,74989],{},[1444,74990],{"alt":14,"src":74991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[66,74993,74995],{"id":74994},"_362-元字符","3.6.2 元字符",[49,74997,74998,75001,75004,75007,75014],{},[52,74999,75000],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[52,75002,75003],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[52,75005,75006],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[52,75008,75009,75010],{},"正则验证工具：",[344,75011,75012],{"href":75012,"rel":75013},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23849],[52,75015,75016],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21981,75018,75020],{"id":75019},"_3621-边界符","3.6.2.1 边界符",[10,75022,75023],{},[1444,75024],{"alt":14,"src":75025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[10,75027,75028],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[10,75030,75031],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[10,75033,75034],{},"只匹配一次",[10,75036,75037],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21981,75039,75041],{"id":75040},"_3622-量词","3.6.2.2 量词",[10,75043,75044],{},[1444,75045],{"alt":14,"src":75046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[10,75048,75049],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21981,75051,75053],{"id":75052},"_3623-元字符","3.6.2.3 元字符",[10,75055,75056],{},[1444,75057],{"alt":14,"src":75058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[10,75060,75061],{},"匹配的是a或b或c []只选一个",[10,75063,75064],{},[1444,75065],{"alt":14,"src":75066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[10,75068,75069],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[10,75071,75072],{},[1444,75073],{"alt":14,"src":75074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[10,75076,75077],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[10,75079,75080],{},[1444,75081],{"alt":14,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[86,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",[92,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},[95,75089,75090,75092,75094,75096],{"class":97,"line":98},[95,75091,51274],{"class":105},[95,75093,51278],{"class":51277},[95,75095,51281],{"class":1945},[95,75097,51284],{"class":105},[95,75099,75100,75102,75104,75106,75108,75110],{"class":97,"line":15},[95,75101,1016],{"class":105},[95,75103,50612],{"class":51277},[95,75105,51293],{"class":1945},[95,75107,151],{"class":105},[95,75109,51298],{"class":210},[95,75111,51284],{"class":105},[95,75113,75114],{"class":97,"line":1161},[95,75115,2382],{"emptyLinePlaceholder":21},[95,75117,75118,75120,75122],{"class":97,"line":1176},[95,75119,1016],{"class":105},[95,75121,51311],{"class":51277},[95,75123,51284],{"class":105},[95,75125,75126,75128,75130,75132,75134,75136],{"class":97,"line":1182},[95,75127,52121],{"class":105},[95,75129,51321],{"class":51277},[95,75131,51324],{"class":1945},[95,75133,151],{"class":105},[95,75135,51329],{"class":210},[95,75137,51284],{"class":105},[95,75139,75140,75142,75144,75146,75148,75150,75152,75154,75156],{"class":97,"line":1196},[95,75141,52121],{"class":105},[95,75143,51321],{"class":51277},[95,75145,14903],{"class":1945},[95,75147,151],{"class":105},[95,75149,51368],{"class":210},[95,75151,51348],{"class":1945},[95,75153,151],{"class":105},[95,75155,51375],{"class":210},[95,75157,51284],{"class":105},[95,75159,75160,75162,75164,75166,75168],{"class":97,"line":1202},[95,75161,52121],{"class":105},[95,75163,51384],{"class":51277},[95,75165,51387],{"class":105},[95,75167,51384],{"class":51277},[95,75169,51284],{"class":105},[95,75171,75172,75174,75176],{"class":97,"line":1293},[95,75173,51762],{"class":105},[95,75175,51311],{"class":51277},[95,75177,51284],{"class":105},[95,75179,75180],{"class":97,"line":1299},[95,75181,2382],{"emptyLinePlaceholder":21},[95,75183,75184,75186,75188],{"class":97,"line":1311},[95,75185,1016],{"class":105},[95,75187,51777],{"class":51277},[95,75189,51284],{"class":105},[95,75191,75192,75194,75196],{"class":97,"line":1594},[95,75193,52121],{"class":105},[95,75195,51790],{"class":51277},[95,75197,51284],{"class":105},[95,75199,75200],{"class":97,"line":1599},[95,75201,75202],{"class":164},"    \u002F\u002F 元字符中\n",[95,75204,75205,75207,75209,75211,75213,75216,75218,75220,75223,75225,75228,75231],{"class":97,"line":1605},[95,75206,73730],{"class":105},[95,75208,58224],{"class":1945},[95,75210,106],{"class":105},[95,75212,690],{"class":210},[95,75214,75215],{"class":47962},"哈",[95,75217,690],{"class":210},[95,75219,664],{"class":105},[95,75221,75222],{"class":1945},"test",[95,75224,106],{"class":105},[95,75226,75227],{"class":210},"'哈'",[95,75229,75230],{"class":105},"))  ",[95,75232,75233],{"class":164},"\u002F\u002Ftrue\n",[95,75235,75236,75238,75240,75242,75244,75246,75248,75250,75252,75254,75257,75259],{"class":97,"line":1610},[95,75237,73730],{"class":105},[95,75239,58224],{"class":1945},[95,75241,106],{"class":105},[95,75243,690],{"class":210},[95,75245,75215],{"class":47962},[95,75247,690],{"class":210},[95,75249,664],{"class":105},[95,75251,75222],{"class":1945},[95,75253,106],{"class":105},[95,75255,75256],{"class":210},"'哈哈'",[95,75258,75230],{"class":105},[95,75260,75233],{"class":164},[95,75262,75263,75265,75267,75269,75271,75273,75275,75277,75279,75281,75284,75287],{"class":97,"line":1624},[95,75264,73730],{"class":105},[95,75266,58224],{"class":1945},[95,75268,106],{"class":105},[95,75270,690],{"class":210},[95,75272,75215],{"class":47962},[95,75274,690],{"class":210},[95,75276,664],{"class":105},[95,75278,75222],{"class":1945},[95,75280,106],{"class":105},[95,75282,75283],{"class":210},"'二哈'",[95,75285,75286],{"class":105},"))   ",[95,75288,75233],{"class":164},[95,75290,75291],{"class":97,"line":1629},[95,75292,2382],{"emptyLinePlaceholder":21},[95,75294,75295],{"class":97,"line":1635},[95,75296,75297],{"class":164},"    \u002F\u002F 1.边界符\n",[95,75299,75300,75302,75304,75306,75308,75310,75312,75314,75316,75318,75320,75322,75324],{"class":97,"line":1656},[95,75301,73730],{"class":105},[95,75303,58224],{"class":1945},[95,75305,106],{"class":105},[95,75307,690],{"class":210},[95,75309,1072],{"class":101},[95,75311,75215],{"class":47962},[95,75313,690],{"class":210},[95,75315,664],{"class":105},[95,75317,75222],{"class":1945},[95,75319,106],{"class":105},[95,75321,75227],{"class":210},[95,75323,75230],{"class":105},[95,75325,75233],{"class":164},[95,75327,75328,75330,75332,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354],{"class":97,"line":1661},[95,75329,73730],{"class":105},[95,75331,58224],{"class":1945},[95,75333,106],{"class":105},[95,75335,690],{"class":210},[95,75337,1072],{"class":101},[95,75339,75215],{"class":47962},[95,75341,408],{"class":101},[95,75343,690],{"class":210},[95,75345,664],{"class":105},[95,75347,75222],{"class":1945},[95,75349,106],{"class":105},[95,75351,75256],{"class":210},[95,75353,75230],{"class":105},[95,75355,75356],{"class":164},"\u002F\u002Ffalse\n",[95,75358,75359],{"class":97,"line":1675},[95,75360,75361],{"class":164},"    \u002F\u002F 2.量词\n",[95,75363,75364],{"class":97,"line":1680},[95,75365,75366],{"class":164},"    \u002F\u002F 量词 * 类似于 >= 0\n",[95,75368,75369,75371,75373,75375,75377,75379,75381,75384,75386,75388,75390,75392,75394,75396],{"class":97,"line":1709},[95,75370,73730],{"class":105},[95,75372,58224],{"class":1945},[95,75374,106],{"class":105},[95,75376,690],{"class":210},[95,75378,1072],{"class":101},[95,75380,75215],{"class":47962},[95,75382,75383],{"class":101},"*$",[95,75385,690],{"class":210},[95,75387,664],{"class":105},[95,75389,75222],{"class":1945},[95,75391,106],{"class":105},[95,75393,75256],{"class":210},[95,75395,75230],{"class":105},[95,75397,75233],{"class":164},[95,75399,75400,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75425,75427],{"class":97,"line":1714},[95,75401,73730],{"class":105},[95,75403,58224],{"class":1945},[95,75405,106],{"class":105},[95,75407,690],{"class":210},[95,75409,1072],{"class":101},[95,75411,75215],{"class":47962},[95,75413,75383],{"class":101},[95,75415,690],{"class":210},[95,75417,664],{"class":105},[95,75419,75222],{"class":1945},[95,75421,106],{"class":105},[95,75423,75424],{"class":210},"'二哈好傻'",[95,75426,75230],{"class":105},[95,75428,75429],{"class":164},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[95,75431,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75457,75459],{"class":97,"line":1731},[95,75433,73730],{"class":105},[95,75435,58224],{"class":1945},[95,75437,106],{"class":105},[95,75439,690],{"class":210},[95,75441,1072],{"class":101},[95,75443,75215],{"class":47962},[95,75445,75383],{"class":101},[95,75447,690],{"class":210},[95,75449,664],{"class":105},[95,75451,75222],{"class":1945},[95,75453,106],{"class":105},[95,75455,75456],{"class":210},"'哈好哈'",[95,75458,75286],{"class":105},[95,75460,75461],{"class":164},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[95,75463,75464],{"class":97,"line":1736},[95,75465,2382],{"emptyLinePlaceholder":21},[95,75467,75468],{"class":97,"line":1741},[95,75469,75470],{"class":164},"    \u002F\u002F +类似于>=1\n",[95,75472,75473,75475,75477,75479,75481,75483,75485,75488,75490,75492,75494,75496,75498,75500],{"class":97,"line":1746},[95,75474,73730],{"class":105},[95,75476,58224],{"class":1945},[95,75478,106],{"class":105},[95,75480,690],{"class":210},[95,75482,1072],{"class":101},[95,75484,75215],{"class":47962},[95,75486,75487],{"class":101},"+$",[95,75489,690],{"class":210},[95,75491,664],{"class":105},[95,75493,75222],{"class":1945},[95,75495,106],{"class":105},[95,75497,75256],{"class":210},[95,75499,75230],{"class":105},[95,75501,75233],{"class":164},[95,75503,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530],{"class":97,"line":1760},[95,75505,73730],{"class":105},[95,75507,58224],{"class":1945},[95,75509,106],{"class":105},[95,75511,690],{"class":210},[95,75513,1072],{"class":101},[95,75515,75215],{"class":47962},[95,75517,75487],{"class":101},[95,75519,690],{"class":210},[95,75521,664],{"class":105},[95,75523,75222],{"class":1945},[95,75525,106],{"class":105},[95,75527,75424],{"class":210},[95,75529,75230],{"class":105},[95,75531,75429],{"class":164},[95,75533,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560],{"class":97,"line":1765},[95,75535,73730],{"class":105},[95,75537,58224],{"class":1945},[95,75539,106],{"class":105},[95,75541,690],{"class":210},[95,75543,1072],{"class":101},[95,75545,75215],{"class":47962},[95,75547,75487],{"class":101},[95,75549,690],{"class":210},[95,75551,664],{"class":105},[95,75553,75222],{"class":1945},[95,75555,106],{"class":105},[95,75557,75456],{"class":210},[95,75559,75286],{"class":105},[95,75561,75356],{"class":164},[95,75563,75564],{"class":97,"line":2559},[95,75565,2382],{"emptyLinePlaceholder":21},[95,75567,75568],{"class":97,"line":2573},[95,75569,75570],{"class":164},"    \u002F\u002F ?类似于0次或一次\n",[95,75572,75573,75575,75577,75579,75581,75583,75586,75588,75590,75592,75594,75596,75598,75600],{"class":97,"line":2581},[95,75574,73730],{"class":105},[95,75576,58224],{"class":1945},[95,75578,106],{"class":105},[95,75580,690],{"class":210},[95,75582,1072],{"class":101},[95,75584,75585],{"class":47962},"哈？",[95,75587,408],{"class":101},[95,75589,690],{"class":210},[95,75591,664],{"class":105},[95,75593,75222],{"class":1945},[95,75595,106],{"class":105},[95,75597,74205],{"class":210},[95,75599,75286],{"class":105},[95,75601,75233],{"class":164},[95,75603,75604,75606,75608,75610,75612,75614,75616,75619,75621,75623,75625,75627,75629,75631],{"class":97,"line":2586},[95,75605,73730],{"class":105},[95,75607,58224],{"class":1945},[95,75609,106],{"class":105},[95,75611,690],{"class":210},[95,75613,1072],{"class":101},[95,75615,75215],{"class":47962},[95,75617,75618],{"class":101},"?$",[95,75620,690],{"class":210},[95,75622,664],{"class":105},[95,75624,75222],{"class":1945},[95,75626,106],{"class":105},[95,75628,75256],{"class":210},[95,75630,75230],{"class":105},[95,75632,75356],{"class":164},[95,75634,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661],{"class":97,"line":2592},[95,75636,73730],{"class":105},[95,75638,58224],{"class":1945},[95,75640,106],{"class":105},[95,75642,690],{"class":210},[95,75644,1072],{"class":101},[95,75646,75215],{"class":47962},[95,75648,75618],{"class":101},[95,75650,690],{"class":210},[95,75652,664],{"class":105},[95,75654,75222],{"class":1945},[95,75656,106],{"class":105},[95,75658,75424],{"class":210},[95,75660,75230],{"class":105},[95,75662,75429],{"class":164},[95,75664,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691],{"class":97,"line":2598},[95,75666,73730],{"class":105},[95,75668,58224],{"class":1945},[95,75670,106],{"class":105},[95,75672,690],{"class":210},[95,75674,1072],{"class":101},[95,75676,75215],{"class":47962},[95,75678,75618],{"class":101},[95,75680,690],{"class":210},[95,75682,664],{"class":105},[95,75684,75222],{"class":1945},[95,75686,106],{"class":105},[95,75688,75456],{"class":210},[95,75690,75230],{"class":105},[95,75692,75356],{"class":164},[95,75694,75695],{"class":97,"line":2603},[95,75696,2382],{"emptyLinePlaceholder":21},[95,75698,75699],{"class":97,"line":7931},[95,75700,75701],{"class":164},"    \u002F\u002F {n}写几，就必须出现几次\n",[95,75703,75704,75706,75708,75710,75712,75714,75716,75719,75721,75723,75725,75727,75730,75733],{"class":97,"line":7955},[95,75705,73730],{"class":105},[95,75707,58224],{"class":1945},[95,75709,106],{"class":105},[95,75711,690],{"class":210},[95,75713,1072],{"class":101},[95,75715,75215],{"class":47962},[95,75717,75718],{"class":101},"{4}$",[95,75720,690],{"class":210},[95,75722,664],{"class":105},[95,75724,75222],{"class":1945},[95,75726,106],{"class":105},[95,75728,75729],{"class":210},"'哈哈哈哈'",[95,75731,75732],{"class":105},")) ",[95,75734,75233],{"class":164},[95,75736,75737],{"class":97,"line":7960},[95,75738,2382],{"emptyLinePlaceholder":21},[95,75740,75741],{"class":97,"line":7966},[95,75742,75743],{"class":164},"    \u002F\u002F {n,}大于等于n次\n",[95,75745,75746,75748,75750,75752,75754,75756,75758,75761,75763,75765,75767,75769,75771,75773],{"class":97,"line":7993},[95,75747,73730],{"class":105},[95,75749,58224],{"class":1945},[95,75751,106],{"class":105},[95,75753,690],{"class":210},[95,75755,1072],{"class":101},[95,75757,75215],{"class":47962},[95,75759,75760],{"class":101},"{4,}$",[95,75762,690],{"class":210},[95,75764,664],{"class":105},[95,75766,75222],{"class":1945},[95,75768,106],{"class":105},[95,75770,75729],{"class":210},[95,75772,75732],{"class":105},[95,75774,75233],{"class":164},[95,75776,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799,75802,75804],{"class":97,"line":7998},[95,75778,73730],{"class":105},[95,75780,58224],{"class":1945},[95,75782,106],{"class":105},[95,75784,690],{"class":210},[95,75786,1072],{"class":101},[95,75788,75215],{"class":47962},[95,75790,75760],{"class":101},[95,75792,690],{"class":210},[95,75794,664],{"class":105},[95,75796,75222],{"class":1945},[95,75798,106],{"class":105},[95,75800,75801],{"class":210},"'哈哈哈哈哈'",[95,75803,75732],{"class":105},[95,75805,75233],{"class":164},[95,75807,75808],{"class":97,"line":8004},[95,75809,2382],{"emptyLinePlaceholder":21},[95,75811,75812],{"class":97,"line":8016},[95,75813,75814],{"class":164},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[95,75816,75817,75819,75821,75823,75825,75827,75829,75832,75834,75836,75838,75840,75842,75844],{"class":97,"line":8028},[95,75818,73730],{"class":105},[95,75820,58224],{"class":1945},[95,75822,106],{"class":105},[95,75824,690],{"class":210},[95,75826,1072],{"class":101},[95,75828,75215],{"class":47962},[95,75830,75831],{"class":101},"{4,6}$",[95,75833,690],{"class":210},[95,75835,664],{"class":105},[95,75837,75222],{"class":1945},[95,75839,106],{"class":105},[95,75841,75729],{"class":210},[95,75843,75732],{"class":105},[95,75845,75233],{"class":164},[95,75847,75848,75850,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874],{"class":97,"line":8040},[95,75849,73730],{"class":105},[95,75851,58224],{"class":1945},[95,75853,106],{"class":105},[95,75855,690],{"class":210},[95,75857,1072],{"class":101},[95,75859,75215],{"class":47962},[95,75861,75831],{"class":101},[95,75863,690],{"class":210},[95,75865,664],{"class":105},[95,75867,75222],{"class":1945},[95,75869,106],{"class":105},[95,75871,75801],{"class":210},[95,75873,75732],{"class":105},[95,75875,75233],{"class":164},[95,75877,75878,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75903,75905],{"class":97,"line":9699},[95,75879,73730],{"class":105},[95,75881,58224],{"class":1945},[95,75883,106],{"class":105},[95,75885,690],{"class":210},[95,75887,1072],{"class":101},[95,75889,75215],{"class":47962},[95,75891,75831],{"class":101},[95,75893,690],{"class":210},[95,75895,664],{"class":105},[95,75897,75222],{"class":1945},[95,75899,106],{"class":105},[95,75901,75902],{"class":210},"'哈哈哈哈哈哈哈'",[95,75904,75732],{"class":105},[95,75906,75356],{"class":164},[95,75908,75909],{"class":97,"line":9724},[95,75910,2382],{"emptyLinePlaceholder":21},[95,75912,75913],{"class":97,"line":9747},[95,75914,75915],{"class":164},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[95,75917,75918,75920,75922,75924,75926,75928,75931,75933,75935,75937,75939,75941,75944,75946],{"class":97,"line":9771},[95,75919,73730],{"class":105},[95,75921,58224],{"class":1945},[95,75923,106],{"class":105},[95,75925,690],{"class":210},[95,75927,1072],{"class":101},[95,75929,75930],{"class":154},"[abc]",[95,75932,408],{"class":101},[95,75934,690],{"class":210},[95,75936,664],{"class":105},[95,75938,75222],{"class":1945},[95,75940,106],{"class":105},[95,75942,75943],{"class":210},"'a'",[95,75945,75230],{"class":105},[95,75947,75233],{"class":164},[95,75949,75950,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75975,75977],{"class":97,"line":9776},[95,75951,73730],{"class":105},[95,75953,58224],{"class":1945},[95,75955,106],{"class":105},[95,75957,690],{"class":210},[95,75959,1072],{"class":101},[95,75961,75930],{"class":154},[95,75963,408],{"class":101},[95,75965,690],{"class":210},[95,75967,664],{"class":105},[95,75969,75222],{"class":1945},[95,75971,106],{"class":105},[95,75973,75974],{"class":210},"'b'",[95,75976,75230],{"class":105},[95,75978,75233],{"class":164},[95,75980,75981,75983,75985,75987,75989,75991,75993,75995,75997,75999,76001,76003,76006,76008],{"class":97,"line":9781},[95,75982,73730],{"class":105},[95,75984,58224],{"class":1945},[95,75986,106],{"class":105},[95,75988,690],{"class":210},[95,75990,1072],{"class":101},[95,75992,75930],{"class":154},[95,75994,408],{"class":101},[95,75996,690],{"class":210},[95,75998,664],{"class":105},[95,76000,75222],{"class":1945},[95,76002,106],{"class":105},[95,76004,76005],{"class":210},"'c'",[95,76007,75230],{"class":105},[95,76009,75233],{"class":164},[95,76011,76012,76014,76016,76018,76020,76022,76024,76026,76028,76030,76033,76035],{"class":97,"line":9786},[95,76013,73730],{"class":105},[95,76015,58224],{"class":1945},[95,76017,106],{"class":105},[95,76019,690],{"class":210},[95,76021,75930],{"class":154},[95,76023,690],{"class":210},[95,76025,664],{"class":105},[95,76027,75222],{"class":1945},[95,76029,106],{"class":105},[95,76031,76032],{"class":210},"'ab'",[95,76034,75230],{"class":105},[95,76036,75233],{"class":164},[95,76038,76039,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065],{"class":97,"line":9795},[95,76040,73730],{"class":105},[95,76042,58224],{"class":1945},[95,76044,106],{"class":105},[95,76046,690],{"class":210},[95,76048,1072],{"class":101},[95,76050,75930],{"class":154},[95,76052,408],{"class":101},[95,76054,690],{"class":210},[95,76056,664],{"class":105},[95,76058,75222],{"class":1945},[95,76060,106],{"class":105},[95,76062,76032],{"class":210},[95,76064,75230],{"class":105},[95,76066,76067],{"class":164},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[95,76069,76070,76072,76074,76076,76078,76080,76082,76085,76087,76089,76091,76093,76095,76097],{"class":97,"line":9800},[95,76071,73730],{"class":105},[95,76073,58224],{"class":1945},[95,76075,106],{"class":105},[95,76077,690],{"class":210},[95,76079,1072],{"class":101},[95,76081,75930],{"class":154},[95,76083,76084],{"class":101},"{2}$",[95,76086,690],{"class":210},[95,76088,664],{"class":105},[95,76090,75222],{"class":1945},[95,76092,106],{"class":105},[95,76094,76032],{"class":210},[95,76096,75230],{"class":105},[95,76098,76099],{"class":164},"\u002F\u002Ftrue   可以选两个\n",[95,76101,76102,76104,76106,76108,76110,76112,76115,76117,76119,76121,76123,76125,76128,76130],{"class":97,"line":9806},[95,76103,73730],{"class":105},[95,76105,58224],{"class":1945},[95,76107,106],{"class":105},[95,76109,690],{"class":210},[95,76111,1072],{"class":101},[95,76113,76114],{"class":154},"[a-z]",[95,76116,408],{"class":101},[95,76118,690],{"class":210},[95,76120,664],{"class":105},[95,76122,75222],{"class":1945},[95,76124,106],{"class":105},[95,76126,76127],{"class":210},"'p'",[95,76129,75286],{"class":105},[95,76131,76132],{"class":164},"\u002F\u002Ftrue   依然只能选一个\n",[95,76134,76135,76137,76139,76141,76143,76145,76148,76150,76152,76154,76156,76158,76160,76162],{"class":97,"line":9827},[95,76136,73730],{"class":105},[95,76138,58224],{"class":1945},[95,76140,106],{"class":105},[95,76142,690],{"class":210},[95,76144,1072],{"class":101},[95,76146,76147],{"class":154},"[A-Z]",[95,76149,408],{"class":101},[95,76151,690],{"class":210},[95,76153,664],{"class":105},[95,76155,75222],{"class":1945},[95,76157,106],{"class":105},[95,76159,76127],{"class":210},[95,76161,75286],{"class":105},[95,76163,75356],{"class":164},[95,76165,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188,76191,76193],{"class":97,"line":9833},[95,76167,73730],{"class":105},[95,76169,58224],{"class":1945},[95,76171,106],{"class":105},[95,76173,690],{"class":210},[95,76175,1072],{"class":101},[95,76177,76147],{"class":154},[95,76179,408],{"class":101},[95,76181,690],{"class":210},[95,76183,664],{"class":105},[95,76185,75222],{"class":1945},[95,76187,106],{"class":105},[95,76189,76190],{"class":210},"'P'",[95,76192,75286],{"class":105},[95,76194,75233],{"class":164},[95,76196,76197,76199,76201,76203,76205,76207,76210,76212,76214,76216,76218,76220,76223,76225],{"class":97,"line":9847},[95,76198,73730],{"class":105},[95,76200,58224],{"class":1945},[95,76202,106],{"class":105},[95,76204,690],{"class":210},[95,76206,1072],{"class":101},[95,76208,76209],{"class":154},"[0-9]",[95,76211,408],{"class":101},[95,76213,690],{"class":210},[95,76215,664],{"class":105},[95,76217,75222],{"class":1945},[95,76219,106],{"class":105},[95,76221,76222],{"class":210},"'0'",[95,76224,75286],{"class":105},[95,76226,75233],{"class":164},[95,76228,76229,76231,76233,76235,76237,76239,76242,76244,76246,76248,76250,76252,76254,76256],{"class":97,"line":9853},[95,76230,73730],{"class":105},[95,76232,58224],{"class":1945},[95,76234,106],{"class":105},[95,76236,690],{"class":210},[95,76238,1072],{"class":101},[95,76240,76241],{"class":154},"[a-zA-Z0-9]",[95,76243,408],{"class":101},[95,76245,690],{"class":210},[95,76247,664],{"class":105},[95,76249,75222],{"class":1945},[95,76251,106],{"class":105},[95,76253,76127],{"class":210},[95,76255,75230],{"class":105},[95,76257,75233],{"class":164},[95,76259,76260,76262,76264],{"class":97,"line":9880},[95,76261,52394],{"class":105},[95,76263,51790],{"class":51277},[95,76265,51284],{"class":105},[95,76267,76268,76270,76272],{"class":97,"line":9889},[95,76269,51762],{"class":105},[95,76271,51777],{"class":51277},[95,76273,51284],{"class":105},[95,76275,76276],{"class":97,"line":9895},[95,76277,2382],{"emptyLinePlaceholder":21},[95,76279,76280,76282,76284],{"class":97,"line":9903},[95,76281,51762],{"class":105},[95,76283,50612],{"class":51277},[95,76285,51284],{"class":105},[21981,76287,76289],{"id":76288},"_3624-修饰符","3.6.2.4 修饰符",[10,76291,76292],{},[1444,76293],{"alt":14,"src":76294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[10,76296,76297],{},"replace是个方法，使用的时候一定不要忘记括号()",[10,76299,76300],{},[1444,76301],{"alt":14,"src":76302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[86,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",[92,76307,76308,76318,76332,76340,76354,76374,76386,76394,76402,76410,76442,76473,76478,76510,76521,76554,76563,76571,76579],{"__ignoreMap":14},[95,76309,76310,76312,76314,76316],{"class":97,"line":98},[95,76311,51274],{"class":105},[95,76313,51278],{"class":51277},[95,76315,51281],{"class":1945},[95,76317,51284],{"class":105},[95,76319,76320,76322,76324,76326,76328,76330],{"class":97,"line":15},[95,76321,1016],{"class":105},[95,76323,50612],{"class":51277},[95,76325,51293],{"class":1945},[95,76327,151],{"class":105},[95,76329,51298],{"class":210},[95,76331,51284],{"class":105},[95,76333,76334,76336,76338],{"class":97,"line":1161},[95,76335,1016],{"class":105},[95,76337,51311],{"class":51277},[95,76339,51284],{"class":105},[95,76341,76342,76344,76346,76348,76350,76352],{"class":97,"line":1176},[95,76343,52121],{"class":105},[95,76345,51321],{"class":51277},[95,76347,51324],{"class":1945},[95,76349,151],{"class":105},[95,76351,51329],{"class":210},[95,76353,51284],{"class":105},[95,76355,76356,76358,76360,76362,76364,76366,76368,76370,76372],{"class":97,"line":1182},[95,76357,52121],{"class":105},[95,76359,51321],{"class":51277},[95,76361,14903],{"class":1945},[95,76363,151],{"class":105},[95,76365,51368],{"class":210},[95,76367,51348],{"class":1945},[95,76369,151],{"class":105},[95,76371,51375],{"class":210},[95,76373,51284],{"class":105},[95,76375,76376,76378,76380,76382,76384],{"class":97,"line":1196},[95,76377,52121],{"class":105},[95,76379,51384],{"class":51277},[95,76381,51387],{"class":105},[95,76383,51384],{"class":51277},[95,76385,51284],{"class":105},[95,76387,76388,76390,76392],{"class":97,"line":1202},[95,76389,51762],{"class":105},[95,76391,51311],{"class":51277},[95,76393,51284],{"class":105},[95,76395,76396,76398,76400],{"class":97,"line":1293},[95,76397,1016],{"class":105},[95,76399,51777],{"class":51277},[95,76401,51284],{"class":105},[95,76403,76404,76406,76408],{"class":97,"line":1299},[95,76405,52121],{"class":105},[95,76407,51790],{"class":51277},[95,76409,51284],{"class":105},[95,76411,76412,76414,76416,76418,76420,76422,76425,76427,76429,76431,76433,76435,76438,76440],{"class":97,"line":1311},[95,76413,73730],{"class":105},[95,76415,58224],{"class":1945},[95,76417,106],{"class":105},[95,76419,690],{"class":210},[95,76421,1072],{"class":101},[95,76423,76424],{"class":47962},"java",[95,76426,408],{"class":101},[95,76428,690],{"class":210},[95,76430,664],{"class":105},[95,76432,75222],{"class":1945},[95,76434,106],{"class":105},[95,76436,76437],{"class":210},"'java'",[95,76439,75732],{"class":105},[95,76441,75233],{"class":164},[95,76443,76444,76446,76448,76450,76452,76454,76456,76458,76460,76462,76464,76466,76469,76471],{"class":97,"line":1594},[95,76445,73730],{"class":105},[95,76447,58224],{"class":1945},[95,76449,106],{"class":105},[95,76451,690],{"class":210},[95,76453,1072],{"class":101},[95,76455,76424],{"class":47962},[95,76457,408],{"class":101},[95,76459,690],{"class":210},[95,76461,664],{"class":105},[95,76463,75222],{"class":1945},[95,76465,106],{"class":105},[95,76467,76468],{"class":210},"'Java'",[95,76470,75732],{"class":105},[95,76472,75356],{"class":164},[95,76474,76475],{"class":97,"line":1599},[95,76476,76477],{"class":164},"    \u002F\u002F 不区分大小写、\n",[95,76479,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506,76508],{"class":97,"line":1605},[95,76481,73730],{"class":105},[95,76483,58224],{"class":1945},[95,76485,106],{"class":105},[95,76487,690],{"class":210},[95,76489,1072],{"class":101},[95,76491,76424],{"class":47962},[95,76493,408],{"class":101},[95,76495,690],{"class":210},[95,76497,547],{"class":101},[95,76499,664],{"class":105},[95,76501,75222],{"class":1945},[95,76503,106],{"class":105},[95,76505,76468],{"class":210},[95,76507,75732],{"class":105},[95,76509,75233],{"class":164},[95,76511,76512,76514,76516,76518],{"class":97,"line":1610},[95,76513,11204],{"class":101},[95,76515,73896],{"class":154},[95,76517,13547],{"class":101},[95,76519,76520],{"class":210}," 'java是一门编程语言，学完java工资很高'\n",[95,76522,76523,76525,76528,76530,76533,76536,76538,76540,76542,76544,76547,76549,76552],{"class":97,"line":1624},[95,76524,11204],{"class":101},[95,76526,76527],{"class":154}," result",[95,76529,13547],{"class":101},[95,76531,76532],{"class":105}," str.",[95,76534,76535],{"class":1945},"replace",[95,76537,106],{"class":105},[95,76539,690],{"class":210},[95,76541,76424],{"class":47962},[95,76543,690],{"class":210},[95,76545,76546],{"class":101},"ig",[95,76548,12418],{"class":105},[95,76550,76551],{"class":210},"'前端'",[95,76553,112],{"class":105},[95,76555,76556,76558,76560],{"class":97,"line":1629},[95,76557,73730],{"class":105},[95,76559,58224],{"class":1945},[95,76561,76562],{"class":105},"(result)\n",[95,76564,76565,76567,76569],{"class":97,"line":1635},[95,76566,52394],{"class":105},[95,76568,51790],{"class":51277},[95,76570,51284],{"class":105},[95,76572,76573,76575,76577],{"class":97,"line":1656},[95,76574,51762],{"class":105},[95,76576,51777],{"class":51277},[95,76578,51284],{"class":105},[95,76580,76581,76583,76585],{"class":97,"line":1661},[95,76582,51762],{"class":105},[95,76584,50612],{"class":51277},[95,76586,51284],{"class":105},[5109,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":1161,"text":53342},{"id":53374,"depth":1161,"text":53375},{"id":53413,"depth":1161,"text":53414},{"id":53571,"depth":1161,"text":53572},{"id":53619,"depth":1161,"text":53620},{"id":53756,"depth":1161,"text":53757},{"id":54078,"depth":1161,"text":54079},{"id":57066,"depth":1161,"text":57067},{"id":57094,"depth":15,"text":57095,"children":76603},[76604,76605,76606,76607,76608,76609,76610,76611,76612,76613],{"id":57098,"depth":1161,"text":57099},{"id":57121,"depth":1161,"text":57122},{"id":58036,"depth":1161,"text":58037},{"id":58726,"depth":1161,"text":58727},{"id":59008,"depth":1161,"text":59009},{"id":63169,"depth":1161,"text":63170},{"id":63339,"depth":1161,"text":63340},{"id":63467,"depth":1161,"text":63468},{"id":63492,"depth":1161,"text":63493},{"id":64881,"depth":1161,"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":1161,"text":66039},{"id":66692,"depth":1161,"text":66693},{"id":68387,"depth":1161,"text":68388},{"id":68428,"depth":1161,"text":68429},{"id":68470,"depth":1161,"text":68471},{"id":68484,"depth":1161,"text":68485},{"id":68533,"depth":1161,"text":68534},{"id":68545,"depth":1161,"text":68546},{"id":68560,"depth":1161,"text":68561},{"id":68596,"depth":1161,"text":68597},{"id":68677,"depth":1161,"text":68678},{"id":68805,"depth":1161,"text":68806},{"id":68817,"depth":1161,"text":68818},{"id":68836,"depth":1161,"text":68837},{"id":70947,"depth":1161,"text":70948},{"id":70966,"depth":15,"text":70967,"children":76632},[76633,76634,76635,76636,76637],{"id":70987,"depth":1161,"text":70988},{"id":71007,"depth":1161,"text":71008},{"id":71056,"depth":1161,"text":71057},{"id":71181,"depth":1161,"text":71182},{"id":71362,"depth":1161,"text":71363},{"id":71380,"depth":15,"text":71381,"children":76639},[76640,76641,76642,76643,76644,76645],{"id":71395,"depth":1161,"text":71396},{"id":71454,"depth":1161,"text":71455},{"id":71478,"depth":1161,"text":71479},{"id":71798,"depth":1161,"text":71799},{"id":71830,"depth":1161,"text":71831},{"id":71853,"depth":1161,"text":71854},{"id":74921,"depth":15,"text":74922,"children":76647},[76648,76649],{"id":74955,"depth":1161,"text":74956},{"id":74994,"depth":1161,"text":74995},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53309,"description":23360},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76656,"title":76657,"body":76658,"description":23360,"extension":18,"meta":92795,"navigation":21,"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],[33,76661,76657],{"id":76662},"_4js进阶",[10,76664,76665],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[37,76667,76669],{"id":76668},"_41-作用域","4.1 作用域",[66,76671,76673],{"id":76672},"_411-局部作用域","4.1.1 局部作用域",[10,76675,76676],{},[1444,76677],{"alt":14,"src":76678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[10,76680,76681],{},[1444,76682],{"alt":14,"src":76683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1113,76685,76686,76689,76692],{},[52,76687,76688],{},"函数作用域在函数内部",[52,76690,76691],{},"块级作用域在{}",[52,76693,76694],{},"对象的那个{}不是作用域，不是块作用域",[66,76696,76698],{"id":76697},"_412-全局作用域","4.1.2 全局作用域",[10,76700,76701],{},[1444,76702],{"alt":14,"src":76703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[10,76705,76706],{},"window.a=10不要这样写",[66,76708,76710],{"id":76709},"_413-作用域链","4.1.3 作用域链",[10,76712,76713],{},"变量查找机制",[10,76715,76716],{},[1444,76717],{"alt":14,"src":76718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[37,76720,76722],{"id":76721},"_42-垃圾回收机制","4.2 垃圾回收机制",[66,76724,76726],{"id":76725},"_421-大体介绍","4.2.1 大体介绍",[10,76728,76729],{},"垃圾回收机制(Garbage Collection) 简称 GC",[10,76731,76732],{},[1444,76733],{"alt":14,"src":76734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[10,76736,76737],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[66,76739,76741],{"id":76740},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[10,76743,76744],{},"堆栈空间分配区别：",[49,76746,76747,76750],{},[52,76748,76749],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[52,76751,76752],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[10,76754,76755],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21981,76757,76759],{"id":76758},"_4221-引用计数","4.2.2.1 引用计数",[10,76761,76762],{},[1444,76763],{"alt":14,"src":76764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[10,76766,76767],{},[1444,76768],{"alt":14,"src":76769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[10,76771,76772],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21981,76774,76776],{"id":76775},"_4222-标记清除法","4.2.2.2 标记清除法",[10,76778,76779],{},[1444,76780],{"alt":14,"src":76781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[10,76783,76784],{},[1444,76785],{"alt":14,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[10,76788,76789],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[37,76791,76793],{"id":76792},"_43-闭包","4.3 闭包",[10,76795,76796],{},[1444,76797],{"alt":14,"src":76798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[10,76800,76801],{},"闭包：内层函数+外层函数的变量",[10,76803,76804],{},[1444,76805],{"alt":14,"src":76806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[10,76808,76809],{},"closure就是闭包",[10,76811,76812],{},[1444,76813],{"alt":14,"src":76814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[10,76816,76817],{},"内层函数必须包含外层函数的变量才是闭包",[10,76819,76820],{},[1444,76821],{"alt":14,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[10,76824,76825],{},[1444,76826],{"alt":14,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[10,76829,76830],{},"闭包可能会引起内存泄漏",[10,76832,76833],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[37,76835,76837],{"id":76836},"_44-变量提升","4.4 变量提升",[10,76839,76840],{},[1444,76841],{"alt":14,"src":76842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[10,76844,76845],{},[1444,76846],{"alt":14,"src":76847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[10,76849,76850],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[37,76852,76854],{"id":76853},"_45-函数进阶","4.5 函数进阶",[66,76856,76858],{"id":76857},"_451-函数提升","4.5.1 函数提升",[10,76860,76861],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[10,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",[66,76869,76871],{"id":76870},"_452-函数参数","4.5.2 函数参数",[21981,76873,76875],{"id":76874},"_4521-动态参数","4.5.2.1 动态参数",[10,76877,76878],{},[1444,76879],{"alt":14,"src":76880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[10,76882,76883],{},[1444,76884],{"alt":14,"src":76885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[10,76887,76888],{},"箭头函数里边没有arguments",[21981,76890,76892],{"id":76891},"_4522-剩余参数","4.5.2.2 剩余参数",[10,76894,76895],{},[1444,76896],{"alt":14,"src":76897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[10,76899,76900],{},[1444,76901],{"alt":14,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[10,76904,76905],{},"剩余参数使用的时候不需要写...",[10,76907,76908],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[10,76910,76911],{},"  function getSum(a,b,...arr) {",[10,76913,76914],{},"  console.log(11)",[10,76916,76917],{},"  }",[10,76919,76920],{},"  getSum(1,2,3,4)",[10,76922,76923],{},"  将1传给a，2传给b，剩下的传给剩余参数",[10,76925,76926],{},"  getSum(1,2)",[10,76928,76929],{},"  将1传给a，2传给b，剩余参数为一个空数组",[10,76931,76932],{},[1444,76933],{"alt":14,"src":76934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21981,76936,76938],{"id":76937},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[10,76940,76941],{},[1444,76942],{"alt":14,"src":76943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[10,76945,76946],{},[1444,76947],{"alt":14,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[10,76950,76951],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[10,76953,76954],{},"展开运算符可以用于数组之间的合并：",[10,76956,76957],{},"const arr1 = [1, 2, 3]",[10,76959,76960],{},"const arr2 = [3, 4, 5]",[10,76962,76963],{},"const arr = [...arr1, ...arr2]",[10,76965,76966],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[10,76968,76969],{},"剩余参数：函数参数使用，得到真数组",[10,76971,76972],{},"展开运算符：数组中使用，数组展开",[66,76974,76976],{"id":76975},"_453-箭头函数","4.5.3 箭头函数",[21981,76978,76980],{"id":76979},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[10,76982,76983],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[10,76985,76986],{},"它不是万能的！！！",[10,76988,76989],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[10,76991,76992],{},[1444,76993],{"alt":14,"src":76994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[10,76996,135],{},[10,76998,76999],{},"① 只有一个形参的时候，可以省略小括号：",[10,77001,77002],{},"const fn=x=>{console.log(x)}",[10,77004,77005],{},"② 只有一行代码时可以省略大括号：",[10,77007,77008],{},"const fn=x=>console.log(11)",[10,77010,77011],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[10,77013,77014],{},"const fn=x=>x+x",[10,77016,77017],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[10,77019,77020],{},"⑤ 阻止表单默认提交：",[10,77022,77023],{},"const form = document.querySelector('form')",[10,77025,77026],{},"form.addEventListener('click', ev => ev.preventDefault())",[10,77028,77029],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[10,77031,77032],{},"const fn=uname=>({uname:uname})",[10,77034,77035],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[10,77037,77038],{},[1444,77039],{"alt":14,"src":77040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[10,77042,77043],{},[1444,77044],{"alt":14,"src":77045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[10,77047,77048],{},[1444,77049],{"alt":14,"src":77050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[10,77052,77053],{},"一定不要忘记用()，有()就理解为自带return",[21981,77055,77057],{"id":77056},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[10,77059,77060],{},"箭头函数是没有动态参数的arguments",[10,77062,77063],{},[1444,77064],{"alt":14,"src":77065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21981,77067,77069],{"id":77068},"_4533-箭头函数this","4.5.3.3 箭头函数this",[10,77071,11315],{},[49,77073,77074,77077,77080],{},[52,77075,77076],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[52,77078,77079],{},"事件回调函数使用箭头函数时，this 为全局的 window",[52,77081,77082],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[10,77084,77085],{},[1444,77086],{"alt":14,"src":77087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[86,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",[92,77092,77093,77101,77106,77111,77116,77121,77126,77130,77135,77139,77143,77148,77153,77158,77162,77166,77171,77176,77181],{"__ignoreMap":14},[95,77094,77095,77097,77099],{"class":97,"line":98},[95,77096,52121],{"class":105},[95,77098,51790],{"class":51277},[95,77100,51284],{"class":105},[95,77102,77103],{"class":97,"line":15},[95,77104,77105],{"class":105},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[95,77107,77108],{"class":97,"line":1161},[95,77109,77110],{"class":105},"    console.log(this) \u002F\u002F指向window\n",[95,77112,77113],{"class":97,"line":1176},[95,77114,77115],{"class":105},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[95,77117,77118],{"class":97,"line":1182},[95,77119,77120],{"class":105},"    function fn() {\n",[95,77122,77123],{"class":97,"line":1196},[95,77124,77125],{"class":105},"      console.log(this)  \u002F\u002F指向window\n",[95,77127,77128],{"class":97,"line":1202},[95,77129,2169],{"class":105},[95,77131,77132],{"class":97,"line":1293},[95,77133,77134],{"class":105},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[95,77136,77137],{"class":97,"line":1299},[95,77138,2382],{"emptyLinePlaceholder":21},[95,77140,77141],{"class":97,"line":1311},[95,77142,71500],{"class":105},[95,77144,77145],{"class":97,"line":1594},[95,77146,77147],{"class":105},"      name: 'andy',\n",[95,77149,77150],{"class":97,"line":1599},[95,77151,77152],{"class":105},"      sayHai: function () {\n",[95,77154,77155],{"class":97,"line":1605},[95,77156,77157],{"class":105},"        console.log(this)\n",[95,77159,77160],{"class":97,"line":1610},[95,77161,52375],{"class":105},[95,77163,77164],{"class":97,"line":1624},[95,77165,2169],{"class":105},[95,77167,77168],{"class":97,"line":1629},[95,77169,77170],{"class":105},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[95,77172,77173],{"class":97,"line":1635},[95,77174,77175],{"class":105},"    \u002F\u002F 2.箭头函数的this\n",[95,77177,77178],{"class":97,"line":1656},[95,77179,77180],{"class":105},"    const fn = () => console.log(this)\n",[95,77182,77183,77185,77187],{"class":97,"line":1661},[95,77184,52394],{"class":105},[95,77186,51790],{"class":51277},[95,77188,51284],{"class":105},[10,77190,77191],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[10,77193,77194],{},"const fn = () => console.log(this)",[10,77196,77197],{},"fn() \u002F\u002F指向window",[10,77199,77200],{},"\u002F\u002F 3.对象方法箭头函数 this",[10,77202,77203],{},"①",[10,77205,77206],{},"const obj = {",[10,77208,77209],{},"uname: 'pink老师',",[10,77211,77212],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[10,77214,1052],{},[10,77216,77217],{},"调用对象里边的函数",[10,77219,77220],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[10,77222,77223],{},"obj.sayHai()",[10,77225,77226],{},"②",[10,77228,77229],{},"const obj1 = {",[10,77231,77209],{},[10,77233,77234],{},"sayHai: function () {",[10,77236,77237],{},"let i = 10",[10,77239,77240],{},"const count = () => {",[10,77242,77243],{},"console.log(this)",[10,77245,77246],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[10,77248,77249],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[10,77251,1052],{},[10,77253,77254],{},"count()",[10,77256,1052],{},[10,77258,1052],{},[10,77260,77261],{},"obj1.sayHai()",[37,77263,77265],{"id":77264},"_46-解构赋值","4.6 解构赋值",[66,77267,77269],{"id":77268},"_461-数组解构","4.6.1 数组解构",[10,77271,77272],{},"以前要是使用数组中的值的话：",[10,77274,77275],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[10,77277,77278],{},"const arr=[100,60,80]",[10,77280,77281],{},"const max=arr[0]",[10,77283,77284],{},"const min=arr[1]",[10,77286,77287],{},"const avg=arr[2]",[10,77289,77290],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[10,77292,77293],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[10,77295,77296],{},"这个写法就类似于上边的那种用很多const的方法",[10,77298,77299],{},[1444,77300],{"alt":14,"src":77301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[86,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",[92,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},[95,77308,77309],{"class":97,"line":98},[95,77310,77311],{"class":105},"①变量之间交换值:\n",[95,77313,77314],{"class":97,"line":15},[95,77315,77316],{"class":105},"let a=1\n",[95,77318,77319],{"class":97,"line":1161},[95,77320,77321],{"class":105},"let b=2;\n",[95,77323,77324],{"class":97,"line":1176},[95,77325,77326],{"class":105},"必须加这行代码，不然就会报错\n",[95,77328,77329],{"class":97,"line":1182},[95,77330,77331],{"class":105},"[b,a]=[a,b]\n",[95,77333,77334],{"class":97,"line":1196},[95,77335,2382],{"emptyLinePlaceholder":21},[95,77337,77338],{"class":97,"line":1202},[95,77339,2382],{"emptyLinePlaceholder":21},[95,77341,77342],{"class":97,"line":1293},[95,77343,77344],{"class":105},"可以写成下面的方式：\n",[95,77346,77347],{"class":97,"line":1299},[95,77348,77316],{"class":105},[95,77350,77351],{"class":97,"line":1311},[95,77352,77353],{"class":105},"let b=2\n",[95,77355,77356],{"class":97,"line":1594},[95,77357,77358],{"class":105},";[b,a]=[a,b]\n",[95,77360,77361],{"class":97,"line":1599},[95,77362,2382],{"emptyLinePlaceholder":21},[95,77364,77365],{"class":97,"line":1605},[95,77366,77367],{"class":105},"②排序\n",[95,77369,77370],{"class":97,"line":1610},[95,77371,77372],{"class":105},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[95,77374,77375,77378,77381],{"class":97,"line":1624},[95,77376,77377],{"class":105},"for (let i = 0; i ",[95,77379,1016],{"class":77380},"s7hpK",[95,77382,77383],{"class":105}," arr1.length; i++) {\n",[95,77385,77386,77389,77391],{"class":97,"line":1629},[95,77387,77388],{"class":105},"   for (let j = 0; j ",[95,77390,1016],{"class":77380},[95,77392,77393],{"class":105}," arr1.length - 1; j++) {\n",[95,77395,77396],{"class":97,"line":1635},[95,77397,77398],{"class":105},"      if (arr1[j] > arr1[j + 1]) {\n",[95,77400,77401],{"class":97,"line":1656},[95,77402,77403],{"class":105},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[95,77405,77406],{"class":97,"line":1661},[95,77407,77408],{"class":105},"       }\n",[95,77410,77411],{"class":97,"line":1675},[95,77412,4291],{"class":105},[95,77414,77415],{"class":97,"line":1680},[95,77416,1547],{"class":105},[95,77418,77419],{"class":97,"line":1709},[95,77420,77421],{"class":105},"console.log(arr1)\n",[10,77423,77424],{},"数组解构的细节：",[10,77426,77427],{},"①变量多，单元值少",[10,77429,77430],{},[1444,77431],{"alt":14,"src":77432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[10,77434,77435],{},"防止出现undefined的方法：",[10,77437,77438],{},"const [a=0,b=0] =[1]",[10,77440,77441],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[10,77443,77444],{},"②变量少，单元值多",[10,77446,77447],{},[1444,77448],{"alt":14,"src":77449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[10,77451,77452],{},"此时可以使用剩余参数来接收多余的值",[10,77454,77455],{},"const [a,b,...c]=[1,2,3,4]",[10,77457,77458],{},"console.log(c) 输出[3,4]",[10,77460,77461],{},"③可以按需导入，忽略某些返回值",[10,77463,77464],{},[1444,77465],{"alt":14,"src":77466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[10,77468,77469],{},"④支持多维数组的结构",[86,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",[92,77476,77477,77505,77521,77536,77551],{"__ignoreMap":14},[95,77478,77479,77481,77483,77485,77487,77489,77491,77493,77496,77498,77500,77502],{"class":97,"line":98},[95,77480,6775],{"class":101},[95,77482,51810],{"class":105},[95,77484,151],{"class":101},[95,77486,52203],{"class":105},[95,77488,323],{"class":154},[95,77490,12418],{"class":105},[95,77492,183],{"class":154},[95,77494,77495],{"class":105},", [",[95,77497,177],{"class":154},[95,77499,12418],{"class":105},[95,77501,399],{"class":154},[95,77503,77504],{"class":105},"]]\n",[95,77506,77507,77510,77512,77514,77516,77518],{"class":97,"line":15},[95,77508,77509],{"class":105},"console.",[95,77511,58224],{"class":1945},[95,77513,3833],{"class":105},[95,77515,297],{"class":154},[95,77517,4198],{"class":105},[95,77519,77520],{"class":164},"  \u002F\u002F1\n",[95,77522,77523,77525,77527,77529,77531,77533],{"class":97,"line":1161},[95,77524,77509],{"class":105},[95,77526,58224],{"class":1945},[95,77528,3833],{"class":105},[95,77530,323],{"class":154},[95,77532,4198],{"class":105},[95,77534,77535],{"class":164},"  \u002F\u002F2\n",[95,77537,77538,77540,77542,77544,77546,77548],{"class":97,"line":1176},[95,77539,77509],{"class":105},[95,77541,58224],{"class":1945},[95,77543,3833],{"class":105},[95,77545,183],{"class":154},[95,77547,4198],{"class":105},[95,77549,77550],{"class":164},"  \u002F\u002F[3,4]\n",[95,77552,77553,77555,77557,77559,77561,77563,77565,77567],{"class":97,"line":1182},[95,77554,77509],{"class":105},[95,77556,58224],{"class":1945},[95,77558,3833],{"class":105},[95,77560,183],{"class":154},[95,77562,4883],{"class":105},[95,77564,297],{"class":154},[95,77566,4198],{"class":105},[95,77568,77569],{"class":164},"  \u002F\u002F3\n",[86,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",[92,77574,77575,77602,77613,77624],{"__ignoreMap":14},[95,77576,77577,77579,77582,77584,77586,77588,77590,77592,77594,77596,77598,77600],{"class":97,"line":98},[95,77578,6775],{"class":101},[95,77580,77581],{"class":105}," [a, b, c] ",[95,77583,151],{"class":101},[95,77585,52203],{"class":105},[95,77587,323],{"class":154},[95,77589,12418],{"class":105},[95,77591,183],{"class":154},[95,77593,77495],{"class":105},[95,77595,177],{"class":154},[95,77597,12418],{"class":105},[95,77599,399],{"class":154},[95,77601,77504],{"class":105},[95,77603,77604,77606,77608,77611],{"class":97,"line":15},[95,77605,77509],{"class":105},[95,77607,58224],{"class":1945},[95,77609,77610],{"class":105},"(a)",[95,77612,77520],{"class":164},[95,77614,77615,77617,77619,77622],{"class":97,"line":1161},[95,77616,77509],{"class":105},[95,77618,58224],{"class":1945},[95,77620,77621],{"class":105},"(b)",[95,77623,77535],{"class":164},[95,77625,77626,77628,77630,77633],{"class":97,"line":1176},[95,77627,77509],{"class":105},[95,77629,58224],{"class":1945},[95,77631,77632],{"class":105},"(c)",[95,77634,77550],{"class":164},[86,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",[92,77639,77640,77667,77677,77687,77697],{"__ignoreMap":14},[95,77641,77642,77644,77647,77649,77651,77653,77655,77657,77659,77661,77663,77665],{"class":97,"line":98},[95,77643,6775],{"class":101},[95,77645,77646],{"class":105}," [a, b, [c, d]] ",[95,77648,151],{"class":101},[95,77650,52203],{"class":105},[95,77652,323],{"class":154},[95,77654,12418],{"class":105},[95,77656,183],{"class":154},[95,77658,77495],{"class":105},[95,77660,177],{"class":154},[95,77662,12418],{"class":105},[95,77664,399],{"class":154},[95,77666,77504],{"class":105},[95,77668,77669,77671,77673,77675],{"class":97,"line":15},[95,77670,77509],{"class":105},[95,77672,58224],{"class":1945},[95,77674,77610],{"class":105},[95,77676,77520],{"class":164},[95,77678,77679,77681,77683,77685],{"class":97,"line":1161},[95,77680,77509],{"class":105},[95,77682,58224],{"class":1945},[95,77684,77621],{"class":105},[95,77686,77535],{"class":164},[95,77688,77689,77691,77693,77695],{"class":97,"line":1176},[95,77690,77509],{"class":105},[95,77692,58224],{"class":1945},[95,77694,77632],{"class":105},[95,77696,77569],{"class":164},[95,77698,77699,77701,77703,77706],{"class":97,"line":1182},[95,77700,77509],{"class":105},[95,77702,58224],{"class":1945},[95,77704,77705],{"class":105},"(d)",[95,77707,77708],{"class":164},"  \u002F\u002F4\n",[66,77710,77712],{"id":77711},"_462-对象解构","4.6.2 对象解构",[10,77714,77715],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[10,77717,77718],{},"用的非常非常多！！！！！！",[21981,77720,77722],{"id":77721},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[10,77724,77725],{},"基本语法：",[49,77727,77728,77731,77734,77737],{},[52,77729,77730],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[52,77732,77733],{},"对象属性的值将被赋值给与属性名相同的变量",[52,77735,77736],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[52,77738,77739],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[86,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",[92,77744,77745,77750,77755,77760,77764],{"__ignoreMap":14},[95,77746,77747],{"class":97,"line":98},[95,77748,77749],{"class":105},"const obj = {\n",[95,77751,77752],{"class":97,"line":15},[95,77753,77754],{"class":105},"   uname: 'pink老师',\n",[95,77756,77757],{"class":97,"line":1161},[95,77758,77759],{"class":105},"   age: 18,\n",[95,77761,77762],{"class":97,"line":1176},[95,77763,1547],{"class":105},[95,77765,77766],{"class":97,"line":1182},[95,77767,77768],{"class":105},"const { uname, age } = obj\n",[10,77770,77771],{},"上方代码这样写等价于：",[10,77773,77774],{},"const uname等价于obj.uname",[10,77776,77777],{},"变量名可以重新改名：",[10,77779,77780],{},"const uname='red老师'",[10,77782,77783],{},"const user={",[10,77785,77786],{},"  uname:'pink老师',",[10,77788,77789],{},"  age:18",[10,77791,1052],{},[10,77793,77794],{},"const {uname,age}=user",[10,77796,77797],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[10,77799,77800],{},"const {旧变量名：新变量名}=对象",[10,77802,77803],{},"const {uname:username,age}=user",[21981,77805,77807],{"id":77806},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[10,77809,77810],{},[1444,77811],{"alt":14,"src":77812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21981,77814,77816],{"id":77815},"_4623-多级对象解构","4.6.2.3 多级对象解构",[10,77818,77819],{},[1444,77820],{"alt":14,"src":77821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[86,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",[92,77826,77827,77835,77840,77845,77850,77855,77860,77865,77870,77875,77879,77884,77889],{"__ignoreMap":14},[95,77828,77829,77831,77833],{"class":97,"line":98},[95,77830,52121],{"class":105},[95,77832,51790],{"class":51277},[95,77834,51284],{"class":105},[95,77836,77837],{"class":97,"line":15},[95,77838,77839],{"class":105},"    const pig = {\n",[95,77841,77842],{"class":97,"line":1161},[95,77843,77844],{"class":105},"      name: '佩奇',\n",[95,77846,77847],{"class":97,"line":1176},[95,77848,77849],{"class":105},"      family: {\n",[95,77851,77852],{"class":97,"line":1182},[95,77853,77854],{"class":105},"        mother: '猪妈妈',\n",[95,77856,77857],{"class":97,"line":1196},[95,77858,77859],{"class":105},"        father: '猪爸爸',\n",[95,77861,77862],{"class":97,"line":1202},[95,77863,77864],{"class":105},"        sister: '乔治'\n",[95,77866,77867],{"class":97,"line":1293},[95,77868,77869],{"class":105},"      },\n",[95,77871,77872],{"class":97,"line":1299},[95,77873,77874],{"class":105},"      age: 6\n",[95,77876,77877],{"class":97,"line":1311},[95,77878,2169],{"class":105},[95,77880,77881],{"class":97,"line":1594},[95,77882,77883],{"class":105},"    \u002F\u002F 多级对象解构\n",[95,77885,77886],{"class":97,"line":1599},[95,77887,77888],{"class":105},"    const { name, family: { mother, father, sister }, age } = pig\n",[95,77890,77891,77893,77895],{"class":97,"line":1605},[95,77892,52394],{"class":105},[95,77894,51790],{"class":51277},[95,77896,51284],{"class":105},[10,77898,77899],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[86,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",[92,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},[95,77907,77908],{"class":97,"line":98},[95,77909,77910],{"class":164},"    \u002F\u002F 这是后台传递过来的数据\n",[95,77912,77913,77915,77918,77920],{"class":97,"line":15},[95,77914,11204],{"class":101},[95,77916,77917],{"class":105}," msg ",[95,77919,151],{"class":101},[95,77921,15555],{"class":105},[95,77923,77924,77927,77929,77932],{"class":97,"line":1161},[95,77925,77926],{"class":210},"      \"code\"",[95,77928,965],{"class":101},[95,77930,77931],{"class":154}," 200",[95,77933,31451],{"class":105},[95,77935,77936,77939,77941,77944],{"class":97,"line":1176},[95,77937,77938],{"class":210},"      \"msg\"",[95,77940,965],{"class":101},[95,77942,77943],{"class":210}," \"获取新闻列表成功\"",[95,77945,31451],{"class":105},[95,77947,77948,77951,77953],{"class":97,"line":1182},[95,77949,77950],{"class":210},"      \"data\"",[95,77952,965],{"class":101},[95,77954,55424],{"class":105},[95,77956,77957],{"class":97,"line":1196},[95,77958,2492],{"class":105},[95,77960,77961,77964,77966,77968],{"class":97,"line":1202},[95,77962,77963],{"class":210},"          \"id\"",[95,77965,965],{"class":101},[95,77967,25103],{"class":154},[95,77969,31451],{"class":105},[95,77971,77972,77975,77977,77980],{"class":97,"line":1293},[95,77973,77974],{"class":210},"          \"title\"",[95,77976,965],{"class":101},[95,77978,77979],{"class":210}," \"5G商用自己，三大运用商收入下降\"",[95,77981,31451],{"class":105},[95,77983,77984,77987,77989],{"class":97,"line":1299},[95,77985,77986],{"class":210},"          \"count\"",[95,77988,965],{"class":101},[95,77990,77991],{"class":154}," 58\n",[95,77993,77994],{"class":97,"line":1311},[95,77995,77996],{"class":105},"        },\n",[95,77998,77999],{"class":97,"line":1594},[95,78000,2492],{"class":105},[95,78002,78003,78005,78007,78009],{"class":97,"line":1599},[95,78004,77963],{"class":210},[95,78006,965],{"class":101},[95,78008,14738],{"class":154},[95,78010,31451],{"class":105},[95,78012,78013,78015,78017,78020],{"class":97,"line":1605},[95,78014,77974],{"class":210},[95,78016,965],{"class":101},[95,78018,78019],{"class":210}," \"国际媒体头条速览\"",[95,78021,31451],{"class":105},[95,78023,78024,78026,78028],{"class":97,"line":1610},[95,78025,77986],{"class":210},[95,78027,965],{"class":101},[95,78029,78030],{"class":154}," 56\n",[95,78032,78033],{"class":97,"line":1624},[95,78034,77996],{"class":105},[95,78036,78037],{"class":97,"line":1629},[95,78038,2492],{"class":105},[95,78040,78041,78043,78045,78048],{"class":97,"line":1635},[95,78042,77963],{"class":210},[95,78044,965],{"class":101},[95,78046,78047],{"class":154}," 3",[95,78049,31451],{"class":105},[95,78051,78052,78054,78056,78059],{"class":97,"line":1656},[95,78053,77974],{"class":210},[95,78055,965],{"class":101},[95,78057,78058],{"class":210}," \"乌克兰和俄罗斯持续冲突\"",[95,78060,31451],{"class":105},[95,78062,78063,78065,78067],{"class":97,"line":1661},[95,78064,77986],{"class":210},[95,78066,965],{"class":101},[95,78068,78069],{"class":154}," 1669\n",[95,78071,78072],{"class":97,"line":1675},[95,78073,77996],{"class":105},[95,78075,78076],{"class":97,"line":1680},[95,78077,78078],{"class":105},"      ]\n",[95,78080,78081],{"class":97,"line":1709},[95,78082,2169],{"class":105},[10,78084,78085],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[10,78087,78088],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[10,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对象的输出，我们也可以按照下方的形式来写：",[10,78093,78094],{},"function({data}) {",[10,78096,78097],{},"console.log(data)",[10,78099,1052],{},[10,78101,78102],{},"render(msg)",[10,78104,78105],{},"实参传递给形参的时候解构了",[10,78107,78108],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[10,78110,78111],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[10,78113,78114],{},"function render({data:mydata}) {",[10,78116,78117],{},"  console.log(data)",[10,78119,1052],{},[66,78121,78123],{"id":78122},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[10,78125,78126],{},"有两种情况：一个是数组结构，一个是立即执行函数",[49,78128,78129],{},[52,78130,78131],{},"如果对一个数组进行遍历，有两种方式：",[10,78133,78134],{},"①法1",[10,78136,78137],{},"const arr=[1,2,3]",[10,78139,78140],{},"arr.map(function(item,index) {",[10,78142,78143],{},"  console.log(item)",[10,78145,52441],{},[10,78147,78148],{},[1444,78149],{"alt":14,"src":78150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[10,78152,78153],{},"②法2",[10,78155,78156],{},"const str='pink'",[10,78158,78159],{},"[1,2,3].map(function(item,index) {",[10,78161,78162],{},"console.log(item)",[10,78164,52441],{},[10,78166,78167],{},[1444,78168],{"alt":14,"src":78169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[10,78171,78172],{},"此时会报错",[10,78174,78175],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[10,78177,78162],{},[10,78179,52441],{},[10,78181,78182],{},"内部会当成这样处理，所以我们用分号进行隔开",[37,78184,78186],{"id":78185},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[10,78188,78189],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[10,78191,78192],{},"可以理解为加强版的for循环",[10,78194,78195],{},[1444,78196],{"alt":14,"src":78197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[10,78199,78200],{},"里边不写return，不返回数组，只遍历不返回",[10,78202,78203],{},"map是返回数组",[10,78205,78206],{},"forEach主要用于遍历数组对象",[86,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",[92,78211,78212,78220,78225,78230,78235,78240,78244,78249],{"__ignoreMap":14},[95,78213,78214,78216,78218],{"class":97,"line":98},[95,78215,52121],{"class":105},[95,78217,51790],{"class":51277},[95,78219,51284],{"class":105},[95,78221,78222],{"class":97,"line":15},[95,78223,78224],{"class":105},"    const arr = ['red', 'green', 'pink']\n",[95,78226,78227],{"class":97,"line":1161},[95,78228,78229],{"class":105},"    const result = arr.forEach(function (item, index) {\n",[95,78231,78232],{"class":97,"line":1176},[95,78233,78234],{"class":105},"      console.log(item)\n",[95,78236,78237],{"class":97,"line":1182},[95,78238,78239],{"class":105},"      console.log(index)\n",[95,78241,78242],{"class":97,"line":1196},[95,78243,33446],{"class":105},[95,78245,78246],{"class":97,"line":1202},[95,78247,78248],{"class":105},"    console.log(result)\n",[95,78250,78251,78253,78255],{"class":97,"line":1293},[95,78252,52394],{"class":105},[95,78254,51790],{"class":51277},[95,78256,51284],{"class":105},[10,78258,78259],{},[1444,78260],{"alt":14,"src":78261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[37,78263,78265],{"id":78264},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[10,78267,78268],{},[1444,78269],{"alt":14,"src":78270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[10,78272,78273],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[86,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",[92,78278,78279,78287,78295,78300,78305,78309,78313,78318,78322,78327,78335],{"__ignoreMap":14},[95,78280,78281,78283,78285],{"class":97,"line":98},[95,78282,1016],{"class":105},[95,78284,51777],{"class":51277},[95,78286,51284],{"class":105},[95,78288,78289,78291,78293],{"class":97,"line":15},[95,78290,52121],{"class":105},[95,78292,51790],{"class":51277},[95,78294,51284],{"class":105},[95,78296,78297],{"class":97,"line":1161},[95,78298,78299],{"class":105},"    const arr = [10, 20, 30]\n",[95,78301,78302],{"class":97,"line":1176},[95,78303,78304],{"class":105},"    const newArr = arr.filter(function (item, index) {\n",[95,78306,78307],{"class":97,"line":1182},[95,78308,78234],{"class":105},[95,78310,78311],{"class":97,"line":1196},[95,78312,78239],{"class":105},[95,78314,78315],{"class":97,"line":1202},[95,78316,78317],{"class":105},"      return item >= 20\n",[95,78319,78320],{"class":97,"line":1293},[95,78321,33446],{"class":105},[95,78323,78324],{"class":97,"line":1299},[95,78325,78326],{"class":105},"    console.log(newArr)\n",[95,78328,78329,78331,78333],{"class":97,"line":1311},[95,78330,52394],{"class":105},[95,78332,51790],{"class":51277},[95,78334,51284],{"class":105},[95,78336,78337,78339,78341],{"class":97,"line":1594},[95,78338,51762],{"class":105},[95,78340,51777],{"class":51277},[95,78342,51284],{"class":105},[10,78344,78345],{},"这个也可以写成箭头函数：",[86,78347,78349],{"className":50610,"code":78348,"language":50612,"meta":14,"style":14},"const newArr = arr.filter(item => item >= 20)\n",[92,78350,78351],{"__ignoreMap":14},[95,78352,78353],{"class":97,"line":98},[95,78354,78348],{"class":105},[37,78356,78358],{"id":78357},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[10,78360,78361],{},[1444,78362],{"alt":14,"src":78363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[10,78365,78366],{},"步骤：",[10,78368,78369],{},"①：渲染页面模块",[1113,78371,78372,78375],{},[52,78373,78374],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[52,78376,78377],{},"用forEach+字符串的形式",[10,78379,78380],{},"②：点击不同需求，显示不同页面内容",[1113,78382,78383,78386,78389,78392,78395],{},[52,78384,78385],{},"点击采取事件委托方式 .filter",[52,78387,78388],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[52,78390,78391],{},"筛选条件是根据点击的 data-index 来判断",[52,78393,78394],{},"可以使用对象解构，把事件对象解构",[52,78396,78397],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[86,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",[92,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},[95,78404,78405,78407,78409,78411],{"class":97,"line":98},[95,78406,51274],{"class":105},[95,78408,51278],{"class":51277},[95,78410,51281],{"class":1945},[95,78412,51284],{"class":105},[95,78414,78415,78417,78419,78421,78423,78425],{"class":97,"line":15},[95,78416,1016],{"class":105},[95,78418,50612],{"class":51277},[95,78420,51293],{"class":1945},[95,78422,151],{"class":105},[95,78424,51298],{"class":210},[95,78426,51284],{"class":105},[95,78428,78429],{"class":97,"line":1161},[95,78430,2382],{"emptyLinePlaceholder":21},[95,78432,78433,78435,78437],{"class":97,"line":1176},[95,78434,1016],{"class":105},[95,78436,51311],{"class":51277},[95,78438,51284],{"class":105},[95,78440,78441,78443,78445,78447,78449,78451],{"class":97,"line":1182},[95,78442,52121],{"class":105},[95,78444,51321],{"class":51277},[95,78446,51324],{"class":1945},[95,78448,151],{"class":105},[95,78450,51329],{"class":210},[95,78452,51284],{"class":105},[95,78454,78455,78457,78459,78461,78463,78465,78467,78469,78471],{"class":97,"line":1196},[95,78456,52121],{"class":105},[95,78458,51321],{"class":51277},[95,78460,14903],{"class":1945},[95,78462,151],{"class":105},[95,78464,51368],{"class":210},[95,78466,51348],{"class":1945},[95,78468,151],{"class":105},[95,78470,51375],{"class":210},[95,78472,51284],{"class":105},[95,78474,78475,78477,78479,78481,78483],{"class":97,"line":1202},[95,78476,52121],{"class":105},[95,78478,51384],{"class":51277},[95,78480,51387],{"class":105},[95,78482,51384],{"class":51277},[95,78484,51284],{"class":105},[95,78486,78487,78489,78491],{"class":97,"line":1293},[95,78488,52121],{"class":105},[95,78490,5109],{"class":51277},[95,78492,51284],{"class":105},[95,78494,78495,78497],{"class":97,"line":1299},[95,78496,6386],{"class":51277},[95,78498,15555],{"class":105},[95,78500,78501,78503,78505,78507],{"class":97,"line":1311},[95,78502,54672],{"class":154},[95,78504,51414],{"class":105},[95,78506,297],{"class":154},[95,78508,1272],{"class":105},[95,78510,78511,78513,78515,78517],{"class":97,"line":1594},[95,78512,54683],{"class":154},[95,78514,51414],{"class":105},[95,78516,297],{"class":154},[95,78518,1272],{"class":105},[95,78520,78521,78523,78525,78527],{"class":97,"line":1599},[95,78522,72573],{"class":154},[95,78524,51414],{"class":105},[95,78526,60482],{"class":154},[95,78528,1272],{"class":105},[95,78530,78531],{"class":97,"line":1605},[95,78532,2169],{"class":105},[95,78534,78535],{"class":97,"line":1610},[95,78536,2382],{"emptyLinePlaceholder":21},[95,78538,78539,78541],{"class":97,"line":1624},[95,78540,62100],{"class":1945},[95,78542,15555],{"class":105},[95,78544,78545,78547,78549,78552,78554],{"class":97,"line":1629},[95,78546,54748],{"class":154},[95,78548,51414],{"class":105},[95,78550,78551],{"class":154},"990",[95,78553,51469],{"class":101},[95,78555,1272],{"class":105},[95,78557,78558,78560,78562,78564,78566],{"class":97,"line":1635},[95,78559,54683],{"class":154},[95,78561,51414],{"class":105},[95,78563,297],{"class":154},[95,78565,51533],{"class":154},[95,78567,1272],{"class":105},[95,78569,78570,78572,78574,78576],{"class":97,"line":1656},[95,78571,54986],{"class":154},[95,78573,51414],{"class":105},[95,78575,51454],{"class":154},[95,78577,1272],{"class":105},[95,78579,78580,78583,78585,78588],{"class":97,"line":1661},[95,78581,78582],{"class":154},"      flex-wrap",[95,78584,51414],{"class":105},[95,78586,78587],{"class":154},"wrap",[95,78589,1272],{"class":105},[95,78591,78592],{"class":97,"line":1675},[95,78593,2169],{"class":105},[95,78595,78596],{"class":97,"line":1680},[95,78597,2382],{"emptyLinePlaceholder":21},[95,78599,78600,78603],{"class":97,"line":1709},[95,78601,78602],{"class":1945},"    .item",[95,78604,15555],{"class":105},[95,78606,78607,78609,78611,78614,78616],{"class":97,"line":1714},[95,78608,54748],{"class":154},[95,78610,51414],{"class":105},[95,78612,78613],{"class":154},"240",[95,78615,51469],{"class":101},[95,78617,1272],{"class":105},[95,78619,78620,78622,78624,78626,78628],{"class":97,"line":1731},[95,78621,61977],{"class":154},[95,78623,51414],{"class":105},[95,78625,552],{"class":154},[95,78627,51469],{"class":101},[95,78629,1272],{"class":105},[95,78631,78632,78634,78636,78638,78640,78643,78645],{"class":97,"line":1736},[95,78633,54672],{"class":154},[95,78635,51414],{"class":105},[95,78637,806],{"class":154},[95,78639,51469],{"class":101},[95,78641,78642],{"class":154}," 30",[95,78644,51469],{"class":101},[95,78646,1272],{"class":105},[95,78648,78649,78651,78653,78655,78658,78661,78663],{"class":97,"line":1741},[95,78650,61837],{"class":154},[95,78652,51414],{"class":105},[95,78654,28106],{"class":154},[95,78656,78657],{"class":154}," ease",[95,78659,78660],{"class":154}," .5",[95,78662,801],{"class":101},[95,78664,1272],{"class":105},[95,78666,78667,78670,78672,78674,78676],{"class":97,"line":1746},[95,78668,78669],{"class":154},"      margin-bottom",[95,78671,51414],{"class":105},[95,78673,806],{"class":154},[95,78675,51469],{"class":101},[95,78677,1272],{"class":105},[95,78679,78680],{"class":97,"line":1760},[95,78681,2169],{"class":105},[95,78683,78684],{"class":97,"line":1765},[95,78685,2382],{"emptyLinePlaceholder":21},[95,78687,78688,78691,78693,78696],{"class":97,"line":2559},[95,78689,78690],{"class":1945},"    .item:nth-child",[95,78692,106],{"class":105},[95,78694,78695],{"class":154},"4n",[95,78697,12425],{"class":105},[95,78699,78700,78702,78704,78706],{"class":97,"line":2573},[95,78701,61977],{"class":154},[95,78703,51414],{"class":105},[95,78705,297],{"class":154},[95,78707,1272],{"class":105},[95,78709,78710],{"class":97,"line":2581},[95,78711,2169],{"class":105},[95,78713,78714],{"class":97,"line":2586},[95,78715,2382],{"emptyLinePlaceholder":21},[95,78717,78718,78721],{"class":97,"line":2592},[95,78719,78720],{"class":1945},"    .item:hover",[95,78722,15555],{"class":105},[95,78724,78725,78728,78730,78732,78734,78736,78738,78740,78742,78745,78747,78749,78751,78753,78755,78757,78759,78762],{"class":97,"line":2598},[95,78726,78727],{"class":154},"      box-shadow",[95,78729,51414],{"class":105},[95,78731,297],{"class":154},[95,78733,51469],{"class":101},[95,78735,4075],{"class":154},[95,78737,51469],{"class":101},[95,78739,2130],{"class":154},[95,78741,51469],{"class":101},[95,78743,78744],{"class":154}," rgba",[95,78746,106],{"class":105},[95,78748,297],{"class":154},[95,78750,12418],{"class":105},[95,78752,297],{"class":154},[95,78754,12418],{"class":105},[95,78756,297],{"class":154},[95,78758,12418],{"class":105},[95,78760,78761],{"class":154},".2",[95,78763,2701],{"class":105},[95,78765,78766,78769,78771,78774,78776,78778,78780,78783,78785,78787,78789],{"class":97,"line":2603},[95,78767,78768],{"class":154},"      transform",[95,78770,51414],{"class":105},[95,78772,78773],{"class":154},"translate3d",[95,78775,106],{"class":105},[95,78777,297],{"class":154},[95,78779,12418],{"class":105},[95,78781,78782],{"class":154},"-4",[95,78784,51469],{"class":101},[95,78786,12418],{"class":105},[95,78788,297],{"class":154},[95,78790,2701],{"class":105},[95,78792,78793,78795,78797,78799],{"class":97,"line":7931},[95,78794,62002],{"class":154},[95,78796,51414],{"class":105},[95,78798,62007],{"class":154},[95,78800,1272],{"class":105},[95,78802,78803],{"class":97,"line":7955},[95,78804,2169],{"class":105},[95,78806,78807],{"class":97,"line":7960},[95,78808,2382],{"emptyLinePlaceholder":21},[95,78810,78811,78813,78815],{"class":97,"line":7966},[95,78812,78602],{"class":1945},[95,78814,55592],{"class":51277},[95,78816,15555],{"class":105},[95,78818,78819,78821,78823,78825,78827],{"class":97,"line":7993},[95,78820,54748],{"class":154},[95,78822,51414],{"class":105},[95,78824,417],{"class":154},[95,78826,434],{"class":101},[95,78828,1272],{"class":105},[95,78830,78831],{"class":97,"line":7998},[95,78832,2169],{"class":105},[95,78834,78835],{"class":97,"line":8004},[95,78836,2382],{"emptyLinePlaceholder":21},[95,78838,78839,78841,78843],{"class":97,"line":8016},[95,78840,78602],{"class":1945},[95,78842,62281],{"class":1945},[95,78844,15555],{"class":105},[95,78846,78847,78849,78851,78853,78855],{"class":97,"line":8028},[95,78848,54899],{"class":154},[95,78850,51414],{"class":105},[95,78852,756],{"class":154},[95,78854,51469],{"class":101},[95,78856,1272],{"class":105},[95,78858,78859,78861,78863,78865,78867],{"class":97,"line":8040},[95,78860,78669],{"class":154},[95,78862,51414],{"class":105},[95,78864,552],{"class":154},[95,78866,51469],{"class":101},[95,78868,1272],{"class":105},[95,78870,78871,78873,78875,78878],{"class":97,"line":9699},[95,78872,57393],{"class":154},[95,78874,51414],{"class":105},[95,78876,78877],{"class":154},"#666",[95,78879,1272],{"class":105},[95,78881,78882],{"class":97,"line":9724},[95,78883,2169],{"class":105},[95,78885,78886],{"class":97,"line":9747},[95,78887,2382],{"emptyLinePlaceholder":21},[95,78889,78890,78892,78895],{"class":97,"line":9771},[95,78891,78602],{"class":1945},[95,78893,78894],{"class":1945}," .price",[95,78896,15555],{"class":105},[95,78898,78899,78901,78903,78905,78907],{"class":97,"line":9776},[95,78900,54899],{"class":154},[95,78902,51414],{"class":105},[95,78904,856],{"class":154},[95,78906,51469],{"class":101},[95,78908,1272],{"class":105},[95,78910,78911,78913,78915,78918],{"class":97,"line":9781},[95,78912,57393],{"class":154},[95,78914,51414],{"class":105},[95,78916,78917],{"class":154},"firebrick",[95,78919,1272],{"class":105},[95,78921,78922],{"class":97,"line":9786},[95,78923,2169],{"class":105},[95,78925,78926],{"class":97,"line":9795},[95,78927,2382],{"emptyLinePlaceholder":21},[95,78929,78930,78932,78935],{"class":97,"line":9800},[95,78931,78602],{"class":1945},[95,78933,78934],{"class":1945}," .price::before",[95,78936,15555],{"class":105},[95,78938,78939,78942,78944,78947],{"class":97,"line":9806},[95,78940,78941],{"class":154},"      content",[95,78943,51414],{"class":105},[95,78945,78946],{"class":210},"'￥'",[95,78948,1272],{"class":105},[95,78950,78951,78953,78955,78957,78959],{"class":97,"line":9827},[95,78952,54899],{"class":154},[95,78954,51414],{"class":105},[95,78956,655],{"class":154},[95,78958,51469],{"class":101},[95,78960,1272],{"class":105},[95,78962,78963],{"class":97,"line":9833},[95,78964,2169],{"class":105},[95,78966,78967],{"class":97,"line":9847},[95,78968,2382],{"emptyLinePlaceholder":21},[95,78970,78971,78974],{"class":97,"line":9853},[95,78972,78973],{"class":1945},"    .filter",[95,78975,15555],{"class":105},[95,78977,78978,78980,78982,78984],{"class":97,"line":9880},[95,78979,54986],{"class":154},[95,78981,51414],{"class":105},[95,78983,51454],{"class":154},[95,78985,1272],{"class":105},[95,78987,78988,78990,78992,78994,78996],{"class":97,"line":9889},[95,78989,54748],{"class":154},[95,78991,51414],{"class":105},[95,78993,78551],{"class":154},[95,78995,51469],{"class":101},[95,78997,1272],{"class":105},[95,78999,79000,79002,79004,79006,79008],{"class":97,"line":9895},[95,79001,54683],{"class":154},[95,79003,51414],{"class":105},[95,79005,297],{"class":154},[95,79007,51533],{"class":154},[95,79009,1272],{"class":105},[95,79011,79012,79014,79016,79018,79020,79022],{"class":97,"line":9903},[95,79013,54672],{"class":154},[95,79015,51414],{"class":105},[95,79017,762],{"class":154},[95,79019,51469],{"class":101},[95,79021,78642],{"class":154},[95,79023,79024],{"class":101},"px\n",[95,79026,79027],{"class":97,"line":9908},[95,79028,2169],{"class":105},[95,79030,79031],{"class":97,"line":16587},[95,79032,2382],{"emptyLinePlaceholder":21},[95,79034,79035,79037,79039],{"class":97,"line":16593},[95,79036,78973],{"class":1945},[95,79038,1380],{"class":51277},[95,79040,15555],{"class":105},[95,79042,79043,79045,79047,79049,79051,79053,79055],{"class":97,"line":16616},[95,79044,54672],{"class":154},[95,79046,51414],{"class":105},[95,79048,552],{"class":154},[95,79050,51469],{"class":101},[95,79052,8933],{"class":154},[95,79054,51469],{"class":101},[95,79056,1272],{"class":105},[95,79058,79059,79061,79063,79065],{"class":97,"line":16622},[95,79060,61698],{"class":154},[95,79062,51414],{"class":105},[95,79064,61795],{"class":154},[95,79066,1272],{"class":105},[95,79068,79069,79071,79073,79075],{"class":97,"line":16645},[95,79070,57393],{"class":154},[95,79072,51414],{"class":105},[95,79074,78877],{"class":154},[95,79076,1272],{"class":105},[95,79078,79079,79081,79083,79085],{"class":97,"line":16659},[95,79080,63947],{"class":154},[95,79082,51414],{"class":105},[95,79084,54714],{"class":154},[95,79086,1272],{"class":105},[95,79088,79089,79091,79093,79095,79097],{"class":97,"line":16679},[95,79090,61727],{"class":154},[95,79092,51414],{"class":105},[95,79094,806],{"class":154},[95,79096,51469],{"class":101},[95,79098,1272],{"class":105},[95,79100,79101],{"class":97,"line":16685},[95,79102,2169],{"class":105},[95,79104,79105],{"class":97,"line":16696},[95,79106,2382],{"emptyLinePlaceholder":21},[95,79108,79109,79111,79113,79115],{"class":97,"line":16719},[95,79110,78973],{"class":1945},[95,79112,1380],{"class":51277},[95,79114,61877],{"class":1945},[95,79116,15555],{"class":105},[95,79118,79119,79121,79123,79126],{"class":97,"line":16741},[95,79120,54861],{"class":154},[95,79122,51414],{"class":105},[95,79124,79125],{"class":154},"#05943c",[95,79127,1272],{"class":105},[95,79129,79130,79132,79134,79136],{"class":97,"line":16746},[95,79131,57393],{"class":154},[95,79133,51414],{"class":105},[95,79135,60819],{"class":154},[95,79137,1272],{"class":105},[95,79139,79140],{"class":97,"line":16752},[95,79141,2169],{"class":105},[95,79143,79144,79146,79148],{"class":97,"line":16766},[95,79145,52394],{"class":105},[95,79147,5109],{"class":51277},[95,79149,51284],{"class":105},[95,79151,79152,79154,79156],{"class":97,"line":16779},[95,79153,51762],{"class":105},[95,79155,51311],{"class":51277},[95,79157,51284],{"class":105},[95,79159,79160],{"class":97,"line":16784},[95,79161,2382],{"emptyLinePlaceholder":21},[95,79163,79164,79166,79168],{"class":97,"line":16798},[95,79165,1016],{"class":105},[95,79167,51777],{"class":51277},[95,79169,51284],{"class":105},[95,79171,79172,79174,79176,79178,79180,79183],{"class":97,"line":16803},[95,79173,52121],{"class":105},[95,79175,51588],{"class":51277},[95,79177,53463],{"class":1945},[95,79179,151],{"class":105},[95,79181,79182],{"class":210},"\"filter\"",[95,79184,51284],{"class":105},[95,79186,79187,79189,79191,79193,79195,79197,79200,79202,79204,79207,79209],{"class":97,"line":16809},[95,79188,51318],{"class":105},[95,79190,344],{"class":51277},[95,79192,61034],{"class":1945},[95,79194,151],{"class":105},[95,79196,61039],{"class":210},[95,79198,79199],{"class":1945}," data-index",[95,79201,151],{"class":105},[95,79203,3660],{"class":210},[95,79205,79206],{"class":105},">0-100元\u003C\u002F",[95,79208,344],{"class":51277},[95,79210,51284],{"class":105},[95,79212,79213,79215,79217,79219,79221,79223,79225,79227,79229,79232,79234],{"class":97,"line":16814},[95,79214,51318],{"class":105},[95,79216,344],{"class":51277},[95,79218,61034],{"class":1945},[95,79220,151],{"class":105},[95,79222,61039],{"class":210},[95,79224,79199],{"class":1945},[95,79226,151],{"class":105},[95,79228,3683],{"class":210},[95,79230,79231],{"class":105},">100-300元\u003C\u002F",[95,79233,344],{"class":51277},[95,79235,51284],{"class":105},[95,79237,79238,79240,79242,79244,79246,79248,79250,79252,79254,79257,79259],{"class":97,"line":16828},[95,79239,51318],{"class":105},[95,79241,344],{"class":51277},[95,79243,61034],{"class":1945},[95,79245,151],{"class":105},[95,79247,61039],{"class":210},[95,79249,79199],{"class":1945},[95,79251,151],{"class":105},[95,79253,3696],{"class":210},[95,79255,79256],{"class":105},">300元以上\u003C\u002F",[95,79258,344],{"class":51277},[95,79260,51284],{"class":105},[95,79262,79263,79265,79267,79269,79271,79273,79276,79278],{"class":97,"line":16833},[95,79264,51318],{"class":105},[95,79266,344],{"class":51277},[95,79268,61034],{"class":1945},[95,79270,151],{"class":105},[95,79272,61039],{"class":210},[95,79274,79275],{"class":105},">全部区间\u003C\u002F",[95,79277,344],{"class":51277},[95,79279,51284],{"class":105},[95,79281,79282,79284,79286],{"class":97,"line":16838},[95,79283,52394],{"class":105},[95,79285,51588],{"class":51277},[95,79287,51284],{"class":105},[95,79289,79290,79292,79294,79296,79298,79300],{"class":97,"line":16852},[95,79291,52121],{"class":105},[95,79293,51588],{"class":51277},[95,79295,53463],{"class":1945},[95,79297,151],{"class":105},[95,79299,62585],{"class":210},[95,79301,51284],{"class":105},[95,79303,79304],{"class":97,"line":16864},[95,79305,79306],{"class":164},"    \u003C!-- \u003Cdiv class=\"item\">\n",[95,79308,79309],{"class":97,"line":16869},[95,79310,79311],{"class":164},"      \u003Cimg src=\"\" alt=\"\">\n",[95,79313,79314],{"class":97,"line":16882},[95,79315,79316],{"class":164},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[95,79318,79319],{"class":97,"line":16887},[95,79320,79321],{"class":164},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[95,79323,79324],{"class":97,"line":16892},[95,79325,79326],{"class":164},"    \u003C\u002Fdiv> -->\n",[95,79328,79329,79331,79333],{"class":97,"line":16897},[95,79330,52394],{"class":105},[95,79332,51588],{"class":51277},[95,79334,51284],{"class":105},[95,79336,79337,79339,79341],{"class":97,"line":16910},[95,79338,52121],{"class":105},[95,79340,51790],{"class":51277},[95,79342,51284],{"class":105},[95,79344,79345],{"class":97,"line":16915},[95,79346,79347],{"class":164},"    \u002F\u002F 2. 初始化数据\n",[95,79349,79350,79352,79355,79357],{"class":97,"line":32618},[95,79351,11204],{"class":101},[95,79353,79354],{"class":154}," goodsList",[95,79356,13547],{"class":101},[95,79358,55424],{"class":105},[95,79360,79361],{"class":97,"line":32624},[95,79362,79363],{"class":105},"      {\n",[95,79365,79366,79369,79372],{"class":97,"line":32630},[95,79367,79368],{"class":105},"        id: ",[95,79370,79371],{"class":210},"'4001172'",[95,79373,31451],{"class":105},[95,79375,79376,79379,79382],{"class":97,"line":32636},[95,79377,79378],{"class":105},"        name: ",[95,79380,79381],{"class":210},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[95,79383,31451],{"class":105},[95,79385,79386,79389,79392],{"class":97,"line":32642},[95,79387,79388],{"class":105},"        price: ",[95,79390,79391],{"class":210},"'289.00'",[95,79393,31451],{"class":105},[95,79395,79396,79399,79402],{"class":97,"line":32653},[95,79397,79398],{"class":105},"        picture: ",[95,79400,79401],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[95,79403,31451],{"class":105},[95,79405,79406],{"class":97,"line":32659},[95,79407,77869],{"class":105},[95,79409,79410],{"class":97,"line":32679},[95,79411,79363],{"class":105},[95,79413,79414,79416,79419],{"class":97,"line":32685},[95,79415,79368],{"class":105},[95,79417,79418],{"class":210},"'4001594'",[95,79420,31451],{"class":105},[95,79422,79423,79425,79428],{"class":97,"line":32696},[95,79424,79378],{"class":105},[95,79426,79427],{"class":210},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[95,79429,31451],{"class":105},[95,79431,79432,79434,79437],{"class":97,"line":32702},[95,79433,79388],{"class":105},[95,79435,79436],{"class":210},"'288.00'",[95,79438,31451],{"class":105},[95,79440,79441,79443,79446],{"class":97,"line":32708},[95,79442,79398],{"class":105},[95,79444,79445],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[95,79447,31451],{"class":105},[95,79449,79450],{"class":97,"line":32714},[95,79451,77869],{"class":105},[95,79453,79454],{"class":97,"line":32720},[95,79455,79363],{"class":105},[95,79457,79458,79460,79463],{"class":97,"line":32726},[95,79459,79368],{"class":105},[95,79461,79462],{"class":210},"'4001009'",[95,79464,31451],{"class":105},[95,79466,79467,79469,79472],{"class":97,"line":32732},[95,79468,79378],{"class":105},[95,79470,79471],{"class":210},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[95,79473,31451],{"class":105},[95,79475,79476,79478,79481],{"class":97,"line":32738},[95,79477,79388],{"class":105},[95,79479,79480],{"class":210},"'109.00'",[95,79482,31451],{"class":105},[95,79484,79485,79487,79490],{"class":97,"line":32758},[95,79486,79398],{"class":105},[95,79488,79489],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[95,79491,31451],{"class":105},[95,79493,79494],{"class":97,"line":32764},[95,79495,77869],{"class":105},[95,79497,79498],{"class":97,"line":32780},[95,79499,79363],{"class":105},[95,79501,79502,79504,79507],{"class":97,"line":32786},[95,79503,79368],{"class":105},[95,79505,79506],{"class":210},"'4001874'",[95,79508,31451],{"class":105},[95,79510,79511,79513,79516],{"class":97,"line":32800},[95,79512,79378],{"class":105},[95,79514,79515],{"class":210},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[95,79517,31451],{"class":105},[95,79519,79520,79522,79525],{"class":97,"line":32806},[95,79521,79388],{"class":105},[95,79523,79524],{"class":210},"'488.00'",[95,79526,31451],{"class":105},[95,79528,79529,79531,79534],{"class":97,"line":32821},[95,79530,79398],{"class":105},[95,79532,79533],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[95,79535,31451],{"class":105},[95,79537,79538],{"class":97,"line":32827},[95,79539,77869],{"class":105},[95,79541,79542],{"class":97,"line":32836},[95,79543,79363],{"class":105},[95,79545,79546,79548,79551],{"class":97,"line":32842},[95,79547,79368],{"class":105},[95,79549,79550],{"class":210},"'4001649'",[95,79552,31451],{"class":105},[95,79554,79555,79557,79560],{"class":97,"line":32851},[95,79556,79378],{"class":105},[95,79558,79559],{"class":210},"'大师监制龙泉青瓷茶叶罐'",[95,79561,31451],{"class":105},[95,79563,79564,79566,79569],{"class":97,"line":32857},[95,79565,79388],{"class":105},[95,79567,79568],{"class":210},"'139.00'",[95,79570,31451],{"class":105},[95,79572,79573,79575,79578],{"class":97,"line":32863},[95,79574,79398],{"class":105},[95,79576,79577],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[95,79579,31451],{"class":105},[95,79581,79582],{"class":97,"line":32872},[95,79583,77869],{"class":105},[95,79585,79586],{"class":97,"line":32878},[95,79587,79363],{"class":105},[95,79589,79590,79592,79595],{"class":97,"line":32889},[95,79591,79368],{"class":105},[95,79593,79594],{"class":210},"'3997185'",[95,79596,31451],{"class":105},[95,79598,79599,79601,79604],{"class":97,"line":32895},[95,79600,79378],{"class":105},[95,79602,79603],{"class":210},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[95,79605,31451],{"class":105},[95,79607,79608,79610,79613],{"class":97,"line":32914},[95,79609,79388],{"class":105},[95,79611,79612],{"class":210},"'108.00'",[95,79614,31451],{"class":105},[95,79616,79617,79619,79622],{"class":97,"line":32920},[95,79618,79398],{"class":105},[95,79620,79621],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[95,79623,31451],{"class":105},[95,79625,79626],{"class":97,"line":32931},[95,79627,77869],{"class":105},[95,79629,79630],{"class":97,"line":32937},[95,79631,79363],{"class":105},[95,79633,79634,79636,79639],{"class":97,"line":32957},[95,79635,79368],{"class":105},[95,79637,79638],{"class":210},"'3997403'",[95,79640,31451],{"class":105},[95,79642,79643,79645,79648],{"class":97,"line":32973},[95,79644,79378],{"class":105},[95,79646,79647],{"class":210},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[95,79649,31451],{"class":105},[95,79651,79652,79654,79657],{"class":97,"line":32979},[95,79653,79388],{"class":105},[95,79655,79656],{"class":210},"'100.00'",[95,79658,31451],{"class":105},[95,79660,79661,79663,79666],{"class":97,"line":32993},[95,79662,79398],{"class":105},[95,79664,79665],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[95,79667,31451],{"class":105},[95,79669,79670],{"class":97,"line":32999},[95,79671,77869],{"class":105},[95,79673,79674],{"class":97,"line":33005},[95,79675,79363],{"class":105},[95,79677,79678,79680,79683],{"class":97,"line":33016},[95,79679,79368],{"class":105},[95,79681,79682],{"class":210},"'3998274'",[95,79684,31451],{"class":105},[95,79686,79687,79689,79692],{"class":97,"line":33022},[95,79688,79378],{"class":105},[95,79690,79691],{"class":210},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[95,79693,31451],{"class":105},[95,79695,79696,79698,79700],{"class":97,"line":33028},[95,79697,79388],{"class":105},[95,79699,79568],{"class":210},[95,79701,31451],{"class":105},[95,79703,79704,79706,79709],{"class":97,"line":33038},[95,79705,79398],{"class":105},[95,79707,79708],{"class":210},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[95,79710,31451],{"class":105},[95,79712,79713],{"class":97,"line":33044},[95,79714,77869],{"class":105},[95,79716,79717],{"class":97,"line":33055},[95,79718,53086],{"class":105},[95,79720,79721],{"class":97,"line":33061},[95,79722,2382],{"emptyLinePlaceholder":21},[95,79724,79725],{"class":97,"line":33071},[95,79726,79727],{"class":164},"    \u002F\u002F 1.渲染函数\n",[95,79729,79730,79732,79734,79736,79738],{"class":97,"line":33076},[95,79731,70061],{"class":101},[95,79733,70064],{"class":1945},[95,79735,106],{"class":105},[95,79737,3862],{"class":5199},[95,79739,12425],{"class":105},[95,79741,79742],{"class":97,"line":33082},[95,79743,79744],{"class":164},"      \u002F\u002F 声明空字符串\n",[95,79746,79747,79750,79753,79755],{"class":97,"line":33131},[95,79748,79749],{"class":101},"      let",[95,79751,79752],{"class":105}," str ",[95,79754,151],{"class":101},[95,79756,70081],{"class":210},[95,79758,79759],{"class":97,"line":33178},[95,79760,70086],{"class":164},[95,79762,79763,79765,79768,79770,79773,79776],{"class":97,"line":33183},[95,79764,57984],{"class":105},[95,79766,79767],{"class":1945},"forEach",[95,79769,106],{"class":105},[95,79771,79772],{"class":5199},"item",[95,79774,79775],{"class":101}," =>",[95,79777,15555],{"class":105},[95,79779,79780,79782,79785,79788,79790,79793,79795,79798,79801,79803],{"class":97,"line":33189},[95,79781,61247],{"class":101},[95,79783,79784],{"class":105}," { ",[95,79786,79787],{"class":154},"name",[95,79789,12418],{"class":105},[95,79791,79792],{"class":154},"price",[95,79794,12418],{"class":105},[95,79796,79797],{"class":154},"picture",[95,79799,79800],{"class":105}," } ",[95,79802,151],{"class":101},[95,79804,79805],{"class":105}," item\n",[95,79807,79808,79811,79813],{"class":97,"line":33208},[95,79809,79810],{"class":105},"        str ",[95,79812,9460],{"class":101},[95,79814,70145],{"class":210},[95,79816,79817],{"class":97,"line":33214},[95,79818,79819],{"class":210},"          \u003Cdiv class=\"item\">\n",[95,79821,79822,79825,79827],{"class":97,"line":33234},[95,79823,79824],{"class":210},"            \u003Cimg src=\"${",[95,79826,79797],{"class":105},[95,79828,79829],{"class":210},"}\" alt=\"\">\n",[95,79831,79832,79835,79837],{"class":97,"line":33240},[95,79833,79834],{"class":210},"            \u003Cp class=\"name\">${",[95,79836,79787],{"class":105},[95,79838,79839],{"class":210},"}\u003C\u002Fp>\n",[95,79841,79842,79845,79847],{"class":97,"line":33246},[95,79843,79844],{"class":210},"            \u003Cp class=\"price\">${",[95,79846,79792],{"class":105},[95,79848,79839],{"class":210},[95,79850,79851],{"class":97,"line":33256},[95,79852,79853],{"class":210},"          \u003C\u002Fdiv>\n",[95,79855,79856],{"class":97,"line":33261},[95,79857,79858],{"class":210},"        `\n",[95,79860,79861],{"class":97,"line":33267},[95,79862,64792],{"class":105},[95,79864,79865],{"class":97,"line":33283},[95,79866,79867],{"class":164},"      \u002F\u002F 追加给List\n",[95,79869,79870,79872,79874,79876,79879,79881,79883],{"class":97,"line":33328},[95,79871,55748],{"class":105},[95,79873,54376],{"class":1945},[95,79875,106],{"class":105},[95,79877,79878],{"class":210},"'.list'",[95,79880,74226],{"class":105},[95,79882,151],{"class":101},[95,79884,73962],{"class":105},[95,79886,79887],{"class":97,"line":33334},[95,79888,2169],{"class":105},[95,79890,79891],{"class":97,"line":33340},[95,79892,79893],{"class":164},"    \u002F\u002F 页面一打开就需要渲染\n",[95,79895,79896,79899],{"class":97,"line":33346},[95,79897,79898],{"class":1945},"    render",[95,79900,79901],{"class":105},"(goodsList)\n",[95,79903,79904],{"class":97,"line":33357},[95,79905,79906],{"class":164},"    \u002F\u002F 2.过滤筛选\n",[95,79908,79909,79911,79913,79915,79918,79920,79922,79924,79926,79928,79930,79932],{"class":97,"line":33363},[95,79910,52384],{"class":105},[95,79912,54376],{"class":1945},[95,79914,106],{"class":105},[95,79916,79917],{"class":210},"'.filter'",[95,79919,30811],{"class":105},[95,79921,57790],{"class":1945},[95,79923,106],{"class":105},[95,79925,57795],{"class":210},[95,79927,12418],{"class":105},[95,79929,180],{"class":5199},[95,79931,79775],{"class":101},[95,79933,15555],{"class":105},[95,79935,79936],{"class":97,"line":33369},[95,79937,79938],{"class":164},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[95,79940,79941,79943,79945,79948,79950,79952,79954,79956],{"class":97,"line":33375},[95,79942,58205],{"class":101},[95,79944,79784],{"class":105},[95,79946,79947],{"class":154},"tagName",[95,79949,12418],{"class":105},[95,79951,31522],{"class":154},[95,79953,79800],{"class":105},[95,79955,151],{"class":101},[95,79957,79958],{"class":105}," e.target\n",[95,79960,79961],{"class":97,"line":33393},[95,79962,79963],{"class":164},"      \u002F\u002F 判断\n",[95,79965,79966,79968,79970,79972,79974],{"class":97,"line":33407},[95,79967,54457],{"class":101},[95,79969,67011],{"class":105},[95,79971,54463],{"class":101},[95,79973,68233],{"class":210},[95,79975,12425],{"class":105},[95,79977,79978],{"class":97,"line":33416},[95,79979,79980],{"class":164},"        \u002F\u002F console.log(11)\n",[95,79982,79983],{"class":97,"line":33425},[95,79984,79985],{"class":164},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[95,79987,79988],{"class":97,"line":33434},[95,79989,79990],{"class":164},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[95,79992,79993,79995,79997,79999],{"class":97,"line":33443},[95,79994,51807],{"class":101},[95,79996,51810],{"class":105},[95,79998,151],{"class":101},[95,80000,80001],{"class":105}," goodsList\n",[95,80003,80004,80006,80009,80011,80014],{"class":97,"line":33449},[95,80005,2479],{"class":101},[95,80007,80008],{"class":105}," (dataset.index ",[95,80010,54463],{"class":101},[95,80012,80013],{"class":210}," '1'",[95,80015,12425],{"class":105},[95,80017,80018,80021,80023,80026,80029,80031,80033,80035,80038,80040,80042,80045,80047,80049,80051],{"class":97,"line":33455},[95,80019,80020],{"class":105},"          arr ",[95,80022,151],{"class":101},[95,80024,80025],{"class":105}," goodsList.",[95,80027,80028],{"class":1945},"filter",[95,80030,106],{"class":105},[95,80032,79772],{"class":5199},[95,80034,79775],{"class":101},[95,80036,80037],{"class":105}," item.price ",[95,80039,1692],{"class":101},[95,80041,4075],{"class":154},[95,80043,80044],{"class":101}," &&",[95,80046,80037],{"class":105},[95,80048,1570],{"class":101},[95,80050,5737],{"class":154},[95,80052,112],{"class":105},[95,80054,80055,80058,80060,80062,80064,80066,80069],{"class":97,"line":33463},[95,80056,80057],{"class":105},"        } ",[95,80059,1683],{"class":101},[95,80061,1686],{"class":101},[95,80063,80008],{"class":105},[95,80065,54463],{"class":101},[95,80067,80068],{"class":210}," '2'",[95,80070,12425],{"class":105},[95,80072,80073,80075,80077,80079,80081,80083,80085,80087,80089,80091,80093,80095,80097,80099,80102],{"class":97,"line":33468},[95,80074,80020],{"class":105},[95,80076,151],{"class":101},[95,80078,80025],{"class":105},[95,80080,80028],{"class":1945},[95,80082,106],{"class":105},[95,80084,79772],{"class":5199},[95,80086,79775],{"class":101},[95,80088,80037],{"class":105},[95,80090,1692],{"class":101},[95,80092,5737],{"class":154},[95,80094,80044],{"class":101},[95,80096,80037],{"class":105},[95,80098,1570],{"class":101},[95,80100,80101],{"class":154}," 300",[95,80103,112],{"class":105},[95,80105,80106,80108,80110,80112,80114,80116,80119],{"class":97,"line":33474},[95,80107,80057],{"class":105},[95,80109,1683],{"class":101},[95,80111,1686],{"class":101},[95,80113,80008],{"class":105},[95,80115,54463],{"class":101},[95,80117,80118],{"class":210}," '3'",[95,80120,12425],{"class":105},[95,80122,80123,80125,80127,80129,80131,80133,80135,80137,80139,80141,80143],{"class":97,"line":33485},[95,80124,80020],{"class":105},[95,80126,151],{"class":101},[95,80128,80025],{"class":105},[95,80130,80028],{"class":1945},[95,80132,106],{"class":105},[95,80134,79772],{"class":5199},[95,80136,79775],{"class":101},[95,80138,80037],{"class":105},[95,80140,1692],{"class":101},[95,80142,80101],{"class":154},[95,80144,112],{"class":105},[95,80146,80147],{"class":97,"line":33491},[95,80148,2511],{"class":105},[95,80150,80151],{"class":97,"line":33511},[95,80152,80153],{"class":164},"        \u002F\u002F 渲染函数\n",[95,80155,80156,80158],{"class":97,"line":33517},[95,80157,70385],{"class":1945},[95,80159,52389],{"class":105},[95,80161,80162],{"class":97,"line":33523},[95,80163,52375],{"class":105},[95,80165,80166],{"class":97,"line":33529},[95,80167,2382],{"emptyLinePlaceholder":21},[95,80169,80170],{"class":97,"line":33546},[95,80171,33446],{"class":105},[95,80173,80174,80176,80178],{"class":97,"line":33552},[95,80175,52394],{"class":105},[95,80177,51790],{"class":51277},[95,80179,51284],{"class":105},[95,80181,80182,80184,80186],{"class":97,"line":33558},[95,80183,51762],{"class":105},[95,80185,51777],{"class":51277},[95,80187,51284],{"class":105},[95,80189,80190],{"class":97,"line":33564},[95,80191,2382],{"emptyLinePlaceholder":21},[95,80193,80194,80196,80198],{"class":97,"line":33570},[95,80195,51762],{"class":105},[95,80197,50612],{"class":51277},[95,80199,51284],{"class":105},[37,80201,80203],{"id":80202},"_410-深入了解对象","4.10 深入了解对象",[66,80205,80207],{"id":80206},"_4101-创建对象","4.10.1 创建对象",[10,80209,80210],{},[1444,80211],{"alt":14,"src":80212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[10,80214,80215],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[66,80217,80219],{"id":80218},"_4102-构造函数","4.10.2 构造函数",[10,80221,80222,80225],{},[255,80223,80224],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[10,80227,80228,80231],{},[255,80229,80230],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[86,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",[92,80236,80237,80245,80250,80271,80284,80296,80308,80312,80317,80344,80349,80376],{"__ignoreMap":14},[95,80238,80239,80241,80243],{"class":97,"line":98},[95,80240,1016],{"class":105},[95,80242,51790],{"class":51277},[95,80244,51284],{"class":105},[95,80246,80247],{"class":97,"line":15},[95,80248,80249],{"class":164},"\u002F\u002F例：\n",[95,80251,80252,80254,80257,80259,80261,80263,80265,80267,80269],{"class":97,"line":1161},[95,80253,54426],{"class":101},[95,80255,80256],{"class":1945}," Pig",[95,80258,106],{"class":105},[95,80260,79787],{"class":5199},[95,80262,484],{"class":105},[95,80264,70198],{"class":5199},[95,80266,484],{"class":105},[95,80268,70215],{"class":5199},[95,80270,12425],{"class":105},[95,80272,80273,80276,80279,80281],{"class":97,"line":1176},[95,80274,80275],{"class":154},"    this",[95,80277,80278],{"class":105},".name",[95,80280,151],{"class":101},[95,80282,80283],{"class":105},"name\n",[95,80285,80286,80288,80291,80293],{"class":97,"line":1182},[95,80287,80275],{"class":154},[95,80289,80290],{"class":105},".age",[95,80292,151],{"class":101},[95,80294,80295],{"class":105},"age\n",[95,80297,80298,80300,80303,80305],{"class":97,"line":1196},[95,80299,80275],{"class":154},[95,80301,80302],{"class":105},".gender",[95,80304,151],{"class":101},[95,80306,80307],{"class":105},"gender    \n",[95,80309,80310],{"class":97,"line":1202},[95,80311,1547],{"class":105},[95,80313,80314],{"class":97,"line":1293},[95,80315,80316],{"class":164},"\u002F\u002F创建佩奇对象\n",[95,80318,80319,80321,80324,80326,80328,80330,80333,80335,80337,80339,80342],{"class":97,"line":1299},[95,80320,6775],{"class":101},[95,80322,80323],{"class":154}," Peppa",[95,80325,11700],{"class":101},[95,80327,80256],{"class":1945},[95,80329,106],{"class":105},[95,80331,80332],{"class":210},"'佩奇'",[95,80334,484],{"class":105},[95,80336,450],{"class":154},[95,80338,484],{"class":105},[95,80340,80341],{"class":210},"'女'",[95,80343,112],{"class":105},[95,80345,80346],{"class":97,"line":1311},[95,80347,80348],{"class":164},"\u002F\u002F创建乔治对象\n",[95,80350,80351,80353,80356,80358,80360,80362,80365,80367,80369,80371,80374],{"class":97,"line":1594},[95,80352,6775],{"class":101},[95,80354,80355],{"class":154}," George",[95,80357,11700],{"class":101},[95,80359,80256],{"class":1945},[95,80361,106],{"class":105},[95,80363,80364],{"class":210},"'乔治'",[95,80366,484],{"class":105},[95,80368,177],{"class":154},[95,80370,484],{"class":105},[95,80372,80373],{"class":210},"'男'",[95,80375,112],{"class":105},[95,80377,80378,80380,80382],{"class":97,"line":1599},[95,80379,51762],{"class":105},[95,80381,51790],{"class":51277},[95,80383,51284],{"class":105},[10,80385,80386],{},[1444,80387],{"alt":14,"src":80388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[10,80390,80391],{},[1444,80392],{"alt":14,"src":80393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[10,80395,80396],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[10,80398,80399],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[10,80401,80402],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[10,80404,80405],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[10,80407,80408],{},"这里用等号是因为：对象.属性=值",[10,80410,80411],{},"①利用对象字面量创建对象",[10,80413,80414],{},"const o={",[10,80416,80417],{},"name:'pink'",[10,80419,80420],{},"} ②利用new Object创建对象",[10,80422,80423],{},"const o=new Object({name:'pink'})",[10,80425,80426],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[10,80428,80429],{},"构造函数创建对象的执行过程：",[10,80431,80432],{},[1444,80433],{"alt":14,"src":80434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[66,80436,80438],{"id":80437},"_4103-实例成员","4.10.3 实例成员",[10,80440,80441],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[49,80443,80444,80447,80450],{},[52,80445,80446],{},"实例对象的属性和方法即为实例成员",[52,80448,80449],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[52,80451,80452],{},"构造函数创建的实例对象彼此独立互不影响",[66,80454,80456],{"id":80455},"_4104-静态成员","4.10.4 静态成员",[10,80458,80459],{},[1444,80460],{"alt":14,"src":80461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[10,80463,80464],{},"静态成员有Date.now() Math.PI Math.random()",[10,80466,80467],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[10,80469,80470],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[10,80472,80473],{},"function Pig(name) n {",[10,80475,80476],{},"this.name=name",[10,80478,1052],{},[10,80480,80481],{},"Pig.eyes=2",[10,80483,80484],{},"Pig.sayHai=function () { console.log(this) }",[10,80486,80487],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[10,80489,80490],{},"console.log(Pig.eyes) \u002F\u002F2",[10,80492,11315],{},[49,80494,80495,80498,80501,80504,80507],{},[52,80496,80497],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[52,80499,80500],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[52,80502,80503],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[52,80505,80506],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[52,80508,80509],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[10,80511,80512],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[66,80514,80516],{"id":80515},"_4105-内置构造函数","4.10.5 内置构造函数",[10,80518,80519],{},"内置构造函数包含：",[10,80521,80522],{},[1444,80523],{"alt":14,"src":80524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[10,80526,80527],{},[1444,80528],{"alt":14,"src":80529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[10,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",[21981,80537,80539],{"id":80538},"_41051-object","4.10.5.1 Object",[10,80541,80542],{},"Object 是内置的构造函数，用于创建普通对象",[10,80544,80545],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[86,80547,80549],{"className":50610,"code":80548,"language":50612,"meta":14,"style":14},"const user=new Object({name:'小明',age:15})\n",[92,80550,80551],{"__ignoreMap":14},[95,80552,80553],{"class":97,"line":98},[95,80554,80548],{"class":105},[10,80556,80557],{},"三个常用的静态方法：",[22893,80559,80561],{"id":80560},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[10,80563,80564],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[10,80566,80567],{},[1444,80568],{"alt":14,"src":80569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[10,80571,80572],{},[1444,80573],{"alt":14,"src":80574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[86,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",[92,80579,80580,80588,80596,80601,80606,80611,80616,80621,80626,80634],{"__ignoreMap":14},[95,80581,80582,80584,80586],{"class":97,"line":98},[95,80583,1016],{"class":105},[95,80585,51777],{"class":51277},[95,80587,51284],{"class":105},[95,80589,80590,80592,80594],{"class":97,"line":15},[95,80591,52121],{"class":105},[95,80593,51790],{"class":51277},[95,80595,51284],{"class":105},[95,80597,80598],{"class":97,"line":1161},[95,80599,80600],{"class":105},"    const o = { name: 'pink', age: 6 }\n",[95,80602,80603],{"class":97,"line":1176},[95,80604,80605],{"class":105},"    \u002F\u002F 获得所有属性名\n",[95,80607,80608],{"class":97,"line":1182},[95,80609,80610],{"class":105},"    const arr = Object.keys(o)\n",[95,80612,80613],{"class":97,"line":1196},[95,80614,80615],{"class":105},"    console.log(arr)\n",[95,80617,80618],{"class":97,"line":1202},[95,80619,80620],{"class":105},"    \u002F\u002F 获得所有属性值\n",[95,80622,80623],{"class":97,"line":1293},[95,80624,80625],{"class":105},"    console.log(Object.values(o))\n",[95,80627,80628,80630,80632],{"class":97,"line":1299},[95,80629,52394],{"class":105},[95,80631,51790],{"class":51277},[95,80633,51284],{"class":105},[95,80635,80636,80638,80640],{"class":97,"line":1311},[95,80637,51762],{"class":105},[95,80639,51777],{"class":51277},[95,80641,51284],{"class":105},[22893,80643,80645],{"id":80644},"_410512-object-assign","4.10.5.1.2 Object. assign",[10,80647,80648],{},"Object.assign(oo,o)",[10,80650,80651],{},"后的东西添加给前 是追加",[10,80653,80654],{},[1444,80655],{"alt":14,"src":80656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[10,80658,80659],{},[1444,80660],{"alt":14,"src":80661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[86,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",[92,80666,80667,80675,80683,80687,80691,80695,80699,80703,80707,80712,80717,80722,80727,80732,80740],{"__ignoreMap":14},[95,80668,80669,80671,80673],{"class":97,"line":98},[95,80670,1016],{"class":105},[95,80672,51777],{"class":51277},[95,80674,51284],{"class":105},[95,80676,80677,80679,80681],{"class":97,"line":15},[95,80678,52121],{"class":105},[95,80680,51790],{"class":51277},[95,80682,51284],{"class":105},[95,80684,80685],{"class":97,"line":1161},[95,80686,80600],{"class":105},[95,80688,80689],{"class":97,"line":1176},[95,80690,80605],{"class":105},[95,80692,80693],{"class":97,"line":1182},[95,80694,80610],{"class":105},[95,80696,80697],{"class":97,"line":1196},[95,80698,80615],{"class":105},[95,80700,80701],{"class":97,"line":1202},[95,80702,80620],{"class":105},[95,80704,80705],{"class":97,"line":1293},[95,80706,80625],{"class":105},[95,80708,80709],{"class":97,"line":1299},[95,80710,80711],{"class":105},"    const oo = {}\n",[95,80713,80714],{"class":97,"line":1311},[95,80715,80716],{"class":105},"    Object.assign(oo, o)\n",[95,80718,80719],{"class":97,"line":1594},[95,80720,80721],{"class":105},"    console.log(oo)\n",[95,80723,80724],{"class":97,"line":1599},[95,80725,80726],{"class":105},"    Object.assign(o, { gender: '女' })\n",[95,80728,80729],{"class":97,"line":1605},[95,80730,80731],{"class":105},"    console.log(o)\n",[95,80733,80734,80736,80738],{"class":97,"line":1610},[95,80735,52394],{"class":105},[95,80737,51790],{"class":51277},[95,80739,51284],{"class":105},[95,80741,80742,80744,80746],{"class":97,"line":1624},[95,80743,51762],{"class":105},[95,80745,51777],{"class":51277},[95,80747,51284],{"class":105},[10,80749,80750],{},[1444,80751],{"alt":14,"src":80752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21981,80754,80756],{"id":80755},"_41052-array","4.10.5.2 Array",[10,80758,80759],{},"Array 是内置的构造函数，用于创建数组",[10,80761,80762],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[86,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",[92,80767,80768,80773],{"__ignoreMap":14},[95,80769,80770],{"class":97,"line":98},[95,80771,80772],{"class":105},"const arr=new Array(3,5)\n",[95,80774,80775],{"class":97,"line":15},[95,80776,80777],{"class":105},"console.log(arr)  \u002F\u002F[3,5]\n",[10,80779,80780],{},"Array的实例方法，这个方法是实例成员",[10,80782,80783],{},[1444,80784],{"alt":14,"src":80785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22893,80787,80789],{"id":80788},"_410521-reduce","4.10.5.2.1 reduce",[10,80791,80792],{},[1444,80793],{"alt":14,"src":80794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[86,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",[92,80799,80800,80808,80816,80821,80826,80831,80836,80840,80845,80850,80855,80859,80864,80869,80873,80878,80883,80888,80896],{"__ignoreMap":14},[95,80801,80802,80804,80806],{"class":97,"line":98},[95,80803,1016],{"class":105},[95,80805,51777],{"class":51277},[95,80807,51284],{"class":105},[95,80809,80810,80812,80814],{"class":97,"line":15},[95,80811,52121],{"class":105},[95,80813,51790],{"class":51277},[95,80815,51284],{"class":105},[95,80817,80818],{"class":97,"line":1161},[95,80819,80820],{"class":105},"    const arr = [1, 5, 8]\n",[95,80822,80823],{"class":97,"line":1176},[95,80824,80825],{"class":105},"    \u002F\u002F 1.没有初始值\n",[95,80827,80828],{"class":97,"line":1182},[95,80829,80830],{"class":105},"    const total = arr.reduce(function (prev, current) {\n",[95,80832,80833],{"class":97,"line":1196},[95,80834,80835],{"class":105},"      return prev + current\n",[95,80837,80838],{"class":97,"line":1202},[95,80839,33446],{"class":105},[95,80841,80842],{"class":97,"line":1293},[95,80843,80844],{"class":105},"    console.log(total)   \u002F\u002F14\n",[95,80846,80847],{"class":97,"line":1299},[95,80848,80849],{"class":105},"    \u002F\u002F 2.有初始值\n",[95,80851,80852],{"class":97,"line":1311},[95,80853,80854],{"class":105},"    const total1 = arr.reduce(function (prev, current) {\n",[95,80856,80857],{"class":97,"line":1594},[95,80858,80835],{"class":105},[95,80860,80861],{"class":97,"line":1599},[95,80862,80863],{"class":105},"    }, 10)\n",[95,80865,80866],{"class":97,"line":1605},[95,80867,80868],{"class":105},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[95,80870,80871],{"class":97,"line":1610},[95,80872,2382],{"emptyLinePlaceholder":21},[95,80874,80875],{"class":97,"line":1624},[95,80876,80877],{"class":105},"    \u002F\u002F 3.箭头函数写法\n",[95,80879,80880],{"class":97,"line":1629},[95,80881,80882],{"class":105},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[95,80884,80885],{"class":97,"line":1635},[95,80886,80887],{"class":105},"    console.log(total2)   \u002F\u002F24\n",[95,80889,80890,80892,80894],{"class":97,"line":1656},[95,80891,52394],{"class":105},[95,80893,51790],{"class":51277},[95,80895,51284],{"class":105},[95,80897,80898,80900,80902],{"class":97,"line":1661},[95,80899,51762],{"class":105},[95,80901,51777],{"class":51277},[95,80903,51284],{"class":105},[10,80905,80906],{},"执行过程：",[49,80908,80909,80912,80915],{},[52,80910,80911],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[52,80913,80914],{},"每一次循环，把返回值给作为下一次循环的上一次值",[52,80916,80917],{},"如果有起始值，则起始值作为上一次值",[86,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",[92,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},[95,80924,80925,80927,80929],{"class":97,"line":98},[95,80926,1016],{"class":105},[95,80928,51777],{"class":51277},[95,80930,51284],{"class":105},[95,80932,80933,80935,80937],{"class":97,"line":15},[95,80934,52121],{"class":105},[95,80936,51790],{"class":51277},[95,80938,51284],{"class":105},[95,80940,80941],{"class":97,"line":1161},[95,80942,80820],{"class":105},[95,80944,80945],{"class":97,"line":1176},[95,80946,80825],{"class":105},[95,80948,80949],{"class":97,"line":1182},[95,80950,80830],{"class":105},[95,80952,80953],{"class":97,"line":1196},[95,80954,80835],{"class":105},[95,80956,80957],{"class":97,"line":1202},[95,80958,33446],{"class":105},[95,80960,80961],{"class":97,"line":1293},[95,80962,80844],{"class":105},[95,80964,80965],{"class":97,"line":1299},[95,80966,80967],{"class":105},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[95,80969,80970],{"class":97,"line":1311},[95,80971,80972],{"class":105},"    \u002F\u002F     1              5                    6\n",[95,80974,80975],{"class":97,"line":1594},[95,80976,80977],{"class":105},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[95,80979,80980],{"class":97,"line":1599},[95,80981,80982],{"class":105},"    \u002F\u002F     6              8                    14\n",[95,80984,80985],{"class":97,"line":1605},[95,80986,80987],{"class":105},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[95,80989,80990],{"class":97,"line":1610},[95,80991,80849],{"class":105},[95,80993,80994],{"class":97,"line":1624},[95,80995,80854],{"class":105},[95,80997,80998],{"class":97,"line":1629},[95,80999,80835],{"class":105},[95,81001,81002],{"class":97,"line":1635},[95,81003,80863],{"class":105},[95,81005,81006],{"class":97,"line":1656},[95,81007,80868],{"class":105},[95,81009,81010],{"class":97,"line":1661},[95,81011,80967],{"class":105},[95,81013,81014],{"class":97,"line":1675},[95,81015,81016],{"class":105},"    \u002F\u002F     10             1                     11\n",[95,81018,81019],{"class":97,"line":1680},[95,81020,80977],{"class":105},[95,81022,81023],{"class":97,"line":1709},[95,81024,81025],{"class":105},"    \u002F\u002F     11             5                    16\n",[95,81027,81028],{"class":97,"line":1714},[95,81029,80977],{"class":105},[95,81031,81032],{"class":97,"line":1731},[95,81033,81034],{"class":105},"    \u002F\u002F     16             8                    24\n",[95,81036,81037],{"class":97,"line":1736},[95,81038,81039],{"class":105},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[95,81041,81042],{"class":97,"line":1741},[95,81043,80877],{"class":105},[95,81045,81046],{"class":97,"line":1746},[95,81047,80882],{"class":105},[95,81049,81050],{"class":97,"line":1760},[95,81051,80887],{"class":105},[95,81053,81054,81056,81058],{"class":97,"line":1765},[95,81055,52394],{"class":105},[95,81057,51790],{"class":51277},[95,81059,51284],{"class":105},[95,81061,81062,81064,81066],{"class":97,"line":2559},[95,81063,51762],{"class":105},[95,81065,51777],{"class":51277},[95,81067,51284],{"class":105},[22893,81069,81071],{"id":81070},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[10,81073,81074],{},[1444,81075],{"alt":14,"src":81076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[86,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",[92,81081,81082,81090,81098,81103,81108,81113,81118,81122,81127,81132,81137,81142,81147,81152,81156,81161,81165,81170,81178],{"__ignoreMap":14},[95,81083,81084,81086,81088],{"class":97,"line":98},[95,81085,1016],{"class":105},[95,81087,51777],{"class":51277},[95,81089,51284],{"class":105},[95,81091,81092,81094,81096],{"class":97,"line":15},[95,81093,52121],{"class":105},[95,81095,51790],{"class":51277},[95,81097,51284],{"class":105},[95,81099,81100],{"class":97,"line":1161},[95,81101,81102],{"class":105},"    const arr = [\n",[95,81104,81105],{"class":97,"line":1176},[95,81106,81107],{"class":105},"      { name: '张三', salary: 10000 },\n",[95,81109,81110],{"class":97,"line":1182},[95,81111,81112],{"class":105},"      { name: '李四', salary: 10000 },\n",[95,81114,81115],{"class":97,"line":1196},[95,81116,81117],{"class":105},"      { name: '王五', salary: 10000 }\n",[95,81119,81120],{"class":97,"line":1202},[95,81121,53086],{"class":105},[95,81123,81124],{"class":97,"line":1293},[95,81125,81126],{"class":105},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[95,81128,81129],{"class":97,"line":1299},[95,81130,81131],{"class":105},"    \u002F\u002F prev是累计值\n",[95,81133,81134],{"class":97,"line":1311},[95,81135,81136],{"class":105},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[95,81138,81139],{"class":97,"line":1594},[95,81140,81141],{"class":105},"    console.log(total)\n",[95,81143,81144],{"class":97,"line":1599},[95,81145,81146],{"class":105},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[95,81148,81149],{"class":97,"line":1605},[95,81150,81151],{"class":105},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[95,81153,81154],{"class":97,"line":1610},[95,81155,81146],{"class":105},[95,81157,81158],{"class":97,"line":1624},[95,81159,81160],{"class":105},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[95,81162,81163],{"class":97,"line":1629},[95,81164,81146],{"class":105},[95,81166,81167],{"class":97,"line":1635},[95,81168,81169],{"class":105},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[95,81171,81172,81174,81176],{"class":97,"line":1656},[95,81173,52394],{"class":105},[95,81175,51790],{"class":51277},[95,81177,51284],{"class":105},[95,81179,81180,81182,81184],{"class":97,"line":1661},[95,81181,51762],{"class":105},[95,81183,51777],{"class":51277},[95,81185,51284],{"class":105},[22893,81187,81189],{"id":81188},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[10,81191,81192],{},[1444,81193],{"alt":14,"src":81194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[10,81196,81197],{},[1444,81198],{"alt":14,"src":81199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[49,81201,81202],{},[52,81203,81204],{},"find()",[10,81206,81207],{},"循环查找，找到第一个就ok",[10,81209,81210],{},[344,81211,81214],{"href":81212,"rel":81213},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23849],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[86,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",[92,81219,81220,81225,81230],{"__ignoreMap":14},[95,81221,81222],{"class":97,"line":98},[95,81223,81224],{"class":105},"const array1 = [5, 12, 8, 130, 44]\n",[95,81226,81227],{"class":97,"line":15},[95,81228,81229],{"class":105},"const found = array1.find((element) => element > 10)\n",[95,81231,81232],{"class":97,"line":1161},[95,81233,81234],{"class":105},"console.log(found)  \u002F\u002F12\n",[10,81236,81237,81239,81240,81245,81246,81249,81250,81252,81253,81258,81259,81261,81262,81264,81265,81267,81268],{},[92,81238,81204],{}," 方法是一个",[344,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",[23849],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[92,81247,81248],{},"callbackFn"," 函数，直到 ",[92,81251,81248],{}," 返回一个",[344,81254,81257],{"href":81255,"rel":81256},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23849],"真值","。然后 ",[92,81260,81204],{}," 返回该元素并停止迭代数组。如果 ",[92,81263,81248],{}," 从未返回真值，则 ",[92,81266,81204],{}," 返回 ",[92,81269,81270],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[86,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",[92,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},[95,81277,81278,81280,81282],{"class":97,"line":98},[95,81279,1016],{"class":105},[95,81281,51777],{"class":51277},[95,81283,51284],{"class":105},[95,81285,81286,81288,81290],{"class":97,"line":15},[95,81287,52121],{"class":105},[95,81289,51790],{"class":51277},[95,81291,51284],{"class":105},[95,81293,81294],{"class":97,"line":1161},[95,81295,81296],{"class":105},"    const arr = ['red', 'blue', 'green']\n",[95,81298,81299],{"class":97,"line":1176},[95,81300,81301],{"class":105},"    const found = arr.find(item => item === 'pink')\n",[95,81303,81304],{"class":97,"line":1182},[95,81305,81306],{"class":105},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[95,81308,81309],{"class":97,"line":1196},[95,81310,2382],{"emptyLinePlaceholder":21},[95,81312,81313],{"class":97,"line":1202},[95,81314,81315],{"class":105},"    \u002F\u002F 使用场景，用于查找数据\n",[95,81317,81318],{"class":97,"line":1293},[95,81319,81320],{"class":105},"    const arr1 = [\n",[95,81322,81323],{"class":97,"line":1299},[95,81324,79363],{"class":105},[95,81326,81327],{"class":97,"line":1311},[95,81328,81329],{"class":105},"        name: '小米',\n",[95,81331,81332],{"class":97,"line":1594},[95,81333,81334],{"class":105},"        price: 1999\n",[95,81336,81337],{"class":97,"line":1599},[95,81338,77869],{"class":105},[95,81340,81341],{"class":97,"line":1605},[95,81342,79363],{"class":105},[95,81344,81345],{"class":97,"line":1610},[95,81346,81347],{"class":105},"        name: '华为',\n",[95,81349,81350],{"class":97,"line":1624},[95,81351,81352],{"class":105},"        price: 3999\n",[95,81354,81355],{"class":97,"line":1629},[95,81356,52375],{"class":105},[95,81358,81359],{"class":97,"line":1635},[95,81360,53086],{"class":105},[95,81362,81363],{"class":97,"line":1656},[95,81364,81365],{"class":105},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[95,81367,81368],{"class":97,"line":1661},[95,81369,81370],{"class":105},"    \u002F\u002F const found1 = arr1.find(item => {\n",[95,81372,81373],{"class":97,"line":1675},[95,81374,81375],{"class":105},"    \u002F\u002F   if (item.name === '小米') {\n",[95,81377,81378],{"class":97,"line":1680},[95,81379,81380],{"class":105},"    \u002F\u002F     return item\n",[95,81382,81383],{"class":97,"line":1709},[95,81384,81385],{"class":105},"    \u002F\u002F   }\n",[95,81387,81388],{"class":97,"line":1714},[95,81389,63267],{"class":105},[95,81391,81392],{"class":97,"line":1731},[95,81393,81394],{"class":105},"    \u002F\u002F 另一种写法\n",[95,81396,81397],{"class":97,"line":1736},[95,81398,81399],{"class":105},"    const found1 = arr1.find(item => {\n",[95,81401,81402],{"class":97,"line":1741},[95,81403,81404],{"class":105},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[95,81406,81407],{"class":97,"line":1746},[95,81408,81409],{"class":105},"      return item.name = '小米'\n",[95,81411,81412],{"class":97,"line":1760},[95,81413,33446],{"class":105},[95,81415,81416],{"class":97,"line":1765},[95,81417,81418],{"class":105},"    console.log(found1)\n",[95,81420,81421,81423,81425],{"class":97,"line":2559},[95,81422,52394],{"class":105},[95,81424,51790],{"class":51277},[95,81426,51284],{"class":105},[95,81428,81429,81431,81433],{"class":97,"line":2573},[95,81430,51762],{"class":105},[95,81432,51777],{"class":51277},[95,81434,51284],{"class":105},[10,81436,81437],{},[1444,81438],{"alt":14,"src":81439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[10,81441,81442],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[49,81444,81445],{"start":15},[52,81446,81447],{},"every()返回的是布尔值",[10,81449,81450],{},[344,81451,81454],{"href":81452,"rel":81453},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23849],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[10,81456,81457],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[10,81459,81460],{},"some是只有有一个就没问题",[10,81462,81463],{},"every是必须全是才行",[86,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",[92,81470,81471,81487,81501,81505,81514],{"__ignoreMap":14},[95,81472,81473,81475,81478,81480,81482,81485],{"class":97,"line":98},[95,81474,54426],{"class":101},[95,81476,81477],{"class":105}," isBigEnough(element, ",[95,81479,74035],{"class":101},[95,81481,12418],{"class":105},[95,81483,81484],{"class":101},"array",[95,81486,12425],{"class":105},[95,81488,81489,81492,81495,81497,81499],{"class":97,"line":15},[95,81490,81491],{"class":101},"  return",[95,81493,81494],{"class":105}," element ",[95,81496,1692],{"class":101},[95,81498,2020],{"class":154},[95,81500,1272],{"class":105},[95,81502,81503],{"class":97,"line":1161},[95,81504,1547],{"class":105},[95,81506,81507,81510,81512],{"class":97,"line":1176},[95,81508,81509],{"class":105},"[12, 5, 8, 130, 44].every(isBigEnough); ",[95,81511,33314],{"class":101},[95,81513,54493],{"class":105},[95,81515,81516,81519,81521],{"class":97,"line":1182},[95,81517,81518],{"class":105},"[12, 54, 18, 130, 44].every(isBigEnough); ",[95,81520,33314],{"class":101},[95,81522,57917],{"class":105},[86,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",[92,81527,81528,81536,81544,81549,81553,81558,81563,81571],{"__ignoreMap":14},[95,81529,81530,81532,81534],{"class":97,"line":98},[95,81531,1016],{"class":105},[95,81533,51777],{"class":51277},[95,81535,51284],{"class":105},[95,81537,81538,81540,81542],{"class":97,"line":15},[95,81539,52121],{"class":105},[95,81541,51790],{"class":51277},[95,81543,51284],{"class":105},[95,81545,81546],{"class":97,"line":1161},[95,81547,81548],{"class":105},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[95,81550,81551],{"class":97,"line":1176},[95,81552,78299],{"class":105},[95,81554,81555],{"class":97,"line":1182},[95,81556,81557],{"class":105},"    const flag = arr.every(item => item >= 10)\n",[95,81559,81560],{"class":97,"line":1196},[95,81561,81562],{"class":105},"    console.log(flag)    \u002F\u002Ftrue\n",[95,81564,81565,81567,81569],{"class":97,"line":1202},[95,81566,52394],{"class":105},[95,81568,51790],{"class":51277},[95,81570,51284],{"class":105},[95,81572,81573,81575,81577],{"class":97,"line":1293},[95,81574,51762],{"class":105},[95,81576,51777],{"class":51277},[95,81578,51284],{"class":105},[86,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",[92,81583,81584,81592,81600,81604,81609,81614,81619,81627],{"__ignoreMap":14},[95,81585,81586,81588,81590],{"class":97,"line":98},[95,81587,1016],{"class":105},[95,81589,51777],{"class":51277},[95,81591,51284],{"class":105},[95,81593,81594,81596,81598],{"class":97,"line":15},[95,81595,52121],{"class":105},[95,81597,51790],{"class":51277},[95,81599,51284],{"class":105},[95,81601,81602],{"class":97,"line":1161},[95,81603,81548],{"class":105},[95,81605,81606],{"class":97,"line":1176},[95,81607,81608],{"class":105},"    const arr = [10, 0, 5]\n",[95,81610,81611],{"class":97,"line":1182},[95,81612,81613],{"class":105},"    const flag = arr.some(item => item >= 10)\n",[95,81615,81616],{"class":97,"line":1196},[95,81617,81618],{"class":105},"    console.log(flag)   \u002F\u002Ftrue\n",[95,81620,81621,81623,81625],{"class":97,"line":1202},[95,81622,52394],{"class":105},[95,81624,51790],{"class":51277},[95,81626,51284],{"class":105},[95,81628,81629,81631,81633],{"class":97,"line":1293},[95,81630,51762],{"class":105},[95,81632,51777],{"class":51277},[95,81634,51284],{"class":105},[22893,81636,81638],{"id":81637},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[10,81640,81641],{},[1444,81642],{"alt":14,"src":81643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[86,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",[92,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},[95,81650,81651,81653,81655,81657],{"class":97,"line":98},[95,81652,51274],{"class":105},[95,81654,51278],{"class":51277},[95,81656,51281],{"class":1945},[95,81658,51284],{"class":105},[95,81660,81661,81663,81665,81667,81669,81671],{"class":97,"line":15},[95,81662,1016],{"class":105},[95,81664,50612],{"class":51277},[95,81666,51293],{"class":1945},[95,81668,151],{"class":105},[95,81670,51298],{"class":210},[95,81672,51284],{"class":105},[95,81674,81675],{"class":97,"line":1161},[95,81676,2382],{"emptyLinePlaceholder":21},[95,81678,81679,81681,81683],{"class":97,"line":1176},[95,81680,1016],{"class":105},[95,81682,51311],{"class":51277},[95,81684,51284],{"class":105},[95,81686,81687,81689,81691,81693,81695,81697],{"class":97,"line":1182},[95,81688,52121],{"class":105},[95,81690,51321],{"class":51277},[95,81692,51324],{"class":1945},[95,81694,151],{"class":105},[95,81696,51329],{"class":210},[95,81698,51284],{"class":105},[95,81700,81701,81703,81705,81707,81709,81711,81713,81715,81717],{"class":97,"line":1196},[95,81702,52121],{"class":105},[95,81704,51321],{"class":51277},[95,81706,14903],{"class":1945},[95,81708,151],{"class":105},[95,81710,51368],{"class":210},[95,81712,51348],{"class":1945},[95,81714,151],{"class":105},[95,81716,51375],{"class":210},[95,81718,51284],{"class":105},[95,81720,81721,81723,81725,81727,81729],{"class":97,"line":1202},[95,81722,52121],{"class":105},[95,81724,51384],{"class":51277},[95,81726,51387],{"class":105},[95,81728,51384],{"class":51277},[95,81730,51284],{"class":105},[95,81732,81733,81735,81737],{"class":97,"line":1293},[95,81734,52121],{"class":105},[95,81736,5109],{"class":51277},[95,81738,51284],{"class":105},[95,81740,81741,81744],{"class":97,"line":1299},[95,81742,81743],{"class":51277},"    div",[95,81745,15555],{"class":105},[95,81747,81748,81750,81752,81754,81756],{"class":97,"line":1311},[95,81749,54748],{"class":154},[95,81751,51414],{"class":105},[95,81753,1704],{"class":154},[95,81755,51469],{"class":101},[95,81757,1272],{"class":105},[95,81759,81760,81762,81764,81766,81768],{"class":97,"line":1594},[95,81761,54762],{"class":154},[95,81763,51414],{"class":105},[95,81765,507],{"class":154},[95,81767,51469],{"class":101},[95,81769,1272],{"class":105},[95,81771,81772,81774,81776,81778,81780],{"class":97,"line":1599},[95,81773,57336],{"class":154},[95,81775,51414],{"class":105},[95,81777,507],{"class":154},[95,81779,51469],{"class":101},[95,81781,1272],{"class":105},[95,81783,81784,81786,81788,81790,81792],{"class":97,"line":1605},[95,81785,65110],{"class":154},[95,81787,51414],{"class":105},[95,81789,604],{"class":154},[95,81791,51469],{"class":101},[95,81793,1272],{"class":105},[95,81795,81796,81798,81800,81802],{"class":97,"line":1610},[95,81797,57263],{"class":154},[95,81799,51414],{"class":105},[95,81801,51569],{"class":154},[95,81803,1272],{"class":105},[95,81805,81806,81808,81810,81812],{"class":97,"line":1624},[95,81807,54861],{"class":154},[95,81809,51414],{"class":105},[95,81811,51622],{"class":154},[95,81813,1272],{"class":105},[95,81815,81816],{"class":97,"line":1629},[95,81817,2169],{"class":105},[95,81819,81820,81822,81824],{"class":97,"line":1635},[95,81821,52394],{"class":105},[95,81823,5109],{"class":51277},[95,81825,51284],{"class":105},[95,81827,81828,81830,81832],{"class":97,"line":1656},[95,81829,51762],{"class":105},[95,81831,51311],{"class":51277},[95,81833,51284],{"class":105},[95,81835,81836],{"class":97,"line":1661},[95,81837,2382],{"emptyLinePlaceholder":21},[95,81839,81840,81842,81844],{"class":97,"line":1675},[95,81841,1016],{"class":105},[95,81843,51777],{"class":51277},[95,81845,51284],{"class":105},[95,81847,81848,81850,81852,81854,81856],{"class":97,"line":1680},[95,81849,52121],{"class":105},[95,81851,51588],{"class":51277},[95,81853,55291],{"class":105},[95,81855,51588],{"class":51277},[95,81857,51284],{"class":105},[95,81859,81860,81862,81864],{"class":97,"line":1709},[95,81861,52121],{"class":105},[95,81863,51790],{"class":51277},[95,81865,51284],{"class":105},[95,81867,81868,81870,81873,81875,81878,81881,81883,81886],{"class":97,"line":1714},[95,81869,11204],{"class":101},[95,81871,81872],{"class":154}," spec",[95,81874,13547],{"class":101},[95,81876,81877],{"class":105}," { size: ",[95,81879,81880],{"class":210},"'40cm*40cm'",[95,81882,55441],{"class":105},[95,81884,81885],{"class":210},"'黑色'",[95,81887,55581],{"class":105},[95,81889,81890],{"class":97,"line":1731},[95,81891,81892],{"class":164},"    \u002F\u002F const arr = Object.values(spec)\n",[95,81894,81895],{"class":97,"line":1736},[95,81896,81897],{"class":164},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[95,81899,81900,81902,81904,81906,81909,81911,81913,81916,81919,81922,81924,81926,81929],{"class":97,"line":1741},[95,81901,52384],{"class":105},[95,81903,54376],{"class":1945},[95,81905,106],{"class":105},[95,81907,81908],{"class":210},"'div'",[95,81910,74226],{"class":105},[95,81912,151],{"class":101},[95,81914,81915],{"class":105}," Object.",[95,81917,81918],{"class":1945},"values",[95,81920,81921],{"class":105},"(spec).",[95,81923,74200],{"class":1945},[95,81925,106],{"class":105},[95,81927,81928],{"class":210},"'\u002F'",[95,81930,112],{"class":105},[95,81932,81933,81935,81937],{"class":97,"line":1746},[95,81934,52394],{"class":105},[95,81936,51790],{"class":51277},[95,81938,51284],{"class":105},[95,81940,81941,81943,81945],{"class":97,"line":1760},[95,81942,51762],{"class":105},[95,81944,51777],{"class":51277},[95,81946,51284],{"class":105},[95,81948,81949],{"class":97,"line":1765},[95,81950,2382],{"emptyLinePlaceholder":21},[95,81952,81953,81955,81957],{"class":97,"line":2559},[95,81954,51762],{"class":105},[95,81956,50612],{"class":51277},[95,81958,51284],{"class":105},[10,81960,81961],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22893,81963,81965],{"id":81964},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[10,81967,81968],{},"静态方法，将伪数组转换为真数组",[10,81970,81971],{},[1444,81972],{"alt":14,"src":81973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[86,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",[92,81978,81979,81987,81995,82007,82019,82031,82039,82047,82052,82057,82062,82067,82075],{"__ignoreMap":14},[95,81980,81981,81983,81985],{"class":97,"line":98},[95,81982,1016],{"class":105},[95,81984,51777],{"class":51277},[95,81986,51284],{"class":105},[95,81988,81989,81991,81993],{"class":97,"line":15},[95,81990,52121],{"class":105},[95,81992,1113],{"class":51277},[95,81994,51284],{"class":105},[95,81996,81997,81999,82001,82003,82005],{"class":97,"line":1161},[95,81998,51318],{"class":105},[95,82000,52],{"class":51277},[95,82002,55291],{"class":105},[95,82004,52],{"class":51277},[95,82006,51284],{"class":105},[95,82008,82009,82011,82013,82015,82017],{"class":97,"line":1176},[95,82010,51318],{"class":105},[95,82012,52],{"class":51277},[95,82014,55291],{"class":105},[95,82016,52],{"class":51277},[95,82018,51284],{"class":105},[95,82020,82021,82023,82025,82027,82029],{"class":97,"line":1182},[95,82022,51318],{"class":105},[95,82024,52],{"class":51277},[95,82026,55291],{"class":105},[95,82028,52],{"class":51277},[95,82030,51284],{"class":105},[95,82032,82033,82035,82037],{"class":97,"line":1196},[95,82034,52394],{"class":105},[95,82036,1113],{"class":51277},[95,82038,51284],{"class":105},[95,82040,82041,82043,82045],{"class":97,"line":1202},[95,82042,52121],{"class":105},[95,82044,51790],{"class":51277},[95,82046,51284],{"class":105},[95,82048,82049],{"class":97,"line":1293},[95,82050,82051],{"class":105},"    const lis = document.querySelectorAll('li')\n",[95,82053,82054],{"class":97,"line":1299},[95,82055,82056],{"class":105},"    const liss = Array.from(lis)\n",[95,82058,82059],{"class":97,"line":1311},[95,82060,82061],{"class":105},"    liss.pop()\n",[95,82063,82064],{"class":97,"line":1594},[95,82065,82066],{"class":105},"    console.log(liss)\n",[95,82068,82069,82071,82073],{"class":97,"line":1599},[95,82070,52394],{"class":105},[95,82072,51790],{"class":51277},[95,82074,51284],{"class":105},[95,82076,82077,82079,82081],{"class":97,"line":1605},[95,82078,51762],{"class":105},[95,82080,51777],{"class":51277},[95,82082,51284],{"class":105},[10,82084,82085],{},[1444,82086],{"alt":14,"src":82087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21981,82089,82091],{"id":82090},"_41053-string","4.10.5.3 String",[10,82093,82094],{},[1444,82095],{"alt":14,"src":82096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22893,82098,82100],{"id":82099},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[86,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",[92,82105,82106,82114,82122,82127,82132,82137,82141,82146,82151,82156,82164],{"__ignoreMap":14},[95,82107,82108,82110,82112],{"class":97,"line":98},[95,82109,1016],{"class":105},[95,82111,51777],{"class":51277},[95,82113,51284],{"class":105},[95,82115,82116,82118,82120],{"class":97,"line":15},[95,82117,52121],{"class":105},[95,82119,51790],{"class":51277},[95,82121,51284],{"class":105},[95,82123,82124],{"class":97,"line":1161},[95,82125,82126],{"class":105},"    \u002F\u002F 把字符串转化为数组\n",[95,82128,82129],{"class":97,"line":1176},[95,82130,82131],{"class":105},"    const str = 'pink,red'\n",[95,82133,82134],{"class":97,"line":1182},[95,82135,82136],{"class":105},"    const arr = str.split(',')\n",[95,82138,82139],{"class":97,"line":1196},[95,82140,80615],{"class":105},[95,82142,82143],{"class":97,"line":1202},[95,82144,82145],{"class":105},"    const str1 = '2025-8-25'\n",[95,82147,82148],{"class":97,"line":1293},[95,82149,82150],{"class":105},"    const arr1 = str1.split('-')\n",[95,82152,82153],{"class":97,"line":1299},[95,82154,82155],{"class":105},"    console.log(arr1)\n",[95,82157,82158,82160,82162],{"class":97,"line":1311},[95,82159,52394],{"class":105},[95,82161,51790],{"class":51277},[95,82163,51284],{"class":105},[95,82165,82166,82168,82170],{"class":97,"line":1594},[95,82167,51762],{"class":105},[95,82169,51777],{"class":51277},[95,82171,51284],{"class":105},[22893,82173,82175],{"id":82174},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[10,82177,5164],{},[10,82179,82180],{},"substring(indexStart)",[10,82182,82183],{},"substring(indexStart, indexEnd)",[1113,82185,82186,82197,82209,82219],{},[52,82187,82188,82189,82192,82193,82196],{},"如果省略了 ",[92,82190,82191],{},"indexEnd","，则 ",[92,82194,82195],{},"substring()"," 提取字符直到字符串的末尾",[52,82198,82199,82200,82203,82204,82192,82206,82208],{},"如果 ",[92,82201,82202],{},"indexStart"," 等于 ",[92,82205,82191],{},[92,82207,82195],{}," 返回一个空字符串",[52,82210,82199,82211,82213,82214,82192,82216,82218],{},[92,82212,82202],{}," 大于 ",[92,82215,82191],{},[92,82217,82195],{}," 的效果就像交换了这两个参数一样",[52,82220,82221],{},"结束的索引号不包含想要截取的部分",[86,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",[92,82226,82227,82239,82243,82277,82307,82311,82342,82346,82373,82403,82433,82437,82468],{"__ignoreMap":14},[95,82228,82229,82232,82234,82237],{"class":97,"line":98},[95,82230,82231],{"class":105},"const anyString ",[95,82233,151],{"class":101},[95,82235,82236],{"class":210}," \"Mozilla\"",[95,82238,1272],{"class":105},[95,82240,82241],{"class":97,"line":15},[95,82242,2382],{"emptyLinePlaceholder":21},[95,82244,82245,82248,82250,82252,82254,82257,82259,82262,82264,82266,82268,82270,82272,82274],{"class":97,"line":1161},[95,82246,82247],{"class":154},"console",[95,82249,664],{"class":105},[95,82251,58224],{"class":154},[95,82253,106],{"class":105},[95,82255,82256],{"class":154},"anyString",[95,82258,664],{"class":105},[95,82260,82261],{"class":154},"substring",[95,82263,106],{"class":105},[95,82265,297],{"class":154},[95,82267,12418],{"class":105},[95,82269,323],{"class":154},[95,82271,75230],{"class":105},[95,82273,33314],{"class":101},[95,82275,82276],{"class":210}," 'M'\n",[95,82278,82279,82281,82283,82285,82287,82289,82291,82293,82295,82297,82299,82301,82303,82305],{"class":97,"line":1176},[95,82280,82247],{"class":154},[95,82282,664],{"class":105},[95,82284,58224],{"class":154},[95,82286,106],{"class":105},[95,82288,82256],{"class":154},[95,82290,664],{"class":105},[95,82292,82261],{"class":154},[95,82294,106],{"class":105},[95,82296,323],{"class":154},[95,82298,12418],{"class":105},[95,82300,297],{"class":154},[95,82302,75230],{"class":105},[95,82304,33314],{"class":101},[95,82306,82276],{"class":210},[95,82308,82309],{"class":97,"line":1182},[95,82310,2382],{"emptyLinePlaceholder":21},[95,82312,82313,82315,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339],{"class":97,"line":1196},[95,82314,82247],{"class":154},[95,82316,664],{"class":105},[95,82318,58224],{"class":154},[95,82320,106],{"class":105},[95,82322,82256],{"class":154},[95,82324,664],{"class":105},[95,82326,82261],{"class":154},[95,82328,106],{"class":105},[95,82330,297],{"class":154},[95,82332,12418],{"class":105},[95,82334,450],{"class":154},[95,82336,75230],{"class":105},[95,82338,33314],{"class":101},[95,82340,82341],{"class":210}," 'Mozill'\n",[95,82343,82344],{"class":97,"line":1202},[95,82345,2382],{"emptyLinePlaceholder":21},[95,82347,82348,82350,82352,82354,82356,82358,82360,82362,82364,82366,82368,82370],{"class":97,"line":1293},[95,82349,82247],{"class":154},[95,82351,664],{"class":105},[95,82353,58224],{"class":154},[95,82355,106],{"class":105},[95,82357,82256],{"class":154},[95,82359,664],{"class":105},[95,82361,82261],{"class":154},[95,82363,106],{"class":105},[95,82365,399],{"class":154},[95,82367,75230],{"class":105},[95,82369,33314],{"class":101},[95,82371,82372],{"class":210}," 'lla'\n",[95,82374,82375,82377,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401],{"class":97,"line":1299},[95,82376,82247],{"class":154},[95,82378,664],{"class":105},[95,82380,58224],{"class":154},[95,82382,106],{"class":105},[95,82384,82256],{"class":154},[95,82386,664],{"class":105},[95,82388,82261],{"class":154},[95,82390,106],{"class":105},[95,82392,399],{"class":154},[95,82394,12418],{"class":105},[95,82396,475],{"class":154},[95,82398,75286],{"class":105},[95,82400,33314],{"class":101},[95,82402,82372],{"class":210},[95,82404,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431],{"class":97,"line":1311},[95,82406,82247],{"class":154},[95,82408,664],{"class":105},[95,82410,58224],{"class":154},[95,82412,106],{"class":105},[95,82414,82256],{"class":154},[95,82416,664],{"class":105},[95,82418,82261],{"class":154},[95,82420,106],{"class":105},[95,82422,475],{"class":154},[95,82424,12418],{"class":105},[95,82426,399],{"class":154},[95,82428,75230],{"class":105},[95,82430,33314],{"class":101},[95,82432,82372],{"class":210},[95,82434,82435],{"class":97,"line":1594},[95,82436,2382],{"emptyLinePlaceholder":21},[95,82438,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465],{"class":97,"line":1599},[95,82440,82247],{"class":154},[95,82442,664],{"class":105},[95,82444,58224],{"class":154},[95,82446,106],{"class":105},[95,82448,82256],{"class":154},[95,82450,664],{"class":105},[95,82452,82261],{"class":154},[95,82454,106],{"class":105},[95,82456,297],{"class":154},[95,82458,12418],{"class":105},[95,82460,475],{"class":154},[95,82462,75230],{"class":105},[95,82464,33314],{"class":101},[95,82466,82467],{"class":210}," 'Mozilla'\n",[95,82469,82470,82472,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496],{"class":97,"line":1605},[95,82471,82247],{"class":154},[95,82473,664],{"class":105},[95,82475,58224],{"class":154},[95,82477,106],{"class":105},[95,82479,82256],{"class":154},[95,82481,664],{"class":105},[95,82483,82261],{"class":154},[95,82485,106],{"class":105},[95,82487,297],{"class":154},[95,82489,12418],{"class":105},[95,82491,552],{"class":154},[95,82493,75230],{"class":105},[95,82495,33314],{"class":101},[95,82497,82467],{"class":210},[22893,82499,82501],{"id":82500},"_410533-startswith","4.10.5.3.3 startsWith",[10,82503,82504,82507,82508,82513,82514,82516,82517],{},[92,82505,82506],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[255,82509,82510],{},[92,82511,82512],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[92,82515,1344],{}," 或 ",[92,82518,65997],{},[86,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",[92,82523,82524,82536,82555,82560,82580],{"__ignoreMap":14},[95,82525,82526,82528,82531,82533],{"class":97,"line":98},[95,82527,6775],{"class":101},[95,82529,82530],{"class":105}," str1 ",[95,82532,151],{"class":101},[95,82534,82535],{"class":210}," \"Saturday night plans\"\n",[95,82537,82538,82540,82542,82545,82548,82550,82553],{"class":97,"line":15},[95,82539,77509],{"class":105},[95,82541,58224],{"class":1945},[95,82543,82544],{"class":105},"(str1.",[95,82546,82547],{"class":1945},"startsWith",[95,82549,106],{"class":105},[95,82551,82552],{"class":210},"\"Sat\"",[95,82554,30482],{"class":105},[95,82556,82557],{"class":97,"line":1161},[95,82558,82559],{"class":164},"\u002F\u002F Expected output: true\n",[95,82561,82562,82564,82566,82568,82570,82572,82574,82576,82578],{"class":97,"line":1176},[95,82563,77509],{"class":105},[95,82565,58224],{"class":1945},[95,82567,82544],{"class":105},[95,82569,82547],{"class":1945},[95,82571,106],{"class":105},[95,82573,82552],{"class":210},[95,82575,12418],{"class":105},[95,82577,177],{"class":154},[95,82579,30482],{"class":105},[95,82581,82582],{"class":97,"line":1182},[95,82583,82584],{"class":164},"\u002F\u002F Expected output: false\n",[86,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",[92,82589,82590,82595,82600,82604,82609,82614],{"__ignoreMap":14},[95,82591,82592],{"class":97,"line":98},[95,82593,82594],{"class":105},"startsWith(searchString)\n",[95,82596,82597],{"class":97,"line":15},[95,82598,82599],{"class":105},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[95,82601,82602],{"class":97,"line":1161},[95,82603,2382],{"emptyLinePlaceholder":21},[95,82605,82606],{"class":97,"line":1176},[95,82607,82608],{"class":105},"const str3 = 'pink老师上课中'\n",[95,82610,82611],{"class":97,"line":1182},[95,82612,82613],{"class":105},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[95,82615,82616],{"class":97,"line":1196},[95,82617,82618],{"class":105},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22893,82620,82622],{"id":82621},"_410534-includes","4.10.5.3.4 includes",[10,82624,82625],{},"includes(searchString) includes(searchString, position)",[49,82627,82628],{},[52,82629,82630],{},"searchString:",[10,82632,82633,82634,82636,82637,82642,82643,82648,82649,21483,82652,82655,82656,82659],{},"一个要在 ",[92,82635,1281],{}," 中查找的字符串。",[344,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",[23849],"不能是正则表达式","。所有非正则表达式的值都会被",[344,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",[23849],"强制转换为字符串","，因此如果该参数被省略或传入 ",[92,82650,82651],{},"undefined",[92,82653,82654],{},"includes()"," 方法会在字符串中搜索 ",[92,82657,82658],{},"\"undefined\"","，这通常不是你想要的",[49,82661,82662],{"start":15},[52,82663,82664,965],{},[92,82665,82666],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[10,82668,82669,82670,82673,82674],{},"在字符串中开始搜索 ",[92,82671,82672],{},"searchString"," 的位置。默认值为 ",[92,82675,297],{},[49,82677,82678],{"start":1161},[52,82679,82680],{},"返回值：",[10,82682,82683,82684,82686,82687,82691,82692],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[92,82685,82672],{}," 为空字符串的情况），则返回 ",[255,82688,82689],{},[92,82690,1344],{}," ，否则返回 ",[255,82693,82694],{},[92,82695,65997],{},[49,82697,82698],{"start":1176},[52,82699,82700],{},"异常：",[10,82702,82199,82703,13778,82705,82709],{},[92,82704,82672],{},[344,82706,82708],{"href":82639,"rel":82707},[23849],"是一个正则表达式","，则会抛出",[10,82711,82712],{},"只要是有就是true，不需要非得以谁开头结尾",[86,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",[92,82717,82718,82729,82752,82771,82791,82813,82832],{"__ignoreMap":14},[95,82719,82720,82722,82724,82726],{"class":97,"line":98},[95,82721,6775],{"class":101},[95,82723,79752],{"class":105},[95,82725,151],{"class":101},[95,82727,82728],{"class":210}," \"To be, or not to be, that is the question.\"\n",[95,82730,82731,82733,82735,82738,82741,82743,82746,82749],{"class":97,"line":15},[95,82732,77509],{"class":105},[95,82734,58224],{"class":1945},[95,82736,82737],{"class":105},"(str.",[95,82739,82740],{"class":1945},"includes",[95,82742,106],{"class":105},[95,82744,82745],{"class":210},"\"To be\"",[95,82747,82748],{"class":105},"))",[95,82750,82751],{"class":164},"  \u002F\u002F true\n",[95,82753,82754,82756,82758,82760,82762,82764,82767,82769],{"class":97,"line":1161},[95,82755,77509],{"class":105},[95,82757,58224],{"class":1945},[95,82759,82737],{"class":105},[95,82761,82740],{"class":1945},[95,82763,106],{"class":105},[95,82765,82766],{"class":210},"\"question\"",[95,82768,82748],{"class":105},[95,82770,82751],{"class":164},[95,82772,82773,82775,82777,82779,82781,82783,82786,82788],{"class":97,"line":1176},[95,82774,77509],{"class":105},[95,82776,58224],{"class":1945},[95,82778,82737],{"class":105},[95,82780,82740],{"class":1945},[95,82782,106],{"class":105},[95,82784,82785],{"class":210},"\"nonexistent\"",[95,82787,82748],{"class":105},[95,82789,82790],{"class":164},"  \u002F\u002F false\n",[95,82792,82793,82795,82797,82799,82801,82803,82805,82807,82809,82811],{"class":97,"line":1182},[95,82794,77509],{"class":105},[95,82796,58224],{"class":1945},[95,82798,82737],{"class":105},[95,82800,82740],{"class":1945},[95,82802,106],{"class":105},[95,82804,82745],{"class":210},[95,82806,12418],{"class":105},[95,82808,323],{"class":154},[95,82810,82748],{"class":105},[95,82812,82790],{"class":164},[95,82814,82815,82817,82819,82821,82823,82825,82828,82830],{"class":97,"line":1196},[95,82816,77509],{"class":105},[95,82818,58224],{"class":1945},[95,82820,82737],{"class":105},[95,82822,82740],{"class":1945},[95,82824,106],{"class":105},[95,82826,82827],{"class":210},"\"TO BE\"",[95,82829,82748],{"class":105},[95,82831,82790],{"class":164},[95,82833,82834,82836,82838,82840,82842,82844,82846,82848],{"class":97,"line":1202},[95,82835,77509],{"class":105},[95,82837,58224],{"class":1945},[95,82839,82737],{"class":105},[95,82841,82740],{"class":1945},[95,82843,106],{"class":105},[95,82845,7635],{"class":210},[95,82847,82748],{"class":105},[95,82849,82751],{"class":164},[22893,82851,82853],{"id":82852},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[86,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",[92,82858,82859,82867,82875,82880,82885,82890,82895,82900,82908],{"__ignoreMap":14},[95,82860,82861,82863,82865],{"class":97,"line":98},[95,82862,1016],{"class":105},[95,82864,51777],{"class":51277},[95,82866,51284],{"class":105},[95,82868,82869,82871,82873],{"class":97,"line":15},[95,82870,52121],{"class":105},[95,82872,51790],{"class":51277},[95,82874,51284],{"class":105},[95,82876,82877],{"class":97,"line":1161},[95,82878,82879],{"class":105},"    const num = 10\n",[95,82881,82882],{"class":97,"line":1176},[95,82883,82884],{"class":105},"    \u002F\u002F 强制转换\n",[95,82886,82887],{"class":97,"line":1182},[95,82888,82889],{"class":105},"    console.log(String(num))\n",[95,82891,82892],{"class":97,"line":1196},[95,82893,82894],{"class":105},"    \u002F\u002F toString()方法转换\n",[95,82896,82897],{"class":97,"line":1202},[95,82898,82899],{"class":105},"    console.log(num.toString())\n",[95,82901,82902,82904,82906],{"class":97,"line":1293},[95,82903,52394],{"class":105},[95,82905,51790],{"class":51277},[95,82907,51284],{"class":105},[95,82909,82910,82912,82914],{"class":97,"line":1299},[95,82911,51762],{"class":105},[95,82913,51777],{"class":51277},[95,82915,51284],{"class":105},[22893,82917,82919],{"id":82918},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[10,82921,82922],{},[1444,82923],{"alt":14,"src":82924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[86,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",[92,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},[95,82931,82932,82934,82936,82938],{"class":97,"line":98},[95,82933,51274],{"class":105},[95,82935,51278],{"class":51277},[95,82937,51281],{"class":1945},[95,82939,51284],{"class":105},[95,82941,82942,82944,82946,82948,82950,82952],{"class":97,"line":15},[95,82943,1016],{"class":105},[95,82945,50612],{"class":51277},[95,82947,51293],{"class":1945},[95,82949,151],{"class":105},[95,82951,51298],{"class":210},[95,82953,51284],{"class":105},[95,82955,82956],{"class":97,"line":1161},[95,82957,2382],{"emptyLinePlaceholder":21},[95,82959,82960,82962,82964],{"class":97,"line":1176},[95,82961,1016],{"class":105},[95,82963,51311],{"class":51277},[95,82965,51284],{"class":105},[95,82967,82968,82970,82972,82974,82976,82978],{"class":97,"line":1182},[95,82969,52121],{"class":105},[95,82971,51321],{"class":51277},[95,82973,51324],{"class":1945},[95,82975,151],{"class":105},[95,82977,51329],{"class":210},[95,82979,51284],{"class":105},[95,82981,82982,82984,82986,82988,82990,82992,82994,82996,82998],{"class":97,"line":1196},[95,82983,52121],{"class":105},[95,82985,51321],{"class":51277},[95,82987,14903],{"class":1945},[95,82989,151],{"class":105},[95,82991,51368],{"class":210},[95,82993,51348],{"class":1945},[95,82995,151],{"class":105},[95,82997,51375],{"class":210},[95,82999,51284],{"class":105},[95,83001,83002,83004,83006,83008,83010],{"class":97,"line":1202},[95,83003,52121],{"class":105},[95,83005,51384],{"class":51277},[95,83007,51387],{"class":105},[95,83009,51384],{"class":51277},[95,83011,51284],{"class":105},[95,83013,83014,83016,83018],{"class":97,"line":1293},[95,83015,51762],{"class":105},[95,83017,51311],{"class":51277},[95,83019,51284],{"class":105},[95,83021,83022],{"class":97,"line":1299},[95,83023,2382],{"emptyLinePlaceholder":21},[95,83025,83026,83028,83030],{"class":97,"line":1311},[95,83027,1016],{"class":105},[95,83029,51777],{"class":51277},[95,83031,51284],{"class":105},[95,83033,83034,83036,83038,83040,83042],{"class":97,"line":1594},[95,83035,52121],{"class":105},[95,83037,51588],{"class":51277},[95,83039,55291],{"class":105},[95,83041,51588],{"class":51277},[95,83043,51284],{"class":105},[95,83045,83046,83048,83050],{"class":97,"line":1599},[95,83047,52121],{"class":105},[95,83049,51790],{"class":51277},[95,83051,51284],{"class":105},[95,83053,83054,83056,83059,83061],{"class":97,"line":1605},[95,83055,11204],{"class":101},[95,83057,83058],{"class":154}," gift",[95,83060,13547],{"class":101},[95,83062,83063],{"class":210}," '50g的茶叶，清洗球'\n",[95,83065,83066],{"class":97,"line":1610},[95,83067,83068],{"class":164},"    \u002F\u002F 1.把字符串拆分为数组\n",[95,83070,83071],{"class":97,"line":1624},[95,83072,83073],{"class":164},"    \u002F\u002F console.log(gift.split(','))\n",[95,83075,83076],{"class":97,"line":1629},[95,83077,83078],{"class":164},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[95,83080,83081,83083,83085,83087,83090,83093,83095,83098,83100,83102,83104,83106,83108,83111,83113,83116,83118,83120,83122,83124],{"class":97,"line":1635},[95,83082,11204],{"class":101},[95,83084,73896],{"class":154},[95,83086,13547],{"class":101},[95,83088,83089],{"class":105}," gift.",[95,83091,83092],{"class":1945},"split",[95,83094,106],{"class":105},[95,83096,83097],{"class":210},"'，'",[95,83099,30811],{"class":105},[95,83101,74021],{"class":1945},[95,83103,106],{"class":105},[95,83105,79772],{"class":5199},[95,83107,79775],{"class":101},[95,83109,83110],{"class":210}," `\u003Cspan>【赠品】${",[95,83112,79772],{"class":105},[95,83114,83115],{"class":210},"}\u003C\u002Fspan>\u003Cbr>`",[95,83117,30811],{"class":105},[95,83119,74200],{"class":1945},[95,83121,106],{"class":105},[95,83123,74205],{"class":210},[95,83125,112],{"class":105},[95,83127,83128,83130,83132,83134,83136,83138,83140],{"class":97,"line":1656},[95,83129,52384],{"class":105},[95,83131,54376],{"class":1945},[95,83133,106],{"class":105},[95,83135,81908],{"class":210},[95,83137,74226],{"class":105},[95,83139,151],{"class":101},[95,83141,73962],{"class":105},[95,83143,83144,83146,83148],{"class":97,"line":1661},[95,83145,52394],{"class":105},[95,83147,51790],{"class":51277},[95,83149,51284],{"class":105},[95,83151,83152,83154,83156],{"class":97,"line":1675},[95,83153,51762],{"class":105},[95,83155,51777],{"class":51277},[95,83157,51284],{"class":105},[95,83159,83160],{"class":97,"line":1680},[95,83161,2382],{"emptyLinePlaceholder":21},[95,83163,83164,83166,83168],{"class":97,"line":1709},[95,83165,51762],{"class":105},[95,83167,50612],{"class":51277},[95,83169,51284],{"class":105},[21981,83171,83173],{"id":83172},"_41054-number","4.10.5.4 Number",[10,83175,83176],{},[1444,83177],{"alt":14,"src":83178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[10,83180,83181],{},"整数也可以进行toFixed来保留小数",[10,83183,83184],{},"比如：",[10,83186,83187],{},"const price=10",[10,83189,83190],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21981,83192,83194],{"id":83193},"_41055-购物车展示","4.10.5.5 购物车展示",[10,83196,83197],{},[1444,83198],{"alt":14,"src":83199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[86,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",[92,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},[95,83206,83207,83209,83211,83213],{"class":97,"line":98},[95,83208,51274],{"class":105},[95,83210,51278],{"class":51277},[95,83212,51281],{"class":1945},[95,83214,51284],{"class":105},[95,83216,83217,83219,83221,83223,83225,83227],{"class":97,"line":15},[95,83218,1016],{"class":105},[95,83220,50612],{"class":51277},[95,83222,51293],{"class":1945},[95,83224,151],{"class":105},[95,83226,51298],{"class":210},[95,83228,51284],{"class":105},[95,83230,83231],{"class":97,"line":1161},[95,83232,2382],{"emptyLinePlaceholder":21},[95,83234,83235,83237,83239],{"class":97,"line":1176},[95,83236,1016],{"class":105},[95,83238,51311],{"class":51277},[95,83240,51284],{"class":105},[95,83242,83243,83245,83247,83249,83251,83253],{"class":97,"line":1182},[95,83244,52121],{"class":105},[95,83246,51321],{"class":51277},[95,83248,51324],{"class":1945},[95,83250,151],{"class":105},[95,83252,51329],{"class":210},[95,83254,51284],{"class":105},[95,83256,83257,83259,83261,83263,83265,83267,83269,83271,83273],{"class":97,"line":1196},[95,83258,52121],{"class":105},[95,83260,51321],{"class":51277},[95,83262,14903],{"class":1945},[95,83264,151],{"class":105},[95,83266,51368],{"class":210},[95,83268,51348],{"class":1945},[95,83270,151],{"class":105},[95,83272,51375],{"class":210},[95,83274,51284],{"class":105},[95,83276,83277,83279,83281,83283,83285],{"class":97,"line":1202},[95,83278,52121],{"class":105},[95,83280,51384],{"class":51277},[95,83282,51387],{"class":105},[95,83284,51384],{"class":51277},[95,83286,51284],{"class":105},[95,83288,83289,83291,83293],{"class":97,"line":1293},[95,83290,52121],{"class":105},[95,83292,5109],{"class":51277},[95,83294,51284],{"class":105},[95,83296,83297,83299],{"class":97,"line":1299},[95,83298,6386],{"class":51277},[95,83300,15555],{"class":105},[95,83302,83303,83305,83307,83309],{"class":97,"line":1311},[95,83304,54672],{"class":154},[95,83306,51414],{"class":105},[95,83308,297],{"class":154},[95,83310,1272],{"class":105},[95,83312,83313,83315,83317,83319],{"class":97,"line":1594},[95,83314,54683],{"class":154},[95,83316,51414],{"class":105},[95,83318,297],{"class":154},[95,83320,1272],{"class":105},[95,83322,83323,83325,83327,83329],{"class":97,"line":1599},[95,83324,72573],{"class":154},[95,83326,51414],{"class":105},[95,83328,60482],{"class":154},[95,83330,1272],{"class":105},[95,83332,83333],{"class":97,"line":1605},[95,83334,2169],{"class":105},[95,83336,83337],{"class":97,"line":1610},[95,83338,2382],{"emptyLinePlaceholder":21},[95,83340,83341,83343],{"class":97,"line":1624},[95,83342,62100],{"class":1945},[95,83344,15555],{"class":105},[95,83346,83347,83349,83351,83353,83355],{"class":97,"line":1629},[95,83348,54748],{"class":154},[95,83350,51414],{"class":105},[95,83352,78551],{"class":154},[95,83354,51469],{"class":101},[95,83356,1272],{"class":105},[95,83358,83359,83361,83363,83365,83367,83369],{"class":97,"line":1635},[95,83360,54683],{"class":154},[95,83362,51414],{"class":105},[95,83364,417],{"class":154},[95,83366,51469],{"class":101},[95,83368,51533],{"class":154},[95,83370,1272],{"class":105},[95,83372,83373],{"class":97,"line":1656},[95,83374,2169],{"class":105},[95,83376,83377],{"class":97,"line":1661},[95,83378,2382],{"emptyLinePlaceholder":21},[95,83380,83381,83383],{"class":97,"line":1675},[95,83382,78602],{"class":1945},[95,83384,15555],{"class":105},[95,83386,83387,83389,83391,83393,83395],{"class":97,"line":1680},[95,83388,54672],{"class":154},[95,83390,51414],{"class":105},[95,83392,681],{"class":154},[95,83394,51469],{"class":101},[95,83396,1272],{"class":105},[95,83398,83399,83401,83403,83405,83407,83409,83411],{"class":97,"line":1709},[95,83400,61837],{"class":154},[95,83402,51414],{"class":105},[95,83404,28106],{"class":154},[95,83406,78657],{"class":154},[95,83408,78660],{"class":154},[95,83410,801],{"class":101},[95,83412,1272],{"class":105},[95,83414,83415,83417,83419,83421],{"class":97,"line":1714},[95,83416,54986],{"class":154},[95,83418,51414],{"class":105},[95,83420,51454],{"class":154},[95,83422,1272],{"class":105},[95,83424,83425,83427,83429,83431,83433,83435,83437],{"class":97,"line":1731},[95,83426,61954],{"class":154},[95,83428,51414],{"class":105},[95,83430,323],{"class":154},[95,83432,51469],{"class":101},[95,83434,51498],{"class":154},[95,83436,62221],{"class":154},[95,83438,1272],{"class":105},[95,83440,83441],{"class":97,"line":1736},[95,83442,2169],{"class":105},[95,83444,83445],{"class":97,"line":1741},[95,83446,2382],{"emptyLinePlaceholder":21},[95,83448,83449,83451],{"class":97,"line":1746},[95,83450,78720],{"class":1945},[95,83452,15555],{"class":105},[95,83454,83455,83457,83459,83461],{"class":97,"line":1760},[95,83456,62002],{"class":154},[95,83458,51414],{"class":105},[95,83460,62007],{"class":154},[95,83462,1272],{"class":105},[95,83464,83465,83467,83469,83471],{"class":97,"line":1765},[95,83466,54861],{"class":154},[95,83468,51414],{"class":105},[95,83470,61795],{"class":154},[95,83472,1272],{"class":105},[95,83474,83475],{"class":97,"line":2559},[95,83476,2169],{"class":105},[95,83478,83479],{"class":97,"line":2573},[95,83480,2382],{"emptyLinePlaceholder":21},[95,83482,83483,83485,83487],{"class":97,"line":2581},[95,83484,78602],{"class":1945},[95,83486,55592],{"class":51277},[95,83488,15555],{"class":105},[95,83490,83491,83493,83495,83497,83499],{"class":97,"line":2586},[95,83492,54748],{"class":154},[95,83494,51414],{"class":105},[95,83496,718],{"class":154},[95,83498,51469],{"class":101},[95,83500,1272],{"class":105},[95,83502,83503,83505,83507,83509,83511],{"class":97,"line":2592},[95,83504,54762],{"class":154},[95,83506,51414],{"class":105},[95,83508,718],{"class":154},[95,83510,51469],{"class":101},[95,83512,1272],{"class":105},[95,83514,83515,83517,83519,83521,83523],{"class":97,"line":2598},[95,83516,61727],{"class":154},[95,83518,51414],{"class":105},[95,83520,425],{"class":154},[95,83522,51469],{"class":101},[95,83524,1272],{"class":105},[95,83526,83527],{"class":97,"line":2603},[95,83528,2169],{"class":105},[95,83530,83531],{"class":97,"line":7931},[95,83532,2382],{"emptyLinePlaceholder":21},[95,83534,83535,83537,83539],{"class":97,"line":7955},[95,83536,78602],{"class":1945},[95,83538,62281],{"class":1945},[95,83540,15555],{"class":105},[95,83542,83543,83545,83547,83549,83551],{"class":97,"line":7960},[95,83544,54748],{"class":154},[95,83546,51414],{"class":105},[95,83548,1704],{"class":154},[95,83550,51469],{"class":101},[95,83552,1272],{"class":105},[95,83554,83555],{"class":97,"line":7966},[95,83556,2169],{"class":105},[95,83558,83559],{"class":97,"line":7993},[95,83560,2382],{"emptyLinePlaceholder":21},[95,83562,83563,83565,83567,83570],{"class":97,"line":7998},[95,83564,78602],{"class":1945},[95,83566,62281],{"class":1945},[95,83568,83569],{"class":1945}," .tag",[95,83571,15555],{"class":105},[95,83573,83574,83576,83578,83580],{"class":97,"line":8004},[95,83575,54986],{"class":154},[95,83577,51414],{"class":105},[95,83579,60846],{"class":154},[95,83581,1272],{"class":105},[95,83583,83584,83586,83588,83590,83592],{"class":97,"line":8016},[95,83585,54672],{"class":154},[95,83587,51414],{"class":105},[95,83589,183],{"class":154},[95,83591,51469],{"class":101},[95,83593,1272],{"class":105},[95,83595,83596,83598,83600,83602,83604],{"class":97,"line":8028},[95,83597,54899],{"class":154},[95,83599,51414],{"class":105},[95,83601,604],{"class":154},[95,83603,51469],{"class":101},[95,83605,1272],{"class":105},[95,83607,83608,83610,83612,83614],{"class":97,"line":8040},[95,83609,57393],{"class":154},[95,83611,51414],{"class":105},[95,83613,62047],{"class":154},[95,83615,1272],{"class":105},[95,83617,83618],{"class":97,"line":9699},[95,83619,2169],{"class":105},[95,83621,83622],{"class":97,"line":9724},[95,83623,2382],{"emptyLinePlaceholder":21},[95,83625,83626,83628,83630],{"class":97,"line":9747},[95,83627,78602],{"class":1945},[95,83629,78894],{"class":1945},[95,83631,31451],{"class":105},[95,83633,83634,83636,83639],{"class":97,"line":9771},[95,83635,78602],{"class":1945},[95,83637,83638],{"class":1945}," .sub-total",[95,83640,15555],{"class":105},[95,83642,83643,83645,83647,83649,83651],{"class":97,"line":9776},[95,83644,54899],{"class":154},[95,83646,51414],{"class":105},[95,83648,756],{"class":154},[95,83650,51469],{"class":101},[95,83652,1272],{"class":105},[95,83654,83655,83657,83659,83661],{"class":97,"line":9781},[95,83656,57393],{"class":154},[95,83658,51414],{"class":105},[95,83660,78917],{"class":154},[95,83662,1272],{"class":105},[95,83664,83665,83667,83669,83671],{"class":97,"line":9786},[95,83666,61814],{"class":154},[95,83668,51414],{"class":105},[95,83670,323],{"class":154},[95,83672,1272],{"class":105},[95,83674,83675],{"class":97,"line":9795},[95,83676,2169],{"class":105},[95,83678,83679],{"class":97,"line":9800},[95,83680,2382],{"emptyLinePlaceholder":21},[95,83682,83683,83685,83687],{"class":97,"line":9806},[95,83684,78602],{"class":1945},[95,83686,78934],{"class":1945},[95,83688,31451],{"class":105},[95,83690,83691,83693,83696],{"class":97,"line":9827},[95,83692,78602],{"class":1945},[95,83694,83695],{"class":1945}," .sub-total::before",[95,83697,31451],{"class":105},[95,83699,83700,83703],{"class":97,"line":9833},[95,83701,83702],{"class":1945},"    .amount::before",[95,83704,15555],{"class":105},[95,83706,83707,83709,83711,83713],{"class":97,"line":9847},[95,83708,78941],{"class":154},[95,83710,51414],{"class":105},[95,83712,78946],{"class":210},[95,83714,1272],{"class":105},[95,83716,83717,83719,83721,83723,83725],{"class":97,"line":9853},[95,83718,54899],{"class":154},[95,83720,51414],{"class":105},[95,83722,604],{"class":154},[95,83724,51469],{"class":101},[95,83726,1272],{"class":105},[95,83728,83729],{"class":97,"line":9880},[95,83730,2169],{"class":105},[95,83732,83733],{"class":97,"line":9889},[95,83734,2382],{"emptyLinePlaceholder":21},[95,83736,83737,83739,83742],{"class":97,"line":9895},[95,83738,78602],{"class":1945},[95,83740,83741],{"class":1945}," .spec",[95,83743,15555],{"class":105},[95,83745,83746,83748,83750,83752],{"class":97,"line":9903},[95,83747,61814],{"class":154},[95,83749,51414],{"class":105},[95,83751,183],{"class":154},[95,83753,1272],{"class":105},[95,83755,83756,83758,83760,83763],{"class":97,"line":9908},[95,83757,57393],{"class":154},[95,83759,51414],{"class":105},[95,83761,83762],{"class":154},"#888",[95,83764,1272],{"class":105},[95,83766,83767,83769,83771,83773,83775],{"class":97,"line":16587},[95,83768,54899],{"class":154},[95,83770,51414],{"class":105},[95,83772,655],{"class":154},[95,83774,51469],{"class":101},[95,83776,1272],{"class":105},[95,83778,83779,83781,83783,83785,83787],{"class":97,"line":16593},[95,83780,61977],{"class":154},[95,83782,51414],{"class":105},[95,83784,806],{"class":154},[95,83786,51469],{"class":101},[95,83788,1272],{"class":105},[95,83790,83791],{"class":97,"line":16616},[95,83792,2169],{"class":105},[95,83794,83795],{"class":97,"line":16622},[95,83796,2382],{"emptyLinePlaceholder":21},[95,83798,83799,83801,83804],{"class":97,"line":16645},[95,83800,78602],{"class":1945},[95,83802,83803],{"class":1945}," .count",[95,83805,15555],{"class":105},[95,83807,83808,83810,83812,83814],{"class":97,"line":16659},[95,83809,61814],{"class":154},[95,83811,51414],{"class":105},[95,83813,323],{"class":154},[95,83815,1272],{"class":105},[95,83817,83818,83820,83822,83825],{"class":97,"line":16679},[95,83819,57393],{"class":154},[95,83821,51414],{"class":105},[95,83823,83824],{"class":154},"#aaa",[95,83826,1272],{"class":105},[95,83828,83829],{"class":97,"line":16685},[95,83830,2169],{"class":105},[95,83832,83833],{"class":97,"line":16696},[95,83834,2382],{"emptyLinePlaceholder":21},[95,83836,83837,83839],{"class":97,"line":16719},[95,83838,72452],{"class":1945},[95,83840,15555],{"class":105},[95,83842,83843,83845,83847,83849,83851],{"class":97,"line":16741},[95,83844,54748],{"class":154},[95,83846,51414],{"class":105},[95,83848,78551],{"class":154},[95,83850,51469],{"class":101},[95,83852,1272],{"class":105},[95,83854,83855,83857,83859,83861,83863],{"class":97,"line":16746},[95,83856,54683],{"class":154},[95,83858,51414],{"class":105},[95,83860,297],{"class":154},[95,83862,51533],{"class":154},[95,83864,1272],{"class":105},[95,83866,83867,83869,83871,83873],{"class":97,"line":16752},[95,83868,54986],{"class":154},[95,83870,51414],{"class":105},[95,83872,51454],{"class":154},[95,83874,1272],{"class":105},[95,83876,83877,83879,83881,83883],{"class":97,"line":16766},[95,83878,54997],{"class":154},[95,83880,51414],{"class":105},[95,83882,51557],{"class":154},[95,83884,1272],{"class":105},[95,83886,83887,83890,83892,83894,83896,83898,83901],{"class":97,"line":16779},[95,83888,83889],{"class":154},"      border-top",[95,83891,51414],{"class":105},[95,83893,323],{"class":154},[95,83895,51469],{"class":101},[95,83897,51498],{"class":154},[95,83899,83900],{"class":154}," #4e4e4e",[95,83902,1272],{"class":105},[95,83904,83905,83907,83909,83911,83913],{"class":97,"line":16784},[95,83906,54672],{"class":154},[95,83908,51414],{"class":105},[95,83910,806],{"class":154},[95,83912,51469],{"class":101},[95,83914,1272],{"class":105},[95,83916,83917],{"class":97,"line":16798},[95,83918,2169],{"class":105},[95,83920,83921],{"class":97,"line":16803},[95,83922,2382],{"emptyLinePlaceholder":21},[95,83924,83925,83927,83930],{"class":97,"line":16809},[95,83926,72452],{"class":1945},[95,83928,83929],{"class":1945}," .amount",[95,83931,15555],{"class":105},[95,83933,83934,83936,83938,83940,83942],{"class":97,"line":16814},[95,83935,54899],{"class":154},[95,83937,51414],{"class":105},[95,83939,756],{"class":154},[95,83941,51469],{"class":101},[95,83943,1272],{"class":105},[95,83945,83946,83948,83950,83952],{"class":97,"line":16828},[95,83947,57393],{"class":154},[95,83949,51414],{"class":105},[95,83951,78917],{"class":154},[95,83953,1272],{"class":105},[95,83955,83956,83958,83960,83962],{"class":97,"line":16833},[95,83957,62311],{"class":154},[95,83959,51414],{"class":105},[95,83961,51466],{"class":154},[95,83963,1272],{"class":105},[95,83965,83966,83968,83970,83972,83974],{"class":97,"line":16838},[95,83967,61727],{"class":154},[95,83969,51414],{"class":105},[95,83971,762],{"class":154},[95,83973,51469],{"class":101},[95,83975,1272],{"class":105},[95,83977,83978],{"class":97,"line":16852},[95,83979,2169],{"class":105},[95,83981,83982,83984,83986],{"class":97,"line":16864},[95,83983,52394],{"class":105},[95,83985,5109],{"class":51277},[95,83987,51284],{"class":105},[95,83989,83990,83992,83994],{"class":97,"line":16869},[95,83991,51762],{"class":105},[95,83993,51311],{"class":51277},[95,83995,51284],{"class":105},[95,83997,83998],{"class":97,"line":16882},[95,83999,2382],{"emptyLinePlaceholder":21},[95,84001,84002,84004,84006],{"class":97,"line":16887},[95,84003,1016],{"class":105},[95,84005,51777],{"class":51277},[95,84007,51284],{"class":105},[95,84009,84010,84012,84014,84016,84018,84020],{"class":97,"line":16892},[95,84011,52121],{"class":105},[95,84013,51588],{"class":51277},[95,84015,53463],{"class":1945},[95,84017,151],{"class":105},[95,84019,62585],{"class":210},[95,84021,51284],{"class":105},[95,84023,84024,84026,84028],{"class":97,"line":16897},[95,84025,52394],{"class":105},[95,84027,51588],{"class":51277},[95,84029,51284],{"class":105},[95,84031,84032,84034,84036,84038,84040,84042],{"class":97,"line":16910},[95,84033,52121],{"class":105},[95,84035,51588],{"class":51277},[95,84037,53463],{"class":1945},[95,84039,151],{"class":105},[95,84041,62557],{"class":210},[95,84043,51284],{"class":105},[95,84045,84046,84048,84050,84053,84055,84057,84059,84062,84064,84066,84068,84070],{"class":97,"line":16915},[95,84047,51318],{"class":105},[95,84049,51588],{"class":51277},[95,84051,84052],{"class":105},">合计：\u003C",[95,84054,95],{"class":51277},[95,84056,53463],{"class":1945},[95,84058,151],{"class":105},[95,84060,84061],{"class":210},"\"amount\"",[95,84063,55291],{"class":105},[95,84065,95],{"class":51277},[95,84067,55291],{"class":105},[95,84069,51588],{"class":51277},[95,84071,51284],{"class":105},[95,84073,84074,84076,84078],{"class":97,"line":32618},[95,84075,52394],{"class":105},[95,84077,51588],{"class":51277},[95,84079,51284],{"class":105},[95,84081,84082,84084,84086],{"class":97,"line":32624},[95,84083,52121],{"class":105},[95,84085,51790],{"class":51277},[95,84087,51284],{"class":105},[95,84089,84090,84092,84094,84096],{"class":97,"line":32630},[95,84091,11204],{"class":101},[95,84093,79354],{"class":154},[95,84095,13547],{"class":101},[95,84097,55424],{"class":105},[95,84099,84100],{"class":97,"line":32636},[95,84101,79363],{"class":105},[95,84103,84104,84106,84108],{"class":97,"line":32642},[95,84105,79368],{"class":105},[95,84107,79371],{"class":210},[95,84109,31451],{"class":105},[95,84111,84112,84114,84116],{"class":97,"line":32653},[95,84113,79378],{"class":105},[95,84115,79381],{"class":210},[95,84117,31451],{"class":105},[95,84119,84120,84122,84125],{"class":97,"line":32659},[95,84121,79388],{"class":105},[95,84123,84124],{"class":154},"289.9",[95,84126,31451],{"class":105},[95,84128,84129,84131,84133],{"class":97,"line":32679},[95,84130,79398],{"class":105},[95,84132,79401],{"class":210},[95,84134,31451],{"class":105},[95,84136,84137,84140,84142],{"class":97,"line":32685},[95,84138,84139],{"class":105},"        count: ",[95,84141,183],{"class":154},[95,84143,31451],{"class":105},[95,84145,84146,84149,84152],{"class":97,"line":32696},[95,84147,84148],{"class":105},"        spec: { color: ",[95,84150,84151],{"class":210},"'白色'",[95,84153,55581],{"class":105},[95,84155,84156],{"class":97,"line":32702},[95,84157,77869],{"class":105},[95,84159,84160],{"class":97,"line":32708},[95,84161,79363],{"class":105},[95,84163,84164,84166,84168],{"class":97,"line":32714},[95,84165,79368],{"class":105},[95,84167,79462],{"class":210},[95,84169,31451],{"class":105},[95,84171,84172,84174,84176],{"class":97,"line":32720},[95,84173,79378],{"class":105},[95,84175,79471],{"class":210},[95,84177,31451],{"class":105},[95,84179,84180,84182,84185],{"class":97,"line":32726},[95,84181,79388],{"class":105},[95,84183,84184],{"class":154},"109.8",[95,84186,31451],{"class":105},[95,84188,84189,84191,84193],{"class":97,"line":32732},[95,84190,79398],{"class":105},[95,84192,79489],{"class":210},[95,84194,31451],{"class":105},[95,84196,84197,84199,84201],{"class":97,"line":32738},[95,84198,84139],{"class":105},[95,84200,177],{"class":154},[95,84202,31451],{"class":105},[95,84204,84205,84208,84210,84212,84214],{"class":97,"line":32758},[95,84206,84207],{"class":105},"        spec: { size: ",[95,84209,81880],{"class":210},[95,84211,55441],{"class":105},[95,84213,81885],{"class":210},[95,84215,55581],{"class":105},[95,84217,84218],{"class":97,"line":32764},[95,84219,77869],{"class":105},[95,84221,84222],{"class":97,"line":32780},[95,84223,79363],{"class":105},[95,84225,84226,84228,84230],{"class":97,"line":32786},[95,84227,79368],{"class":105},[95,84229,79506],{"class":210},[95,84231,31451],{"class":105},[95,84233,84234,84236,84238],{"class":97,"line":32800},[95,84235,79378],{"class":105},[95,84237,79515],{"class":210},[95,84239,31451],{"class":105},[95,84241,84242,84244,84247],{"class":97,"line":32806},[95,84243,79388],{"class":105},[95,84245,84246],{"class":154},"488",[95,84248,31451],{"class":105},[95,84250,84251,84253,84255],{"class":97,"line":32821},[95,84252,79398],{"class":105},[95,84254,79533],{"class":210},[95,84256,31451],{"class":105},[95,84258,84259,84261,84263],{"class":97,"line":32827},[95,84260,84139],{"class":105},[95,84262,323],{"class":154},[95,84264,31451],{"class":105},[95,84266,84267,84269,84272,84275,84278],{"class":97,"line":32836},[95,84268,84148],{"class":105},[95,84270,84271],{"class":210},"'青色'",[95,84273,84274],{"class":105},", sum: ",[95,84276,84277],{"class":210},"'一大四小'",[95,84279,55581],{"class":105},[95,84281,84282],{"class":97,"line":32842},[95,84283,77869],{"class":105},[95,84285,84286],{"class":97,"line":32851},[95,84287,79363],{"class":105},[95,84289,84290,84292,84294],{"class":97,"line":32857},[95,84291,79368],{"class":105},[95,84293,79550],{"class":210},[95,84295,31451],{"class":105},[95,84297,84298,84300,84302],{"class":97,"line":32863},[95,84299,79378],{"class":105},[95,84301,79559],{"class":210},[95,84303,31451],{"class":105},[95,84305,84306,84308,84311],{"class":97,"line":32872},[95,84307,79388],{"class":105},[95,84309,84310],{"class":154},"139",[95,84312,31451],{"class":105},[95,84314,84315,84317,84319],{"class":97,"line":32878},[95,84316,79398],{"class":105},[95,84318,79577],{"class":210},[95,84320,31451],{"class":105},[95,84322,84323,84325,84327],{"class":97,"line":32889},[95,84324,84139],{"class":105},[95,84326,323],{"class":154},[95,84328,31451],{"class":105},[95,84330,84331,84333,84336,84338,84341],{"class":97,"line":32895},[95,84332,84207],{"class":105},[95,84334,84335],{"class":210},"'小号'",[95,84337,55441],{"class":105},[95,84339,84340],{"class":210},"'紫色'",[95,84342,55447],{"class":105},[95,84344,84345,84348],{"class":97,"line":32914},[95,84346,84347],{"class":105},"        gift: ",[95,84349,84350],{"class":210},"'50g茶叶,清洗球'\n",[95,84352,84353],{"class":97,"line":32920},[95,84354,52375],{"class":105},[95,84356,84357],{"class":97,"line":32931},[95,84358,53086],{"class":105},[95,84360,84361],{"class":97,"line":32937},[95,84362,84363],{"class":164},"    \u002F\u002F  1.根据数据渲染页面\n",[95,84365,84366,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386,84388],{"class":97,"line":32957},[95,84367,52384],{"class":105},[95,84369,54376],{"class":1945},[95,84371,106],{"class":105},[95,84373,79878],{"class":210},[95,84375,74226],{"class":105},[95,84377,151],{"class":101},[95,84379,80025],{"class":105},[95,84381,74021],{"class":1945},[95,84383,106],{"class":105},[95,84385,79772],{"class":5199},[95,84387,79775],{"class":101},[95,84389,15555],{"class":105},[95,84391,84392],{"class":97,"line":32973},[95,84393,84394],{"class":164},"      \u002F\u002F 对象解构\n",[95,84396,84397,84399,84401,84403,84405,84407,84409,84412,84414,84416,84418,84421,84423,84426,84428,84430],{"class":97,"line":32979},[95,84398,58205],{"class":101},[95,84400,79784],{"class":105},[95,84402,79797],{"class":154},[95,84404,12418],{"class":105},[95,84406,79787],{"class":154},[95,84408,12418],{"class":105},[95,84410,84411],{"class":154},"count",[95,84413,12418],{"class":105},[95,84415,79792],{"class":154},[95,84417,12418],{"class":105},[95,84419,84420],{"class":154},"spec",[95,84422,12418],{"class":105},[95,84424,84425],{"class":154},"gift",[95,84427,79800],{"class":105},[95,84429,151],{"class":101},[95,84431,79805],{"class":105},[95,84433,84434],{"class":97,"line":32993},[95,84435,84436],{"class":164},"      \u002F\u002F 规格文字模块处理\n",[95,84438,84439,84441,84444,84446,84448,84450,84452,84454,84456,84458],{"class":97,"line":32999},[95,84440,58205],{"class":101},[95,84442,84443],{"class":154}," text",[95,84445,13547],{"class":101},[95,84447,81915],{"class":105},[95,84449,81918],{"class":1945},[95,84451,81921],{"class":105},[95,84453,74200],{"class":1945},[95,84455,106],{"class":105},[95,84457,81928],{"class":210},[95,84459,112],{"class":105},[95,84461,84462],{"class":97,"line":33005},[95,84463,84464],{"class":164},"      \u002F\u002F 处理赠品模块\n",[95,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":97,"line":33016},[95,84468,58205],{"class":101},[95,84470,73896],{"class":154},[95,84472,13547],{"class":101},[95,84474,84475],{"class":105}," gift ",[95,84477,1092],{"class":101},[95,84479,83089],{"class":105},[95,84481,83092],{"class":1945},[95,84483,106],{"class":105},[95,84485,84486],{"class":210},"','",[95,84488,30811],{"class":105},[95,84490,74021],{"class":1945},[95,84492,106],{"class":105},[95,84494,79772],{"class":5199},[95,84496,79775],{"class":101},[95,84498,84499],{"class":210}," `\u003Cspan class=\"tag\">【赠品】${",[95,84501,79772],{"class":105},[95,84503,84504],{"class":210},"}\u003C\u002Fspan>`",[95,84506,30811],{"class":105},[95,84508,74200],{"class":1945},[95,84510,106],{"class":105},[95,84512,74205],{"class":210},[95,84514,13697],{"class":105},[95,84516,965],{"class":101},[95,84518,70081],{"class":210},[95,84520,84521],{"class":97,"line":33022},[95,84522,84523],{"class":164},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[95,84525,84526,84528,84531,84533,84536,84538,84540,84542,84545,84547,84549,84551,84554,84556,84558],{"class":97,"line":33028},[95,84527,58205],{"class":101},[95,84529,84530],{"class":154}," subtotal",[95,84532,13547],{"class":101},[95,84534,84535],{"class":105}," ((price ",[95,84537,561],{"class":101},[95,84539,5737],{"class":154},[95,84541,6501],{"class":101},[95,84543,84544],{"class":105}," count) ",[95,84546,690],{"class":101},[95,84548,5737],{"class":154},[95,84550,30811],{"class":105},[95,84552,84553],{"class":1945},"toFixed",[95,84555,106],{"class":105},[95,84557,183],{"class":154},[95,84559,112],{"class":105},[95,84561,84562],{"class":97,"line":33038},[95,84563,2382],{"emptyLinePlaceholder":21},[95,84565,84566,84568],{"class":97,"line":33044},[95,84567,73959],{"class":101},[95,84569,70145],{"class":210},[95,84571,84572],{"class":97,"line":33055},[95,84573,84574],{"class":210},"        \u003Cdiv class=\"item\">\n",[95,84576,84577,84580,84582],{"class":97,"line":33061},[95,84578,84579],{"class":210},"          \u003Cimg src=\"${",[95,84581,79797],{"class":105},[95,84583,79829],{"class":210},[95,84585,84586,84589,84591,84594,84596],{"class":97,"line":33071},[95,84587,84588],{"class":210},"          \u003Cp class=\"name\">${",[95,84590,79787],{"class":105},[95,84592,84593],{"class":210},"}${",[95,84595,1281],{"class":105},[95,84597,79839],{"class":210},[95,84599,84600,84603,84605],{"class":97,"line":33076},[95,84601,84602],{"class":210},"          \u003Cp class=\"spec\">${",[95,84604,5170],{"class":105},[95,84606,79839],{"class":210},[95,84608,84609,84612,84614,84616,84618,84620,84622,84624],{"class":97,"line":33082},[95,84610,84611],{"class":210},"          \u003Cp class=\"price\">${",[95,84613,79792],{"class":105},[95,84615,664],{"class":210},[95,84617,84553],{"class":1945},[95,84619,106],{"class":210},[95,84621,183],{"class":154},[95,84623,535],{"class":210},[95,84625,79839],{"class":210},[95,84627,84628,84631,84633],{"class":97,"line":33131},[95,84629,84630],{"class":210},"          \u003Cp class=\"count\">x${",[95,84632,84411],{"class":105},[95,84634,79839],{"class":210},[95,84636,84637,84640,84643],{"class":97,"line":33178},[95,84638,84639],{"class":210},"          \u003Cp class=\"sub-total\">${",[95,84641,84642],{"class":105},"subtotal",[95,84644,79839],{"class":210},[95,84646,84647],{"class":97,"line":33183},[95,84648,84649],{"class":210},"        \u003C\u002Fdiv> \n",[95,84651,84652],{"class":97,"line":33189},[95,84653,84654],{"class":210},"             `\n",[95,84656,84657,84660,84662,84664,84666],{"class":97,"line":33208},[95,84658,84659],{"class":105},"    }).",[95,84661,74200],{"class":1945},[95,84663,106],{"class":105},[95,84665,74205],{"class":210},[95,84667,112],{"class":105},[95,84669,84670],{"class":97,"line":33214},[95,84671,84672],{"class":164},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[95,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":97,"line":33234},[95,84676,11204],{"class":101},[95,84678,62762],{"class":154},[95,84680,13547],{"class":101},[95,84682,80025],{"class":105},[95,84684,84685],{"class":1945},"reduce",[95,84687,2358],{"class":105},[95,84689,84690],{"class":5199},"prev",[95,84692,12418],{"class":105},[95,84694,79772],{"class":5199},[95,84696,13697],{"class":105},[95,84698,84699],{"class":101},"=>",[95,84701,84702],{"class":105}," prev ",[95,84704,587],{"class":101},[95,84706,84707],{"class":105}," (item.price ",[95,84709,561],{"class":101},[95,84711,5737],{"class":154},[95,84713,6501],{"class":101},[95,84715,84716],{"class":105}," item.count) ",[95,84718,690],{"class":101},[95,84720,5737],{"class":154},[95,84722,12418],{"class":105},[95,84724,297],{"class":154},[95,84726,112],{"class":105},[95,84728,84729,84731,84733,84735,84738,84740,84742,84745,84747,84749,84751],{"class":97,"line":33240},[95,84730,52384],{"class":105},[95,84732,54376],{"class":1945},[95,84734,106],{"class":105},[95,84736,84737],{"class":210},"'.amount'",[95,84739,74226],{"class":105},[95,84741,151],{"class":101},[95,84743,84744],{"class":105}," total.",[95,84746,84553],{"class":1945},[95,84748,106],{"class":105},[95,84750,183],{"class":154},[95,84752,112],{"class":105},[95,84754,84755,84757,84759],{"class":97,"line":33246},[95,84756,52394],{"class":105},[95,84758,51790],{"class":51277},[95,84760,51284],{"class":105},[95,84762,84763,84765,84767],{"class":97,"line":33256},[95,84764,51762],{"class":105},[95,84766,51777],{"class":51277},[95,84768,51284],{"class":105},[95,84770,84771],{"class":97,"line":33261},[95,84772,2382],{"emptyLinePlaceholder":21},[95,84774,84775,84777,84779],{"class":97,"line":33267},[95,84776,51762],{"class":105},[95,84778,50612],{"class":51277},[95,84780,51284],{"class":105},[37,84782,84784],{"id":84783},"_411-编程思想","4.11 编程思想",[66,84786,84788],{"id":84787},"_4111-面向过程介绍","4.11.1 面向过程介绍",[10,84790,84791,84794],{},[255,84792,84793],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[10,84796,84797],{},"调用就可以了",[10,84799,84800],{},[1444,84801],{"alt":14,"src":84802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[66,84804,84806],{"id":84805},"_4112-面向对象","4.11.2 面向对象",[10,84808,84809],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[10,84811,84812],{},[1444,84813],{"alt":14,"src":84814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[10,84816,84817],{},"面向对象的特性：",[1113,84819,84820,84823,84826],{},[52,84821,84822],{},"封装性",[52,84824,84825],{},"继承性",[52,84827,84828],{},"多态性",[66,84830,84832],{"id":84831},"_4113-两者比较","4.11.3 两者比较",[10,84834,84835],{},[1444,84836],{"alt":14,"src":84837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[37,84839,84841],{"id":84840},"_412-构造函数回顾","4.12 构造函数回顾",[10,84843,84844],{},[1444,84845],{"alt":14,"src":84846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[10,84848,84849],{},[1444,84850],{"alt":14,"src":84851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[10,84853,84854],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[10,84856,84857],{},[1444,84858],{"alt":14,"src":84859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[37,84861,84863],{"id":84862},"_413-原型","4.13 原型",[66,84865,84867],{"id":84866},"_4131-原型对象的认识","4.13.1 原型对象的认识",[10,84869,84870],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[10,84872,84873],{},[1444,84874],{"alt":14,"src":84875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[10,84877,84878],{},[1444,84879],{"alt":14,"src":84880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[10,84882,84883],{},"原型是构造函数的属性，它也是一个对象",[10,84885,84886],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[10,84888,84889],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[86,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",[92,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},[95,84896,84897,84899,84901],{"class":97,"line":98},[95,84898,1016],{"class":105},[95,84900,51777],{"class":51277},[95,84902,51284],{"class":105},[95,84904,84905],{"class":97,"line":15},[95,84906,84907],{"class":164},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[95,84909,84910,84912,84914],{"class":97,"line":1161},[95,84911,52121],{"class":105},[95,84913,51790],{"class":51277},[95,84915,51284],{"class":105},[95,84917,84918],{"class":97,"line":1176},[95,84919,84920],{"class":105},"    function Star(uname, age) {\n",[95,84922,84923],{"class":97,"line":1182},[95,84924,84925],{"class":105},"      this.uname = uname,\n",[95,84927,84928],{"class":97,"line":1196},[95,84929,84930],{"class":105},"        this.age = age\n",[95,84932,84933],{"class":97,"line":1202},[95,84934,84935],{"class":105},"      \u002F\u002F this.sing = function () {\n",[95,84937,84938],{"class":97,"line":1293},[95,84939,84940],{"class":105},"      \u002F\u002F   console.log('唱歌')\n",[95,84942,84943],{"class":97,"line":1299},[95,84944,2382],{"emptyLinePlaceholder":21},[95,84946,84947],{"class":97,"line":1311},[95,84948,60014],{"class":105},[95,84950,84951],{"class":97,"line":1594},[95,84952,2169],{"class":105},[95,84954,84955],{"class":97,"line":1599},[95,84956,84957],{"class":105},"    Star.prototype.sing = function () {\n",[95,84959,84960],{"class":97,"line":1605},[95,84961,84962],{"class":105},"      console.log('唱歌')\n",[95,84964,84965],{"class":97,"line":1610},[95,84966,2169],{"class":105},[95,84968,84969],{"class":97,"line":1624},[95,84970,84971],{"class":105},"    \u002F\u002F console.dir(Star.prototype)\n",[95,84973,84974],{"class":97,"line":1629},[95,84975,84976],{"class":105},"    const pink = new Star('pink', 18)\n",[95,84978,84979],{"class":97,"line":1635},[95,84980,84981],{"class":105},"    const red = new Star('red', 20)\n",[95,84983,84984],{"class":97,"line":1656},[95,84985,84986],{"class":105},"    pink.sing()\n",[95,84988,84989],{"class":97,"line":1661},[95,84990,84991],{"class":105},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[95,84993,84994],{"class":97,"line":1675},[95,84995,2382],{"emptyLinePlaceholder":21},[95,84997,84998,85000,85002],{"class":97,"line":1680},[95,84999,52394],{"class":105},[95,85001,51790],{"class":51277},[95,85003,51284],{"class":105},[95,85005,85006,85008,85010],{"class":97,"line":1709},[95,85007,51762],{"class":105},[95,85009,51777],{"class":51277},[95,85011,51284],{"class":105},[10,85013,85014],{},[1444,85015],{"alt":14,"src":85016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[86,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",[92,85021,85022,85030,85038,85043,85048,85053,85058,85062,85067,85072,85077,85081,85086,85090,85094,85099,85103,85111],{"__ignoreMap":14},[95,85023,85024,85026,85028],{"class":97,"line":98},[95,85025,1016],{"class":105},[95,85027,51777],{"class":51277},[95,85029,51284],{"class":105},[95,85031,85032,85034,85036],{"class":97,"line":15},[95,85033,52121],{"class":105},[95,85035,51790],{"class":51277},[95,85037,51284],{"class":105},[95,85039,85040],{"class":97,"line":1161},[95,85041,85042],{"class":105},"    let that\n",[95,85044,85045],{"class":97,"line":1176},[95,85046,85047],{"class":105},"    function Star(uname) {\n",[95,85049,85050],{"class":97,"line":1182},[95,85051,85052],{"class":105},"      this.uname = uname\n",[95,85054,85055],{"class":97,"line":1196},[95,85056,85057],{"class":105},"      that = this\n",[95,85059,85060],{"class":97,"line":1202},[95,85061,2169],{"class":105},[95,85063,85064],{"class":97,"line":1293},[95,85065,85066],{"class":105},"    \u002F\u002F 实例对象是 ldh\n",[95,85068,85069],{"class":97,"line":1299},[95,85070,85071],{"class":105},"    const ldh = new Star('刘德华')\n",[95,85073,85074],{"class":97,"line":1311},[95,85075,85076],{"class":105},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[95,85078,85079],{"class":97,"line":1594},[95,85080,2382],{"emptyLinePlaceholder":21},[95,85082,85083],{"class":97,"line":1599},[95,85084,85085],{"class":105},"    Star.sing = function () {\n",[95,85087,85088],{"class":97,"line":1605},[95,85089,84962],{"class":105},[95,85091,85092],{"class":97,"line":1610},[95,85093,2169],{"class":105},[95,85095,85096],{"class":97,"line":1624},[95,85097,85098],{"class":105},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[95,85100,85101],{"class":97,"line":1629},[95,85102,2382],{"emptyLinePlaceholder":21},[95,85104,85105,85107,85109],{"class":97,"line":1635},[95,85106,52394],{"class":105},[95,85108,51790],{"class":51277},[95,85110,51284],{"class":105},[95,85112,85113,85115,85117],{"class":97,"line":1656},[95,85114,51762],{"class":105},[95,85116,51777],{"class":51277},[95,85118,51284],{"class":105},[10,85120,85121],{},"构造函数的this指向的是实例对象；",[10,85123,85124],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[66,85126,85128],{"id":85127},"_4132-数组扩展方法","4.13.2 数组扩展方法",[10,85130,85131],{},[1444,85132],{"alt":14,"src":85133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[86,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",[92,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},[95,85140,85141,85143,85145],{"class":97,"line":98},[95,85142,1016],{"class":105},[95,85144,51777],{"class":51277},[95,85146,51284],{"class":105},[95,85148,85149,85151,85153],{"class":97,"line":15},[95,85150,52121],{"class":105},[95,85152,51790],{"class":51277},[95,85154,51284],{"class":105},[95,85156,85157],{"class":97,"line":1161},[95,85158,85159],{"class":105},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[95,85161,85162],{"class":97,"line":1176},[95,85163,85164],{"class":105},"    const arr = [1, 2, 3]\n",[95,85166,85167],{"class":97,"line":1182},[95,85168,85169],{"class":105},"    \u002F\u002F 自己定义数组的扩展方法\n",[95,85171,85172],{"class":97,"line":1196},[95,85173,85174],{"class":105},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[95,85176,85177],{"class":97,"line":1202},[95,85178,85179],{"class":105},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[95,85181,85182],{"class":97,"line":1293},[95,85183,85184],{"class":105},"    \u002F\u002F ①.最大值\n",[95,85186,85187],{"class":97,"line":1299},[95,85188,85189],{"class":105},"    Array.prototype.max = function () {\n",[95,85191,85192],{"class":97,"line":1311},[95,85193,85194],{"class":105},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[95,85196,85197],{"class":97,"line":1594},[95,85198,85199],{"class":105},"      return Math.max(...this)\n",[95,85201,85202],{"class":97,"line":1599},[95,85203,85204],{"class":105},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[95,85206,85207],{"class":97,"line":1605},[95,85208,2169],{"class":105},[95,85210,85211],{"class":97,"line":1610},[95,85212,85213],{"class":105},"    console.log(arr.max())\n",[95,85215,85216],{"class":97,"line":1624},[95,85217,85218],{"class":105},"    \u002F\u002F ②最小值\n",[95,85220,85221],{"class":97,"line":1629},[95,85222,85223],{"class":105},"    Array.prototype.min = function () {\n",[95,85225,85226],{"class":97,"line":1635},[95,85227,85228],{"class":105},"      return Math.min(...this)\n",[95,85230,85231],{"class":97,"line":1656},[95,85232,2169],{"class":105},[95,85234,85235],{"class":97,"line":1661},[95,85236,85237],{"class":105},"    console.log(arr.min())\n",[95,85239,85240],{"class":97,"line":1675},[95,85241,85242],{"class":105},"    \u002F\u002F③求和\n",[95,85244,85245],{"class":97,"line":1680},[95,85246,85247],{"class":105},"    Array.prototype.sum = function () {\n",[95,85249,85250],{"class":97,"line":1709},[95,85251,85252],{"class":105},"      return this.reduce((prev, current) => prev + current, 0)\n",[95,85254,85255],{"class":97,"line":1714},[95,85256,2169],{"class":105},[95,85258,85259],{"class":97,"line":1731},[95,85260,85261],{"class":105},"    console.log(arr.sum())\n",[95,85263,85264],{"class":97,"line":1736},[95,85265,85266],{"class":105},"    \u002F\u002F ③排序\n",[95,85268,85269],{"class":97,"line":1741},[95,85270,85271],{"class":105},"    Array.prototype.rever = function () {\n",[95,85273,85274],{"class":97,"line":1746},[95,85275,85276],{"class":105},"      return this.reverse()\n",[95,85278,85279],{"class":97,"line":1760},[95,85280,2169],{"class":105},[95,85282,85283],{"class":97,"line":1765},[95,85284,85285],{"class":105},"    console.log(arr.rever())\n",[95,85287,85288],{"class":97,"line":2559},[95,85289,2382],{"emptyLinePlaceholder":21},[95,85291,85292,85294,85296],{"class":97,"line":2573},[95,85293,52394],{"class":105},[95,85295,51790],{"class":51277},[95,85297,51284],{"class":105},[95,85299,85300,85302,85304],{"class":97,"line":2581},[95,85301,51762],{"class":105},[95,85303,51777],{"class":51277},[95,85305,51284],{"class":105},[10,85307,85308],{},[1444,85309],{"alt":14,"src":85310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[66,85312,85314],{"id":85313},"_4133-constructor-属性","4.13.3 constructor 属性",[10,85316,85317],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[10,85319,85320],{},[1444,85321],{"alt":14,"src":85322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[86,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",[92,85327,85328,85336,85344,85349,85354,85358,85363,85368,85373,85381],{"__ignoreMap":14},[95,85329,85330,85332,85334],{"class":97,"line":98},[95,85331,1016],{"class":105},[95,85333,51777],{"class":51277},[95,85335,51284],{"class":105},[95,85337,85338,85340,85342],{"class":97,"line":15},[95,85339,52121],{"class":105},[95,85341,51790],{"class":51277},[95,85343,51284],{"class":105},[95,85345,85346],{"class":97,"line":1161},[95,85347,85348],{"class":105},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[95,85350,85351],{"class":97,"line":1176},[95,85352,85353],{"class":105},"    function Star() {\n",[95,85355,85356],{"class":97,"line":1182},[95,85357,2169],{"class":105},[95,85359,85360],{"class":97,"line":1196},[95,85361,85362],{"class":105},"    const ldh = new Star()\n",[95,85364,85365],{"class":97,"line":1202},[95,85366,85367],{"class":105},"    console.log(Star.prototype)\n",[95,85369,85370],{"class":97,"line":1293},[95,85371,85372],{"class":105},"    console.log(Star.prototype.constructor === Star)\n",[95,85374,85375,85377,85379],{"class":97,"line":1299},[95,85376,52394],{"class":105},[95,85378,51790],{"class":51277},[95,85380,51284],{"class":105},[95,85382,85383,85385,85387],{"class":97,"line":1311},[95,85384,51762],{"class":105},[95,85386,51777],{"class":51277},[95,85388,51284],{"class":105},[10,85390,85391],{},[1444,85392],{"alt":14,"src":85393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[10,85395,85396],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[86,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",[92,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},[95,85403,85404,85406,85408],{"class":97,"line":98},[95,85405,52121],{"class":105},[95,85407,51790],{"class":51277},[95,85409,51284],{"class":105},[95,85411,85412],{"class":97,"line":15},[95,85413,85348],{"class":105},[95,85415,85416],{"class":97,"line":1161},[95,85417,85353],{"class":105},[95,85419,85420],{"class":97,"line":1176},[95,85421,2169],{"class":105},[95,85423,85424],{"class":97,"line":1182},[95,85425,85426],{"class":105},"    \u002F\u002F const ldh = new Star()\n",[95,85428,85429],{"class":97,"line":1196},[95,85430,85431],{"class":105},"    \u002F\u002F console.log(Star.prototype)\n",[95,85433,85434],{"class":97,"line":1202},[95,85435,85436],{"class":105},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[95,85438,85439],{"class":97,"line":1293},[95,85440,2382],{"emptyLinePlaceholder":21},[95,85442,85443],{"class":97,"line":1299},[95,85444,85445],{"class":105},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[95,85447,85448],{"class":97,"line":1311},[95,85449,85450],{"class":105},"    \u002F\u002F Star.prototype.sing = function () {\n",[95,85452,85453],{"class":97,"line":1594},[95,85454,85455],{"class":105},"    \u002F\u002F   console.log('唱歌')\n",[95,85457,85458],{"class":97,"line":1599},[95,85459,85460],{"class":105},"    \u002F\u002F }\n",[95,85462,85463],{"class":97,"line":1605},[95,85464,85465],{"class":105},"    \u002F\u002F Star.prototype.dance = function () {\n",[95,85467,85468],{"class":97,"line":1610},[95,85469,85470],{"class":105},"    \u002F\u002F   console.log('跳舞')\n",[95,85472,85473],{"class":97,"line":1624},[95,85474,85460],{"class":105},[95,85476,85477],{"class":97,"line":1629},[95,85478,85367],{"class":105},[95,85480,85481],{"class":97,"line":1635},[95,85482,85483],{"class":105},"    Star.prototype = {\n",[95,85485,85486],{"class":97,"line":1656},[95,85487,85488],{"class":105},"      sing: function () {\n",[95,85490,85491],{"class":97,"line":1661},[95,85492,85493],{"class":105},"        console.log('唱歌')\n",[95,85495,85496],{"class":97,"line":1675},[95,85497,77869],{"class":105},[95,85499,85500],{"class":97,"line":1680},[95,85501,85502],{"class":105},"      dance: function () {\n",[95,85504,85505],{"class":97,"line":1709},[95,85506,85507],{"class":105},"        console.log('跳舞')\n",[95,85509,85510],{"class":97,"line":1714},[95,85511,52375],{"class":105},[95,85513,85514],{"class":97,"line":1731},[95,85515,2169],{"class":105},[95,85517,85518],{"class":97,"line":1736},[95,85519,85367],{"class":105},[95,85521,85522,85524,85526],{"class":97,"line":1741},[95,85523,52394],{"class":105},[95,85525,51790],{"class":51277},[95,85527,51284],{"class":105},[10,85529,85530],{},"进行输出结果后会发现：",[10,85532,85533],{},[1444,85534],{"alt":14,"src":85535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[10,85537,85538],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[10,85540,85541],{},"所以，要重新指回创造这个原型对象的构造函数",[86,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",[92,85546,85547,85561,85566,85571,85582,85595,85600,85611,85625,85629],{"__ignoreMap":14},[95,85548,85549,85552,85554,85557,85559],{"class":97,"line":98},[95,85550,85551],{"class":154},"Star",[95,85553,664],{"class":105},[95,85555,85556],{"class":154},"prototype",[95,85558,13547],{"class":101},[95,85560,15555],{"class":105},[95,85562,85563],{"class":97,"line":15},[95,85564,85565],{"class":164},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[95,85567,85568],{"class":97,"line":1161},[95,85569,85570],{"class":105},"  constructor: Star,\n",[95,85572,85573,85576,85578,85580],{"class":97,"line":1176},[95,85574,85575],{"class":1945},"  sing",[95,85577,51414],{"class":105},[95,85579,54426],{"class":101},[95,85581,54429],{"class":105},[95,85583,85584,85586,85588,85590,85593],{"class":97,"line":1182},[95,85585,73730],{"class":105},[95,85587,58224],{"class":1945},[95,85589,106],{"class":105},[95,85591,85592],{"class":210},"'唱歌'",[95,85594,112],{"class":105},[95,85596,85597],{"class":97,"line":1196},[95,85598,85599],{"class":105},"   },\n",[95,85601,85602,85605,85607,85609],{"class":97,"line":1202},[95,85603,85604],{"class":1945},"   dance",[95,85606,51414],{"class":105},[95,85608,54426],{"class":101},[95,85610,54429],{"class":105},[95,85612,85613,85616,85618,85620,85623],{"class":97,"line":1293},[95,85614,85615],{"class":105},"     console.",[95,85617,58224],{"class":1945},[95,85619,106],{"class":105},[95,85621,85622],{"class":210},"'跳舞'",[95,85624,112],{"class":105},[95,85626,85627],{"class":97,"line":1299},[95,85628,4291],{"class":105},[95,85630,85631],{"class":97,"line":1311},[95,85632,1547],{"class":105},[10,85634,85635],{},[1444,85636],{"alt":14,"src":85637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[10,85639,85640],{},"总结1：",[10,85642,85643],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[10,85645,85646],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[10,85648,85649],{},"constructor指的是他的来源",[10,85651,85652],{},[1444,85653],{"alt":14,"src":85654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[10,85656,85657],{},[1444,85658],{"alt":14,"src":85659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[10,85661,85662],{},"总结2：",[10,85664,85665],{},[1444,85666],{"alt":14,"src":85667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[10,85669,85670],{},[1444,85671],{"alt":14,"src":85672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[10,85674,85675],{},[1444,85676],{"alt":14,"src":85677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[66,85679,85681],{"id":85680},"_4134-对象原型","4.13.4 对象原型",[10,85683,85684],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[10,85686,85687],{},"对象原型就是__proto__这个属性",[10,85689,85690],{},[1444,85691],{"alt":14,"src":85692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[10,85694,85695],{},[1444,85696],{"alt":14,"src":85697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[10,85699,85700],{},[1444,85701],{"alt":14,"src":85702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[10,85704,85705],{},[1444,85706],{"alt":14,"src":85707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[86,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",[92,85712,85713,85721,85729,85733,85737,85741,85746,85754],{"__ignoreMap":14},[95,85714,85715,85717,85719],{"class":97,"line":98},[95,85716,1016],{"class":105},[95,85718,51777],{"class":51277},[95,85720,51284],{"class":105},[95,85722,85723,85725,85727],{"class":97,"line":15},[95,85724,52121],{"class":105},[95,85726,51790],{"class":51277},[95,85728,51284],{"class":105},[95,85730,85731],{"class":97,"line":1161},[95,85732,85353],{"class":105},[95,85734,85735],{"class":97,"line":1176},[95,85736,2169],{"class":105},[95,85738,85739],{"class":97,"line":1182},[95,85740,85362],{"class":105},[95,85742,85743],{"class":97,"line":1196},[95,85744,85745],{"class":105},"    console.log(ldh)\n",[95,85747,85748,85750,85752],{"class":97,"line":1202},[95,85749,52394],{"class":105},[95,85751,51790],{"class":51277},[95,85753,51284],{"class":105},[95,85755,85756,85758,85760],{"class":97,"line":1293},[95,85757,51762],{"class":105},[95,85759,51777],{"class":51277},[95,85761,51284],{"class":105},[10,85763,85764],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[10,85766,85767],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[10,85769,85770],{},[1444,85771],{"alt":14,"src":85772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[10,85774,85775],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[10,85777,85778],{},"对象原型指向原型对象",[10,85780,85781],{},[1444,85782],{"alt":14,"src":85783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[10,85785,85786],{},[1444,85787],{"alt":14,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[10,85790,85791],{},[1444,85792],{"alt":14,"src":85793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[66,85795,85797],{"id":85796},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[10,85799,85800],{},[1444,85801],{"alt":14,"src":85802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[49,85804,85805,85808,85811,85814],{},[52,85806,85807],{},"构造函数通过new的形式实例化得到实例对象",[52,85809,85810],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[52,85812,85813],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[52,85815,85816],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[10,85818,85819],{},[1444,85820],{"alt":14,"src":85821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[10,85823,85824],{},"题目梳理：",[10,85826,85827],{},[1444,85828],{"alt":14,"src":85829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[66,85831,85833],{"id":85832},"_4136-原型继承","4.13.6 原型继承",[10,85835,85836],{},[1444,85837],{"alt":14,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[10,85840,85841],{},[1444,85842],{"alt":14,"src":85843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[10,85845,85846],{},[1444,85847],{"alt":14,"src":85848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[10,85850,85851],{},[1444,85852],{"alt":14,"src":85853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[10,85855,85856],{},[1444,85857],{"alt":14,"src":85858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[10,85860,85861],{},[1444,85862],{"alt":14,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[10,85865,85866],{},[1444,85867],{"alt":14,"src":85868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[10,85870,85871],{},[1444,85872],{"alt":14,"src":85873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[10,85875,85876],{},"回顾：构造函数每次new得到对象都是不同的",[66,85878,85880],{"id":85879},"_4137-原型链","4.13.7 原型链",[10,85882,85883],{},[1444,85884],{"alt":14,"src":85885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[10,85887,85888],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[10,85890,85891],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[10,85893,85894],{},"大哥是Object",[10,85896,85897],{},[1444,85898],{"alt":14,"src":85899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[10,85901,85902],{},[1444,85903],{"alt":14,"src":85904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[10,85906,85907],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[10,85909,85910],{},"万物皆对象",[66,85912,85914],{"id":85913},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[10,85916,85917],{},"模态框",[10,85919,85920],{},"以后遇见这个效果直接使用这个就行",[10,85922,85923],{},[1444,85924],{"alt":14,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[10,85927,85928],{},[1444,85929],{"alt":14,"src":85930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[10,85932,85933],{},[1444,85934],{"alt":14,"src":85935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[10,85937,85938],{},[1444,85939],{"alt":14,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[10,85942,85943],{},"补充知识点：",[49,85945,85946],{},[52,85947,85948],{},"append()",[10,85950,85951],{},[1444,85952],{"alt":14,"src":85953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[86,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",[92,85958,85959,85964,85969,85974,85978,85982,85986,85991,85996,86001,86005],{"__ignoreMap":14},[95,85960,85961],{"class":97,"line":98},[95,85962,85963],{"class":105},"append(param1)\n",[95,85965,85966],{"class":97,"line":15},[95,85967,85968],{"class":105},"append(param1, param2)\n",[95,85970,85971],{"class":97,"line":1161},[95,85972,85973],{"class":105},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[95,85975,85976],{"class":97,"line":1176},[95,85977,2382],{"emptyLinePlaceholder":21},[95,85979,85980],{"class":97,"line":1182},[95,85981,2382],{"emptyLinePlaceholder":21},[95,85983,85984],{"class":97,"line":1196},[95,85985,2382],{"emptyLinePlaceholder":21},[95,85987,85988],{"class":97,"line":1202},[95,85989,85990],{"class":105},"let div = document.createElement(\"div\");\n",[95,85992,85993],{"class":97,"line":1293},[95,85994,85995],{"class":105},"let p = document.createElement(\"p\");\n",[95,85997,85998],{"class":97,"line":1299},[95,85999,86000],{"class":105},"div.append(p);\n",[95,86002,86003],{"class":97,"line":1311},[95,86004,2382],{"emptyLinePlaceholder":21},[95,86006,86007,86010,86012],{"class":97,"line":1594},[95,86008,86009],{"class":105},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[95,86011,10],{"class":51277},[95,86013,86014],{"class":105},"> ]\n",[49,86016,86017],{"start":15},[52,86018,86019],{},"remove()",[10,86021,86022],{},"自己删自己",[10,86024,86025],{},[1444,86026],{"alt":14,"src":86027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[86,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",[92,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},[95,86034,86035,86037,86039,86041],{"class":97,"line":98},[95,86036,51274],{"class":105},[95,86038,51278],{"class":51277},[95,86040,51281],{"class":1945},[95,86042,51284],{"class":105},[95,86044,86045,86047,86049,86051,86053,86055],{"class":97,"line":15},[95,86046,1016],{"class":105},[95,86048,50612],{"class":51277},[95,86050,51293],{"class":1945},[95,86052,151],{"class":105},[95,86054,51298],{"class":210},[95,86056,51284],{"class":105},[95,86058,86059],{"class":97,"line":1161},[95,86060,2382],{"emptyLinePlaceholder":21},[95,86062,86063,86065,86067],{"class":97,"line":1176},[95,86064,1016],{"class":105},[95,86066,51311],{"class":51277},[95,86068,51284],{"class":105},[95,86070,86071,86073,86075,86077,86079,86081],{"class":97,"line":1182},[95,86072,52121],{"class":105},[95,86074,51321],{"class":51277},[95,86076,51324],{"class":1945},[95,86078,151],{"class":105},[95,86080,51329],{"class":210},[95,86082,51284],{"class":105},[95,86084,86085,86087,86089,86091,86093,86095,86097,86099,86101],{"class":97,"line":1196},[95,86086,52121],{"class":105},[95,86088,51321],{"class":51277},[95,86090,14903],{"class":1945},[95,86092,151],{"class":105},[95,86094,51368],{"class":210},[95,86096,51348],{"class":1945},[95,86098,151],{"class":105},[95,86100,51375],{"class":210},[95,86102,51284],{"class":105},[95,86104,86105,86107,86109,86111,86113],{"class":97,"line":1202},[95,86106,52121],{"class":105},[95,86108,51384],{"class":51277},[95,86110,51387],{"class":105},[95,86112,51384],{"class":51277},[95,86114,51284],{"class":105},[95,86116,86117,86119,86121],{"class":97,"line":1293},[95,86118,52121],{"class":105},[95,86120,5109],{"class":51277},[95,86122,51284],{"class":105},[95,86124,86125,86128],{"class":97,"line":1299},[95,86126,86127],{"class":1945},"    .modal",[95,86129,15555],{"class":105},[95,86131,86132,86134,86136,86138,86140],{"class":97,"line":1311},[95,86133,54748],{"class":154},[95,86135,51414],{"class":105},[95,86137,3955],{"class":154},[95,86139,51469],{"class":101},[95,86141,1272],{"class":105},[95,86143,86144,86147,86149,86151,86153],{"class":97,"line":1594},[95,86145,86146],{"class":154},"      min-height",[95,86148,51414],{"class":105},[95,86150,417],{"class":154},[95,86152,51469],{"class":101},[95,86154,1272],{"class":105},[95,86156,86157,86159,86161,86163,86165,86167,86169,86171,86173,86175,86177,86179,86181,86183,86185,86188],{"class":97,"line":1599},[95,86158,78727],{"class":154},[95,86160,51414],{"class":105},[95,86162,297],{"class":154},[95,86164,4075],{"class":154},[95,86166,2020],{"class":154},[95,86168,51469],{"class":101},[95,86170,78744],{"class":154},[95,86172,106],{"class":105},[95,86174,297],{"class":154},[95,86176,12418],{"class":105},[95,86178,297],{"class":154},[95,86180,12418],{"class":105},[95,86182,297],{"class":154},[95,86184,12418],{"class":105},[95,86186,86187],{"class":154},"0.1",[95,86189,2701],{"class":105},[95,86191,86192,86194,86196,86198,86200],{"class":97,"line":1605},[95,86193,55111],{"class":154},[95,86195,51414],{"class":105},[95,86197,399],{"class":154},[95,86199,51469],{"class":101},[95,86201,1272],{"class":105},[95,86203,86204,86206,86208,86211],{"class":97,"line":1610},[95,86205,54736],{"class":154},[95,86207,51414],{"class":105},[95,86209,86210],{"class":154},"fixed",[95,86212,1272],{"class":105},[95,86214,86215,86218,86220,86223],{"class":97,"line":1624},[95,86216,86217],{"class":154},"      z-index",[95,86219,51414],{"class":105},[95,86221,86222],{"class":154},"999",[95,86224,1272],{"class":105},[95,86226,86227,86229,86231,86233,86235],{"class":97,"line":1629},[95,86228,54815],{"class":154},[95,86230,51414],{"class":105},[95,86232,762],{"class":154},[95,86234,434],{"class":101},[95,86236,1272],{"class":105},[95,86238,86239,86241,86243,86245,86247],{"class":97,"line":1635},[95,86240,54924],{"class":154},[95,86242,51414],{"class":105},[95,86244,762],{"class":154},[95,86246,434],{"class":101},[95,86248,1272],{"class":105},[95,86250,86251,86253,86255,86257,86259,86262,86264,86266,86268,86270,86272,86274],{"class":97,"line":1656},[95,86252,78768],{"class":154},[95,86254,51414],{"class":105},[95,86256,78773],{"class":154},[95,86258,106],{"class":105},[95,86260,86261],{"class":154},"-50",[95,86263,434],{"class":101},[95,86265,12418],{"class":105},[95,86267,86261],{"class":154},[95,86269,434],{"class":101},[95,86271,12418],{"class":105},[95,86273,297],{"class":154},[95,86275,2701],{"class":105},[95,86277,86278,86280,86282,86284],{"class":97,"line":1661},[95,86279,54861],{"class":154},[95,86281,51414],{"class":105},[95,86283,60819],{"class":154},[95,86285,1272],{"class":105},[95,86287,86288],{"class":97,"line":1675},[95,86289,2169],{"class":105},[95,86291,86292],{"class":97,"line":1680},[95,86293,2382],{"emptyLinePlaceholder":21},[95,86295,86296,86298,86301],{"class":97,"line":1709},[95,86297,86127],{"class":1945},[95,86299,86300],{"class":1945}," .header",[95,86302,15555],{"class":105},[95,86304,86305,86307,86309,86311,86313],{"class":97,"line":1714},[95,86306,57336],{"class":154},[95,86308,51414],{"class":105},[95,86310,507],{"class":154},[95,86312,51469],{"class":101},[95,86314,1272],{"class":105},[95,86316,86317,86319,86321,86323,86325,86327],{"class":97,"line":1731},[95,86318,54672],{"class":154},[95,86320,51414],{"class":105},[95,86322,297],{"class":154},[95,86324,2020],{"class":154},[95,86326,51469],{"class":101},[95,86328,1272],{"class":105},[95,86330,86331,86333,86335,86337],{"class":97,"line":1736},[95,86332,54736],{"class":154},[95,86334,51414],{"class":105},[95,86336,54741],{"class":154},[95,86338,1272],{"class":105},[95,86340,86341,86343,86345,86347,86349],{"class":97,"line":1741},[95,86342,54899],{"class":154},[95,86344,51414],{"class":105},[95,86346,806],{"class":154},[95,86348,51469],{"class":101},[95,86350,1272],{"class":105},[95,86352,86353],{"class":97,"line":1746},[95,86354,2169],{"class":105},[95,86356,86357],{"class":97,"line":1760},[95,86358,2382],{"emptyLinePlaceholder":21},[95,86360,86361,86363,86365,86367],{"class":97,"line":1765},[95,86362,86127],{"class":1945},[95,86364,86300],{"class":1945},[95,86366,3014],{"class":51277},[95,86368,15555],{"class":105},[95,86370,86371,86374,86376,86378],{"class":97,"line":2559},[95,86372,86373],{"class":154},"      font-style",[95,86375,51414],{"class":105},[95,86377,63818],{"class":154},[95,86379,1272],{"class":105},[95,86381,86382,86384,86386,86388],{"class":97,"line":2573},[95,86383,57393],{"class":154},[95,86385,51414],{"class":105},[95,86387,62047],{"class":154},[95,86389,1272],{"class":105},[95,86391,86392,86394,86396,86398],{"class":97,"line":2581},[95,86393,54736],{"class":154},[95,86395,51414],{"class":105},[95,86397,54808],{"class":154},[95,86399,1272],{"class":105},[95,86401,86402,86405,86407,86409,86411],{"class":97,"line":2586},[95,86403,86404],{"class":154},"      right",[95,86406,51414],{"class":105},[95,86408,681],{"class":154},[95,86410,51469],{"class":101},[95,86412,1272],{"class":105},[95,86414,86415,86417,86419,86422,86424],{"class":97,"line":2592},[95,86416,54924],{"class":154},[95,86418,51414],{"class":105},[95,86420,86421],{"class":154},"-2",[95,86423,51469],{"class":101},[95,86425,1272],{"class":105},[95,86427,86428,86430,86432,86434],{"class":97,"line":2598},[95,86429,62002],{"class":154},[95,86431,51414],{"class":105},[95,86433,62007],{"class":154},[95,86435,1272],{"class":105},[95,86437,86438],{"class":97,"line":2603},[95,86439,2169],{"class":105},[95,86441,86442],{"class":97,"line":7931},[95,86443,2382],{"emptyLinePlaceholder":21},[95,86445,86446,86448,86451],{"class":97,"line":7955},[95,86447,86127],{"class":1945},[95,86449,86450],{"class":1945}," .body",[95,86452,15555],{"class":105},[95,86454,86455,86457,86459,86461],{"class":97,"line":7960},[95,86456,57263],{"class":154},[95,86458,51414],{"class":105},[95,86460,51569],{"class":154},[95,86462,1272],{"class":105},[95,86464,86465,86467,86469,86471,86473],{"class":97,"line":7966},[95,86466,54672],{"class":154},[95,86468,51414],{"class":105},[95,86470,552],{"class":154},[95,86472,51469],{"class":101},[95,86474,1272],{"class":105},[95,86476,86477],{"class":97,"line":7993},[95,86478,2169],{"class":105},[95,86480,86481],{"class":97,"line":7998},[95,86482,2382],{"emptyLinePlaceholder":21},[95,86484,86485,86487,86490],{"class":97,"line":8004},[95,86486,86127],{"class":1945},[95,86488,86489],{"class":1945}," .footer",[95,86491,15555],{"class":105},[95,86493,86494,86496,86498,86500],{"class":97,"line":8016},[95,86495,54986],{"class":154},[95,86497,51414],{"class":105},[95,86499,51454],{"class":154},[95,86501,1272],{"class":105},[95,86503,86504,86506,86508,86510],{"class":97,"line":8028},[95,86505,54997],{"class":154},[95,86507,51414],{"class":105},[95,86509,51557],{"class":154},[95,86511,1272],{"class":105},[95,86513,86514,86516,86518,86520,86522],{"class":97,"line":8040},[95,86515,54672],{"class":154},[95,86517,51414],{"class":105},[95,86519,552],{"class":154},[95,86521,51469],{"class":101},[95,86523,1272],{"class":105},[95,86525,86526],{"class":97,"line":9699},[95,86527,2169],{"class":105},[95,86529,86530],{"class":97,"line":9724},[95,86531,2382],{"emptyLinePlaceholder":21},[95,86533,86534,86536,86538,86540],{"class":97,"line":9747},[95,86535,86127],{"class":1945},[95,86537,86489],{"class":1945},[95,86539,1380],{"class":51277},[95,86541,15555],{"class":105},[95,86543,86544,86546,86548,86550,86552,86554,86556],{"class":97,"line":9771},[95,86545,54672],{"class":154},[95,86547,51414],{"class":105},[95,86549,177],{"class":154},[95,86551,51469],{"class":101},[95,86553,2065],{"class":154},[95,86555,51469],{"class":101},[95,86557,1272],{"class":105},[95,86559,86560,86562,86564,86567],{"class":97,"line":9776},[95,86561,61698],{"class":154},[95,86563,51414],{"class":105},[95,86565,86566],{"class":154},"#ccc",[95,86568,1272],{"class":105},[95,86570,86571,86573,86575,86577],{"class":97,"line":9781},[95,86572,63947],{"class":154},[95,86574,51414],{"class":105},[95,86576,54714],{"class":154},[95,86578,1272],{"class":105},[95,86580,86581,86583,86585,86587],{"class":97,"line":9786},[95,86582,57393],{"class":154},[95,86584,51414],{"class":105},[95,86586,60819],{"class":154},[95,86588,1272],{"class":105},[95,86590,86591,86593,86595,86597,86599],{"class":97,"line":9795},[95,86592,55111],{"class":154},[95,86594,51414],{"class":105},[95,86596,183],{"class":154},[95,86598,51469],{"class":101},[95,86600,1272],{"class":105},[95,86602,86603,86605,86607,86609,86611],{"class":97,"line":9800},[95,86604,61727],{"class":154},[95,86606,51414],{"class":105},[95,86608,552],{"class":154},[95,86610,51469],{"class":101},[95,86612,1272],{"class":105},[95,86614,86615,86617,86619,86621,86623],{"class":97,"line":9806},[95,86616,54899],{"class":154},[95,86618,51414],{"class":105},[95,86620,655],{"class":154},[95,86622,51469],{"class":101},[95,86624,1272],{"class":105},[95,86626,86627],{"class":97,"line":9827},[95,86628,2169],{"class":105},[95,86630,86631],{"class":97,"line":9833},[95,86632,2382],{"emptyLinePlaceholder":21},[95,86634,86635,86637,86639,86641,86644],{"class":97,"line":9847},[95,86636,86127],{"class":1945},[95,86638,86489],{"class":1945},[95,86640,1380],{"class":51277},[95,86642,86643],{"class":1945},".submit",[95,86645,15555],{"class":105},[95,86647,86648,86650,86652,86655],{"class":97,"line":9853},[95,86649,54861],{"class":154},[95,86651,51414],{"class":105},[95,86653,86654],{"class":154},"#369",[95,86656,1272],{"class":105},[95,86658,86659],{"class":97,"line":9880},[95,86660,2169],{"class":105},[95,86662,86663,86665,86667],{"class":97,"line":9889},[95,86664,52394],{"class":105},[95,86666,5109],{"class":51277},[95,86668,51284],{"class":105},[95,86670,86671,86673,86675],{"class":97,"line":9895},[95,86672,51762],{"class":105},[95,86674,51311],{"class":51277},[95,86676,51284],{"class":105},[95,86678,86679],{"class":97,"line":9903},[95,86680,2382],{"emptyLinePlaceholder":21},[95,86682,86683,86685,86687],{"class":97,"line":9908},[95,86684,1016],{"class":105},[95,86686,51777],{"class":51277},[95,86688,51284],{"class":105},[95,86690,86691,86693,86695,86697,86699,86702,86705,86707],{"class":97,"line":16587},[95,86692,52121],{"class":105},[95,86694,53864],{"class":51277},[95,86696,14942],{"class":1945},[95,86698,151],{"class":105},[95,86700,86701],{"class":210},"\"delete\"",[95,86703,86704],{"class":105},">删除\u003C\u002F",[95,86706,53864],{"class":51277},[95,86708,51284],{"class":105},[95,86710,86711,86713,86715,86717,86719,86722,86725,86727],{"class":97,"line":16593},[95,86712,52121],{"class":105},[95,86714,53864],{"class":51277},[95,86716,14942],{"class":1945},[95,86718,151],{"class":105},[95,86720,86721],{"class":210},"\"login\"",[95,86723,86724],{"class":105},">登录\u003C\u002F",[95,86726,53864],{"class":51277},[95,86728,51284],{"class":105},[95,86730,86731,86733,86735],{"class":97,"line":16616},[95,86732,52121],{"class":105},[95,86734,51790],{"class":51277},[95,86736,51284],{"class":105},[95,86738,86739],{"class":97,"line":16622},[95,86740,86741],{"class":164},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[95,86743,86744,86746,86749,86751,86753,86755,86757,86759,86762,86764,86766],{"class":97,"line":16645},[95,86745,70061],{"class":101},[95,86747,86748],{"class":1945}," Modal",[95,86750,106],{"class":105},[95,86752,51384],{"class":5199},[95,86754,13547],{"class":101},[95,86756,69907],{"class":210},[95,86758,12418],{"class":105},[95,86760,86761],{"class":5199},"message",[95,86763,13547],{"class":101},[95,86765,69907],{"class":210},[95,86767,12425],{"class":105},[95,86769,86770],{"class":97,"line":16659},[95,86771,86772],{"class":164},"      \u002F\u002F 创建Model 模态框盒子\n",[95,86774,86775],{"class":97,"line":16679},[95,86776,86777],{"class":164},"      \u002F\u002F 1.1 创建div标签\n",[95,86779,86780,86782,86785,86787,86789,86791,86793,86795],{"class":97,"line":16685},[95,86781,70028],{"class":154},[95,86783,86784],{"class":105},".modalBox ",[95,86786,151],{"class":101},[95,86788,54373],{"class":105},[95,86790,70128],{"class":1945},[95,86792,106],{"class":105},[95,86794,81908],{"class":210},[95,86796,112],{"class":105},[95,86798,86799],{"class":97,"line":16696},[95,86800,86801],{"class":164},"      \u002F\u002F 1.2 给div 添加类名为model\n",[95,86803,86804,86806,86809,86811],{"class":97,"line":16719},[95,86805,70028],{"class":154},[95,86807,86808],{"class":105},".modalBox.className ",[95,86810,151],{"class":101},[95,86812,86813],{"class":210}," 'modal'\n",[95,86815,86816],{"class":97,"line":16741},[95,86817,86818],{"class":164},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[95,86820,86821,86823,86826,86828],{"class":97,"line":16746},[95,86822,70028],{"class":154},[95,86824,86825],{"class":105},".modalBox.innerHTML ",[95,86827,151],{"class":101},[95,86829,70145],{"class":210},[95,86831,86832,86835,86837],{"class":97,"line":16752},[95,86833,86834],{"class":210},"        \u003Cdiv class=\"header\">${",[95,86836,51384],{"class":105},[95,86838,86839],{"class":210},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[95,86841,86842,86845,86847],{"class":97,"line":16766},[95,86843,86844],{"class":210},"        \u003Cdiv class=\"body\">${",[95,86846,86761],{"class":105},[95,86848,86849],{"class":210},"}\u003C\u002Fdiv>\n",[95,86851,86852],{"class":97,"line":16779},[95,86853,86854],{"class":210},"      `\n",[95,86856,86857],{"class":97,"line":16784},[95,86858,86859],{"class":164},"      \u002F\u002F console.log(this.modalBox)\n",[95,86861,86862],{"class":97,"line":16798},[95,86863,2169],{"class":105},[95,86865,86866],{"class":97,"line":16803},[95,86867,86868],{"class":164},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[95,86870,86871],{"class":97,"line":16809},[95,86872,86873],{"class":164},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[95,86875,86876],{"class":97,"line":16814},[95,86877,86878],{"class":164},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[95,86880,86881,86884,86886,86888,86890,86893,86895,86897],{"class":97,"line":16828},[95,86882,86883],{"class":154},"    Modal",[95,86885,664],{"class":105},[95,86887,85556],{"class":154},[95,86889,664],{"class":105},[95,86891,86892],{"class":1945},"open",[95,86894,13547],{"class":101},[95,86896,58895],{"class":101},[95,86898,54429],{"class":105},[95,86900,86901],{"class":97,"line":16833},[95,86902,86903],{"class":164},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[95,86905,86906,86908,86911,86913,86915,86917,86919,86922],{"class":97,"line":16838},[95,86907,58205],{"class":101},[95,86909,86910],{"class":154}," box",[95,86912,13547],{"class":101},[95,86914,54373],{"class":105},[95,86916,54376],{"class":1945},[95,86918,106],{"class":105},[95,86920,86921],{"class":210},"'.modal'",[95,86923,112],{"class":105},[95,86925,86926],{"class":97,"line":16852},[95,86927,86928],{"class":164},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[95,86930,86931,86934,86936,86939,86941],{"class":97,"line":16864},[95,86932,86933],{"class":105},"      box ",[95,86935,1697],{"class":101},[95,86937,86938],{"class":105}," box.",[95,86940,56983],{"class":1945},[95,86942,1958],{"class":105},[95,86944,86945],{"class":97,"line":16869},[95,86946,86947],{"class":164},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[95,86949,86950],{"class":97,"line":16882},[95,86951,86952],{"class":164},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[95,86954,86955],{"class":97,"line":16887},[95,86956,86957],{"class":164},"      \u002F\u002F append可以增加对象\n",[95,86959,86960,86963,86966,86968,86971],{"class":97,"line":16892},[95,86961,86962],{"class":105},"      document.body.",[95,86964,86965],{"class":1945},"append",[95,86967,106],{"class":105},[95,86969,86970],{"class":154},"this",[95,86972,86973],{"class":105},".modalBox)\n",[95,86975,86976],{"class":97,"line":16897},[95,86977,2382],{"emptyLinePlaceholder":21},[95,86979,86980],{"class":97,"line":16910},[95,86981,86982],{"class":164},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[95,86984,86985,86987,86990,86992,86994,86997,86999,87001,87003,87005,87008,87010],{"class":97,"line":16915},[95,86986,70028],{"class":154},[95,86988,86989],{"class":105},".modalBox.",[95,86991,54376],{"class":1945},[95,86993,106],{"class":105},[95,86995,86996],{"class":210},"'i'",[95,86998,30811],{"class":105},[95,87000,57790],{"class":1945},[95,87002,106],{"class":105},[95,87004,57795],{"class":210},[95,87006,87007],{"class":105},", () ",[95,87009,84699],{"class":101},[95,87011,15555],{"class":105},[95,87013,87014],{"class":97,"line":32618},[95,87015,87016],{"class":164},"        \u002F\u002F 这个地方需要用到箭头函数\n",[95,87018,87019],{"class":97,"line":32624},[95,87020,87021],{"class":164},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[95,87023,87024],{"class":97,"line":32630},[95,87025,87026],{"class":164},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[95,87028,87029,87031,87033,87036],{"class":97,"line":32636},[95,87030,64703],{"class":154},[95,87032,664],{"class":105},[95,87034,87035],{"class":1945},"close",[95,87037,1958],{"class":105},[95,87039,87040],{"class":97,"line":32642},[95,87041,64792],{"class":105},[95,87043,87044],{"class":97,"line":32653},[95,87045,2169],{"class":105},[95,87047,87048],{"class":97,"line":32659},[95,87049,2382],{"emptyLinePlaceholder":21},[95,87051,87052],{"class":97,"line":32679},[95,87053,87054],{"class":164},"    \u002F\u002F 测试一下 点击 删除按钮\n",[95,87056,87057,87059,87061,87063,87066,87068,87070,87072,87074,87076,87078],{"class":97,"line":32685},[95,87058,52384],{"class":105},[95,87060,54376],{"class":1945},[95,87062,106],{"class":105},[95,87064,87065],{"class":210},"'#delete'",[95,87067,30811],{"class":105},[95,87069,57790],{"class":1945},[95,87071,106],{"class":105},[95,87073,57795],{"class":210},[95,87075,87007],{"class":105},[95,87077,84699],{"class":101},[95,87079,15555],{"class":105},[95,87081,87082],{"class":97,"line":32696},[95,87083,87084],{"class":164},"      \u002F\u002F 先调用Model构造函数\n",[95,87086,87087,87089,87092,87094,87096,87098,87100,87103,87105,87108],{"class":97,"line":32702},[95,87088,58205],{"class":101},[95,87090,87091],{"class":154}," del",[95,87093,13547],{"class":101},[95,87095,11561],{"class":101},[95,87097,86748],{"class":1945},[95,87099,106],{"class":105},[95,87101,87102],{"class":210},"'温馨的提示'",[95,87104,12418],{"class":105},[95,87106,87107],{"class":210},"'您没有删除权限操作'",[95,87109,112],{"class":105},[95,87111,87112],{"class":97,"line":32708},[95,87113,87114],{"class":164},"      \u002F\u002F 实例对象调用open方法\n",[95,87116,87117,87120,87122],{"class":97,"line":32714},[95,87118,87119],{"class":105},"      del.",[95,87121,86892],{"class":1945},[95,87123,1958],{"class":105},[95,87125,87126],{"class":97,"line":32720},[95,87127,33446],{"class":105},[95,87129,87130],{"class":97,"line":32726},[95,87131,87132],{"class":164},"    \u002F\u002F 测试一下 点击 登录按钮\n",[95,87134,87135,87137,87139,87141,87144,87146,87148,87150,87152,87154,87156],{"class":97,"line":32732},[95,87136,52384],{"class":105},[95,87138,54376],{"class":1945},[95,87140,106],{"class":105},[95,87142,87143],{"class":210},"'#login'",[95,87145,30811],{"class":105},[95,87147,57790],{"class":1945},[95,87149,106],{"class":105},[95,87151,57795],{"class":210},[95,87153,87007],{"class":105},[95,87155,84699],{"class":101},[95,87157,15555],{"class":105},[95,87159,87160],{"class":97,"line":32738},[95,87161,87084],{"class":164},[95,87163,87164,87166,87169,87171,87173,87175,87177,87180,87182,87185],{"class":97,"line":32758},[95,87165,58205],{"class":101},[95,87167,87168],{"class":154}," log",[95,87170,13547],{"class":101},[95,87172,11561],{"class":101},[95,87174,86748],{"class":1945},[95,87176,106],{"class":105},[95,87178,87179],{"class":210},"'友情提示'",[95,87181,12418],{"class":105},[95,87183,87184],{"class":210},"'您还没有登录呢'",[95,87186,112],{"class":105},[95,87188,87189],{"class":97,"line":32764},[95,87190,87114],{"class":164},[95,87192,87193,87196,87198],{"class":97,"line":32780},[95,87194,87195],{"class":105},"      log.",[95,87197,86892],{"class":1945},[95,87199,1958],{"class":105},[95,87201,87202],{"class":97,"line":32786},[95,87203,33446],{"class":105},[95,87205,87206],{"class":97,"line":32800},[95,87207,87208],{"class":164},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[95,87210,87211,87213,87215,87217,87219,87221,87223,87225],{"class":97,"line":32806},[95,87212,86883],{"class":154},[95,87214,664],{"class":105},[95,87216,85556],{"class":154},[95,87218,664],{"class":105},[95,87220,87035],{"class":1945},[95,87222,13547],{"class":101},[95,87224,58895],{"class":101},[95,87226,54429],{"class":105},[95,87228,87229,87231,87233,87235],{"class":97,"line":32821},[95,87230,70028],{"class":154},[95,87232,86989],{"class":105},[95,87234,56983],{"class":1945},[95,87236,1958],{"class":105},[95,87238,87239],{"class":97,"line":32827},[95,87240,2169],{"class":105},[95,87242,87243,87245,87247],{"class":97,"line":32836},[95,87244,52394],{"class":105},[95,87246,51790],{"class":51277},[95,87248,51284],{"class":105},[95,87250,87251,87253,87255],{"class":97,"line":32842},[95,87252,51762],{"class":105},[95,87254,51777],{"class":51277},[95,87256,51284],{"class":105},[95,87258,87259],{"class":97,"line":32851},[95,87260,2382],{"emptyLinePlaceholder":21},[95,87262,87263,87265,87267],{"class":97,"line":32857},[95,87264,51762],{"class":105},[95,87266,50612],{"class":51277},[95,87268,51284],{"class":105},[10,87270,87271],{},[1444,87272],{"alt":14,"src":87273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[37,87275,87277],{"id":87276},"_414-深浅拷贝","4.14 深浅拷贝",[66,87279,87281],{"id":87280},"_4141-浅拷贝","4.14.1 浅拷贝",[10,87283,87284],{},[1444,87285],{"alt":14,"src":87286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[10,87288,87289],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[10,87291,87292],{},[1444,87293],{"alt":14,"src":87294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[10,87296,87297],{},[1444,87298],{"alt":14,"src":87299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[10,87301,87302],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[10,87304,87305],{},[1444,87306],{"alt":14,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[10,87309,11315],{},[10,87311,87312],{},[1444,87313],{"alt":14,"src":87314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[66,87316,87318],{"id":87317},"_4142-深拷贝","4.14.2 深拷贝",[10,87320,87321],{},"深拷贝：拷贝的是对象，不是地址",[10,87323,87324],{},"常用的三种方法：",[49,87326,87327,87330,87333],{},[52,87328,87329],{},"通过递归实现深拷贝",[52,87331,87332],{},"lodash\u002FcloneDeep",[52,87334,87335],{},"通过JSON.stringify()实现",[21981,87337,87339],{"id":87338},"_41421-递归函数","4.14.2.1 递归函数",[10,87341,87342],{},[1444,87343],{"alt":14,"src":87344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[49,87346,87347],{},[52,87348,87349],{},"死递归占溢出：",[86,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",[92,87354,87355,87363,87371,87375,87380,87384,87389,87397],{"__ignoreMap":14},[95,87356,87357,87359,87361],{"class":97,"line":98},[95,87358,1016],{"class":105},[95,87360,51777],{"class":51277},[95,87362,51284],{"class":105},[95,87364,87365,87367,87369],{"class":97,"line":15},[95,87366,52121],{"class":105},[95,87368,51790],{"class":51277},[95,87370,51284],{"class":105},[95,87372,87373],{"class":97,"line":1161},[95,87374,77120],{"class":105},[95,87376,87377],{"class":97,"line":1176},[95,87378,87379],{"class":105},"      fn()\n",[95,87381,87382],{"class":97,"line":1182},[95,87383,2169],{"class":105},[95,87385,87386],{"class":97,"line":1196},[95,87387,87388],{"class":105},"    fn()\n",[95,87390,87391,87393,87395],{"class":97,"line":1202},[95,87392,52394],{"class":105},[95,87394,51790],{"class":51277},[95,87396,51284],{"class":105},[95,87398,87399,87401,87403],{"class":97,"line":1293},[95,87400,51762],{"class":105},[95,87402,51777],{"class":51277},[95,87404,51284],{"class":105},[49,87406,87407],{"start":15},[52,87408,87409],{},"递归函数要加判断条件：",[10,87411,87412],{},[1444,87413],{"alt":14,"src":87414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[49,87416,87417],{"start":1161},[52,87418,87419],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[86,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",[92,87424,87425,87435,87449,87453,87461,87475,87495,87507,87515,87519,87527,87539,87547,87555,87580,87592,87596,87603,87611,87619,87623],{"__ignoreMap":14},[95,87426,87427,87429,87431,87433],{"class":97,"line":98},[95,87428,51274],{"class":105},[95,87430,51278],{"class":51277},[95,87432,51281],{"class":1945},[95,87434,51284],{"class":105},[95,87436,87437,87439,87441,87443,87445,87447],{"class":97,"line":15},[95,87438,1016],{"class":105},[95,87440,50612],{"class":51277},[95,87442,51293],{"class":1945},[95,87444,151],{"class":105},[95,87446,51298],{"class":210},[95,87448,51284],{"class":105},[95,87450,87451],{"class":97,"line":1161},[95,87452,2382],{"emptyLinePlaceholder":21},[95,87454,87455,87457,87459],{"class":97,"line":1176},[95,87456,1016],{"class":105},[95,87458,51311],{"class":51277},[95,87460,51284],{"class":105},[95,87462,87463,87465,87467,87469,87471,87473],{"class":97,"line":1182},[95,87464,52121],{"class":105},[95,87466,51321],{"class":51277},[95,87468,51324],{"class":1945},[95,87470,151],{"class":105},[95,87472,51329],{"class":210},[95,87474,51284],{"class":105},[95,87476,87477,87479,87481,87483,87485,87487,87489,87491,87493],{"class":97,"line":1196},[95,87478,52121],{"class":105},[95,87480,51321],{"class":51277},[95,87482,14903],{"class":1945},[95,87484,151],{"class":105},[95,87486,51368],{"class":210},[95,87488,51348],{"class":1945},[95,87490,151],{"class":105},[95,87492,51375],{"class":210},[95,87494,51284],{"class":105},[95,87496,87497,87499,87501,87503,87505],{"class":97,"line":1202},[95,87498,52121],{"class":105},[95,87500,51384],{"class":51277},[95,87502,51387],{"class":105},[95,87504,51384],{"class":51277},[95,87506,51284],{"class":105},[95,87508,87509,87511,87513],{"class":97,"line":1293},[95,87510,51762],{"class":105},[95,87512,51311],{"class":51277},[95,87514,51284],{"class":105},[95,87516,87517],{"class":97,"line":1299},[95,87518,2382],{"emptyLinePlaceholder":21},[95,87520,87521,87523,87525],{"class":97,"line":1311},[95,87522,1016],{"class":105},[95,87524,51777],{"class":51277},[95,87526,51284],{"class":105},[95,87528,87529,87531,87533,87535,87537],{"class":97,"line":1594},[95,87530,52121],{"class":105},[95,87532,51588],{"class":51277},[95,87534,55291],{"class":105},[95,87536,51588],{"class":51277},[95,87538,51284],{"class":105},[95,87540,87541,87543,87545],{"class":97,"line":1599},[95,87542,52121],{"class":105},[95,87544,51790],{"class":51277},[95,87546,51284],{"class":105},[95,87548,87549,87551,87553],{"class":97,"line":1605},[95,87550,70061],{"class":101},[95,87552,73750],{"class":1945},[95,87554,10836],{"class":105},[95,87556,87557,87559,87561,87563,87565,87567,87569,87571,87573,87575,87578],{"class":97,"line":1610},[95,87558,55748],{"class":105},[95,87560,54376],{"class":1945},[95,87562,106],{"class":105},[95,87564,81908],{"class":210},[95,87566,74226],{"class":105},[95,87568,151],{"class":101},[95,87570,11561],{"class":101},[95,87572,73766],{"class":1945},[95,87574,17244],{"class":105},[95,87576,87577],{"class":1945},"toLocaleString",[95,87579,1958],{"class":105},[95,87581,87582,87585,87588,87590],{"class":97,"line":1624},[95,87583,87584],{"class":1945},"      setTimeout",[95,87586,87587],{"class":105},"(getTime, ",[95,87589,6393],{"class":154},[95,87591,112],{"class":105},[95,87593,87594],{"class":97,"line":1629},[95,87595,2169],{"class":105},[95,87597,87598,87601],{"class":97,"line":1635},[95,87599,87600],{"class":1945},"    getTime",[95,87602,1958],{"class":105},[95,87604,87605,87607,87609],{"class":97,"line":1656},[95,87606,52394],{"class":105},[95,87608,51790],{"class":51277},[95,87610,51284],{"class":105},[95,87612,87613,87615,87617],{"class":97,"line":1661},[95,87614,51762],{"class":105},[95,87616,51777],{"class":51277},[95,87618,51284],{"class":105},[95,87620,87621],{"class":97,"line":1675},[95,87622,2382],{"emptyLinePlaceholder":21},[95,87624,87625,87627,87629],{"class":97,"line":1680},[95,87626,51762],{"class":105},[95,87628,50612],{"class":51277},[95,87630,51284],{"class":105},[10,87632,87633],{},[1444,87634],{"alt":14,"src":87635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[49,87637,87638],{"start":1176},[52,87639,87329],{},[10,87641,87642],{},[1444,87643],{"alt":14,"src":87644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[10,87646,87647],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[10,87649,39174],{},[10,87651,87652],{},"这个是简易版的递归函数深拷贝",[10,87654,87655],{},"一定要注意先数组再对象，因为万物皆可对象",[86,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",[92,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},[95,87662,87663,87665,87667,87669],{"class":97,"line":98},[95,87664,51274],{"class":105},[95,87666,51278],{"class":51277},[95,87668,51281],{"class":1945},[95,87670,51284],{"class":105},[95,87672,87673,87675,87677,87679,87681,87683],{"class":97,"line":15},[95,87674,1016],{"class":105},[95,87676,50612],{"class":51277},[95,87678,51293],{"class":1945},[95,87680,151],{"class":105},[95,87682,51298],{"class":210},[95,87684,51284],{"class":105},[95,87686,87687],{"class":97,"line":1161},[95,87688,2382],{"emptyLinePlaceholder":21},[95,87690,87691,87693,87695],{"class":97,"line":1176},[95,87692,1016],{"class":105},[95,87694,51311],{"class":51277},[95,87696,51284],{"class":105},[95,87698,87699,87701,87703,87705,87707,87709],{"class":97,"line":1182},[95,87700,52121],{"class":105},[95,87702,51321],{"class":51277},[95,87704,51324],{"class":1945},[95,87706,151],{"class":105},[95,87708,51329],{"class":210},[95,87710,51284],{"class":105},[95,87712,87713,87715,87717,87719,87721,87723,87725,87727,87729],{"class":97,"line":1196},[95,87714,52121],{"class":105},[95,87716,51321],{"class":51277},[95,87718,14903],{"class":1945},[95,87720,151],{"class":105},[95,87722,51368],{"class":210},[95,87724,51348],{"class":1945},[95,87726,151],{"class":105},[95,87728,51375],{"class":210},[95,87730,51284],{"class":105},[95,87732,87733,87735,87737,87739,87741],{"class":97,"line":1202},[95,87734,52121],{"class":105},[95,87736,51384],{"class":51277},[95,87738,51387],{"class":105},[95,87740,51384],{"class":51277},[95,87742,51284],{"class":105},[95,87744,87745,87747,87749],{"class":97,"line":1293},[95,87746,51762],{"class":105},[95,87748,51311],{"class":51277},[95,87750,51284],{"class":105},[95,87752,87753],{"class":97,"line":1299},[95,87754,2382],{"emptyLinePlaceholder":21},[95,87756,87757,87759,87761],{"class":97,"line":1311},[95,87758,1016],{"class":105},[95,87760,51777],{"class":51277},[95,87762,51284],{"class":105},[95,87764,87765,87767,87769],{"class":97,"line":1594},[95,87766,52121],{"class":105},[95,87768,51790],{"class":51277},[95,87770,51284],{"class":105},[95,87772,87773,87775,87777,87779],{"class":97,"line":1599},[95,87774,11204],{"class":101},[95,87776,69948],{"class":154},[95,87778,13547],{"class":101},[95,87780,15555],{"class":105},[95,87782,87783,87785,87788],{"class":97,"line":1605},[95,87784,71593],{"class":105},[95,87786,87787],{"class":210},"'pink'",[95,87789,31451],{"class":105},[95,87791,87792,87794,87796],{"class":97,"line":1610},[95,87793,71603],{"class":105},[95,87795,756],{"class":154},[95,87797,31451],{"class":105},[95,87799,87800,87803,87806,87808,87811],{"class":97,"line":1624},[95,87801,87802],{"class":105},"      hobby: [",[95,87804,87805],{"class":210},"'乒乓球'",[95,87807,12418],{"class":105},[95,87809,87810],{"class":210},"'足球'",[95,87812,87813],{"class":105},"],\n",[95,87815,87816],{"class":97,"line":1629},[95,87817,77849],{"class":105},[95,87819,87820,87823],{"class":97,"line":1635},[95,87821,87822],{"class":105},"        baby: ",[95,87824,87825],{"class":210},"'小pink'\n",[95,87827,87828],{"class":97,"line":1656},[95,87829,52375],{"class":105},[95,87831,87832],{"class":97,"line":1661},[95,87833,2169],{"class":105},[95,87835,87836,87838,87841,87843],{"class":97,"line":1675},[95,87837,11204],{"class":101},[95,87839,87840],{"class":154}," o",[95,87842,13547],{"class":101},[95,87844,87845],{"class":105}," {}\n",[95,87847,87848],{"class":97,"line":1680},[95,87849,87850],{"class":164},"    \u002F\u002F 拷贝函数\n",[95,87852,87853,87855,87858,87860,87863,87865,87868],{"class":97,"line":1709},[95,87854,70061],{"class":101},[95,87856,87857],{"class":1945}," deepCopy",[95,87859,106],{"class":105},[95,87861,87862],{"class":5199},"newObj",[95,87864,12418],{"class":105},[95,87866,87867],{"class":5199},"oldObj",[95,87869,12425],{"class":105},[95,87871,87872,87874,87876,87878,87881,87883],{"class":97,"line":1714},[95,87873,52261],{"class":101},[95,87875,1640],{"class":105},[95,87877,51824],{"class":101},[95,87879,87880],{"class":105}," k ",[95,87882,26028],{"class":101},[95,87884,87885],{"class":105}," oldObj) {\n",[95,87887,87888],{"class":97,"line":1731},[95,87889,87890],{"class":164},"        \u002F\u002F 处理数组的问题\n",[95,87892,87893],{"class":97,"line":1736},[95,87894,87895],{"class":164},"        \u002F\u002F 判断是否属于数组\n",[95,87897,87898],{"class":97,"line":1741},[95,87899,87900],{"class":164},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[95,87902,87903,87905,87908,87911,87914],{"class":97,"line":1746},[95,87904,2479],{"class":101},[95,87906,87907],{"class":105}," (oldObj[k] ",[95,87909,87910],{"class":101},"instanceof",[95,87912,87913],{"class":1945}," Array",[95,87915,12425],{"class":105},[95,87917,87918],{"class":97,"line":1760},[95,87919,87920],{"class":164},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[95,87922,87923],{"class":97,"line":1765},[95,87924,87925],{"class":164},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[95,87927,87928,87931,87933],{"class":97,"line":2559},[95,87929,87930],{"class":105},"          newObj[k] ",[95,87932,151],{"class":101},[95,87934,51815],{"class":105},[95,87936,87937,87940],{"class":97,"line":2573},[95,87938,87939],{"class":1945},"          deepCopy",[95,87941,87942],{"class":105},"(newObj[k], oldObj[k])\n",[95,87944,87945,87947,87949,87951,87953,87955,87958],{"class":97,"line":2581},[95,87946,80057],{"class":105},[95,87948,1683],{"class":101},[95,87950,1686],{"class":101},[95,87952,87907],{"class":105},[95,87954,87910],{"class":101},[95,87956,87957],{"class":1945}," Object",[95,87959,12425],{"class":105},[95,87961,87962,87964,87966],{"class":97,"line":2586},[95,87963,87930],{"class":105},[95,87965,151],{"class":101},[95,87967,87845],{"class":105},[95,87969,87970,87972],{"class":97,"line":2592},[95,87971,87939],{"class":1945},[95,87973,87942],{"class":105},[95,87975,87976,87978,87980],{"class":97,"line":2598},[95,87977,80057],{"class":105},[95,87979,1683],{"class":101},[95,87981,15555],{"class":105},[95,87983,87984],{"class":97,"line":2603},[95,87985,87986],{"class":164},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[95,87988,87989],{"class":97,"line":7931},[95,87990,87991],{"class":164},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[95,87993,87994,87996,87998],{"class":97,"line":7955},[95,87995,87930],{"class":105},[95,87997,151],{"class":101},[95,87999,88000],{"class":105}," oldObj[k]\n",[95,88002,88003],{"class":97,"line":7960},[95,88004,2511],{"class":105},[95,88006,88007],{"class":97,"line":7966},[95,88008,52375],{"class":105},[95,88010,88011],{"class":97,"line":7993},[95,88012,2169],{"class":105},[95,88014,88015,88018,88021],{"class":97,"line":7998},[95,88016,88017],{"class":1945},"    deepCopy",[95,88019,88020],{"class":105},"(o, obj) ",[95,88022,88023],{"class":164},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[95,88025,88026,88028,88030],{"class":97,"line":8004},[95,88027,73730],{"class":105},[95,88029,58224],{"class":1945},[95,88031,88032],{"class":105},"(o)\n",[95,88034,88035,88038,88040],{"class":97,"line":8016},[95,88036,88037],{"class":105},"    o.age ",[95,88039,151],{"class":101},[95,88041,88042],{"class":154}," 20\n",[95,88044,88045,88048,88050,88052,88054],{"class":97,"line":8028},[95,88046,88047],{"class":105},"    o.hobby[",[95,88049,297],{"class":154},[95,88051,4425],{"class":105},[95,88053,151],{"class":101},[95,88055,88056],{"class":210}," '篮球'\n",[95,88058,88059,88062,88064],{"class":97,"line":8040},[95,88060,88061],{"class":105},"    o.family ",[95,88063,151],{"class":101},[95,88065,88066],{"class":210}," '老pink'\n",[95,88068,88069,88071,88073],{"class":97,"line":9699},[95,88070,73730],{"class":105},[95,88072,58224],{"class":1945},[95,88074,70013],{"class":105},[95,88076,88077,88079,88081],{"class":97,"line":9724},[95,88078,52394],{"class":105},[95,88080,51790],{"class":51277},[95,88082,51284],{"class":105},[95,88084,88085,88087,88089],{"class":97,"line":9747},[95,88086,51762],{"class":105},[95,88088,51777],{"class":51277},[95,88090,51284],{"class":105},[95,88092,88093],{"class":97,"line":9771},[95,88094,2382],{"emptyLinePlaceholder":21},[95,88096,88097,88099,88101],{"class":97,"line":9776},[95,88098,51762],{"class":105},[95,88100,50612],{"class":51277},[95,88102,51284],{"class":105},[10,88104,88105],{},[1444,88106],{"alt":14,"src":88107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21981,88109,88111,88112],{"id":88110},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[255,88113,88114],{},"js库lodash里面cloneDeep内部实现了深拷贝",[10,88116,88117],{},[344,88118,88119],{"href":88119,"rel":88120},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23849],[10,88122,88123],{},"lodash里边的方法都要加上一个下划线_",[10,88125,88126],{},"_.cloneDeep()",[86,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",[92,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},[95,88133,88134,88136,88138,88140],{"class":97,"line":98},[95,88135,51274],{"class":105},[95,88137,51278],{"class":51277},[95,88139,51281],{"class":1945},[95,88141,51284],{"class":105},[95,88143,88144,88146,88148,88150,88152,88154],{"class":97,"line":15},[95,88145,1016],{"class":105},[95,88147,50612],{"class":51277},[95,88149,51293],{"class":1945},[95,88151,151],{"class":105},[95,88153,51298],{"class":210},[95,88155,51284],{"class":105},[95,88157,88158],{"class":97,"line":1161},[95,88159,2382],{"emptyLinePlaceholder":21},[95,88161,88162,88164,88166],{"class":97,"line":1176},[95,88163,1016],{"class":105},[95,88165,51311],{"class":51277},[95,88167,51284],{"class":105},[95,88169,88170,88172,88174,88176,88178,88180],{"class":97,"line":1182},[95,88171,52121],{"class":105},[95,88173,51321],{"class":51277},[95,88175,51324],{"class":1945},[95,88177,151],{"class":105},[95,88179,51329],{"class":210},[95,88181,51284],{"class":105},[95,88183,88184,88186,88188,88190,88192,88194,88196,88198,88200],{"class":97,"line":1196},[95,88185,52121],{"class":105},[95,88187,51321],{"class":51277},[95,88189,14903],{"class":1945},[95,88191,151],{"class":105},[95,88193,51368],{"class":210},[95,88195,51348],{"class":1945},[95,88197,151],{"class":105},[95,88199,51375],{"class":210},[95,88201,51284],{"class":105},[95,88203,88204,88206,88208,88210,88212],{"class":97,"line":1202},[95,88205,52121],{"class":105},[95,88207,51384],{"class":51277},[95,88209,51387],{"class":105},[95,88211,51384],{"class":51277},[95,88213,51284],{"class":105},[95,88215,88216,88218,88220],{"class":97,"line":1293},[95,88217,51762],{"class":105},[95,88219,51311],{"class":51277},[95,88221,51284],{"class":105},[95,88223,88224],{"class":97,"line":1299},[95,88225,2382],{"emptyLinePlaceholder":21},[95,88227,88228,88230,88232],{"class":97,"line":1311},[95,88229,1016],{"class":105},[95,88231,51777],{"class":51277},[95,88233,51284],{"class":105},[95,88235,88236],{"class":97,"line":1594},[95,88237,88238],{"class":164},"  \u003C!-- 先引用这个库 -->\n",[95,88240,88241,88243,88245,88247,88249,88252,88254,88256],{"class":97,"line":1599},[95,88242,52121],{"class":105},[95,88244,51790],{"class":51277},[95,88246,55216],{"class":1945},[95,88248,151],{"class":105},[95,88250,88251],{"class":210},"\"lodash.min.js\"",[95,88253,55291],{"class":105},[95,88255,51790],{"class":51277},[95,88257,51284],{"class":105},[95,88259,88260,88262,88264],{"class":97,"line":1605},[95,88261,52121],{"class":105},[95,88263,51790],{"class":51277},[95,88265,51284],{"class":105},[95,88267,88268,88270,88272,88274],{"class":97,"line":1610},[95,88269,11204],{"class":101},[95,88271,69948],{"class":154},[95,88273,13547],{"class":101},[95,88275,15555],{"class":105},[95,88277,88278,88280,88282],{"class":97,"line":1624},[95,88279,71593],{"class":105},[95,88281,87787],{"class":210},[95,88283,31451],{"class":105},[95,88285,88286,88288,88290],{"class":97,"line":1629},[95,88287,71603],{"class":105},[95,88289,756],{"class":154},[95,88291,31451],{"class":105},[95,88293,88294,88296,88298,88300,88302],{"class":97,"line":1635},[95,88295,87802],{"class":105},[95,88297,87805],{"class":210},[95,88299,12418],{"class":105},[95,88301,87810],{"class":210},[95,88303,87813],{"class":105},[95,88305,88306],{"class":97,"line":1656},[95,88307,77849],{"class":105},[95,88309,88310,88312],{"class":97,"line":1661},[95,88311,87822],{"class":105},[95,88313,87825],{"class":210},[95,88315,88316],{"class":97,"line":1675},[95,88317,52375],{"class":105},[95,88319,88320],{"class":97,"line":1680},[95,88321,2169],{"class":105},[95,88323,88324,88326,88328,88330,88333,88336],{"class":97,"line":1709},[95,88325,11204],{"class":101},[95,88327,87840],{"class":154},[95,88329,13547],{"class":101},[95,88331,88332],{"class":105}," _.",[95,88334,88335],{"class":1945},"cloneDeep",[95,88337,70013],{"class":105},[95,88339,88340,88342,88344],{"class":97,"line":1714},[95,88341,73730],{"class":105},[95,88343,58224],{"class":1945},[95,88345,88032],{"class":105},[95,88347,88348,88351,88353],{"class":97,"line":1731},[95,88349,88350],{"class":105},"    o.family.baby ",[95,88352,151],{"class":101},[95,88354,88066],{"class":210},[95,88356,88357,88359,88361],{"class":97,"line":1736},[95,88358,73730],{"class":105},[95,88360,58224],{"class":1945},[95,88362,70013],{"class":105},[95,88364,88365,88367,88369],{"class":97,"line":1741},[95,88366,52394],{"class":105},[95,88368,51790],{"class":51277},[95,88370,51284],{"class":105},[95,88372,88373,88375,88377],{"class":97,"line":1746},[95,88374,51762],{"class":105},[95,88376,51777],{"class":51277},[95,88378,51284],{"class":105},[95,88380,88381],{"class":97,"line":1760},[95,88382,2382],{"emptyLinePlaceholder":21},[95,88384,88385,88387,88389],{"class":97,"line":1765},[95,88386,51762],{"class":105},[95,88388,50612],{"class":51277},[95,88390,51284],{"class":105},[10,88392,88393],{},[1444,88394],{"alt":14,"src":88395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21981,88397,88399],{"id":88398},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[86,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",[92,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},[95,88406,88407,88409,88411,88413],{"class":97,"line":98},[95,88408,51274],{"class":105},[95,88410,51278],{"class":51277},[95,88412,51281],{"class":1945},[95,88414,51284],{"class":105},[95,88416,88417,88419,88421,88423,88425,88427],{"class":97,"line":15},[95,88418,1016],{"class":105},[95,88420,50612],{"class":51277},[95,88422,51293],{"class":1945},[95,88424,151],{"class":105},[95,88426,51298],{"class":210},[95,88428,51284],{"class":105},[95,88430,88431],{"class":97,"line":1161},[95,88432,2382],{"emptyLinePlaceholder":21},[95,88434,88435,88437,88439],{"class":97,"line":1176},[95,88436,1016],{"class":105},[95,88438,51311],{"class":51277},[95,88440,51284],{"class":105},[95,88442,88443,88445,88447,88449,88451,88453],{"class":97,"line":1182},[95,88444,52121],{"class":105},[95,88446,51321],{"class":51277},[95,88448,51324],{"class":1945},[95,88450,151],{"class":105},[95,88452,51329],{"class":210},[95,88454,51284],{"class":105},[95,88456,88457,88459,88461,88463,88465,88467,88469,88471,88473],{"class":97,"line":1196},[95,88458,52121],{"class":105},[95,88460,51321],{"class":51277},[95,88462,14903],{"class":1945},[95,88464,151],{"class":105},[95,88466,51368],{"class":210},[95,88468,51348],{"class":1945},[95,88470,151],{"class":105},[95,88472,51375],{"class":210},[95,88474,51284],{"class":105},[95,88476,88477,88479,88481,88483,88485],{"class":97,"line":1202},[95,88478,52121],{"class":105},[95,88480,51384],{"class":51277},[95,88482,51387],{"class":105},[95,88484,51384],{"class":51277},[95,88486,51284],{"class":105},[95,88488,88489,88491,88493],{"class":97,"line":1293},[95,88490,51762],{"class":105},[95,88492,51311],{"class":51277},[95,88494,51284],{"class":105},[95,88496,88497],{"class":97,"line":1299},[95,88498,2382],{"emptyLinePlaceholder":21},[95,88500,88501,88503,88505],{"class":97,"line":1311},[95,88502,1016],{"class":105},[95,88504,51777],{"class":51277},[95,88506,51284],{"class":105},[95,88508,88509,88511,88513],{"class":97,"line":1594},[95,88510,52121],{"class":105},[95,88512,51790],{"class":51277},[95,88514,51284],{"class":105},[95,88516,88517,88519,88521,88523],{"class":97,"line":1599},[95,88518,11204],{"class":101},[95,88520,69948],{"class":154},[95,88522,13547],{"class":101},[95,88524,15555],{"class":105},[95,88526,88527,88529,88531],{"class":97,"line":1605},[95,88528,71593],{"class":105},[95,88530,87787],{"class":210},[95,88532,31451],{"class":105},[95,88534,88535,88537,88539],{"class":97,"line":1610},[95,88536,71603],{"class":105},[95,88538,756],{"class":154},[95,88540,31451],{"class":105},[95,88542,88543,88545,88547,88549,88551],{"class":97,"line":1624},[95,88544,87802],{"class":105},[95,88546,87805],{"class":210},[95,88548,12418],{"class":105},[95,88550,87810],{"class":210},[95,88552,87813],{"class":105},[95,88554,88555],{"class":97,"line":1629},[95,88556,77849],{"class":105},[95,88558,88559,88561],{"class":97,"line":1635},[95,88560,87822],{"class":105},[95,88562,87825],{"class":210},[95,88564,88565],{"class":97,"line":1656},[95,88566,52375],{"class":105},[95,88568,88569],{"class":97,"line":1661},[95,88570,2169],{"class":105},[95,88572,88573],{"class":97,"line":1675},[95,88574,88575],{"class":164},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[95,88577,88578],{"class":97,"line":1680},[95,88579,88580],{"class":164},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[95,88582,88583],{"class":97,"line":1709},[95,88584,88585],{"class":164},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[95,88587,88588,88590,88592,88594,88597,88599,88602,88604,88606,88608,88610],{"class":97,"line":1714},[95,88589,11204],{"class":101},[95,88591,87840],{"class":154},[95,88593,13547],{"class":101},[95,88595,88596],{"class":154}," JSON",[95,88598,664],{"class":105},[95,88600,88601],{"class":1945},"parse",[95,88603,106],{"class":105},[95,88605,71641],{"class":154},[95,88607,664],{"class":105},[95,88609,71646],{"class":1945},[95,88611,71649],{"class":105},[95,88613,88614,88616,88618],{"class":97,"line":1731},[95,88615,73730],{"class":105},[95,88617,58224],{"class":1945},[95,88619,88032],{"class":105},[95,88621,88622,88624,88626],{"class":97,"line":1736},[95,88623,88350],{"class":105},[95,88625,151],{"class":101},[95,88627,88628],{"class":210}," '123'\n",[95,88630,88631,88633,88635],{"class":97,"line":1741},[95,88632,73730],{"class":105},[95,88634,58224],{"class":1945},[95,88636,70013],{"class":105},[95,88638,88639,88641,88643],{"class":97,"line":1746},[95,88640,52394],{"class":105},[95,88642,51790],{"class":51277},[95,88644,51284],{"class":105},[95,88646,88647,88649,88651],{"class":97,"line":1760},[95,88648,51762],{"class":105},[95,88650,51777],{"class":51277},[95,88652,51284],{"class":105},[95,88654,88655],{"class":97,"line":1765},[95,88656,2382],{"emptyLinePlaceholder":21},[95,88658,88659,88661,88663],{"class":97,"line":2559},[95,88660,51762],{"class":105},[95,88662,50612],{"class":51277},[95,88664,51284],{"class":105},[10,88666,88667],{},[1444,88668],{"alt":14,"src":88669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[37,88671,88673],{"id":88672},"_415-异常处理","4.15 异常处理",[49,88675,88676],{},[52,88677,88678],{},"throw抛异常",[10,88680,88681],{},[1444,88682],{"alt":14,"src":88683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[49,88685,88686],{"start":15},[52,88687,88688],{},"try\u002Fcatch 捕获错误信息",[10,88690,88691],{},[1444,88692],{"alt":14,"src":88693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[86,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",[92,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},[95,88700,88701,88703,88705,88707],{"class":97,"line":98},[95,88702,51274],{"class":105},[95,88704,51278],{"class":51277},[95,88706,51281],{"class":1945},[95,88708,51284],{"class":105},[95,88710,88711,88713,88715,88717,88719,88721],{"class":97,"line":15},[95,88712,1016],{"class":105},[95,88714,50612],{"class":51277},[95,88716,51293],{"class":1945},[95,88718,151],{"class":105},[95,88720,51298],{"class":210},[95,88722,51284],{"class":105},[95,88724,88725],{"class":97,"line":1161},[95,88726,2382],{"emptyLinePlaceholder":21},[95,88728,88729,88731,88733],{"class":97,"line":1176},[95,88730,1016],{"class":105},[95,88732,51311],{"class":51277},[95,88734,51284],{"class":105},[95,88736,88737,88739,88741,88743,88745,88747],{"class":97,"line":1182},[95,88738,52121],{"class":105},[95,88740,51321],{"class":51277},[95,88742,51324],{"class":1945},[95,88744,151],{"class":105},[95,88746,51329],{"class":210},[95,88748,51284],{"class":105},[95,88750,88751,88753,88755,88757,88759,88761,88763,88765,88767],{"class":97,"line":1196},[95,88752,52121],{"class":105},[95,88754,51321],{"class":51277},[95,88756,14903],{"class":1945},[95,88758,151],{"class":105},[95,88760,51368],{"class":210},[95,88762,51348],{"class":1945},[95,88764,151],{"class":105},[95,88766,51375],{"class":210},[95,88768,51284],{"class":105},[95,88770,88771,88773,88775,88777,88779],{"class":97,"line":1202},[95,88772,52121],{"class":105},[95,88774,51384],{"class":51277},[95,88776,51387],{"class":105},[95,88778,51384],{"class":51277},[95,88780,51284],{"class":105},[95,88782,88783,88785,88787],{"class":97,"line":1293},[95,88784,51762],{"class":105},[95,88786,51311],{"class":51277},[95,88788,51284],{"class":105},[95,88790,88791],{"class":97,"line":1299},[95,88792,2382],{"emptyLinePlaceholder":21},[95,88794,88795,88797,88799],{"class":97,"line":1311},[95,88796,1016],{"class":105},[95,88798,51777],{"class":51277},[95,88800,51284],{"class":105},[95,88802,88803,88805,88807,88809,88811],{"class":97,"line":1594},[95,88804,52121],{"class":105},[95,88806,10],{"class":51277},[95,88808,53471],{"class":105},[95,88810,10],{"class":51277},[95,88812,51284],{"class":105},[95,88814,88815,88817,88819],{"class":97,"line":1599},[95,88816,52121],{"class":105},[95,88818,51790],{"class":51277},[95,88820,51284],{"class":105},[95,88822,88823,88825,88828],{"class":97,"line":1605},[95,88824,70061],{"class":101},[95,88826,88827],{"class":1945}," fn",[95,88829,10836],{"class":105},[95,88831,88832,88835],{"class":97,"line":1610},[95,88833,88834],{"class":101},"      try",[95,88836,15555],{"class":105},[95,88838,88839],{"class":97,"line":1624},[95,88840,88841],{"class":164},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[95,88843,88844,88846,88848,88850,88852,88854,88856,88859],{"class":97,"line":1629},[95,88845,61247],{"class":101},[95,88847,6808],{"class":154},[95,88849,13547],{"class":101},[95,88851,54373],{"class":105},[95,88853,54376],{"class":1945},[95,88855,106],{"class":105},[95,88857,88858],{"class":210},"'.p'",[95,88860,112],{"class":105},[95,88862,88863,88866,88868],{"class":97,"line":1635},[95,88864,88865],{"class":105},"        p.style.color ",[95,88867,151],{"class":101},[95,88869,67028],{"class":210},[95,88871,88872,88875,88878],{"class":97,"line":1656},[95,88873,88874],{"class":105},"      } ",[95,88876,88877],{"class":101},"catch",[95,88879,88880],{"class":105}," (err) {\n",[95,88882,88883],{"class":97,"line":1661},[95,88884,88885],{"class":164},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[95,88887,88888,88891,88893],{"class":97,"line":1675},[95,88889,88890],{"class":105},"        console.",[95,88892,58224],{"class":1945},[95,88894,88895],{"class":105},"(err.message)\n",[95,88897,88898],{"class":97,"line":1680},[95,88899,88900],{"class":164},"        \u002F\u002F 想要中断程序，需要加return\n",[95,88902,88903],{"class":97,"line":1709},[95,88904,88905],{"class":164},"        \u002F\u002F return\n",[95,88907,88908],{"class":97,"line":1714},[95,88909,88910],{"class":164},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[95,88912,88913,88916,88918,88921,88923,88926],{"class":97,"line":1731},[95,88914,88915],{"class":101},"        throw",[95,88917,11561],{"class":101},[95,88919,88920],{"class":1945}," Error",[95,88922,106],{"class":105},[95,88924,88925],{"class":210},"'你看看，选择器错误了吧'",[95,88927,112],{"class":105},[95,88929,88930],{"class":97,"line":1736},[95,88931,52375],{"class":105},[95,88933,88934],{"class":97,"line":1741},[95,88935,88936],{"class":164},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[95,88938,88939,88942],{"class":97,"line":1746},[95,88940,88941],{"class":101},"      finally",[95,88943,15555],{"class":105},[95,88945,88946,88949,88951,88954],{"class":97,"line":1760},[95,88947,88948],{"class":1945},"        alert",[95,88950,106],{"class":105},[95,88952,88953],{"class":210},"'弹出对话框'",[95,88955,112],{"class":105},[95,88957,88958],{"class":97,"line":1765},[95,88959,52375],{"class":105},[95,88961,88962,88964,88966,88968,88970],{"class":97,"line":2559},[95,88963,58221],{"class":105},[95,88965,58224],{"class":1945},[95,88967,106],{"class":105},[95,88969,578],{"class":154},[95,88971,112],{"class":105},[95,88973,88974],{"class":97,"line":2573},[95,88975,2382],{"emptyLinePlaceholder":21},[95,88977,88978],{"class":97,"line":2581},[95,88979,2169],{"class":105},[95,88981,88982],{"class":97,"line":2586},[95,88983,88984],{"class":164},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[95,88986,88987],{"class":97,"line":2592},[95,88988,88989],{"class":164},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[95,88991,88992,88995],{"class":97,"line":2598},[95,88993,88994],{"class":1945},"    fn",[95,88996,1958],{"class":105},[95,88998,88999,89001,89003],{"class":97,"line":2603},[95,89000,52394],{"class":105},[95,89002,51790],{"class":51277},[95,89004,51284],{"class":105},[95,89006,89007,89009,89011],{"class":97,"line":7931},[95,89008,51762],{"class":105},[95,89010,51777],{"class":51277},[95,89012,51284],{"class":105},[95,89014,89015],{"class":97,"line":7955},[95,89016,2382],{"emptyLinePlaceholder":21},[95,89018,89019,89021,89023],{"class":97,"line":7960},[95,89020,51762],{"class":105},[95,89022,50612],{"class":51277},[95,89024,51284],{"class":105},[10,89026,89027],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[49,89029,89030],{"start":1161},[52,89031,89032],{},"debugger",[10,89034,89035],{},[1444,89036],{"alt":14,"src":89037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[10,89039,89040],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[37,89042,89044],{"id":89043},"_416-处理this","4.16 处理this",[66,89046,89048],{"id":89047},"_4161-this的指向","4.16.1 this的指向",[49,89050,89051],{},[52,89052,89053],{},"普通函数的this",[10,89055,89056],{},[1444,89057],{"alt":14,"src":89058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[49,89060,89061],{"start":15},[52,89062,89063],{},"箭头函数的this",[10,89065,89066],{},[1444,89067],{"alt":14,"src":89068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[10,89070,89071],{},[1444,89072],{"alt":14,"src":89073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[10,89075,89076],{},[1444,89077],{"alt":14,"src":89078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[66,89080,89082],{"id":89081},"_4162-this的改变","4.16.2 this的改变",[10,89084,89085],{},"call() apply() bind()",[49,89087,89088],{},[52,89089,89090],{},"call()",[10,89092,89093],{},[1444,89094],{"alt":14,"src":89095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[10,89097,89098],{},"两个作用：①调用函数；②改变this指向",[86,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",[92,89103,89104,89112,89120,89124,89129,89133,89138,89143,89148,89152,89157,89165],{"__ignoreMap":14},[95,89105,89106,89108,89110],{"class":97,"line":98},[95,89107,1016],{"class":105},[95,89109,51777],{"class":51277},[95,89111,51284],{"class":105},[95,89113,89114,89116,89118],{"class":97,"line":15},[95,89115,52121],{"class":105},[95,89117,51790],{"class":51277},[95,89119,51284],{"class":105},[95,89121,89122],{"class":97,"line":1161},[95,89123,71500],{"class":105},[95,89125,89126],{"class":97,"line":1176},[95,89127,89128],{"class":105},"      uname: 'pink'\n",[95,89130,89131],{"class":97,"line":1182},[95,89132,2169],{"class":105},[95,89134,89135],{"class":97,"line":1196},[95,89136,89137],{"class":105},"    function fn(x, y) {\n",[95,89139,89140],{"class":97,"line":1202},[95,89141,89142],{"class":105},"      console.log(this)  \u002F\u002Fwindow\n",[95,89144,89145],{"class":97,"line":1293},[95,89146,89147],{"class":105},"      console.log(x + y)\n",[95,89149,89150],{"class":97,"line":1299},[95,89151,2169],{"class":105},[95,89153,89154],{"class":97,"line":1311},[95,89155,89156],{"class":105},"    fn.call(obj, 1, 2)\n",[95,89158,89159,89161,89163],{"class":97,"line":1594},[95,89160,52394],{"class":105},[95,89162,51790],{"class":51277},[95,89164,51284],{"class":105},[95,89166,89167,89169,89171],{"class":97,"line":1599},[95,89168,51762],{"class":105},[95,89170,51777],{"class":51277},[95,89172,51284],{"class":105},[10,89174,89175],{},[1444,89176],{"alt":14,"src":89177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[49,89179,89180],{"start":15},[52,89181,89182],{},"apply()",[10,89184,89185],{},[1444,89186],{"alt":14,"src":89187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[10,89189,89098],{},[10,89191,89192],{},"call传递的是普通参数，而apply必须传递的是数组",[86,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",[92,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},[95,89199,89200,89202,89204,89206],{"class":97,"line":98},[95,89201,51274],{"class":105},[95,89203,51278],{"class":51277},[95,89205,51281],{"class":1945},[95,89207,51284],{"class":105},[95,89209,89210,89212,89214,89216,89218,89220],{"class":97,"line":15},[95,89211,1016],{"class":105},[95,89213,50612],{"class":51277},[95,89215,51293],{"class":1945},[95,89217,151],{"class":105},[95,89219,51298],{"class":210},[95,89221,51284],{"class":105},[95,89223,89224],{"class":97,"line":1161},[95,89225,2382],{"emptyLinePlaceholder":21},[95,89227,89228,89230,89232],{"class":97,"line":1176},[95,89229,1016],{"class":105},[95,89231,51311],{"class":51277},[95,89233,51284],{"class":105},[95,89235,89236,89238,89240,89242,89244,89246],{"class":97,"line":1182},[95,89237,52121],{"class":105},[95,89239,51321],{"class":51277},[95,89241,51324],{"class":1945},[95,89243,151],{"class":105},[95,89245,51329],{"class":210},[95,89247,51284],{"class":105},[95,89249,89250,89252,89254,89256,89258,89260,89262,89264,89266],{"class":97,"line":1196},[95,89251,52121],{"class":105},[95,89253,51321],{"class":51277},[95,89255,14903],{"class":1945},[95,89257,151],{"class":105},[95,89259,51368],{"class":210},[95,89261,51348],{"class":1945},[95,89263,151],{"class":105},[95,89265,51375],{"class":210},[95,89267,51284],{"class":105},[95,89269,89270,89272,89274,89276,89278],{"class":97,"line":1202},[95,89271,52121],{"class":105},[95,89273,51384],{"class":51277},[95,89275,51387],{"class":105},[95,89277,51384],{"class":51277},[95,89279,51284],{"class":105},[95,89281,89282,89284,89286],{"class":97,"line":1293},[95,89283,51762],{"class":105},[95,89285,51311],{"class":51277},[95,89287,51284],{"class":105},[95,89289,89290],{"class":97,"line":1299},[95,89291,2382],{"emptyLinePlaceholder":21},[95,89293,89294,89296,89298],{"class":97,"line":1311},[95,89295,1016],{"class":105},[95,89297,51777],{"class":51277},[95,89299,51284],{"class":105},[95,89301,89302,89304,89306],{"class":97,"line":1594},[95,89303,52121],{"class":105},[95,89305,51790],{"class":51277},[95,89307,51284],{"class":105},[95,89309,89310,89312,89314,89316],{"class":97,"line":1599},[95,89311,11204],{"class":101},[95,89313,69948],{"class":154},[95,89315,13547],{"class":101},[95,89317,15555],{"class":105},[95,89319,89320,89322],{"class":97,"line":1605},[95,89321,71603],{"class":105},[95,89323,89324],{"class":154},"18\n",[95,89326,89327],{"class":97,"line":1610},[95,89328,2169],{"class":105},[95,89330,89331],{"class":97,"line":1624},[95,89332,89333],{"class":164},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[95,89335,89336,89338,89340,89342,89344,89346,89348],{"class":97,"line":1629},[95,89337,70061],{"class":101},[95,89339,88827],{"class":1945},[95,89341,106],{"class":105},[95,89343,926],{"class":5199},[95,89345,12418],{"class":105},[95,89347,951],{"class":5199},[95,89349,12425],{"class":105},[95,89351,89352,89354,89356,89358,89360],{"class":97,"line":1635},[95,89353,58221],{"class":105},[95,89355,58224],{"class":1945},[95,89357,106],{"class":105},[95,89359,86970],{"class":154},[95,89361,112],{"class":105},[95,89363,89364,89366,89368,89371,89373],{"class":97,"line":1656},[95,89365,58221],{"class":105},[95,89367,58224],{"class":1945},[95,89369,89370],{"class":105},"(x ",[95,89372,587],{"class":101},[95,89374,89375],{"class":105}," y)\n",[95,89377,89378],{"class":97,"line":1661},[95,89379,2169],{"class":105},[95,89381,89382],{"class":97,"line":1675},[95,89383,89384],{"class":164},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[95,89386,89387,89390,89393,89396,89398,89400,89402],{"class":97,"line":1680},[95,89388,89389],{"class":105},"    fn.",[95,89391,89392],{"class":1945},"apply",[95,89394,89395],{"class":105},"(obj, [",[95,89397,323],{"class":154},[95,89399,12418],{"class":105},[95,89401,183],{"class":154},[95,89403,4639],{"class":105},[95,89405,89406],{"class":97,"line":1709},[95,89407,89408],{"class":164},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[95,89410,89411],{"class":97,"line":1714},[95,89412,2382],{"emptyLinePlaceholder":21},[95,89414,89415],{"class":97,"line":1731},[95,89416,89417],{"class":164},"    \u002F\u002F 使用场景：求数组最大值\n",[95,89419,89420],{"class":97,"line":1736},[95,89421,89422],{"class":164},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[95,89424,89425,89428],{"class":97,"line":1741},[95,89426,89427],{"class":164},"    \u002F\u002F console.log(max)",[95,89429,89430],{"class":164},"   \u002F\u002F3\n",[95,89432,89433],{"class":97,"line":1746},[95,89434,89435],{"class":164},"    \u002F\u002F 指向空或者Math都是可以的\n",[95,89437,89438,89440,89442,89444,89446,89448,89450,89452,89454,89456],{"class":97,"line":1760},[95,89439,11204],{"class":101},[95,89441,57672],{"class":154},[95,89443,13547],{"class":101},[95,89445,52203],{"class":105},[95,89447,417],{"class":154},[95,89449,12418],{"class":105},[95,89451,610],{"class":154},[95,89453,12418],{"class":105},[95,89455,641],{"class":154},[95,89457,33231],{"class":105},[95,89459,89460],{"class":97,"line":1765},[95,89461,89462],{"class":164},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[95,89464,89465,89467,89469,89471,89474,89476],{"class":97,"line":2559},[95,89466,11204],{"class":101},[95,89468,5934],{"class":154},[95,89470,13547],{"class":101},[95,89472,89473],{"class":105}," Math.max.",[95,89475,89392],{"class":1945},[95,89477,89478],{"class":105},"(Math, arr)\n",[95,89480,89481,89483,89486,89488,89491,89493],{"class":97,"line":2573},[95,89482,11204],{"class":101},[95,89484,89485],{"class":154}," min",[95,89487,13547],{"class":101},[95,89489,89490],{"class":105}," Math.min.",[95,89492,89392],{"class":1945},[95,89494,89478],{"class":105},[95,89496,89497,89499,89501,89504],{"class":97,"line":2581},[95,89498,73730],{"class":105},[95,89500,58224],{"class":1945},[95,89502,89503],{"class":105},"(max, min)     ",[95,89505,89506],{"class":164},"\u002F\u002F100,4\n",[95,89508,89509],{"class":97,"line":2586},[95,89510,2382],{"emptyLinePlaceholder":21},[95,89512,89513],{"class":97,"line":2592},[95,89514,89515],{"class":164},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[95,89517,89518,89520,89522,89525,89527,89529,89532],{"class":97,"line":2598},[95,89519,73730],{"class":105},[95,89521,58224],{"class":1945},[95,89523,89524],{"class":105},"(Max.",[95,89526,5998],{"class":1945},[95,89528,106],{"class":105},[95,89530,89531],{"class":101},"...",[95,89533,89534],{"class":105},"arr))\n",[95,89536,89537,89539,89541],{"class":97,"line":2603},[95,89538,52394],{"class":105},[95,89540,51790],{"class":51277},[95,89542,51284],{"class":105},[95,89544,89545,89547,89549],{"class":97,"line":7931},[95,89546,51762],{"class":105},[95,89548,51777],{"class":51277},[95,89550,51284],{"class":105},[95,89552,89553],{"class":97,"line":7955},[95,89554,2382],{"emptyLinePlaceholder":21},[95,89556,89557,89559,89561],{"class":97,"line":7960},[95,89558,51762],{"class":105},[95,89560,50612],{"class":51277},[95,89562,51284],{"class":105},[10,89564,89565],{},[1444,89566],{"alt":14,"src":89567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[49,89569,89570],{"start":1161},[52,89571,89572],{},"bind()",[10,89574,89575],{},[1444,89576],{"alt":14,"src":89577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[10,89579,89580],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[10,89582,89583],{},"bind的语法跟call很相似",[86,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",[92,89588,89589,89597,89605,89609,89614,89618,89622,89627,89631,89636,89641,89646,89651,89656,89661,89666,89670,89678],{"__ignoreMap":14},[95,89590,89591,89593,89595],{"class":97,"line":98},[95,89592,1016],{"class":105},[95,89594,51777],{"class":51277},[95,89596,51284],{"class":105},[95,89598,89599,89601,89603],{"class":97,"line":15},[95,89600,52121],{"class":105},[95,89602,51790],{"class":51277},[95,89604,51284],{"class":105},[95,89606,89607],{"class":97,"line":1161},[95,89608,71500],{"class":105},[95,89610,89611],{"class":97,"line":1176},[95,89612,89613],{"class":105},"      age: 18\n",[95,89615,89616],{"class":97,"line":1182},[95,89617,2169],{"class":105},[95,89619,89620],{"class":97,"line":1196},[95,89621,77120],{"class":105},[95,89623,89624],{"class":97,"line":1202},[95,89625,89626],{"class":105},"      console.log(this)\n",[95,89628,89629],{"class":97,"line":1293},[95,89630,2169],{"class":105},[95,89632,89633],{"class":97,"line":1299},[95,89634,89635],{"class":105},"    \u002F\u002F 1.bind 不会调用函数\n",[95,89637,89638],{"class":97,"line":1311},[95,89639,89640],{"class":105},"    \u002F\u002F 2.bind能改变this的指向\n",[95,89642,89643],{"class":97,"line":1594},[95,89644,89645],{"class":105},"    fn.bind()\n",[95,89647,89648],{"class":97,"line":1599},[95,89649,89650],{"class":105},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[95,89652,89653],{"class":97,"line":1605},[95,89654,89655],{"class":105},"    const fun = fn.bind(obj)\n",[95,89657,89658],{"class":97,"line":1610},[95,89659,89660],{"class":105},"    \u002F\u002F console.log(fun)\n",[95,89662,89663],{"class":97,"line":1624},[95,89664,89665],{"class":105},"    \u002F\u002F 调用,查看this的指向\n",[95,89667,89668],{"class":97,"line":1629},[95,89669,52628],{"class":105},[95,89671,89672,89674,89676],{"class":97,"line":1635},[95,89673,52394],{"class":105},[95,89675,51790],{"class":51277},[95,89677,51284],{"class":105},[95,89679,89680,89682,89684],{"class":97,"line":1656},[95,89681,51762],{"class":105},[95,89683,51777],{"class":51277},[95,89685,51284],{"class":105},[10,89687,89688],{},[1444,89689],{"alt":14,"src":89690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[49,89692,89693],{"start":1176},[52,89694,89695],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[86,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",[92,89700,89701,89709,89722,89730,89735,89739,89744,89749,89754,89759,89764,89769,89774,89779,89783,89791],{"__ignoreMap":14},[95,89702,89703,89705,89707],{"class":97,"line":98},[95,89704,1016],{"class":105},[95,89706,51777],{"class":51277},[95,89708,51284],{"class":105},[95,89710,89711,89713,89715,89718,89720],{"class":97,"line":15},[95,89712,52121],{"class":105},[95,89714,53864],{"class":51277},[95,89716,89717],{"class":105},">禁用\u003C\u002F",[95,89719,53864],{"class":51277},[95,89721,51284],{"class":105},[95,89723,89724,89726,89728],{"class":97,"line":1161},[95,89725,52121],{"class":105},[95,89727,51790],{"class":51277},[95,89729,51284],{"class":105},[95,89731,89732],{"class":97,"line":1176},[95,89733,89734],{"class":105},"    const btn = document.querySelector('button')\n",[95,89736,89737],{"class":97,"line":1182},[95,89738,58993],{"class":105},[95,89740,89741],{"class":97,"line":1196},[95,89742,89743],{"class":105},"      this.disabled = true\n",[95,89745,89746],{"class":97,"line":1202},[95,89747,89748],{"class":105},"      \u002F\u002F 定时器是window进行调用的\n",[95,89750,89751],{"class":97,"line":1293},[95,89752,89753],{"class":105},"      setTimeout(function () {\n",[95,89755,89756],{"class":97,"line":1299},[95,89757,89758],{"class":105},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[95,89760,89761],{"class":97,"line":1311},[95,89762,89763],{"class":105},"        this.disabled = false\n",[95,89765,89766],{"class":97,"line":1594},[95,89767,89768],{"class":105},"      }.bind(this), 2000)\n",[95,89770,89771],{"class":97,"line":1599},[95,89772,89773],{"class":105},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[95,89775,89776],{"class":97,"line":1605},[95,89777,89778],{"class":105},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[95,89780,89781],{"class":97,"line":1610},[95,89782,33446],{"class":105},[95,89784,89785,89787,89789],{"class":97,"line":1624},[95,89786,52394],{"class":105},[95,89788,51790],{"class":51277},[95,89790,51284],{"class":105},[95,89792,89793,89795,89797],{"class":97,"line":1629},[95,89794,51762],{"class":105},[95,89796,51777],{"class":51277},[95,89798,51284],{"class":105},[49,89800,89801],{"start":1182},[52,89802,21936],{},[10,89804,89805],{},[1444,89806],{"alt":14,"src":89807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[37,89809,89811],{"id":89810},"_417-性能优化","4.17 性能优化",[66,89813,89815],{"id":89814},"_4171-防抖","4.17.1 防抖",[10,89817,89818],{},[1444,89819],{"alt":14,"src":89820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[10,89822,89823],{},[255,89824,89825],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[10,89827,89828],{},"防抖实现方式：",[1113,89830,89831],{},[52,89832,89833],{},"lodash 提供了防抖处理",[10,89835,89836],{},"_.debounce(func,[wait=0],[options={}])",[10,89838,89839],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[86,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",[92,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},[95,89846,89847,89849,89851,89853],{"class":97,"line":98},[95,89848,51274],{"class":105},[95,89850,51278],{"class":51277},[95,89852,51281],{"class":1945},[95,89854,51284],{"class":105},[95,89856,89857,89859,89861,89863,89865,89867],{"class":97,"line":15},[95,89858,1016],{"class":105},[95,89860,50612],{"class":51277},[95,89862,51293],{"class":1945},[95,89864,151],{"class":105},[95,89866,51298],{"class":210},[95,89868,51284],{"class":105},[95,89870,89871],{"class":97,"line":1161},[95,89872,2382],{"emptyLinePlaceholder":21},[95,89874,89875,89877,89879],{"class":97,"line":1176},[95,89876,1016],{"class":105},[95,89878,51311],{"class":51277},[95,89880,51284],{"class":105},[95,89882,89883,89885,89887,89889,89891,89893],{"class":97,"line":1182},[95,89884,52121],{"class":105},[95,89886,51321],{"class":51277},[95,89888,51324],{"class":1945},[95,89890,151],{"class":105},[95,89892,51329],{"class":210},[95,89894,51284],{"class":105},[95,89896,89897,89899,89901,89903,89905,89907,89909,89911,89913],{"class":97,"line":1196},[95,89898,52121],{"class":105},[95,89900,51321],{"class":51277},[95,89902,14903],{"class":1945},[95,89904,151],{"class":105},[95,89906,51368],{"class":210},[95,89908,51348],{"class":1945},[95,89910,151],{"class":105},[95,89912,51375],{"class":210},[95,89914,51284],{"class":105},[95,89916,89917,89919,89921,89923,89925],{"class":97,"line":1202},[95,89918,52121],{"class":105},[95,89920,51384],{"class":51277},[95,89922,51387],{"class":105},[95,89924,51384],{"class":51277},[95,89926,51284],{"class":105},[95,89928,89929,89931,89933],{"class":97,"line":1293},[95,89930,52121],{"class":105},[95,89932,5109],{"class":51277},[95,89934,51284],{"class":105},[95,89936,89937,89939],{"class":97,"line":1299},[95,89938,54729],{"class":1945},[95,89940,15555],{"class":105},[95,89942,89943,89945,89947,89949],{"class":97,"line":1311},[95,89944,72573],{"class":154},[95,89946,51414],{"class":105},[95,89948,60482],{"class":154},[95,89950,1272],{"class":105},[95,89952,89953,89955,89957,89959,89961],{"class":97,"line":1594},[95,89954,54748],{"class":154},[95,89956,51414],{"class":105},[95,89958,1704],{"class":154},[95,89960,51469],{"class":101},[95,89962,1272],{"class":105},[95,89964,89965,89967,89969,89971,89973],{"class":97,"line":1599},[95,89966,54762],{"class":154},[95,89968,51414],{"class":105},[95,89970,1704],{"class":154},[95,89972,51469],{"class":101},[95,89974,1272],{"class":105},[95,89976,89977,89979,89981,89984],{"class":97,"line":1605},[95,89978,54861],{"class":154},[95,89980,51414],{"class":105},[95,89982,89983],{"class":154},"gray",[95,89985,1272],{"class":105},[95,89987,89988,89990,89992,89994,89996],{"class":97,"line":1610},[95,89989,54899],{"class":154},[95,89991,51414],{"class":105},[95,89993,931],{"class":154},[95,89995,51469],{"class":101},[95,89997,1272],{"class":105},[95,89999,90000,90002,90004,90006],{"class":97,"line":1624},[95,90001,57393],{"class":154},[95,90003,51414],{"class":105},[95,90005,60819],{"class":154},[95,90007,1272],{"class":105},[95,90009,90010,90012,90014,90016],{"class":97,"line":1629},[95,90011,57263],{"class":154},[95,90013,51414],{"class":105},[95,90015,51569],{"class":154},[95,90017,1272],{"class":105},[95,90019,90020,90023,90025,90027,90029],{"class":97,"line":1635},[95,90021,90022],{"class":154},"      padding-top",[95,90024,51414],{"class":105},[95,90026,425],{"class":154},[95,90028,51469],{"class":101},[95,90030,1272],{"class":105},[95,90032,90033],{"class":97,"line":1656},[95,90034,2169],{"class":105},[95,90036,90037,90039,90041],{"class":97,"line":1661},[95,90038,52394],{"class":105},[95,90040,5109],{"class":51277},[95,90042,51284],{"class":105},[95,90044,90045,90047,90049],{"class":97,"line":1675},[95,90046,51762],{"class":105},[95,90048,51311],{"class":51277},[95,90050,51284],{"class":105},[95,90052,90053],{"class":97,"line":1680},[95,90054,2382],{"emptyLinePlaceholder":21},[95,90056,90057,90059,90061],{"class":97,"line":1709},[95,90058,1016],{"class":105},[95,90060,51777],{"class":51277},[95,90062,51284],{"class":105},[95,90064,90065,90067,90069,90071,90073,90075,90077,90079],{"class":97,"line":1714},[95,90066,52121],{"class":105},[95,90068,51588],{"class":51277},[95,90070,53463],{"class":1945},[95,90072,151],{"class":105},[95,90074,53468],{"class":210},[95,90076,55291],{"class":105},[95,90078,51588],{"class":51277},[95,90080,51284],{"class":105},[95,90082,90083,90085,90087,90089,90091,90093,90095,90097],{"class":97,"line":1731},[95,90084,52121],{"class":105},[95,90086,51790],{"class":51277},[95,90088,55216],{"class":1945},[95,90090,151],{"class":105},[95,90092,88251],{"class":210},[95,90094,55291],{"class":105},[95,90096,51790],{"class":51277},[95,90098,51284],{"class":105},[95,90100,90101,90103,90105],{"class":97,"line":1736},[95,90102,52121],{"class":105},[95,90104,51790],{"class":51277},[95,90106,51284],{"class":105},[95,90108,90109,90111,90113,90115,90117,90119,90121,90124],{"class":97,"line":1741},[95,90110,11204],{"class":101},[95,90112,86910],{"class":154},[95,90114,13547],{"class":101},[95,90116,54373],{"class":105},[95,90118,54376],{"class":1945},[95,90120,106],{"class":105},[95,90122,90123],{"class":210},"'.box'",[95,90125,112],{"class":105},[95,90127,90128,90130,90132,90134],{"class":97,"line":1746},[95,90129,52196],{"class":101},[95,90131,9421],{"class":105},[95,90133,151],{"class":101},[95,90135,47318],{"class":154},[95,90137,90138,90140,90143],{"class":97,"line":1760},[95,90139,70061],{"class":101},[95,90141,90142],{"class":1945}," mouseMove",[95,90144,10836],{"class":105},[95,90146,90147,90150,90152,90154],{"class":97,"line":1765},[95,90148,90149],{"class":105},"      box.innerHTML ",[95,90151,151],{"class":101},[95,90153,3014],{"class":105},[95,90155,2684],{"class":101},[95,90157,90158],{"class":97,"line":2559},[95,90159,90160],{"class":164},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[95,90162,90163],{"class":97,"line":2573},[95,90164,2169],{"class":105},[95,90166,90167],{"class":97,"line":2581},[95,90168,90169],{"class":164},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[95,90171,90172],{"class":97,"line":2586},[95,90173,90174],{"class":164},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[95,90176,90177],{"class":97,"line":2592},[95,90178,90179],{"class":164},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[95,90181,90182,90185,90187,90189,90192,90195,90198,90201,90203],{"class":97,"line":2598},[95,90183,90184],{"class":105},"    box.",[95,90186,57790],{"class":1945},[95,90188,106],{"class":105},[95,90190,90191],{"class":210},"'mousemove'",[95,90193,90194],{"class":105},", _.",[95,90196,90197],{"class":1945},"debounce",[95,90199,90200],{"class":105},"(mouseMove, ",[95,90202,65051],{"class":154},[95,90204,30482],{"class":105},[95,90206,90207,90209,90211],{"class":97,"line":2603},[95,90208,52394],{"class":105},[95,90210,51790],{"class":51277},[95,90212,51284],{"class":105},[95,90214,90215,90217,90219],{"class":97,"line":7931},[95,90216,51762],{"class":105},[95,90218,51777],{"class":51277},[95,90220,51284],{"class":105},[95,90222,90223],{"class":97,"line":7955},[95,90224,2382],{"emptyLinePlaceholder":21},[95,90226,90227,90229,90231],{"class":97,"line":7960},[95,90228,51762],{"class":105},[95,90230,50612],{"class":51277},[95,90232,51284],{"class":105},[1113,90234,90235],{},[52,90236,90237],{},"手写一个防抖函数来处理",[10,90239,90240],{},"防抖的核心就是利用定时器来实现的：",[10,90242,90243],{},"①声明一个定时器变量",[10,90245,90246],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[10,90248,90249],{},"③如果没有定时器则开启定时器，记得存到变量里面",[86,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",[92,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},[95,90256,90257,90259,90261,90263],{"class":97,"line":98},[95,90258,51274],{"class":105},[95,90260,51278],{"class":51277},[95,90262,51281],{"class":1945},[95,90264,51284],{"class":105},[95,90266,90267,90269,90271,90273,90275,90277],{"class":97,"line":15},[95,90268,1016],{"class":105},[95,90270,50612],{"class":51277},[95,90272,51293],{"class":1945},[95,90274,151],{"class":105},[95,90276,51298],{"class":210},[95,90278,51284],{"class":105},[95,90280,90281],{"class":97,"line":1161},[95,90282,2382],{"emptyLinePlaceholder":21},[95,90284,90285,90287,90289],{"class":97,"line":1176},[95,90286,1016],{"class":105},[95,90288,51311],{"class":51277},[95,90290,51284],{"class":105},[95,90292,90293,90295,90297,90299,90301,90303],{"class":97,"line":1182},[95,90294,52121],{"class":105},[95,90296,51321],{"class":51277},[95,90298,51324],{"class":1945},[95,90300,151],{"class":105},[95,90302,51329],{"class":210},[95,90304,51284],{"class":105},[95,90306,90307,90309,90311,90313,90315,90317,90319,90321,90323],{"class":97,"line":1196},[95,90308,52121],{"class":105},[95,90310,51321],{"class":51277},[95,90312,14903],{"class":1945},[95,90314,151],{"class":105},[95,90316,51368],{"class":210},[95,90318,51348],{"class":1945},[95,90320,151],{"class":105},[95,90322,51375],{"class":210},[95,90324,51284],{"class":105},[95,90326,90327,90329,90331,90333,90335],{"class":97,"line":1202},[95,90328,52121],{"class":105},[95,90330,51384],{"class":51277},[95,90332,51387],{"class":105},[95,90334,51384],{"class":51277},[95,90336,51284],{"class":105},[95,90338,90339,90341,90343],{"class":97,"line":1293},[95,90340,52121],{"class":105},[95,90342,5109],{"class":51277},[95,90344,51284],{"class":105},[95,90346,90347,90349],{"class":97,"line":1299},[95,90348,54729],{"class":1945},[95,90350,15555],{"class":105},[95,90352,90353,90355,90357,90359],{"class":97,"line":1311},[95,90354,72573],{"class":154},[95,90356,51414],{"class":105},[95,90358,60482],{"class":154},[95,90360,1272],{"class":105},[95,90362,90363,90365,90367,90369,90371],{"class":97,"line":1594},[95,90364,54748],{"class":154},[95,90366,51414],{"class":105},[95,90368,1704],{"class":154},[95,90370,51469],{"class":101},[95,90372,1272],{"class":105},[95,90374,90375,90377,90379,90381,90383],{"class":97,"line":1599},[95,90376,54762],{"class":154},[95,90378,51414],{"class":105},[95,90380,1704],{"class":154},[95,90382,51469],{"class":101},[95,90384,1272],{"class":105},[95,90386,90387,90389,90391,90393],{"class":97,"line":1605},[95,90388,54861],{"class":154},[95,90390,51414],{"class":105},[95,90392,89983],{"class":154},[95,90394,1272],{"class":105},[95,90396,90397,90399,90401,90403,90405],{"class":97,"line":1610},[95,90398,54899],{"class":154},[95,90400,51414],{"class":105},[95,90402,931],{"class":154},[95,90404,51469],{"class":101},[95,90406,1272],{"class":105},[95,90408,90409,90411,90413,90415],{"class":97,"line":1624},[95,90410,57393],{"class":154},[95,90412,51414],{"class":105},[95,90414,60819],{"class":154},[95,90416,1272],{"class":105},[95,90418,90419,90421,90423,90425],{"class":97,"line":1629},[95,90420,57263],{"class":154},[95,90422,51414],{"class":105},[95,90424,51569],{"class":154},[95,90426,1272],{"class":105},[95,90428,90429,90431,90433,90435,90437],{"class":97,"line":1635},[95,90430,90022],{"class":154},[95,90432,51414],{"class":105},[95,90434,425],{"class":154},[95,90436,51469],{"class":101},[95,90438,1272],{"class":105},[95,90440,90441],{"class":97,"line":1656},[95,90442,2169],{"class":105},[95,90444,90445,90447,90449],{"class":97,"line":1661},[95,90446,52394],{"class":105},[95,90448,5109],{"class":51277},[95,90450,51284],{"class":105},[95,90452,90453,90455,90457],{"class":97,"line":1675},[95,90454,51762],{"class":105},[95,90456,51311],{"class":51277},[95,90458,51284],{"class":105},[95,90460,90461],{"class":97,"line":1680},[95,90462,2382],{"emptyLinePlaceholder":21},[95,90464,90465,90467,90469],{"class":97,"line":1709},[95,90466,1016],{"class":105},[95,90468,51777],{"class":51277},[95,90470,51284],{"class":105},[95,90472,90473,90475,90477,90479,90481,90483,90485,90487],{"class":97,"line":1714},[95,90474,52121],{"class":105},[95,90476,51588],{"class":51277},[95,90478,53463],{"class":1945},[95,90480,151],{"class":105},[95,90482,53468],{"class":210},[95,90484,55291],{"class":105},[95,90486,51588],{"class":51277},[95,90488,51284],{"class":105},[95,90490,90491,90493,90495,90497,90499,90501,90503,90505],{"class":97,"line":1731},[95,90492,52121],{"class":105},[95,90494,51790],{"class":51277},[95,90496,55216],{"class":1945},[95,90498,151],{"class":105},[95,90500,88251],{"class":210},[95,90502,55291],{"class":105},[95,90504,51790],{"class":51277},[95,90506,51284],{"class":105},[95,90508,90509,90511,90513],{"class":97,"line":1736},[95,90510,52121],{"class":105},[95,90512,51790],{"class":51277},[95,90514,51284],{"class":105},[95,90516,90517,90519,90521,90523,90525,90527,90529,90531],{"class":97,"line":1741},[95,90518,11204],{"class":101},[95,90520,86910],{"class":154},[95,90522,13547],{"class":101},[95,90524,54373],{"class":105},[95,90526,54376],{"class":1945},[95,90528,106],{"class":105},[95,90530,90123],{"class":210},[95,90532,112],{"class":105},[95,90534,90535,90537,90539,90541],{"class":97,"line":1746},[95,90536,52196],{"class":101},[95,90538,9421],{"class":105},[95,90540,151],{"class":101},[95,90542,47318],{"class":154},[95,90544,90545,90547,90549],{"class":97,"line":1760},[95,90546,70061],{"class":101},[95,90548,90142],{"class":1945},[95,90550,10836],{"class":105},[95,90552,90553,90555,90557,90559],{"class":97,"line":1765},[95,90554,90149],{"class":105},[95,90556,151],{"class":101},[95,90558,3014],{"class":105},[95,90560,2684],{"class":101},[95,90562,90563],{"class":97,"line":2559},[95,90564,90160],{"class":164},[95,90566,90567],{"class":97,"line":2573},[95,90568,2169],{"class":105},[95,90570,90571],{"class":97,"line":2581},[95,90572,90169],{"class":164},[95,90574,90575],{"class":97,"line":2586},[95,90576,90577],{"class":164},"    \u002F\u002F 手写防抖函数\n",[95,90579,90580],{"class":97,"line":2592},[95,90581,90582],{"class":164},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[95,90584,90585],{"class":97,"line":2598},[95,90586,90587],{"class":164},"    \u002F\u002F 1.声明定时器变量\n",[95,90589,90590],{"class":97,"line":2603},[95,90591,90592],{"class":164},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[95,90594,90595],{"class":97,"line":7931},[95,90596,90597],{"class":164},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[95,90599,90600],{"class":97,"line":7955},[95,90601,90602],{"class":164},"    \u002F\u002F 4.定时器里面写函数调用\n",[95,90604,90605,90607,90610,90612,90615,90617,90619],{"class":97,"line":7960},[95,90606,70061],{"class":101},[95,90608,90609],{"class":1945}," debounce",[95,90611,106],{"class":105},[95,90613,90614],{"class":5199},"fn",[95,90616,12418],{"class":105},[95,90618,826],{"class":5199},[95,90620,12425],{"class":105},[95,90622,90623,90625],{"class":97,"line":7966},[95,90624,79749],{"class":101},[95,90626,90627],{"class":105}," timer\n",[95,90629,90630],{"class":97,"line":7993},[95,90631,90632],{"class":164},"      \u002F\u002F return 返回一个匿名函数\n",[95,90634,90635,90637,90639],{"class":97,"line":7998},[95,90636,73959],{"class":101},[95,90638,58895],{"class":101},[95,90640,54429],{"class":105},[95,90642,90643],{"class":97,"line":8004},[95,90644,90645],{"class":164},"        \u002F\u002F 这里边写第二三四步\n",[95,90647,90648,90650,90653,90656],{"class":97,"line":8016},[95,90649,2479],{"class":101},[95,90651,90652],{"class":105}," (timer) ",[95,90654,90655],{"class":1945},"clearTimeout",[95,90657,90658],{"class":105},"(timer)\n",[95,90660,90661,90664,90666,90669,90671,90673],{"class":97,"line":8028},[95,90662,90663],{"class":105},"        timer ",[95,90665,151],{"class":101},[95,90667,90668],{"class":1945}," setTimeout",[95,90670,106],{"class":105},[95,90672,54426],{"class":101},[95,90674,54429],{"class":105},[95,90676,90677,90680,90682],{"class":97,"line":8040},[95,90678,90679],{"class":1945},"          fn",[95,90681,13033],{"class":105},[95,90683,90684],{"class":164},"\u002F\u002F加小括号调用fn }, t)\n",[95,90686,90687],{"class":97,"line":9699},[95,90688,90689],{"class":105},"        }, t)\n",[95,90691,90692],{"class":97,"line":9724},[95,90693,52375],{"class":105},[95,90695,90696],{"class":97,"line":9747},[95,90697,2169],{"class":105},[95,90699,90700,90702,90704,90706,90708,90710,90712,90714,90716],{"class":97,"line":9771},[95,90701,90184],{"class":105},[95,90703,57790],{"class":1945},[95,90705,106],{"class":105},[95,90707,90191],{"class":210},[95,90709,12418],{"class":105},[95,90711,90197],{"class":1945},[95,90713,90200],{"class":105},[95,90715,65051],{"class":154},[95,90717,30482],{"class":105},[95,90719,90720],{"class":97,"line":9776},[95,90721,2382],{"emptyLinePlaceholder":21},[95,90723,90724],{"class":97,"line":9781},[95,90725,90726],{"class":164},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[95,90728,90729],{"class":97,"line":9786},[95,90730,90731],{"class":164},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[95,90733,90734],{"class":97,"line":9795},[95,90735,90736],{"class":164},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[95,90738,90739],{"class":97,"line":9800},[95,90740,90741],{"class":164},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[95,90743,90744,90746,90748],{"class":97,"line":9806},[95,90745,52394],{"class":105},[95,90747,51790],{"class":51277},[95,90749,51284],{"class":105},[95,90751,90752,90754,90756],{"class":97,"line":9827},[95,90753,51762],{"class":105},[95,90755,51777],{"class":51277},[95,90757,51284],{"class":105},[95,90759,90760],{"class":97,"line":9833},[95,90761,2382],{"emptyLinePlaceholder":21},[95,90763,90764,90766,90768],{"class":97,"line":9847},[95,90765,51762],{"class":105},[95,90767,50612],{"class":51277},[95,90769,51284],{"class":105},[66,90771,90773],{"id":90772},"_4172-节流","4.17.2 节流",[10,90775,90776],{},[1444,90777],{"alt":14,"src":90778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[10,90780,90781],{},[1444,90782],{"alt":14,"src":90783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[10,90785,90786],{},[255,90787,90788],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[10,90790,90791],{},"实现方式：",[1113,90793,90794],{},[52,90795,90796],{},"lodash 提供的节流函数来处理",[10,90798,90799],{},"_.throttle(func,[wait=0],[options=])",[10,90801,90802],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[86,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",[92,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},[95,90809,90810,90812,90814,90816],{"class":97,"line":98},[95,90811,51274],{"class":105},[95,90813,51278],{"class":51277},[95,90815,51281],{"class":1945},[95,90817,51284],{"class":105},[95,90819,90820,90822,90824,90826,90828,90830],{"class":97,"line":15},[95,90821,1016],{"class":105},[95,90823,50612],{"class":51277},[95,90825,51293],{"class":1945},[95,90827,151],{"class":105},[95,90829,51298],{"class":210},[95,90831,51284],{"class":105},[95,90833,90834],{"class":97,"line":1161},[95,90835,2382],{"emptyLinePlaceholder":21},[95,90837,90838,90840,90842],{"class":97,"line":1176},[95,90839,1016],{"class":105},[95,90841,51311],{"class":51277},[95,90843,51284],{"class":105},[95,90845,90846,90848,90850,90852,90854,90856],{"class":97,"line":1182},[95,90847,52121],{"class":105},[95,90849,51321],{"class":51277},[95,90851,51324],{"class":1945},[95,90853,151],{"class":105},[95,90855,51329],{"class":210},[95,90857,51284],{"class":105},[95,90859,90860,90862,90864,90866,90868,90870,90872,90874,90876],{"class":97,"line":1196},[95,90861,52121],{"class":105},[95,90863,51321],{"class":51277},[95,90865,14903],{"class":1945},[95,90867,151],{"class":105},[95,90869,51368],{"class":210},[95,90871,51348],{"class":1945},[95,90873,151],{"class":105},[95,90875,51375],{"class":210},[95,90877,51284],{"class":105},[95,90879,90880,90882,90884,90886,90888],{"class":97,"line":1202},[95,90881,52121],{"class":105},[95,90883,51384],{"class":51277},[95,90885,51387],{"class":105},[95,90887,51384],{"class":51277},[95,90889,51284],{"class":105},[95,90891,90892,90894,90896],{"class":97,"line":1293},[95,90893,52121],{"class":105},[95,90895,5109],{"class":51277},[95,90897,51284],{"class":105},[95,90899,90900,90902],{"class":97,"line":1299},[95,90901,54729],{"class":1945},[95,90903,15555],{"class":105},[95,90905,90906,90908,90910,90912],{"class":97,"line":1311},[95,90907,72573],{"class":154},[95,90909,51414],{"class":105},[95,90911,60482],{"class":154},[95,90913,1272],{"class":105},[95,90915,90916,90918,90920,90922,90924],{"class":97,"line":1594},[95,90917,54748],{"class":154},[95,90919,51414],{"class":105},[95,90921,1704],{"class":154},[95,90923,51469],{"class":101},[95,90925,1272],{"class":105},[95,90927,90928,90930,90932,90934,90936],{"class":97,"line":1599},[95,90929,54762],{"class":154},[95,90931,51414],{"class":105},[95,90933,1704],{"class":154},[95,90935,51469],{"class":101},[95,90937,1272],{"class":105},[95,90939,90940,90942,90944,90946],{"class":97,"line":1605},[95,90941,54861],{"class":154},[95,90943,51414],{"class":105},[95,90945,89983],{"class":154},[95,90947,1272],{"class":105},[95,90949,90950,90952,90954,90956,90958],{"class":97,"line":1610},[95,90951,54899],{"class":154},[95,90953,51414],{"class":105},[95,90955,931],{"class":154},[95,90957,51469],{"class":101},[95,90959,1272],{"class":105},[95,90961,90962,90964,90966,90968],{"class":97,"line":1624},[95,90963,57393],{"class":154},[95,90965,51414],{"class":105},[95,90967,60819],{"class":154},[95,90969,1272],{"class":105},[95,90971,90972,90974,90976,90978],{"class":97,"line":1629},[95,90973,57263],{"class":154},[95,90975,51414],{"class":105},[95,90977,51569],{"class":154},[95,90979,1272],{"class":105},[95,90981,90982,90984,90986,90988,90990],{"class":97,"line":1635},[95,90983,90022],{"class":154},[95,90985,51414],{"class":105},[95,90987,425],{"class":154},[95,90989,51469],{"class":101},[95,90991,1272],{"class":105},[95,90993,90994],{"class":97,"line":1656},[95,90995,2169],{"class":105},[95,90997,90998,91000,91002],{"class":97,"line":1661},[95,90999,52394],{"class":105},[95,91001,5109],{"class":51277},[95,91003,51284],{"class":105},[95,91005,91006,91008,91010],{"class":97,"line":1675},[95,91007,51762],{"class":105},[95,91009,51311],{"class":51277},[95,91011,51284],{"class":105},[95,91013,91014],{"class":97,"line":1680},[95,91015,2382],{"emptyLinePlaceholder":21},[95,91017,91018,91020,91022],{"class":97,"line":1709},[95,91019,1016],{"class":105},[95,91021,51777],{"class":51277},[95,91023,51284],{"class":105},[95,91025,91026,91028,91030,91032,91034,91036,91038,91040],{"class":97,"line":1714},[95,91027,52121],{"class":105},[95,91029,51588],{"class":51277},[95,91031,53463],{"class":1945},[95,91033,151],{"class":105},[95,91035,53468],{"class":210},[95,91037,55291],{"class":105},[95,91039,51588],{"class":51277},[95,91041,51284],{"class":105},[95,91043,91044,91046,91048,91050,91052,91054,91056,91058],{"class":97,"line":1731},[95,91045,52121],{"class":105},[95,91047,51790],{"class":51277},[95,91049,55216],{"class":1945},[95,91051,151],{"class":105},[95,91053,88251],{"class":210},[95,91055,55291],{"class":105},[95,91057,51790],{"class":51277},[95,91059,51284],{"class":105},[95,91061,91062,91064,91066],{"class":97,"line":1736},[95,91063,52121],{"class":105},[95,91065,51790],{"class":51277},[95,91067,51284],{"class":105},[95,91069,91070,91072,91074,91076,91078,91080,91082,91084],{"class":97,"line":1741},[95,91071,11204],{"class":101},[95,91073,86910],{"class":154},[95,91075,13547],{"class":101},[95,91077,54373],{"class":105},[95,91079,54376],{"class":1945},[95,91081,106],{"class":105},[95,91083,90123],{"class":210},[95,91085,112],{"class":105},[95,91087,91088,91090,91092,91094],{"class":97,"line":1746},[95,91089,52196],{"class":101},[95,91091,9421],{"class":105},[95,91093,151],{"class":101},[95,91095,47318],{"class":154},[95,91097,91098,91100,91102],{"class":97,"line":1760},[95,91099,70061],{"class":101},[95,91101,90142],{"class":1945},[95,91103,10836],{"class":105},[95,91105,91106,91108,91110,91112],{"class":97,"line":1765},[95,91107,90149],{"class":105},[95,91109,151],{"class":101},[95,91111,3014],{"class":105},[95,91113,2684],{"class":101},[95,91115,91116],{"class":97,"line":2559},[95,91117,90160],{"class":164},[95,91119,91120],{"class":97,"line":2573},[95,91121,2169],{"class":105},[95,91123,91124],{"class":97,"line":2581},[95,91125,90169],{"class":164},[95,91127,91128],{"class":97,"line":2586},[95,91129,91130],{"class":164},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[95,91132,91133],{"class":97,"line":2592},[95,91134,91135],{"class":164},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[95,91137,91138,91140,91142,91144,91146,91148,91151,91153,91155],{"class":97,"line":2598},[95,91139,90184],{"class":105},[95,91141,57790],{"class":1945},[95,91143,106],{"class":105},[95,91145,90191],{"class":210},[95,91147,90194],{"class":105},[95,91149,91150],{"class":1945},"throttle",[95,91152,90200],{"class":105},[95,91154,65051],{"class":154},[95,91156,30482],{"class":105},[95,91158,91159,91161,91163],{"class":97,"line":2603},[95,91160,52394],{"class":105},[95,91162,51790],{"class":51277},[95,91164,51284],{"class":105},[95,91166,91167,91169,91171],{"class":97,"line":7931},[95,91168,51762],{"class":105},[95,91170,51777],{"class":51277},[95,91172,51284],{"class":105},[95,91174,91175],{"class":97,"line":7955},[95,91176,2382],{"emptyLinePlaceholder":21},[95,91178,91179,91181,91183],{"class":97,"line":7960},[95,91180,51762],{"class":105},[95,91182,50612],{"class":51277},[95,91184,51284],{"class":105},[1113,91186,91187],{},[52,91188,91189],{},"手写一个节流函数来处理",[10,91191,70929],{},[10,91193,90243],{},[10,91195,91196],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[10,91198,91199],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[86,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",[92,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},[95,91206,91207,91209,91211,91213],{"class":97,"line":98},[95,91208,51274],{"class":105},[95,91210,51278],{"class":51277},[95,91212,51281],{"class":1945},[95,91214,51284],{"class":105},[95,91216,91217,91219,91221,91223,91225,91227],{"class":97,"line":15},[95,91218,1016],{"class":105},[95,91220,50612],{"class":51277},[95,91222,51293],{"class":1945},[95,91224,151],{"class":105},[95,91226,51298],{"class":210},[95,91228,51284],{"class":105},[95,91230,91231],{"class":97,"line":1161},[95,91232,2382],{"emptyLinePlaceholder":21},[95,91234,91235,91237,91239],{"class":97,"line":1176},[95,91236,1016],{"class":105},[95,91238,51311],{"class":51277},[95,91240,51284],{"class":105},[95,91242,91243,91245,91247,91249,91251,91253],{"class":97,"line":1182},[95,91244,52121],{"class":105},[95,91246,51321],{"class":51277},[95,91248,51324],{"class":1945},[95,91250,151],{"class":105},[95,91252,51329],{"class":210},[95,91254,51284],{"class":105},[95,91256,91257,91259,91261,91263,91265,91267,91269,91271,91273],{"class":97,"line":1196},[95,91258,52121],{"class":105},[95,91260,51321],{"class":51277},[95,91262,14903],{"class":1945},[95,91264,151],{"class":105},[95,91266,51368],{"class":210},[95,91268,51348],{"class":1945},[95,91270,151],{"class":105},[95,91272,51375],{"class":210},[95,91274,51284],{"class":105},[95,91276,91277,91279,91281,91283,91285],{"class":97,"line":1202},[95,91278,52121],{"class":105},[95,91280,51384],{"class":51277},[95,91282,51387],{"class":105},[95,91284,51384],{"class":51277},[95,91286,51284],{"class":105},[95,91288,91289,91291,91293],{"class":97,"line":1293},[95,91290,52121],{"class":105},[95,91292,5109],{"class":51277},[95,91294,51284],{"class":105},[95,91296,91297,91299],{"class":97,"line":1299},[95,91298,54729],{"class":1945},[95,91300,15555],{"class":105},[95,91302,91303,91305,91307,91309],{"class":97,"line":1311},[95,91304,72573],{"class":154},[95,91306,51414],{"class":105},[95,91308,60482],{"class":154},[95,91310,1272],{"class":105},[95,91312,91313,91315,91317,91319,91321],{"class":97,"line":1594},[95,91314,54748],{"class":154},[95,91316,51414],{"class":105},[95,91318,1704],{"class":154},[95,91320,51469],{"class":101},[95,91322,1272],{"class":105},[95,91324,91325,91327,91329,91331,91333],{"class":97,"line":1599},[95,91326,54762],{"class":154},[95,91328,51414],{"class":105},[95,91330,1704],{"class":154},[95,91332,51469],{"class":101},[95,91334,1272],{"class":105},[95,91336,91337,91339,91341,91343],{"class":97,"line":1605},[95,91338,54861],{"class":154},[95,91340,51414],{"class":105},[95,91342,89983],{"class":154},[95,91344,1272],{"class":105},[95,91346,91347,91349,91351,91353,91355],{"class":97,"line":1610},[95,91348,54899],{"class":154},[95,91350,51414],{"class":105},[95,91352,931],{"class":154},[95,91354,51469],{"class":101},[95,91356,1272],{"class":105},[95,91358,91359,91361,91363,91365],{"class":97,"line":1624},[95,91360,57393],{"class":154},[95,91362,51414],{"class":105},[95,91364,60819],{"class":154},[95,91366,1272],{"class":105},[95,91368,91369,91371,91373,91375],{"class":97,"line":1629},[95,91370,57263],{"class":154},[95,91372,51414],{"class":105},[95,91374,51569],{"class":154},[95,91376,1272],{"class":105},[95,91378,91379,91381,91383,91385,91387],{"class":97,"line":1635},[95,91380,90022],{"class":154},[95,91382,51414],{"class":105},[95,91384,425],{"class":154},[95,91386,51469],{"class":101},[95,91388,1272],{"class":105},[95,91390,91391],{"class":97,"line":1656},[95,91392,2169],{"class":105},[95,91394,91395,91397,91399],{"class":97,"line":1661},[95,91396,52394],{"class":105},[95,91398,5109],{"class":51277},[95,91400,51284],{"class":105},[95,91402,91403,91405,91407],{"class":97,"line":1675},[95,91404,51762],{"class":105},[95,91406,51311],{"class":51277},[95,91408,51284],{"class":105},[95,91410,91411],{"class":97,"line":1680},[95,91412,2382],{"emptyLinePlaceholder":21},[95,91414,91415,91417,91419],{"class":97,"line":1709},[95,91416,1016],{"class":105},[95,91418,51777],{"class":51277},[95,91420,51284],{"class":105},[95,91422,91423,91425,91427,91429,91431,91433,91435,91437],{"class":97,"line":1714},[95,91424,52121],{"class":105},[95,91426,51588],{"class":51277},[95,91428,53463],{"class":1945},[95,91430,151],{"class":105},[95,91432,53468],{"class":210},[95,91434,55291],{"class":105},[95,91436,51588],{"class":51277},[95,91438,51284],{"class":105},[95,91440,91441,91443,91445,91447,91449,91451,91453,91455],{"class":97,"line":1731},[95,91442,52121],{"class":105},[95,91444,51790],{"class":51277},[95,91446,55216],{"class":1945},[95,91448,151],{"class":105},[95,91450,88251],{"class":210},[95,91452,55291],{"class":105},[95,91454,51790],{"class":51277},[95,91456,51284],{"class":105},[95,91458,91459,91461,91463],{"class":97,"line":1736},[95,91460,52121],{"class":105},[95,91462,51790],{"class":51277},[95,91464,51284],{"class":105},[95,91466,91467,91469,91471,91473,91475,91477,91479,91481],{"class":97,"line":1741},[95,91468,11204],{"class":101},[95,91470,86910],{"class":154},[95,91472,13547],{"class":101},[95,91474,54373],{"class":105},[95,91476,54376],{"class":1945},[95,91478,106],{"class":105},[95,91480,90123],{"class":210},[95,91482,112],{"class":105},[95,91484,91485,91487,91489,91491],{"class":97,"line":1746},[95,91486,52196],{"class":101},[95,91488,9421],{"class":105},[95,91490,151],{"class":101},[95,91492,47318],{"class":154},[95,91494,91495,91497,91499],{"class":97,"line":1760},[95,91496,70061],{"class":101},[95,91498,90142],{"class":1945},[95,91500,10836],{"class":105},[95,91502,91503,91505,91507,91509],{"class":97,"line":1765},[95,91504,90149],{"class":105},[95,91506,151],{"class":101},[95,91508,3014],{"class":105},[95,91510,2684],{"class":101},[95,91512,91513],{"class":97,"line":2559},[95,91514,90160],{"class":164},[95,91516,91517],{"class":97,"line":2573},[95,91518,2169],{"class":105},[95,91520,91521],{"class":97,"line":2581},[95,91522,90169],{"class":164},[95,91524,91525],{"class":97,"line":2586},[95,91526,91527],{"class":164},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[95,91529,91530],{"class":97,"line":2592},[95,91531,91532],{"class":164},"    \u002F\u002F 1.声明一个定时器变量\n",[95,91534,91535],{"class":97,"line":2598},[95,91536,91537],{"class":164},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[95,91539,91540],{"class":97,"line":2603},[95,91541,91542],{"class":164},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[95,91544,91545],{"class":97,"line":7931},[95,91546,91547],{"class":164},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[95,91549,91550],{"class":97,"line":7955},[95,91551,91552],{"class":164},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[95,91554,91555,91557,91560,91562,91564,91566,91568],{"class":97,"line":7960},[95,91556,70061],{"class":101},[95,91558,91559],{"class":1945}," throttle",[95,91561,106],{"class":105},[95,91563,90614],{"class":5199},[95,91565,12418],{"class":105},[95,91567,826],{"class":5199},[95,91569,12425],{"class":105},[95,91571,91572,91574],{"class":97,"line":7966},[95,91573,79749],{"class":101},[95,91575,90627],{"class":105},[95,91577,91578,91580,91582],{"class":97,"line":7993},[95,91579,73959],{"class":101},[95,91581,58895],{"class":101},[95,91583,54429],{"class":105},[95,91585,91586,91588,91590,91592],{"class":97,"line":7998},[95,91587,2479],{"class":101},[95,91589,1640],{"class":105},[95,91591,332],{"class":101},[95,91593,91594],{"class":105},"timer) {\n",[95,91596,91597,91600,91602,91604,91606,91608],{"class":97,"line":8004},[95,91598,91599],{"class":105},"          timer ",[95,91601,151],{"class":101},[95,91603,90668],{"class":1945},[95,91605,106],{"class":105},[95,91607,54426],{"class":101},[95,91609,54429],{"class":105},[95,91611,91612,91615],{"class":97,"line":8016},[95,91613,91614],{"class":1945},"            fn",[95,91616,1958],{"class":105},[95,91618,91619],{"class":97,"line":8028},[95,91620,91621],{"class":164},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[95,91623,91624],{"class":97,"line":8040},[95,91625,91626],{"class":164},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[95,91628,91629,91632,91634],{"class":97,"line":9699},[95,91630,91631],{"class":105},"            timer ",[95,91633,151],{"class":101},[95,91635,91636],{"class":154}," null\n",[95,91638,91639],{"class":97,"line":9724},[95,91640,91641],{"class":164},"            \u002F\u002F 不能用clearTimeout(timer)\n",[95,91643,91644],{"class":97,"line":9747},[95,91645,91646],{"class":164},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[95,91648,91649],{"class":97,"line":9771},[95,91650,91651],{"class":105},"          }, t)\n",[95,91653,91654],{"class":97,"line":9776},[95,91655,2511],{"class":105},[95,91657,91658],{"class":97,"line":9781},[95,91659,52375],{"class":105},[95,91661,91662],{"class":97,"line":9786},[95,91663,2169],{"class":105},[95,91665,91666,91668,91670,91672,91674,91676,91678,91680,91682],{"class":97,"line":9795},[95,91667,90184],{"class":105},[95,91669,57790],{"class":1945},[95,91671,106],{"class":105},[95,91673,90191],{"class":210},[95,91675,12418],{"class":105},[95,91677,91150],{"class":1945},[95,91679,90200],{"class":105},[95,91681,65051],{"class":154},[95,91683,30482],{"class":105},[95,91685,91686,91688,91690],{"class":97,"line":9800},[95,91687,52394],{"class":105},[95,91689,51790],{"class":51277},[95,91691,51284],{"class":105},[95,91693,91694,91696,91698],{"class":97,"line":9806},[95,91695,51762],{"class":105},[95,91697,51777],{"class":51277},[95,91699,51284],{"class":105},[95,91701,91702],{"class":97,"line":9827},[95,91703,2382],{"emptyLinePlaceholder":21},[95,91705,91706,91708,91710],{"class":97,"line":9833},[95,91707,51762],{"class":105},[95,91709,50612],{"class":51277},[95,91711,51284],{"class":105},[66,91713,91715],{"id":91714},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[86,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",[92,91720,91721,91729,91737,91742,91747,91752,91757,91761,91769],{"__ignoreMap":14},[95,91722,91723,91725,91727],{"class":97,"line":98},[95,91724,1016],{"class":105},[95,91726,51777],{"class":51277},[95,91728,51284],{"class":105},[95,91730,91731,91733,91735],{"class":97,"line":15},[95,91732,52121],{"class":105},[95,91734,51790],{"class":51277},[95,91736,51284],{"class":105},[95,91738,91739],{"class":97,"line":1161},[95,91740,91741],{"class":105},"    let timer = null\n",[95,91743,91744],{"class":97,"line":1176},[95,91745,91746],{"class":105},"    timer = setTimeout(() => {\n",[95,91748,91749],{"class":97,"line":1182},[95,91750,91751],{"class":105},"      clearTimeout(timer)\n",[95,91753,91754],{"class":97,"line":1196},[95,91755,91756],{"class":105},"      console.log(timer)\n",[95,91758,91759],{"class":97,"line":1202},[95,91760,60202],{"class":105},[95,91762,91763,91765,91767],{"class":97,"line":1293},[95,91764,52394],{"class":105},[95,91766,51790],{"class":51277},[95,91768,51284],{"class":105},[95,91770,91771,91773,91775],{"class":97,"line":1299},[95,91772,51762],{"class":105},[95,91774,51777],{"class":51277},[95,91776,51284],{"class":105},[10,91778,91779],{},"输出为1",[10,91781,91782],{},"在开启的定时器里边写清除定时器",[10,91784,91785],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[66,91787,91789],{"id":91788},"_4174-节流综合案例","4.17.4 节流综合案例",[10,91791,91792],{},"页面打开，可以记录上一次的视频播放位置",[10,91794,91795],{},[1444,91796],{"alt":14,"src":91797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[10,91799,91800],{},[1444,91801],{"alt":14,"src":91802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[86,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",[92,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},[95,91809,91810,91812,91814,91816],{"class":97,"line":98},[95,91811,51274],{"class":105},[95,91813,51278],{"class":51277},[95,91815,51281],{"class":1945},[95,91817,51284],{"class":105},[95,91819,91820,91822,91824,91826,91828,91830],{"class":97,"line":15},[95,91821,1016],{"class":105},[95,91823,50612],{"class":51277},[95,91825,51293],{"class":1945},[95,91827,151],{"class":105},[95,91829,51298],{"class":210},[95,91831,51284],{"class":105},[95,91833,91834],{"class":97,"line":1161},[95,91835,2382],{"emptyLinePlaceholder":21},[95,91837,91838,91840,91842],{"class":97,"line":1176},[95,91839,1016],{"class":105},[95,91841,51311],{"class":51277},[95,91843,51284],{"class":105},[95,91845,91846,91848,91850,91852,91854,91856],{"class":97,"line":1182},[95,91847,52121],{"class":105},[95,91849,51321],{"class":51277},[95,91851,51324],{"class":1945},[95,91853,151],{"class":105},[95,91855,51329],{"class":210},[95,91857,59104],{"class":105},[95,91859,91860,91862,91864,91866,91868,91870,91872,91874,91876],{"class":97,"line":1196},[95,91861,52121],{"class":105},[95,91863,51321],{"class":51277},[95,91865,51340],{"class":1945},[95,91867,151],{"class":105},[95,91869,51345],{"class":210},[95,91871,51348],{"class":1945},[95,91873,151],{"class":105},[95,91875,51353],{"class":210},[95,91877,59104],{"class":105},[95,91879,91880,91882,91884,91886,91888,91890,91892,91894,91896],{"class":97,"line":1202},[95,91881,52121],{"class":105},[95,91883,51321],{"class":51277},[95,91885,14903],{"class":1945},[95,91887,151],{"class":105},[95,91889,51368],{"class":210},[95,91891,51348],{"class":1945},[95,91893,151],{"class":105},[95,91895,51375],{"class":210},[95,91897,59104],{"class":105},[95,91899,91900,91902,91904,91906,91908,91911,91913,91915,91918],{"class":97,"line":1293},[95,91901,52121],{"class":105},[95,91903,51321],{"class":51277},[95,91905,14903],{"class":1945},[95,91907,151],{"class":105},[95,91909,91910],{"class":210},"\"referrer\"",[95,91912,51348],{"class":1945},[95,91914,151],{"class":105},[95,91916,91917],{"class":210},"\"never\"",[95,91919,59104],{"class":105},[95,91921,91922,91924,91926,91929,91931],{"class":97,"line":1299},[95,91923,52121],{"class":105},[95,91925,51384],{"class":51277},[95,91927,91928],{"class":105},">综合案例\u003C\u002F",[95,91930,51384],{"class":51277},[95,91932,51284],{"class":105},[95,91934,91935,91937,91939],{"class":97,"line":1311},[95,91936,52121],{"class":105},[95,91938,5109],{"class":51277},[95,91940,51284],{"class":105},[95,91942,91943,91945],{"class":97,"line":1594},[95,91944,6386],{"class":51277},[95,91946,15555],{"class":105},[95,91948,91949,91951,91953,91955],{"class":97,"line":1599},[95,91950,54672],{"class":154},[95,91952,51414],{"class":105},[95,91954,297],{"class":154},[95,91956,1272],{"class":105},[95,91958,91959,91961,91963,91965],{"class":97,"line":1605},[95,91960,54683],{"class":154},[95,91962,51414],{"class":105},[95,91964,297],{"class":154},[95,91966,1272],{"class":105},[95,91968,91969,91971,91973,91975],{"class":97,"line":1610},[95,91970,72573],{"class":154},[95,91972,51414],{"class":105},[95,91974,60482],{"class":154},[95,91976,1272],{"class":105},[95,91978,91979],{"class":97,"line":1624},[95,91980,2169],{"class":105},[95,91982,91983],{"class":97,"line":1629},[95,91984,2382],{"emptyLinePlaceholder":21},[95,91986,91987,91990],{"class":97,"line":1635},[95,91988,91989],{"class":1945},"    .container",[95,91991,15555],{"class":105},[95,91993,91994,91996,91998,92001,92003],{"class":97,"line":1656},[95,91995,54748],{"class":154},[95,91997,51414],{"class":105},[95,91999,92000],{"class":154},"1200",[95,92002,51469],{"class":101},[95,92004,1272],{"class":105},[95,92006,92007,92009,92011,92013,92015],{"class":97,"line":1661},[95,92008,54683],{"class":154},[95,92010,51414],{"class":105},[95,92012,297],{"class":154},[95,92014,51533],{"class":154},[95,92016,1272],{"class":105},[95,92018,92019],{"class":97,"line":1675},[95,92020,2169],{"class":105},[95,92022,92023],{"class":97,"line":1680},[95,92024,2382],{"emptyLinePlaceholder":21},[95,92026,92027,92030,92033],{"class":97,"line":1709},[95,92028,92029],{"class":1945},"    .video",[95,92031,92032],{"class":51277}," video",[95,92034,15555],{"class":105},[95,92036,92037,92039,92041,92043,92045],{"class":97,"line":1714},[95,92038,54748],{"class":154},[95,92040,51414],{"class":105},[95,92042,417],{"class":154},[95,92044,434],{"class":101},[95,92046,1272],{"class":105},[95,92048,92049,92051,92053,92055,92057,92059],{"class":97,"line":1731},[95,92050,54672],{"class":154},[95,92052,51414],{"class":105},[95,92054,806],{"class":154},[95,92056,51469],{"class":101},[95,92058,4075],{"class":154},[95,92060,1272],{"class":105},[95,92062,92063],{"class":97,"line":1736},[95,92064,2169],{"class":105},[95,92066,92067],{"class":97,"line":1741},[95,92068,2382],{"emptyLinePlaceholder":21},[95,92070,92071,92074],{"class":97,"line":1746},[95,92072,92073],{"class":1945},"    .elevator",[95,92075,15555],{"class":105},[95,92077,92078,92080,92082,92084],{"class":97,"line":1760},[95,92079,54736],{"class":154},[95,92081,51414],{"class":105},[95,92083,86210],{"class":154},[95,92085,1272],{"class":105},[95,92087,92088,92090,92092,92095,92097],{"class":97,"line":1765},[95,92089,54924],{"class":154},[95,92091,51414],{"class":105},[95,92093,92094],{"class":154},"280",[95,92096,51469],{"class":101},[95,92098,1272],{"class":105},[95,92100,92101,92103,92105,92107,92109],{"class":97,"line":2559},[95,92102,86404],{"class":154},[95,92104,51414],{"class":105},[95,92106,806],{"class":154},[95,92108,51469],{"class":101},[95,92110,1272],{"class":105},[95,92112,92113,92115,92117,92119],{"class":97,"line":2573},[95,92114,86217],{"class":154},[95,92116,51414],{"class":105},[95,92118,86222],{"class":154},[95,92120,1272],{"class":105},[95,92122,92123,92125,92127,92129],{"class":97,"line":2581},[95,92124,61698],{"class":154},[95,92126,51414],{"class":105},[95,92128,60819],{"class":154},[95,92130,1272],{"class":105},[95,92132,92133,92135,92137,92139,92141,92143,92145],{"class":97,"line":2586},[95,92134,61954],{"class":154},[95,92136,51414],{"class":105},[95,92138,323],{"class":154},[95,92140,51469],{"class":101},[95,92142,51498],{"class":154},[95,92144,62221],{"class":154},[95,92146,1272],{"class":105},[95,92148,92149,92151,92153,92155,92157],{"class":97,"line":2592},[95,92150,54748],{"class":154},[95,92152,51414],{"class":105},[95,92154,1013],{"class":154},[95,92156,51469],{"class":101},[95,92158,1272],{"class":105},[95,92160,92161],{"class":97,"line":2598},[95,92162,2169],{"class":105},[95,92164,92165],{"class":97,"line":2603},[95,92166,2382],{"emptyLinePlaceholder":21},[95,92168,92169,92171,92173],{"class":97,"line":7931},[95,92170,92073],{"class":1945},[95,92172,1380],{"class":51277},[95,92174,15555],{"class":105},[95,92176,92177,92179,92181,92183],{"class":97,"line":7955},[95,92178,54986],{"class":154},[95,92180,51414],{"class":105},[95,92182,60846],{"class":154},[95,92184,1272],{"class":105},[95,92186,92187,92189,92191,92193,92195],{"class":97,"line":7960},[95,92188,54672],{"class":154},[95,92190,51414],{"class":105},[95,92192,552],{"class":154},[95,92194,51469],{"class":101},[95,92196,1272],{"class":105},[95,92198,92199,92201,92203,92205],{"class":97,"line":7966},[95,92200,63947],{"class":154},[95,92202,51414],{"class":105},[95,92204,54714],{"class":154},[95,92206,1272],{"class":105},[95,92208,92209,92211,92213,92215],{"class":97,"line":7993},[95,92210,57263],{"class":154},[95,92212,51414],{"class":105},[95,92214,51569],{"class":154},[95,92216,1272],{"class":105},[95,92218,92219,92221,92223,92225],{"class":97,"line":7998},[95,92220,57393],{"class":154},[95,92222,51414],{"class":105},[95,92224,62047],{"class":154},[95,92226,1272],{"class":105},[95,92228,92229],{"class":97,"line":8004},[95,92230,2169],{"class":105},[95,92232,92233],{"class":97,"line":8016},[95,92234,2382],{"emptyLinePlaceholder":21},[95,92236,92237,92239,92241,92243],{"class":97,"line":8028},[95,92238,92073],{"class":1945},[95,92240,1380],{"class":51277},[95,92242,64001],{"class":1945},[95,92244,15555],{"class":105},[95,92246,92247,92249,92251,92254],{"class":97,"line":8040},[95,92248,57393],{"class":154},[95,92250,51414],{"class":105},[95,92252,92253],{"class":154},"#1286ff",[95,92255,1272],{"class":105},[95,92257,92258],{"class":97,"line":9699},[95,92259,2169],{"class":105},[95,92261,92262,92264,92266],{"class":97,"line":9724},[95,92263,52394],{"class":105},[95,92265,5109],{"class":51277},[95,92267,51284],{"class":105},[95,92269,92270,92272,92274],{"class":97,"line":9747},[95,92271,51762],{"class":105},[95,92273,51311],{"class":51277},[95,92275,51284],{"class":105},[95,92277,92278],{"class":97,"line":9771},[95,92279,2382],{"emptyLinePlaceholder":21},[95,92281,92282,92284,92286],{"class":97,"line":9776},[95,92283,1016],{"class":105},[95,92285,51777],{"class":51277},[95,92287,51284],{"class":105},[95,92289,92290,92292,92294,92296,92298,92301],{"class":97,"line":9781},[95,92291,52121],{"class":105},[95,92293,51588],{"class":51277},[95,92295,53463],{"class":1945},[95,92297,151],{"class":105},[95,92299,92300],{"class":210},"\"container\"",[95,92302,51284],{"class":105},[95,92304,92305,92307,92309,92311,92313,92316],{"class":97,"line":9786},[95,92306,51318],{"class":105},[95,92308,51588],{"class":51277},[95,92310,53463],{"class":1945},[95,92312,151],{"class":105},[95,92314,92315],{"class":210},"\"header\"",[95,92317,51284],{"class":105},[95,92319,92320,92322,92324,92326,92328,92331],{"class":97,"line":9795},[95,92321,55211],{"class":105},[95,92323,344],{"class":51277},[95,92325,61034],{"class":1945},[95,92327,151],{"class":105},[95,92329,92330],{"class":210},"\"http:\u002F\u002Fpip.itcast.cn\"",[95,92332,51284],{"class":105},[95,92334,92335,92337,92339,92341,92343,92346,92348,92350,92352],{"class":97,"line":9800},[95,92336,55279],{"class":105},[95,92338,1444],{"class":51277},[95,92340,55216],{"class":1945},[95,92342,151],{"class":105},[95,92344,92345],{"class":210},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[95,92347,55224],{"class":1945},[95,92349,151],{"class":105},[95,92351,7635],{"class":210},[95,92353,59104],{"class":105},[95,92355,92356,92358,92360],{"class":97,"line":9806},[95,92357,55384],{"class":105},[95,92359,344],{"class":51277},[95,92361,51284],{"class":105},[95,92363,92364,92366,92368],{"class":97,"line":9827},[95,92365,51753],{"class":105},[95,92367,51588],{"class":51277},[95,92369,51284],{"class":105},[95,92371,92372,92374,92376,92378,92380,92383],{"class":97,"line":9833},[95,92373,51318],{"class":105},[95,92375,51588],{"class":51277},[95,92377,53463],{"class":1945},[95,92379,151],{"class":105},[95,92381,92382],{"class":210},"\"video\"",[95,92384,51284],{"class":105},[95,92386,92387,92389,92391,92393,92395,92398,92401,92403,92405],{"class":97,"line":9847},[95,92388,55211],{"class":105},[95,92390,28168],{"class":51277},[95,92392,55216],{"class":1945},[95,92394,151],{"class":105},[95,92396,92397],{"class":210},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[95,92399,92400],{"class":1945}," controls",[95,92402,55291],{"class":105},[95,92404,28168],{"class":51277},[95,92406,51284],{"class":105},[95,92408,92409,92411,92413],{"class":97,"line":9853},[95,92410,51753],{"class":105},[95,92412,51588],{"class":51277},[95,92414,51284],{"class":105},[95,92416,92417,92419,92421,92423,92425,92428],{"class":97,"line":9880},[95,92418,51318],{"class":105},[95,92420,51588],{"class":51277},[95,92422,53463],{"class":1945},[95,92424,151],{"class":105},[95,92426,92427],{"class":210},"\"elevator\"",[95,92429,51284],{"class":105},[95,92431,92432,92434,92436,92438,92440,92442,92445,92447,92449,92452,92454],{"class":97,"line":9889},[95,92433,55211],{"class":105},[95,92435,344],{"class":51277},[95,92437,61034],{"class":1945},[95,92439,151],{"class":105},[95,92441,64213],{"class":210},[95,92443,92444],{"class":1945}," data-ref",[95,92446,151],{"class":105},[95,92448,92382],{"class":210},[95,92450,92451],{"class":105},">视频介绍\u003C\u002F",[95,92453,344],{"class":51277},[95,92455,51284],{"class":105},[95,92457,92458,92460,92462,92464,92466,92468,92470,92472,92475,92478,92480],{"class":97,"line":9895},[95,92459,55211],{"class":105},[95,92461,344],{"class":51277},[95,92463,61034],{"class":1945},[95,92465,151],{"class":105},[95,92467,64213],{"class":210},[95,92469,92444],{"class":1945},[95,92471,151],{"class":105},[95,92473,92474],{"class":210},"\"intro\"",[95,92476,92477],{"class":105},">课程简介\u003C\u002F",[95,92479,344],{"class":51277},[95,92481,51284],{"class":105},[95,92483,92484,92486,92488,92490,92492,92494,92496,92498,92501,92504,92506],{"class":97,"line":9903},[95,92485,55211],{"class":105},[95,92487,344],{"class":51277},[95,92489,61034],{"class":1945},[95,92491,151],{"class":105},[95,92493,64213],{"class":210},[95,92495,92444],{"class":1945},[95,92497,151],{"class":105},[95,92499,92500],{"class":210},"\"outline\"",[95,92502,92503],{"class":105},">评论列表\u003C\u002F",[95,92505,344],{"class":51277},[95,92507,51284],{"class":105},[95,92509,92510,92512,92514],{"class":97,"line":9908},[95,92511,51753],{"class":105},[95,92513,51588],{"class":51277},[95,92515,51284],{"class":105},[95,92517,92518,92520,92522],{"class":97,"line":16587},[95,92519,52394],{"class":105},[95,92521,51588],{"class":51277},[95,92523,51284],{"class":105},[95,92525,92526,92528,92530,92532,92534,92537,92539,92541],{"class":97,"line":16593},[95,92527,52121],{"class":105},[95,92529,51790],{"class":51277},[95,92531,55216],{"class":1945},[95,92533,151],{"class":105},[95,92535,92536],{"class":210},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[95,92538,55291],{"class":105},[95,92540,51790],{"class":51277},[95,92542,51284],{"class":105},[95,92544,92545,92547,92549],{"class":97,"line":16616},[95,92546,52121],{"class":105},[95,92548,51790],{"class":51277},[95,92550,51284],{"class":105},[95,92552,92553],{"class":97,"line":16622},[95,92554,92555],{"class":164},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[95,92557,92558,92560,92562,92564,92566,92568,92570,92573],{"class":97,"line":16645},[95,92559,11204],{"class":101},[95,92561,92032],{"class":154},[95,92563,13547],{"class":101},[95,92565,54373],{"class":105},[95,92567,54376],{"class":1945},[95,92569,106],{"class":105},[95,92571,92572],{"class":210},"'video'",[95,92574,112],{"class":105},[95,92576,92577],{"class":97,"line":16659},[95,92578,92579],{"class":164},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[95,92581,92582,92585,92587,92589,92591,92594,92596],{"class":97,"line":16679},[95,92583,92584],{"class":105},"    video.ontimeupdate ",[95,92586,151],{"class":101},[95,92588,88332],{"class":105},[95,92590,91150],{"class":1945},[95,92592,92593],{"class":105},"(() ",[95,92595,84699],{"class":101},[95,92597,15555],{"class":105},[95,92599,92600],{"class":97,"line":16685},[95,92601,92602],{"class":164},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[95,92604,92605],{"class":97,"line":16696},[95,92606,92607],{"class":164},"      \u002F\u002F 控制台输出当前的时间\n",[95,92609,92610,92613],{"class":97,"line":16719},[95,92611,92612],{"class":164},"      \u002F\u002F console.log(video.currentTime)",[95,92614,92615],{"class":164},"  \u002F\u002F获得当前的视频时间\n",[95,92617,92618],{"class":97,"line":16741},[95,92619,92620],{"class":164},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[95,92622,92623,92625,92627,92629,92632],{"class":97,"line":16746},[95,92624,74660],{"class":105},[95,92626,71631],{"class":1945},[95,92628,106],{"class":105},[95,92630,92631],{"class":210},"'currentTime'",[95,92633,92634],{"class":105},", video.currentTime)\n",[95,92636,92637,92639,92641],{"class":97,"line":16752},[95,92638,54512],{"class":105},[95,92640,6393],{"class":154},[95,92642,112],{"class":105},[95,92644,92645],{"class":97,"line":16766},[95,92646,92647],{"class":164},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[95,92649,92650,92653,92656,92658,92661,92663],{"class":97,"line":16779},[95,92651,92652],{"class":105},"    video.",[95,92654,92655],{"class":1945},"onloadeddata",[95,92657,13547],{"class":101},[95,92659,92660],{"class":105}," () ",[95,92662,84699],{"class":101},[95,92664,15555],{"class":105},[95,92666,92667],{"class":97,"line":16784},[95,92668,59989],{"class":164},[95,92670,92671],{"class":97,"line":16798},[95,92672,92673],{"class":164},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[95,92675,92676,92679,92681,92684,92686,92688,92690,92692,92694],{"class":97,"line":16803},[95,92677,92678],{"class":105},"      video.currentTime ",[95,92680,151],{"class":101},[95,92682,92683],{"class":105}," localStorage.",[95,92685,71662],{"class":1945},[95,92687,106],{"class":105},[95,92689,92631],{"class":210},[95,92691,13697],{"class":105},[95,92693,71334],{"class":101},[95,92695,47318],{"class":154},[95,92697,92698],{"class":97,"line":16809},[95,92699,2169],{"class":105},[95,92701,92702,92704,92706],{"class":97,"line":16814},[95,92703,52394],{"class":105},[95,92705,51790],{"class":51277},[95,92707,51284],{"class":105},[95,92709,92710,92712,92714],{"class":97,"line":16828},[95,92711,51762],{"class":105},[95,92713,51777],{"class":51277},[95,92715,51284],{"class":105},[95,92717,92718],{"class":97,"line":16833},[95,92719,2382],{"emptyLinePlaceholder":21},[95,92721,92722,92724,92726],{"class":97,"line":16838},[95,92723,51762],{"class":105},[95,92725,50612],{"class":51277},[95,92727,51284],{"class":105},[5109,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":1161,"text":76673},{"id":76697,"depth":1161,"text":76698},{"id":76709,"depth":1161,"text":76710},{"id":76721,"depth":15,"text":76722,"children":92739},[92740,92741],{"id":76725,"depth":1161,"text":76726},{"id":76740,"depth":1161,"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":1161,"text":76858},{"id":76870,"depth":1161,"text":76871},{"id":76975,"depth":1161,"text":76976},{"id":77264,"depth":15,"text":77265,"children":92750},[92751,92752,92753],{"id":77268,"depth":1161,"text":77269},{"id":77711,"depth":1161,"text":77712},{"id":78122,"depth":1161,"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":1161,"text":80207},{"id":80218,"depth":1161,"text":80219},{"id":80437,"depth":1161,"text":80438},{"id":80455,"depth":1161,"text":80456},{"id":80515,"depth":1161,"text":80516},{"id":84783,"depth":15,"text":84784,"children":92765},[92766,92767,92768],{"id":84787,"depth":1161,"text":84788},{"id":84805,"depth":1161,"text":84806},{"id":84831,"depth":1161,"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":1161,"text":84867},{"id":85127,"depth":1161,"text":85128},{"id":85313,"depth":1161,"text":85314},{"id":85680,"depth":1161,"text":85681},{"id":85796,"depth":1161,"text":85797},{"id":85832,"depth":1161,"text":85833},{"id":85879,"depth":1161,"text":85880},{"id":85913,"depth":1161,"text":85914},{"id":87276,"depth":15,"text":87277,"children":92781},[92782,92783],{"id":87280,"depth":1161,"text":87281},{"id":87317,"depth":1161,"text":87318},{"id":88672,"depth":15,"text":88673},{"id":89043,"depth":15,"text":89044,"children":92786},[92787,92788],{"id":89047,"depth":1161,"text":89048},{"id":89081,"depth":1161,"text":89082},{"id":89810,"depth":15,"text":89811,"children":92790},[92791,92792,92793,92794],{"id":89814,"depth":1161,"text":89815},{"id":90772,"depth":1161,"text":90773},{"id":91714,"depth":1161,"text":91715},{"id":91788,"depth":1161,"text":91789},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76657,"description":23360},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92801,"title":92802,"body":92803,"description":92814,"extension":18,"meta":92815,"navigation":21,"path":92817,"seo":92818,"stem":92819,"__hash__":92820},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92804,"toc":92812},[92805],[10,92806,92807,92808],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[344,92809,92810],{"href":92810,"rel":92811},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23849],{"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":23360,"extension":18,"meta":92929,"navigation":21,"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],[10,92827,92828],{},[344,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",[23849],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[33,92834,92823],{"id":92835},"_1安装",[10,92837,92838],{},"numpy是科学计算基础库,底层是C语言",[10,92840,92841],{},"三种方式：",[37,92843,92845],{"id":92844},"_11-通过pip安装","1.1 通过pip安装",[86,92847,92849],{"className":30363,"code":92848,"language":30365,"meta":14,"style":14},"pip install numpy\n",[92,92850,92851],{"__ignoreMap":14},[95,92852,92853],{"class":97,"line":98},[95,92854,92848],{"class":105},[10,92856,92857],{},"首选方式，自动处理依赖项",[10,92859,92860],{},"在提示系统命令符中使用cmd",[37,92862,92864],{"id":92863},"_12-通过anaconda安装","1.2 通过Anaconda安装",[86,92866,92868],{"className":30363,"code":92867,"language":30365,"meta":14,"style":14},"conda install numpy\n",[92,92869,92870],{"__ignoreMap":14},[95,92871,92872],{"class":97,"line":98},[95,92873,92867],{"class":105},[10,92875,92876],{},"自动解决环境依赖",[37,92878,92880],{"id":92879},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[10,92882,92883],{},"对于Debian\u002FUbuntu",[86,92885,92887],{"className":30363,"code":92886,"language":30365,"meta":14,"style":14},"sudo apt-get install python3-numpy\n",[92,92888,92889],{"__ignoreMap":14},[95,92890,92891,92894,92896,92899,92901],{"class":97,"line":98},[95,92892,92893],{"class":105},"sudo apt",[95,92895,638],{"class":101},[95,92897,92898],{"class":105},"get install python3",[95,92900,638],{"class":101},[95,92902,92903],{"class":105},"numpy\n",[10,92905,92906],{},"对于Fedora:",[86,92908,92910],{"className":30363,"code":92909,"language":30365,"meta":14,"style":14},"sudo dnf install python3-numpy\n",[92,92911,92912],{"__ignoreMap":14},[95,92913,92914,92917,92919],{"class":97,"line":98},[95,92915,92916],{"class":105},"sudo dnf install python3",[95,92918,638],{"class":101},[95,92920,92903],{"class":105},[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92935,"title":92936,"body":92937,"description":23360,"extension":18,"meta":93050,"navigation":21,"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],[33,92940,92936],{"id":92941},"_10算数函数",[10,92943,92944],{},"加减乘除运算跟python基础语法没区别",[10,92946,92947],{},"除了python那种方法外还可以使用函数",[10,92949,92950],{},"加：np.add(a,b)",[10,92952,92953],{},"减：np.subtract(a,b)",[10,92955,92956],{},"乘：np.multiply(a,b)",[10,92958,92959],{},"除：np.divide(a,b) == a\u002Fb",[10,92961,92962],{},"取余：np.mod(a,b) == a%b",[10,92964,92965],{},"必须会的用法：",[86,92967,92969],{"className":30363,"code":92968,"language":30365,"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",[92,92970,92971,92993,93014,93024,93037],{"__ignoreMap":14},[95,92972,92973,92975,92977,92980,92982,92985,92987,92989,92991],{"class":97,"line":98},[95,92974,344],{"class":105},[95,92976,151],{"class":101},[95,92978,92979],{"class":105},"np.arange(",[95,92981,526],{"class":154},[95,92983,92984],{"class":105},").reshape(",[95,92986,177],{"class":154},[95,92988,484],{"class":105},[95,92990,177],{"class":154},[95,92992,112],{"class":105},[95,92994,92995,92997,92999,93002,93004,93006,93008,93010,93012],{"class":97,"line":15},[95,92996,369],{"class":105},[95,92998,151],{"class":101},[95,93000,93001],{"class":105},"np.array([",[95,93003,552],{"class":154},[95,93005,484],{"class":105},[95,93007,552],{"class":154},[95,93009,484],{"class":105},[95,93011,552],{"class":154},[95,93013,4639],{"class":105},[95,93015,93016,93019,93021],{"class":97,"line":1161},[95,93017,93018],{"class":105},"result",[95,93020,151],{"class":101},[95,93022,93023],{"class":105},"np.empty_like(a)\n",[95,93025,93026,93029,93032,93034],{"class":97,"line":1176},[95,93027,93028],{"class":105},"np.add(a,b,",[95,93030,93031],{"class":5199},"out",[95,93033,151],{"class":101},[95,93035,93036],{"class":105},"result)\n",[95,93038,93039],{"class":97,"line":1182},[95,93040,93041],{"class":105},"result\n",[10,93043,93044],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93056,"title":93057,"body":93058,"description":23360,"extension":18,"meta":93820,"navigation":21,"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],[33,93061,93057],{"id":93062},"_11统计函数",[10,93064,93065],{},"sum max min mean",[10,93067,93068],{},"这些有axis参数，可以指定方向",[37,93070,93072],{"id":93071},"_111-sum求和函数","11.1 sum()求和函数",[86,93074,93076],{"className":30363,"code":93075,"language":30365,"meta":14,"style":14},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[92,93077,93078,93083,93104],{"__ignoreMap":14},[95,93079,93080],{"class":97,"line":98},[95,93081,93082],{"class":164},"#创建一维数组\n",[95,93084,93085,93087,93089,93092,93094,93096,93098,93100,93102],{"class":97,"line":15},[95,93086,344],{"class":105},[95,93088,151],{"class":101},[95,93090,93091],{"class":105},"np.random.randint(",[95,93093,323],{"class":154},[95,93095,484],{"class":105},[95,93097,417],{"class":154},[95,93099,484],{"class":105},[95,93101,806],{"class":154},[95,93103,112],{"class":105},[95,93105,93106,93109],{"class":97,"line":1161},[95,93107,93108],{"class":105},"np.sum(a)",[95,93110,93111],{"class":164},"#求和\n",[37,93113,93115],{"id":93114},"_112-max求最大值函数","11.2 max()求最大值函数",[86,93117,93119],{"className":30363,"code":93118,"language":30365,"meta":14,"style":14},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[92,93120,93121,93125,93145,93150,93155],{"__ignoreMap":14},[95,93122,93123],{"class":97,"line":98},[95,93124,93082],{"class":164},[95,93126,93127,93129,93131,93133,93135,93137,93139,93141,93143],{"class":97,"line":15},[95,93128,344],{"class":105},[95,93130,151],{"class":101},[95,93132,93091],{"class":105},[95,93134,323],{"class":154},[95,93136,484],{"class":105},[95,93138,417],{"class":154},[95,93140,484],{"class":105},[95,93142,806],{"class":154},[95,93144,112],{"class":105},[95,93146,93147],{"class":97,"line":1161},[95,93148,93149],{"class":105},"np.max(a)\n",[95,93151,93152],{"class":97,"line":1176},[95,93153,93154],{"class":164},"#最大索引(求最大元素的索引)arg\n",[95,93156,93157],{"class":97,"line":1182},[95,93158,93159],{"class":105},"np.argmax(a)\n",[86,93161,93163],{"className":30363,"code":93162,"language":30365,"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",[92,93164,93165,93186,93206,93210],{"__ignoreMap":14},[95,93166,93167,93169,93171,93174,93176,93178,93180,93182,93184],{"class":97,"line":98},[95,93168,10902],{"class":105},[95,93170,151],{"class":101},[95,93172,93173],{"class":105}," np.array([",[95,93175,323],{"class":154},[95,93177,12418],{"class":105},[95,93179,425],{"class":154},[95,93181,12418],{"class":105},[95,93183,177],{"class":154},[95,93185,4639],{"class":105},[95,93187,93188,93190,93192,93194,93196,93198,93200,93202,93204],{"class":97,"line":15},[95,93189,10928],{"class":105},[95,93191,151],{"class":101},[95,93193,93173],{"class":105},[95,93195,177],{"class":154},[95,93197,12418],{"class":105},[95,93199,183],{"class":154},[95,93201,12418],{"class":105},[95,93203,399],{"class":154},[95,93205,4639],{"class":105},[95,93207,93208],{"class":97,"line":1161},[95,93209,2382],{"emptyLinePlaceholder":21},[95,93211,93212,93214,93217],{"class":97,"line":1176},[95,93213,30400],{"class":154},[95,93215,93216],{"class":105},"(np.maximum(a, b))   ",[95,93218,93219],{"class":164},"# [3 5 4]，每个位置上取较大值\n",[37,93221,93223],{"id":93222},"_113-mean求平均值函数","11.3 mean()求平均值函数",[10,93225,93226],{},"①一维数组：",[86,93228,93230],{"className":30363,"code":93229,"language":30365,"meta":14,"style":14},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[92,93231,93232,93236,93256,93261],{"__ignoreMap":14},[95,93233,93234],{"class":97,"line":98},[95,93235,93082],{"class":164},[95,93237,93238,93240,93242,93244,93246,93248,93250,93252,93254],{"class":97,"line":15},[95,93239,344],{"class":105},[95,93241,151],{"class":101},[95,93243,93091],{"class":105},[95,93245,323],{"class":154},[95,93247,484],{"class":105},[95,93249,417],{"class":154},[95,93251,484],{"class":105},[95,93253,806],{"class":154},[95,93255,112],{"class":105},[95,93257,93258],{"class":97,"line":1161},[95,93259,93260],{"class":164},"#求平均值\n",[95,93262,93263],{"class":97,"line":1176},[95,93264,93265],{"class":105},"np.mean(a)\n",[10,93267,93268],{},"②二维数组",[86,93270,93272],{"className":30363,"code":93271,"language":30365,"meta":14,"style":14},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[92,93273,93274,93279,93304,93309],{"__ignoreMap":14},[95,93275,93276],{"class":97,"line":98},[95,93277,93278],{"class":164},"#二维数组\n",[95,93280,93281,93284,93286,93288,93290,93292,93294,93296,93298,93300,93302],{"class":97,"line":15},[95,93282,93283],{"class":105},"aa",[95,93285,151],{"class":101},[95,93287,92979],{"class":105},[95,93289,323],{"class":154},[95,93291,484],{"class":105},[95,93293,629],{"class":154},[95,93295,92984],{"class":105},[95,93297,177],{"class":154},[95,93299,484],{"class":105},[95,93301,399],{"class":154},[95,93303,112],{"class":105},[95,93305,93306],{"class":97,"line":1161},[95,93307,93308],{"class":164},"#对数组中的所有数求平均\n",[95,93310,93311],{"class":97,"line":1176},[95,93312,93313],{"class":105},"np.mean(aa)\n",[37,93315,93317],{"id":93316},"_114-median求中位数函数","11.4 median()求中位数函数",[86,93319,93321],{"className":30363,"code":93320,"language":30365,"meta":14,"style":14},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[92,93322,93323,93328,93344,93349],{"__ignoreMap":14},[95,93324,93325],{"class":97,"line":98},[95,93326,93327],{"class":164},"#求中位数\n",[95,93329,93330,93332,93334,93336,93338,93340,93342],{"class":97,"line":15},[95,93331,369],{"class":105},[95,93333,151],{"class":101},[95,93335,92979],{"class":105},[95,93337,323],{"class":154},[95,93339,484],{"class":105},[95,93341,552],{"class":154},[95,93343,112],{"class":105},[95,93345,93346],{"class":97,"line":1161},[95,93347,93348],{"class":105},"np.median(b)\n",[95,93350,93351],{"class":97,"line":1176},[95,93352,93353],{"class":164},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[37,93355,93357],{"id":93356},"_115-power求幂运算函数","11.5 power()求幂运算函数",[86,93359,93361],{"className":30363,"code":93360,"language":30365,"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",[92,93362,93363,93379,93384,93389,93398,93403,93412],{"__ignoreMap":14},[95,93364,93365,93367,93369,93371,93373,93375,93377],{"class":97,"line":98},[95,93366,369],{"class":105},[95,93368,151],{"class":101},[95,93370,92979],{"class":105},[95,93372,323],{"class":154},[95,93374,484],{"class":105},[95,93376,552],{"class":154},[95,93378,112],{"class":105},[95,93380,93381],{"class":97,"line":15},[95,93382,93383],{"class":164},"#幂运算\n",[95,93385,93386],{"class":97,"line":1161},[95,93387,93388],{"class":164},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[95,93390,93391,93394,93396],{"class":97,"line":1176},[95,93392,93393],{"class":105},"np.power(b,",[95,93395,183],{"class":154},[95,93397,112],{"class":105},[95,93399,93400],{"class":97,"line":1182},[95,93401,93402],{"class":164},"#或者以下代码，将数据存储起来\n",[95,93404,93405,93407,93409],{"class":97,"line":1196},[95,93406,951],{"class":105},[95,93408,151],{"class":101},[95,93410,93411],{"class":105},"np.empty_like(b)\n",[95,93413,93414,93416,93418,93420,93422,93424],{"class":97,"line":1202},[95,93415,93393],{"class":105},[95,93417,183],{"class":154},[95,93419,484],{"class":105},[95,93421,93031],{"class":5199},[95,93423,151],{"class":101},[95,93425,93426],{"class":105},"y)\n",[37,93428,93430],{"id":93429},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[86,93432,93434],{"className":30363,"code":93433,"language":30365,"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",[92,93435,93436,93452,93457,93462,93466,93484],{"__ignoreMap":14},[95,93437,93438,93440,93442,93444,93446,93448,93450],{"class":97,"line":98},[95,93439,369],{"class":105},[95,93441,151],{"class":101},[95,93443,92979],{"class":105},[95,93445,323],{"class":154},[95,93447,484],{"class":105},[95,93449,552],{"class":154},[95,93451,112],{"class":105},[95,93453,93454],{"class":97,"line":15},[95,93455,93456],{"class":164},"#开方\n",[95,93458,93459],{"class":97,"line":1161},[95,93460,93461],{"class":105},"np.sqrt(b)\n",[95,93463,93464],{"class":97,"line":1176},[95,93465,93402],{"class":164},[95,93467,93468,93470,93472,93475,93478,93480,93482],{"class":97,"line":1182},[95,93469,951],{"class":105},[95,93471,151],{"class":101},[95,93473,93474],{"class":105},"np.empty_like(b,",[95,93476,93477],{"class":5199},"dtype",[95,93479,151],{"class":101},[95,93481,145],{"class":154},[95,93483,112],{"class":105},[95,93485,93486,93489,93491,93493],{"class":97,"line":1196},[95,93487,93488],{"class":105},"np.sqrt(b,",[95,93490,93031],{"class":5199},[95,93492,151],{"class":101},[95,93494,93426],{"class":105},[37,93496,93498],{"id":93497},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[10,93500,93501],{},"对数组中的元素累计求和，可指定轴",[10,93503,93504],{},"#累计求和的意思是：",[10,93506,93507],{},"a = np.array([1, 2, 3, 4])",[10,93509,93510],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[86,93512,93514],{"className":30363,"code":93513,"language":30365,"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",[92,93515,93516,93532,93537,93542],{"__ignoreMap":14},[95,93517,93518,93520,93522,93524,93526,93528,93530],{"class":97,"line":98},[95,93519,369],{"class":105},[95,93521,151],{"class":101},[95,93523,92979],{"class":105},[95,93525,323],{"class":154},[95,93527,484],{"class":105},[95,93529,552],{"class":154},[95,93531,112],{"class":105},[95,93533,93534],{"class":97,"line":15},[95,93535,93536],{"class":105},"np.cumsum(b)\n",[95,93538,93539],{"class":97,"line":1161},[95,93540,93541],{"class":164},"#结果：\n",[95,93543,93544],{"class":97,"line":1176},[95,93545,93546],{"class":164},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[37,93548,93550],{"id":93549},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[86,93552,93554],{"className":30363,"code":93553,"language":30365,"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",[92,93555,93556,93572,93577,93582,93586],{"__ignoreMap":14},[95,93557,93558,93560,93562,93564,93566,93568,93570],{"class":97,"line":98},[95,93559,369],{"class":105},[95,93561,151],{"class":101},[95,93563,92979],{"class":105},[95,93565,323],{"class":154},[95,93567,484],{"class":105},[95,93569,552],{"class":154},[95,93571,112],{"class":105},[95,93573,93574],{"class":97,"line":15},[95,93575,93576],{"class":164},"#对数组中的元素累计求积，可指定轴\n",[95,93578,93579],{"class":97,"line":1161},[95,93580,93581],{"class":105},"np.cumprod(b)\n",[95,93583,93584],{"class":97,"line":1176},[95,93585,93541],{"class":164},[95,93587,93588],{"class":97,"line":1182},[95,93589,93590],{"class":164},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[37,93592,93594],{"id":93593},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[86,93596,93598],{"className":30363,"code":93597,"language":30365,"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",[92,93599,93600,93605,93653,93658,93662],{"__ignoreMap":14},[95,93601,93602],{"class":97,"line":98},[95,93603,93604],{"class":164},"#删除数组中的重复数据，并对数据进行排序\n",[95,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":97,"line":15},[95,93608,344],{"class":105},[95,93610,151],{"class":101},[95,93612,93001],{"class":105},[95,93614,323],{"class":154},[95,93616,484],{"class":105},[95,93618,183],{"class":154},[95,93620,484],{"class":105},[95,93622,177],{"class":154},[95,93624,484],{"class":105},[95,93626,604],{"class":154},[95,93628,484],{"class":105},[95,93630,177],{"class":154},[95,93632,484],{"class":105},[95,93634,552],{"class":154},[95,93636,484],{"class":105},[95,93638,303],{"class":154},[95,93640,484],{"class":105},[95,93642,297],{"class":154},[95,93644,484],{"class":105},[95,93646,881],{"class":154},[95,93648,484],{"class":105},[95,93650,399],{"class":154},[95,93652,4639],{"class":105},[95,93654,93655],{"class":97,"line":1161},[95,93656,93657],{"class":105},"np.unique(a)\n",[95,93659,93660],{"class":97,"line":1176},[95,93661,93541],{"class":164},[95,93663,93664],{"class":97,"line":1182},[95,93665,93666],{"class":164},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[10,93668,93669],{},"升序形式排序",[37,93671,93673],{"id":93672},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[86,93675,93677],{"className":30363,"code":93676,"language":30365,"meta":14,"style":14},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[92,93678,93679,93727,93732],{"__ignoreMap":14},[95,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":97,"line":98},[95,93682,344],{"class":105},[95,93684,151],{"class":101},[95,93686,93001],{"class":105},[95,93688,323],{"class":154},[95,93690,484],{"class":105},[95,93692,183],{"class":154},[95,93694,484],{"class":105},[95,93696,177],{"class":154},[95,93698,484],{"class":105},[95,93700,604],{"class":154},[95,93702,484],{"class":105},[95,93704,177],{"class":154},[95,93706,484],{"class":105},[95,93708,552],{"class":154},[95,93710,484],{"class":105},[95,93712,303],{"class":154},[95,93714,484],{"class":105},[95,93716,297],{"class":154},[95,93718,484],{"class":105},[95,93720,881],{"class":154},[95,93722,484],{"class":105},[95,93724,399],{"class":154},[95,93726,4639],{"class":105},[95,93728,93729],{"class":97,"line":15},[95,93730,93731],{"class":164},"#返回数组中非零元素的索引\n",[95,93733,93734],{"class":97,"line":1161},[95,93735,93736],{"class":105},"np.nonzero(a)\n",[37,93738,93740],{"id":93739},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[86,93742,93744],{"className":30363,"code":93743,"language":30365,"meta":14,"style":14},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[92,93745,93746,93794,93799],{"__ignoreMap":14},[95,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":97,"line":98},[95,93749,344],{"class":105},[95,93751,151],{"class":101},[95,93753,93001],{"class":105},[95,93755,323],{"class":154},[95,93757,484],{"class":105},[95,93759,183],{"class":154},[95,93761,484],{"class":105},[95,93763,177],{"class":154},[95,93765,484],{"class":105},[95,93767,604],{"class":154},[95,93769,484],{"class":105},[95,93771,177],{"class":154},[95,93773,484],{"class":105},[95,93775,552],{"class":154},[95,93777,484],{"class":105},[95,93779,303],{"class":154},[95,93781,484],{"class":105},[95,93783,297],{"class":154},[95,93785,484],{"class":105},[95,93787,881],{"class":154},[95,93789,484],{"class":105},[95,93791,399],{"class":154},[95,93793,4639],{"class":105},[95,93795,93796],{"class":97,"line":15},[95,93797,93798],{"class":164},"#计算一组数中最大值与最小值的差，可指定轴\n",[95,93800,93801],{"class":97,"line":1161},[95,93802,93803],{"class":105},"np.ptp(a)\n",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93826,"title":93827,"body":93828,"description":23360,"extension":18,"meta":94483,"navigation":21,"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],[33,93831,93827],{"id":93832},"_12其他常用函数",[37,93834,93836],{"id":93835},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[10,93838,93839],{},"将数组的数据按照行列复制扩展",[86,93841,93843],{"className":30363,"code":93842,"language":30365,"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",[92,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},[95,93846,93847,93849,93851,93853,93855,93857,93859],{"class":97,"line":98},[95,93848,344],{"class":105},[95,93850,151],{"class":101},[95,93852,92979],{"class":105},[95,93854,323],{"class":154},[95,93856,484],{"class":105},[95,93858,425],{"class":154},[95,93860,112],{"class":105},[95,93862,93863,93866,93868],{"class":97,"line":15},[95,93864,93865],{"class":105},"np.tile(a,",[95,93867,183],{"class":154},[95,93869,112],{"class":105},[95,93871,93872],{"class":97,"line":1161},[95,93873,93541],{"class":164},[95,93875,93876],{"class":97,"line":1176},[95,93877,93878],{"class":164},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[95,93880,93881],{"class":97,"line":1182},[95,93882,93883],{"class":164},"#行复制两次，列复制三次\n",[95,93885,93886,93889,93891,93893,93895],{"class":97,"line":1196},[95,93887,93888],{"class":105},"np.tile(a,(",[95,93890,183],{"class":154},[95,93892,484],{"class":105},[95,93894,177],{"class":154},[95,93896,30482],{"class":105},[95,93898,93899],{"class":97,"line":1202},[95,93900,93541],{"class":164},[95,93902,93903],{"class":97,"line":1293},[95,93904,93905],{"class":210},"'''\n",[95,93907,93908],{"class":97,"line":1299},[95,93909,93910],{"class":210},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[95,93912,93913],{"class":97,"line":1311},[95,93914,93915],{"class":210},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[95,93917,93918],{"class":97,"line":1594},[95,93919,93905],{"class":210},[95,93921,93922],{"class":97,"line":1599},[95,93923,93924],{"class":164},"#创建二维数组\n",[95,93926,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945,93947],{"class":97,"line":1605},[95,93928,93283],{"class":105},[95,93930,151],{"class":101},[95,93932,92979],{"class":105},[95,93934,323],{"class":154},[95,93936,484],{"class":105},[95,93938,629],{"class":154},[95,93940,92984],{"class":105},[95,93942,399],{"class":154},[95,93944,484],{"class":105},[95,93946,177],{"class":154},[95,93948,112],{"class":105},[95,93950,93951,93954,93956,93958],{"class":97,"line":1610},[95,93952,93953],{"class":105},"np.tile(aa,",[95,93955,183],{"class":154},[95,93957,535],{"class":105},[95,93959,93960],{"class":164},"#一个数的时候就是行\n",[95,93962,93963],{"class":97,"line":1624},[95,93964,93541],{"class":164},[95,93966,93967],{"class":97,"line":1629},[95,93968,93905],{"class":210},[95,93970,93971],{"class":97,"line":1635},[95,93972,93973],{"class":210},"array([[ 1,  2,  3,  1,  2,  3],\n",[95,93975,93976],{"class":97,"line":1656},[95,93977,93978],{"class":210},"       [ 4,  5,  6,  4,  5,  6],\n",[95,93980,93981],{"class":97,"line":1661},[95,93982,93983],{"class":210},"       [ 7,  8,  9,  7,  8,  9],\n",[95,93985,93986],{"class":97,"line":1675},[95,93987,93988],{"class":210},"       [10, 11, 12, 10, 11, 12]])\n",[95,93990,93991],{"class":97,"line":1680},[95,93992,93905],{"class":210},[95,93994,93995,93998,94000,94002,94004],{"class":97,"line":1709},[95,93996,93997],{"class":105},"np.tile(aa,(",[95,93999,183],{"class":154},[95,94001,484],{"class":105},[95,94003,177],{"class":154},[95,94005,30482],{"class":105},[95,94007,94008],{"class":97,"line":1714},[95,94009,93541],{"class":164},[95,94011,94012],{"class":97,"line":1731},[95,94013,93905],{"class":210},[95,94015,94016],{"class":97,"line":1736},[95,94017,94018],{"class":210},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[95,94020,94021],{"class":97,"line":1741},[95,94022,94023],{"class":210},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[95,94025,94026],{"class":97,"line":1746},[95,94027,94028],{"class":210},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[95,94030,94031],{"class":97,"line":1760},[95,94032,94033],{"class":210},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[95,94035,94036],{"class":97,"line":1765},[95,94037,94038],{"class":210},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[95,94040,94041],{"class":97,"line":2559},[95,94042,94023],{"class":210},[95,94044,94045],{"class":97,"line":2573},[95,94046,94028],{"class":210},[95,94048,94049],{"class":97,"line":2581},[95,94050,94051],{"class":210},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[95,94053,94054],{"class":97,"line":2586},[95,94055,93905],{"class":210},[37,94057,94059],{"id":94058},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[10,94061,94062],{},"repeat()将数组中的每个元素重复若干次",[86,94064,94066],{"className":30363,"code":94065,"language":30365,"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",[92,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},[95,94069,94070,94072,94074,94076,94078,94080,94082],{"class":97,"line":98},[95,94071,344],{"class":105},[95,94073,151],{"class":101},[95,94075,92979],{"class":105},[95,94077,323],{"class":154},[95,94079,484],{"class":105},[95,94081,425],{"class":154},[95,94083,112],{"class":105},[95,94085,94086,94089,94091],{"class":97,"line":15},[95,94087,94088],{"class":105},"np.repeat(a,",[95,94090,177],{"class":154},[95,94092,112],{"class":105},[95,94094,94095],{"class":97,"line":1161},[95,94096,93541],{"class":164},[95,94098,94099],{"class":97,"line":1176},[95,94100,94101],{"class":164},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[95,94103,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124],{"class":97,"line":1182},[95,94105,93283],{"class":105},[95,94107,151],{"class":101},[95,94109,92979],{"class":105},[95,94111,323],{"class":154},[95,94113,484],{"class":105},[95,94115,629],{"class":154},[95,94117,92984],{"class":105},[95,94119,399],{"class":154},[95,94121,484],{"class":105},[95,94123,177],{"class":154},[95,94125,112],{"class":105},[95,94127,94128],{"class":97,"line":1196},[95,94129,94130],{"class":164},"#这个重复之后二维变成一维\n",[95,94132,94133,94136,94138],{"class":97,"line":1202},[95,94134,94135],{"class":105},"np.repeat(aa,",[95,94137,183],{"class":154},[95,94139,112],{"class":105},[95,94141,94142],{"class":97,"line":1293},[95,94143,93905],{"class":210},[95,94145,94146],{"class":97,"line":1299},[95,94147,94148],{"class":210},"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",[95,94150,94151],{"class":97,"line":1311},[95,94152,93905],{"class":210},[95,94154,94155],{"class":97,"line":1594},[95,94156,94157],{"class":164},"#指定axis\n",[95,94159,94160,94162,94164,94166,94168,94170,94172],{"class":97,"line":1599},[95,94161,94135],{"class":105},[95,94163,183],{"class":154},[95,94165,484],{"class":105},[95,94167,47499],{"class":5199},[95,94169,151],{"class":101},[95,94171,297],{"class":154},[95,94173,112],{"class":105},[95,94175,94176],{"class":97,"line":1605},[95,94177,93541],{"class":164},[95,94179,94180],{"class":97,"line":1610},[95,94181,93905],{"class":210},[95,94183,94184],{"class":97,"line":1624},[95,94185,94186],{"class":210},"array([[ 1,  2,  3],\n",[95,94188,94189],{"class":97,"line":1629},[95,94190,94191],{"class":210},"       [ 1,  2,  3],\n",[95,94193,94194],{"class":97,"line":1635},[95,94195,94196],{"class":210},"       [ 4,  5,  6],\n",[95,94198,94199],{"class":97,"line":1656},[95,94200,94196],{"class":210},[95,94202,94203],{"class":97,"line":1661},[95,94204,94205],{"class":210},"       [ 7,  8,  9],\n",[95,94207,94208],{"class":97,"line":1675},[95,94209,94205],{"class":210},[95,94211,94212],{"class":97,"line":1680},[95,94213,94214],{"class":210},"       [10, 11, 12],\n",[95,94216,94217],{"class":97,"line":1709},[95,94218,94219],{"class":210},"       [10, 11, 12]])\n",[95,94221,94222],{"class":97,"line":1714},[95,94223,93905],{"class":210},[95,94225,94226,94228,94230,94232,94234,94236,94238],{"class":97,"line":1731},[95,94227,94135],{"class":105},[95,94229,183],{"class":154},[95,94231,484],{"class":105},[95,94233,47499],{"class":5199},[95,94235,151],{"class":101},[95,94237,323],{"class":154},[95,94239,112],{"class":105},[95,94241,94242],{"class":97,"line":1736},[95,94243,93541],{"class":164},[95,94245,94246],{"class":97,"line":1741},[95,94247,93905],{"class":210},[95,94249,94250],{"class":97,"line":1746},[95,94251,94252],{"class":210},"array([[ 1,  1,  2,  2,  3,  3],\n",[95,94254,94255],{"class":97,"line":1760},[95,94256,94257],{"class":210},"       [ 4,  4,  5,  5,  6,  6],\n",[95,94259,94260],{"class":97,"line":1765},[95,94261,94262],{"class":210},"       [ 7,  7,  8,  8,  9,  9],\n",[95,94264,94265],{"class":97,"line":2559},[95,94266,94267],{"class":210},"       [10, 10, 11, 11, 12, 12]])\n",[95,94269,94270],{"class":97,"line":2573},[95,94271,93905],{"class":210},[37,94273,94275],{"id":94274},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[86,94277,94279],{"className":30363,"code":94278,"language":30365,"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",[92,94280,94281,94297,94302,94314,94318,94323,94333,94337],{"__ignoreMap":14},[95,94282,94283,94285,94287,94289,94291,94293,94295],{"class":97,"line":98},[95,94284,344],{"class":105},[95,94286,151],{"class":101},[95,94288,92979],{"class":105},[95,94290,323],{"class":154},[95,94292,484],{"class":105},[95,94294,425],{"class":154},[95,94296,112],{"class":105},[95,94298,94299],{"class":97,"line":15},[95,94300,94301],{"class":164},"#array([，2，3，4])\n",[95,94303,94304,94307,94309,94311],{"class":97,"line":1161},[95,94305,94306],{"class":105},"np.roll(a,",[95,94308,183],{"class":154},[95,94310,535],{"class":105},[95,94312,94313],{"class":164},"#传正数向后调多少位，传负数向前调多少位\n",[95,94315,94316],{"class":97,"line":1176},[95,94317,93541],{"class":164},[95,94319,94320],{"class":97,"line":1182},[95,94321,94322],{"class":164},"#array([3, 4, 1, 2])\n",[95,94324,94325,94327,94329,94331],{"class":97,"line":1196},[95,94326,94306],{"class":105},[95,94328,638],{"class":101},[95,94330,323],{"class":154},[95,94332,112],{"class":105},[95,94334,94335],{"class":97,"line":1202},[95,94336,93541],{"class":164},[95,94338,94339],{"class":97,"line":1293},[95,94340,94341],{"class":164},"#array([2, 3, 4, 1])\n",[10,94343,94344],{},[1444,94345],{"alt":14,"src":94346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[37,94348,94350],{"id":94349},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[10,94352,94353],{},"resize()重新调整数组的大小",[10,94355,94356],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[86,94358,94360],{"className":30363,"code":94359,"language":30365,"meta":14,"style":14},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[92,94361,94362,94367,94380],{"__ignoreMap":14},[95,94363,94364],{"class":97,"line":98},[95,94365,94366],{"class":164},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[95,94368,94369,94372,94374,94376,94378],{"class":97,"line":15},[95,94370,94371],{"class":105},"np.resize(aa,(",[95,94373,183],{"class":154},[95,94375,484],{"class":105},[95,94377,450],{"class":154},[95,94379,30482],{"class":105},[95,94381,94382,94384,94386,94388,94390,94392],{"class":97,"line":1161},[95,94383,94371],{"class":105},[95,94385,183],{"class":154},[95,94387,484],{"class":105},[95,94389,526],{"class":154},[95,94391,82748],{"class":105},[95,94393,94394],{"class":164},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[37,94396,94398],{"id":94397},"_125-placeput函数","12.5 place()\u002Fput()函数",[10,94400,94401],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[10,94403,94404],{},[1444,94405],{"alt":14,"src":94406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[37,94408,94410],{"id":94409},"_126-保存加载文件","12.6 保存加载文件",[10,94412,94413],{},"savetxt():将数据保存到txt文件中",[10,94415,94416],{},"loadtxt():从文件加载数据",[10,94418,94419],{},[1444,94420],{"alt":14,"src":94421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[37,94423,94425],{"id":94424},"_127-genfromtxt函数","12.7 genfromtxt()函数",[10,94427,94428],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[37,94430,94432],{"id":94431},"_128-anyall函数","12.8 any()\u002Fall()函数",[10,94434,94435],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[10,94437,94438],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[10,94440,94441],{},[1444,94442],{"alt":14,"src":94443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[37,94445,94447],{"id":94446},"_129-where语句","12.9 where语句",[10,94449,94450],{},"np.where(条件,x,y)",[10,94452,94453],{},"如果条件为True,对应值为x,否则对应值为y",[10,94455,94456],{},[1444,94457],{"alt":14,"src":94458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[37,94460,94462],{"id":94461},"_1210-dot矩阵","12.10 dot()矩阵",[10,94464,94465],{},[1444,94466],{"alt":14,"src":94467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94489,"title":94490,"body":94491,"description":23360,"extension":18,"meta":94844,"navigation":21,"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],[33,94494,94490],{"id":94495},"_13数组排序",[10,94497,94498],{},"排序主要用到的方法是np.sort和np.argsort",[10,94500,94501],{},"其中np.sort()对数组直接排序",[10,94503,94504],{},"而np.argsort()是返回排序后的原始索引",[10,94506,94507],{},"①一维数组",[86,94509,94511],{"className":30363,"code":94510,"language":30365,"meta":14,"style":14},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[92,94512,94513,94517,94557,94565],{"__ignoreMap":14},[95,94514,94515],{"class":97,"line":98},[95,94516,93082],{"class":164},[95,94518,94519,94521,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555],{"class":97,"line":15},[95,94520,344],{"class":105},[95,94522,151],{"class":101},[95,94524,93001],{"class":105},[95,94526,177],{"class":154},[95,94528,484],{"class":105},[95,94530,604],{"class":154},[95,94532,484],{"class":105},[95,94534,501],{"class":154},[95,94536,484],{"class":105},[95,94538,881],{"class":154},[95,94540,484],{"class":105},[95,94542,385],{"class":154},[95,94544,484],{"class":105},[95,94546,999],{"class":154},[95,94548,484],{"class":105},[95,94550,450],{"class":154},[95,94552,484],{"class":105},[95,94554,552],{"class":154},[95,94556,4639],{"class":105},[95,94558,94559,94562],{"class":97,"line":1161},[95,94560,94561],{"class":105},"np.sort(a)",[95,94563,94564],{"class":164},"#升序排序\n",[95,94566,94567,94570],{"class":97,"line":1176},[95,94568,94569],{"class":105},"np.argsort(a)",[95,94571,94572],{"class":164},"#按照元素大小来索引排序\n",[10,94574,93268],{},[86,94576,94578],{"className":30363,"code":94577,"language":30365,"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",[92,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},[95,94581,94582,94585,94587,94589],{"class":97,"line":98},[95,94583,94584],{"class":105},"np.random.seed(",[95,94586,297],{"class":154},[95,94588,535],{"class":105},[95,94590,94591],{"class":164},"#保证每次值一样\n",[95,94593,94594,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616],{"class":97,"line":15},[95,94595,93283],{"class":105},[95,94597,151],{"class":101},[95,94599,93091],{"class":105},[95,94601,417],{"class":154},[95,94603,484],{"class":105},[95,94605,31481],{"class":5199},[95,94607,151],{"class":101},[95,94609,106],{"class":105},[95,94611,399],{"class":154},[95,94613,484],{"class":105},[95,94615,450],{"class":154},[95,94617,30482],{"class":105},[95,94619,94620],{"class":97,"line":1161},[95,94621,94622],{"class":164},"#原数组：\n",[95,94624,94625],{"class":97,"line":1176},[95,94626,93905],{"class":210},[95,94628,94629],{"class":97,"line":1182},[95,94630,94631],{"class":210},"array([[44, 47, 64, 67, 67,  9],\n",[95,94633,94634],{"class":97,"line":1196},[95,94635,94636],{"class":210},"       [83, 21, 36, 87, 70, 88],\n",[95,94638,94639],{"class":97,"line":1202},[95,94640,94641],{"class":210},"       [88, 12, 58, 65, 39, 87],\n",[95,94643,94644],{"class":97,"line":1293},[95,94645,94646],{"class":210},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[95,94648,94649],{"class":97,"line":1299},[95,94650,93905],{"class":210},[95,94652,94653,94656],{"class":97,"line":1311},[95,94654,94655],{"class":105},"np.sort(aa)",[95,94657,94658],{"class":164},"#每行进行了排序\n",[95,94660,94661],{"class":97,"line":1594},[95,94662,93905],{"class":210},[95,94664,94665],{"class":97,"line":1599},[95,94666,94667],{"class":210},"array([[ 9, 44, 47, 64, 67, 67],\n",[95,94669,94670],{"class":97,"line":1605},[95,94671,94672],{"class":210},"       [21, 36, 70, 83, 87, 88],\n",[95,94674,94675],{"class":97,"line":1610},[95,94676,94677],{"class":210},"       [12, 39, 58, 65, 87, 88],\n",[95,94679,94680],{"class":97,"line":1624},[95,94681,94682],{"class":210},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[95,94684,94685],{"class":97,"line":1629},[95,94686,93905],{"class":210},[95,94688,94689],{"class":97,"line":1635},[95,94690,94691],{"class":164},"#axis=0时\n",[95,94693,94694,94697,94699,94701,94703],{"class":97,"line":1656},[95,94695,94696],{"class":105},"np.sort(aa,",[95,94698,47499],{"class":5199},[95,94700,151],{"class":101},[95,94702,297],{"class":154},[95,94704,112],{"class":105},[95,94706,94707],{"class":97,"line":1661},[95,94708,93905],{"class":210},[95,94710,94711],{"class":97,"line":1675},[95,94712,94713],{"class":210},"array([[44, 12, 36, 37, 25,  9],\n",[95,94715,94716],{"class":97,"line":1680},[95,94717,94718],{"class":210},"       [46, 21, 58, 65, 39, 77],\n",[95,94720,94721],{"class":97,"line":1709},[95,94722,94723],{"class":210},"       [83, 47, 64, 67, 67, 87],\n",[95,94725,94726],{"class":97,"line":1714},[95,94727,94728],{"class":210},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[95,94730,94731],{"class":97,"line":1731},[95,94732,93905],{"class":210},[95,94734,94735],{"class":97,"line":1736},[95,94736,94737],{"class":164},"#axis=1时,为默认值\n",[95,94739,94740,94742,94744,94746,94748],{"class":97,"line":1741},[95,94741,94696],{"class":105},[95,94743,47499],{"class":5199},[95,94745,151],{"class":101},[95,94747,323],{"class":154},[95,94749,112],{"class":105},[95,94751,94752],{"class":97,"line":1746},[95,94753,93905],{"class":210},[95,94755,94756],{"class":97,"line":1760},[95,94757,94667],{"class":210},[95,94759,94760],{"class":97,"line":1765},[95,94761,94672],{"class":210},[95,94763,94764],{"class":97,"line":2559},[95,94765,94677],{"class":210},[95,94767,94768],{"class":97,"line":2573},[95,94769,94682],{"class":210},[95,94771,94772],{"class":97,"line":2581},[95,94773,93905],{"class":210},[95,94775,94776],{"class":97,"line":2586},[95,94777,94778],{"class":164},"#按最后一列排序\n",[95,94780,94781,94783,94785,94788,94790,94792],{"class":97,"line":2592},[95,94782,369],{"class":105},[95,94784,151],{"class":101},[95,94786,94787],{"class":105},"aa[:,",[95,94789,638],{"class":101},[95,94791,323],{"class":154},[95,94793,33231],{"class":105},[95,94795,94796],{"class":97,"line":2598},[95,94797,94798],{"class":164},"#获取最后一列排好序的索引\n",[95,94800,94801,94803,94805],{"class":97,"line":2603},[95,94802,74035],{"class":105},[95,94804,151],{"class":101},[95,94806,94807],{"class":105},"np.argsort(b)\n",[95,94809,94810],{"class":97,"line":7931},[95,94811,94812],{"class":105},"aa[index]\n",[95,94814,94815],{"class":97,"line":7955},[95,94816,93905],{"class":210},[95,94818,94819],{"class":97,"line":7960},[95,94820,94631],{"class":210},[95,94822,94823],{"class":97,"line":7966},[95,94824,94825],{"class":210},"       [46, 88, 81, 37, 25, 77],\n",[95,94827,94828],{"class":97,"line":7993},[95,94829,94641],{"class":210},[95,94831,94832],{"class":97,"line":7998},[95,94833,94834],{"class":210},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[95,94836,94837],{"class":97,"line":8004},[95,94838,93905],{"class":210},[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94850,"title":94851,"body":94852,"description":23360,"extension":18,"meta":94882,"navigation":21,"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],[33,94855,94851],{"id":94856},"_14广播机制",[10,94858,94859],{},"广播的规则：",[10,94861,94862],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[10,94864,94865],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[10,94867,94868],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[10,94870,94871],{},"3.如果没有维度形状为1，则会引发异常",[10,94873,94874],{},"也就是只有维度或者个数为1才可以进行广播操作",[10,94876,94877],{},[1444,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94888,"title":94889,"body":94890,"description":23360,"extension":18,"meta":94988,"navigation":21,"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],[33,94893,94889],{"id":94894},"_15比较掩码",[10,94896,94897],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[86,94899,94901],{"className":30363,"code":94900,"language":30365,"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",[92,94902,94903,94949,94960,94974,94978],{"__ignoreMap":14},[95,94904,94905,94907,94909,94912,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946],{"class":97,"line":98},[95,94906,344],{"class":105},[95,94908,151],{"class":101},[95,94910,94911],{"class":105},"np.array([[",[95,94913,323],{"class":154},[95,94915,484],{"class":105},[95,94917,183],{"class":154},[95,94919,484],{"class":105},[95,94921,177],{"class":154},[95,94923,48015],{"class":105},[95,94925,578],{"class":154},[95,94927,484],{"class":105},[95,94929,604],{"class":154},[95,94931,484],{"class":105},[95,94933,629],{"class":154},[95,94935,48015],{"class":105},[95,94937,831],{"class":154},[95,94939,484],{"class":105},[95,94941,856],{"class":154},[95,94943,484],{"class":105},[95,94945,881],{"class":154},[95,94947,94948],{"class":105},"]])\n",[95,94950,94951,94953,94955,94957],{"class":97,"line":15},[95,94952,344],{"class":105},[95,94954,1016],{"class":101},[95,94956,806],{"class":154},[95,94958,94959],{"class":164},"#结果是一个由True,False组成的数组\n",[95,94961,94962,94965,94967,94969,94971],{"class":97,"line":1161},[95,94963,94964],{"class":105},"a[a",[95,94966,1016],{"class":101},[95,94968,806],{"class":154},[95,94970,1046],{"class":105},[95,94972,94973],{"class":164},"#小于20的元素会存到这个数组中\n",[95,94975,94976],{"class":97,"line":1176},[95,94977,93541],{"class":164},[95,94979,94980],{"class":97,"line":1182},[95,94981,94982],{"class":164},"#array([ 1,  2,  3, 11, 12, 13])\n",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94994,"title":94995,"body":94996,"description":23360,"extension":18,"meta":95088,"navigation":21,"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],[33,94999,94995],{"id":95000},"_16魔法命令time",[10,95002,95003],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[10,95005,95006],{},"%:行模式",[10,95008,95009],{},"%%:单元格模式",[10,95011,95012],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[86,95014,95016],{"className":30363,"code":95015,"language":30365,"meta":14,"style":14},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[92,95017,95018,95023,95030,95035,95044,95057,95061,95069],{"__ignoreMap":14},[95,95019,95020],{"class":97,"line":98},[95,95021,95022],{"class":164},"#程序执行时间\n",[95,95024,95025,95027],{"class":97,"line":15},[95,95026,30377],{"class":101},[95,95028,95029],{"class":105}," time \n",[95,95031,95032],{"class":97,"line":1161},[95,95033,95034],{"class":164},"#获取时间\n",[95,95036,95037,95040,95042],{"class":97,"line":1176},[95,95038,95039],{"class":105},"start",[95,95041,151],{"class":101},[95,95043,32403],{"class":105},[95,95045,95046,95049,95052,95054],{"class":97,"line":1182},[95,95047,95048],{"class":105},"time.sleep(",[95,95050,95051],{"class":154},"0.4",[95,95053,535],{"class":105},[95,95055,95056],{"class":164},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[95,95058,95059],{"class":97,"line":1196},[95,95060,95034],{"class":164},[95,95062,95063,95065,95067],{"class":97,"line":1202},[95,95064,45786],{"class":105},[95,95066,151],{"class":101},[95,95068,32403],{"class":105},[95,95070,95071,95073,95075],{"class":97,"line":1293},[95,95072,45786],{"class":105},[95,95074,638],{"class":101},[95,95076,95077],{"class":105},"start\n",[10,95079,95080],{},[1444,95081],{"alt":14,"src":95082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95094,"title":95095,"body":95096,"description":23360,"extension":18,"meta":95131,"navigation":21,"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],[33,95099,95095],{"id":95100},"_17魔法命令timeit",[10,95102,95103],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[10,95105,95106],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[10,95108,95109],{},"单元格模式：",[10,95111,95112],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[10,95114,95115],{},"初始化语句执行次数由轮数来决定",[10,95117,95118],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[10,95120,95121],{},[1444,95122],{"alt":14,"src":95123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[10,95125,95126],{},[1444,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95137,"title":95138,"body":95139,"description":23360,"extension":18,"meta":95157,"navigation":21,"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],[33,95142,95138],{"id":95143},"_18魔法命令writefile和run",[10,95145,95146],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[10,95148,95149],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[10,95151,95152],{},[1444,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95163,"title":95164,"body":95165,"description":23360,"extension":18,"meta":95218,"navigation":21,"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],[33,95168,95164],{"id":95169},"_19魔法命令memit",[10,95171,95172],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[10,95174,24584],{},[10,95176,95177],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[10,95179,95180],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[10,95182,95183],{},[1444,95184],{"alt":14,"src":95185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[10,95187,95188],{},"补充：",[10,95190,95191],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[10,95193,95194],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[10,95196,95197],{},"解决方法：",[10,95199,95200],{},"1.cmd",[10,95202,95203],{},"2.依次输入以下代码：",[10,95205,95206],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[10,95208,95209],{},"pip install --upgrade ipython",[10,95211,95212],{},"#升级 memory_profiler 和 setuptools",[10,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95224,"title":95225,"body":95226,"description":23360,"extension":18,"meta":96872,"navigation":21,"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],[33,95229,95225],{"id":95230},"_2创建数组",[37,95232,95234],{"id":95233},"_21-array函数创建数组","2.1 array()函数创建数组",[66,95236,95238],{"id":95237},"_221-函数语句","2.2.1 函数语句",[86,95240,95242],{"className":30363,"code":95241,"language":30365,"meta":14,"style":14},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[92,95243,95244],{"__ignoreMap":14},[95,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":97,"line":98},[95,95247,95248],{"class":105},"numpy.array(",[95,95250,95251],{"class":154},"object",[95,95253,12418],{"class":105},[95,95255,93477],{"class":5199},[95,95257,13547],{"class":101},[95,95259,38918],{"class":154},[95,95261,12418],{"class":105},[95,95263,95264],{"class":5199},"copy",[95,95266,13547],{"class":101},[95,95268,95269],{"class":154}," True",[95,95271,12418],{"class":105},[95,95273,95274],{"class":5199},"order",[95,95276,13547],{"class":101},[95,95278,38918],{"class":154},[95,95280,12418],{"class":105},[95,95282,95283],{"class":5199},"subok",[95,95285,13547],{"class":101},[95,95287,95288],{"class":154}," False",[95,95290,12418],{"class":105},[95,95292,95293],{"class":5199},"ndmin",[95,95295,13547],{"class":101},[95,95297,4075],{"class":154},[95,95299,112],{"class":105},[10,95301,95302],{},"参数：",[10,95304,95305],{},[1444,95306],{"alt":14,"src":95307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[66,95309,95311],{"id":95310},"_222-实例","2.2.2 实例",[10,95313,95314],{},[1444,95315],{"alt":14,"src":95316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[10,95318,95319],{},[1444,95320],{"alt":14,"src":95321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[10,95323,95324],{},[1444,95325],{"alt":14,"src":95326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[10,95328,95329],{},[1444,95330],{"alt":14,"src":95331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[10,95333,95334],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[10,95336,95337],{},[1444,95338],{"alt":14,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[37,95341,95343],{"id":95342},"_22-随机数创建数组","2.2 随机数创建数组",[66,95345,95347],{"id":95346},"_221-random语句","2.2.1 random语句",[86,95349,95351],{"className":30363,"code":95350,"language":30365,"meta":14,"style":14},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[92,95352,95353,95358,95363,95371,95376],{"__ignoreMap":14},[95,95354,95355],{"class":97,"line":98},[95,95356,95357],{"class":164},"#random.random()\n",[95,95359,95360],{"class":97,"line":15},[95,95361,95362],{"class":164},"#确定随机种子,就是每次运行结果是相同的\n",[95,95364,95365,95367,95369],{"class":97,"line":1161},[95,95366,94584],{"class":105},[95,95368,297],{"class":154},[95,95370,112],{"class":105},[95,95372,95373],{"class":97,"line":1176},[95,95374,95375],{"class":105},"np.random.random()\n",[95,95377,95378],{"class":97,"line":1182},[95,95379,95380],{"class":164},"#生成一个随机的数目\n",[10,95382,95383],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[10,95385,95386],{},"可以指定数组形状 size",[10,95388,95389],{},"①生成一维数组",[86,95391,95393],{"className":30363,"code":95392,"language":30365,"meta":14,"style":14},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[92,95394,95395,95400,95413,95418,95434],{"__ignoreMap":14},[95,95396,95397],{"class":97,"line":98},[95,95398,95399],{"class":164},"#random.random(size())\n",[95,95401,95402,95405,95407,95409,95411],{"class":97,"line":15},[95,95403,95404],{"class":105},"np.random.random(",[95,95406,31481],{"class":5199},[95,95408,151],{"class":101},[95,95410,425],{"class":154},[95,95412,112],{"class":105},[95,95414,95415],{"class":97,"line":1161},[95,95416,95417],{"class":164},"#生成一位的五个元素\n",[95,95419,95420,95422,95424,95426,95428,95430,95432],{"class":97,"line":1176},[95,95421,344],{"class":105},[95,95423,151],{"class":101},[95,95425,95404],{"class":105},[95,95427,31481],{"class":5199},[95,95429,151],{"class":101},[95,95431,399],{"class":154},[95,95433,112],{"class":105},[95,95435,95436,95439],{"class":97,"line":1182},[95,95437,95438],{"class":105},"a.shape ",[95,95440,95441],{"class":164},"#输出数组形状\n",[10,95443,95444],{},"②生成二维数组",[86,95446,95448],{"className":30363,"code":95447,"language":30365,"meta":14,"style":14},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[92,95449,95450,95454,95476],{"__ignoreMap":14},[95,95451,95452],{"class":97,"line":98},[95,95453,93278],{"class":164},[95,95455,95456,95458,95460,95462,95464,95466,95468,95470,95472,95474],{"class":97,"line":15},[95,95457,93283],{"class":105},[95,95459,151],{"class":101},[95,95461,95404],{"class":105},[95,95463,31481],{"class":5199},[95,95465,151],{"class":101},[95,95467,106],{"class":105},[95,95469,399],{"class":154},[95,95471,484],{"class":105},[95,95473,425],{"class":154},[95,95475,30482],{"class":105},[95,95477,95478],{"class":97,"line":1161},[95,95479,95480],{"class":164},"#生成四行五列的数组\n",[10,95482,95483],{},"③生成三维数组",[86,95485,95487],{"className":30363,"code":95486,"language":30365,"meta":14,"style":14},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[92,95488,95489,95494,95521],{"__ignoreMap":14},[95,95490,95491],{"class":97,"line":98},[95,95492,95493],{"class":164},"#三维数组\n",[95,95495,95496,95499,95501,95503,95505,95507,95509,95511,95513,95515,95517,95519],{"class":97,"line":15},[95,95497,95498],{"class":105},"aaa",[95,95500,151],{"class":101},[95,95502,95404],{"class":105},[95,95504,31481],{"class":5199},[95,95506,151],{"class":101},[95,95508,106],{"class":105},[95,95510,183],{"class":154},[95,95512,484],{"class":105},[95,95514,177],{"class":154},[95,95516,484],{"class":105},[95,95518,399],{"class":154},[95,95520,30482],{"class":105},[95,95522,95523],{"class":97,"line":1161},[95,95524,95525],{"class":105},"aaa.shape\n",[66,95527,95529],{"id":95528},"_222-randint语句","2.2.2 randint语句",[86,95531,95533],{"className":30363,"code":95532,"language":30365,"meta":14,"style":14},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[92,95534,95535,95540],{"__ignoreMap":14},[95,95536,95537],{"class":97,"line":98},[95,95538,95539],{"class":164},"#生成随机的整数 random.randint(low,high,size)\n",[95,95541,95542,95544,95546,95548],{"class":97,"line":15},[95,95543,93091],{"class":105},[95,95545,425],{"class":154},[95,95547,13697],{"class":105},[95,95549,95550],{"class":164},"#0~5中的随机一个数\n",[10,95552,95389],{},[86,95554,95556],{"className":30363,"code":95555,"language":30365,"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",[92,95557,95558,95563,95585],{"__ignoreMap":14},[95,95559,95560],{"class":97,"line":98},[95,95561,95562],{"class":164},"#一维\n",[95,95564,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583],{"class":97,"line":15},[95,95566,93091],{"class":105},[95,95568,323],{"class":154},[95,95570,484],{"class":105},[95,95572,578],{"class":154},[95,95574,484],{"class":105},[95,95576,31481],{"class":5199},[95,95578,151],{"class":101},[95,95580,106],{"class":105},[95,95582,552],{"class":154},[95,95584,30482],{"class":105},[95,95586,95587],{"class":97,"line":1161},[95,95588,95589],{"class":164},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[10,95591,95444],{},[10,95593,95594],{},[1444,95595],{"alt":14,"src":95596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[10,95598,95483],{},[10,95600,95601],{},[1444,95602],{"alt":14,"src":95603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[66,95605,95607],{"id":95606},"_222-rand语句","2.2.2 rand语句",[10,95609,95610],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[86,95612,95614],{"className":30363,"code":95613,"language":30365,"meta":14,"style":14},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[92,95615,95616,95629,95634],{"__ignoreMap":14},[95,95617,95618,95621,95623,95625,95627],{"class":97,"line":98},[95,95619,95620],{"class":105},"np.random.rand(",[95,95622,417],{"class":154},[95,95624,484],{"class":105},[95,95626,552],{"class":154},[95,95628,112],{"class":105},[95,95630,95631],{"class":97,"line":15},[95,95632,95633],{"class":164},"#第一个参数100：行数，表示有100个样本\n",[95,95635,95636],{"class":97,"line":1161},[95,95637,95638],{"class":164},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[37,95640,95642],{"id":95641},"_23-arange创建数组","2.3 arange()创建数组",[66,95644,95646],{"id":95645},"_231-函数语句","2.3.1 函数语句",[86,95648,95650],{"className":30363,"code":95649,"language":30365,"meta":14,"style":14},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[92,95651,95652,95666,95671,95676,95681,95686,95691,95696],{"__ignoreMap":14},[95,95653,95654,95657,95659,95661,95664],{"class":97,"line":98},[95,95655,95656],{"class":105},"numpy.arange([start,] stop[, step], ",[95,95658,93477],{"class":5199},[95,95660,151],{"class":101},[95,95662,95663],{"class":154},"None",[95,95665,112],{"class":105},[95,95667,95668],{"class":97,"line":15},[95,95669,95670],{"class":164},"#参数\n",[95,95672,95673],{"class":97,"line":1161},[95,95674,95675],{"class":210},"\"\"\"\n",[95,95677,95678],{"class":97,"line":1176},[95,95679,95680],{"class":210},"start:起始值，可选，默认从 0 开始。\n",[95,95682,95683],{"class":97,"line":1182},[95,95684,95685],{"class":210},"stop:结束值（不包含该值）。\n",[95,95687,95688],{"class":97,"line":1196},[95,95689,95690],{"class":210},"step:步长，可选，默认是 1。可以为浮点数。\n",[95,95692,95693],{"class":97,"line":1202},[95,95694,95695],{"class":210},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[95,95697,95698],{"class":97,"line":1293},[95,95699,95675],{"class":210},[66,95701,95703],{"id":95702},"_232-实例","2.3.2 实例",[86,95705,95707],{"className":30363,"code":95706,"language":30365,"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",[92,95708,95709,95713,95737,95742,95747,95751,95774,95778,95782,95787,95792],{"__ignoreMap":14},[95,95710,95711],{"class":97,"line":98},[95,95712,93082],{"class":164},[95,95714,95715,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735],{"class":97,"line":15},[95,95716,92979],{"class":105},[95,95718,323],{"class":154},[95,95720,484],{"class":105},[95,95722,831],{"class":154},[95,95724,484],{"class":105},[95,95726,323],{"class":154},[95,95728,484],{"class":105},[95,95730,93477],{"class":5199},[95,95732,151],{"class":101},[95,95734,109],{"class":154},[95,95736,112],{"class":105},[95,95738,95739],{"class":97,"line":1161},[95,95740,95741],{"class":164},"#输出结果：\n",[95,95743,95744],{"class":97,"line":1176},[95,95745,95746],{"class":164},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[95,95748,95749],{"class":97,"line":1182},[95,95750,93924],{"class":164},[95,95752,95753,95756,95758,95760,95762,95765,95767,95769,95771],{"class":97,"line":1196},[95,95754,95755],{"class":105},"np.array([np.arange(",[95,95757,323],{"class":154},[95,95759,484],{"class":105},[95,95761,399],{"class":154},[95,95763,95764],{"class":105},"),np.arange(",[95,95766,399],{"class":154},[95,95768,484],{"class":105},[95,95770,475],{"class":154},[95,95772,95773],{"class":105},")])\n",[95,95775,95776],{"class":97,"line":1202},[95,95777,93541],{"class":164},[95,95779,95780],{"class":97,"line":1293},[95,95781,95675],{"class":210},[95,95783,95784],{"class":97,"line":1299},[95,95785,95786],{"class":210},"array([[1, 2, 3],\n",[95,95788,95789],{"class":97,"line":1311},[95,95790,95791],{"class":210},"       [4, 5, 6]])\n",[95,95793,95794],{"class":97,"line":1594},[95,95795,95675],{"class":210},[37,95797,95799],{"id":95798},"_24-生态分布","2.4 生态分布",[66,95801,95803],{"id":95802},"_241-标准正态分布","2.4.1 标准正态分布",[10,95805,95806],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[10,95808,95809],{},[1444,95810],{"alt":14,"src":95811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[66,95813,95815],{"id":95814},"_242-常规正态分布","2.4.2 常规正态分布",[86,95817,95819],{"className":30363,"code":95818,"language":30365,"meta":14,"style":14},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[92,95820,95821,95826,95831,95836],{"__ignoreMap":14},[95,95822,95823],{"class":97,"line":98},[95,95824,95825],{"class":105},"random.normal(loc,scale,size)也可以生成正态分布\n",[95,95827,95828],{"class":97,"line":15},[95,95829,95830],{"class":164},"#loc:期望\n",[95,95832,95833],{"class":97,"line":1161},[95,95834,95835],{"class":164},"#scale:方差\n",[95,95837,95838],{"class":97,"line":1176},[95,95839,95840],{"class":164},"#size:用于确定是几维的数列\n",[10,95842,95843],{},[1444,95844],{"alt":14,"src":95845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[37,95847,95849],{"id":95848},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[10,95851,95852],{},"ndim:秩，维度个数",[10,95854,95855],{},"size:数组元素的个数",[10,95857,95858],{},"shape:数组的形状",[10,95860,95861],{},"dtype:数组元素的类型",[10,95863,95864],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[10,95866,95867],{},"他们都是属性，通过数组.属性的形式来确定",[10,95869,95870],{},"如果需要输出多个可以通过以下方式：",[86,95872,95874],{"className":30363,"code":95873,"language":30365,"meta":14,"style":14},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[92,95875,95876],{"__ignoreMap":14},[95,95877,95878,95880],{"class":97,"line":98},[95,95879,30400],{"class":154},[95,95881,95882],{"class":105},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[37,95884,95886],{"id":95885},"_26-其他方式创建数组","2.6 其他方式创建数组",[66,95888,95890],{"id":95889},"_261-zeros创建数组","2.6.1 zeros()创建数组",[10,95892,95893],{},"①创建一维数组",[86,95895,95897],{"className":30363,"code":95896,"language":30365,"meta":14,"style":14},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[92,95898,95899,95908,95912,95917,95922],{"__ignoreMap":14},[95,95900,95901,95904,95906],{"class":97,"line":98},[95,95902,95903],{"class":105},"np.zeros(",[95,95905,552],{"class":154},[95,95907,112],{"class":105},[95,95909,95910],{"class":97,"line":15},[95,95911,95675],{"class":210},[95,95913,95914],{"class":97,"line":1161},[95,95915,95916],{"class":210},"输出结果：\n",[95,95918,95919],{"class":97,"line":1176},[95,95920,95921],{"class":210},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[95,95923,95924],{"class":97,"line":1182},[95,95925,95675],{"class":210},[10,95927,95928],{},"上方代码等价于：",[86,95930,95932],{"className":30363,"code":95931,"language":30365,"meta":14,"style":14},"np.zeros(shape=(10))#创建10个元素的0数组\n",[92,95933,95934],{"__ignoreMap":14},[95,95935,95936,95938,95941,95943,95945,95947,95949],{"class":97,"line":98},[95,95937,95903],{"class":105},[95,95939,95940],{"class":5199},"shape",[95,95942,151],{"class":101},[95,95944,106],{"class":105},[95,95946,552],{"class":154},[95,95948,82748],{"class":105},[95,95950,95951],{"class":164},"#创建10个元素的0数组\n",[10,95953,95954],{},"也可以指定类型",[86,95956,95958],{"className":30363,"code":95957,"language":30365,"meta":14,"style":14},"#指定类型\nnp.zeros(5,dtype=int)\n",[92,95959,95960,95965],{"__ignoreMap":14},[95,95961,95962],{"class":97,"line":98},[95,95963,95964],{"class":164},"#指定类型\n",[95,95966,95967,95969,95971,95973,95975,95977,95979],{"class":97,"line":15},[95,95968,95903],{"class":105},[95,95970,425],{"class":154},[95,95972,484],{"class":105},[95,95974,93477],{"class":5199},[95,95976,151],{"class":101},[95,95978,109],{"class":154},[95,95980,112],{"class":105},[10,95982,95983],{},"②创建二维数组",[86,95985,95987],{"className":30363,"code":95986,"language":30365,"meta":14,"style":14},"np.zeros((3,4),dtype=int)\n",[92,95988,95989],{"__ignoreMap":14},[95,95990,95991,95994,95996,95998,96000,96002,96004,96006,96008],{"class":97,"line":98},[95,95992,95993],{"class":105},"np.zeros((",[95,95995,177],{"class":154},[95,95997,484],{"class":105},[95,95999,399],{"class":154},[95,96001,42241],{"class":105},[95,96003,93477],{"class":5199},[95,96005,151],{"class":101},[95,96007,109],{"class":154},[95,96009,112],{"class":105},[10,96011,96012],{},"③创建三维数组",[86,96014,96016],{"className":30363,"code":96015,"language":30365,"meta":14,"style":14},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[92,96017,96018,96023],{"__ignoreMap":14},[95,96019,96020],{"class":97,"line":98},[95,96021,96022],{"class":164},"#创建三维数组\n",[95,96024,96025,96027,96029,96031,96033,96035,96037,96039,96041,96043,96045],{"class":97,"line":15},[95,96026,95993],{"class":105},[95,96028,177],{"class":154},[95,96030,484],{"class":105},[95,96032,399],{"class":154},[95,96034,484],{"class":105},[95,96036,425],{"class":154},[95,96038,42241],{"class":105},[95,96040,93477],{"class":5199},[95,96042,151],{"class":101},[95,96044,109],{"class":154},[95,96046,112],{"class":105},[10,96048,96049],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[86,96051,96053],{"className":30363,"code":96052,"language":30365,"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",[92,96054,96055,96060,96075,96080,96085,96107],{"__ignoreMap":14},[95,96056,96057],{"class":97,"line":98},[95,96058,96059],{"class":164},"#使用zeros_like将创建的一维数组变成全0的数组\n",[95,96061,96062,96064,96066,96068,96070,96072],{"class":97,"line":15},[95,96063,344],{"class":105},[95,96065,151],{"class":101},[95,96067,92979],{"class":105},[95,96069,399],{"class":154},[95,96071,535],{"class":105},[95,96073,96074],{"class":164},"#这个得到的结果：一维数组0，1，2，3\n",[95,96076,96077],{"class":97,"line":1161},[95,96078,96079],{"class":105},"np.zeros_like(a)\n",[95,96081,96082],{"class":97,"line":1176},[95,96083,96084],{"class":164},"#使用zeros_like将创建的二维数组变成全0的数组\n",[95,96086,96087,96089,96091,96093,96095,96097,96099,96101,96103,96105],{"class":97,"line":1182},[95,96088,93283],{"class":105},[95,96090,151],{"class":101},[95,96092,95404],{"class":105},[95,96094,31481],{"class":5199},[95,96096,151],{"class":101},[95,96098,106],{"class":105},[95,96100,399],{"class":154},[95,96102,484],{"class":105},[95,96104,425],{"class":154},[95,96106,30482],{"class":105},[95,96108,96109],{"class":97,"line":1196},[95,96110,96111],{"class":105},"np.zeros_like(aa)\n",[66,96113,96115],{"id":96114},"_262-ones创建数组","2.6.2 ones()创建数组",[10,96117,96118],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[66,96120,96122],{"id":96121},"_263-empty创建数组","2.6.3 empty()创建数组",[10,96124,96125],{},"①empty()用法",[86,96127,96129],{"className":30363,"code":96128,"language":30365,"meta":14,"style":14},"numpy.empty(shape,dtype=float,order='c')\n",[92,96130,96131],{"__ignoreMap":14},[95,96132,96133,96136,96138,96140,96142,96144,96146,96148,96150],{"class":97,"line":98},[95,96134,96135],{"class":105},"numpy.empty(shape,",[95,96137,93477],{"class":5199},[95,96139,151],{"class":101},[95,96141,145],{"class":154},[95,96143,484],{"class":105},[95,96145,95274],{"class":5199},[95,96147,151],{"class":101},[95,96149,76005],{"class":210},[95,96151,112],{"class":105},[10,96153,96154],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[10,96156,96157],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[10,96159,96160],{},[1444,96161],{"alt":14,"src":96162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[10,96164,96165],{},"②empty()用法",[86,96167,96169],{"className":30363,"code":96168,"language":30365,"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",[92,96170,96171,96192,96204,96225,96230],{"__ignoreMap":14},[95,96172,96173,96175,96177,96180,96182,96184,96186,96188,96190],{"class":97,"line":98},[95,96174,951],{"class":105},[95,96176,151],{"class":101},[95,96178,96179],{"class":105},"np.empty(",[95,96181,552],{"class":154},[95,96183,484],{"class":105},[95,96185,93477],{"class":5199},[95,96187,151],{"class":101},[95,96189,109],{"class":154},[95,96191,112],{"class":105},[95,96193,96194,96196,96198,96200,96202],{"class":97,"line":15},[95,96195,926],{"class":105},[95,96197,151],{"class":101},[95,96199,92979],{"class":105},[95,96201,425],{"class":154},[95,96203,112],{"class":105},[95,96205,96206,96209,96211,96214,96216,96218,96221,96223],{"class":97,"line":1161},[95,96207,96208],{"class":105},"np.add(",[95,96210,183],{"class":154},[95,96212,96213],{"class":105},",x,",[95,96215,93031],{"class":5199},[95,96217,151],{"class":101},[95,96219,96220],{"class":105},"y[:",[95,96222,425],{"class":154},[95,96224,4639],{"class":105},[95,96226,96227],{"class":97,"line":1176},[95,96228,96229],{"class":164},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[95,96231,96232],{"class":97,"line":1182},[95,96233,96234],{"class":105},"y\n",[10,96236,11497],{},[10,96238,96239],{},[1444,96240],{"alt":14,"src":96241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[86,96243,96245],{"className":30363,"code":96244,"language":30365,"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",[92,96246,96247,96263,96283,96298],{"__ignoreMap":14},[95,96248,96249,96251,96253,96255,96257,96259,96261],{"class":97,"line":98},[95,96250,926],{"class":105},[95,96252,151],{"class":101},[95,96254,92979],{"class":105},[95,96256,323],{"class":154},[95,96258,484],{"class":105},[95,96260,450],{"class":154},[95,96262,112],{"class":105},[95,96264,96265,96267,96269,96271,96273,96275,96277,96279,96281],{"class":97,"line":15},[95,96266,951],{"class":105},[95,96268,151],{"class":101},[95,96270,96179],{"class":105},[95,96272,425],{"class":154},[95,96274,484],{"class":105},[95,96276,93477],{"class":5199},[95,96278,151],{"class":101},[95,96280,109],{"class":154},[95,96282,112],{"class":105},[95,96284,96285,96288,96290,96292,96294,96296],{"class":97,"line":1161},[95,96286,96287],{"class":105},"np.add(x,",[95,96289,183],{"class":154},[95,96291,484],{"class":105},[95,96293,93031],{"class":5199},[95,96295,151],{"class":101},[95,96297,93426],{"class":105},[95,96299,96300],{"class":97,"line":1176},[95,96301,96302],{"class":164},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[10,96304,96305],{},"③empty_like()",[10,96307,96308],{},[255,96309,96310,96311,96316],{},"创建一个",[255,96312,96313],{},[255,96314,96315],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[10,96318,96319,96322],{},[92,96320,96321],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[10,96324,96325],{},[1444,96326],{"alt":14,"src":96327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[66,96329,96331],{"id":96330},"_264-用法","2.6.4 ？？用法",[10,96333,96334],{},"当想查看一个函数的参数时，可以通过？？来实现",[86,96336,96338],{"className":30363,"code":96337,"language":30365,"meta":14,"style":14},"np.full??\n",[92,96339,96340],{"__ignoreMap":14},[95,96341,96342,96345],{"class":97,"line":98},[95,96343,96344],{"class":105},"np.full",[95,96346,96347],{"class":77380},"??\n",[66,96349,96351],{"id":96350},"_265-full创建数组","2.6.5 full()创建数组",[86,96353,96355],{"className":30363,"code":96354,"language":30365,"meta":14,"style":14},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[92,96356,96357,96362],{"__ignoreMap":14},[95,96358,96359],{"class":97,"line":98},[95,96360,96361],{"class":105},"full(shape,fill_value)\n",[95,96363,96364],{"class":97,"line":15},[95,96365,96366],{"class":105},"创建全为某个指定值的数组\n",[10,96368,94507],{},[86,96370,96372],{"className":30363,"code":96371,"language":30365,"meta":14,"style":14},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[92,96373,96374,96379],{"__ignoreMap":14},[95,96375,96376],{"class":97,"line":98},[95,96377,96378],{"class":164},"#创建一个一维数组,以20进行填充\n",[95,96380,96381,96384,96386,96388,96390],{"class":97,"line":15},[95,96382,96383],{"class":105},"np.full(",[95,96385,552],{"class":154},[95,96387,484],{"class":105},[95,96389,806],{"class":154},[95,96391,112],{"class":105},[10,96393,93268],{},[86,96395,96397],{"className":30363,"code":96396,"language":30365,"meta":14,"style":14},"#创建二维数组\nnp.full((3,5),11)\n",[92,96398,96399,96403],{"__ignoreMap":14},[95,96400,96401],{"class":97,"line":98},[95,96402,93924],{"class":164},[95,96404,96405,96408,96410,96412,96414,96416,96418],{"class":97,"line":15},[95,96406,96407],{"class":105},"np.full((",[95,96409,177],{"class":154},[95,96411,484],{"class":105},[95,96413,425],{"class":154},[95,96415,42241],{"class":105},[95,96417,578],{"class":154},[95,96419,112],{"class":105},[10,96421,96422],{},"③full_like用法",[10,96424,96425],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[10,96427,96428],{},"这里是指定填充而已",[86,96430,96432],{"className":30363,"code":96431,"language":30365,"meta":14,"style":14},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[92,96433,96434,96439,96463,96468],{"__ignoreMap":14},[95,96435,96436],{"class":97,"line":98},[95,96437,96438],{"class":164},"#创建一个指定形状数组\n",[95,96440,96441,96443,96445,96447,96449,96451,96453,96455,96457,96459,96461],{"class":97,"line":15},[95,96442,344],{"class":105},[95,96444,151],{"class":101},[95,96446,92979],{"class":105},[95,96448,323],{"class":154},[95,96450,484],{"class":105},[95,96452,431],{"class":154},[95,96454,92984],{"class":105},[95,96456,399],{"class":154},[95,96458,484],{"class":105},[95,96460,526],{"class":154},[95,96462,112],{"class":105},[95,96464,96465],{"class":97,"line":1161},[95,96466,96467],{"class":164},"#进行指定填充\n",[95,96469,96470,96473,96475],{"class":97,"line":1176},[95,96471,96472],{"class":105},"np.full_like(a,",[95,96474,552],{"class":154},[95,96476,112],{"class":105},[10,96478,11497],{},[10,96480,96481],{},[1444,96482],{"alt":14,"src":96483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[66,96485,96487],{"id":96486},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21981,96489,96491],{"id":96490},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[86,96493,96495],{"className":30363,"code":96494,"language":30365,"meta":14,"style":14},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[92,96496,96497,96514],{"__ignoreMap":14},[95,96498,96499,96502,96504,96506,96508,96510,96512],{"class":97,"line":98},[95,96500,96501],{"class":105},"np.eye(",[95,96503,399],{"class":154},[95,96505,484],{"class":105},[95,96507,93477],{"class":5199},[95,96509,151],{"class":101},[95,96511,109],{"class":154},[95,96513,112],{"class":105},[95,96515,96516],{"class":97,"line":15},[95,96517,96518],{"class":164},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21981,96520,96522],{"id":96521},"_2662-法2identity","2.6.6.2 法2：identity()",[86,96524,96526],{"className":30363,"code":96525,"language":30365,"meta":14,"style":14},"#identity()\nnp.identity(5,dtype=int)\n",[92,96527,96528,96533],{"__ignoreMap":14},[95,96529,96530],{"class":97,"line":98},[95,96531,96532],{"class":164},"#identity()\n",[95,96534,96535,96538,96540,96542,96544,96546,96548],{"class":97,"line":15},[95,96536,96537],{"class":105},"np.identity(",[95,96539,425],{"class":154},[95,96541,484],{"class":105},[95,96543,93477],{"class":5199},[95,96545,151],{"class":101},[95,96547,109],{"class":154},[95,96549,112],{"class":105},[10,96551,96552],{},"两个函数是有区别的",[10,96554,96555],{},[1444,96556],{"alt":14,"src":96557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[10,96559,96560],{},[1444,96561],{"alt":14,"src":96562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[86,96564,96566],{"className":30363,"code":96565,"language":30365,"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",[92,96567,96568,96573,96585,96590,96595,96600,96605,96609,96614,96634,96638,96643,96648],{"__ignoreMap":14},[95,96569,96570],{"class":97,"line":98},[95,96571,96572],{"class":164},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[95,96574,96575,96577,96579,96581,96583],{"class":97,"line":15},[95,96576,96501],{"class":105},[95,96578,177],{"class":154},[95,96580,12418],{"class":105},[95,96582,399],{"class":154},[95,96584,112],{"class":105},[95,96586,96587],{"class":97,"line":1161},[95,96588,96589],{"class":164},"# 输出:\n",[95,96591,96592],{"class":97,"line":1176},[95,96593,96594],{"class":164},"# [[1. 0. 0. 0.]\n",[95,96596,96597],{"class":97,"line":1182},[95,96598,96599],{"class":164},"#  [0. 1. 0. 0.]\n",[95,96601,96602],{"class":97,"line":1196},[95,96603,96604],{"class":164},"#  [0. 0. 1. 0.]]\n",[95,96606,96607],{"class":97,"line":1202},[95,96608,2382],{"emptyLinePlaceholder":21},[95,96610,96611],{"class":97,"line":1293},[95,96612,96613],{"class":164},"# 对角线向上偏移1\n",[95,96615,96616,96618,96620,96622,96624,96626,96628,96630,96632],{"class":97,"line":1299},[95,96617,96501],{"class":105},[95,96619,177],{"class":154},[95,96621,12418],{"class":105},[95,96623,399],{"class":154},[95,96625,12418],{"class":105},[95,96627,599],{"class":5199},[95,96629,151],{"class":101},[95,96631,323],{"class":154},[95,96633,112],{"class":105},[95,96635,96636],{"class":97,"line":1311},[95,96637,96589],{"class":164},[95,96639,96640],{"class":97,"line":1594},[95,96641,96642],{"class":164},"# [[0. 1. 0. 0.]\n",[95,96644,96645],{"class":97,"line":1599},[95,96646,96647],{"class":164},"#  [0. 0. 1. 0.]\n",[95,96649,96650],{"class":97,"line":1605},[95,96651,96652],{"class":164},"#  [0. 0. 0. 1.]]\n",[66,96654,96656],{"id":96655},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[86,96658,96660],{"className":30363,"code":96659,"language":30365,"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",[92,96661,96662,96667,96671,96676,96681,96686,96691,96696,96701,96706,96711],{"__ignoreMap":14},[95,96663,96664],{"class":97,"line":98},[95,96665,96666],{"class":164},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[95,96668,96669],{"class":97,"line":15},[95,96670,95675],{"class":210},[95,96672,96673],{"class":97,"line":1161},[95,96674,96675],{"class":210},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[95,96677,96678],{"class":97,"line":1176},[95,96679,96680],{"class":210},"参数介绍：\n",[95,96682,96683],{"class":97,"line":1182},[95,96684,96685],{"class":210},"start：序列的起始值\n",[95,96687,96688],{"class":97,"line":1196},[95,96689,96690],{"class":210},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[95,96692,96693],{"class":97,"line":1202},[95,96694,96695],{"class":210},"num：要生长的等步长的样本数量，默认为50\n",[95,96697,96698],{"class":97,"line":1293},[95,96699,96700],{"class":210},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[95,96702,96703],{"class":97,"line":1299},[95,96704,96705],{"class":210},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[95,96707,96708],{"class":97,"line":1311},[95,96709,96710],{"class":210},"dtype：ndarry的数据类型\n",[95,96712,96713],{"class":97,"line":1594},[95,96714,95675],{"class":210},[10,96716,96717],{},[1444,96718],{"alt":14,"src":96719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[10,96721,96722],{},"这里num=是可以省略的",[10,96724,96725],{},"也就是下方两行代码结果是一模一样的",[86,96727,96729],{"className":30363,"code":96728,"language":30365,"meta":14,"style":14},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[92,96730,96731,96748],{"__ignoreMap":14},[95,96732,96733,96736,96738,96740,96742,96744,96746],{"class":97,"line":98},[95,96734,96735],{"class":105},"np.linspace(",[95,96737,323],{"class":154},[95,96739,484],{"class":105},[95,96741,425],{"class":154},[95,96743,484],{"class":105},[95,96745,425],{"class":154},[95,96747,112],{"class":105},[95,96749,96750,96752,96754,96756,96758,96760,96762,96764,96766],{"class":97,"line":15},[95,96751,96735],{"class":105},[95,96753,323],{"class":154},[95,96755,484],{"class":105},[95,96757,425],{"class":154},[95,96759,484],{"class":105},[95,96761,1647],{"class":5199},[95,96763,151],{"class":101},[95,96765,425],{"class":154},[95,96767,112],{"class":105},[66,96769,96771],{"id":96770},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[86,96773,96775],{"className":30363,"code":96774,"language":30365,"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",[92,96776,96777,96782,96786,96791,96796,96801,96806,96810,96815,96820,96824],{"__ignoreMap":14},[95,96778,96779],{"class":97,"line":98},[95,96780,96781],{"class":164},"#logspace函数用于创建一个等比数列，格式如下：\n",[95,96783,96784],{"class":97,"line":15},[95,96785,95675],{"class":210},[95,96787,96788],{"class":97,"line":1161},[95,96789,96790],{"class":210},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[95,96792,96793],{"class":97,"line":1176},[95,96794,96795],{"class":210},"参数为：\n",[95,96797,96798],{"class":97,"line":1182},[95,96799,96800],{"class":210},"start:序列的起始位置为：base**start\n",[95,96802,96803],{"class":97,"line":1196},[95,96804,96805],{"class":210},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[95,96807,96808],{"class":97,"line":1202},[95,96809,96695],{"class":210},[95,96811,96812],{"class":97,"line":1293},[95,96813,96814],{"class":210},"endpoint：是否包含 stop 这个值，默认是 True\n",[95,96816,96817],{"class":97,"line":1299},[95,96818,96819],{"class":210},"base：对数的底数，默认是 10（常见对数）\n",[95,96821,96822],{"class":97,"line":1311},[95,96823,96710],{"class":210},[95,96825,96826],{"class":97,"line":1594},[95,96827,95675],{"class":210},[10,96829,96830],{},[1444,96831],{"alt":14,"src":96832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[10,96834,96835],{},"logspace()函数中的num参数也是可以不写num=的",[10,96837,96838],{},"endpoint是不可以省略的",[5109,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":1161,"text":95238},{"id":95310,"depth":1161,"text":95311},{"id":95342,"depth":15,"text":95343,"children":96849},[96850,96851,96852],{"id":95346,"depth":1161,"text":95347},{"id":95528,"depth":1161,"text":95529},{"id":95606,"depth":1161,"text":95607},{"id":95641,"depth":15,"text":95642,"children":96854},[96855,96856],{"id":95645,"depth":1161,"text":95646},{"id":95702,"depth":1161,"text":95703},{"id":95798,"depth":15,"text":95799,"children":96858},[96859,96860],{"id":95802,"depth":1161,"text":95803},{"id":95814,"depth":1161,"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":1161,"text":95890},{"id":96114,"depth":1161,"text":96115},{"id":96121,"depth":1161,"text":96122},{"id":96330,"depth":1161,"text":96331},{"id":96350,"depth":1161,"text":96351},{"id":96486,"depth":1161,"text":96487},{"id":96655,"depth":1161,"text":96656},{"id":96770,"depth":1161,"text":96771},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95225,"description":23360},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96878,"title":96879,"body":96880,"description":23360,"extension":18,"meta":96973,"navigation":21,"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],[33,96883,96879],{"id":96884},"_20魔法命令mprun",[10,96886,96887],{},"逐行分析数据内存的使用情况",[10,96889,96890],{},"语法格式：",[10,96892,96893],{},"%mprun -f 模块名.函数名 模块名.函数名()",[10,96895,96896],{},"分析结果列如下：",[10,96898,96899],{},"Line行号",[10,96901,96902],{},"Mem usage内存使用大小",[10,96904,96905],{},"increment内存增量",[10,96907,96908],{},"Line content代码内容",[10,96910,96911],{},"补充说明：",[10,96913,96914],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[10,96916,95180],{},[10,96918,96919],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[10,96921,96922],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[10,96924,96925],{},[1444,96926],{"alt":14,"src":96927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[10,96929,96930],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[10,96932,96933],{},"这时候需要重新加载模块",[86,96935,96937],{"className":30363,"code":96936,"language":30365,"meta":14,"style":14},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[92,96938,96939,96944,96951,96956],{"__ignoreMap":14},[95,96940,96941],{"class":97,"line":98},[95,96942,96943],{"class":164},"#重新加载模块\n",[95,96945,96946,96948],{"class":97,"line":15},[95,96947,30377],{"class":101},[95,96949,96950],{"class":105}," importlib\n",[95,96952,96953],{"class":97,"line":1161},[95,96954,96955],{"class":105},"importlib.reload(mprun_test)\n",[95,96957,96958,96960,96963,96965],{"class":97,"line":1176},[95,96959,434],{"class":101},[95,96961,96962],{"class":105},"mprun ",[95,96964,638],{"class":101},[95,96966,96967],{"class":105},"f mprun_test.fun_test mprun_test.fun_test()\n",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96979,"title":96980,"body":96981,"description":23360,"extension":18,"meta":96998,"navigation":21,"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],[33,96984,96980],{"id":96985},"_3一维数组的索引和切片",[10,96987,96988],{},[1444,96989],{"alt":14,"src":96990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[10,96992,96993],{},[1444,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97004,"title":97005,"body":97006,"description":23360,"extension":18,"meta":97489,"navigation":21,"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],[33,97009,97005],{"id":97010},"_4二维数组的索引与切片",[10,97012,97013],{},"①获取指定单个元素",[10,97015,97016],{},[1444,97017],{"alt":14,"src":97018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[86,97020,97022],{"className":30363,"code":97021,"language":30365,"meta":14,"style":14},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[92,97023,97024,97029,97034,97039],{"__ignoreMap":14},[95,97025,97026],{"class":97,"line":98},[95,97027,97028],{"class":164},"#获取元素9\n",[95,97030,97031],{"class":97,"line":15},[95,97032,97033],{"class":164},"#先获取所在行，再获取所在列\n",[95,97035,97036],{"class":97,"line":1161},[95,97037,97038],{"class":164},"#数组[行索引号，列索引号]\n",[95,97040,97041,97044,97046,97048,97050],{"class":97,"line":1176},[95,97042,97043],{"class":105},"a[",[95,97045,323],{"class":154},[95,97047,484],{"class":105},[95,97049,183],{"class":154},[95,97051,33231],{"class":105},[10,97053,97054],{},"②获取整行元素",[86,97056,97058],{"className":30363,"code":97057,"language":30365,"meta":14,"style":14},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[92,97059,97060,97065,97070,97078,97083],{"__ignoreMap":14},[95,97061,97062],{"class":97,"line":98},[95,97063,97064],{"class":164},"#获取整行 数组[行索引号]\n",[95,97066,97067],{"class":97,"line":15},[95,97068,97069],{"class":164},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[95,97071,97072,97074,97076],{"class":97,"line":1161},[95,97073,97043],{"class":105},[95,97075,183],{"class":154},[95,97077,33231],{"class":105},[95,97079,97080],{"class":97,"line":1176},[95,97081,97082],{"class":164},"#也可以负索引获取一行\n",[95,97084,97085,97087,97089,97091],{"class":97,"line":1182},[95,97086,97043],{"class":105},[95,97088,638],{"class":101},[95,97090,323],{"class":154},[95,97092,33231],{"class":105},[10,97094,97095],{},"③获取整列元素",[86,97097,97099],{"className":30363,"code":97098,"language":30365,"meta":14,"style":14},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[92,97100,97101,97106,97115,97120],{"__ignoreMap":14},[95,97102,97103],{"class":97,"line":98},[95,97104,97105],{"class":164},"#获取整列 数组名[:,列索引]\n",[95,97107,97108,97111,97113],{"class":97,"line":15},[95,97109,97110],{"class":105},"a[:,",[95,97112,183],{"class":154},[95,97114,33231],{"class":105},[95,97116,97117],{"class":97,"line":1161},[95,97118,97119],{"class":164},"#也可以负索引获取一列\n",[95,97121,97122,97124,97126,97128],{"class":97,"line":1176},[95,97123,97110],{"class":105},[95,97125,638],{"class":101},[95,97127,323],{"class":154},[95,97129,33231],{"class":105},[10,97131,97132],{},"④部分行部分列的元素",[86,97134,97136],{"className":30363,"code":97135,"language":30365,"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",[92,97137,97138,97143,97153,97157,97161,97166,97171,97175,97187,97191,97195,97200,97205,97210,97215,97219,97224],{"__ignoreMap":14},[95,97139,97140],{"class":97,"line":98},[95,97141,97142],{"class":164},"#部分行部分列 数组名[行切片，列切片]\n",[95,97144,97145,97148,97150],{"class":97,"line":15},[95,97146,97147],{"class":105},"a[:",[95,97149,183],{"class":154},[95,97151,97152],{"class":105},",:]\n",[95,97154,97155],{"class":97,"line":1161},[95,97156,93541],{"class":164},[95,97158,97159],{"class":97,"line":1176},[95,97160,93905],{"class":210},[95,97162,97163],{"class":97,"line":1182},[95,97164,97165],{"class":210},"array([[ 1,  2,  3,  4,  5,  6],\n",[95,97167,97168],{"class":97,"line":1196},[95,97169,97170],{"class":210},"       [ 7,  8,  9, 10, 11, 12]])\n",[95,97172,97173],{"class":97,"line":1202},[95,97174,93905],{"class":210},[95,97176,97177,97179,97181,97183,97185],{"class":97,"line":1293},[95,97178,97110],{"class":105},[95,97180,323],{"class":154},[95,97182,965],{"class":105},[95,97184,399],{"class":154},[95,97186,33231],{"class":105},[95,97188,97189],{"class":97,"line":1299},[95,97190,93541],{"class":164},[95,97192,97193],{"class":97,"line":1311},[95,97194,93905],{"class":210},[95,97196,97197],{"class":97,"line":1594},[95,97198,97199],{"class":210},"array([[ 2,  3,  4],\n",[95,97201,97202],{"class":97,"line":1599},[95,97203,97204],{"class":210},"       [ 8,  9, 10],\n",[95,97206,97207],{"class":97,"line":1605},[95,97208,97209],{"class":210},"       [14, 15, 16],\n",[95,97211,97212],{"class":97,"line":1610},[95,97213,97214],{"class":210},"       [20, 21, 22]])\n",[95,97216,97217],{"class":97,"line":1624},[95,97218,93905],{"class":210},[95,97220,97221],{"class":97,"line":1629},[95,97222,97223],{"class":164},"#对列行同时进行切片，使用了step参数\n",[95,97225,97226,97229,97231,97234,97236],{"class":97,"line":1635},[95,97227,97228],{"class":105},"a[::",[95,97230,183],{"class":154},[95,97232,97233],{"class":105},",::",[95,97235,183],{"class":154},[95,97237,33231],{"class":105},[10,97239,97240],{},"⑤同时获取两个元素",[86,97242,97244],{"className":30363,"code":97243,"language":30365,"meta":14,"style":14},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[92,97245,97246,97251,97256],{"__ignoreMap":14},[95,97247,97248],{"class":97,"line":98},[95,97249,97250],{"class":164},"#同时获取第三行第二列，第四行第一列\n",[95,97252,97253],{"class":97,"line":15},[95,97254,97255],{"class":164},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[95,97257,97258,97261,97263,97265,97267,97269,97271,97273,97275],{"class":97,"line":1161},[95,97259,97260],{"class":105},"a[(",[95,97262,183],{"class":154},[95,97264,484],{"class":105},[95,97266,177],{"class":154},[95,97268,42232],{"class":105},[95,97270,323],{"class":154},[95,97272,484],{"class":105},[95,97274,297],{"class":154},[95,97276,97277],{"class":105},")]\n",[10,97279,97280],{},"⑥切片，对行进行反向获取",[86,97282,97284],{"className":30363,"code":97283,"language":30365,"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",[92,97285,97286,97291,97301,97305,97309,97314,97319,97324,97329,97333,97338,97354,97358,97363,97368,97373,97378],{"__ignoreMap":14},[95,97287,97288],{"class":97,"line":98},[95,97289,97290],{"class":164},"#切片 对所有行进行反向获取\n",[95,97292,97293,97295,97297,97299],{"class":97,"line":15},[95,97294,97228],{"class":105},[95,97296,638],{"class":101},[95,97298,323],{"class":154},[95,97300,33231],{"class":105},[95,97302,97303],{"class":97,"line":1161},[95,97304,93541],{"class":164},[95,97306,97307],{"class":97,"line":1176},[95,97308,93905],{"class":210},[95,97310,97311],{"class":97,"line":1182},[95,97312,97313],{"class":210},"array([[19, 20, 21, 22, 23, 24],\n",[95,97315,97316],{"class":97,"line":1196},[95,97317,97318],{"class":210},"       [13, 14, 15, 16, 17, 18],\n",[95,97320,97321],{"class":97,"line":1202},[95,97322,97323],{"class":210},"       [ 7,  8,  9, 10, 11, 12],\n",[95,97325,97326],{"class":97,"line":1293},[95,97327,97328],{"class":210},"       [ 1,  2,  3,  4,  5,  6]])\n",[95,97330,97331],{"class":97,"line":1299},[95,97332,93905],{"class":210},[95,97334,97335],{"class":97,"line":1311},[95,97336,97337],{"class":164},"#对行列都进行反向切片获取\n",[95,97339,97340,97342,97344,97346,97348,97350,97352],{"class":97,"line":1594},[95,97341,97228],{"class":105},[95,97343,638],{"class":101},[95,97345,323],{"class":154},[95,97347,97233],{"class":105},[95,97349,638],{"class":101},[95,97351,323],{"class":154},[95,97353,33231],{"class":105},[95,97355,97356],{"class":97,"line":1599},[95,97357,93905],{"class":210},[95,97359,97360],{"class":97,"line":1605},[95,97361,97362],{"class":210},"array([[24, 23, 22, 21, 20, 19],\n",[95,97364,97365],{"class":97,"line":1610},[95,97366,97367],{"class":210},"       [18, 17, 16, 15, 14, 13],\n",[95,97369,97370],{"class":97,"line":1624},[95,97371,97372],{"class":210},"       [12, 11, 10,  9,  8,  7],\n",[95,97374,97375],{"class":97,"line":1629},[95,97376,97377],{"class":210},"       [ 6,  5,  4,  3,  2,  1]])\n",[95,97379,97380],{"class":97,"line":1635},[95,97381,93905],{"class":210},[10,97383,97384],{},"⑦修改元素",[86,97386,97388],{"className":30363,"code":97387,"language":30365,"meta":14,"style":14},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[92,97389,97390,97395,97413,97418],{"__ignoreMap":14},[95,97391,97392],{"class":97,"line":98},[95,97393,97394],{"class":164},"#获取前两行和前两列\n",[95,97396,97397,97400,97402,97404,97406,97409,97411],{"class":97,"line":15},[95,97398,97399],{"class":105},"sub_a",[95,97401,151],{"class":101},[95,97403,97147],{"class":105},[95,97405,183],{"class":154},[95,97407,97408],{"class":105},",:",[95,97410,183],{"class":154},[95,97412,33231],{"class":105},[95,97414,97415],{"class":97,"line":1161},[95,97416,97417],{"class":164},"#修改sub_a第一个元素的值\n",[95,97419,97420,97423,97425,97427,97429,97431,97433],{"class":97,"line":1176},[95,97421,97422],{"class":105},"sub_a[",[95,97424,297],{"class":154},[95,97426,484],{"class":105},[95,97428,297],{"class":154},[95,97430,1046],{"class":105},[95,97432,151],{"class":101},[95,97434,97435],{"class":154},"100\n",[10,97437,97438],{},"⑧数组复制copy()",[86,97440,97442],{"className":30363,"code":97441,"language":30365,"meta":14,"style":14},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[92,97443,97444,97449,97459,97464],{"__ignoreMap":14},[95,97445,97446],{"class":97,"line":98},[95,97447,97448],{"class":164},"#数组复制\n",[95,97450,97451,97454,97456],{"class":97,"line":15},[95,97452,97453],{"class":105},"copy_a",[95,97455,151],{"class":101},[95,97457,97458],{"class":105},"np.copy(sub_a)\n",[95,97460,97461],{"class":97,"line":1161},[95,97462,97463],{"class":164},"#修改copy_a后不影响原数组\n",[95,97465,97466,97469,97471,97473,97475,97477,97479],{"class":97,"line":1176},[95,97467,97468],{"class":105},"copy_a[",[95,97470,297],{"class":154},[95,97472,484],{"class":105},[95,97474,297],{"class":154},[95,97476,1046],{"class":105},[95,97478,151],{"class":101},[95,97480,97435],{"class":154},[10,97482,97483],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97495,"title":97496,"body":97497,"description":23360,"extension":18,"meta":97989,"navigation":21,"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],[33,97500,97496],{"id":97501},"_5改变数组的维度",[37,97503,97505],{"id":97504},"_51-使用reshape","5.1 使用reshape()",[10,97507,97508],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[10,97510,97511],{},"①一维数组转换为二维数组",[86,97513,97515],{"className":30363,"code":97514,"language":30365,"meta":14,"style":14},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[92,97516,97517,97533,97538,97543,97548],{"__ignoreMap":14},[95,97518,97519,97521,97523,97525,97527,97529,97531],{"class":97,"line":98},[95,97520,344],{"class":105},[95,97522,151],{"class":101},[95,97524,92979],{"class":105},[95,97526,323],{"class":154},[95,97528,484],{"class":105},[95,97530,629],{"class":154},[95,97532,112],{"class":105},[95,97534,97535],{"class":97,"line":15},[95,97536,97537],{"class":164},"#将一维数组进行转换\n",[95,97539,97540],{"class":97,"line":1161},[95,97541,97542],{"class":164},"#注意点：元素个数不可以变\n",[95,97544,97545],{"class":97,"line":1176},[95,97546,97547],{"class":164},"#转换维度要保持一致，不一致就异常！！！\n",[95,97549,97550,97552,97554,97557,97559,97561,97563],{"class":97,"line":1182},[95,97551,93283],{"class":105},[95,97553,151],{"class":101},[95,97555,97556],{"class":105},"a.reshape(",[95,97558,183],{"class":154},[95,97560,484],{"class":105},[95,97562,450],{"class":154},[95,97564,112],{"class":105},[10,97566,97567],{},"②一维数组转换为三维数组",[86,97569,97571],{"className":30363,"code":97570,"language":30365,"meta":14,"style":14},"aaa=a.reshape(2,3,2)\n",[92,97572,97573],{"__ignoreMap":14},[95,97574,97575,97577,97579,97581,97583,97585,97587,97589,97591],{"class":97,"line":98},[95,97576,95498],{"class":105},[95,97578,151],{"class":101},[95,97580,97556],{"class":105},[95,97582,183],{"class":154},[95,97584,484],{"class":105},[95,97586,177],{"class":154},[95,97588,484],{"class":105},[95,97590,183],{"class":154},[95,97592,112],{"class":105},[10,97594,97595],{},"③二维数组转化为一维数组",[86,97597,97599],{"className":30363,"code":97598,"language":30365,"meta":14,"style":14},"#知道元素个数：\naa.reshape(12)\n",[92,97600,97601,97606],{"__ignoreMap":14},[95,97602,97603],{"class":97,"line":98},[95,97604,97605],{"class":164},"#知道元素个数：\n",[95,97607,97608,97611,97613],{"class":97,"line":15},[95,97609,97610],{"class":105},"aa.reshape(",[95,97612,604],{"class":154},[95,97614,112],{"class":105},[86,97616,97618],{"className":30363,"code":97617,"language":30365,"meta":14,"style":14},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[92,97619,97620,97625],{"__ignoreMap":14},[95,97621,97622],{"class":97,"line":98},[95,97623,97624],{"class":164},"#不知道元素个数，参数传递-1\n",[95,97626,97627,97629,97631,97633],{"class":97,"line":15},[95,97628,97610],{"class":105},[95,97630,638],{"class":101},[95,97632,323],{"class":154},[95,97634,112],{"class":105},[10,97636,97637],{},"④三维数组转换为一维数组",[86,97639,97641],{"className":30363,"code":97640,"language":30365,"meta":14,"style":14},"aaa.reshape(-1)\n",[92,97642,97643],{"__ignoreMap":14},[95,97644,97645,97648,97650,97652],{"class":97,"line":98},[95,97646,97647],{"class":105},"aaa.reshape(",[95,97649,638],{"class":101},[95,97651,323],{"class":154},[95,97653,112],{"class":105},[37,97655,97657],{"id":97656},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[86,97659,97661],{"className":30363,"code":97660,"language":30365,"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",[92,97662,97663,97690,97695,97699],{"__ignoreMap":14},[95,97664,97665,97667,97669,97671,97673,97675,97677,97679,97681,97683,97685,97687],{"class":97,"line":98},[95,97666,93283],{"class":105},[95,97668,151],{"class":101},[95,97670,92979],{"class":105},[95,97672,323],{"class":154},[95,97674,484],{"class":105},[95,97676,629],{"class":154},[95,97678,92984],{"class":105},[95,97680,183],{"class":154},[95,97682,484],{"class":105},[95,97684,450],{"class":154},[95,97686,535],{"class":105},[95,97688,97689],{"class":164},"#转换为2行6列的数组\n",[95,97691,97692],{"class":97,"line":15},[95,97693,97694],{"class":105},"aa.revel()\n",[95,97696,97697],{"class":97,"line":1161},[95,97698,93541],{"class":164},[95,97700,97701],{"class":97,"line":1176},[95,97702,97703],{"class":164},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[37,97705,97707],{"id":97706},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[86,97709,97711],{"className":30363,"code":97710,"language":30365,"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",[92,97712,97713,97737,97742,97746],{"__ignoreMap":14},[95,97714,97715,97717,97719,97721,97723,97725,97727,97729,97731,97733,97735],{"class":97,"line":98},[95,97716,93283],{"class":105},[95,97718,151],{"class":101},[95,97720,92979],{"class":105},[95,97722,323],{"class":154},[95,97724,484],{"class":105},[95,97726,629],{"class":154},[95,97728,92984],{"class":105},[95,97730,183],{"class":154},[95,97732,484],{"class":105},[95,97734,450],{"class":154},[95,97736,112],{"class":105},[95,97738,97739],{"class":97,"line":15},[95,97740,97741],{"class":105},"aa.flatten()\n",[95,97743,97744],{"class":97,"line":1161},[95,97745,93541],{"class":164},[95,97747,97748],{"class":97,"line":1176},[95,97749,97703],{"class":164},[37,97751,97753],{"id":97752},"_54-使用resize","5.4 使用resize()",[10,97755,97756],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[10,97758,97759],{},"通过resize方法可以改变数组的维度",[10,97761,97762],{},"#resize修改数组维度",[10,97764,97765],{},"#以元组的形式指定形状",[10,97767,97768],{},"#改变的是原数组",[86,97770,97772],{"className":30363,"code":97771,"language":30365,"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",[92,97773,97774,97790,97810,97823,97827],{"__ignoreMap":14},[95,97775,97776,97778,97780,97782,97784,97786,97788],{"class":97,"line":98},[95,97777,344],{"class":105},[95,97779,151],{"class":101},[95,97781,92979],{"class":105},[95,97783,323],{"class":154},[95,97785,484],{"class":105},[95,97787,629],{"class":154},[95,97789,112],{"class":105},[95,97791,97792,97795,97797,97799,97801,97803,97805,97807],{"class":97,"line":15},[95,97793,97794],{"class":105},"a.shape",[95,97796,151],{"class":101},[95,97798,106],{"class":105},[95,97800,183],{"class":154},[95,97802,484],{"class":105},[95,97804,450],{"class":154},[95,97806,535],{"class":105},[95,97808,97809],{"class":164},"#改变了原数组\n",[95,97811,97812,97814,97816,97819,97821],{"class":97,"line":1161},[95,97813,344],{"class":105},[95,97815,151],{"class":101},[95,97817,97818],{"class":105},"resize((",[95,97820,604],{"class":154},[95,97822,30482],{"class":105},[95,97824,97825],{"class":97,"line":1176},[95,97826,93541],{"class":164},[95,97828,97829],{"class":97,"line":1182},[95,97830,97703],{"class":164},[86,97832,97834],{"className":30363,"code":97833,"language":30365,"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",[92,97835,97836,97849,97853,97857,97862,97867,97872,97877,97882,97887],{"__ignoreMap":14},[95,97837,97838,97841,97843,97845,97847],{"class":97,"line":98},[95,97839,97840],{"class":105},"a.resize((",[95,97842,450],{"class":154},[95,97844,484],{"class":105},[95,97846,183],{"class":154},[95,97848,30482],{"class":105},[95,97850,97851],{"class":97,"line":15},[95,97852,93541],{"class":164},[95,97854,97855],{"class":97,"line":1161},[95,97856,93905],{"class":210},[95,97858,97859],{"class":97,"line":1176},[95,97860,97861],{"class":210},"array([[ 1,  2],\n",[95,97863,97864],{"class":97,"line":1182},[95,97865,97866],{"class":210},"       [ 3,  4],\n",[95,97868,97869],{"class":97,"line":1196},[95,97870,97871],{"class":210},"       [ 5,  6],\n",[95,97873,97874],{"class":97,"line":1202},[95,97875,97876],{"class":210},"       [ 7,  8],\n",[95,97878,97879],{"class":97,"line":1293},[95,97880,97881],{"class":210},"       [ 9, 10],\n",[95,97883,97884],{"class":97,"line":1299},[95,97885,97886],{"class":210},"       [11, 12]])\n",[95,97888,97889],{"class":97,"line":1311},[95,97890,93905],{"class":210},[37,97892,97894],{"id":97893},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[10,97896,97897],{},"改变了原数组",[86,97899,97901],{"className":30363,"code":97900,"language":30365,"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",[92,97902,97903,97919,97935,97939,97943,97947,97951],{"__ignoreMap":14},[95,97904,97905,97907,97909,97911,97913,97915,97917],{"class":97,"line":98},[95,97906,344],{"class":105},[95,97908,151],{"class":101},[95,97910,92979],{"class":105},[95,97912,323],{"class":154},[95,97914,484],{"class":105},[95,97916,629],{"class":154},[95,97918,112],{"class":105},[95,97920,97921,97923,97925,97927,97929,97931,97933],{"class":97,"line":15},[95,97922,97794],{"class":105},[95,97924,151],{"class":101},[95,97926,106],{"class":105},[95,97928,183],{"class":154},[95,97930,484],{"class":105},[95,97932,450],{"class":154},[95,97934,112],{"class":105},[95,97936,97937],{"class":97,"line":1161},[95,97938,93541],{"class":164},[95,97940,97941],{"class":97,"line":1176},[95,97942,93905],{"class":210},[95,97944,97945],{"class":97,"line":1182},[95,97946,97165],{"class":210},[95,97948,97949],{"class":97,"line":1196},[95,97950,97170],{"class":210},[95,97952,97953],{"class":97,"line":1202},[95,97954,93905],{"class":210},[37,97956,97958],{"id":97957},"_56-重要比较","5.6 重要比较：",[10,97960,97961],{},[1444,97962],{"alt":14,"src":97963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[10,97965,97966,97967,97969,97970,97972],{},"口诀：NumPy 函数要么用 ",[92,97968,95940],{},"，要么用 ",[92,97971,31481],{},"，创建结构用 shape，造数据用 size",[10,97974,97975],{},[1444,97976],{"alt":14,"src":97977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97995,"title":97996,"body":97997,"description":23360,"extension":18,"meta":99069,"navigation":21,"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],[33,98000,97996],{"id":98001},"_6数组的拼接",[37,98003,98005],{"id":98004},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[10,98007,98008],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[10,98010,98011],{},"函数内部传两个数列构成的数列或者元组",[10,98013,98014],{},"①一维数组的拼接",[86,98016,98018],{"className":30363,"code":98017,"language":30365,"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",[92,98019,98020,98040,98060,98065,98070,98075],{"__ignoreMap":14},[95,98021,98022,98024,98026,98028,98030,98032,98034,98036,98038],{"class":97,"line":98},[95,98023,344],{"class":105},[95,98025,151],{"class":101},[95,98027,93001],{"class":105},[95,98029,323],{"class":154},[95,98031,484],{"class":105},[95,98033,183],{"class":154},[95,98035,484],{"class":105},[95,98037,177],{"class":154},[95,98039,4639],{"class":105},[95,98041,98042,98044,98046,98048,98050,98052,98054,98056,98058],{"class":97,"line":15},[95,98043,369],{"class":105},[95,98045,151],{"class":101},[95,98047,93001],{"class":105},[95,98049,399],{"class":154},[95,98051,484],{"class":105},[95,98053,425],{"class":154},[95,98055,484],{"class":105},[95,98057,450],{"class":154},[95,98059,4639],{"class":105},[95,98061,98062],{"class":97,"line":1161},[95,98063,98064],{"class":164},"#调用concatenate进行数组拼接\n",[95,98066,98067],{"class":97,"line":1176},[95,98068,98069],{"class":105},"np.concatenate((a,b))\n",[95,98071,98072],{"class":97,"line":1182},[95,98073,98074],{"class":164},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[95,98076,98077],{"class":97,"line":1196},[95,98078,98079],{"class":164},"#np.concatenate([a,b])\n",[10,98081,98082],{},"②一维多个数组拼接",[86,98084,98086],{"className":30363,"code":98085,"language":30365,"meta":14,"style":14},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[92,98087,98088,98093,98113,98118],{"__ignoreMap":14},[95,98089,98090],{"class":97,"line":98},[95,98091,98092],{"class":164},"#也可以多个数组进行拼接\n",[95,98094,98095,98097,98099,98101,98103,98105,98107,98109,98111],{"class":97,"line":15},[95,98096,394],{"class":105},[95,98098,151],{"class":101},[95,98100,93001],{"class":105},[95,98102,552],{"class":154},[95,98104,484],{"class":105},[95,98106,578],{"class":154},[95,98108,484],{"class":105},[95,98110,629],{"class":154},[95,98112,4639],{"class":105},[95,98114,98115],{"class":97,"line":1161},[95,98116,98117],{"class":105},"c\n",[95,98119,98120],{"class":97,"line":1176},[95,98121,98122],{"class":105},"np.concatenate((a,b,c))\n",[10,98124,98125],{},"③二维数组拼接",[86,98127,98129],{"className":30363,"code":98128,"language":30365,"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",[92,98130,98131,98136,98160,98185,98190,98195],{"__ignoreMap":14},[95,98132,98133],{"class":97,"line":98},[95,98134,98135],{"class":164},"#二维数组使用concatenate进行拼接\n",[95,98137,98138,98140,98142,98144,98146,98148,98150,98152,98154,98156,98158],{"class":97,"line":15},[95,98139,93283],{"class":105},[95,98141,151],{"class":101},[95,98143,92979],{"class":105},[95,98145,323],{"class":154},[95,98147,484],{"class":105},[95,98149,629],{"class":154},[95,98151,92984],{"class":105},[95,98153,177],{"class":154},[95,98155,484],{"class":105},[95,98157,399],{"class":154},[95,98159,112],{"class":105},[95,98161,98162,98165,98167,98169,98171,98173,98175,98177,98179,98181,98183],{"class":97,"line":1161},[95,98163,98164],{"class":105},"bb",[95,98166,151],{"class":101},[95,98168,92979],{"class":105},[95,98170,443],{"class":154},[95,98172,484],{"class":105},[95,98174,748],{"class":154},[95,98176,92984],{"class":105},[95,98178,177],{"class":154},[95,98180,484],{"class":105},[95,98182,399],{"class":154},[95,98184,112],{"class":105},[95,98186,98187],{"class":97,"line":1176},[95,98188,98189],{"class":164},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[95,98191,98192],{"class":97,"line":1182},[95,98193,98194],{"class":164},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[95,98196,98197,98200,98202,98204,98206],{"class":97,"line":1196},[95,98198,98199],{"class":105},"np.concatenate((aa,bb),",[95,98201,47499],{"class":5199},[95,98203,151],{"class":101},[95,98205,297],{"class":154},[95,98207,112],{"class":105},[10,98209,98210],{},"结果：",[10,98212,98213],{},[1444,98214],{"alt":14,"src":98215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[86,98217,98219],{"className":30363,"code":98218,"language":30365,"meta":14,"style":14},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[92,98220,98221,98226],{"__ignoreMap":14},[95,98222,98223],{"class":97,"line":98},[95,98224,98225],{"class":164},"#指定axis为1进行拼接\n",[95,98227,98228,98230,98232,98234,98236],{"class":97,"line":15},[95,98229,98199],{"class":105},[95,98231,47499],{"class":5199},[95,98233,151],{"class":101},[95,98235,323],{"class":154},[95,98237,112],{"class":105},[10,98239,98210],{},[10,98241,98242],{},[1444,98243],{"alt":14,"src":98244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[10,98246,98247],{},[255,98248,98249],{},"二维数组总结：0竖着方向，1横着方向",[10,98251,98252],{},"④三维数组拼接",[10,98254,98255],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[86,98257,98259],{"className":30363,"code":98258,"language":30365,"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",[92,98260,98261,98266,98294,98324,98329,98346,98351,98356,98361,98378,98383,98388,98393,98406],{"__ignoreMap":14},[95,98262,98263],{"class":97,"line":98},[95,98264,98265],{"class":164},"#两个三行六列\n",[95,98267,98268,98270,98272,98274,98276,98278,98280,98282,98284,98286,98288,98290,98292],{"class":97,"line":15},[95,98269,95498],{"class":105},[95,98271,151],{"class":101},[95,98273,92979],{"class":105},[95,98275,323],{"class":154},[95,98277,484],{"class":105},[95,98279,431],{"class":154},[95,98281,92984],{"class":105},[95,98283,183],{"class":154},[95,98285,484],{"class":105},[95,98287,177],{"class":154},[95,98289,484],{"class":105},[95,98291,450],{"class":154},[95,98293,112],{"class":105},[95,98295,98296,98299,98301,98303,98305,98307,98310,98312,98314,98316,98318,98320,98322],{"class":97,"line":1161},[95,98297,98298],{"class":105},"bbb",[95,98300,151],{"class":101},[95,98302,92979],{"class":105},[95,98304,443],{"class":154},[95,98306,484],{"class":105},[95,98308,98309],{"class":154},"137",[95,98311,92984],{"class":105},[95,98313,183],{"class":154},[95,98315,484],{"class":105},[95,98317,177],{"class":154},[95,98319,484],{"class":105},[95,98321,450],{"class":154},[95,98323,112],{"class":105},[95,98325,98326],{"class":97,"line":1176},[95,98327,98328],{"class":164},"#axis=0\n",[95,98330,98331,98333,98335,98338,98340,98342,98344],{"class":97,"line":1182},[95,98332,801],{"class":105},[95,98334,151],{"class":101},[95,98336,98337],{"class":105},"np.concatenate((aaa,bbb),",[95,98339,47499],{"class":5199},[95,98341,151],{"class":101},[95,98343,297],{"class":154},[95,98345,112],{"class":105},[95,98347,98348],{"class":97,"line":1196},[95,98349,98350],{"class":105},"s.shape\n",[95,98352,98353],{"class":97,"line":1202},[95,98354,98355],{"class":164},"#输出：(4,3,6)\n",[95,98357,98358],{"class":97,"line":1293},[95,98359,98360],{"class":164},"#axis=1\n",[95,98362,98363,98366,98368,98370,98372,98374,98376],{"class":97,"line":1299},[95,98364,98365],{"class":105},"ss",[95,98367,151],{"class":101},[95,98369,98337],{"class":105},[95,98371,47499],{"class":5199},[95,98373,151],{"class":101},[95,98375,323],{"class":154},[95,98377,112],{"class":105},[95,98379,98380],{"class":97,"line":1311},[95,98381,98382],{"class":105},"ss.shape\n",[95,98384,98385],{"class":97,"line":1594},[95,98386,98387],{"class":164},"#输出：(2,6,6)\n",[95,98389,98390],{"class":97,"line":1599},[95,98391,98392],{"class":164},"#axis=2\n",[95,98394,98395,98397,98399,98401,98403],{"class":97,"line":1605},[95,98396,98337],{"class":105},[95,98398,47499],{"class":5199},[95,98400,151],{"class":101},[95,98402,183],{"class":154},[95,98404,98405],{"class":105},").shape\n",[95,98407,98408],{"class":97,"line":1610},[95,98409,98410],{"class":164},"#输出：（2，3，12）\n",[10,98412,98413],{},"⑤四维数组拼接",[86,98415,98417],{"className":30363,"code":98416,"language":30365,"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",[92,98418,98419,98423,98451,98479,98504,98530,98534,98547,98552,98556,98568,98573,98577,98589,98594,98599,98611],{"__ignoreMap":14},[95,98420,98421],{"class":97,"line":98},[95,98422,98265],{"class":164},[95,98424,98425,98427,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449],{"class":97,"line":15},[95,98426,95498],{"class":105},[95,98428,151],{"class":101},[95,98430,92979],{"class":105},[95,98432,323],{"class":154},[95,98434,484],{"class":105},[95,98436,431],{"class":154},[95,98438,92984],{"class":105},[95,98440,183],{"class":154},[95,98442,484],{"class":105},[95,98444,177],{"class":154},[95,98446,484],{"class":105},[95,98448,450],{"class":154},[95,98450,112],{"class":105},[95,98452,98453,98455,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475,98477],{"class":97,"line":1161},[95,98454,98298],{"class":105},[95,98456,151],{"class":101},[95,98458,92979],{"class":105},[95,98460,443],{"class":154},[95,98462,484],{"class":105},[95,98464,98309],{"class":154},[95,98466,92984],{"class":105},[95,98468,183],{"class":154},[95,98470,484],{"class":105},[95,98472,177],{"class":154},[95,98474,484],{"class":105},[95,98476,450],{"class":154},[95,98478,112],{"class":105},[95,98480,98481,98484,98486,98488,98490,98492,98494,98496,98498,98500,98502],{"class":97,"line":1176},[95,98482,98483],{"class":105},"aaaa",[95,98485,151],{"class":101},[95,98487,97647],{"class":105},[95,98489,183],{"class":154},[95,98491,484],{"class":105},[95,98493,177],{"class":154},[95,98495,484],{"class":105},[95,98497,177],{"class":154},[95,98499,484],{"class":105},[95,98501,183],{"class":154},[95,98503,112],{"class":105},[95,98505,98506,98509,98511,98514,98516,98518,98520,98522,98524,98526,98528],{"class":97,"line":1182},[95,98507,98508],{"class":105},"bbbb",[95,98510,151],{"class":101},[95,98512,98513],{"class":105},"bbb.reshape(",[95,98515,183],{"class":154},[95,98517,484],{"class":105},[95,98519,177],{"class":154},[95,98521,484],{"class":105},[95,98523,177],{"class":154},[95,98525,484],{"class":105},[95,98527,183],{"class":154},[95,98529,112],{"class":105},[95,98531,98532],{"class":97,"line":1196},[95,98533,98328],{"class":164},[95,98535,98536,98539,98541,98543,98545],{"class":97,"line":1202},[95,98537,98538],{"class":105},"np.concatenate((aaaa,bbbb),",[95,98540,47499],{"class":5199},[95,98542,151],{"class":101},[95,98544,297],{"class":154},[95,98546,98405],{"class":105},[95,98548,98549],{"class":97,"line":1293},[95,98550,98551],{"class":164},"#结果：（4，3，3，2）\n",[95,98553,98554],{"class":97,"line":1299},[95,98555,98360],{"class":164},[95,98557,98558,98560,98562,98564,98566],{"class":97,"line":1311},[95,98559,98538],{"class":105},[95,98561,47499],{"class":5199},[95,98563,151],{"class":101},[95,98565,323],{"class":154},[95,98567,98405],{"class":105},[95,98569,98570],{"class":97,"line":1594},[95,98571,98572],{"class":164},"#结果：（2，6，3，2）\n",[95,98574,98575],{"class":97,"line":1599},[95,98576,98392],{"class":164},[95,98578,98579,98581,98583,98585,98587],{"class":97,"line":1605},[95,98580,98538],{"class":105},[95,98582,47499],{"class":5199},[95,98584,151],{"class":101},[95,98586,183],{"class":154},[95,98588,98405],{"class":105},[95,98590,98591],{"class":97,"line":1610},[95,98592,98593],{"class":164},"#结果：（2，3，6，2）\n",[95,98595,98596],{"class":97,"line":1624},[95,98597,98598],{"class":164},"#axis=3\n",[95,98600,98601,98603,98605,98607,98609],{"class":97,"line":1629},[95,98602,98538],{"class":105},[95,98604,47499],{"class":5199},[95,98606,151],{"class":101},[95,98608,177],{"class":154},[95,98610,98405],{"class":105},[95,98612,98613],{"class":97,"line":1635},[95,98614,98615],{"class":164},"#结果：（2，3，3，4）\n",[37,98617,98619],{"id":98618},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[10,98621,98622],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[10,98624,98625],{},"①二维数组",[86,98627,98629],{"className":30363,"code":98628,"language":30365,"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",[92,98630,98631,98655,98679,98684,98689],{"__ignoreMap":14},[95,98632,98633,98635,98637,98639,98641,98643,98645,98647,98649,98651,98653],{"class":97,"line":98},[95,98634,93283],{"class":105},[95,98636,151],{"class":101},[95,98638,92979],{"class":105},[95,98640,323],{"class":154},[95,98642,484],{"class":105},[95,98644,629],{"class":154},[95,98646,92984],{"class":105},[95,98648,177],{"class":154},[95,98650,484],{"class":105},[95,98652,399],{"class":154},[95,98654,112],{"class":105},[95,98656,98657,98659,98661,98663,98665,98667,98669,98671,98673,98675,98677],{"class":97,"line":15},[95,98658,98164],{"class":105},[95,98660,151],{"class":101},[95,98662,92979],{"class":105},[95,98664,443],{"class":154},[95,98666,484],{"class":105},[95,98668,748],{"class":154},[95,98670,92984],{"class":105},[95,98672,177],{"class":154},[95,98674,484],{"class":105},[95,98676,399],{"class":154},[95,98678,112],{"class":105},[95,98680,98681],{"class":97,"line":1161},[95,98682,98683],{"class":105},"np.hstack((aa,bb))\n",[95,98685,98686],{"class":97,"line":1176},[95,98687,98688],{"class":164},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[95,98690,98691],{"class":97,"line":1182},[95,98692,98693],{"class":164},"#np.hstack([aa,bb])\n",[10,98695,98210],{},[10,98697,98698],{},[1444,98699],{"alt":14,"src":98700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[10,98702,98703],{},"等效于concatenate()函数中axis=1时的情况",[10,98705,98706],{},"②三维数组",[86,98708,98710],{"className":30363,"code":98709,"language":30365,"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",[92,98711,98712,98716,98744,98772,98777,98782],{"__ignoreMap":14},[95,98713,98714],{"class":97,"line":98},[95,98715,98265],{"class":164},[95,98717,98718,98720,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740,98742],{"class":97,"line":15},[95,98719,95498],{"class":105},[95,98721,151],{"class":101},[95,98723,92979],{"class":105},[95,98725,323],{"class":154},[95,98727,484],{"class":105},[95,98729,431],{"class":154},[95,98731,92984],{"class":105},[95,98733,183],{"class":154},[95,98735,484],{"class":105},[95,98737,177],{"class":154},[95,98739,484],{"class":105},[95,98741,450],{"class":154},[95,98743,112],{"class":105},[95,98745,98746,98748,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770],{"class":97,"line":1161},[95,98747,98298],{"class":105},[95,98749,151],{"class":101},[95,98751,92979],{"class":105},[95,98753,443],{"class":154},[95,98755,484],{"class":105},[95,98757,98309],{"class":154},[95,98759,92984],{"class":105},[95,98761,183],{"class":154},[95,98763,484],{"class":105},[95,98765,177],{"class":154},[95,98767,484],{"class":105},[95,98769,450],{"class":154},[95,98771,112],{"class":105},[95,98773,98774],{"class":97,"line":1176},[95,98775,98776],{"class":164},"#使用hstack\n",[95,98778,98779],{"class":97,"line":1182},[95,98780,98781],{"class":105},"np.hstack((aaa,bbb)).shape\n",[95,98783,98784],{"class":97,"line":1196},[95,98785,98786],{"class":164},"#输出：（2，6，6）\n",[37,98788,98790],{"id":98789},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[10,98792,98793],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[10,98795,98625],{},[86,98797,98799],{"className":30363,"code":98798,"language":30365,"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",[92,98800,98801,98825,98849,98854,98859,98864],{"__ignoreMap":14},[95,98802,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823],{"class":97,"line":98},[95,98804,93283],{"class":105},[95,98806,151],{"class":101},[95,98808,92979],{"class":105},[95,98810,323],{"class":154},[95,98812,484],{"class":105},[95,98814,629],{"class":154},[95,98816,92984],{"class":105},[95,98818,177],{"class":154},[95,98820,484],{"class":105},[95,98822,399],{"class":154},[95,98824,112],{"class":105},[95,98826,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847],{"class":97,"line":15},[95,98828,98164],{"class":105},[95,98830,151],{"class":101},[95,98832,92979],{"class":105},[95,98834,443],{"class":154},[95,98836,484],{"class":105},[95,98838,748],{"class":154},[95,98840,92984],{"class":105},[95,98842,177],{"class":154},[95,98844,484],{"class":105},[95,98846,399],{"class":154},[95,98848,112],{"class":105},[95,98850,98851],{"class":97,"line":1161},[95,98852,98853],{"class":164},"#vstack 垂直方向进行堆叠\n",[95,98855,98856],{"class":97,"line":1176},[95,98857,98858],{"class":105},"np.vstack((aa,bb))\n",[95,98860,98861],{"class":97,"line":1182},[95,98862,98863],{"class":164},"#与hstack传的参数类似，等价于：\n",[95,98865,98866],{"class":97,"line":1196},[95,98867,98868],{"class":105},"np.vstack([aa,bb])\n",[10,98870,98210],{},[10,98872,98873],{},[1444,98874],{"alt":14,"src":98875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[10,98877,98706],{},[86,98879,98881],{"className":30363,"code":98880,"language":30365,"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",[92,98882,98883,98887,98915,98943,98948,98953],{"__ignoreMap":14},[95,98884,98885],{"class":97,"line":98},[95,98886,98265],{"class":164},[95,98888,98889,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911,98913],{"class":97,"line":15},[95,98890,95498],{"class":105},[95,98892,151],{"class":101},[95,98894,92979],{"class":105},[95,98896,323],{"class":154},[95,98898,484],{"class":105},[95,98900,431],{"class":154},[95,98902,92984],{"class":105},[95,98904,183],{"class":154},[95,98906,484],{"class":105},[95,98908,177],{"class":154},[95,98910,484],{"class":105},[95,98912,450],{"class":154},[95,98914,112],{"class":105},[95,98916,98917,98919,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941],{"class":97,"line":1161},[95,98918,98298],{"class":105},[95,98920,151],{"class":101},[95,98922,92979],{"class":105},[95,98924,443],{"class":154},[95,98926,484],{"class":105},[95,98928,98309],{"class":154},[95,98930,92984],{"class":105},[95,98932,183],{"class":154},[95,98934,484],{"class":105},[95,98936,177],{"class":154},[95,98938,484],{"class":105},[95,98940,450],{"class":154},[95,98942,112],{"class":105},[95,98944,98945],{"class":97,"line":1176},[95,98946,98947],{"class":164},"#使用vstack\n",[95,98949,98950],{"class":97,"line":1182},[95,98951,98952],{"class":105},"np.vstack((aaa,bbb)).shape\n",[95,98954,98955],{"class":97,"line":1196},[95,98956,98957],{"class":164},"#输出：（4，3，6）\n",[37,98959,98961],{"id":98960},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[10,98963,98964],{},"该方法是三维数组特有的方法",[10,98966,98967],{},"也就是说",[10,98969,98970],{},"一维数组拼接方法用：concatenate()",[10,98972,98973],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[10,98975,98976],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[10,98978,98979],{},"四维数组及多维数组只能用concatenate进行拼接",[86,98981,98983],{"className":30363,"code":98982,"language":30365,"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",[92,98984,98985,98989,99017,99045,99050,99055],{"__ignoreMap":14},[95,98986,98987],{"class":97,"line":98},[95,98988,98265],{"class":164},[95,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015],{"class":97,"line":15},[95,98992,95498],{"class":105},[95,98994,151],{"class":101},[95,98996,92979],{"class":105},[95,98998,323],{"class":154},[95,99000,484],{"class":105},[95,99002,431],{"class":154},[95,99004,92984],{"class":105},[95,99006,183],{"class":154},[95,99008,484],{"class":105},[95,99010,177],{"class":154},[95,99012,484],{"class":105},[95,99014,450],{"class":154},[95,99016,112],{"class":105},[95,99018,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043],{"class":97,"line":1161},[95,99020,98298],{"class":105},[95,99022,151],{"class":101},[95,99024,92979],{"class":105},[95,99026,443],{"class":154},[95,99028,484],{"class":105},[95,99030,98309],{"class":154},[95,99032,92984],{"class":105},[95,99034,183],{"class":154},[95,99036,484],{"class":105},[95,99038,177],{"class":154},[95,99040,484],{"class":105},[95,99042,450],{"class":154},[95,99044,112],{"class":105},[95,99046,99047],{"class":97,"line":1176},[95,99048,99049],{"class":164},"#使用dstack\n",[95,99051,99052],{"class":97,"line":1182},[95,99053,99054],{"class":105},"np.dstack((aaa,bbb)).shape\n",[95,99056,99057],{"class":97,"line":1196},[95,99058,99059],{"class":164},"#结果：（2，3，12）\n",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99075,"title":99076,"body":99077,"description":23360,"extension":18,"meta":99352,"navigation":21,"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],[33,99080,99076],{"id":99081},"_7数组转置",[10,99083,99084],{},"使用transpose()函数",[86,99086,99088],{"className":30363,"code":99087,"language":30365,"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",[92,99089,99090,99100,99124,99129,99134,99139,99144,99152,99156,99160,99165,99170,99175],{"__ignoreMap":14},[95,99091,99092,99094,99096,99098],{"class":97,"line":98},[95,99093,30377],{"class":101},[95,99095,31365],{"class":105},[95,99097,31368],{"class":101},[95,99099,31371],{"class":105},[95,99101,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120,99122],{"class":97,"line":15},[95,99103,344],{"class":105},[95,99105,151],{"class":101},[95,99107,31702],{"class":105},[95,99109,323],{"class":154},[95,99111,484],{"class":105},[95,99113,629],{"class":154},[95,99115,92984],{"class":105},[95,99117,399],{"class":154},[95,99119,484],{"class":105},[95,99121,177],{"class":154},[95,99123,112],{"class":105},[95,99125,99126],{"class":97,"line":1161},[95,99127,99128],{"class":164},"#二维数组转置\n",[95,99130,99131],{"class":97,"line":1176},[95,99132,99133],{"class":164},"#调用transpose()函数\n",[95,99135,99136],{"class":97,"line":1182},[95,99137,99138],{"class":105},"a.transpose()\n",[95,99140,99141],{"class":97,"line":1196},[95,99142,99143],{"class":164},"#对于二维数组也可以采用.T来实现\n",[95,99145,99146,99149],{"class":97,"line":1202},[95,99147,99148],{"class":105},"a.T",[95,99150,99151],{"class":164},"#与上述代码一样\n",[95,99153,99154],{"class":97,"line":1293},[95,99155,93541],{"class":164},[95,99157,99158],{"class":97,"line":1299},[95,99159,93905],{"class":210},[95,99161,99162],{"class":97,"line":1311},[95,99163,99164],{"class":210},"array([[ 1,  4,  7, 10],\n",[95,99166,99167],{"class":97,"line":1594},[95,99168,99169],{"class":210},"       [ 2,  5,  8, 11],\n",[95,99171,99172],{"class":97,"line":1599},[95,99173,99174],{"class":210},"       [ 3,  6,  9, 12]])\n",[95,99176,99177],{"class":97,"line":1605},[95,99178,93905],{"class":210},[10,99180,99181],{},"也可以使用np.transpose()的形式",[10,99183,99184],{},"#多维数组进行转置 np.transpose()",[10,99186,99187],{},"#对二维数组也可以使用np.transpose()进行转置",[10,99189,99190],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[10,99192,99193],{},"第二个参数，维度可以理解为用axis中的数来理解",[10,99195,99196],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[10,99198,99199],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[10,99201,99202],{},"四维及以上的数组也是一样的道理",[86,99204,99206],{"className":30363,"code":99205,"language":30365,"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",[92,99207,99208,99236,99241,99246,99251,99269,99274,99306,99311,99316,99321,99342],{"__ignoreMap":14},[95,99209,99210,99212,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234],{"class":97,"line":98},[95,99211,926],{"class":105},[95,99213,151],{"class":101},[95,99215,92979],{"class":105},[95,99217,323],{"class":154},[95,99219,484],{"class":105},[95,99221,431],{"class":154},[95,99223,92984],{"class":105},[95,99225,177],{"class":154},[95,99227,484],{"class":105},[95,99229,450],{"class":154},[95,99231,484],{"class":105},[95,99233,183],{"class":154},[95,99235,112],{"class":105},[95,99237,99238],{"class":97,"line":15},[95,99239,99240],{"class":105},"x.shape\n",[95,99242,99243],{"class":97,"line":1161},[95,99244,99245],{"class":164},"#结果：（3,6,2）\n",[95,99247,99248],{"class":97,"line":1176},[95,99249,99250],{"class":164},"#使用np.transpose()进行转置 变为(2,6,3)\n",[95,99252,99253,99256,99258,99260,99262,99264,99266],{"class":97,"line":1182},[95,99254,99255],{"class":105},"np.transpose(x,(",[95,99257,183],{"class":154},[95,99259,484],{"class":105},[95,99261,323],{"class":154},[95,99263,484],{"class":105},[95,99265,297],{"class":154},[95,99267,99268],{"class":105},")).shape\n",[95,99270,99271],{"class":97,"line":1196},[95,99272,99273],{"class":164},"#结果：(2,6,3)\n",[95,99275,99276,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304],{"class":97,"line":1202},[95,99277,98483],{"class":105},[95,99279,151],{"class":101},[95,99281,92979],{"class":105},[95,99283,323],{"class":154},[95,99285,484],{"class":105},[95,99287,431],{"class":154},[95,99289,92984],{"class":105},[95,99291,177],{"class":154},[95,99293,484],{"class":105},[95,99295,183],{"class":154},[95,99297,484],{"class":105},[95,99299,323],{"class":154},[95,99301,484],{"class":105},[95,99303,450],{"class":154},[95,99305,112],{"class":105},[95,99307,99308],{"class":97,"line":1293},[95,99309,99310],{"class":105},"aaaa.shape\n",[95,99312,99313],{"class":97,"line":1299},[95,99314,99315],{"class":164},"#结果：（3，2，1，6）\n",[95,99317,99318],{"class":97,"line":1311},[95,99319,99320],{"class":164},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[95,99322,99323,99326,99328,99330,99332,99334,99336,99338,99340],{"class":97,"line":1594},[95,99324,99325],{"class":105},"np.transpose(aaaa,(",[95,99327,323],{"class":154},[95,99329,484],{"class":105},[95,99331,183],{"class":154},[95,99333,484],{"class":105},[95,99335,297],{"class":154},[95,99337,484],{"class":105},[95,99339,177],{"class":154},[95,99341,99268],{"class":105},[95,99343,99344],{"class":97,"line":1599},[95,99345,99346],{"class":164},"#结果：(2,1,3,6)\n",[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99358,"title":99359,"body":99360,"description":23360,"extension":18,"meta":100094,"navigation":21,"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],[33,99363,99359],{"id":99364},"_8数组分割",[10,99366,99367],{},"split分割",[10,99369,99370],{},"numpy.split(ary,indics_or_sections,axis)",[10,99372,99373],{},"解释：",[10,99375,99376],{},"ary:被分割的数组",[10,99378,99379],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[10,99381,99382],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[10,99384,99385],{},"①一维数组的分割",[86,99387,99389],{"className":30363,"code":99388,"language":30365,"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",[92,99390,99391,99407,99412,99421,99425,99430,99438,99442,99447,99452,99465,99469,99474,99486,99490],{"__ignoreMap":14},[95,99392,99393,99395,99397,99399,99401,99403,99405],{"class":97,"line":98},[95,99394,344],{"class":105},[95,99396,151],{"class":101},[95,99398,92979],{"class":105},[95,99400,323],{"class":154},[95,99402,484],{"class":105},[95,99404,526],{"class":154},[95,99406,112],{"class":105},[95,99408,99409],{"class":97,"line":15},[95,99410,99411],{"class":164},"#如果传入整数，必须能够平分，否则会报错\n",[95,99413,99414,99417,99419],{"class":97,"line":1161},[95,99415,99416],{"class":105},"np.split(a,",[95,99418,183],{"class":154},[95,99420,112],{"class":105},[95,99422,99423],{"class":97,"line":1176},[95,99424,93541],{"class":164},[95,99426,99427],{"class":97,"line":1182},[95,99428,99429],{"class":164},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[95,99431,99432,99434,99436],{"class":97,"line":1196},[95,99433,99416],{"class":105},[95,99435,399],{"class":154},[95,99437,112],{"class":105},[95,99439,99440],{"class":97,"line":1202},[95,99441,93541],{"class":164},[95,99443,99444],{"class":97,"line":1293},[95,99445,99446],{"class":164},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[95,99448,99449],{"class":97,"line":1299},[95,99450,99451],{"class":164},"#传入数组\n",[95,99453,99454,99457,99459,99461,99463],{"class":97,"line":1311},[95,99455,99456],{"class":105},"np.split(a,[",[95,99458,177],{"class":154},[95,99460,484],{"class":105},[95,99462,425],{"class":154},[95,99464,4639],{"class":105},[95,99466,99467],{"class":97,"line":1594},[95,99468,93541],{"class":164},[95,99470,99471],{"class":97,"line":1599},[95,99472,99473],{"class":164},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[95,99475,99476,99478,99480,99482,99484],{"class":97,"line":1605},[95,99477,99456],{"class":105},[95,99479,425],{"class":154},[95,99481,484],{"class":105},[95,99483,475],{"class":154},[95,99485,4639],{"class":105},[95,99487,99488],{"class":97,"line":1610},[95,99489,93541],{"class":164},[95,99491,99492],{"class":97,"line":1624},[95,99493,99494],{"class":164},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[10,99496,99497],{},"②二维数组的分割",[10,99499,99500],{},"使用split()",[86,99502,99504],{"className":30363,"code":99503,"language":30365,"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",[92,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},[95,99507,99508],{"class":97,"line":98},[95,99509,99510],{"class":164},"#二维数组分割\n",[95,99512,99513,99515,99517,99519,99521,99523,99525,99527,99529,99531,99533],{"class":97,"line":15},[95,99514,93283],{"class":105},[95,99516,151],{"class":101},[95,99518,92979],{"class":105},[95,99520,323],{"class":154},[95,99522,484],{"class":105},[95,99524,431],{"class":154},[95,99526,92984],{"class":105},[95,99528,450],{"class":154},[95,99530,484],{"class":105},[95,99532,450],{"class":154},[95,99534,112],{"class":105},[95,99536,99537],{"class":97,"line":1161},[95,99538,99539],{"class":164},"#默认axis=0  传入整数平均分,按行来的\n",[95,99541,99542,99545,99547],{"class":97,"line":1176},[95,99543,99544],{"class":105},"np.split(aa,",[95,99546,177],{"class":154},[95,99548,112],{"class":105},[95,99550,99551],{"class":97,"line":1182},[95,99552,95741],{"class":164},[95,99554,99555],{"class":97,"line":1196},[95,99556,93905],{"class":210},[95,99558,99559],{"class":97,"line":1202},[95,99560,99561],{"class":210},"[array([[ 1,  2,  3,  4,  5,  6],\n",[95,99563,99564],{"class":97,"line":1293},[95,99565,99566],{"class":210},"        [ 7,  8,  9, 10, 11, 12]]),\n",[95,99568,99569],{"class":97,"line":1299},[95,99570,99571],{"class":210}," array([[13, 14, 15, 16, 17, 18],\n",[95,99573,99574],{"class":97,"line":1311},[95,99575,99576],{"class":210},"        [19, 20, 21, 22, 23, 24]]),\n",[95,99578,99579],{"class":97,"line":1594},[95,99580,99581],{"class":210}," array([[25, 26, 27, 28, 29, 30],\n",[95,99583,99584],{"class":97,"line":1599},[95,99585,99586],{"class":210},"        [31, 32, 33, 34, 35, 36]])]\n",[95,99588,99589],{"class":97,"line":1605},[95,99590,99591],{"class":210}," '''\n",[95,99593,99594],{"class":97,"line":1610},[95,99595,99451],{"class":164},[95,99597,99598,99601,99603,99605,99607],{"class":97,"line":1624},[95,99599,99600],{"class":105},"np.split(aa,[",[95,99602,183],{"class":154},[95,99604,484],{"class":105},[95,99606,425],{"class":154},[95,99608,4639],{"class":105},[95,99610,99611],{"class":97,"line":1629},[95,99612,95741],{"class":164},[95,99614,99615],{"class":97,"line":1635},[95,99616,93905],{"class":210},[95,99618,99619],{"class":97,"line":1656},[95,99620,99561],{"class":210},[95,99622,99623],{"class":97,"line":1661},[95,99624,99566],{"class":210},[95,99626,99627],{"class":97,"line":1675},[95,99628,99571],{"class":210},[95,99630,99631],{"class":97,"line":1680},[95,99632,99633],{"class":210},"        [19, 20, 21, 22, 23, 24],\n",[95,99635,99636],{"class":97,"line":1709},[95,99637,99638],{"class":210},"        [25, 26, 27, 28, 29, 30]]),\n",[95,99640,99641],{"class":97,"line":1714},[95,99642,99643],{"class":210}," array([[31, 32, 33, 34, 35, 36]])]\n",[95,99645,99646],{"class":97,"line":1731},[95,99647,93905],{"class":210},[95,99649,99650],{"class":97,"line":1736},[95,99651,99652],{"class":164},"#axis=1 按照列来分\n",[95,99654,99655,99657,99659,99661,99663,99665,99667],{"class":97,"line":1741},[95,99656,99544],{"class":105},[95,99658,177],{"class":154},[95,99660,484],{"class":105},[95,99662,47499],{"class":5199},[95,99664,151],{"class":101},[95,99666,323],{"class":154},[95,99668,112],{"class":105},[95,99670,99671],{"class":97,"line":1746},[95,99672,95741],{"class":164},[95,99674,99675],{"class":97,"line":1760},[95,99676,93905],{"class":210},[95,99678,99679],{"class":97,"line":1765},[95,99680,99681],{"class":210},"[array([[ 1,  2],\n",[95,99683,99684],{"class":97,"line":2559},[95,99685,99686],{"class":210},"        [ 7,  8],\n",[95,99688,99689],{"class":97,"line":2573},[95,99690,99691],{"class":210},"        [13, 14],\n",[95,99693,99694],{"class":97,"line":2581},[95,99695,99696],{"class":210},"        [19, 20],\n",[95,99698,99699],{"class":97,"line":2586},[95,99700,99701],{"class":210},"        [25, 26],\n",[95,99703,99704],{"class":97,"line":2592},[95,99705,99706],{"class":210},"        [31, 32]]),\n",[95,99708,99709],{"class":97,"line":2598},[95,99710,99711],{"class":210}," array([[ 3,  4],\n",[95,99713,99714],{"class":97,"line":2603},[95,99715,99716],{"class":210},"        [ 9, 10],\n",[95,99718,99719],{"class":97,"line":7931},[95,99720,99721],{"class":210},"        [15, 16],\n",[95,99723,99724],{"class":97,"line":7955},[95,99725,99726],{"class":210},"        [21, 22],\n",[95,99728,99729],{"class":97,"line":7960},[95,99730,99731],{"class":210},"        [27, 28],\n",[95,99733,99734],{"class":97,"line":7966},[95,99735,99736],{"class":210},"        [33, 34]]),\n",[95,99738,99739],{"class":97,"line":7993},[95,99740,99741],{"class":210}," array([[ 5,  6],\n",[95,99743,99744],{"class":97,"line":7998},[95,99745,99746],{"class":210},"        [11, 12],\n",[95,99748,99749],{"class":97,"line":8004},[95,99750,99751],{"class":210},"        [17, 18],\n",[95,99753,99754],{"class":97,"line":8016},[95,99755,99756],{"class":210},"        [23, 24],\n",[95,99758,99759],{"class":97,"line":8028},[95,99760,99761],{"class":210},"        [29, 30],\n",[95,99763,99764],{"class":97,"line":8040},[95,99765,99766],{"class":210},"        [35, 36]])]\n",[95,99768,99769],{"class":97,"line":9699},[95,99770,99591],{"class":210},[95,99772,99773],{"class":97,"line":9724},[95,99774,99451],{"class":164},[95,99776,99777,99779,99781,99783,99785,99787,99789,99791,99793],{"class":97,"line":9747},[95,99778,99600],{"class":105},[95,99780,323],{"class":154},[95,99782,484],{"class":105},[95,99784,183],{"class":154},[95,99786,41594],{"class":105},[95,99788,47499],{"class":5199},[95,99790,151],{"class":101},[95,99792,323],{"class":154},[95,99794,112],{"class":105},[95,99796,99797],{"class":97,"line":9771},[95,99798,93541],{"class":164},[95,99800,99801],{"class":97,"line":9776},[95,99802,93905],{"class":210},[95,99804,99805],{"class":97,"line":9781},[95,99806,99807],{"class":210},"[array([[ 1],\n",[95,99809,99810],{"class":97,"line":9786},[95,99811,99812],{"class":210},"        [ 7],\n",[95,99814,99815],{"class":97,"line":9795},[95,99816,99817],{"class":210},"        [13],\n",[95,99819,99820],{"class":97,"line":9800},[95,99821,99822],{"class":210},"        [19],\n",[95,99824,99825],{"class":97,"line":9806},[95,99826,99827],{"class":210},"        [25],\n",[95,99829,99830],{"class":97,"line":9827},[95,99831,99832],{"class":210},"        [31]]),\n",[95,99834,99835],{"class":97,"line":9833},[95,99836,99837],{"class":210}," array([[ 2],\n",[95,99839,99840],{"class":97,"line":9847},[95,99841,99842],{"class":210},"        [ 8],\n",[95,99844,99845],{"class":97,"line":9853},[95,99846,99847],{"class":210},"        [14],\n",[95,99849,99850],{"class":97,"line":9880},[95,99851,99852],{"class":210},"        [20],\n",[95,99854,99855],{"class":97,"line":9889},[95,99856,99857],{"class":210},"        [26],\n",[95,99859,99860],{"class":97,"line":9895},[95,99861,99862],{"class":210},"        [32]]),\n",[95,99864,99865],{"class":97,"line":9903},[95,99866,99867],{"class":210}," array([[ 3,  4,  5,  6],\n",[95,99869,99870],{"class":97,"line":9908},[95,99871,99872],{"class":210},"        [ 9, 10, 11, 12],\n",[95,99874,99875],{"class":97,"line":16587},[95,99876,99877],{"class":210},"        [15, 16, 17, 18],\n",[95,99879,99880],{"class":97,"line":16593},[95,99881,99882],{"class":210},"        [21, 22, 23, 24],\n",[95,99884,99885],{"class":97,"line":16616},[95,99886,99887],{"class":210},"        [27, 28, 29, 30],\n",[95,99889,99890],{"class":97,"line":16622},[95,99891,99892],{"class":210},"        [33, 34, 35, 36]])]\n",[95,99894,99895],{"class":97,"line":16645},[95,99896,93905],{"class":210},[95,99898,99899],{"class":97,"line":16659},[95,99900,99901],{"class":164},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[95,99903,99904,99907,99909],{"class":97,"line":16679},[95,99905,99906],{"class":105},"np.vsplit(aa,",[95,99908,177],{"class":154},[95,99910,112],{"class":105},[95,99912,99913],{"class":97,"line":16685},[95,99914,93541],{"class":164},[95,99916,99917],{"class":97,"line":16696},[95,99918,93905],{"class":210},[95,99920,99921],{"class":97,"line":16719},[95,99922,99561],{"class":210},[95,99924,99925],{"class":97,"line":16741},[95,99926,99566],{"class":210},[95,99928,99929],{"class":97,"line":16746},[95,99930,99571],{"class":210},[95,99932,99933],{"class":97,"line":16752},[95,99934,99576],{"class":210},[95,99936,99937],{"class":97,"line":16766},[95,99938,99581],{"class":210},[95,99940,99941],{"class":97,"line":16779},[95,99942,99586],{"class":210},[95,99944,99945],{"class":97,"line":16784},[95,99946,93905],{"class":210},[95,99948,99949,99952,99954],{"class":97,"line":16798},[95,99950,99951],{"class":105},"np.hsplit(aa,",[95,99953,177],{"class":154},[95,99955,112],{"class":105},[95,99957,99958],{"class":97,"line":16803},[95,99959,93541],{"class":164},[95,99961,99962],{"class":97,"line":16809},[95,99963,93905],{"class":210},[95,99965,99966],{"class":97,"line":16814},[95,99967,99681],{"class":210},[95,99969,99970],{"class":97,"line":16828},[95,99971,99686],{"class":210},[95,99973,99974],{"class":97,"line":16833},[95,99975,99691],{"class":210},[95,99977,99978],{"class":97,"line":16838},[95,99979,99696],{"class":210},[95,99981,99982],{"class":97,"line":16852},[95,99983,99701],{"class":210},[95,99985,99986],{"class":97,"line":16864},[95,99987,99706],{"class":210},[95,99989,99990],{"class":97,"line":16869},[95,99991,99711],{"class":210},[95,99993,99994],{"class":97,"line":16882},[95,99995,99716],{"class":210},[95,99997,99998],{"class":97,"line":16887},[95,99999,99721],{"class":210},[95,100001,100002],{"class":97,"line":16892},[95,100003,99726],{"class":210},[95,100005,100006],{"class":97,"line":16897},[95,100007,99731],{"class":210},[95,100009,100010],{"class":97,"line":16910},[95,100011,99736],{"class":210},[95,100013,100014],{"class":97,"line":16915},[95,100015,99741],{"class":210},[95,100017,100018],{"class":97,"line":32618},[95,100019,99746],{"class":210},[95,100021,100022],{"class":97,"line":32624},[95,100023,99751],{"class":210},[95,100025,100026],{"class":97,"line":32630},[95,100027,99756],{"class":210},[95,100029,100030],{"class":97,"line":32636},[95,100031,99761],{"class":210},[95,100033,100034],{"class":97,"line":32642},[95,100035,99766],{"class":210},[95,100037,100038],{"class":97,"line":32653},[95,100039,93905],{"class":210},[95,100041,100042,100045,100047,100049,100051],{"class":97,"line":32659},[95,100043,100044],{"class":105},"np.vsplit(aa,[",[95,100046,183],{"class":154},[95,100048,484],{"class":105},[95,100050,425],{"class":154},[95,100052,4639],{"class":105},[95,100054,100055],{"class":97,"line":32679},[95,100056,93541],{"class":164},[95,100058,100059],{"class":97,"line":32685},[95,100060,93905],{"class":210},[95,100062,100063],{"class":97,"line":32696},[95,100064,99561],{"class":210},[95,100066,100067],{"class":97,"line":32702},[95,100068,99566],{"class":210},[95,100070,100071],{"class":97,"line":32708},[95,100072,99571],{"class":210},[95,100074,100075],{"class":97,"line":32714},[95,100076,99633],{"class":210},[95,100078,100079],{"class":97,"line":32720},[95,100080,99638],{"class":210},[95,100082,100083],{"class":97,"line":32726},[95,100084,99643],{"class":210},[95,100086,100087],{"class":97,"line":32732},[95,100088,99591],{"class":210},[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100100,"title":100101,"body":100102,"description":23360,"extension":18,"meta":100596,"navigation":21,"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],[33,100105,100101],{"id":100106},"_9数学函数",[10,100108,100109],{},"补充回顾：python的列表推导式",[86,100111,100113],{"className":30363,"code":100112,"language":30365,"meta":14,"style":14},"[1\u002Fi for i in a]\n",[92,100114,100115],{"__ignoreMap":14},[95,100116,100117,100119,100121,100123,100126,100128,100130,100132],{"class":97,"line":98},[95,100118,996],{"class":105},[95,100120,323],{"class":154},[95,100122,690],{"class":101},[95,100124,100125],{"class":105},"i ",[95,100127,3007],{"class":101},[95,100129,9421],{"class":105},[95,100131,26028],{"class":101},[95,100133,100134],{"class":105}," a]\n",[37,100136,100138],{"id":100137},"_91-求倒数","9.1 求倒数",[86,100140,100142],{"className":30363,"code":100141,"language":30365,"meta":14,"style":14},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[92,100143,100144,100149,100177,100189],{"__ignoreMap":14},[95,100145,100146],{"class":97,"line":98},[95,100147,100148],{"class":164},"#数组求倒数\n",[95,100150,100151,100153,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175],{"class":97,"line":15},[95,100152,344],{"class":105},[95,100154,151],{"class":101},[95,100156,996],{"class":105},[95,100158,323],{"class":154},[95,100160,484],{"class":105},[95,100162,183],{"class":154},[95,100164,484],{"class":105},[95,100166,177],{"class":154},[95,100168,484],{"class":105},[95,100170,399],{"class":154},[95,100172,484],{"class":105},[95,100174,425],{"class":154},[95,100176,33231],{"class":105},[95,100178,100179,100181,100183,100186],{"class":97,"line":1161},[95,100180,369],{"class":105},[95,100182,151],{"class":101},[95,100184,100185],{"class":105},"np.array(a)",[95,100187,100188],{"class":164},"#将列表转换为数组\n",[95,100190,100191,100193,100195],{"class":97,"line":1176},[95,100192,323],{"class":154},[95,100194,690],{"class":101},[95,100196,100197],{"class":105},"b\n",[86,100199,100201],{"className":30363,"code":100200,"language":30365,"meta":14,"style":14},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[92,100202,100203,100231,100240,100245],{"__ignoreMap":14},[95,100204,100205,100207,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227,100229],{"class":97,"line":98},[95,100206,344],{"class":105},[95,100208,151],{"class":101},[95,100210,996],{"class":105},[95,100212,323],{"class":154},[95,100214,484],{"class":105},[95,100216,183],{"class":154},[95,100218,484],{"class":105},[95,100220,177],{"class":154},[95,100222,484],{"class":105},[95,100224,399],{"class":154},[95,100226,484],{"class":105},[95,100228,425],{"class":154},[95,100230,33231],{"class":105},[95,100232,100233,100235,100237],{"class":97,"line":15},[95,100234,369],{"class":105},[95,100236,151],{"class":101},[95,100238,100239],{"class":105},"np.array(a)\n",[95,100241,100242],{"class":97,"line":1161},[95,100243,100244],{"class":164},"#调用numpy中的函数reciprocal()\n",[95,100246,100247],{"class":97,"line":1176},[95,100248,100249],{"class":105},"np.reciprocal(b)\n",[37,100251,100253],{"id":100252},"_92-求平方","9.2 求平方",[10,100255,94507],{},[86,100257,100259],{"className":30363,"code":100258,"language":30365,"meta":14,"style":14},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[92,100260,100261,100266,100271,100287],{"__ignoreMap":14},[95,100262,100263],{"class":97,"line":98},[95,100264,100265],{"class":164},"#square()，求平方\n",[95,100267,100268],{"class":97,"line":15},[95,100269,100270],{"class":164},"#一维数组\n",[95,100272,100273,100275,100277,100279,100281,100283,100285],{"class":97,"line":1161},[95,100274,344],{"class":105},[95,100276,151],{"class":101},[95,100278,92979],{"class":105},[95,100280,323],{"class":154},[95,100282,484],{"class":105},[95,100284,552],{"class":154},[95,100286,112],{"class":105},[95,100288,100289],{"class":97,"line":1176},[95,100290,100291],{"class":105},"np.square(a)\n",[86,100293,100295],{"className":30363,"code":100294,"language":30365,"meta":14,"style":14},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[92,100296,100297,100302,100307,100328],{"__ignoreMap":14},[95,100298,100299],{"class":97,"line":98},[95,100300,100301],{"class":164},"#或者通过循环遍历的形式来计算\n",[95,100303,100304],{"class":97,"line":15},[95,100305,100306],{"class":164},"#这是一个列表\n",[95,100308,100309,100312,100314,100316,100318,100320,100322,100325],{"class":97,"line":1161},[95,100310,100311],{"class":105},"[i",[95,100313,561],{"class":101},[95,100315,100125],{"class":105},[95,100317,3007],{"class":101},[95,100319,9421],{"class":105},[95,100321,26028],{"class":101},[95,100323,100324],{"class":105}," a]",[95,100326,100327],{"class":164},"#这个求完之后在数列当中\n",[95,100329,100330,100333,100335,100337,100339,100341,100343],{"class":97,"line":1176},[95,100331,100332],{"class":105},"np.array([i",[95,100334,561],{"class":101},[95,100336,100125],{"class":105},[95,100338,3007],{"class":101},[95,100340,9421],{"class":105},[95,100342,26028],{"class":101},[95,100344,100345],{"class":105}," a])\n",[10,100347,93268],{},[86,100349,100351],{"className":30363,"code":100350,"language":30365,"meta":14,"style":14},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[92,100352,100353,100357,100381],{"__ignoreMap":14},[95,100354,100355],{"class":97,"line":98},[95,100356,93278],{"class":164},[95,100358,100359,100361,100363,100365,100367,100369,100371,100373,100375,100377,100379],{"class":97,"line":15},[95,100360,93283],{"class":105},[95,100362,151],{"class":101},[95,100364,92979],{"class":105},[95,100366,323],{"class":154},[95,100368,484],{"class":105},[95,100370,629],{"class":154},[95,100372,92984],{"class":105},[95,100374,399],{"class":154},[95,100376,484],{"class":105},[95,100378,177],{"class":154},[95,100380,112],{"class":105},[95,100382,100383],{"class":97,"line":1161},[95,100384,100385],{"class":105},"np.square(aa)\n",[86,100387,100389],{"className":30363,"code":100388,"language":30365,"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",[92,100390,100391,100396,100405,100421,100437,100452],{"__ignoreMap":14},[95,100392,100393],{"class":97,"line":98},[95,100394,100395],{"class":164},"#传统的方式\n",[95,100397,100398,100400,100402],{"class":97,"line":15},[95,100399,98164],{"class":105},[95,100401,151],{"class":101},[95,100403,100404],{"class":105},"np.empty_like(aa)\n",[95,100406,100407,100409,100411,100413,100415,100417,100419],{"class":97,"line":1161},[95,100408,3007],{"class":101},[95,100410,9421],{"class":105},[95,100412,26028],{"class":101},[95,100414,32428],{"class":154},[95,100416,106],{"class":105},[95,100418,399],{"class":154},[95,100420,30771],{"class":105},[95,100422,100423,100425,100427,100429,100431,100433,100435],{"class":97,"line":1176},[95,100424,3183],{"class":101},[95,100426,9483],{"class":105},[95,100428,26028],{"class":101},[95,100430,32428],{"class":154},[95,100432,106],{"class":105},[95,100434,177],{"class":154},[95,100436,30771],{"class":105},[95,100438,100439,100442,100444,100447,100449],{"class":97,"line":1182},[95,100440,100441],{"class":105},"        bb[i,j]",[95,100443,151],{"class":101},[95,100445,100446],{"class":105},"aa[i,j]",[95,100448,561],{"class":101},[95,100450,100451],{"class":105},"aa[i,j]\n",[95,100453,100454],{"class":97,"line":1196},[95,100455,100456],{"class":105},"bb\n",[37,100458,100460],{"id":100459},"_93-求各元素的符号","9.3 求各元素的符号",[10,100462,100463],{},[1444,100464],{"alt":14,"src":100465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[37,100467,100469],{"id":100468},"_94-modf函数","9.4 modf函数",[10,100471,100472],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[86,100474,100476],{"className":30363,"code":100475,"language":30365,"meta":14,"style":14},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[92,100477,100478,100501],{"__ignoreMap":14},[95,100479,100480,100482,100484,100486,100488,100490,100492,100494,100496,100499],{"class":97,"line":98},[95,100481,344],{"class":105},[95,100483,151],{"class":101},[95,100485,92979],{"class":105},[95,100487,638],{"class":101},[95,100489,552],{"class":154},[95,100491,484],{"class":105},[95,100493,552],{"class":154},[95,100495,484],{"class":105},[95,100497,100498],{"class":154},"0.3",[95,100500,112],{"class":105},[95,100502,100503],{"class":97,"line":15},[95,100504,100505],{"class":105},"np.modf(a)\n",[10,100507,100508],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[37,100510,100512],{"id":100511},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[10,100514,100515],{},"np.cell()",[10,100517,100518],{},"np.floor()",[10,100520,100521],{},"np.rint()",[10,100523,100524],{},"对各元素分别向上取整、向下取整、四舍五入",[10,100526,100527],{},[1444,100528],{"alt":14,"src":100529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[37,100531,100533],{"id":100532},"_96-around函数","9.6 around()函数",[10,100535,100536],{},"around()函数也可以实现对数的小数位数进行操作",[10,100538,100539],{},"其中的参数：",[10,100541,100542],{},"1.要传的数组",[10,100544,100545],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[10,100547,100548],{},[1444,100549],{"alt":14,"src":100550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[37,100552,100554],{"id":100553},"_97-三角函数","9.7 三角函数",[10,100556,100557],{},[1444,100558],{"alt":14,"src":100559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[10,100561,100562],{},"引入图像模块非常重要",[86,100564,100566],{"className":30363,"code":100565,"language":30365,"meta":14,"style":14},"from matplotlib import pyplot as plt\n",[92,100567,100568],{"__ignoreMap":14},[95,100569,100570,100572,100575,100577,100580,100582],{"class":97,"line":98},[95,100571,30722],{"class":101},[95,100573,100574],{"class":105}," matplotlib ",[95,100576,30377],{"class":101},[95,100578,100579],{"class":105}," pyplot ",[95,100581,31368],{"class":101},[95,100583,31422],{"class":105},[5109,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":23360},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100602,"title":100603,"body":100604,"description":23360,"extension":18,"meta":100608,"navigation":21,"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":20},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100603,"description":23360},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100614,"title":100615,"body":100616,"description":14,"extension":18,"meta":102624,"navigation":21,"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],[33,100619,100615],{"id":100620},"_1环境安装与第一个-mujoco-程序",[37,100622,100624],{"id":100623},"_1目标说明","1.目标说明",[10,100626,100627],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[10,100629,100630],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[86,100632,100635],{"className":100633,"code":100634,"language":5170,"meta":14},[5168],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[92,100636,100634],{"__ignoreMap":14},[10,100638,100639],{},"需要掌握:",[49,100641,100642,100645,100648,100653,100658],{},[52,100643,100644],{},"Fedora 44 下 MuJoCo 的系统依赖",[52,100646,100647],{},"Python 虚拟环境创建",[52,100649,100650],{},[92,100651,100652],{},"mujoco.MjModel",[52,100654,100655],{},[92,100656,100657],{},"mujoco.MjData",[52,100659,100660],{},[92,100661,100662],{},"mujoco.mj_step(model, data)",[10,100664,100665],{},"MuJoCo 中最重要的两个对象:",[243,100667,100668,100678],{},[246,100669,100670],{},[249,100671,100672,100675],{},[252,100673,100674],{"align":23720},"对象",[252,100676,100677],{"align":23720},"含义",[290,100679,100680,100690],{},[249,100681,100682,100687],{},[295,100683,100684],{"align":23720},[92,100685,100686],{},"MjModel",[295,100688,100689],{"align":23720},"模型结构，来自 XML，基本不随时间变化",[249,100691,100692,100697],{},[295,100693,100694],{"align":23720},[92,100695,100696],{},"MjData",[295,100698,100699],{"align":23720},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[10,100701,100702],{},"可以先用一个类比理解：",[243,100704,100705,100715],{},[246,100706,100707],{},[249,100708,100709,100712],{},[252,100710,100711],{"align":23720},"类比",[252,100713,100714],{"align":23720},"MuJoCo 对象",[290,100716,100717,100726,100735],{},[249,100718,100719,100722],{},[295,100720,100721],{"align":23720},"游戏地图和角色配置",[295,100723,100724],{"align":23720},[92,100725,100686],{},[249,100727,100728,100731],{},[295,100729,100730],{"align":23720},"游戏运行到当前帧的状态",[295,100732,100733],{"align":23720},[92,100734,100696],{},[249,100736,100737,100740],{},[295,100738,100739],{"align":23720},"前进一帧",[295,100741,100742],{"align":23720},[92,100743,100662],{},[37,100745,100747],{"id":100746},"_2环境与依赖安装","2.环境与依赖安装",[10,100749,100750],{},"Fedora 44 系统依赖:",[86,100752,100754],{"className":23806,"code":100753,"language":23808,"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",[92,100755,100756,100768,100781,100794,100804,100814,100833],{"__ignoreMap":14},[95,100757,100758,100760,100762,100764,100766],{"class":97,"line":98},[95,100759,24561],{"class":1945},[95,100761,26300],{"class":210},[95,100763,23818],{"class":210},[95,100765,26385],{"class":154},[95,100767,24663],{"class":154},[95,100769,100770,100773,100776,100779],{"class":97,"line":15},[95,100771,100772],{"class":210},"  python3",[95,100774,100775],{"class":210}," python3-pip",[95,100777,100778],{"class":210}," python3-virtualenv",[95,100780,24663],{"class":154},[95,100782,100783,100786,100789,100792],{"class":97,"line":1161},[95,100784,100785],{"class":210},"  mesa-libGL",[95,100787,100788],{"class":210}," mesa-libGLU",[95,100790,100791],{"class":210}," mesa-dri-drivers",[95,100793,24663],{"class":154},[95,100795,100796,100799,100802],{"class":97,"line":1176},[95,100797,100798],{"class":210},"  libglvnd-glx",[95,100800,100801],{"class":210}," libglvnd-opengl",[95,100803,24663],{"class":154},[95,100805,100806,100809,100812],{"class":97,"line":1182},[95,100807,100808],{"class":210},"  glfw",[95,100810,100811],{"class":210}," glfw-devel",[95,100813,24663],{"class":154},[95,100815,100816,100819,100822,100825,100828,100831],{"class":97,"line":1196},[95,100817,100818],{"class":210},"  libX11",[95,100820,100821],{"class":210}," libXcursor",[95,100823,100824],{"class":210}," libXi",[95,100826,100827],{"class":210}," libXinerama",[95,100829,100830],{"class":210}," libXrandr",[95,100832,24663],{"class":154},[95,100834,100835,100838,100841],{"class":97,"line":1202},[95,100836,100837],{"class":210},"  gcc",[95,100839,100840],{"class":210}," gcc-c++",[95,100842,100843],{"class":210}," make\n",[10,100845,100846],{},"创建 Python 环境:",[86,100848,100850],{"className":23806,"code":100849,"language":23808,"meta":14,"style":14},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[92,100851,100852,100866,100874],{"__ignoreMap":14},[95,100853,100854,100857,100860,100863],{"class":97,"line":98},[95,100855,100856],{"class":1945},"python3",[95,100858,100859],{"class":154}," -m",[95,100861,100862],{"class":210}," venv",[95,100864,100865],{"class":210}," .venv\n",[95,100867,100868,100871],{"class":97,"line":15},[95,100869,100870],{"class":154},"source",[95,100872,100873],{"class":210}," .venv\u002Fbin\u002Factivate\n",[95,100875,100876,100878,100880,100883,100885,100888],{"class":97,"line":1161},[95,100877,30365],{"class":1945},[95,100879,100859],{"class":154},[95,100881,100882],{"class":210}," pip",[95,100884,23818],{"class":210},[95,100886,100887],{"class":154}," --upgrade",[95,100889,100890],{"class":210}," pip\n",[10,100892,100893],{},"pip 安装:",[86,100895,100897],{"className":23806,"code":100896,"language":23808,"meta":14,"style":14},"pip install \"mujoco>=2.3\" numpy\n",[92,100898,100899],{"__ignoreMap":14},[95,100900,100901,100903,100905,100908],{"class":97,"line":98},[95,100902,23815],{"class":1945},[95,100904,23818],{"class":210},[95,100906,100907],{"class":210}," \"mujoco>=2.3\"",[95,100909,100910],{"class":210}," numpy\n",[10,100912,100913],{},"安装完成后，先做最小检查：",[86,100915,100917],{"className":23806,"code":100916,"language":23808,"meta":14,"style":14},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[92,100918,100919],{"__ignoreMap":14},[95,100920,100921,100923,100925],{"class":97,"line":98},[95,100922,30365],{"class":1945},[95,100924,30343],{"class":154},[95,100926,100927],{"class":210}," \"import mujoco; print(mujoco.__version__)\"\n",[10,100929,100930],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[10,100932,100933],{},"conda 安装:",[86,100935,100937],{"className":23806,"code":100936,"language":23808,"meta":14,"style":14},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[92,100938,100939,100959,100969],{"__ignoreMap":14},[95,100940,100941,100943,100945,100947,100950,100953,100956],{"class":97,"line":98},[95,100942,30315],{"class":1945},[95,100944,29161],{"class":210},[95,100946,25100],{"class":154},[95,100948,100949],{"class":210}," mujoco-study",[95,100951,100952],{"class":210}," python=",[95,100954,100955],{"class":154},"3.10",[95,100957,100958],{"class":154}," -y\n",[95,100960,100961,100963,100966],{"class":97,"line":15},[95,100962,30315],{"class":1945},[95,100964,100965],{"class":210}," activate",[95,100967,100968],{"class":210}," mujoco-study\n",[95,100970,100971,100973,100975,100977],{"class":97,"line":1161},[95,100972,23815],{"class":1945},[95,100974,23818],{"class":210},[95,100976,100907],{"class":210},[95,100978,100910],{"class":210},[10,100980,100981],{},"版本冲突说明:",[49,100983,100984,100990,101000,101009],{},[52,100985,100986,100987,28370],{},"不要安装 ",[92,100988,100989],{},"mujoco-py",[52,100991,100992,100993,100995,100996,100999],{},"如果旧项目里同时安装了 ",[92,100994,100989],{}," 和 ",[92,100997,100998],{},"mujoco","，建议新建干净虚拟环境。",[52,101001,101002,101005,101006,28370],{},[92,101003,101004],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[92,101007,101008],{},"~\u002F.mujoco\u002Fmujoco210",[52,101010,101011,101012,82516,101015,101018],{},"离屏渲染可能涉及 OpenGL 后端，",[92,101013,101014],{},"MUJOCO_GL=egl",[92,101016,101017],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[37,101020,101022],{"id":101021},"_3核心概念解释","3.核心概念解释",[10,101024,101025],{},"MuJoCo 的基本执行流程:",[86,101027,101030],{"className":101028,"code":101029,"language":5170,"meta":14},[5168],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[92,101031,101029],{"__ignoreMap":14},[10,101033,101034,101036],{},[92,101035,100686],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[10,101038,101039,101041,101042,318,101045,318,101048,318,101051,318,101054,28370],{},[92,101040,100696],{}," 存放仿真运行时状态，例如 ",[92,101043,101044],{},"data.time",[92,101046,101047],{},"data.qpos",[92,101049,101050],{},"data.qvel",[92,101052,101053],{},"data.ctrl",[92,101055,101056],{},"data.xpos",[66,101058,101060],{"id":101059},"xml-是什么","XML 是什么",[10,101062,101063],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[86,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",[92,101068,101069,101091,101122],{"__ignoreMap":14},[95,101070,101071,101073,101075,101077,101079,101081,101084,101086,101089],{"class":97,"line":98},[95,101072,1016],{"class":105},[95,101074,51777],{"class":51277},[95,101076,14903],{"class":1945},[95,101078,151],{"class":105},[95,101080,53468],{"class":210},[95,101082,101083],{"class":1945}," pos",[95,101085,151],{"class":105},[95,101087,101088],{"class":210},"\"0 0 1\"",[95,101090,51284],{"class":105},[95,101092,101093,101095,101098,101100,101102,101105,101107,101109,101111,101114,101116,101119],{"class":97,"line":15},[95,101094,52121],{"class":105},[95,101096,101097],{"class":51277},"geom",[95,101099,14903],{"class":1945},[95,101101,151],{"class":105},[95,101103,101104],{"class":210},"\"box_geom\"",[95,101106,53801],{"class":1945},[95,101108,151],{"class":105},[95,101110,53468],{"class":210},[95,101112,101113],{"class":1945}," size",[95,101115,151],{"class":105},[95,101117,101118],{"class":210},"\"0.1 0.1 0.1\"",[95,101120,101121],{"class":105},"\u002F>\n",[95,101123,101124,101126,101128],{"class":97,"line":1161},[95,101125,51762],{"class":105},[95,101127,51777],{"class":51277},[95,101129,51284],{"class":105},[10,101131,101132],{},"这段意思是：",[49,101134,101135,101141,101148],{},[52,101136,101137,101138,101140],{},"创建一个叫 ",[92,101139,53691],{}," 的刚体。",[52,101142,101143,101144,101147],{},"它初始放在 ",[92,101145,101146],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[52,101149,101150],{},"它里面有一个盒子形状的几何体。",[66,101152,101154],{"id":101153},"timestep-是什么","timestep 是什么",[10,101156,101157],{},"XML 里的：",[86,101159,101161],{"className":53044,"code":101160,"language":53046,"meta":14,"style":14},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[92,101162,101163],{"__ignoreMap":14},[95,101164,101165,101167,101169,101172,101174,101177,101180,101182,101185],{"class":97,"line":98},[95,101166,1016],{"class":105},[95,101168,69143],{"class":51277},[95,101170,101171],{"class":1945}," timestep",[95,101173,151],{"class":105},[95,101175,101176],{"class":210},"\"0.01\"",[95,101178,101179],{"class":1945}," gravity",[95,101181,151],{"class":105},[95,101183,101184],{"class":210},"\"0 0 -9.81\"",[95,101186,101121],{"class":105},[10,101188,101189,101190,101193,101194,101196],{},"表示每调用一次 ",[92,101191,101192],{},"mj_step","，仿真时间前进 ",[92,101195,38971],{}," 秒。循环 100 次，大约就是 1 秒：",[86,101198,101201],{"className":101199,"code":101200,"language":5170,"meta":14},[5168],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[92,101202,101200],{"__ignoreMap":14},[66,101204,101206],{"id":101205},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[10,101208,101209],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[86,101211,101214],{"className":101212,"code":101213,"language":5170,"meta":14},[5168],"x y z qw qx qy qz\n",[92,101215,101213],{"__ignoreMap":14},[10,101217,101218,101219,101222,101223,101226],{},"表示一个自由刚体的位置和姿态。其中 ",[92,101220,101221],{},"x y z"," 是位置，",[92,101224,101225],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[37,101228,101230],{"id":101229},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[10,101232,101233],{},"新建文件:",[86,101235,101237],{"className":23806,"code":101236,"language":23808,"meta":14,"style":14},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[92,101238,101239,101249,101256],{"__ignoreMap":14},[95,101240,101241,101244,101246],{"class":97,"line":98},[95,101242,101243],{"class":1945},"mkdir",[95,101245,29201],{"class":154},[95,101247,101248],{"class":210}," mujoco_tutorial\n",[95,101250,101251,101254],{"class":97,"line":15},[95,101252,101253],{"class":154},"cd",[95,101255,101248],{"class":210},[95,101257,101258,101261],{"class":97,"line":1161},[95,101259,101260],{"class":1945},"touch",[95,101262,101263],{"class":210}," ch1_first_sim.py\n",[10,101265,101266],{},"写入:",[86,101268,101270],{"className":30363,"code":101269,"language":30365,"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",[92,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},[95,101273,101274,101276],{"class":97,"line":98},[95,101275,30377],{"class":101},[95,101277,101278],{"class":105}," mujoco\n",[95,101280,101281],{"class":97,"line":15},[95,101282,2382],{"emptyLinePlaceholder":21},[95,101284,101285],{"class":97,"line":1161},[95,101286,2382],{"emptyLinePlaceholder":21},[95,101288,101289,101292,101294],{"class":97,"line":1176},[95,101290,101291],{"class":154},"XML",[95,101293,13547],{"class":101},[95,101295,101296],{"class":210}," \"\"\"\n",[95,101298,101299],{"class":97,"line":1182},[95,101300,101301],{"class":210},"\u003Cmujoco model=\"first_sim\">\n",[95,101303,101304],{"class":97,"line":1196},[95,101305,101306],{"class":210},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[95,101308,101309],{"class":97,"line":1202},[95,101310,2382],{"emptyLinePlaceholder":21},[95,101312,101313],{"class":97,"line":1293},[95,101314,101315],{"class":210},"  \u003Cworldbody>\n",[95,101317,101318],{"class":97,"line":1299},[95,101319,101320],{"class":210},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[95,101322,101323],{"class":97,"line":1311},[95,101324,2382],{"emptyLinePlaceholder":21},[95,101326,101327],{"class":97,"line":1594},[95,101328,101329],{"class":210},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[95,101331,101332],{"class":97,"line":1599},[95,101333,101334],{"class":210},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[95,101336,101337],{"class":97,"line":1605},[95,101338,101339],{"class":210},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[95,101341,101342],{"class":97,"line":1610},[95,101343,101344],{"class":210},"    \u003C\u002Fbody>\n",[95,101346,101347],{"class":97,"line":1624},[95,101348,101349],{"class":210},"  \u003C\u002Fworldbody>\n",[95,101351,101352],{"class":97,"line":1629},[95,101353,101354],{"class":210},"\u003C\u002Fmujoco>\n",[95,101356,101357],{"class":97,"line":1635},[95,101358,95675],{"class":210},[95,101360,101361],{"class":97,"line":1656},[95,101362,2382],{"emptyLinePlaceholder":21},[95,101364,101365],{"class":97,"line":1661},[95,101366,2382],{"emptyLinePlaceholder":21},[95,101368,101369,101371,101373,101376,101378],{"class":97,"line":1675},[95,101370,31932],{"class":101},[95,101372,1955],{"class":1945},[95,101374,101375],{"class":105},"() -> ",[95,101377,95663],{"class":154},[95,101379,3721],{"class":105},[95,101381,101382,101385,101387,101390,101392],{"class":97,"line":1680},[95,101383,101384],{"class":105},"    model ",[95,101386,151],{"class":101},[95,101388,101389],{"class":105}," mujoco.MjModel.from_xml_string(",[95,101391,101291],{"class":154},[95,101393,112],{"class":105},[95,101395,101396,101399,101401],{"class":97,"line":1709},[95,101397,101398],{"class":105},"    data ",[95,101400,151],{"class":101},[95,101402,101403],{"class":105}," mujoco.MjData(model)\n",[95,101405,101406],{"class":97,"line":1714},[95,101407,2382],{"emptyLinePlaceholder":21},[95,101409,101410,101412,101414,101417],{"class":97,"line":1731},[95,101411,31284],{"class":154},[95,101413,106],{"class":105},[95,101415,101416],{"class":210},"\"nq:\"",[95,101418,101419],{"class":105},", model.nq)\n",[95,101421,101422,101424,101426,101429],{"class":97,"line":1736},[95,101423,31284],{"class":154},[95,101425,106],{"class":105},[95,101427,101428],{"class":210},"\"nv:\"",[95,101430,101431],{"class":105},", model.nv)\n",[95,101433,101434,101436,101438,101441],{"class":97,"line":1741},[95,101435,31284],{"class":154},[95,101437,106],{"class":105},[95,101439,101440],{"class":210},"\"nu:\"",[95,101442,101443],{"class":105},", model.nu)\n",[95,101445,101446,101448,101450,101453],{"class":97,"line":1746},[95,101447,31284],{"class":154},[95,101449,106],{"class":105},[95,101451,101452],{"class":210},"\"initial time:\"",[95,101454,101455],{"class":105},", data.time)\n",[95,101457,101458,101460,101462,101465],{"class":97,"line":1760},[95,101459,31284],{"class":154},[95,101461,106],{"class":105},[95,101463,101464],{"class":210},"\"initial qpos:\"",[95,101466,101467],{"class":105},", data.qpos.copy())\n",[95,101469,101470],{"class":97,"line":1765},[95,101471,2382],{"emptyLinePlaceholder":21},[95,101473,101474,101476,101479,101481,101483,101485,101487],{"class":97,"line":2559},[95,101475,3183],{"class":101},[95,101477,101478],{"class":105}," _ ",[95,101480,26028],{"class":101},[95,101482,32428],{"class":154},[95,101484,106],{"class":105},[95,101486,417],{"class":154},[95,101488,30771],{"class":105},[95,101490,101491],{"class":97,"line":2573},[95,101492,101493],{"class":105},"        mujoco.mj_step(model, data)\n",[95,101495,101496],{"class":97,"line":2581},[95,101497,2382],{"emptyLinePlaceholder":21},[95,101499,101500,101502,101504,101507],{"class":97,"line":2586},[95,101501,31284],{"class":154},[95,101503,106],{"class":105},[95,101505,101506],{"class":210},"\"final time:\"",[95,101508,101455],{"class":105},[95,101510,101511,101513,101515,101518],{"class":97,"line":2592},[95,101512,31284],{"class":154},[95,101514,106],{"class":105},[95,101516,101517],{"class":210},"\"final qpos:\"",[95,101519,101467],{"class":105},[95,101521,101522],{"class":97,"line":2598},[95,101523,2382],{"emptyLinePlaceholder":21},[95,101525,101526],{"class":97,"line":2603},[95,101527,2382],{"emptyLinePlaceholder":21},[95,101529,101530,101532,101534,101537,101540],{"class":97,"line":7931},[95,101531,1513],{"class":101},[95,101533,31205],{"class":154},[95,101535,101536],{"class":101}," ==",[95,101538,101539],{"class":210}," \"__main__\"",[95,101541,3721],{"class":105},[95,101543,101544],{"class":97,"line":7955},[95,101545,101546],{"class":105},"    main()\n",[66,101548,101549],{"id":101549},"代码逐段解释",[10,101551,101552],{},"导入库：",[86,101554,101556],{"className":30363,"code":101555,"language":30365,"meta":14,"style":14},"import mujoco\n",[92,101557,101558],{"__ignoreMap":14},[95,101559,101560,101562],{"class":97,"line":98},[95,101561,30377],{"class":101},[95,101563,101278],{"class":105},[10,101565,101566],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[10,101568,101569],{},"定义 XML：",[86,101571,101573],{"className":30363,"code":101572,"language":30365,"meta":14,"style":14},"XML = \"\"\"\n...\n\"\"\"\n",[92,101574,101575,101583,101588],{"__ignoreMap":14},[95,101576,101577,101579,101581],{"class":97,"line":98},[95,101578,101291],{"class":154},[95,101580,13547],{"class":101},[95,101582,101296],{"class":210},[95,101584,101585],{"class":97,"line":15},[95,101586,101587],{"class":210},"...\n",[95,101589,101590],{"class":97,"line":1161},[95,101591,95675],{"class":210},[10,101593,101594,101595,101598],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[92,101596,101597],{},"freejoint"," 的方块。",[10,101600,101601],{},"编译模型：",[86,101603,101605],{"className":30363,"code":101604,"language":30365,"meta":14,"style":14},"model = mujoco.MjModel.from_xml_string(XML)\n",[92,101606,101607],{"__ignoreMap":14},[95,101608,101609,101612,101614,101616,101618],{"class":97,"line":98},[95,101610,101611],{"class":105},"model ",[95,101613,151],{"class":101},[95,101615,101389],{"class":105},[95,101617,101291],{"class":154},[95,101619,112],{"class":105},[10,101621,101622],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[10,101624,101625],{},"创建数据：",[86,101627,101629],{"className":30363,"code":101628,"language":30365,"meta":14,"style":14},"data = mujoco.MjData(model)\n",[92,101630,101631],{"__ignoreMap":14},[95,101632,101633,101636,101638],{"class":97,"line":98},[95,101634,101635],{"class":105},"data ",[95,101637,151],{"class":101},[95,101639,101403],{"class":105},[10,101641,101642,101644,101645,101647],{},[92,101643,33386],{}," 会保存仿真当前状态。刚创建时，时间是 ",[92,101646,297],{},"，方块还在初始位置。",[10,101649,101650],{},"推进仿真：",[86,101652,101654],{"className":30363,"code":101653,"language":30365,"meta":14,"style":14},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[92,101655,101656,101672],{"__ignoreMap":14},[95,101657,101658,101660,101662,101664,101666,101668,101670],{"class":97,"line":98},[95,101659,3007],{"class":101},[95,101661,101478],{"class":105},[95,101663,26028],{"class":101},[95,101665,32428],{"class":154},[95,101667,106],{"class":105},[95,101669,417],{"class":154},[95,101671,30771],{"class":105},[95,101673,101674],{"class":97,"line":15},[95,101675,101676],{"class":105},"    mujoco.mj_step(model, data)\n",[10,101678,101679,101680,101682],{},"每次 ",[92,101681,101192],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[66,101684,101685],{"id":101685},"代码逐行细讲",[10,101687,101688],{},"下面把完整代码按新手视角拆开讲。",[86,101690,101691],{"className":30363,"code":101555,"language":30365,"meta":14,"style":14},[92,101692,101693],{"__ignoreMap":14},[95,101694,101695,101697],{"class":97,"line":98},[95,101696,30377],{"class":101},[95,101698,101278],{"class":105},[10,101700,101701,101703,101704,318,101706,318,101708,28370],{},[92,101702,30377],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[92,101705,100652],{},[92,101707,100657],{},[92,101709,101710],{},"mujoco.mj_step",[86,101712,101713],{"className":30363,"code":101572,"language":30365,"meta":14,"style":14},[92,101714,101715,101723,101727],{"__ignoreMap":14},[95,101716,101717,101719,101721],{"class":97,"line":98},[95,101718,101291],{"class":154},[95,101720,13547],{"class":101},[95,101722,101296],{"class":210},[95,101724,101725],{"class":97,"line":15},[95,101726,101587],{"class":210},[95,101728,101729],{"class":97,"line":1161},[95,101730,95675],{"class":210},[10,101732,101733,101735,101736,101739],{},[92,101734,101291],{}," 是一个变量名。右边的三引号 ",[92,101737,101738],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[86,101741,101742],{"className":53044,"code":101301,"language":53046,"meta":14,"style":14},[92,101743,101744],{"__ignoreMap":14},[95,101745,101746,101748,101750,101753,101755,101758],{"class":97,"line":98},[95,101747,1016],{"class":105},[95,101749,100998],{"class":51277},[95,101751,101752],{"class":1945}," model",[95,101754,151],{"class":105},[95,101756,101757],{"class":210},"\"first_sim\"",[95,101759,51284],{"class":105},[10,101761,101762,101763,101766,101767,28370],{},"这是 XML 的根标签。",[92,101764,101765],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[92,101768,101769],{},"first_sim",[86,101771,101772],{"className":53044,"code":101160,"language":53046,"meta":14,"style":14},[92,101773,101774],{"__ignoreMap":14},[95,101775,101776,101778,101780,101782,101784,101786,101788,101790,101792],{"class":97,"line":98},[95,101777,1016],{"class":105},[95,101779,69143],{"class":51277},[95,101781,101171],{"class":1945},[95,101783,151],{"class":105},[95,101785,101176],{"class":210},[95,101787,101179],{"class":1945},[95,101789,151],{"class":105},[95,101791,101184],{"class":210},[95,101793,101121],{"class":105},[10,101795,101796,101798,101799,101802,101803,101806],{},[92,101797,69143],{}," 用来设置仿真参数。",[92,101800,101801],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[92,101804,101805],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[86,101808,101810],{"className":53044,"code":101809,"language":53046,"meta":14,"style":14},"\u003Cworldbody>\n",[92,101811,101812],{"__ignoreMap":14},[95,101813,101814,101816,101819],{"class":97,"line":98},[95,101815,1016],{"class":105},[95,101817,101818],{"class":51277},"worldbody",[95,101820,51284],{"class":105},[10,101822,101823,101825],{},[92,101824,101818],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[86,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",[92,101830,101831],{"__ignoreMap":14},[95,101832,101833,101835,101837,101839,101841,101844,101846,101848,101851,101853,101855,101858,101860,101862,101865],{"class":97,"line":98},[95,101834,1016],{"class":105},[95,101836,101097],{"class":51277},[95,101838,14903],{"class":1945},[95,101840,151],{"class":105},[95,101842,101843],{"class":210},"\"floor\"",[95,101845,53801],{"class":1945},[95,101847,151],{"class":105},[95,101849,101850],{"class":210},"\"plane\"",[95,101852,101113],{"class":1945},[95,101854,151],{"class":105},[95,101856,101857],{"class":210},"\"2 2 0.1\"",[95,101859,78744],{"class":1945},[95,101861,151],{"class":105},[95,101863,101864],{"class":210},"\"0.8 0.8 0.8 1\"",[95,101866,101121],{"class":105},[10,101868,101869,101870,101872,101873,101876,101877,101880,101881,101883],{},"这行创建地面。",[92,101871,101097],{}," 是几何体。",[92,101874,101875],{},"name=\"floor\""," 是名字。",[92,101878,101879],{},"type=\"plane\""," 表示平面。",[92,101882,55087],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[86,101885,101887],{"className":53044,"code":101886,"language":53046,"meta":14,"style":14},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[92,101888,101889],{"__ignoreMap":14},[95,101890,101891,101893,101895,101897,101899,101901,101903,101905,101907],{"class":97,"line":98},[95,101892,1016],{"class":105},[95,101894,51777],{"class":51277},[95,101896,14903],{"class":1945},[95,101898,151],{"class":105},[95,101900,53468],{"class":210},[95,101902,101083],{"class":1945},[95,101904,151],{"class":105},[95,101906,101088],{"class":210},[95,101908,51284],{"class":105},[10,101910,101911,101912,28370,101914,101917,101918,101920],{},"这行创建一个刚体，名字叫 ",[92,101913,53691],{},[92,101915,101916],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[92,101919,101146],{},"，也就是离地面 1 米高。",[86,101922,101924],{"className":53044,"code":101923,"language":53046,"meta":14,"style":14},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[92,101925,101926],{"__ignoreMap":14},[95,101927,101928,101930,101932,101934,101936,101939],{"class":97,"line":98},[95,101929,1016],{"class":105},[95,101931,101597],{"class":51277},[95,101933,14903],{"class":1945},[95,101935,151],{"class":105},[95,101937,101938],{"class":210},"\"box_free\"",[95,101940,101121],{"class":105},[10,101942,101943,101944,101946],{},"这行很重要。",[92,101945,101597],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[86,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",[92,101951,101952],{"__ignoreMap":14},[95,101953,101954,101956,101958,101960,101962,101964,101966,101968,101970,101972,101974,101976,101979,101981,101983,101985,101987,101990],{"class":97,"line":98},[95,101955,1016],{"class":105},[95,101957,101097],{"class":51277},[95,101959,14903],{"class":1945},[95,101961,151],{"class":105},[95,101963,101104],{"class":210},[95,101965,53801],{"class":1945},[95,101967,151],{"class":105},[95,101969,53468],{"class":210},[95,101971,101113],{"class":1945},[95,101973,151],{"class":105},[95,101975,101118],{"class":210},[95,101977,101978],{"class":1945}," mass",[95,101980,151],{"class":105},[95,101982,3660],{"class":210},[95,101984,78744],{"class":1945},[95,101986,151],{"class":105},[95,101988,101989],{"class":210},"\"1 0 0 1\"",[95,101991,101121],{"class":105},[10,101993,101994,101995,101998,101999,102002,102003,102006,102007,102010],{},"这行给 box body 添加一个盒子形状。",[92,101996,101997],{},"type=\"box\""," 表示形状是盒子。",[92,102000,102001],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[92,102004,102005],{},"mass=\"1\""," 表示质量是 1。",[92,102008,102009],{},"rgba=\"1 0 0 1\""," 表示红色。",[86,102012,102014],{"className":30363,"code":102013,"language":30365,"meta":14,"style":14},"def main() -> None:\n",[92,102015,102016],{"__ignoreMap":14},[95,102017,102018,102020,102022,102024,102026],{"class":97,"line":98},[95,102019,31932],{"class":101},[95,102021,1955],{"class":1945},[95,102023,101375],{"class":105},[95,102025,95663],{"class":154},[95,102027,3721],{"class":105},[10,102029,102030,102032,102033,102036,102037,102040],{},[92,102031,31932],{}," 用来定义函数。这里定义了一个叫 ",[92,102034,102035],{},"main"," 的函数。",[92,102038,102039],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[86,102042,102043],{"className":30363,"code":101604,"language":30365,"meta":14,"style":14},[92,102044,102045],{"__ignoreMap":14},[95,102046,102047,102049,102051,102053,102055],{"class":97,"line":98},[95,102048,101611],{"class":105},[95,102050,151],{"class":101},[95,102052,101389],{"class":105},[95,102054,101291],{"class":154},[95,102056,112],{"class":105},[10,102058,102059,102060,102063],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[92,102061,102062],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[86,102065,102066],{"className":30363,"code":101628,"language":30365,"meta":14,"style":14},[92,102067,102068],{"__ignoreMap":14},[95,102069,102070,102072,102074],{"class":97,"line":98},[95,102071,101635],{"class":105},[95,102073,151],{"class":101},[95,102075,101403],{"class":105},[10,102077,102078,102079,102081,102082,102084],{},"这行创建仿真数据。",[92,102080,33386],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[92,102083,33386],{}," 都会变化。",[86,102086,102088],{"className":30363,"code":102087,"language":30365,"meta":14,"style":14},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[92,102089,102090,102100,102110],{"__ignoreMap":14},[95,102091,102092,102094,102096,102098],{"class":97,"line":98},[95,102093,30400],{"class":154},[95,102095,106],{"class":105},[95,102097,101416],{"class":210},[95,102099,101419],{"class":105},[95,102101,102102,102104,102106,102108],{"class":97,"line":15},[95,102103,30400],{"class":154},[95,102105,106],{"class":105},[95,102107,101428],{"class":210},[95,102109,101431],{"class":105},[95,102111,102112,102114,102116,102118],{"class":97,"line":1161},[95,102113,30400],{"class":154},[95,102115,106],{"class":105},[95,102117,101440],{"class":210},[95,102119,101443],{"class":105},[10,102121,102122,102124,102125,102128,102129,102132,102133,102136,102137,102140],{},[92,102123,30400],{}," 用来输出信息。",[92,102126,102127],{},"model.nq"," 是位置变量数量，",[92,102130,102131],{},"model.nv"," 是速度变量数量，",[92,102134,102135],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[92,102138,102139],{},"nu"," 是 0。",[86,102142,102144],{"className":30363,"code":102143,"language":30365,"meta":14,"style":14},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[92,102145,102146,102156],{"__ignoreMap":14},[95,102147,102148,102150,102152,102154],{"class":97,"line":98},[95,102149,30400],{"class":154},[95,102151,106],{"class":105},[95,102153,101452],{"class":210},[95,102155,101455],{"class":105},[95,102157,102158,102160,102162,102164],{"class":97,"line":15},[95,102159,30400],{"class":154},[95,102161,106],{"class":105},[95,102163,101464],{"class":210},[95,102165,101467],{"class":105},[10,102167,102168,102169,102171,102172,102174,102175,102178],{},"这里打印初始时间和初始位置。",[92,102170,101044],{}," 一开始是 0。",[92,102173,101047],{}," 是位置数组。",[92,102176,102177],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[86,102180,102181],{"className":30363,"code":101653,"language":30365,"meta":14,"style":14},[92,102182,102183,102199],{"__ignoreMap":14},[95,102184,102185,102187,102189,102191,102193,102195,102197],{"class":97,"line":98},[95,102186,3007],{"class":101},[95,102188,101478],{"class":105},[95,102190,26028],{"class":101},[95,102192,32428],{"class":154},[95,102194,106],{"class":105},[95,102196,417],{"class":154},[95,102198,30771],{"class":105},[95,102200,102201],{"class":97,"line":15},[95,102202,101676],{"class":105},[10,102204,102205,102207,102208,102211,102212,102214,102215,102217],{},[92,102206,3007],{}," 是循环。",[92,102209,102210],{},"range(100)"," 表示循环 100 次。",[92,102213,1098],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[92,102216,101192],{},"，仿真就前进一步。",[86,102219,102221],{"className":30363,"code":102220,"language":30365,"meta":14,"style":14},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[92,102222,102223,102233],{"__ignoreMap":14},[95,102224,102225,102227,102229,102231],{"class":97,"line":98},[95,102226,30400],{"class":154},[95,102228,106],{"class":105},[95,102230,101506],{"class":210},[95,102232,101455],{"class":105},[95,102234,102235,102237,102239,102241],{"class":97,"line":15},[95,102236,30400],{"class":154},[95,102238,106],{"class":105},[95,102240,101517],{"class":210},[95,102242,101467],{"class":105},[10,102244,102245],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[86,102247,102249],{"className":30363,"code":102248,"language":30365,"meta":14,"style":14},"if __name__ == \"__main__\":\n    main()\n",[92,102250,102251,102263],{"__ignoreMap":14},[95,102252,102253,102255,102257,102259,102261],{"class":97,"line":98},[95,102254,1513],{"class":101},[95,102256,31205],{"class":154},[95,102258,101536],{"class":101},[95,102260,101539],{"class":210},[95,102262,3721],{"class":105},[95,102264,102265],{"class":97,"line":15},[95,102266,101546],{"class":105},[10,102268,102269,102270,102273,102274,28370],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[92,102271,102272],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[92,102275,102272],{},[10,102277,102278],{},"运行:",[86,102280,102282],{"className":23806,"code":102281,"language":23808,"meta":14,"style":14},"python ch1_first_sim.py\n",[92,102283,102284],{"__ignoreMap":14},[95,102285,102286,102288],{"class":97,"line":98},[95,102287,30365],{"class":1945},[95,102289,101263],{"class":210},[37,102291,102293],{"id":102292},"_5运行结果说明","5.运行结果说明",[10,102295,102296],{},"你应该看到类似输出:",[86,102298,102301],{"className":102299,"code":102300,"language":5170,"meta":14},[5168],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[92,102302,102300],{"__ignoreMap":14},[10,102304,102305,102307,102308,102311,102312,28370],{},[92,102306,101597],{}," 有 7 个位置变量: ",[92,102309,102310],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[92,102313,102314],{},"vx vy vz wx wy wz",[10,102316,102317,102318,102321],{},"你还会看到 ",[92,102319,102320],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[37,102323,102325],{"id":102324},"_6验证步骤","6.验证步骤",[10,102327,102328],{},"确认版本:",[86,102330,102331],{"className":23806,"code":100916,"language":23808,"meta":14,"style":14},[92,102332,102333],{"__ignoreMap":14},[95,102334,102335,102337,102339],{"class":97,"line":98},[95,102336,30365],{"class":1945},[95,102338,30343],{"class":154},[95,102340,100927],{"class":210},[10,102342,102343],{},"确认导入的是官方 bindings:",[86,102345,102347],{"className":23806,"code":102346,"language":23808,"meta":14,"style":14},"python -c \"import mujoco; print(mujoco)\"\n",[92,102348,102349],{"__ignoreMap":14},[95,102350,102351,102353,102355],{"class":97,"line":98},[95,102352,30365],{"class":1945},[95,102354,30343],{"class":154},[95,102356,102357],{"class":210}," \"import mujoco; print(mujoco)\"\n",[10,102359,102360],{},"运行程序:",[86,102362,102363],{"className":23806,"code":102281,"language":23808,"meta":14,"style":14},[92,102364,102365],{"__ignoreMap":14},[95,102366,102367,102369],{"class":97,"line":98},[95,102368,30365],{"class":1945},[95,102370,101263],{"class":210},[10,102372,102373,102374,102377,102378,28370],{},"检查 ",[92,102375,102376],{},"final time"," 是否约等于 ",[92,102379,102380],{},"1.0",[10,102382,102383],{},"再做几个小实验：",[49,102385,102386,102396,102404,102417],{},[52,102387,102388,102389,102391,102392,102395],{},"把 ",[92,102390,101916],{}," 改成 ",[92,102393,102394],{},"pos=\"0 0 2\"","，观察初始高度变化。",[52,102397,102388,102398,102391,102400,102403],{},[92,102399,101805],{},[92,102401,102402],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[52,102405,102388,102406,102391,102408,102411,102412,102414,102415,28370],{},[92,102407,101801],{},[92,102409,102410],{},"timestep=\"0.005\"","，观察 100 步后的 ",[92,102413,102376],{}," 是否变成约 ",[92,102416,35314],{},[52,102418,102419,102420,102423],{},"删除 ",[92,102421,102422],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[10,102425,102426],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[37,102428,102430],{"id":102429},"_7常见错误与解决方案","7.常见错误与解决方案",[66,102432,102434],{"id":102433},"modulenotfounderror-no-module-named-mujoco",[92,102435,102436],{},"ModuleNotFoundError: No module named 'mujoco'",[10,102438,102439],{},"解决:",[86,102441,102443],{"className":23806,"code":102442,"language":23808,"meta":14,"style":14},"pip install \"mujoco>=2.3\"\n",[92,102444,102445],{"__ignoreMap":14},[95,102446,102447,102449,102451],{"class":97,"line":98},[95,102448,23815],{"class":1945},[95,102450,23818],{"class":210},[95,102452,102453],{"class":210}," \"mujoco>=2.3\"\n",[66,102455,102457],{"id":102456},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[10,102459,102460],{},"先安装系统依赖:",[86,102462,102464],{"className":23806,"code":102463,"language":23808,"meta":14,"style":14},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[92,102465,102466],{"__ignoreMap":14},[95,102467,102468,102470,102472,102474,102476,102479,102481,102484,102486,102489,102491],{"class":97,"line":98},[95,102469,24561],{"class":1945},[95,102471,26300],{"class":210},[95,102473,23818],{"class":210},[95,102475,26385],{"class":154},[95,102477,102478],{"class":210}," mesa-libGL",[95,102480,100791],{"class":210},[95,102482,102483],{"class":210}," glfw",[95,102485,100811],{"class":210},[95,102487,102488],{"class":210}," libX11",[95,102490,100824],{"class":210},[95,102492,102493],{"class":210}," libXrandr\n",[66,102495,102497],{"id":102496},"xml-解析失败","XML 解析失败",[10,102499,102500],{},"检查:",[49,102502,102503,102506,102509,102515],{},[52,102504,102505],{},"标签是否闭合",[52,102507,102508],{},"属性是否带引号",[52,102510,102511,102512],{},"根节点是否是 ",[92,102513,102514],{},"\u003Cmujoco>",[52,102516,102517,102519,102520,102523],{},[92,102518,51777],{}," 是否放在 ",[92,102521,102522],{},"\u003Cworldbody>"," 内部",[66,102525,102527,102529,102530],{"id":102526},"final-time-不是严格等于-10",[92,102528,102376],{}," 不是严格等于 ",[92,102531,102380],{},[10,102533,102534],{},"这通常不是错误。浮点数计算可能得到：",[86,102536,102539],{"className":102537,"code":102538,"language":5170,"meta":14},[5168],"1.0000000000000007\n",[92,102540,102538],{"__ignoreMap":14},[10,102542,102543,102544,102546],{},"只要接近 ",[92,102545,102380],{}," 就正常。",[66,102548,102549],{"id":102549},"方块没有掉下来",[10,102551,102552],{},"检查：",[49,102554,102555,102561,102567,102572],{},[52,102556,102557,102558],{},"方块 body 里是否有 ",[92,102559,102560],{},"\u003Cfreejoint\u002F>",[52,102562,102563,102564],{},"重力是否是 ",[92,102565,102566],{},"0 0 -9.81",[52,102568,102569,102570],{},"是否真的调用了 ",[92,102571,100662],{},[52,102573,102574,102575,102577,102578],{},"你看的是否是 ",[92,102576,102320],{},"，不是 ",[92,102579,102580],{},"initial qpos",[37,102582,102584],{"id":102583},"_8本章小结","8.本章小结",[10,102586,102587],{},"本章你已经完成了 MuJoCo 的最小闭环：",[86,102589,102592],{"className":102590,"code":102591,"language":5170,"meta":14},[5168],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[92,102593,102591],{"__ignoreMap":14},[10,102595,102596],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5109,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":1161,"text":101060},{"id":101153,"depth":1161,"text":101154},{"id":101205,"depth":1161,"text":101206},{"id":101229,"depth":15,"text":101230,"children":102610},[102611,102612],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":102436},{"id":102456,"depth":1161,"text":102457},{"id":102496,"depth":1161,"text":102497},{"id":102526,"depth":1161,"text":102621},"final time 不是严格等于 1.0",{"id":102549,"depth":1161,"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":21,"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],[33,102635,102631],{"id":102636},"_2xml-与-mjcf-物理建模基础",[37,102638,100624],{"id":100623},[10,102640,102641],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[10,102643,102644],{},"本章结束后，你应该能看懂一个简单模型里：",[49,102646,102647,102650,102653,102656,102659],{},[52,102648,102649],{},"地面在哪里。",[52,102651,102652],{},"物体初始位置在哪里。",[52,102654,102655],{},"几何体是什么形状。",[52,102657,102658],{},"哪些 body 可以自由运动。",[52,102660,102661],{},"如何用名字在 Python 里找到 XML 中的对象。",[243,102663,102664,102674],{},[246,102665,102666],{},[249,102667,102668,102671],{},[252,102669,102670],{"align":23720},"标签",[252,102672,102673],{"align":23720},"作用",[290,102675,102676,102685,102695,102704,102714,102724,102737,102747],{},[249,102677,102678,102682],{},[295,102679,102680],{"align":23720},[92,102681,102514],{},[295,102683,102684],{"align":23720},"根节点",[249,102686,102687,102692],{},[295,102688,102689],{"align":23720},[92,102690,102691],{},"\u003Coption>",[295,102693,102694],{"align":23720},"仿真参数",[249,102696,102697,102701],{},[295,102698,102699],{"align":23720},[92,102700,102522],{},[295,102702,102703],{"align":23720},"世界中的物体",[249,102705,102706,102711],{},[295,102707,102708],{"align":23720},[92,102709,102710],{},"\u003Cbody>",[295,102712,102713],{"align":23720},"刚体",[249,102715,102716,102721],{},[295,102717,102718],{"align":23720},[92,102719,102720],{},"\u003Cgeom>",[295,102722,102723],{"align":23720},"几何体、碰撞体、可视体",[249,102725,102726,102734],{},[295,102727,102728,24963,102731],{"align":23720},[92,102729,102730],{},"\u003Cjoint>",[92,102732,102733],{},"\u003Cfreejoint>",[295,102735,102736],{"align":23720},"关节",[249,102738,102739,102744],{},[295,102740,102741],{"align":23720},[92,102742,102743],{},"\u003Csite>",[295,102745,102746],{"align":23720},"标记点",[249,102748,102749,102754],{},[295,102750,102751],{"align":23720},[92,102752,102753],{},"\u003Cactuator>",[295,102755,102756],{"align":23720},"控制器",[10,102758,102759],{},"初学时可以先记住：",[86,102761,102764],{"className":102762,"code":102763,"language":5170,"meta":14},[5168],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[92,102765,102763],{"__ignoreMap":14},[37,102767,100747],{"id":100746},[10,102769,100750],{},[86,102771,102773],{"className":23806,"code":102772,"language":23808,"meta":14,"style":14},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[92,102774,102775],{"__ignoreMap":14},[95,102776,102777,102779,102781,102783,102785,102787,102789,102791],{"class":97,"line":98},[95,102778,24561],{"class":1945},[95,102780,26300],{"class":210},[95,102782,23818],{"class":210},[95,102784,26385],{"class":154},[95,102786,102478],{"class":210},[95,102788,100791],{"class":210},[95,102790,102483],{"class":210},[95,102792,102793],{"class":210}," glfw-devel\n",[10,102795,102796],{},"pip:",[86,102798,102799],{"className":23806,"code":100896,"language":23808,"meta":14,"style":14},[92,102800,102801],{"__ignoreMap":14},[95,102802,102803,102805,102807,102809],{"class":97,"line":98},[95,102804,23815],{"class":1945},[95,102806,23818],{"class":210},[95,102808,100907],{"class":210},[95,102810,100910],{"class":210},[10,102812,102813],{},"conda:",[86,102815,102817],{"className":23806,"code":102816,"language":23808,"meta":14,"style":14},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[92,102818,102819,102836,102845],{"__ignoreMap":14},[95,102820,102821,102823,102825,102827,102830,102832,102834],{"class":97,"line":98},[95,102822,30315],{"class":1945},[95,102824,29161],{"class":210},[95,102826,25100],{"class":154},[95,102828,102829],{"class":210}," mujoco-xml",[95,102831,100952],{"class":210},[95,102833,100955],{"class":154},[95,102835,100958],{"class":154},[95,102837,102838,102840,102842],{"class":97,"line":15},[95,102839,30315],{"class":1945},[95,102841,100965],{"class":210},[95,102843,102844],{"class":210}," mujoco-xml\n",[95,102846,102847,102849,102851,102853],{"class":97,"line":1161},[95,102848,23815],{"class":1945},[95,102850,23818],{"class":210},[95,102852,100907],{"class":210},[95,102854,100910],{"class":210},[10,102856,100981],{},[49,102858,102859,102862,102867],{},[52,102860,102861],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[52,102863,102864,102865,28370],{},"本章使用基础标签，适用于 ",[92,102866,101004],{},[52,102868,102869],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[37,102871,101022],{"id":101021},[10,102873,102874],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[86,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",[92,102879,102880,102894,102902,102907,102915],{"__ignoreMap":14},[95,102881,102882,102884,102886,102888,102890,102892],{"class":97,"line":98},[95,102883,1016],{"class":105},[95,102885,100998],{"class":51277},[95,102887,101752],{"class":1945},[95,102889,151],{"class":105},[95,102891,62656],{"class":210},[95,102893,51284],{"class":105},[95,102895,102896,102898,102900],{"class":97,"line":15},[95,102897,52121],{"class":105},[95,102899,101818],{"class":51277},[95,102901,51284],{"class":105},[95,102903,102904],{"class":97,"line":1161},[95,102905,102906],{"class":105},"    ...\n",[95,102908,102909,102911,102913],{"class":97,"line":1176},[95,102910,52394],{"class":105},[95,102912,101818],{"class":51277},[95,102914,51284],{"class":105},[95,102916,102917,102919,102921],{"class":97,"line":1182},[95,102918,51762],{"class":105},[95,102920,100998],{"class":51277},[95,102922,51284],{"class":105},[10,102924,102925,102927,102928,102930,102931,102934],{},[92,102926,51777],{}," 表示刚体。",[92,102929,101097],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[92,102932,102933],{},"joint"," 表示刚体相对父刚体如何运动。",[66,102936,102937],{"id":102937},"层级结构非常重要",[10,102939,102940],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[86,102942,102945],{"className":102943,"code":102944,"language":5170,"meta":14},[5168],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[92,102946,102944],{"__ignoreMap":14},[10,102948,102949,100995,102952,102955,102956,102959],{},[92,102950,102951],{},"red_box_geom",[92,102953,102954],{},"box_center"," 都属于 ",[92,102957,102958],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[86,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",[92,102964,102965,102985,102999,103019],{"__ignoreMap":14},[95,102966,102967,102969,102971,102973,102975,102977,102979,102981,102983],{"class":97,"line":98},[95,102968,1016],{"class":105},[95,102970,51777],{"class":51277},[95,102972,14903],{"class":1945},[95,102974,151],{"class":105},[95,102976,53468],{"class":210},[95,102978,101083],{"class":1945},[95,102980,151],{"class":105},[95,102982,101088],{"class":210},[95,102984,51284],{"class":105},[95,102986,102987,102989,102991,102993,102995,102997],{"class":97,"line":15},[95,102988,52121],{"class":105},[95,102990,101597],{"class":51277},[95,102992,14903],{"class":1945},[95,102994,151],{"class":105},[95,102996,101938],{"class":210},[95,102998,101121],{"class":105},[95,103000,103001,103003,103005,103007,103009,103011,103013,103015,103017],{"class":97,"line":1161},[95,103002,52121],{"class":105},[95,103004,101097],{"class":51277},[95,103006,53801],{"class":1945},[95,103008,151],{"class":105},[95,103010,53468],{"class":210},[95,103012,101113],{"class":1945},[95,103014,151],{"class":105},[95,103016,101118],{"class":210},[95,103018,101121],{"class":105},[95,103020,103021,103023,103025],{"class":97,"line":1176},[95,103022,51762],{"class":105},[95,103024,51777],{"class":51277},[95,103026,51284],{"class":105},[10,103028,103029],{},"含义:",[49,103031,103032,103038,103043,103046],{},[52,103033,103034,103035,103037],{},"创建名为 ",[92,103036,53691],{}," 的刚体",[52,103039,103040,103041],{},"初始位置在世界坐标 ",[92,103042,101146],{},[52,103044,103045],{},"它有一个自由关节",[52,103047,103048],{},"它有一个盒子几何体",[66,103050,103051],{"id":103051},"坐标怎么理解",[10,103053,103054],{},"MuJoCo 默认使用三维坐标：",[86,103056,103059],{"className":103057,"code":103058,"language":5170,"meta":14},[5168],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[92,103060,103058],{"__ignoreMap":14},[10,103062,14616],{},[86,103064,103066],{"className":53044,"code":103065,"language":53046,"meta":14,"style":14},"pos=\"0 0 1\"\n",[92,103067,103068],{"__ignoreMap":14},[95,103069,103070],{"class":97,"line":98},[95,103071,103065],{"class":105},[10,103073,103074],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[66,103076,103078],{"id":103077},"geom-的-size-怎么理解","geom 的 size 怎么理解",[10,103080,103081,103082,82507,103085,103087],{},"不同 ",[92,103083,103084],{},"type",[92,103086,31481],{}," 含义不同：",[243,103089,103090,103105],{},[246,103091,103092],{},[249,103093,103094,103098,103103],{},[252,103095,103096],{"align":23720},[92,103097,103084],{},[252,103099,103100,103102],{"align":23720},[92,103101,31481],{}," 示例",[252,103104,100677],{"align":23720},[290,103106,103107,103121,103136,103155],{},[249,103108,103109,103113,103118],{},[295,103110,103111],{"align":23720},[92,103112,53691],{},[295,103114,103115],{"align":23720},[92,103116,103117],{},"size=\"0.1 0.2 0.3\"",[295,103119,103120],{"align":23720},"x\u002Fy\u002Fz 半边长，不是完整长度",[249,103122,103123,103128,103133],{},[295,103124,103125],{"align":23720},[92,103126,103127],{},"sphere",[295,103129,103130],{"align":23720},[92,103131,103132],{},"size=\"0.1\"",[295,103134,103135],{"align":23720},"球半径",[249,103137,103138,103143,103148],{},[295,103139,103140],{"align":23720},[92,103141,103142],{},"capsule",[295,103144,103145],{"align":23720},[92,103146,103147],{},"size=\"0.03\"",[295,103149,103150,103151,103154],{"align":23720},"胶囊半径，长度常用 ",[92,103152,103153],{},"fromto"," 指定",[249,103156,103157,103162,103167],{},[295,103158,103159],{"align":23720},[92,103160,103161],{},"plane",[295,103163,103164],{"align":23720},[92,103165,103166],{},"size=\"3 3 0.1\"",[295,103168,103169],{"align":23720},"可视平面大小，通常当地面",[10,103171,103172,103173,103175,103176,103178],{},"最容易踩坑的是 box：",[92,103174,102001],{}," 表示边长大约是 ",[92,103177,32022],{},"，因为 MuJoCo 用的是半边长。",[66,103180,103182],{"id":103181},"site-是什么","site 是什么",[10,103184,103185,103188],{},[92,103186,103187],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[49,103190,103191,103194,103197,103200],{},[52,103192,103193],{},"标记机械臂末端。",[52,103195,103196],{},"标记目标位置。",[52,103198,103199],{},"放传感器或相机参考点。",[52,103201,103202],{},"在 Python 中读取某个关键点的世界坐标。",[10,103204,103205,103206,100995,103209,103212],{},"在后面的 Reacher 任务中，",[92,103207,103208],{},"tip",[92,103210,103211],{},"target"," 就会用 site 表示。",[37,103214,101230],{"id":101229},[86,103216,103218],{"className":30363,"code":103217,"language":30365,"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",[92,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},[95,103221,103222,103224],{"class":97,"line":98},[95,103223,30377],{"class":101},[95,103225,101278],{"class":105},[95,103227,103228,103230,103232,103234],{"class":97,"line":15},[95,103229,30377],{"class":101},[95,103231,31365],{"class":105},[95,103233,31368],{"class":101},[95,103235,31371],{"class":105},[95,103237,103238],{"class":97,"line":1161},[95,103239,2382],{"emptyLinePlaceholder":21},[95,103241,103242],{"class":97,"line":1176},[95,103243,2382],{"emptyLinePlaceholder":21},[95,103245,103246,103248,103250],{"class":97,"line":1182},[95,103247,101291],{"class":154},[95,103249,13547],{"class":101},[95,103251,101296],{"class":210},[95,103253,103254],{"class":97,"line":1196},[95,103255,103256],{"class":210},"\u003Cmujoco model=\"xml_basic\">\n",[95,103258,103259],{"class":97,"line":1202},[95,103260,101306],{"class":210},[95,103262,103263],{"class":97,"line":1293},[95,103264,2382],{"emptyLinePlaceholder":21},[95,103266,103267],{"class":97,"line":1299},[95,103268,101315],{"class":210},[95,103270,103271],{"class":97,"line":1311},[95,103272,103273],{"class":210},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[95,103275,103276],{"class":97,"line":1594},[95,103277,2382],{"emptyLinePlaceholder":21},[95,103279,103280],{"class":97,"line":1599},[95,103281,103282],{"class":210},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[95,103284,103285],{"class":97,"line":1605},[95,103286,103287],{"class":210},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[95,103289,103290],{"class":97,"line":1610},[95,103291,103292],{"class":210},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[95,103294,103295],{"class":97,"line":1624},[95,103296,103297],{"class":210},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[95,103299,103300],{"class":97,"line":1629},[95,103301,101344],{"class":210},[95,103303,103304],{"class":97,"line":1635},[95,103305,101349],{"class":210},[95,103307,103308],{"class":97,"line":1656},[95,103309,101354],{"class":210},[95,103311,103312],{"class":97,"line":1661},[95,103313,95675],{"class":210},[95,103315,103316],{"class":97,"line":1675},[95,103317,2382],{"emptyLinePlaceholder":21},[95,103319,103320],{"class":97,"line":1680},[95,103321,2382],{"emptyLinePlaceholder":21},[95,103323,103324,103326,103328,103330,103332],{"class":97,"line":1709},[95,103325,31932],{"class":101},[95,103327,1955],{"class":1945},[95,103329,101375],{"class":105},[95,103331,95663],{"class":154},[95,103333,3721],{"class":105},[95,103335,103336,103338,103340,103342,103344],{"class":97,"line":1714},[95,103337,101384],{"class":105},[95,103339,151],{"class":101},[95,103341,101389],{"class":105},[95,103343,101291],{"class":154},[95,103345,112],{"class":105},[95,103347,103348,103350,103352],{"class":97,"line":1731},[95,103349,101398],{"class":105},[95,103351,151],{"class":101},[95,103353,101403],{"class":105},[95,103355,103356],{"class":97,"line":1736},[95,103357,2382],{"emptyLinePlaceholder":21},[95,103359,103360,103363,103365,103368,103371],{"class":97,"line":1741},[95,103361,103362],{"class":105},"    box_body_id ",[95,103364,151],{"class":101},[95,103366,103367],{"class":105}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[95,103369,103370],{"class":210},"\"red_box\"",[95,103372,112],{"class":105},[95,103374,103375,103378,103380,103383,103386],{"class":97,"line":1746},[95,103376,103377],{"class":105},"    site_id ",[95,103379,151],{"class":101},[95,103381,103382],{"class":105}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[95,103384,103385],{"class":210},"\"box_center\"",[95,103387,112],{"class":105},[95,103389,103390],{"class":97,"line":1760},[95,103391,2382],{"emptyLinePlaceholder":21},[95,103393,103394,103396,103399,103401,103403],{"class":97,"line":1765},[95,103395,3083],{"class":101},[95,103397,103398],{"class":105}," box_body_id ",[95,103400,1016],{"class":101},[95,103402,4075],{"class":154},[95,103404,3721],{"class":105},[95,103406,103407,103410,103413,103415,103418],{"class":97,"line":2559},[95,103408,103409],{"class":101},"        raise",[95,103411,103412],{"class":154}," RuntimeError",[95,103414,106],{"class":105},[95,103416,103417],{"class":210},"\"body red_box not found\"",[95,103419,112],{"class":105},[95,103421,103422,103424,103427,103429,103431],{"class":97,"line":2573},[95,103423,3083],{"class":101},[95,103425,103426],{"class":105}," site_id ",[95,103428,1016],{"class":101},[95,103430,4075],{"class":154},[95,103432,3721],{"class":105},[95,103434,103435,103437,103439,103441,103444],{"class":97,"line":2581},[95,103436,103409],{"class":101},[95,103438,103412],{"class":154},[95,103440,106],{"class":105},[95,103442,103443],{"class":210},"\"site box_center not found\"",[95,103445,112],{"class":105},[95,103447,103448],{"class":97,"line":2586},[95,103449,2382],{"emptyLinePlaceholder":21},[95,103451,103452,103454,103456,103458,103460,103462,103464],{"class":97,"line":2592},[95,103453,3183],{"class":101},[95,103455,101478],{"class":105},[95,103457,26028],{"class":101},[95,103459,32428],{"class":154},[95,103461,106],{"class":105},[95,103463,1704],{"class":154},[95,103465,30771],{"class":105},[95,103467,103468],{"class":97,"line":2598},[95,103469,101493],{"class":105},[95,103471,103472],{"class":97,"line":2603},[95,103473,2382],{"emptyLinePlaceholder":21},[95,103475,103476,103478,103480,103483],{"class":97,"line":7931},[95,103477,31284],{"class":154},[95,103479,106],{"class":105},[95,103481,103482],{"class":210},"\"simulation time:\"",[95,103484,101455],{"class":105},[95,103486,103487,103489,103491,103494],{"class":97,"line":7955},[95,103488,31284],{"class":154},[95,103490,106],{"class":105},[95,103492,103493],{"class":210},"\"box body position:\"",[95,103495,103496],{"class":105},", data.xpos[box_body_id].copy())\n",[95,103498,103499,103501,103503,103506],{"class":97,"line":7960},[95,103500,31284],{"class":154},[95,103502,106],{"class":105},[95,103504,103505],{"class":210},"\"site position:\"",[95,103507,103508],{"class":105},", data.site_xpos[site_id].copy())\n",[95,103510,103511,103513,103515,103518],{"class":97,"line":7966},[95,103512,31284],{"class":154},[95,103514,106],{"class":105},[95,103516,103517],{"class":210},"\"box qpos:\"",[95,103519,103520],{"class":105},", np.array(data.qpos))\n",[95,103522,103523],{"class":97,"line":7993},[95,103524,2382],{"emptyLinePlaceholder":21},[95,103526,103527],{"class":97,"line":7998},[95,103528,2382],{"emptyLinePlaceholder":21},[95,103530,103531,103533,103535,103537,103539],{"class":97,"line":8004},[95,103532,1513],{"class":101},[95,103534,31205],{"class":154},[95,103536,101536],{"class":101},[95,103538,101539],{"class":210},[95,103540,3721],{"class":105},[95,103542,103543],{"class":97,"line":8016},[95,103544,101546],{"class":105},[10,103546,103547],{},"保存为：",[86,103549,103551],{"className":23806,"code":103550,"language":23808,"meta":14,"style":14},"touch ch2_xml_basic.py\n",[92,103552,103553],{"__ignoreMap":14},[95,103554,103555,103557],{"class":97,"line":98},[95,103556,101260],{"class":1945},[95,103558,103559],{"class":210}," ch2_xml_basic.py\n",[10,103561,102278],{},[86,103563,103565],{"className":23806,"code":103564,"language":23808,"meta":14,"style":14},"python ch2_xml_basic.py\n",[92,103566,103567],{"__ignoreMap":14},[95,103568,103569,103571],{"class":97,"line":98},[95,103570,30365],{"class":1945},[95,103572,103559],{"class":210},[66,103574,101549],{"id":101549},[10,103576,103577],{},"用名字查找 body：",[86,103579,103581],{"className":30363,"code":103580,"language":30365,"meta":14,"style":14},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[92,103582,103583],{"__ignoreMap":14},[95,103584,103585,103588,103590,103592,103594],{"class":97,"line":98},[95,103586,103587],{"class":105},"box_body_id ",[95,103589,151],{"class":101},[95,103591,103367],{"class":105},[95,103593,103370],{"class":210},[95,103595,112],{"class":105},[10,103597,103598],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[10,103600,103601],{},"用名字查找 site：",[86,103603,103605],{"className":30363,"code":103604,"language":30365,"meta":14,"style":14},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[92,103606,103607],{"__ignoreMap":14},[95,103608,103609,103612,103614,103616,103618],{"class":97,"line":98},[95,103610,103611],{"class":105},"site_id ",[95,103613,151],{"class":101},[95,103615,103382],{"class":105},[95,103617,103385],{"class":210},[95,103619,112],{"class":105},[10,103621,103622,103623,103626,103627,103630],{},"注意第二个参数是对象类型。查 body 就用 ",[92,103624,103625],{},"mjOBJ_BODY","，查 site 就用 ",[92,103628,103629],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[10,103632,103633],{},"读取世界坐标：",[86,103635,103637],{"className":30363,"code":103636,"language":30365,"meta":14,"style":14},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[92,103638,103639,103644],{"__ignoreMap":14},[95,103640,103641],{"class":97,"line":98},[95,103642,103643],{"class":105},"data.xpos[box_body_id]\n",[95,103645,103646],{"class":97,"line":15},[95,103647,103648],{"class":105},"data.site_xpos[site_id]\n",[10,103650,103651,103654,103655,103658],{},[92,103652,103653],{},"xpos"," 是 body 的世界坐标，",[92,103656,103657],{},"site_xpos"," 是 site 的世界坐标。",[66,103660,101685],{"id":101685},[86,103662,103664],{"className":30363,"code":103663,"language":30365,"meta":14,"style":14},"import mujoco\nimport numpy as np\n",[92,103665,103666,103672],{"__ignoreMap":14},[95,103667,103668,103670],{"class":97,"line":98},[95,103669,30377],{"class":101},[95,103671,101278],{"class":105},[95,103673,103674,103676,103678,103680],{"class":97,"line":15},[95,103675,30377],{"class":101},[95,103677,31365],{"class":105},[95,103679,31368],{"class":101},[95,103681,31371],{"class":105},[10,103683,103684,103685,103688,103689,103692,103693,318,103696,28370],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[92,103686,103687],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[92,103690,103691],{},"as np"," 是习惯写法，后面就可以写 ",[92,103694,103695],{},"np.array(...)",[92,103697,103698],{},"np.round(...)",[86,103700,103701],{"className":30363,"code":101572,"language":30365,"meta":14,"style":14},[92,103702,103703,103711,103715],{"__ignoreMap":14},[95,103704,103705,103707,103709],{"class":97,"line":98},[95,103706,101291],{"class":154},[95,103708,13547],{"class":101},[95,103710,101296],{"class":210},[95,103712,103713],{"class":97,"line":15},[95,103714,101587],{"class":210},[95,103716,103717],{"class":97,"line":1161},[95,103718,95675],{"class":210},[10,103720,103721,103722,28370],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[92,103723,103724],{},"mujoco.MjModel.from_xml_string(XML)",[86,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",[92,103729,103730],{"__ignoreMap":14},[95,103731,103732,103734,103736,103738,103740,103742,103744,103746,103749,103751,103753,103756,103758,103760,103763],{"class":97,"line":98},[95,103733,1016],{"class":105},[95,103735,103187],{"class":51277},[95,103737,14903],{"class":1945},[95,103739,151],{"class":105},[95,103741,103385],{"class":210},[95,103743,101083],{"class":1945},[95,103745,151],{"class":105},[95,103747,103748],{"class":210},"\"0 0 0\"",[95,103750,101113],{"class":1945},[95,103752,151],{"class":105},[95,103754,103755],{"class":210},"\"0.03\"",[95,103757,78744],{"class":1945},[95,103759,151],{"class":105},[95,103761,103762],{"class":210},"\"0 1 0 1\"",[95,103764,101121],{"class":105},[10,103766,103767,103769,103770,103773,103774,103776,103777,103780],{},[92,103768,103187],{}," 是标记点。",[92,103771,103772],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[92,103775,103147],{}," 表示显示出来的小球大小。",[92,103778,103779],{},"rgba=\"0 1 0 1\""," 表示绿色。",[86,103782,103783],{"className":30363,"code":103580,"language":30365,"meta":14,"style":14},[92,103784,103785],{"__ignoreMap":14},[95,103786,103787,103789,103791,103793,103795],{"class":97,"line":98},[95,103788,103587],{"class":105},[95,103790,151],{"class":101},[95,103792,103367],{"class":105},[95,103794,103370],{"class":210},[95,103796,112],{"class":105},[10,103798,103799,103800,103802],{},"这行的作用是：根据名字 ",[92,103801,103370],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[10,103804,103805],{},"拆开看：",[49,103807,103808,103814,103819,103825],{},[52,103809,103810,103813],{},[92,103811,103812],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[52,103815,103816,103818],{},[92,103817,102062],{}," 是被查询的模型。",[52,103820,103821,103824],{},[92,103822,103823],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[52,103826,103827,103829],{},[92,103828,103370],{}," 是 XML 里写的名字。",[86,103831,103832],{"className":30363,"code":103604,"language":30365,"meta":14,"style":14},[92,103833,103834],{"__ignoreMap":14},[95,103835,103836,103838,103840,103842,103844],{"class":97,"line":98},[95,103837,103611],{"class":105},[95,103839,151],{"class":101},[95,103841,103382],{"class":105},[95,103843,103385],{"class":210},[95,103845,112],{"class":105},[10,103847,103848,103849,28370],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[92,103850,103385],{},[86,103852,103854],{"className":30363,"code":103853,"language":30365,"meta":14,"style":14},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[92,103855,103856,103868],{"__ignoreMap":14},[95,103857,103858,103860,103862,103864,103866],{"class":97,"line":98},[95,103859,1513],{"class":101},[95,103861,103398],{"class":105},[95,103863,1016],{"class":101},[95,103865,4075],{"class":154},[95,103867,3721],{"class":105},[95,103869,103870,103873,103875,103877,103879],{"class":97,"line":15},[95,103871,103872],{"class":101},"    raise",[95,103874,103412],{"class":154},[95,103876,106],{"class":105},[95,103878,103417],{"class":210},[95,103880,112],{"class":105},[10,103882,103883,103885,103886,103889,103890,103893,103894,103897],{},[92,103884,1513],{}," 是条件判断。",[92,103887,103888],{},"mj_name2id"," 找不到对象时会返回 ",[92,103891,103892],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[92,103895,103896],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[86,103899,103901],{"className":30363,"code":103900,"language":30365,"meta":14,"style":14},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[92,103902,103903,103919],{"__ignoreMap":14},[95,103904,103905,103907,103909,103911,103913,103915,103917],{"class":97,"line":98},[95,103906,3007],{"class":101},[95,103908,101478],{"class":105},[95,103910,26028],{"class":101},[95,103912,32428],{"class":154},[95,103914,106],{"class":105},[95,103916,1704],{"class":154},[95,103918,30771],{"class":105},[95,103920,103921],{"class":97,"line":15},[95,103922,101676],{"class":105},[10,103924,103925],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[86,103927,103929],{"className":30363,"code":103928,"language":30365,"meta":14,"style":14},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[92,103930,103931],{"__ignoreMap":14},[95,103932,103933,103935,103937,103939],{"class":97,"line":98},[95,103934,30400],{"class":154},[95,103936,106],{"class":105},[95,103938,103493],{"class":210},[95,103940,103496],{"class":105},[10,103942,103943,103945,103946,103949],{},[92,103944,101056],{}," 保存所有 body 的世界坐标。",[92,103947,103948],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[86,103951,103953],{"className":30363,"code":103952,"language":30365,"meta":14,"style":14},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[92,103954,103955],{"__ignoreMap":14},[95,103956,103957,103959,103961,103963],{"class":97,"line":98},[95,103958,30400],{"class":154},[95,103960,106],{"class":105},[95,103962,103505],{"class":210},[95,103964,103508],{"class":105},[10,103966,103967,103970,103971,103973],{},[92,103968,103969],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[92,103972,102954],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[86,103975,103977],{"className":30363,"code":103976,"language":30365,"meta":14,"style":14},"print(\"box qpos:\", np.array(data.qpos))\n",[92,103978,103979],{"__ignoreMap":14},[95,103980,103981,103983,103985,103987],{"class":97,"line":98},[95,103982,30400],{"class":154},[95,103984,106],{"class":105},[95,103986,103517],{"class":210},[95,103988,103520],{"class":105},[10,103990,103991,103992,103995],{},"这里打印广义位置数组。",[92,103993,103994],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[37,103997,102293],{"id":102292},[10,103999,104000,104001,104004,104005,28370],{},"程序会输出 ",[92,104002,104003],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[92,104006,104007],{},"qpos",[10,104009,104010,104012,104013,104016,104017,104020],{},[92,104011,103948],{}," 是 body 的世界坐标位置。",[92,104014,104015],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[92,104018,104019],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[10,104022,82199,104023,82507,104025,104027],{},[92,104024,102954],{},[92,104026,103772],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[10,104029,104030],{},"如果你把 site 改成：",[86,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",[92,104035,104036],{"__ignoreMap":14},[95,104037,104038,104040,104042,104044,104046,104049,104051,104053,104056,104058,104060,104062,104064,104066,104068],{"class":97,"line":98},[95,104039,1016],{"class":105},[95,104041,103187],{"class":51277},[95,104043,14903],{"class":1945},[95,104045,151],{"class":105},[95,104047,104048],{"class":210},"\"box_top\"",[95,104050,101083],{"class":1945},[95,104052,151],{"class":105},[95,104054,104055],{"class":210},"\"0 0 0.15\"",[95,104057,101113],{"class":1945},[95,104059,151],{"class":105},[95,104061,103755],{"class":210},[95,104063,78744],{"class":1945},[95,104065,151],{"class":105},[95,104067,103762],{"class":210},[95,104069,101121],{"class":105},[10,104071,104072,104073,104076],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[92,104074,104075],{},"site position"," 就会比 body position 的 z 坐标更高。",[37,104078,102325],{"id":102324},[49,104080,104081,104090,104093,104100,104106,104117],{},[52,104082,102388,104083,104085,104086,102391,104088,28370],{},[92,104084,102958],{}," 的初始高度从 ",[92,104087,323],{},[92,104089,183],{},[52,104091,104092],{},"重新运行程序。",[52,104094,104095,104096,104099],{},"观察 ",[92,104097,104098],{},"box qpos"," 和最终位置是否变化。",[52,104101,104102,104103,104105],{},"故意把 ",[92,104104,103187],{}," 名称改错，确认程序能报错。",[52,104107,102388,104108,104110,104111,102391,104113,104116],{},[92,104109,101097],{}," 的颜色 ",[92,104112,102009],{},[92,104114,104115],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[52,104118,102388,104119,82507,104121,102391,104124,104127,104128,104130],{},[92,104120,102954],{},[92,104122,104123],{},"pos",[92,104125,104126],{},"0 0 0.2","，观察 ",[92,104129,104075],{}," 如何变化。",[37,104132,102430],{"id":102429},[66,104134,104136],{"id":104135},"xml-error-schema-violation",[92,104137,104138],{},"XML Error: Schema violation",[10,104140,104141],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[66,104143,104145,81267,104147],{"id":104144},"mj_name2id-返回-1",[92,104146,103888],{},[92,104148,103892],{},[10,104150,104151,104152,104155],{},"说明名字没有找到。检查 XML 中 ",[92,104153,104154],{},"name=\"...\"","，并确认对象类型正确。",[66,104157,104158],{"id":104158},"物体不下落",[10,104160,102500],{},[49,104162,104163,104168,104173],{},[52,104164,104165,104166],{},"body 是否有 ",[92,104167,101597],{},[52,104169,104170,104171],{},"gravity 是否为 ",[92,104172,102566],{},[52,104174,104175,104176,104178],{},"body 是否被固定在 ",[92,104177,101818],{}," 中",[66,104180,104181],{"id":104181},"坐标看起来不符合预期",[10,104183,104184],{},"先区分两种坐标：",[243,104186,104187,104196],{},[246,104188,104189],{},[249,104190,104191,104194],{},[252,104192,104193],{"align":23720},"坐标",[252,104195,100677],{"align":23720},[290,104197,104198,104208],{},[249,104199,104200,104205],{},[295,104201,104202,104203],{"align":23720},"XML 里的 ",[92,104204,104123],{},[295,104206,104207],{"align":23720},"相对父 body 的局部坐标",[249,104209,104210,104216],{},[295,104211,104212,24963,104214],{"align":23720},[92,104213,101056],{},[92,104215,103969],{},[295,104217,104218],{"align":23720},"仿真更新后的世界坐标",[10,104220,104221,104222,104224,104225,82516,104228,104230],{},"如果你修改了 ",[92,104223,101047],{},"，但还没调用 ",[92,104226,104227],{},"mj_forward",[92,104229,101192],{},"，世界坐标可能还没有更新。",[37,104232,102584],{"id":102583},[10,104234,104235],{},"MJCF 建模先掌握四件事：",[49,104237,104238,104243,104248,104253],{},[52,104239,104240,104242],{},[92,104241,51777],{}," 表示刚体层级。",[52,104244,104245,104247],{},[92,104246,101097],{}," 表示形状、碰撞和质量。",[52,104249,104250,104252],{},[92,104251,102933],{}," 决定 body 能不能动、怎么动。",[52,104254,104255,104257],{},[92,104256,103187],{}," 用来标记关键点，方便 Python 读取位置。",[10,104259,104260],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5109,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":1161,"text":102937},{"id":103051,"depth":1161,"text":103051},{"id":103077,"depth":1161,"text":103078},{"id":103181,"depth":1161,"text":103182},{"id":101229,"depth":15,"text":101230,"children":104275},[104276,104277],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":104138},{"id":104144,"depth":1161,"text":104284},"mj_name2id 返回 -1",{"id":104158,"depth":1161,"text":104158},{"id":104181,"depth":1161,"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":21,"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],[33,104299,104295],{"id":104300},"_3python-控制接口读取状态与推进仿真",[37,104302,100624],{"id":100623},[10,104304,104305],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[10,104307,104308],{},"你将学习:",[49,104310,104311,104316,104321,104325,104330,104341],{},[52,104312,104313],{},[92,104314,104315],{},"MjModel.from_xml_string",[52,104317,104318],{},[92,104319,104320],{},"MjData(model)",[52,104322,104323],{},[92,104324,101192],{},[52,104326,104327],{},[92,104328,104329],{},"mj_resetData",[52,104331,104332,104333,318,104335,318,104338],{},"读取 ",[92,104334,104007],{},[92,104336,104337],{},"qvel",[92,104339,104340],{},"ctrl",[52,104342,104343,104344],{},"使用 ",[92,104345,104346],{},"model.opt.timestep",[10,104348,104349],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[86,104351,104354],{"className":104352,"code":104353,"language":5170,"meta":14},[5168],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[92,104355,104353],{"__ignoreMap":14},[10,104357,104358],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[37,104360,100747],{"id":100746},[10,104362,100750],{},[86,104364,104366],{"className":23806,"code":104365,"language":23808,"meta":14,"style":14},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[92,104367,104368],{"__ignoreMap":14},[95,104369,104370,104372,104374,104376,104378,104381,104383,104385,104387],{"class":97,"line":98},[95,104371,24561],{"class":1945},[95,104373,26300],{"class":210},[95,104375,23818],{"class":210},[95,104377,26385],{"class":154},[95,104379,104380],{"class":210}," python3",[95,104382,100775],{"class":210},[95,104384,102478],{"class":210},[95,104386,100791],{"class":210},[95,104388,104389],{"class":210}," glfw\n",[10,104391,102796],{},[86,104393,104394],{"className":23806,"code":100896,"language":23808,"meta":14,"style":14},[92,104395,104396],{"__ignoreMap":14},[95,104397,104398,104400,104402,104404],{"class":97,"line":98},[95,104399,23815],{"class":1945},[95,104401,23818],{"class":210},[95,104403,100907],{"class":210},[95,104405,100910],{"class":210},[10,104407,102813],{},[86,104409,104411],{"className":23806,"code":104410,"language":23808,"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",[92,104412,104413,104430,104439],{"__ignoreMap":14},[95,104414,104415,104417,104419,104421,104424,104426,104428],{"class":97,"line":98},[95,104416,30315],{"class":1945},[95,104418,29161],{"class":210},[95,104420,25100],{"class":154},[95,104422,104423],{"class":210}," mujoco-python-api",[95,104425,100952],{"class":210},[95,104427,100955],{"class":154},[95,104429,100958],{"class":154},[95,104431,104432,104434,104436],{"class":97,"line":15},[95,104433,30315],{"class":1945},[95,104435,100965],{"class":210},[95,104437,104438],{"class":210}," mujoco-python-api\n",[95,104440,104441,104443,104445,104447],{"class":97,"line":1161},[95,104442,23815],{"class":1945},[95,104444,23818],{"class":210},[95,104446,100907],{"class":210},[95,104448,100910],{"class":210},[10,104450,100981],{},[49,104452,104453,104460,104469],{},[52,104454,104455,100995,104457,104459],{},[92,104456,100652],{},[92,104458,100657],{}," 是官方 Python bindings 的类名。",[52,104461,104462,104463,104466,104467,28370],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[92,104464,104465],{},"mjModel"," 在 Python 中是 ",[92,104468,100686],{},[52,104470,104471,104472,28370],{},"不要使用 ",[92,104473,104474],{},"sim = mujoco_py.MjSim(...)",[37,104476,101022],{"id":101021},[10,104478,104479],{},"仿真推进核心代码:",[86,104481,104483],{"className":30363,"code":104482,"language":30365,"meta":14,"style":14},"mujoco.mj_step(model, data)\n",[92,104484,104485],{"__ignoreMap":14},[95,104486,104487],{"class":97,"line":98},[95,104488,104482],{"class":105},[10,104490,104491,104492,318,104494,318,104496,28370],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[92,104493,101047],{},[92,104495,101050],{},[92,104497,101044],{},[10,104499,104500],{},"重置仿真:",[86,104502,104504],{"className":30363,"code":104503,"language":30365,"meta":14,"style":14},"mujoco.mj_resetData(model, data)\n",[92,104505,104506],{"__ignoreMap":14},[95,104507,104508],{"class":97,"line":98},[95,104509,104503],{"class":105},[10,104511,104512,104513,82516,104515,104517],{},"如果手动修改了 ",[92,104514,101047],{},[92,104516,101050],{},"，通常应调用:",[86,104519,104521],{"className":30363,"code":104520,"language":30365,"meta":14,"style":14},"mujoco.mj_forward(model, data)\n",[92,104522,104523],{"__ignoreMap":14},[95,104524,104525],{"class":97,"line":98},[95,104526,104520],{"class":105},[10,104528,104529],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[66,104531,104533,318,104535,318,104537,104539],{"id":104532},"qposqvelctrl-是什么",[92,104534,104007],{},[92,104536,104337],{},[92,104538,104340],{}," 是什么",[10,104541,104542],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[243,104544,104545,104557],{},[246,104546,104547],{},[249,104548,104549,104552,104554],{},[252,104550,104551],{"align":23720},"字段",[252,104553,100677],{"align":23720},[252,104555,104556],{"align":23720},"谁来修改",[290,104558,104559,104571,104583],{},[249,104560,104561,104565,104568],{},[295,104562,104563],{"align":23720},[92,104564,101047],{},[295,104566,104567],{"align":23720},"广义位置，例如小车位置、关节角、自由物体位置姿态",[295,104569,104570],{"align":23720},"MuJoCo 更新，也可以手动设置初始状态",[249,104572,104573,104577,104580],{},[295,104574,104575],{"align":23720},[92,104576,101050],{},[295,104578,104579],{"align":23720},"广义速度，例如小车速度、关节角速度",[295,104581,104582],{"align":23720},"MuJoCo 更新，也可以手动清零",[249,104584,104585,104589,104592],{},[295,104586,104587],{"align":23720},[92,104588,101053],{},[295,104590,104591],{"align":23720},"actuator 的控制输入",[295,104593,104594],{"align":23720},"主要由你的控制代码写入",[10,104596,9008,104597,100995,104599,104601],{},[92,104598,104007],{},[92,104600,104337],{}," 不一定同维。自由刚体就是典型例子：",[86,104603,104606],{"className":104604,"code":104605,"language":5170,"meta":14},[5168],"freejoint: qpos 7 维，qvel 6 维\n",[92,104607,104605],{"__ignoreMap":14},[66,104609,104611,100995,104613,104615],{"id":104610},"mj_step-和-mj_forward-的区别",[92,104612,101192],{},[92,104614,104227],{}," 的区别",[243,104617,104618,104631],{},[246,104619,104620],{},[249,104621,104622,104625,104628],{},[252,104623,104624],{"align":23720},"函数",[252,104626,104627],{"align":23720},"是否推进时间",[252,104629,104630],{"align":23720},"什么时候用",[290,104632,104633,104646],{},[249,104634,104635,104640,104643],{},[295,104636,104637],{"align":23720},[92,104638,104639],{},"mj_step(model, data)",[295,104641,104642],{"align":23720},"是",[295,104644,104645],{"align":23720},"正常仿真循环，每调用一次前进一步",[249,104647,104648,104653,104656],{},[295,104649,104650],{"align":23720},[92,104651,104652],{},"mj_forward(model, data)",[295,104654,104655],{"align":23720},"否",[295,104657,104658,104659,318,104661,104663],{"align":23720},"手动改了 ",[92,104660,104007],{},[92,104662,104337],{}," 后，刷新派生量",[10,104665,104666],{},"例如你写：",[86,104668,104670],{"className":30363,"code":104669,"language":30365,"meta":14,"style":14},"data.qpos[2] = 2.0\n",[92,104671,104672],{"__ignoreMap":14},[95,104673,104674,104677,104679,104681,104683],{"class":97,"line":98},[95,104675,104676],{"class":105},"data.qpos[",[95,104678,183],{"class":154},[95,104680,4425],{"class":105},[95,104682,151],{"class":101},[95,104684,104685],{"class":154}," 2.0\n",[10,104687,104688],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[86,104690,104691],{"className":30363,"code":104520,"language":30365,"meta":14,"style":14},[92,104692,104693],{"__ignoreMap":14},[95,104694,104695],{"class":97,"line":98},[95,104696,104520],{"class":105},[66,104698,104700],{"id":104699},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[10,104702,104703,104706,104707,104709],{},[92,104704,104705],{},"mujoco.mj_resetData(model, data)"," 会把 ",[92,104708,33386],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[86,104711,104713],{"className":30363,"code":104712,"language":30365,"meta":14,"style":14},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[92,104714,104715,104719,104729,104739],{"__ignoreMap":14},[95,104716,104717],{"class":97,"line":98},[95,104718,104503],{"class":105},[95,104720,104721,104724,104726],{"class":97,"line":15},[95,104722,104723],{"class":105},"data.qpos[:] ",[95,104725,151],{"class":101},[95,104727,104728],{"class":105}," random_qpos\n",[95,104730,104731,104734,104736],{"class":97,"line":1161},[95,104732,104733],{"class":105},"data.qvel[:] ",[95,104735,151],{"class":101},[95,104737,104738],{"class":154}," 0.0\n",[95,104740,104741],{"class":97,"line":1176},[95,104742,104520],{"class":105},[37,104744,101230],{"id":101229},[86,104746,104748],{"className":30363,"code":104747,"language":30365,"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",[92,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},[95,104751,104752,104754],{"class":97,"line":98},[95,104753,30377],{"class":101},[95,104755,101278],{"class":105},[95,104757,104758,104760,104762,104764],{"class":97,"line":15},[95,104759,30377],{"class":101},[95,104761,31365],{"class":105},[95,104763,31368],{"class":101},[95,104765,31371],{"class":105},[95,104767,104768],{"class":97,"line":1161},[95,104769,2382],{"emptyLinePlaceholder":21},[95,104771,104772],{"class":97,"line":1176},[95,104773,2382],{"emptyLinePlaceholder":21},[95,104775,104776,104778,104780],{"class":97,"line":1182},[95,104777,101291],{"class":154},[95,104779,13547],{"class":101},[95,104781,101296],{"class":210},[95,104783,104784],{"class":97,"line":1196},[95,104785,104786],{"class":210},"\u003Cmujoco model=\"state_api\">\n",[95,104788,104789],{"class":97,"line":1202},[95,104790,101306],{"class":210},[95,104792,104793],{"class":97,"line":1293},[95,104794,2382],{"emptyLinePlaceholder":21},[95,104796,104797],{"class":97,"line":1299},[95,104798,101315],{"class":210},[95,104800,104801],{"class":97,"line":1311},[95,104802,104803],{"class":210},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[95,104805,104806],{"class":97,"line":1594},[95,104807,2382],{"emptyLinePlaceholder":21},[95,104809,104810],{"class":97,"line":1599},[95,104811,104812],{"class":210},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[95,104814,104815],{"class":97,"line":1605},[95,104816,104817],{"class":210},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[95,104819,104820],{"class":97,"line":1610},[95,104821,104822],{"class":210},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[95,104824,104825],{"class":97,"line":1624},[95,104826,101344],{"class":210},[95,104828,104829],{"class":97,"line":1629},[95,104830,101349],{"class":210},[95,104832,104833],{"class":97,"line":1635},[95,104834,101354],{"class":210},[95,104836,104837],{"class":97,"line":1656},[95,104838,95675],{"class":210},[95,104840,104841],{"class":97,"line":1661},[95,104842,2382],{"emptyLinePlaceholder":21},[95,104844,104845],{"class":97,"line":1675},[95,104846,2382],{"emptyLinePlaceholder":21},[95,104848,104849,104851,104854,104857,104859,104862,104864],{"class":97,"line":1680},[95,104850,31932],{"class":101},[95,104852,104853],{"class":1945}," print_state",[95,104855,104856],{"class":105},"(prefix: ",[95,104858,1281],{"class":154},[95,104860,104861],{"class":105},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[95,104863,95663],{"class":154},[95,104865,3721],{"class":105},[95,104867,104868,104870],{"class":97,"line":1709},[95,104869,31284],{"class":154},[95,104871,104872],{"class":105},"(prefix)\n",[95,104874,104875,104877,104879,104882],{"class":97,"line":1714},[95,104876,31284],{"class":154},[95,104878,106],{"class":105},[95,104880,104881],{"class":210},"\"  timestep:\"",[95,104883,104884],{"class":105},", model.opt.timestep)\n",[95,104886,104887,104889,104891,104894],{"class":97,"line":1731},[95,104888,31284],{"class":154},[95,104890,106],{"class":105},[95,104892,104893],{"class":210},"\"  time:\"",[95,104895,101455],{"class":105},[95,104897,104898,104900,104902,104905,104908,104910],{"class":97,"line":1736},[95,104899,31284],{"class":154},[95,104901,106],{"class":105},[95,104903,104904],{"class":210},"\"  qpos:\"",[95,104906,104907],{"class":105},", np.round(data.qpos.copy(), ",[95,104909,399],{"class":154},[95,104911,30482],{"class":105},[95,104913,104914,104916,104918,104921,104924,104926],{"class":97,"line":1741},[95,104915,31284],{"class":154},[95,104917,106],{"class":105},[95,104919,104920],{"class":210},"\"  qvel:\"",[95,104922,104923],{"class":105},", np.round(data.qvel.copy(), ",[95,104925,399],{"class":154},[95,104927,30482],{"class":105},[95,104929,104930],{"class":97,"line":1746},[95,104931,2382],{"emptyLinePlaceholder":21},[95,104933,104934],{"class":97,"line":1760},[95,104935,2382],{"emptyLinePlaceholder":21},[95,104937,104938,104940,104942,104944,104946],{"class":97,"line":1765},[95,104939,31932],{"class":101},[95,104941,1955],{"class":1945},[95,104943,101375],{"class":105},[95,104945,95663],{"class":154},[95,104947,3721],{"class":105},[95,104949,104950,104952,104954,104956,104958],{"class":97,"line":2559},[95,104951,101384],{"class":105},[95,104953,151],{"class":101},[95,104955,101389],{"class":105},[95,104957,101291],{"class":154},[95,104959,112],{"class":105},[95,104961,104962,104964,104966],{"class":97,"line":2573},[95,104963,101398],{"class":105},[95,104965,151],{"class":101},[95,104967,101403],{"class":105},[95,104969,104970],{"class":97,"line":2581},[95,104971,2382],{"emptyLinePlaceholder":21},[95,104973,104974,104977,104980],{"class":97,"line":2586},[95,104975,104976],{"class":105},"    print_state(",[95,104978,104979],{"class":210},"\"initial\"",[95,104981,104982],{"class":105},", model, data)\n",[95,104984,104985],{"class":97,"line":2592},[95,104986,2382],{"emptyLinePlaceholder":21},[95,104988,104989,104991,104993,104995,104997,104999,105001],{"class":97,"line":2598},[95,104990,3183],{"class":101},[95,104992,101478],{"class":105},[95,104994,26028],{"class":101},[95,104996,32428],{"class":154},[95,104998,106],{"class":105},[95,105000,762],{"class":154},[95,105002,30771],{"class":105},[95,105004,105005],{"class":97,"line":2603},[95,105006,101493],{"class":105},[95,105008,105009],{"class":97,"line":7931},[95,105010,2382],{"emptyLinePlaceholder":21},[95,105012,105013,105015,105018],{"class":97,"line":7955},[95,105014,104976],{"class":105},[95,105016,105017],{"class":210},"\"after 50 steps\"",[95,105019,104982],{"class":105},[95,105021,105022],{"class":97,"line":7960},[95,105023,2382],{"emptyLinePlaceholder":21},[95,105025,105026],{"class":97,"line":7966},[95,105027,105028],{"class":105},"    mujoco.mj_resetData(model, data)\n",[95,105030,105031,105033,105036],{"class":97,"line":7993},[95,105032,104976],{"class":105},[95,105034,105035],{"class":210},"\"after reset\"",[95,105037,104982],{"class":105},[95,105039,105040],{"class":97,"line":7998},[95,105041,2382],{"emptyLinePlaceholder":21},[95,105043,105044,105047,105049,105051,105053],{"class":97,"line":8004},[95,105045,105046],{"class":105},"    data.qpos[",[95,105048,183],{"class":154},[95,105050,4425],{"class":105},[95,105052,151],{"class":101},[95,105054,104685],{"class":154},[95,105056,105057],{"class":97,"line":8016},[95,105058,105059],{"class":105},"    mujoco.mj_forward(model, data)\n",[95,105061,105062,105064,105067],{"class":97,"line":8028},[95,105063,104976],{"class":105},[95,105065,105066],{"class":210},"\"after manual qpos edit\"",[95,105068,104982],{"class":105},[95,105070,105071],{"class":97,"line":8040},[95,105072,2382],{"emptyLinePlaceholder":21},[95,105074,105075],{"class":97,"line":9699},[95,105076,2382],{"emptyLinePlaceholder":21},[95,105078,105079,105081,105083,105085,105087],{"class":97,"line":9724},[95,105080,1513],{"class":101},[95,105082,31205],{"class":154},[95,105084,101536],{"class":101},[95,105086,101539],{"class":210},[95,105088,3721],{"class":105},[95,105090,105091],{"class":97,"line":9747},[95,105092,101546],{"class":105},[10,105094,103547],{},[86,105096,105098],{"className":23806,"code":105097,"language":23808,"meta":14,"style":14},"touch ch3_python_state.py\n",[92,105099,105100],{"__ignoreMap":14},[95,105101,105102,105104],{"class":97,"line":98},[95,105103,101260],{"class":1945},[95,105105,105106],{"class":210}," ch3_python_state.py\n",[10,105108,102278],{},[86,105110,105112],{"className":23806,"code":105111,"language":23808,"meta":14,"style":14},"python ch3_python_state.py\n",[92,105113,105114],{"__ignoreMap":14},[95,105115,105116,105118],{"class":97,"line":98},[95,105117,30365],{"class":1945},[95,105119,105106],{"class":210},[66,105121,101549],{"id":101549},[10,105123,105124],{},"打印状态的函数：",[86,105126,105128],{"className":30363,"code":105127,"language":30365,"meta":14,"style":14},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[92,105129,105130],{"__ignoreMap":14},[95,105131,105132,105134,105136,105138,105140,105142,105144],{"class":97,"line":98},[95,105133,31932],{"class":101},[95,105135,104853],{"class":1945},[95,105137,104856],{"class":105},[95,105139,1281],{"class":154},[95,105141,104861],{"class":105},[95,105143,95663],{"class":154},[95,105145,3721],{"class":105},[10,105147,105148,105149,105151],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[92,105150,33386],{}," 里发生了什么。",[10,105153,105154],{},"推进 50 步：",[86,105156,105158],{"className":30363,"code":105157,"language":30365,"meta":14,"style":14},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[92,105159,105160,105176],{"__ignoreMap":14},[95,105161,105162,105164,105166,105168,105170,105172,105174],{"class":97,"line":98},[95,105163,3007],{"class":101},[95,105165,101478],{"class":105},[95,105167,26028],{"class":101},[95,105169,32428],{"class":154},[95,105171,106],{"class":105},[95,105173,762],{"class":154},[95,105175,30771],{"class":105},[95,105177,105178],{"class":97,"line":15},[95,105179,101676],{"class":105},[10,105181,105182,105183,105186,105187,105189],{},"由于 ",[92,105184,105185],{},"timestep=0.01","，所以 50 步后时间约为 ",[92,105188,35314],{}," 秒。",[10,105191,105192],{},"重置：",[86,105194,105195],{"className":30363,"code":104503,"language":30365,"meta":14,"style":14},[92,105196,105197],{"__ignoreMap":14},[95,105198,105199],{"class":97,"line":98},[95,105200,104503],{"class":105},[10,105202,105203],{},"这会把时间、位置、速度恢复到初始状态。",[10,105205,105206],{},"手动改高度：",[86,105208,105210],{"className":30363,"code":105209,"language":30365,"meta":14,"style":14},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[92,105211,105212,105224],{"__ignoreMap":14},[95,105213,105214,105216,105218,105220,105222],{"class":97,"line":98},[95,105215,104676],{"class":105},[95,105217,183],{"class":154},[95,105219,4425],{"class":105},[95,105221,151],{"class":101},[95,105223,104685],{"class":154},[95,105225,105226],{"class":97,"line":15},[95,105227,104520],{"class":105},[10,105229,105230,105231,105234,105235,105238],{},"这个例子里 ",[92,105232,105233],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[92,105236,105237],{},"2.0"," 表示把小球放到更高的位置。",[66,105240,101685],{"id":101685},[86,105242,105243],{"className":30363,"code":105127,"language":30365,"meta":14,"style":14},[92,105244,105245],{"__ignoreMap":14},[95,105246,105247,105249,105251,105253,105255,105257,105259],{"class":97,"line":98},[95,105248,31932],{"class":101},[95,105250,104853],{"class":1945},[95,105252,104856],{"class":105},[95,105254,1281],{"class":154},[95,105256,104861],{"class":105},[95,105258,95663],{"class":154},[95,105260,3721],{"class":105},[10,105262,105263],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[49,105265,105266,105275,105280],{},[52,105267,105268,105271,105272,105274],{},[92,105269,105270],{},"prefix","：一段文字，比如 ",[92,105273,104979],{},"，用来说明现在打印的是哪个阶段。",[52,105276,105277,105279],{},[92,105278,102062],{},"：MuJoCo 模型。",[52,105281,105282,105284],{},[92,105283,33386],{},"：MuJoCo 当前状态。",[10,105286,105287,318,105290,105293],{},[92,105288,105289],{},"prefix: str",[92,105291,105292],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[86,105295,105297],{"className":30363,"code":105296,"language":30365,"meta":14,"style":14},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[92,105298,105299],{"__ignoreMap":14},[95,105300,105301,105303,105305,105307,105309,105311],{"class":97,"line":98},[95,105302,30400],{"class":154},[95,105304,106],{"class":105},[95,105306,104904],{"class":210},[95,105308,104907],{"class":105},[95,105310,399],{"class":154},[95,105312,30482],{"class":105},[10,105314,105315,105318],{},[92,105316,105317],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[86,105320,105322],{"className":30363,"code":105321,"language":30365,"meta":14,"style":14},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[92,105323,105324,105336],{"__ignoreMap":14},[95,105325,105326,105328,105330,105332,105334],{"class":97,"line":98},[95,105327,101611],{"class":105},[95,105329,151],{"class":101},[95,105331,101389],{"class":105},[95,105333,101291],{"class":154},[95,105335,112],{"class":105},[95,105337,105338,105340,105342],{"class":97,"line":15},[95,105339,101635],{"class":105},[95,105341,151],{"class":101},[95,105343,101403],{"class":105},[10,105345,105346],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[86,105348,105350],{"className":30363,"code":105349,"language":30365,"meta":14,"style":14},"print_state(\"initial\", model, data)\n",[92,105351,105352],{"__ignoreMap":14},[95,105353,105354,105357,105359],{"class":97,"line":98},[95,105355,105356],{"class":105},"print_state(",[95,105358,104979],{"class":210},[95,105360,104982],{"class":105},[10,105362,105363,105364,105367],{},"调用刚才定义的 ",[92,105365,105366],{},"print_state"," 函数，打印初始状态。",[86,105369,105370],{"className":30363,"code":105157,"language":30365,"meta":14,"style":14},[92,105371,105372,105388],{"__ignoreMap":14},[95,105373,105374,105376,105378,105380,105382,105384,105386],{"class":97,"line":98},[95,105375,3007],{"class":101},[95,105377,101478],{"class":105},[95,105379,26028],{"class":101},[95,105381,32428],{"class":154},[95,105383,106],{"class":105},[95,105385,762],{"class":154},[95,105387,30771],{"class":105},[95,105389,105390],{"class":97,"line":15},[95,105391,101676],{"class":105},[10,105393,105394],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[86,105396,105397],{"className":30363,"code":104503,"language":30365,"meta":14,"style":14},[92,105398,105399],{"__ignoreMap":14},[95,105400,105401],{"class":97,"line":98},[95,105402,104503],{"class":105},[10,105404,105405,105406,105408,105409,105411],{},"重置 ",[92,105407,33386],{},"。注意它不会重新创建 ",[92,105410,102062],{},"，因为模型结构没有变，只是状态回到初始值。",[86,105413,105414],{"className":30363,"code":104669,"language":30365,"meta":14,"style":14},[92,105415,105416],{"__ignoreMap":14},[95,105417,105418,105420,105422,105424,105426],{"class":97,"line":98},[95,105419,104676],{"class":105},[95,105421,183],{"class":154},[95,105423,4425],{"class":105},[95,105425,151],{"class":101},[95,105427,104685],{"class":154},[10,105429,105430,105431,318,105434,318,105437,105439],{},"这行是“手动改状态”。在 freejoint 中，",[92,105432,105433],{},"qpos[0]",[92,105435,105436],{},"qpos[1]",[92,105438,105233],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[86,105441,105442],{"className":30363,"code":104520,"language":30365,"meta":14,"style":14},[92,105443,105444],{"__ignoreMap":14},[95,105445,105446],{"class":97,"line":98},[95,105447,104520],{"class":105},[10,105449,105450,105451,105453,105454,105456],{},"手动改完 ",[92,105452,104007],{}," 后，调用 ",[92,105455,104227],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[37,105458,102293],{"id":102292},[10,105460,105461],{},"你会看到:",[49,105463,105464,105469,105474,105477],{},[52,105465,105466,105467],{},"初始时间为 ",[92,105468,297],{},[52,105470,105471,105472],{},"50 步后时间约为 ",[92,105473,35314],{},[52,105475,105476],{},"reset 后状态恢复",[52,105478,105479,105480,105483,105484],{},"手动修改 ",[92,105481,105482],{},"data.qpos[2]"," 后，小球高度变为 ",[92,105485,105237],{},[10,105487,105488,105490],{},[92,105489,105233],{}," 在这个例子中表示自由刚体的 z 坐标。",[10,105492,105493],{},"输出里可以重点看三件事：",[49,105495,105496,105504,105509],{},[52,105497,105498,105500,105501,105503],{},[92,105499,2369],{}," 是否随着 ",[92,105502,101192],{}," 增加。",[52,105505,105506,105508],{},[92,105507,104007],{}," 的 z 坐标是否因为下落而变化。",[52,105510,105511,105513,105514,28370],{},[92,105512,104329],{}," 后时间是否回到 ",[92,105515,297],{},[37,105517,102325],{"id":102324},[49,105519,105520,105526,105532,105538,105541,105550],{},[52,105521,105522,105523,28370],{},"修改 timestep 为 ",[92,105524,105525],{},"0.005",[52,105527,105528,105529,28370],{},"重新运行，检查 50 步后时间是否约为 ",[92,105530,105531],{},"0.25",[52,105533,105534,105535,28370],{},"修改重力为 ",[92,105536,105537],{},"0 0 -1.0",[52,105539,105540],{},"观察小球下降速度是否变慢。",[52,105542,102388,105543,102391,105546,105549],{},[92,105544,105545],{},"data.qpos[2] = 2.0",[92,105547,105548],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[52,105551,105552,105553,105556],{},"注释掉 ",[92,105554,105555],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[37,105558,102430],{"id":102429},[66,105560,105562,105563,105565],{"id":105561},"修改-dataqpos-后位置没有更新","修改 ",[92,105564,101047],{}," 后位置没有更新",[10,105567,102439],{},[86,105569,105570],{"className":30363,"code":104520,"language":30365,"meta":14,"style":14},[92,105571,105572],{"__ignoreMap":14},[95,105573,105574],{"class":97,"line":98},[95,105575,104520],{"class":105},[66,105577,105578],{"id":105578},"数组维度看不懂",[10,105580,105581],{},"打印模型维度:",[86,105583,105585],{"className":30363,"code":105584,"language":30365,"meta":14,"style":14},"print(model.nq, model.nv, model.nu)\n",[92,105586,105587],{"__ignoreMap":14},[95,105588,105589,105591],{"class":97,"line":98},[95,105590,30400],{"class":154},[95,105592,105593],{"class":105},"(model.nq, model.nv, model.nu)\n",[243,105595,105596,105604],{},[246,105597,105598],{},[249,105599,105600,105602],{},[252,105601,104551],{"align":23720},[252,105603,100677],{"align":23720},[290,105605,105606,105616,105626],{},[249,105607,105608,105613],{},[295,105609,105610],{"align":23720},[92,105611,105612],{},"nq",[295,105614,105615],{"align":23720},"位置变量数量",[249,105617,105618,105623],{},[295,105619,105620],{"align":23720},[92,105621,105622],{},"nv",[295,105624,105625],{"align":23720},"速度变量数量",[249,105627,105628,105632],{},[295,105629,105630],{"align":23720},[92,105631,102139],{},[295,105633,105634],{"align":23720},"控制输入数量",[66,105636,105638,105639,105641],{"id":105637},"误以为-qpos-一定等于关节数","误以为 ",[92,105640,104007],{}," 一定等于关节数",[10,105643,105644,105645,82507,105647,105649,105650,105652],{},"不是。例如 ",[92,105646,101597],{},[92,105648,104007],{}," 是 7 维，但 ",[92,105651,104337],{}," 是 6 维。",[66,105654,105656,105657,105659],{"id":105655},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[92,105658,104007],{}," 的第几位",[10,105661,105662],{},"初学时可以先打印：",[86,105664,105666],{"className":30363,"code":105665,"language":30365,"meta":14,"style":14},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[92,105667,105668,105678,105688,105700],{"__ignoreMap":14},[95,105669,105670,105672,105674,105676],{"class":97,"line":98},[95,105671,30400],{"class":154},[95,105673,106],{"class":105},[95,105675,101416],{"class":210},[95,105677,101419],{"class":105},[95,105679,105680,105682,105684,105686],{"class":97,"line":15},[95,105681,30400],{"class":154},[95,105683,106],{"class":105},[95,105685,101428],{"class":210},[95,105687,101431],{"class":105},[95,105689,105690,105692,105694,105697],{"class":97,"line":1161},[95,105691,30400],{"class":154},[95,105693,106],{"class":105},[95,105695,105696],{"class":210},"\"qpos:\"",[95,105698,105699],{"class":105},", data.qpos)\n",[95,105701,105702,105704,105706,105709],{"class":97,"line":1176},[95,105703,30400],{"class":154},[95,105705,106],{"class":105},[95,105707,105708],{"class":210},"\"qvel:\"",[95,105710,105711],{"class":105},", data.qvel)\n",[10,105713,105714],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[66,105716,105717],{"id":105717},"仿真结果每次都一样",[10,105719,105720,105721,105723],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[92,105722,104007],{},"、目标点或控制输入。",[37,105725,102584],{"id":102583},[10,105727,105728,105729,24603],{},"Python 控制 MuJoCo 的核心就是读写 ",[92,105730,33386],{},[49,105732,105733,105741,105746,105751],{},[52,105734,105735,105736,100995,105738,105740],{},"用 ",[92,105737,101047],{},[92,105739,101050],{}," 读取状态。",[52,105742,105735,105743,105745],{},[92,105744,101053],{}," 写入控制。",[52,105747,105735,105748,105750],{},[92,105749,101192],{}," 推进时间。",[52,105752,105753,105754,105756],{},"手动改状态后用 ",[92,105755,104227],{}," 刷新派生量。",[10,105758,105759],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5109,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":1161,"text":105770},"qpos、qvel、ctrl 是什么",{"id":104610,"depth":1161,"text":105772},"mj_step 和 mj_forward 的区别",{"id":104699,"depth":1161,"text":104700},{"id":101229,"depth":15,"text":101230,"children":105775},[105776,105777],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":105783},"修改 data.qpos 后位置没有更新",{"id":105578,"depth":1161,"text":105578},{"id":105637,"depth":1161,"text":105786},"误以为 qpos 一定等于关节数",{"id":105655,"depth":1161,"text":105788},"不知道某个元素在 qpos 的第几位",{"id":105717,"depth":1161,"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":21,"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],[33,105802,105798],{"id":105803},"_4关节actuator-与力控制",[37,105805,100624],{"id":100623},[10,105807,105808],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[10,105810,104308],{},[49,105812,105813,105819,105824,105828,105833],{},[52,105814,105815,105818],{},[92,105816,105817],{},"hinge"," 关节",[52,105820,105821],{},[92,105822,105823],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[52,105825,105826],{},[92,105827,101053],{},[52,105829,105830],{},[92,105831,105832],{},"ctrlrange",[52,105834,105835],{},"读取关节角和角速度",[10,105837,105838],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[86,105840,105842],{"className":30363,"code":105841,"language":30365,"meta":14,"style":14},"data.ctrl[0] = ...\n",[92,105843,105844],{"__ignoreMap":14},[95,105845,105846,105849,105851,105853,105855],{"class":97,"line":98},[95,105847,105848],{"class":105},"data.ctrl[",[95,105850,297],{"class":154},[95,105852,4425],{"class":105},[95,105854,151],{"class":101},[95,105856,105857],{"class":154}," ...\n",[10,105859,105860],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[37,105862,100747],{"id":100746},[10,105864,100750],{},[86,105866,105867],{"className":23806,"code":104365,"language":23808,"meta":14,"style":14},[92,105868,105869],{"__ignoreMap":14},[95,105870,105871,105873,105875,105877,105879,105881,105883,105885,105887],{"class":97,"line":98},[95,105872,24561],{"class":1945},[95,105874,26300],{"class":210},[95,105876,23818],{"class":210},[95,105878,26385],{"class":154},[95,105880,104380],{"class":210},[95,105882,100775],{"class":210},[95,105884,102478],{"class":210},[95,105886,100791],{"class":210},[95,105888,104389],{"class":210},[10,105890,102796],{},[86,105892,105893],{"className":23806,"code":100896,"language":23808,"meta":14,"style":14},[92,105894,105895],{"__ignoreMap":14},[95,105896,105897,105899,105901,105903],{"class":97,"line":98},[95,105898,23815],{"class":1945},[95,105900,23818],{"class":210},[95,105902,100907],{"class":210},[95,105904,100910],{"class":210},[10,105906,102813],{},[86,105908,105910],{"className":23806,"code":105909,"language":23808,"meta":14,"style":14},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[92,105911,105912,105929,105938],{"__ignoreMap":14},[95,105913,105914,105916,105918,105920,105923,105925,105927],{"class":97,"line":98},[95,105915,30315],{"class":1945},[95,105917,29161],{"class":210},[95,105919,25100],{"class":154},[95,105921,105922],{"class":210}," mujoco-control",[95,105924,100952],{"class":210},[95,105926,100955],{"class":154},[95,105928,100958],{"class":154},[95,105930,105931,105933,105935],{"class":97,"line":15},[95,105932,30315],{"class":1945},[95,105934,100965],{"class":210},[95,105936,105937],{"class":210}," mujoco-control\n",[95,105939,105940,105942,105944,105946],{"class":97,"line":1161},[95,105941,23815],{"class":1945},[95,105943,23818],{"class":210},[95,105945,100907],{"class":210},[95,105947,100910],{"class":210},[10,105949,100981],{},[49,105951,105952,105958,105965,105971],{},[52,105953,105954,105957],{},[92,105955,105956],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[52,105959,105960,105962,105963,28370],{},[92,105961,101053],{}," 长度等于 ",[92,105964,102135],{},[52,105966,82199,105967,105970],{},[92,105968,105969],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[52,105972,105973],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[37,105975,101022],{"id":101021},[10,105977,105978],{},"关节决定 body 如何运动:",[86,105980,105982],{"className":53044,"code":105981,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[92,105983,105984],{"__ignoreMap":14},[95,105985,105986,105988,105990,105992,105994,105997,105999,106001,106003,106006,106008,106011],{"class":97,"line":98},[95,105987,1016],{"class":105},[95,105989,102933],{"class":51277},[95,105991,14903],{"class":1945},[95,105993,151],{"class":105},[95,105995,105996],{"class":210},"\"hinge\"",[95,105998,53801],{"class":1945},[95,106000,151],{"class":105},[95,106002,105996],{"class":210},[95,106004,106005],{"class":1945}," axis",[95,106007,151],{"class":105},[95,106009,106010],{"class":210},"\"0 1 0\"",[95,106012,101121],{"class":105},[10,106014,103029],{},[49,106016,106017,106022,106025],{},[52,106018,106019,106020],{},"名字是 ",[92,106021,105817],{},[52,106023,106024],{},"类型是旋转关节",[52,106026,106027],{},"绕 y 轴旋转",[10,106029,106030],{},"actuator 决定如何施加控制:",[86,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",[92,106035,106036,106045,106091],{"__ignoreMap":14},[95,106037,106038,106040,106043],{"class":97,"line":98},[95,106039,1016],{"class":105},[95,106041,106042],{"class":51277},"actuator",[95,106044,51284],{"class":105},[95,106046,106047,106049,106052,106054,106056,106059,106062,106064,106066,106069,106071,106073,106076,106078,106081,106084,106086,106089],{"class":97,"line":15},[95,106048,52121],{"class":105},[95,106050,106051],{"class":51277},"motor",[95,106053,14903],{"class":1945},[95,106055,151],{"class":105},[95,106057,106058],{"class":210},"\"hinge_motor\"",[95,106060,106061],{"class":1945}," joint",[95,106063,151],{"class":105},[95,106065,105996],{"class":210},[95,106067,106068],{"class":1945}," gear",[95,106070,151],{"class":105},[95,106072,3660],{"class":210},[95,106074,106075],{"class":1945}," ctrlrange",[95,106077,151],{"class":105},[95,106079,106080],{"class":210},"\"-2 2\"",[95,106082,106083],{"class":1945}," ctrllimited",[95,106085,151],{"class":105},[95,106087,106088],{"class":210},"\"true\"",[95,106090,101121],{"class":105},[95,106092,106093,106095,106097],{"class":97,"line":1161},[95,106094,51762],{"class":105},[95,106096,106042],{"class":51277},[95,106098,51284],{"class":105},[10,106100,106101,106104,106105,28370],{},[92,106102,106103],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[92,106106,106107],{},"[-2, 2]",[66,106109,106111],{"id":106110},"joint-和-actuator-的关系","joint 和 actuator 的关系",[10,106113,106114],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[243,106116,106117,106127],{},[246,106118,106119],{},[249,106120,106121,106123,106125],{},[252,106122,25738],{"align":23720},[252,106124,102673],{"align":23720},[252,106126,100711],{"align":23720},[290,106128,106129,106139],{},[249,106130,106131,106133,106136],{},[295,106132,102933],{"align":23720},[295,106134,106135],{"align":23720},"定义能怎么动",[295,106137,106138],{"align":23720},"门轴允许门旋转",[249,106140,106141,106143,106146],{},[295,106142,106042],{"align":23720},[295,106144,106145],{"align":23720},"定义怎么施力或控制",[295,106147,106148],{"align":23720},"人推门、马达带动门",[10,106150,106151,106152,106154],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[92,106153,101053],{}," 主动控制它。",[10,106156,106157],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[66,106159,106161],{"id":106160},"hinge-joint","hinge joint",[86,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",[92,106166,106167],{"__ignoreMap":14},[95,106168,106169,106171,106173,106175,106177,106179,106181,106183,106185,106187,106189,106191,106194,106196,106199],{"class":97,"line":98},[95,106170,1016],{"class":105},[95,106172,102933],{"class":51277},[95,106174,14903],{"class":1945},[95,106176,151],{"class":105},[95,106178,105996],{"class":210},[95,106180,53801],{"class":1945},[95,106182,151],{"class":105},[95,106184,105996],{"class":210},[95,106186,106005],{"class":1945},[95,106188,151],{"class":105},[95,106190,106010],{"class":210},[95,106192,106193],{"class":1945}," damping",[95,106195,151],{"class":105},[95,106197,106198],{"class":210},"\"0.1\"",[95,106200,101121],{"class":105},[10,106202,106203],{},"含义：",[49,106205,106206,106212,106218],{},[52,106207,106208,106211],{},[92,106209,106210],{},"type=\"hinge\"","：只能绕一个轴旋转。",[52,106213,106214,106217],{},[92,106215,106216],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[52,106219,106220,106223],{},[92,106221,106222],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[66,106225,106227],{"id":106226},"motor-actuator","motor actuator",[86,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",[92,106232,106233],{"__ignoreMap":14},[95,106234,106235,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269],{"class":97,"line":98},[95,106236,1016],{"class":105},[95,106238,106051],{"class":51277},[95,106240,14903],{"class":1945},[95,106242,151],{"class":105},[95,106244,106058],{"class":210},[95,106246,106061],{"class":1945},[95,106248,151],{"class":105},[95,106250,105996],{"class":210},[95,106252,106068],{"class":1945},[95,106254,151],{"class":105},[95,106256,3660],{"class":210},[95,106258,106075],{"class":1945},[95,106260,151],{"class":105},[95,106262,106080],{"class":210},[95,106264,106083],{"class":1945},[95,106266,151],{"class":105},[95,106268,106088],{"class":210},[95,106270,101121],{"class":105},[10,106272,106203],{},[49,106274,106275,106284,106290,106296],{},[52,106276,106277,106280,106281,106283],{},[92,106278,106279],{},"joint=\"hinge\"","：这个电机作用在名为 ",[92,106282,105817],{}," 的关节上。",[52,106285,106286,106289],{},[92,106287,106288],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[52,106291,106292,106295],{},[92,106293,106294],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[52,106297,106298,106301],{},[92,106299,106300],{},"ctrllimited=\"true\"","：启用控制范围限制。",[10,106303,106304],{},"简单理解：",[86,106306,106309],{"className":106307,"code":106308,"language":5170,"meta":14},[5168],"实际施加效果 ≈ data.ctrl[0] * gear\n",[92,106310,106308],{"__ignoreMap":14},[10,106312,106313],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[37,106315,101230],{"id":101229},[86,106317,106319],{"className":30363,"code":106318,"language":30365,"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",[92,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},[95,106322,106323,106325],{"class":97,"line":98},[95,106324,30377],{"class":101},[95,106326,106327],{"class":105}," math\n",[95,106329,106330],{"class":97,"line":15},[95,106331,2382],{"emptyLinePlaceholder":21},[95,106333,106334,106336],{"class":97,"line":1161},[95,106335,30377],{"class":101},[95,106337,101278],{"class":105},[95,106339,106340,106342,106344,106346],{"class":97,"line":1176},[95,106341,30377],{"class":101},[95,106343,31365],{"class":105},[95,106345,31368],{"class":101},[95,106347,31371],{"class":105},[95,106349,106350],{"class":97,"line":1182},[95,106351,2382],{"emptyLinePlaceholder":21},[95,106353,106354],{"class":97,"line":1196},[95,106355,2382],{"emptyLinePlaceholder":21},[95,106357,106358,106360,106362],{"class":97,"line":1202},[95,106359,101291],{"class":154},[95,106361,13547],{"class":101},[95,106363,101296],{"class":210},[95,106365,106366],{"class":97,"line":1293},[95,106367,106368],{"class":210},"\u003Cmujoco model=\"one_link_motor\">\n",[95,106370,106371],{"class":97,"line":1299},[95,106372,106373],{"class":210},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[95,106375,106376],{"class":97,"line":1311},[95,106377,2382],{"emptyLinePlaceholder":21},[95,106379,106380],{"class":97,"line":1594},[95,106381,101315],{"class":210},[95,106383,106384],{"class":97,"line":1599},[95,106385,106386],{"class":210},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[95,106388,106389],{"class":97,"line":1605},[95,106390,106391],{"class":210},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[95,106393,106394],{"class":97,"line":1610},[95,106395,2382],{"emptyLinePlaceholder":21},[95,106397,106398],{"class":97,"line":1624},[95,106399,106400],{"class":210},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[95,106402,106403],{"class":97,"line":1629},[95,106404,106405],{"class":210},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[95,106407,106408],{"class":97,"line":1635},[95,106409,106410],{"class":210},"        \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",[95,106412,106413],{"class":97,"line":1656},[95,106414,106415],{"class":210},"      \u003C\u002Fbody>\n",[95,106417,106418],{"class":97,"line":1661},[95,106419,101344],{"class":210},[95,106421,106422],{"class":97,"line":1675},[95,106423,101349],{"class":210},[95,106425,106426],{"class":97,"line":1680},[95,106427,2382],{"emptyLinePlaceholder":21},[95,106429,106430],{"class":97,"line":1709},[95,106431,106432],{"class":210},"  \u003Cactuator>\n",[95,106434,106435],{"class":97,"line":1714},[95,106436,106437],{"class":210},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[95,106439,106440],{"class":97,"line":1731},[95,106441,106442],{"class":210},"  \u003C\u002Factuator>\n",[95,106444,106445],{"class":97,"line":1736},[95,106446,101354],{"class":210},[95,106448,106449],{"class":97,"line":1741},[95,106450,95675],{"class":210},[95,106452,106453],{"class":97,"line":1746},[95,106454,2382],{"emptyLinePlaceholder":21},[95,106456,106457],{"class":97,"line":1760},[95,106458,2382],{"emptyLinePlaceholder":21},[95,106460,106461,106463,106465,106467,106469],{"class":97,"line":1765},[95,106462,31932],{"class":101},[95,106464,1955],{"class":1945},[95,106466,101375],{"class":105},[95,106468,95663],{"class":154},[95,106470,3721],{"class":105},[95,106472,106473,106475,106477,106479,106481],{"class":97,"line":2559},[95,106474,101384],{"class":105},[95,106476,151],{"class":101},[95,106478,101389],{"class":105},[95,106480,101291],{"class":154},[95,106482,112],{"class":105},[95,106484,106485,106487,106489],{"class":97,"line":2573},[95,106486,101398],{"class":105},[95,106488,151],{"class":101},[95,106490,101403],{"class":105},[95,106492,106493],{"class":97,"line":2581},[95,106494,2382],{"emptyLinePlaceholder":21},[95,106496,106497,106499,106501,106503],{"class":97,"line":2586},[95,106498,31284],{"class":154},[95,106500,106],{"class":105},[95,106502,101416],{"class":210},[95,106504,101419],{"class":105},[95,106506,106507,106509,106511,106513],{"class":97,"line":2592},[95,106508,31284],{"class":154},[95,106510,106],{"class":105},[95,106512,101428],{"class":210},[95,106514,101431],{"class":105},[95,106516,106517,106519,106521,106523],{"class":97,"line":2598},[95,106518,31284],{"class":154},[95,106520,106],{"class":105},[95,106522,101440],{"class":210},[95,106524,101443],{"class":105},[95,106526,106527],{"class":97,"line":2603},[95,106528,2382],{"emptyLinePlaceholder":21},[95,106530,106531,106533,106536,106538,106540],{"class":97,"line":7931},[95,106532,3083],{"class":101},[95,106534,106535],{"class":105}," model.nu ",[95,106537,20931],{"class":101},[95,106539,25103],{"class":154},[95,106541,3721],{"class":105},[95,106543,106544,106546,106548,106550,106553],{"class":97,"line":7955},[95,106545,103409],{"class":101},[95,106547,103412],{"class":154},[95,106549,106],{"class":105},[95,106551,106552],{"class":210},"\"expected exactly one actuator\"",[95,106554,112],{"class":105},[95,106556,106557],{"class":97,"line":7960},[95,106558,2382],{"emptyLinePlaceholder":21},[95,106560,106561,106563,106565,106567,106569,106571,106574],{"class":97,"line":7966},[95,106562,3183],{"class":101},[95,106564,31601],{"class":105},[95,106566,26028],{"class":101},[95,106568,32428],{"class":154},[95,106570,106],{"class":105},[95,106572,106573],{"class":154},"2000",[95,106575,30771],{"class":105},[95,106577,106578,106581,106583,106585,106587],{"class":97,"line":7993},[95,106579,106580],{"class":105},"        t ",[95,106582,151],{"class":101},[95,106584,31601],{"class":105},[95,106586,561],{"class":101},[95,106588,106589],{"class":105}," model.opt.timestep\n",[95,106591,106592,106595,106597,106599,106601,106604,106606,106609,106611,106613,106616,106618,106620,106622],{"class":97,"line":7998},[95,106593,106594],{"class":105},"        data.ctrl[",[95,106596,297],{"class":154},[95,106598,4425],{"class":105},[95,106600,151],{"class":101},[95,106602,106603],{"class":154}," 1.5",[95,106605,6501],{"class":101},[95,106607,106608],{"class":105}," math.sin(",[95,106610,105237],{"class":154},[95,106612,6501],{"class":101},[95,106614,106615],{"class":105}," math.pi ",[95,106617,561],{"class":101},[95,106619,61844],{"class":154},[95,106621,6501],{"class":101},[95,106623,106624],{"class":105}," t)\n",[95,106626,106627],{"class":97,"line":8004},[95,106628,101493],{"class":105},[95,106630,106631],{"class":97,"line":8016},[95,106632,2382],{"emptyLinePlaceholder":21},[95,106634,106635,106637,106639,106642],{"class":97,"line":8028},[95,106636,31284],{"class":154},[95,106638,106],{"class":105},[95,106640,106641],{"class":210},"\"time:\"",[95,106643,101455],{"class":105},[95,106645,106646,106648,106650,106653,106655,106657],{"class":97,"line":8040},[95,106647,31284],{"class":154},[95,106649,106],{"class":105},[95,106651,106652],{"class":210},"\"joint qpos:\"",[95,106654,104907],{"class":105},[95,106656,399],{"class":154},[95,106658,30482],{"class":105},[95,106660,106661,106663,106665,106668,106670,106672],{"class":97,"line":9699},[95,106662,31284],{"class":154},[95,106664,106],{"class":105},[95,106666,106667],{"class":210},"\"joint qvel:\"",[95,106669,104923],{"class":105},[95,106671,399],{"class":154},[95,106673,30482],{"class":105},[95,106675,106676,106678,106680,106683],{"class":97,"line":9724},[95,106677,31284],{"class":154},[95,106679,106],{"class":105},[95,106681,106682],{"class":210},"\"last ctrl:\"",[95,106684,106685],{"class":105},", data.ctrl.copy())\n",[95,106687,106688],{"class":97,"line":9747},[95,106689,2382],{"emptyLinePlaceholder":21},[95,106691,106692],{"class":97,"line":9771},[95,106693,2382],{"emptyLinePlaceholder":21},[95,106695,106696,106698,106700,106702,106704],{"class":97,"line":9776},[95,106697,1513],{"class":101},[95,106699,31205],{"class":154},[95,106701,101536],{"class":101},[95,106703,101539],{"class":210},[95,106705,3721],{"class":105},[95,106707,106708],{"class":97,"line":9781},[95,106709,101546],{"class":105},[10,106711,103547],{},[86,106713,106715],{"className":23806,"code":106714,"language":23808,"meta":14,"style":14},"touch ch4_joint_motor.py\n",[92,106716,106717],{"__ignoreMap":14},[95,106718,106719,106721],{"class":97,"line":98},[95,106720,101260],{"class":1945},[95,106722,106723],{"class":210}," ch4_joint_motor.py\n",[10,106725,102278],{},[86,106727,106729],{"className":23806,"code":106728,"language":23808,"meta":14,"style":14},"python ch4_joint_motor.py\n",[92,106730,106731],{"__ignoreMap":14},[95,106732,106733,106735],{"class":97,"line":98},[95,106734,30365],{"class":1945},[95,106736,106723],{"class":210},[66,106738,101549],{"id":101549},[10,106740,106741],{},"检查 actuator 数量：",[86,106743,106745],{"className":30363,"code":106744,"language":30365,"meta":14,"style":14},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[92,106746,106747,106759],{"__ignoreMap":14},[95,106748,106749,106751,106753,106755,106757],{"class":97,"line":98},[95,106750,1513],{"class":101},[95,106752,106535],{"class":105},[95,106754,20931],{"class":101},[95,106756,25103],{"class":154},[95,106758,3721],{"class":105},[95,106760,106761,106763,106765,106767,106769],{"class":97,"line":15},[95,106762,103872],{"class":101},[95,106764,103412],{"class":154},[95,106766,106],{"class":105},[95,106768,106552],{"class":210},[95,106770,112],{"class":105},[10,106772,106773,106775,106776,106778],{},[92,106774,102135],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[92,106777,101053],{}," 长度应该是 1。",[10,106780,106781],{},"产生正弦控制信号：",[86,106783,106785],{"className":30363,"code":106784,"language":30365,"meta":14,"style":14},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[92,106786,106787],{"__ignoreMap":14},[95,106788,106789,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815],{"class":97,"line":98},[95,106790,105848],{"class":105},[95,106792,297],{"class":154},[95,106794,4425],{"class":105},[95,106796,151],{"class":101},[95,106798,106603],{"class":154},[95,106800,6501],{"class":101},[95,106802,106608],{"class":105},[95,106804,105237],{"class":154},[95,106806,6501],{"class":101},[95,106808,106615],{"class":105},[95,106810,561],{"class":101},[95,106812,61844],{"class":154},[95,106814,6501],{"class":101},[95,106816,106624],{"class":105},[10,106818,106819],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[10,106821,101650],{},[86,106823,106824],{"className":30363,"code":104482,"language":30365,"meta":14,"style":14},[92,106825,106826],{"__ignoreMap":14},[95,106827,106828],{"class":97,"line":98},[95,106829,104482],{"class":105},[10,106831,106832],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[66,106834,101685],{"id":101685},[86,106836,106838],{"className":30363,"code":106837,"language":30365,"meta":14,"style":14},"import math\n",[92,106839,106840],{"__ignoreMap":14},[95,106841,106842,106844],{"class":97,"line":98},[95,106843,30377],{"class":101},[95,106845,106327],{"class":105},[10,106847,106848,106849,100995,106852,106855],{},"导入 Python 标准库里的数学模块。后面要用 ",[92,106850,106851],{},"math.sin",[92,106853,106854],{},"math.pi"," 生成周期变化的控制信号。",[86,106857,106858],{"className":30363,"code":103663,"language":30365,"meta":14,"style":14},[92,106859,106860,106866],{"__ignoreMap":14},[95,106861,106862,106864],{"class":97,"line":98},[95,106863,30377],{"class":101},[95,106865,101278],{"class":105},[95,106867,106868,106870,106872,106874],{"class":97,"line":15},[95,106869,30377],{"class":101},[95,106871,31365],{"class":105},[95,106873,31368],{"class":101},[95,106875,31371],{"class":105},[10,106877,106878],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[86,106880,106881],{"className":53044,"code":106164,"language":53046,"meta":14,"style":14},[92,106882,106883],{"__ignoreMap":14},[95,106884,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913],{"class":97,"line":98},[95,106886,1016],{"class":105},[95,106888,102933],{"class":51277},[95,106890,14903],{"class":1945},[95,106892,151],{"class":105},[95,106894,105996],{"class":210},[95,106896,53801],{"class":1945},[95,106898,151],{"class":105},[95,106900,105996],{"class":210},[95,106902,106005],{"class":1945},[95,106904,151],{"class":105},[95,106906,106010],{"class":210},[95,106908,106193],{"class":1945},[95,106910,151],{"class":105},[95,106912,106198],{"class":210},[95,106914,101121],{"class":105},[10,106916,106917,106918,106920,106921,106923,106924,106926],{},"这行定义关节。",[92,106919,105817],{}," 表示旋转关节。",[92,106922,106216],{}," 表示绕 y 轴旋转。",[92,106925,106222],{}," 表示有一点阻尼，运动不会完全无损耗。",[86,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",[92,106931,106932],{"__ignoreMap":14},[95,106933,106934,106936,106938,106940,106942,106945,106947,106949,106952,106955,106957,106960,106962,106964,106966,106968,106970,106973],{"class":97,"line":98},[95,106935,1016],{"class":105},[95,106937,101097],{"class":51277},[95,106939,14903],{"class":1945},[95,106941,151],{"class":105},[95,106943,106944],{"class":210},"\"link_geom\"",[95,106946,53801],{"class":1945},[95,106948,151],{"class":105},[95,106950,106951],{"class":210},"\"capsule\"",[95,106953,106954],{"class":1945}," fromto",[95,106956,151],{"class":105},[95,106958,106959],{"class":210},"\"0 0 0 0 0 0.5\"",[95,106961,101113],{"class":1945},[95,106963,151],{"class":105},[95,106965,103755],{"class":210},[95,106967,101978],{"class":1945},[95,106969,151],{"class":105},[95,106971,106972],{"class":210},"\"0.5\"",[95,106974,101121],{"class":105},[10,106976,106977,106978,106980,106981,106983,106984,106987,106988,28370,106991,106993],{},"这行定义摆杆的形状。",[92,106979,103142],{}," 是胶囊体，适合表示杆子。",[92,106982,103153],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[92,106985,106986],{},"(0,0,0)"," 延伸到 ",[92,106989,106990],{},"(0,0,0.5)",[92,106992,103147],{}," 是半径。",[86,106995,106996],{"className":53044,"code":106230,"language":53046,"meta":14,"style":14},[92,106997,106998],{"__ignoreMap":14},[95,106999,107000,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034],{"class":97,"line":98},[95,107001,1016],{"class":105},[95,107003,106051],{"class":51277},[95,107005,14903],{"class":1945},[95,107007,151],{"class":105},[95,107009,106058],{"class":210},[95,107011,106061],{"class":1945},[95,107013,151],{"class":105},[95,107015,105996],{"class":210},[95,107017,106068],{"class":1945},[95,107019,151],{"class":105},[95,107021,3660],{"class":210},[95,107023,106075],{"class":1945},[95,107025,151],{"class":105},[95,107027,106080],{"class":210},[95,107029,106083],{"class":1945},[95,107031,151],{"class":105},[95,107033,106088],{"class":210},[95,107035,101121],{"class":105},[10,107037,107038,107039,107041,107042,107045,107046,107048],{},"这行定义电机。它作用在 ",[92,107040,105817],{}," 关节上。",[92,107043,107044],{},"gear"," 可以理解成放大倍数。",[92,107047,105832],{}," 限制控制输入范围。",[86,107050,107051],{"className":30363,"code":106744,"language":30365,"meta":14,"style":14},[92,107052,107053,107065],{"__ignoreMap":14},[95,107054,107055,107057,107059,107061,107063],{"class":97,"line":98},[95,107056,1513],{"class":101},[95,107058,106535],{"class":105},[95,107060,20931],{"class":101},[95,107062,25103],{"class":154},[95,107064,3721],{"class":105},[95,107066,107067,107069,107071,107073,107075],{"class":97,"line":15},[95,107068,103872],{"class":101},[95,107070,103412],{"class":154},[95,107072,106],{"class":105},[95,107074,106552],{"class":210},[95,107076,112],{"class":105},[10,107078,107079,107081],{},[92,107080,102135],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[86,107083,107085],{"className":30363,"code":107084,"language":30365,"meta":14,"style":14},"for step in range(2000):\n",[92,107086,107087],{"__ignoreMap":14},[95,107088,107089,107091,107093,107095,107097,107099,107101],{"class":97,"line":98},[95,107090,3007],{"class":101},[95,107092,31601],{"class":105},[95,107094,26028],{"class":101},[95,107096,32428],{"class":154},[95,107098,106],{"class":105},[95,107100,106573],{"class":154},[95,107102,30771],{"class":105},[10,107104,107105,107106,107108,107109,107112],{},"循环 2000 步。这里没有用 ",[92,107107,1098],{},"，而是用 ",[92,107110,107111],{},"step","，因为后面要用当前步数计算时间。",[86,107114,107116],{"className":30363,"code":107115,"language":30365,"meta":14,"style":14},"t = step * model.opt.timestep\n",[92,107117,107118],{"__ignoreMap":14},[95,107119,107120,107123,107125,107127,107129],{"class":97,"line":98},[95,107121,107122],{"class":105},"t ",[95,107124,151],{"class":101},[95,107126,31601],{"class":105},[95,107128,561],{"class":101},[95,107130,106589],{"class":105},[10,107132,107133],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[86,107135,107136],{"className":30363,"code":106784,"language":30365,"meta":14,"style":14},[92,107137,107138],{"__ignoreMap":14},[95,107139,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166],{"class":97,"line":98},[95,107141,105848],{"class":105},[95,107143,297],{"class":154},[95,107145,4425],{"class":105},[95,107147,151],{"class":101},[95,107149,106603],{"class":154},[95,107151,6501],{"class":101},[95,107153,106608],{"class":105},[95,107155,105237],{"class":154},[95,107157,6501],{"class":101},[95,107159,106615],{"class":105},[95,107161,561],{"class":101},[95,107163,61844],{"class":154},[95,107165,6501],{"class":101},[95,107167,106624],{"class":105},[10,107169,107170],{},"这行给电机输入一个正弦波。拆开看：",[49,107172,107173,107179,107185],{},[52,107174,107175,107178],{},[92,107176,107177],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[52,107180,107181,107184],{},[92,107182,107183],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[52,107186,107187,107190],{},[92,107188,107189],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[10,107192,107193],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[86,107195,107197],{"className":30363,"code":107196,"language":30365,"meta":14,"style":14},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[92,107198,107199],{"__ignoreMap":14},[95,107200,107201,107203,107205,107207,107209,107211],{"class":97,"line":98},[95,107202,30400],{"class":154},[95,107204,106],{"class":105},[95,107206,106652],{"class":210},[95,107208,104907],{"class":105},[95,107210,399],{"class":154},[95,107212,30482],{"class":105},[10,107214,107215,107216,107218],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[92,107217,101047],{}," 只有一个数。",[37,107220,102293],{"id":102292},[10,107222,107223],{},"输出类似:",[86,107225,107228],{"className":107226,"code":107227,"language":5170,"meta":14},[5168],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[92,107229,107227],{"__ignoreMap":14},[10,107231,107232,107233,107235],{},"这里 ",[92,107234,106103],{}," 是电机输入。",[10,107237,107238,107241,107242,107245],{},[92,107239,107240],{},"joint qpos"," 是关节角度，单位通常是弧度。",[92,107243,107244],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[10,107247,107248],{},"角度单位提示：",[86,107250,107253],{"className":107251,"code":107252,"language":5170,"meta":14},[5168],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[92,107254,107252],{"__ignoreMap":14},[10,107256,107257,107258,107260,107261,107263],{},"如果你看到 ",[92,107259,104007],{}," 是 ",[92,107262,35314],{},"，大约就是 28.6 度。",[37,107265,102325],{"id":102324},[49,107267,107268,107275,107278,107285,107288,107296,107304],{},[52,107269,102388,107270,102391,107272,28370],{},[92,107271,106288],{},[92,107273,107274],{},"gear=\"5\"",[52,107276,107277],{},"重新运行，观察关节运动是否更剧烈。",[52,107279,102388,107280,102391,107282,28370],{},[92,107281,105832],{},[92,107283,107284],{},"-0.2 0.2",[52,107286,107287],{},"重新运行，观察控制能力是否变弱。",[52,107289,107290,107291,107293,107294,28370],{},"去掉 actuator，确认 ",[92,107292,102135],{}," 变成 ",[92,107295,297],{},[52,107297,102388,107298,102391,107300,107303],{},[92,107299,106222],{},[92,107301,107302],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[52,107305,102388,107306,102391,107308,107311],{},[92,107307,106216],{},[92,107309,107310],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[37,107313,102430],{"id":102429},[66,107315,107317],{"id":107316},"indexerror-index-0-is-out-of-bounds",[92,107318,107319],{},"IndexError: index 0 is out of bounds",[10,107321,107322,107323,107325],{},"原因是 ",[92,107324,105969],{},"，没有 actuator。",[66,107327,107328],{"id":107328},"关节几乎不动",[10,107330,107331],{},"可能原因:",[49,107333,107334,107339,107343,107349],{},[52,107335,107336,107338],{},[92,107337,107044],{}," 太小",[52,107340,107341,107338],{},[92,107342,105832],{},[52,107344,107345,107348],{},[92,107346,107347],{},"damping"," 太大",[52,107350,107351],{},"重力方向导致运动不明显",[66,107353,107354],{"id":107354},"模型编译失败",[10,107356,107357,107358,107360],{},"检查 actuator 引用的 ",[92,107359,106279],{}," 是否存在，joint 名称是否拼写一致。",[66,107362,107364,107366],{"id":107363},"datactrl0-写了但没有效果",[92,107365,106103],{}," 写了但没有效果",[10,107368,102552],{},[49,107370,107371,107376,107379,107384,107389],{},[52,107372,107373,107375],{},[92,107374,102135],{}," 是否大于 0。",[52,107377,107378],{},"motor 是否引用了正确 joint。",[52,107380,107381,107383],{},[92,107382,107044],{}," 是否太小。",[52,107385,107386,107388],{},[92,107387,105832],{}," 是否把输入限制得太小。",[52,107390,107391],{},"body 是否真的有可动 joint。",[66,107393,107394],{"id":107394},"控制输入超过范围会怎样",[10,107396,107397],{},"如果设置了：",[86,107399,107401],{"className":53044,"code":107400,"language":53046,"meta":14,"style":14},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[92,107402,107403],{"__ignoreMap":14},[95,107404,107405],{"class":97,"line":98},[95,107406,107400],{"class":105},[10,107408,107409],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[86,107411,107413],{"className":30363,"code":107412,"language":30365,"meta":14,"style":14},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[92,107414,107415,107435],{"__ignoreMap":14},[95,107416,107417,107420,107422,107425,107427,107429,107431,107433],{"class":97,"line":98},[95,107418,107419],{"class":105},"action ",[95,107421,151],{"class":101},[95,107423,107424],{"class":105}," np.clip(action, ",[95,107426,638],{"class":101},[95,107428,105237],{"class":154},[95,107430,12418],{"class":105},[95,107432,105237],{"class":154},[95,107434,112],{"class":105},[95,107436,107437,107439,107441,107443,107445],{"class":97,"line":15},[95,107438,105848],{"class":105},[95,107440,297],{"class":154},[95,107442,4425],{"class":105},[95,107444,151],{"class":101},[95,107446,107447],{"class":105}," action\n",[37,107449,102584],{"id":102583},[10,107451,107452],{},"这一章建立了控制任务的基本形式：",[86,107454,107457],{"className":107455,"code":107456,"language":5170,"meta":14},[5168],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[92,107458,107456],{"__ignoreMap":14},[10,107460,107461],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5109,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":1161,"text":106111},{"id":106160,"depth":1161,"text":106161},{"id":106226,"depth":1161,"text":106227},{"id":101229,"depth":15,"text":101230,"children":107475},[107476,107477],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":107319},{"id":107328,"depth":1161,"text":107328},{"id":107354,"depth":1161,"text":107354},{"id":107363,"depth":1161,"text":107486},"data.ctrl[0] 写了但没有效果",{"id":107394,"depth":1161,"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":21,"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],[33,107500,107496],{"id":107501},"_5viewer-可视化与-renderer-离屏渲染",[37,107503,100624],{"id":100623},[10,107505,107506],{},"本章掌握两类可视化方式:",[49,107508,107509,107512],{},[52,107510,107511],{},"交互式 viewer: 适合人工观察仿真",[52,107513,107514],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[10,107516,107517],{},"使用官方接口:",[86,107519,107521],{"className":30363,"code":107520,"language":30365,"meta":14,"style":14},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[92,107522,107523,107530],{"__ignoreMap":14},[95,107524,107525,107527],{"class":97,"line":98},[95,107526,30377],{"class":101},[95,107528,107529],{"class":105}," mujoco.viewer\n",[95,107531,107532],{"class":97,"line":15},[95,107533,107534],{"class":105},"mujoco.viewer.launch_passive(model, data)\n",[10,107536,107537],{},"以及:",[86,107539,107541],{"className":30363,"code":107540,"language":30365,"meta":14,"style":14},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[92,107542,107543,107553],{"__ignoreMap":14},[95,107544,107545,107548,107550],{"class":97,"line":98},[95,107546,107547],{"class":105},"renderer ",[95,107549,151],{"class":101},[95,107551,107552],{"class":105}," mujoco.Renderer(model)\n",[95,107554,107555,107558,107560],{"class":97,"line":15},[95,107556,107557],{"class":105},"image ",[95,107559,151],{"class":101},[95,107561,107562],{"class":105}," renderer.render()\n",[10,107564,107565],{},"新手建议先理解二者区别：",[243,107567,107568,107584],{},[246,107569,107570],{},[249,107571,107572,107575,107578,107581],{},[252,107573,107574],{"align":23720},"工具",[252,107576,107577],{"align":23720},"用途",[252,107579,107580],{"align":23720},"是否打开窗口",[252,107582,107583],{"align":23720},"常见场景",[290,107585,107586,107599],{},[249,107587,107588,107591,107594,107596],{},[295,107589,107590],{"align":23720},"Viewer",[295,107592,107593],{"align":23720},"人眼实时观察仿真",[295,107595,104642],{"align":23720},[295,107597,107598],{"align":23720},"调试模型、看控制效果",[249,107600,107601,107604,107607,107609],{},[295,107602,107603],{"align":23720},"Renderer",[295,107605,107606],{"align":23720},"生成图像数组",[295,107608,104655],{"align":23720},[295,107610,107611],{"align":23720},"保存图片、训练视觉策略、服务器批量采集",[37,107613,100747],{"id":100746},[10,107615,100750],{},[86,107617,107619],{"className":23806,"code":107618,"language":23808,"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",[92,107620,107621,107633,107643,107651,107659],{"__ignoreMap":14},[95,107622,107623,107625,107627,107629,107631],{"class":97,"line":98},[95,107624,24561],{"class":1945},[95,107626,26300],{"class":210},[95,107628,23818],{"class":210},[95,107630,26385],{"class":154},[95,107632,24663],{"class":154},[95,107634,107635,107637,107639,107641],{"class":97,"line":15},[95,107636,100785],{"class":210},[95,107638,100788],{"class":210},[95,107640,100791],{"class":210},[95,107642,24663],{"class":154},[95,107644,107645,107647,107649],{"class":97,"line":1161},[95,107646,100798],{"class":210},[95,107648,100801],{"class":210},[95,107650,24663],{"class":154},[95,107652,107653,107655,107657],{"class":97,"line":1176},[95,107654,100808],{"class":210},[95,107656,100811],{"class":210},[95,107658,24663],{"class":154},[95,107660,107661,107663,107665,107667,107669],{"class":97,"line":1182},[95,107662,100818],{"class":210},[95,107664,100821],{"class":210},[95,107666,100824],{"class":210},[95,107668,100827],{"class":210},[95,107670,102493],{"class":210},[10,107672,102796],{},[86,107674,107676],{"className":23806,"code":107675,"language":23808,"meta":14,"style":14},"pip install \"mujoco>=2.3\" numpy pillow\n",[92,107677,107678],{"__ignoreMap":14},[95,107679,107680,107682,107684,107686,107689],{"class":97,"line":98},[95,107681,23815],{"class":1945},[95,107683,23818],{"class":210},[95,107685,100907],{"class":210},[95,107687,107688],{"class":210}," numpy",[95,107690,107691],{"class":210}," pillow\n",[10,107693,102813],{},[86,107695,107697],{"className":23806,"code":107696,"language":23808,"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",[92,107698,107699,107716,107725],{"__ignoreMap":14},[95,107700,107701,107703,107705,107707,107710,107712,107714],{"class":97,"line":98},[95,107702,30315],{"class":1945},[95,107704,29161],{"class":210},[95,107706,25100],{"class":154},[95,107708,107709],{"class":210}," mujoco-render",[95,107711,100952],{"class":210},[95,107713,100955],{"class":154},[95,107715,100958],{"class":154},[95,107717,107718,107720,107722],{"class":97,"line":15},[95,107719,30315],{"class":1945},[95,107721,100965],{"class":210},[95,107723,107724],{"class":210}," mujoco-render\n",[95,107726,107727,107729,107731,107733,107735],{"class":97,"line":1161},[95,107728,23815],{"class":1945},[95,107730,23818],{"class":210},[95,107732,100907],{"class":210},[95,107734,107688],{"class":210},[95,107736,107691],{"class":210},[10,107738,107739],{},"离屏渲染后端:",[86,107741,107743],{"className":23806,"code":107742,"language":23808,"meta":14,"style":14},"export MUJOCO_GL=egl\n",[92,107744,107745],{"__ignoreMap":14},[95,107746,107747,107749,107752,107754],{"class":97,"line":98},[95,107748,25027],{"class":101},[95,107750,107751],{"class":105}," MUJOCO_GL",[95,107753,151],{"class":101},[95,107755,107756],{"class":105},"egl\n",[10,107758,107759],{},"或:",[86,107761,107763],{"className":23806,"code":107762,"language":23808,"meta":14,"style":14},"export MUJOCO_GL=osmesa\n",[92,107764,107765],{"__ignoreMap":14},[95,107766,107767,107769,107771,107773],{"class":97,"line":98},[95,107768,25027],{"class":101},[95,107770,107751],{"class":105},[95,107772,151],{"class":101},[95,107774,107775],{"class":105},"osmesa\n",[10,107777,107778,107779,107782,107783,28370],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[92,107780,107781],{},"egl"," 失败，再尝试 ",[92,107784,107785],{},"osmesa",[10,107787,107788,107789,107792],{},"如果你在本机桌面环境运行，通常先不要设置 ",[92,107790,107791],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[37,107794,101022],{"id":101021},[10,107796,107797],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[10,107799,107800],{},"典型 viewer 流程:",[86,107802,107804],{"className":30363,"code":107803,"language":30365,"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",[92,107805,107806,107819,107826,107830],{"__ignoreMap":14},[95,107807,107808,107811,107814,107816],{"class":97,"line":98},[95,107809,107810],{"class":101},"with",[95,107812,107813],{"class":105}," mujoco.viewer.launch_passive(model, data) ",[95,107815,31368],{"class":101},[95,107817,107818],{"class":105}," viewer:\n",[95,107820,107821,107823],{"class":97,"line":15},[95,107822,2233],{"class":101},[95,107824,107825],{"class":105}," viewer.is_running():\n",[95,107827,107828],{"class":97,"line":1161},[95,107829,101493],{"class":105},[95,107831,107832],{"class":97,"line":1176},[95,107833,107834],{"class":105},"        viewer.sync()\n",[10,107836,107837],{},"典型 renderer 流程:",[86,107839,107841],{"className":30363,"code":107840,"language":30365,"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",[92,107842,107843,107869,107873,107878],{"__ignoreMap":14},[95,107844,107845,107847,107849,107852,107854,107856,107858,107860,107862,107864,107867],{"class":97,"line":98},[95,107846,107547],{"class":105},[95,107848,151],{"class":101},[95,107850,107851],{"class":105}," mujoco.Renderer(model, ",[95,107853,24966],{"class":5199},[95,107855,151],{"class":101},[95,107857,42327],{"class":154},[95,107859,12418],{"class":105},[95,107861,24962],{"class":5199},[95,107863,151],{"class":101},[95,107865,107866],{"class":154},"640",[95,107868,112],{"class":105},[95,107870,107871],{"class":97,"line":15},[95,107872,104482],{"class":105},[95,107874,107875],{"class":97,"line":1161},[95,107876,107877],{"class":105},"renderer.update_scene(data)\n",[95,107879,107880,107882,107884],{"class":97,"line":1176},[95,107881,107557],{"class":105},[95,107883,151],{"class":101},[95,107885,107562],{"class":105},[66,107887,107889],{"id":107888},"viewer-的同步逻辑","viewer 的同步逻辑",[10,107891,107892],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[86,107894,107896],{"className":30363,"code":107895,"language":30365,"meta":14,"style":14},"mujoco.mj_step(model, data)\nviewer.sync()\n",[92,107897,107898,107902],{"__ignoreMap":14},[95,107899,107900],{"class":97,"line":98},[95,107901,104482],{"class":105},[95,107903,107904],{"class":97,"line":15},[95,107905,107906],{"class":105},"viewer.sync()\n",[10,107908,107909,107911,107912,107915],{},[92,107910,101192],{}," 负责算物理，",[92,107913,107914],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[66,107917,107919],{"id":107918},"为什么要-sleep","为什么要 sleep",[10,107921,107922],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[86,107924,107926],{"className":30363,"code":107925,"language":30365,"meta":14,"style":14},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[92,107927,107928],{"__ignoreMap":14},[95,107929,107930,107933,107935,107938,107940,107943,107945],{"class":97,"line":98},[95,107931,107932],{"class":105},"sleep_time ",[95,107934,151],{"class":101},[95,107936,107937],{"class":105}," model.opt.timestep ",[95,107939,638],{"class":101},[95,107941,107942],{"class":105}," (time.time() ",[95,107944,638],{"class":101},[95,107946,107947],{"class":105}," step_start)\n",[10,107949,107950],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[66,107952,107954],{"id":107953},"renderer-输出是什么","renderer 输出是什么",[86,107956,107958],{"className":30363,"code":107957,"language":30365,"meta":14,"style":14},"image = renderer.render()\n",[92,107959,107960],{"__ignoreMap":14},[95,107961,107962,107964,107966],{"class":97,"line":98},[95,107963,107557],{"class":105},[95,107965,151],{"class":101},[95,107967,107562],{"class":105},[10,107969,107970],{},"得到的是 NumPy 数组，形状通常是：",[86,107972,107975],{"className":107973,"code":107974,"language":5170,"meta":14},[5168],"(height, width, 3)\n",[92,107976,107974],{"__ignoreMap":14},[10,107978,107979],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[86,107981,107983],{"className":30363,"code":107982,"language":30365,"meta":14,"style":14},"Image.fromarray(image).save(\"render_output.png\")\n",[92,107984,107985],{"__ignoreMap":14},[95,107986,107987,107990,107993],{"class":97,"line":98},[95,107988,107989],{"class":105},"Image.fromarray(image).save(",[95,107991,107992],{"class":210},"\"render_output.png\"",[95,107994,112],{"class":105},[37,107996,101230],{"id":101229},[10,107998,107999],{},"交互式 Viewer:",[86,108001,108003],{"className":30363,"code":108002,"language":30365,"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",[92,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},[95,108006,108007,108009],{"class":97,"line":98},[95,108008,30377],{"class":101},[95,108010,31814],{"class":105},[95,108012,108013],{"class":97,"line":15},[95,108014,2382],{"emptyLinePlaceholder":21},[95,108016,108017,108019],{"class":97,"line":1161},[95,108018,30377],{"class":101},[95,108020,101278],{"class":105},[95,108022,108023,108025],{"class":97,"line":1176},[95,108024,30377],{"class":101},[95,108026,107529],{"class":105},[95,108028,108029],{"class":97,"line":1182},[95,108030,2382],{"emptyLinePlaceholder":21},[95,108032,108033],{"class":97,"line":1196},[95,108034,2382],{"emptyLinePlaceholder":21},[95,108036,108037,108039,108041],{"class":97,"line":1202},[95,108038,101291],{"class":154},[95,108040,13547],{"class":101},[95,108042,101296],{"class":210},[95,108044,108045],{"class":97,"line":1293},[95,108046,108047],{"class":210},"\u003Cmujoco model=\"viewer_demo\">\n",[95,108049,108050],{"class":97,"line":1299},[95,108051,101306],{"class":210},[95,108053,108054],{"class":97,"line":1311},[95,108055,2382],{"emptyLinePlaceholder":21},[95,108057,108058],{"class":97,"line":1594},[95,108059,101315],{"class":210},[95,108061,108062],{"class":97,"line":1599},[95,108063,108064],{"class":210},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[95,108066,108067],{"class":97,"line":1605},[95,108068,108069],{"class":210},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[95,108071,108072],{"class":97,"line":1610},[95,108073,2382],{"emptyLinePlaceholder":21},[95,108075,108076],{"class":97,"line":1624},[95,108077,101329],{"class":210},[95,108079,108080],{"class":97,"line":1629},[95,108081,101334],{"class":210},[95,108083,108084],{"class":97,"line":1635},[95,108085,108086],{"class":210},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[95,108088,108089],{"class":97,"line":1656},[95,108090,101344],{"class":210},[95,108092,108093],{"class":97,"line":1661},[95,108094,101349],{"class":210},[95,108096,108097],{"class":97,"line":1675},[95,108098,101354],{"class":210},[95,108100,108101],{"class":97,"line":1680},[95,108102,95675],{"class":210},[95,108104,108105],{"class":97,"line":1709},[95,108106,2382],{"emptyLinePlaceholder":21},[95,108108,108109],{"class":97,"line":1714},[95,108110,2382],{"emptyLinePlaceholder":21},[95,108112,108113,108115,108117,108119,108121],{"class":97,"line":1731},[95,108114,31932],{"class":101},[95,108116,1955],{"class":1945},[95,108118,101375],{"class":105},[95,108120,95663],{"class":154},[95,108122,3721],{"class":105},[95,108124,108125,108127,108129,108131,108133],{"class":97,"line":1736},[95,108126,101384],{"class":105},[95,108128,151],{"class":101},[95,108130,101389],{"class":105},[95,108132,101291],{"class":154},[95,108134,112],{"class":105},[95,108136,108137,108139,108141],{"class":97,"line":1741},[95,108138,101398],{"class":105},[95,108140,151],{"class":101},[95,108142,101403],{"class":105},[95,108144,108145],{"class":97,"line":1746},[95,108146,2382],{"emptyLinePlaceholder":21},[95,108148,108149,108151,108153,108155],{"class":97,"line":1760},[95,108150,34163],{"class":101},[95,108152,107813],{"class":105},[95,108154,31368],{"class":101},[95,108156,107818],{"class":105},[95,108158,108159,108162,108165,108167,108170,108172,108175],{"class":97,"line":1765},[95,108160,108161],{"class":101},"        while",[95,108163,108164],{"class":105}," viewer.is_running() ",[95,108166,30447],{"class":101},[95,108168,108169],{"class":105}," data.time ",[95,108171,1016],{"class":101},[95,108173,108174],{"class":154}," 5.0",[95,108176,3721],{"class":105},[95,108178,108179,108182,108184],{"class":97,"line":2559},[95,108180,108181],{"class":105},"            step_start ",[95,108183,151],{"class":101},[95,108185,108186],{"class":105}," time.time()\n",[95,108188,108189],{"class":97,"line":2573},[95,108190,108191],{"class":105},"            mujoco.mj_step(model, data)\n",[95,108193,108194],{"class":97,"line":2581},[95,108195,108196],{"class":105},"            viewer.sync()\n",[95,108198,108199],{"class":97,"line":2586},[95,108200,2382],{"emptyLinePlaceholder":21},[95,108202,108203,108206,108208,108210,108212,108214,108216],{"class":97,"line":2592},[95,108204,108205],{"class":105},"            sleep_time ",[95,108207,151],{"class":101},[95,108209,107937],{"class":105},[95,108211,638],{"class":101},[95,108213,107942],{"class":105},[95,108215,638],{"class":101},[95,108217,107947],{"class":105},[95,108219,108220,108222,108225,108227,108229],{"class":97,"line":2598},[95,108221,4624],{"class":101},[95,108223,108224],{"class":105}," sleep_time ",[95,108226,1066],{"class":101},[95,108228,4075],{"class":154},[95,108230,3721],{"class":105},[95,108232,108233],{"class":97,"line":2603},[95,108234,108235],{"class":105},"                time.sleep(sleep_time)\n",[95,108237,108238],{"class":97,"line":7931},[95,108239,2382],{"emptyLinePlaceholder":21},[95,108241,108242],{"class":97,"line":7955},[95,108243,2382],{"emptyLinePlaceholder":21},[95,108245,108246,108248,108250,108252,108254],{"class":97,"line":7960},[95,108247,1513],{"class":101},[95,108249,31205],{"class":154},[95,108251,101536],{"class":101},[95,108253,101539],{"class":210},[95,108255,3721],{"class":105},[95,108257,108258],{"class":97,"line":7966},[95,108259,101546],{"class":105},[10,108261,103547],{},[86,108263,108265],{"className":23806,"code":108264,"language":23808,"meta":14,"style":14},"touch ch5_viewer.py\n",[92,108266,108267],{"__ignoreMap":14},[95,108268,108269,108271],{"class":97,"line":98},[95,108270,101260],{"class":1945},[95,108272,108273],{"class":210}," ch5_viewer.py\n",[10,108275,108276],{},"离屏 Renderer 保存图片:",[86,108278,108280],{"className":30363,"code":108279,"language":30365,"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",[92,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},[95,108283,108284,108286,108289,108291],{"class":97,"line":98},[95,108285,30722],{"class":101},[95,108287,108288],{"class":105}," pathlib ",[95,108290,30377],{"class":101},[95,108292,108293],{"class":105}," Path\n",[95,108295,108296],{"class":97,"line":15},[95,108297,2382],{"emptyLinePlaceholder":21},[95,108299,108300,108302],{"class":97,"line":1161},[95,108301,30377],{"class":101},[95,108303,101278],{"class":105},[95,108305,108306,108308,108310,108312],{"class":97,"line":1176},[95,108307,30722],{"class":101},[95,108309,47248],{"class":154},[95,108311,47251],{"class":101},[95,108313,47254],{"class":105},[95,108315,108316],{"class":97,"line":1182},[95,108317,2382],{"emptyLinePlaceholder":21},[95,108319,108320],{"class":97,"line":1196},[95,108321,2382],{"emptyLinePlaceholder":21},[95,108323,108324,108326,108328],{"class":97,"line":1202},[95,108325,101291],{"class":154},[95,108327,13547],{"class":101},[95,108329,101296],{"class":210},[95,108331,108332],{"class":97,"line":1293},[95,108333,108334],{"class":210},"\u003Cmujoco model=\"renderer_demo\">\n",[95,108336,108337],{"class":97,"line":1299},[95,108338,101306],{"class":210},[95,108340,108341],{"class":97,"line":1311},[95,108342,2382],{"emptyLinePlaceholder":21},[95,108344,108345],{"class":97,"line":1594},[95,108346,101315],{"class":210},[95,108348,108349],{"class":97,"line":1599},[95,108350,108064],{"class":210},[95,108352,108353],{"class":97,"line":1605},[95,108354,108355],{"class":210},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[95,108357,108358],{"class":97,"line":1610},[95,108359,108069],{"class":210},[95,108361,108362],{"class":97,"line":1624},[95,108363,2382],{"emptyLinePlaceholder":21},[95,108365,108366],{"class":97,"line":1629},[95,108367,101329],{"class":210},[95,108369,108370],{"class":97,"line":1635},[95,108371,101334],{"class":210},[95,108373,108374],{"class":97,"line":1656},[95,108375,108086],{"class":210},[95,108377,108378],{"class":97,"line":1661},[95,108379,101344],{"class":210},[95,108381,108382],{"class":97,"line":1675},[95,108383,101349],{"class":210},[95,108385,108386],{"class":97,"line":1680},[95,108387,101354],{"class":210},[95,108389,108390],{"class":97,"line":1709},[95,108391,95675],{"class":210},[95,108393,108394],{"class":97,"line":1714},[95,108395,2382],{"emptyLinePlaceholder":21},[95,108397,108398],{"class":97,"line":1731},[95,108399,2382],{"emptyLinePlaceholder":21},[95,108401,108402,108404,108406,108408,108410],{"class":97,"line":1736},[95,108403,31932],{"class":101},[95,108405,1955],{"class":1945},[95,108407,101375],{"class":105},[95,108409,95663],{"class":154},[95,108411,3721],{"class":105},[95,108413,108414,108416,108418,108420,108422],{"class":97,"line":1741},[95,108415,101384],{"class":105},[95,108417,151],{"class":101},[95,108419,101389],{"class":105},[95,108421,101291],{"class":154},[95,108423,112],{"class":105},[95,108425,108426,108428,108430],{"class":97,"line":1746},[95,108427,101398],{"class":105},[95,108429,151],{"class":101},[95,108431,101403],{"class":105},[95,108433,108434,108437,108439,108441,108443,108445,108447,108449,108451,108453,108455],{"class":97,"line":1760},[95,108435,108436],{"class":105},"    renderer ",[95,108438,151],{"class":101},[95,108440,107851],{"class":105},[95,108442,24966],{"class":5199},[95,108444,151],{"class":101},[95,108446,42327],{"class":154},[95,108448,12418],{"class":105},[95,108450,24962],{"class":5199},[95,108452,151],{"class":101},[95,108454,107866],{"class":154},[95,108456,112],{"class":105},[95,108458,108459],{"class":97,"line":1765},[95,108460,2382],{"emptyLinePlaceholder":21},[95,108462,108463,108465,108467,108469,108471,108473,108475],{"class":97,"line":2559},[95,108464,3183],{"class":101},[95,108466,101478],{"class":105},[95,108468,26028],{"class":101},[95,108470,32428],{"class":154},[95,108472,106],{"class":105},[95,108474,417],{"class":154},[95,108476,30771],{"class":105},[95,108478,108479],{"class":97,"line":2573},[95,108480,101493],{"class":105},[95,108482,108483],{"class":97,"line":2581},[95,108484,2382],{"emptyLinePlaceholder":21},[95,108486,108487,108490,108493,108495,108498],{"class":97,"line":2586},[95,108488,108489],{"class":105},"    renderer.update_scene(data, ",[95,108491,108492],{"class":5199},"camera",[95,108494,151],{"class":101},[95,108496,108497],{"class":210},"\"fixed_camera\"",[95,108499,112],{"class":105},[95,108501,108502,108505,108507],{"class":97,"line":2592},[95,108503,108504],{"class":105},"    image ",[95,108506,151],{"class":101},[95,108508,107562],{"class":105},[95,108510,108511],{"class":97,"line":2598},[95,108512,2382],{"emptyLinePlaceholder":21},[95,108514,108515,108518,108520,108523,108525],{"class":97,"line":2603},[95,108516,108517],{"class":105},"    output_path ",[95,108519,151],{"class":101},[95,108521,108522],{"class":105}," Path(",[95,108524,107992],{"class":210},[95,108526,112],{"class":105},[95,108528,108529],{"class":97,"line":7931},[95,108530,108531],{"class":105},"    Image.fromarray(image).save(output_path)\n",[95,108533,108534],{"class":97,"line":7955},[95,108535,108536],{"class":105},"    renderer.close()\n",[95,108538,108539],{"class":97,"line":7960},[95,108540,2382],{"emptyLinePlaceholder":21},[95,108542,108543,108545,108547,108550],{"class":97,"line":7966},[95,108544,31284],{"class":154},[95,108546,106],{"class":105},[95,108548,108549],{"class":210},"\"saved:\"",[95,108551,108552],{"class":105},", output_path.resolve())\n",[95,108554,108555,108557,108559,108562],{"class":97,"line":7993},[95,108556,31284],{"class":154},[95,108558,106],{"class":105},[95,108560,108561],{"class":210},"\"image shape:\"",[95,108563,108564],{"class":105},", image.shape)\n",[95,108566,108567],{"class":97,"line":7998},[95,108568,2382],{"emptyLinePlaceholder":21},[95,108570,108571],{"class":97,"line":8004},[95,108572,2382],{"emptyLinePlaceholder":21},[95,108574,108575,108577,108579,108581,108583],{"class":97,"line":8016},[95,108576,1513],{"class":101},[95,108578,31205],{"class":154},[95,108580,101536],{"class":101},[95,108582,101539],{"class":210},[95,108584,3721],{"class":105},[95,108586,108587],{"class":97,"line":8028},[95,108588,101546],{"class":105},[10,108590,103547],{},[86,108592,108594],{"className":23806,"code":108593,"language":23808,"meta":14,"style":14},"touch ch5_renderer.py\n",[92,108595,108596],{"__ignoreMap":14},[95,108597,108598,108600],{"class":97,"line":98},[95,108599,101260],{"class":1945},[95,108601,108602],{"class":210}," ch5_renderer.py\n",[66,108604,101549],{"id":101549},[10,108606,108607],{},"viewer 上下文：",[86,108609,108611],{"className":30363,"code":108610,"language":30365,"meta":14,"style":14},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[92,108612,108613],{"__ignoreMap":14},[95,108614,108615,108617,108619,108621],{"class":97,"line":98},[95,108616,107810],{"class":101},[95,108618,107813],{"class":105},[95,108620,31368],{"class":101},[95,108622,107818],{"class":105},[10,108624,108625,108627],{},[92,108626,107810],{}," 语句会创建窗口，并在退出时自动清理资源。",[10,108629,108630],{},"窗口循环：",[86,108632,108634],{"className":30363,"code":108633,"language":30365,"meta":14,"style":14},"while viewer.is_running() and data.time \u003C 5.0:\n",[92,108635,108636],{"__ignoreMap":14},[95,108637,108638,108641,108643,108645,108647,108649,108651],{"class":97,"line":98},[95,108639,108640],{"class":101},"while",[95,108642,108164],{"class":105},[95,108644,30447],{"class":101},[95,108646,108169],{"class":105},[95,108648,1016],{"class":101},[95,108650,108174],{"class":154},[95,108652,3721],{"class":105},[10,108654,108655],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[10,108657,108658],{},"固定相机：",[86,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",[92,108663,108664],{"__ignoreMap":14},[95,108665,108666,108668,108670,108672,108674,108676,108678,108680,108683,108686,108688,108691],{"class":97,"line":98},[95,108667,1016],{"class":105},[95,108669,108492],{"class":51277},[95,108671,14903],{"class":1945},[95,108673,151],{"class":105},[95,108675,108497],{"class":210},[95,108677,101083],{"class":1945},[95,108679,151],{"class":105},[95,108681,108682],{"class":210},"\"1.5 -2.0 1.2\"",[95,108684,108685],{"class":1945}," xyaxes",[95,108687,151],{"class":105},[95,108689,108690],{"class":210},"\"1 0.75 0 0 0 1\"",[95,108692,101121],{"class":105},[10,108694,108695],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[66,108697,108699],{"id":108698},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[86,108701,108703],{"className":30363,"code":108702,"language":30365,"meta":14,"style":14},"import time\n",[92,108704,108705],{"__ignoreMap":14},[95,108706,108707,108709],{"class":97,"line":98},[95,108708,30377],{"class":101},[95,108710,31814],{"class":105},[10,108712,108713],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[86,108715,108717],{"className":30363,"code":108716,"language":30365,"meta":14,"style":14},"import mujoco\nimport mujoco.viewer\n",[92,108718,108719,108725],{"__ignoreMap":14},[95,108720,108721,108723],{"class":97,"line":98},[95,108722,30377],{"class":101},[95,108724,101278],{"class":105},[95,108726,108727,108729],{"class":97,"line":15},[95,108728,30377],{"class":101},[95,108730,107529],{"class":105},[10,108732,108733],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[86,108735,108736],{"className":30363,"code":108610,"language":30365,"meta":14,"style":14},[92,108737,108738],{"__ignoreMap":14},[95,108739,108740,108742,108744,108746],{"class":97,"line":98},[95,108741,107810],{"class":101},[95,108743,107813],{"class":105},[95,108745,31368],{"class":101},[95,108747,107818],{"class":105},[10,108749,108750,108751,108754],{},"打开一个 viewer 窗口。",[92,108752,108753],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[86,108756,108757],{"className":30363,"code":108633,"language":30365,"meta":14,"style":14},[92,108758,108759],{"__ignoreMap":14},[95,108760,108761,108763,108765,108767,108769,108771,108773],{"class":97,"line":98},[95,108762,108640],{"class":101},[95,108764,108164],{"class":105},[95,108766,30447],{"class":101},[95,108768,108169],{"class":105},[95,108770,1016],{"class":101},[95,108772,108174],{"class":154},[95,108774,3721],{"class":105},[10,108776,108777,108778,108781],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[92,108779,108780],{},"viewer.is_running()"," 会变成 false，循环结束。",[86,108783,108785],{"className":30363,"code":108784,"language":30365,"meta":14,"style":14},"step_start = time.time()\n",[92,108786,108787],{"__ignoreMap":14},[95,108788,108789,108792,108794],{"class":97,"line":98},[95,108790,108791],{"class":105},"step_start ",[95,108793,151],{"class":101},[95,108795,108186],{"class":105},[10,108797,108798],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[86,108800,108801],{"className":30363,"code":107895,"language":30365,"meta":14,"style":14},[92,108802,108803,108807],{"__ignoreMap":14},[95,108804,108805],{"class":97,"line":98},[95,108806,104482],{"class":105},[95,108808,108809],{"class":97,"line":15},[95,108810,107906],{"class":105},[10,108812,108813,108815,108816,108818,108819,108821,108822,108825],{},[92,108814,101192],{}," 推进物理仿真。",[92,108817,107914],{}," 把最新的 ",[92,108820,33386],{}," 同步到窗口里显示。没有 ",[92,108823,108824],{},"sync()","，窗口可能看不到最新状态。",[86,108827,108828],{"className":30363,"code":107925,"language":30365,"meta":14,"style":14},[92,108829,108830],{"__ignoreMap":14},[95,108831,108832,108834,108836,108838,108840,108842,108844],{"class":97,"line":98},[95,108833,107932],{"class":105},[95,108835,151],{"class":101},[95,108837,107937],{"class":105},[95,108839,638],{"class":101},[95,108841,107942],{"class":105},[95,108843,638],{"class":101},[95,108845,107947],{"class":105},[10,108847,108848],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[86,108850,108852],{"className":30363,"code":108851,"language":30365,"meta":14,"style":14},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[92,108853,108854,108866],{"__ignoreMap":14},[95,108855,108856,108858,108860,108862,108864],{"class":97,"line":98},[95,108857,1513],{"class":101},[95,108859,108224],{"class":105},[95,108861,1066],{"class":101},[95,108863,4075],{"class":154},[95,108865,3721],{"class":105},[95,108867,108868],{"class":97,"line":15},[95,108869,108870],{"class":105},"    time.sleep(sleep_time)\n",[10,108872,108873],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[66,108875,108877],{"id":108876},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[86,108879,108881],{"className":30363,"code":108880,"language":30365,"meta":14,"style":14},"from pathlib import Path\n",[92,108882,108883],{"__ignoreMap":14},[95,108884,108885,108887,108889,108891],{"class":97,"line":98},[95,108886,30722],{"class":101},[95,108888,108288],{"class":105},[95,108890,30377],{"class":101},[95,108892,108293],{"class":105},[10,108894,108895,108896,108899,108900,108903],{},"导入 ",[92,108897,108898],{},"Path","，用来处理文件路径。相比直接写字符串，",[92,108901,108902],{},"Path(\"render_output.png\")"," 更清晰。",[86,108905,108907],{"className":30363,"code":108906,"language":30365,"meta":14,"style":14},"from PIL import Image\n",[92,108908,108909],{"__ignoreMap":14},[95,108910,108911,108913,108915,108917],{"class":97,"line":98},[95,108912,30722],{"class":101},[95,108914,47248],{"class":154},[95,108916,47251],{"class":101},[95,108918,47254],{"class":105},[10,108920,108921],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[86,108923,108924],{"className":53044,"code":108661,"language":53046,"meta":14,"style":14},[92,108925,108926],{"__ignoreMap":14},[95,108927,108928,108930,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950],{"class":97,"line":98},[95,108929,1016],{"class":105},[95,108931,108492],{"class":51277},[95,108933,14903],{"class":1945},[95,108935,151],{"class":105},[95,108937,108497],{"class":210},[95,108939,101083],{"class":1945},[95,108941,151],{"class":105},[95,108943,108682],{"class":210},[95,108945,108685],{"class":1945},[95,108947,151],{"class":105},[95,108949,108690],{"class":210},[95,108951,101121],{"class":105},[10,108953,108954,108955,108957,108958,108960,108961,108964,108965,108967],{},"定义一个相机。",[92,108956,79787],{}," 是相机名字。",[92,108959,104123],{}," 是相机在世界里的位置。",[92,108962,108963],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[92,108966,104123],{}," 来调视角。",[86,108969,108971],{"className":30363,"code":108970,"language":30365,"meta":14,"style":14},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[92,108972,108973],{"__ignoreMap":14},[95,108974,108975,108977,108979,108981,108983,108985,108987,108989,108991,108993,108995],{"class":97,"line":98},[95,108976,107547],{"class":105},[95,108978,151],{"class":101},[95,108980,107851],{"class":105},[95,108982,24966],{"class":5199},[95,108984,151],{"class":101},[95,108986,42327],{"class":154},[95,108988,12418],{"class":105},[95,108990,24962],{"class":5199},[95,108992,151],{"class":101},[95,108994,107866],{"class":154},[95,108996,112],{"class":105},[10,108998,108999,109000,100995,109002,109004],{},"创建离屏渲染器。",[92,109001,24966],{},[92,109003,24962],{}," 决定输出图片大小。",[86,109006,109007],{"className":30363,"code":101653,"language":30365,"meta":14,"style":14},[92,109008,109009,109025],{"__ignoreMap":14},[95,109010,109011,109013,109015,109017,109019,109021,109023],{"class":97,"line":98},[95,109012,3007],{"class":101},[95,109014,101478],{"class":105},[95,109016,26028],{"class":101},[95,109018,32428],{"class":154},[95,109020,106],{"class":105},[95,109022,417],{"class":154},[95,109024,30771],{"class":105},[95,109026,109027],{"class":97,"line":15},[95,109028,101676],{"class":105},[10,109030,109031],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[86,109033,109035],{"className":30363,"code":109034,"language":30365,"meta":14,"style":14},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[92,109036,109037],{"__ignoreMap":14},[95,109038,109039,109042,109044,109046,109048],{"class":97,"line":98},[95,109040,109041],{"class":105},"renderer.update_scene(data, ",[95,109043,108492],{"class":5199},[95,109045,151],{"class":101},[95,109047,108497],{"class":210},[95,109049,112],{"class":105},[10,109051,109052,109053,109055,109056,109059],{},"告诉 renderer：用当前 ",[92,109054,33386],{}," 的状态更新画面，并使用名为 ",[92,109057,109058],{},"fixed_camera"," 的相机视角。",[86,109061,109062],{"className":30363,"code":107957,"language":30365,"meta":14,"style":14},[92,109063,109064],{"__ignoreMap":14},[95,109065,109066,109068,109070],{"class":97,"line":98},[95,109067,107557],{"class":105},[95,109069,151],{"class":101},[95,109071,107562],{"class":105},[10,109073,109074,109075,109078],{},"真正渲染出图像。",[92,109076,109077],{},"image"," 是一个 NumPy 数组，不是文件。",[86,109080,109082],{"className":30363,"code":109081,"language":30365,"meta":14,"style":14},"Image.fromarray(image).save(output_path)\n",[92,109083,109084],{"__ignoreMap":14},[95,109085,109086],{"class":97,"line":98},[95,109087,109081],{"class":105},[10,109089,109090,109091,28370],{},"把数组转换成图片，并保存到 ",[92,109092,109093],{},"render_output.png",[86,109095,109097],{"className":30363,"code":109096,"language":30365,"meta":14,"style":14},"renderer.close()\n",[92,109098,109099],{"__ignoreMap":14},[95,109100,109101],{"class":97,"line":98},[95,109102,109096],{"class":105},[10,109104,109105],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[37,109107,102293],{"id":102292},[10,109109,109110,109111,109113,109114,28370],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[92,109112,109093],{},"，并输出图像数组形状，例如 ",[92,109115,109116],{},"(480, 640, 3)",[10,109118,109119],{},"如果图片里看不到方块，先检查：",[49,109121,109122,109125,109128],{},[52,109123,109124],{},"方块是否掉到相机视野外。",[52,109126,109127],{},"camera 位置是否合理。",[52,109129,109130,109131,109134],{},"是否在 ",[92,109132,109133],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[37,109136,102325],{"id":102324},[10,109138,109139],{},"运行 viewer:",[86,109141,109143],{"className":23806,"code":109142,"language":23808,"meta":14,"style":14},"python ch5_viewer.py\n",[92,109144,109145],{"__ignoreMap":14},[95,109146,109147,109149],{"class":97,"line":98},[95,109148,30365],{"class":1945},[95,109150,108273],{"class":210},[10,109152,109153],{},"运行 renderer:",[86,109155,109157],{"className":23806,"code":109156,"language":23808,"meta":14,"style":14},"python ch5_renderer.py\n",[92,109158,109159],{"__ignoreMap":14},[95,109160,109161,109163],{"class":97,"line":98},[95,109162,30365],{"class":1945},[95,109164,108602],{"class":210},[10,109166,109167],{},"如果在服务器上运行:",[86,109169,109171],{"className":23806,"code":109170,"language":23808,"meta":14,"style":14},"MUJOCO_GL=egl python ch5_renderer.py\n",[92,109172,109173],{"__ignoreMap":14},[95,109174,109175,109177,109179,109181,109184],{"class":97,"line":98},[95,109176,107791],{"class":105},[95,109178,151],{"class":101},[95,109180,107781],{"class":210},[95,109182,109183],{"class":1945}," python",[95,109185,108602],{"class":210},[10,109187,107759],{},[86,109189,109191],{"className":23806,"code":109190,"language":23808,"meta":14,"style":14},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[92,109192,109193],{"__ignoreMap":14},[95,109194,109195,109197,109199,109201,109203],{"class":97,"line":98},[95,109196,107791],{"class":105},[95,109198,151],{"class":101},[95,109200,107785],{"class":210},[95,109202,109183],{"class":1945},[95,109204,108602],{"class":210},[10,109206,109207],{},"再做几个练习：",[49,109209,109210,109217,109220,109226],{},[52,109211,109212,109213,109216],{},"把 renderer 分辨率改成 ",[92,109214,109215],{},"height=240, width=320","，观察输出 shape。",[52,109218,109219],{},"把方块颜色改成蓝色，重新保存图片。",[52,109221,109222,109223,109225],{},"把相机 ",[92,109224,104123],{}," 改远一点，观察画面中物体是否变小。",[52,109227,109228,109229,102391,109232,109235],{},"把 viewer 示例中的 ",[92,109230,109231],{},"data.time \u003C 5.0",[92,109233,109234],{},"data.time \u003C 20.0","，观察更长时间。",[37,109237,102430],{"id":102429},[66,109239,109241],{"id":109240},"viewer-窗口打不开","viewer 窗口打不开",[10,109243,109244],{},"安装:",[86,109246,109248],{"className":23806,"code":109247,"language":23808,"meta":14,"style":14},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[92,109249,109250],{"__ignoreMap":14},[95,109251,109252,109254,109256,109258,109260,109262,109264,109266,109268,109270,109272],{"class":97,"line":98},[95,109253,24561],{"class":1945},[95,109255,26300],{"class":210},[95,109257,23818],{"class":210},[95,109259,26385],{"class":154},[95,109261,102483],{"class":210},[95,109263,100811],{"class":210},[95,109265,102488],{"class":210},[95,109267,100824],{"class":210},[95,109269,100830],{"class":210},[95,109271,100821],{"class":210},[95,109273,109274],{"class":210}," libXinerama\n",[66,109276,109278],{"id":109277},"glfwerror",[92,109279,109280],{},"GLFWError",[10,109282,109283],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[66,109285,109287],{"id":109286},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[10,109289,109290,109291,82516,109293,109295],{},"尝试 ",[92,109292,101014],{},[92,109294,101017],{},"。可能存在版本差异。",[66,109297,109298],{"id":109298},"保存图片是黑的",[10,109300,102552],{},[49,109302,109303,109306,109309,109319],{},[52,109304,109305],{},"XML 里是否有 light。",[52,109307,109308],{},"相机是否对着模型。",[52,109310,109311,109312,109315,109316,28370],{},"是否先 ",[92,109313,109314],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[92,109317,109318],{},"renderer.render()",[52,109320,109321],{},"物体是否已经掉出视野。",[66,109323,109324],{"id":109324},"远程服务器没有显示器",[10,109326,109327],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[86,109329,109330],{"className":23806,"code":109170,"language":23808,"meta":14,"style":14},[92,109331,109332],{"__ignoreMap":14},[95,109333,109334,109336,109338,109340,109342],{"class":97,"line":98},[95,109335,107791],{"class":105},[95,109337,151],{"class":101},[95,109339,107781],{"class":210},[95,109341,109183],{"class":1945},[95,109343,108602],{"class":210},[10,109345,109346],{},"如果 EGL 不可用，再尝试：",[86,109348,109349],{"className":23806,"code":109190,"language":23808,"meta":14,"style":14},[92,109350,109351],{"__ignoreMap":14},[95,109352,109353,109355,109357,109359,109361],{"class":97,"line":98},[95,109354,107791],{"class":105},[95,109356,151],{"class":101},[95,109358,107785],{"class":210},[95,109360,109183],{"class":1945},[95,109362,108602],{"class":210},[37,109364,102584],{"id":102583},[10,109366,109367],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[49,109369,109370,109373,109376],{},[52,109371,109372],{},"先用 viewer 看模型和控制是否正常。",[52,109374,109375],{},"再用 renderer 保存图片或构造视觉观测。",[52,109377,109378],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5109,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":1161,"text":107889},{"id":107918,"depth":1161,"text":107919},{"id":107953,"depth":1161,"text":107954},{"id":101229,"depth":15,"text":101230,"children":109392},[109393,109394,109395],{"id":101549,"depth":1161,"text":101549},{"id":108698,"depth":1161,"text":108699},{"id":108876,"depth":1161,"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":1161,"text":109241},{"id":109277,"depth":1161,"text":109280},{"id":109286,"depth":1161,"text":109287},{"id":109298,"depth":1161,"text":109298},{"id":109324,"depth":1161,"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":21,"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],[33,109417,109413],{"id":109418},"_6控制任务cartpole",[37,109420,100624],{"id":100623},[10,109422,109423],{},"本章搭建一个最小 Cartpole 控制任务。",[10,109425,104308],{},[49,109427,109428,109431,109433,109436,109439,109442],{},[52,109429,109430],{},"slide joint",[52,109432,106161],{},[52,109434,109435],{},"cart force actuator",[52,109437,109438],{},"状态观测",[52,109440,109441],{},"简单控制循环",[52,109443,109444],{},"reward 设计雏形",[10,109446,109447],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[86,109449,109452],{"className":109450,"code":109451,"language":5170,"meta":14},[5168],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[92,109453,109451],{"__ignoreMap":14},[10,109455,109456],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[37,109458,100747],{"id":100746},[10,109460,100750],{},[86,109462,109463],{"className":23806,"code":104365,"language":23808,"meta":14,"style":14},[92,109464,109465],{"__ignoreMap":14},[95,109466,109467,109469,109471,109473,109475,109477,109479,109481,109483],{"class":97,"line":98},[95,109468,24561],{"class":1945},[95,109470,26300],{"class":210},[95,109472,23818],{"class":210},[95,109474,26385],{"class":154},[95,109476,104380],{"class":210},[95,109478,100775],{"class":210},[95,109480,102478],{"class":210},[95,109482,100791],{"class":210},[95,109484,104389],{"class":210},[10,109486,102796],{},[86,109488,109489],{"className":23806,"code":100896,"language":23808,"meta":14,"style":14},[92,109490,109491],{"__ignoreMap":14},[95,109492,109493,109495,109497,109499],{"class":97,"line":98},[95,109494,23815],{"class":1945},[95,109496,23818],{"class":210},[95,109498,100907],{"class":210},[95,109500,100910],{"class":210},[10,109502,102813],{},[86,109504,109506],{"className":23806,"code":109505,"language":23808,"meta":14,"style":14},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[92,109507,109508,109525,109534],{"__ignoreMap":14},[95,109509,109510,109512,109514,109516,109519,109521,109523],{"class":97,"line":98},[95,109511,30315],{"class":1945},[95,109513,29161],{"class":210},[95,109515,25100],{"class":154},[95,109517,109518],{"class":210}," mujoco-cartpole",[95,109520,100952],{"class":210},[95,109522,100955],{"class":154},[95,109524,100958],{"class":154},[95,109526,109527,109529,109531],{"class":97,"line":15},[95,109528,30315],{"class":1945},[95,109530,100965],{"class":210},[95,109532,109533],{"class":210}," mujoco-cartpole\n",[95,109535,109536,109538,109540,109542],{"class":97,"line":1161},[95,109537,23815],{"class":1945},[95,109539,23818],{"class":210},[95,109541,100907],{"class":210},[95,109543,100910],{"class":210},[10,109545,100981],{},[49,109547,109548,109551,109554],{},[52,109549,109550],{},"本章不依赖 Gymnasium。",[52,109552,109553],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[52,109555,109556],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[37,109558,101022],{"id":101021},[10,109560,109561],{},"Cartpole 的模型结构:",[86,109563,109566],{"className":109564,"code":109565,"language":5170,"meta":14},[5168],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[92,109567,109565],{"__ignoreMap":14},[10,109569,109570],{},"小车通过 slide joint 左右移动:",[86,109572,109574],{"className":53044,"code":109573,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[92,109575,109576],{"__ignoreMap":14},[95,109577,109578,109580,109582,109584,109586,109589,109591,109593,109596,109598,109600,109603],{"class":97,"line":98},[95,109579,1016],{"class":105},[95,109581,102933],{"class":51277},[95,109583,14903],{"class":1945},[95,109585,151],{"class":105},[95,109587,109588],{"class":210},"\"cart_x\"",[95,109590,53801],{"class":1945},[95,109592,151],{"class":105},[95,109594,109595],{"class":210},"\"slide\"",[95,109597,106005],{"class":1945},[95,109599,151],{"class":105},[95,109601,109602],{"class":210},"\"1 0 0\"",[95,109604,101121],{"class":105},[10,109606,109607],{},"杆子通过 hinge joint 旋转:",[86,109609,109611],{"className":53044,"code":109610,"language":53046,"meta":14,"style":14},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[92,109612,109613],{"__ignoreMap":14},[95,109614,109615,109617,109619,109621,109623,109626,109628,109630,109632,109634,109636,109638],{"class":97,"line":98},[95,109616,1016],{"class":105},[95,109618,102933],{"class":51277},[95,109620,14903],{"class":1945},[95,109622,151],{"class":105},[95,109624,109625],{"class":210},"\"pole_hinge\"",[95,109627,53801],{"class":1945},[95,109629,151],{"class":105},[95,109631,105996],{"class":210},[95,109633,106005],{"class":1945},[95,109635,151],{"class":105},[95,109637,106010],{"class":210},[95,109639,101121],{"class":105},[10,109641,109642],{},"控制力作用在小车 slide joint 上:",[86,109644,109646],{"className":53044,"code":109645,"language":53046,"meta":14,"style":14},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[92,109647,109648],{"__ignoreMap":14},[95,109649,109650,109652,109654,109656,109658,109661,109663,109665,109667,109669,109671,109673],{"class":97,"line":98},[95,109651,1016],{"class":105},[95,109653,106051],{"class":51277},[95,109655,14903],{"class":1945},[95,109657,151],{"class":105},[95,109659,109660],{"class":210},"\"cart_motor\"",[95,109662,106061],{"class":1945},[95,109664,151],{"class":105},[95,109666,109588],{"class":210},[95,109668,106068],{"class":1945},[95,109670,151],{"class":105},[95,109672,54293],{"class":210},[95,109674,101121],{"class":105},[66,109676,109678],{"id":109677},"cartpole-的状态是什么","Cartpole 的状态是什么",[10,109680,109681],{},"这个简化模型有两个关节：",[243,109683,109684,109695],{},[246,109685,109686],{},[249,109687,109688,109690,109692],{},[252,109689,102736],{"align":23720},[252,109691,23721],{"align":23720},[252,109693,109694],{"align":23720},"对应状态",[290,109696,109697,109710],{},[249,109698,109699,109704,109707],{},[295,109700,109701],{"align":23720},[92,109702,109703],{},"cart_x",[295,109705,109706],{"align":23720},"slide",[295,109708,109709],{"align":23720},"小车 x 位置",[249,109711,109712,109717,109719],{},[295,109713,109714],{"align":23720},[92,109715,109716],{},"pole_hinge",[295,109718,105817],{"align":23720},[295,109720,109721],{"align":23720},"杆子角度",[10,109723,109724],{},"所以：",[86,109726,109729],{"className":109727,"code":109728,"language":5170,"meta":14},[5168],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[92,109730,109728],{"__ignoreMap":14},[10,109732,109733],{},"把它们拼起来就是观测：",[86,109735,109738],{"className":109736,"code":109737,"language":5170,"meta":14},[5168],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[92,109739,109737],{"__ignoreMap":14},[66,109741,109743],{"id":109742},"action-是什么","action 是什么",[10,109745,109746],{},"本章只有一个 actuator：",[86,109748,109751],{"className":109749,"code":109750,"language":5170,"meta":14},[5168],"data.ctrl[0] = action\n",[92,109752,109750],{"__ignoreMap":14},[10,109754,109755],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[66,109757,109759],{"id":109758},"reward-是什么","reward 是什么",[10,109761,109762],{},"奖励函数：",[86,109764,109766],{"className":30363,"code":109765,"language":30365,"meta":14,"style":14},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[92,109767,109768],{"__ignoreMap":14},[95,109769,109770,109772,109775,109777,109779,109781,109784,109786,109789,109791,109793,109795,109798,109800],{"class":97,"line":98},[95,109771,17029],{"class":101},[95,109773,109774],{"class":154}," float",[95,109776,106],{"class":105},[95,109778,102380],{"class":154},[95,109780,52248],{"class":101},[95,109782,109783],{"class":154}," 0.1",[95,109785,6501],{"class":101},[95,109787,109788],{"class":105}," cart_x ",[95,109790,561],{"class":101},[95,109792,109788],{"class":105},[95,109794,638],{"class":101},[95,109796,109797],{"class":105}," pole_angle ",[95,109799,561],{"class":101},[95,109801,109802],{"class":105}," pole_angle)\n",[10,109804,106203],{},[49,109806,109807,109812,109815],{},[52,109808,109809,109810,28370],{},"基础奖励是 ",[92,109811,102380],{},[52,109813,109814],{},"小车离中心越远，扣分越多。",[52,109816,109817],{},"杆子角度越大，扣分越多。",[10,109819,109820],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[37,109822,101230],{"id":101229},[86,109824,109826],{"className":30363,"code":109825,"language":30365,"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",[92,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},[95,109829,109830,109832],{"class":97,"line":98},[95,109831,30377],{"class":101},[95,109833,101278],{"class":105},[95,109835,109836,109838,109840,109842],{"class":97,"line":15},[95,109837,30377],{"class":101},[95,109839,31365],{"class":105},[95,109841,31368],{"class":101},[95,109843,31371],{"class":105},[95,109845,109846],{"class":97,"line":1161},[95,109847,2382],{"emptyLinePlaceholder":21},[95,109849,109850],{"class":97,"line":1176},[95,109851,2382],{"emptyLinePlaceholder":21},[95,109853,109854,109856,109858],{"class":97,"line":1182},[95,109855,101291],{"class":154},[95,109857,13547],{"class":101},[95,109859,101296],{"class":210},[95,109861,109862],{"class":97,"line":1196},[95,109863,109864],{"class":210},"\u003Cmujoco model=\"cartpole\">\n",[95,109866,109867],{"class":97,"line":1202},[95,109868,101306],{"class":210},[95,109870,109871],{"class":97,"line":1293},[95,109872,2382],{"emptyLinePlaceholder":21},[95,109874,109875],{"class":97,"line":1299},[95,109876,101315],{"class":210},[95,109878,109879],{"class":97,"line":1311},[95,109880,109881],{"class":210},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[95,109883,109884],{"class":97,"line":1594},[95,109885,2382],{"emptyLinePlaceholder":21},[95,109887,109888],{"class":97,"line":1599},[95,109889,109890],{"class":210},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[95,109892,109893],{"class":97,"line":1605},[95,109894,109895],{"class":210},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[95,109897,109898],{"class":97,"line":1610},[95,109899,109900],{"class":210},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[95,109902,109903],{"class":97,"line":1624},[95,109904,2382],{"emptyLinePlaceholder":21},[95,109906,109907],{"class":97,"line":1629},[95,109908,109909],{"class":210},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[95,109911,109912],{"class":97,"line":1635},[95,109913,109914],{"class":210},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[95,109916,109917],{"class":97,"line":1656},[95,109918,109919],{"class":210},"        \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",[95,109921,109922],{"class":97,"line":1661},[95,109923,106415],{"class":210},[95,109925,109926],{"class":97,"line":1675},[95,109927,101344],{"class":210},[95,109929,109930],{"class":97,"line":1680},[95,109931,101349],{"class":210},[95,109933,109934],{"class":97,"line":1709},[95,109935,2382],{"emptyLinePlaceholder":21},[95,109937,109938],{"class":97,"line":1714},[95,109939,106432],{"class":210},[95,109941,109942],{"class":97,"line":1731},[95,109943,109944],{"class":210},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[95,109946,109947],{"class":97,"line":1736},[95,109948,106442],{"class":210},[95,109950,109951],{"class":97,"line":1741},[95,109952,101354],{"class":210},[95,109954,109955],{"class":97,"line":1746},[95,109956,95675],{"class":210},[95,109958,109959],{"class":97,"line":1760},[95,109960,2382],{"emptyLinePlaceholder":21},[95,109962,109963],{"class":97,"line":1765},[95,109964,2382],{"emptyLinePlaceholder":21},[95,109966,109967,109969,109972],{"class":97,"line":2559},[95,109968,31932],{"class":101},[95,109970,109971],{"class":1945}," get_observation",[95,109973,109974],{"class":105},"(data: mujoco.MjData) -> np.ndarray:\n",[95,109976,109977,109979],{"class":97,"line":2573},[95,109978,4072],{"class":101},[95,109980,109981],{"class":105}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[95,109983,109984],{"class":97,"line":2581},[95,109985,2382],{"emptyLinePlaceholder":21},[95,109987,109988],{"class":97,"line":2586},[95,109989,2382],{"emptyLinePlaceholder":21},[95,109991,109992,109994,109997,110000,110002],{"class":97,"line":2592},[95,109993,31932],{"class":101},[95,109995,109996],{"class":1945}," compute_reward",[95,109998,109999],{"class":105},"(obs: np.ndarray) -> ",[95,110001,145],{"class":154},[95,110003,3721],{"class":105},[95,110005,110006,110009,110011,110014,110016],{"class":97,"line":2598},[95,110007,110008],{"class":105},"    cart_x ",[95,110010,151],{"class":101},[95,110012,110013],{"class":105}," obs[",[95,110015,297],{"class":154},[95,110017,33231],{"class":105},[95,110019,110020,110023,110025,110027,110029],{"class":97,"line":2603},[95,110021,110022],{"class":105},"    pole_angle ",[95,110024,151],{"class":101},[95,110026,110013],{"class":105},[95,110028,323],{"class":154},[95,110030,33231],{"class":105},[95,110032,110033,110035,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059],{"class":97,"line":7931},[95,110034,4072],{"class":101},[95,110036,109774],{"class":154},[95,110038,106],{"class":105},[95,110040,102380],{"class":154},[95,110042,52248],{"class":101},[95,110044,109783],{"class":154},[95,110046,6501],{"class":101},[95,110048,109788],{"class":105},[95,110050,561],{"class":101},[95,110052,109788],{"class":105},[95,110054,638],{"class":101},[95,110056,109797],{"class":105},[95,110058,561],{"class":101},[95,110060,109802],{"class":105},[95,110062,110063],{"class":97,"line":7955},[95,110064,2382],{"emptyLinePlaceholder":21},[95,110066,110067],{"class":97,"line":7960},[95,110068,2382],{"emptyLinePlaceholder":21},[95,110070,110071,110073,110075,110077,110079],{"class":97,"line":7966},[95,110072,31932],{"class":101},[95,110074,1955],{"class":1945},[95,110076,101375],{"class":105},[95,110078,95663],{"class":154},[95,110080,3721],{"class":105},[95,110082,110083,110085,110087,110089,110091],{"class":97,"line":7993},[95,110084,101384],{"class":105},[95,110086,151],{"class":101},[95,110088,101389],{"class":105},[95,110090,101291],{"class":154},[95,110092,112],{"class":105},[95,110094,110095,110097,110099],{"class":97,"line":7998},[95,110096,101398],{"class":105},[95,110098,151],{"class":101},[95,110100,101403],{"class":105},[95,110102,110103],{"class":97,"line":8004},[95,110104,2382],{"emptyLinePlaceholder":21},[95,110106,110107,110109,110111,110113,110115],{"class":97,"line":8016},[95,110108,105046],{"class":105},[95,110110,323],{"class":154},[95,110112,4425],{"class":105},[95,110114,151],{"class":101},[95,110116,110117],{"class":154}," 0.1\n",[95,110119,110120],{"class":97,"line":8028},[95,110121,105059],{"class":105},[95,110123,110124],{"class":97,"line":8040},[95,110125,2382],{"emptyLinePlaceholder":21},[95,110127,110128,110131,110133],{"class":97,"line":9699},[95,110129,110130],{"class":105},"    total_reward ",[95,110132,151],{"class":101},[95,110134,104738],{"class":154},[95,110136,110137],{"class":97,"line":9724},[95,110138,2382],{"emptyLinePlaceholder":21},[95,110140,110141,110143,110145,110147,110149,110151,110153],{"class":97,"line":9747},[95,110142,3183],{"class":101},[95,110144,31601],{"class":105},[95,110146,26028],{"class":101},[95,110148,32428],{"class":154},[95,110150,106],{"class":105},[95,110152,6393],{"class":154},[95,110154,30771],{"class":105},[95,110156,110157,110160,110162],{"class":97,"line":9771},[95,110158,110159],{"class":105},"        obs ",[95,110161,151],{"class":101},[95,110163,110164],{"class":105}," get_observation(data)\n",[95,110166,110167,110170,110172,110174,110176],{"class":97,"line":9776},[95,110168,110169],{"class":105},"        pole_angle ",[95,110171,151],{"class":101},[95,110173,110013],{"class":105},[95,110175,323],{"class":154},[95,110177,33231],{"class":105},[95,110179,110180,110183,110185,110187,110189],{"class":97,"line":9781},[95,110181,110182],{"class":105},"        pole_angular_velocity ",[95,110184,151],{"class":101},[95,110186,110013],{"class":105},[95,110188,177],{"class":154},[95,110190,33231],{"class":105},[95,110192,110193],{"class":97,"line":9786},[95,110194,2382],{"emptyLinePlaceholder":21},[95,110196,110197,110200,110202,110205,110207,110209,110211,110213,110215],{"class":97,"line":9795},[95,110198,110199],{"class":105},"        action ",[95,110201,151],{"class":101},[95,110203,110204],{"class":154}," 2.0",[95,110206,6501],{"class":101},[95,110208,109797],{"class":105},[95,110210,587],{"class":101},[95,110212,61844],{"class":154},[95,110214,6501],{"class":101},[95,110216,110217],{"class":105}," pole_angular_velocity\n",[95,110219,110220,110222,110224,110226,110228,110230,110232,110234],{"class":97,"line":9800},[95,110221,110199],{"class":105},[95,110223,151],{"class":101},[95,110225,107424],{"class":105},[95,110227,638],{"class":101},[95,110229,102380],{"class":154},[95,110231,12418],{"class":105},[95,110233,102380],{"class":154},[95,110235,112],{"class":105},[95,110237,110238],{"class":97,"line":9806},[95,110239,2382],{"emptyLinePlaceholder":21},[95,110241,110242,110244,110246,110248,110250],{"class":97,"line":9827},[95,110243,106594],{"class":105},[95,110245,297],{"class":154},[95,110247,4425],{"class":105},[95,110249,151],{"class":101},[95,110251,107447],{"class":105},[95,110253,110254],{"class":97,"line":9833},[95,110255,101493],{"class":105},[95,110257,110258],{"class":97,"line":9847},[95,110259,2382],{"emptyLinePlaceholder":21},[95,110261,110262,110265,110267],{"class":97,"line":9853},[95,110263,110264],{"class":105},"        reward ",[95,110266,151],{"class":101},[95,110268,110269],{"class":105}," compute_reward(get_observation(data))\n",[95,110271,110272,110275,110277],{"class":97,"line":9880},[95,110273,110274],{"class":105},"        total_reward ",[95,110276,9460],{"class":101},[95,110278,110279],{"class":105}," reward\n",[95,110281,110282],{"class":97,"line":9889},[95,110283,2382],{"emptyLinePlaceholder":21},[95,110285,110286,110288,110290,110292,110294,110296,110298],{"class":97,"line":9895},[95,110287,2479],{"class":101},[95,110289,31601],{"class":105},[95,110291,434],{"class":101},[95,110293,5737],{"class":154},[95,110295,101536],{"class":101},[95,110297,4075],{"class":154},[95,110299,3721],{"class":105},[95,110301,110302,110304,110306,110309,110312,110315,110318,110320,110323,110326,110328,110330,110332,110334,110337,110339],{"class":97,"line":9903},[95,110303,34635],{"class":154},[95,110305,106],{"class":105},[95,110307,110308],{"class":210},"\"step:\"",[95,110310,110311],{"class":105},", step, ",[95,110313,110314],{"class":210},"\"obs:\"",[95,110316,110317],{"class":105},", np.round(obs, ",[95,110319,177],{"class":154},[95,110321,110322],{"class":105},"), ",[95,110324,110325],{"class":210},"\"action:\"",[95,110327,12418],{"class":105},[95,110329,32003],{"class":154},[95,110331,106],{"class":105},[95,110333,145],{"class":154},[95,110335,110336],{"class":105},"(action), ",[95,110338,177],{"class":154},[95,110340,30482],{"class":105},[95,110342,110343],{"class":97,"line":9908},[95,110344,2382],{"emptyLinePlaceholder":21},[95,110346,110347,110349,110351,110354,110356,110358,110361,110363],{"class":97,"line":16587},[95,110348,31284],{"class":154},[95,110350,106],{"class":105},[95,110352,110353],{"class":210},"\"total_reward:\"",[95,110355,12418],{"class":105},[95,110357,32003],{"class":154},[95,110359,110360],{"class":105},"(total_reward, ",[95,110362,177],{"class":154},[95,110364,30482],{"class":105},[95,110366,110367,110369,110371,110374,110377,110379],{"class":97,"line":16593},[95,110368,31284],{"class":154},[95,110370,106],{"class":105},[95,110372,110373],{"class":210},"\"final obs:\"",[95,110375,110376],{"class":105},", np.round(get_observation(data), ",[95,110378,177],{"class":154},[95,110380,30482],{"class":105},[95,110382,110383],{"class":97,"line":16616},[95,110384,2382],{"emptyLinePlaceholder":21},[95,110386,110387],{"class":97,"line":16622},[95,110388,2382],{"emptyLinePlaceholder":21},[95,110390,110391,110393,110395,110397,110399],{"class":97,"line":16645},[95,110392,1513],{"class":101},[95,110394,31205],{"class":154},[95,110396,101536],{"class":101},[95,110398,101539],{"class":210},[95,110400,3721],{"class":105},[95,110402,110403],{"class":97,"line":16659},[95,110404,101546],{"class":105},[10,110406,103547],{},[86,110408,110410],{"className":23806,"code":110409,"language":23808,"meta":14,"style":14},"touch ch6_cartpole.py\n",[92,110411,110412],{"__ignoreMap":14},[95,110413,110414,110416],{"class":97,"line":98},[95,110415,101260],{"class":1945},[95,110417,110418],{"class":210}," ch6_cartpole.py\n",[10,110420,110421],{},"运行：",[86,110423,110425],{"className":23806,"code":110424,"language":23808,"meta":14,"style":14},"python ch6_cartpole.py\n",[92,110426,110427],{"__ignoreMap":14},[95,110428,110429,110431],{"class":97,"line":98},[95,110430,30365],{"class":1945},[95,110432,110418],{"class":210},[66,110434,101549],{"id":101549},[10,110436,110437],{},"构造观测：",[86,110439,110441],{"className":30363,"code":110440,"language":30365,"meta":14,"style":14},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[92,110442,110443,110451],{"__ignoreMap":14},[95,110444,110445,110447,110449],{"class":97,"line":98},[95,110446,31932],{"class":101},[95,110448,109971],{"class":1945},[95,110450,109974],{"class":105},[95,110452,110453,110455],{"class":97,"line":15},[95,110454,4072],{"class":101},[95,110456,109981],{"class":105},[10,110458,110459,110462,110463,110465,110466,110468],{},[92,110460,110461],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[92,110464,104007],{}," 2 维，",[92,110467,104337],{}," 2 维，所以 obs 是 4 维。",[10,110470,110471],{},"设置初始角度：",[86,110473,110475],{"className":30363,"code":110474,"language":30365,"meta":14,"style":14},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[92,110476,110477,110489],{"__ignoreMap":14},[95,110478,110479,110481,110483,110485,110487],{"class":97,"line":98},[95,110480,104676],{"class":105},[95,110482,323],{"class":154},[95,110484,4425],{"class":105},[95,110486,151],{"class":101},[95,110488,110117],{"class":154},[95,110490,110491],{"class":97,"line":15},[95,110492,104520],{"class":105},[10,110494,110495],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[10,110497,110498],{},"简单反馈控制：",[86,110500,110502],{"className":30363,"code":110501,"language":30365,"meta":14,"style":14},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[92,110503,110504,110524],{"__ignoreMap":14},[95,110505,110506,110508,110510,110512,110514,110516,110518,110520,110522],{"class":97,"line":98},[95,110507,107419],{"class":105},[95,110509,151],{"class":101},[95,110511,110204],{"class":154},[95,110513,6501],{"class":101},[95,110515,109797],{"class":105},[95,110517,587],{"class":101},[95,110519,61844],{"class":154},[95,110521,6501],{"class":101},[95,110523,110217],{"class":105},[95,110525,110526,110528,110530,110532,110534,110536,110538,110540],{"class":97,"line":15},[95,110527,107419],{"class":105},[95,110529,151],{"class":101},[95,110531,107424],{"class":105},[95,110533,638],{"class":101},[95,110535,102380],{"class":154},[95,110537,12418],{"class":105},[95,110539,102380],{"class":154},[95,110541,112],{"class":105},[10,110543,110544],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[10,110546,110547],{},"限制动作：",[86,110549,110551],{"className":30363,"code":110550,"language":30365,"meta":14,"style":14},"np.clip(action, -1.0, 1.0)\n",[92,110552,110553],{"__ignoreMap":14},[95,110554,110555,110558,110560,110562,110564,110566],{"class":97,"line":98},[95,110556,110557],{"class":105},"np.clip(action, ",[95,110559,638],{"class":101},[95,110561,102380],{"class":154},[95,110563,12418],{"class":105},[95,110565,102380],{"class":154},[95,110567,112],{"class":105},[10,110569,110570,110571,110574],{},"因为 XML 里 ",[92,110572,110573],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[66,110576,101685],{"id":101685},[86,110578,110579],{"className":30363,"code":110440,"language":30365,"meta":14,"style":14},[92,110580,110581,110589],{"__ignoreMap":14},[95,110582,110583,110585,110587],{"class":97,"line":98},[95,110584,31932],{"class":101},[95,110586,109971],{"class":1945},[95,110588,109974],{"class":105},[95,110590,110591,110593],{"class":97,"line":15},[95,110592,4072],{"class":101},[95,110594,109981],{"class":105},[10,110596,110597,110598,110601,110602,110605,110606,110609],{},"这段定义了一个函数，用来获取当前观测。",[92,110599,110600],{},"data.qpos.copy()"," 是位置数组副本，",[92,110603,110604],{},"data.qvel.copy()"," 是速度数组副本。",[92,110607,110608],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[10,110611,110612],{},"在本章模型里：",[86,110614,110617],{"className":110615,"code":110616,"language":5170,"meta":14},[5168],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[92,110618,110616],{"__ignoreMap":14},[10,110620,110621],{},"所以返回的 obs 是：",[86,110623,110626],{"className":110624,"code":110625,"language":5170,"meta":14},[5168],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[92,110627,110625],{"__ignoreMap":14},[86,110629,110631],{"className":30363,"code":110630,"language":30365,"meta":14,"style":14},"def compute_reward(obs: np.ndarray) -> float:\n",[92,110632,110633],{"__ignoreMap":14},[95,110634,110635,110637,110639,110641,110643],{"class":97,"line":98},[95,110636,31932],{"class":101},[95,110638,109996],{"class":1945},[95,110640,109999],{"class":105},[95,110642,145],{"class":154},[95,110644,3721],{"class":105},[10,110646,110647,110648,110651],{},"这行定义奖励函数。输入是观测 ",[92,110649,110650],{},"obs","，输出是一个浮点数奖励。",[86,110653,110655],{"className":30363,"code":110654,"language":30365,"meta":14,"style":14},"cart_x = obs[0]\npole_angle = obs[1]\n",[92,110656,110657,110670],{"__ignoreMap":14},[95,110658,110659,110662,110664,110666,110668],{"class":97,"line":98},[95,110660,110661],{"class":105},"cart_x ",[95,110663,151],{"class":101},[95,110665,110013],{"class":105},[95,110667,297],{"class":154},[95,110669,33231],{"class":105},[95,110671,110672,110675,110677,110679,110681],{"class":97,"line":15},[95,110673,110674],{"class":105},"pole_angle ",[95,110676,151],{"class":101},[95,110678,110013],{"class":105},[95,110680,323],{"class":154},[95,110682,33231],{"class":105},[10,110684,110685,110686,110689,110690,110693],{},"数组索引从 0 开始。",[92,110687,110688],{},"obs[0]"," 是第一个元素，也就是小车位置。",[92,110691,110692],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[86,110695,110696],{"className":30363,"code":109765,"language":30365,"meta":14,"style":14},[92,110697,110698],{"__ignoreMap":14},[95,110699,110700,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726],{"class":97,"line":98},[95,110701,17029],{"class":101},[95,110703,109774],{"class":154},[95,110705,106],{"class":105},[95,110707,102380],{"class":154},[95,110709,52248],{"class":101},[95,110711,109783],{"class":154},[95,110713,6501],{"class":101},[95,110715,109788],{"class":105},[95,110717,561],{"class":101},[95,110719,109788],{"class":105},[95,110721,638],{"class":101},[95,110723,109797],{"class":105},[95,110725,561],{"class":101},[95,110727,109802],{"class":105},[10,110729,110730,110731,110734,110735,110738],{},"这行计算奖励。",[92,110732,110733],{},"cart_x * cart_x"," 是小车位置的平方，",[92,110736,110737],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[86,110740,110742],{"className":30363,"code":110741,"language":30365,"meta":14,"style":14},"data.qpos[1] = 0.1\n",[92,110743,110744],{"__ignoreMap":14},[95,110745,110746,110748,110750,110752,110754],{"class":97,"line":98},[95,110747,104676],{"class":105},[95,110749,323],{"class":154},[95,110751,4425],{"class":105},[95,110753,151],{"class":101},[95,110755,110117],{"class":154},[10,110757,110758,110759,110761,110762,110764],{},"手动设置杆子的初始角度。因为 ",[92,110760,105433],{}," 是小车位置，",[92,110763,105436],{}," 是杆子角度，所以这里改的是杆子。",[86,110766,110767],{"className":30363,"code":104520,"language":30365,"meta":14,"style":14},[92,110768,110769],{"__ignoreMap":14},[95,110770,110771],{"class":97,"line":98},[95,110772,104520],{"class":105},[10,110774,105479,110775,110777],{},[92,110776,104007],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[86,110779,110781],{"className":30363,"code":110780,"language":30365,"meta":14,"style":14},"total_reward = 0.0\n",[92,110782,110783],{"__ignoreMap":14},[95,110784,110785,110788,110790],{"class":97,"line":98},[95,110786,110787],{"class":105},"total_reward ",[95,110789,151],{"class":101},[95,110791,104738],{"class":154},[10,110793,110794],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[86,110796,110798],{"className":30363,"code":110797,"language":30365,"meta":14,"style":14},"for step in range(1000):\n",[92,110799,110800],{"__ignoreMap":14},[95,110801,110802,110804,110806,110808,110810,110812,110814],{"class":97,"line":98},[95,110803,3007],{"class":101},[95,110805,31601],{"class":105},[95,110807,26028],{"class":101},[95,110809,32428],{"class":154},[95,110811,106],{"class":105},[95,110813,6393],{"class":154},[95,110815,30771],{"class":105},[10,110817,110818,110819,110821],{},"循环 1000 步。",[92,110820,107111],{}," 是当前步数，从 0 到 999。",[86,110823,110825],{"className":30363,"code":110824,"language":30365,"meta":14,"style":14},"obs = get_observation(data)\n",[92,110826,110827],{"__ignoreMap":14},[95,110828,110829,110832,110834],{"class":97,"line":98},[95,110830,110831],{"class":105},"obs ",[95,110833,151],{"class":101},[95,110835,110164],{"class":105},[10,110837,110838,110839,28370],{},"读取当前状态，保存到 ",[92,110840,110650],{},[86,110842,110844],{"className":30363,"code":110843,"language":30365,"meta":14,"style":14},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[92,110845,110846,110858],{"__ignoreMap":14},[95,110847,110848,110850,110852,110854,110856],{"class":97,"line":98},[95,110849,110674],{"class":105},[95,110851,151],{"class":101},[95,110853,110013],{"class":105},[95,110855,323],{"class":154},[95,110857,33231],{"class":105},[95,110859,110860,110863,110865,110867,110869],{"class":97,"line":15},[95,110861,110862],{"class":105},"pole_angular_velocity ",[95,110864,151],{"class":101},[95,110866,110013],{"class":105},[95,110868,177],{"class":154},[95,110870,33231],{"class":105},[10,110872,110873,110874,110877,110878,28370],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[92,110875,110876],{},"obs[3]","？因为 obs 的顺序是 ",[92,110879,110880],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[86,110882,110884],{"className":30363,"code":110883,"language":30365,"meta":14,"style":14},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[92,110885,110886],{"__ignoreMap":14},[95,110887,110888,110890,110892,110894,110896,110898,110900,110902,110904],{"class":97,"line":98},[95,110889,107419],{"class":105},[95,110891,151],{"class":101},[95,110893,110204],{"class":154},[95,110895,6501],{"class":101},[95,110897,109797],{"class":105},[95,110899,587],{"class":101},[95,110901,61844],{"class":154},[95,110903,6501],{"class":101},[95,110905,110217],{"class":105},[10,110907,110908,110909,100995,110911,110913],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[92,110910,105237],{},[92,110912,35314],{}," 是人为设置的系数，不是固定公式。",[86,110915,110917],{"className":30363,"code":110916,"language":30365,"meta":14,"style":14},"action = np.clip(action, -1.0, 1.0)\n",[92,110918,110919],{"__ignoreMap":14},[95,110920,110921,110923,110925,110927,110929,110931,110933,110935],{"class":97,"line":98},[95,110922,107419],{"class":105},[95,110924,151],{"class":101},[95,110926,107424],{"class":105},[95,110928,638],{"class":101},[95,110930,102380],{"class":154},[95,110932,12418],{"class":105},[95,110934,102380],{"class":154},[95,110936,112],{"class":105},[10,110938,110939],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[86,110941,110942],{"className":30363,"code":109750,"language":30365,"meta":14,"style":14},[92,110943,110944],{"__ignoreMap":14},[95,110945,110946,110948,110950,110952,110954],{"class":97,"line":98},[95,110947,105848],{"class":105},[95,110949,297],{"class":154},[95,110951,4425],{"class":105},[95,110953,151],{"class":101},[95,110955,107447],{"class":105},[10,110957,110958],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[86,110960,110961],{"className":30363,"code":104482,"language":30365,"meta":14,"style":14},[92,110962,110963],{"__ignoreMap":14},[95,110964,110965],{"class":97,"line":98},[95,110966,104482],{"class":105},[10,110968,110969,110970,110972],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[92,110971,106103],{}," 计算小车和杆子的下一刻状态。",[86,110974,110976],{"className":30363,"code":110975,"language":30365,"meta":14,"style":14},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[92,110977,110978,110987],{"__ignoreMap":14},[95,110979,110980,110983,110985],{"class":97,"line":98},[95,110981,110982],{"class":105},"reward ",[95,110984,151],{"class":101},[95,110986,110269],{"class":105},[95,110988,110989,110991,110993],{"class":97,"line":15},[95,110990,110787],{"class":105},[95,110992,9460],{"class":101},[95,110994,110279],{"class":105},[10,110996,110997,110998,111000,111001,111004,111005,28370],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[92,110999,9460],{}," 是简写，",[92,111002,111003],{},"total_reward += reward"," 等价于 ",[92,111006,111007],{},"total_reward = total_reward + reward",[86,111009,111011],{"className":30363,"code":111010,"language":30365,"meta":14,"style":14},"if step % 100 == 0:\n",[92,111012,111013],{"__ignoreMap":14},[95,111014,111015,111017,111019,111021,111023,111025,111027],{"class":97,"line":98},[95,111016,1513],{"class":101},[95,111018,31601],{"class":105},[95,111020,434],{"class":101},[95,111022,5737],{"class":154},[95,111024,101536],{"class":101},[95,111026,4075],{"class":154},[95,111028,3721],{"class":105},[10,111030,111031,111033,111034,111037],{},[92,111032,434],{}," 是取余数。",[92,111035,111036],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[86,111039,111041],{"className":30363,"code":111040,"language":30365,"meta":14,"style":14},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[92,111042,111043],{"__ignoreMap":14},[95,111044,111045,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075],{"class":97,"line":98},[95,111046,30400],{"class":154},[95,111048,106],{"class":105},[95,111050,110308],{"class":210},[95,111052,110311],{"class":105},[95,111054,110314],{"class":210},[95,111056,110317],{"class":105},[95,111058,177],{"class":154},[95,111060,110322],{"class":105},[95,111062,110325],{"class":210},[95,111064,12418],{"class":105},[95,111066,32003],{"class":154},[95,111068,106],{"class":105},[95,111070,145],{"class":154},[95,111072,110336],{"class":105},[95,111074,177],{"class":154},[95,111076,30482],{"class":105},[10,111078,111079,111080,111083,111084,111087],{},"打印当前步数、观测和动作。",[92,111081,111082],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[92,111085,111086],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[37,111089,102293],{"id":102292},[10,111091,111092],{},"观测向量:",[86,111094,111097],{"className":111095,"code":111096,"language":5170,"meta":14},[5168],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[92,111098,111096],{"__ignoreMap":14},[10,111100,111101],{},"控制器是教学用的简单线性反馈，不保证最优。",[10,111103,111104],{},"每隔 100 步会打印一次：",[86,111106,111109],{"className":111107,"code":111108,"language":5170,"meta":14},[5168],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[92,111110,111108],{"__ignoreMap":14},[10,111112,111113],{},"重点观察：",[49,111115,111116,111122,111127],{},[52,111117,111118,111121],{},[92,111119,111120],{},"pole_angle"," 是否越来越大。",[52,111123,111124,111126],{},[92,111125,109703],{}," 是否跑得太远。",[52,111128,111129,111130,82516,111132,28370],{},"action 是否经常被 clip 到 ",[92,111131,103892],{},[92,111133,323],{},[10,111135,111136],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[37,111138,102325],{"id":102324},[49,111140,111141,111147,111150,111156,111166,111172,111175],{},[52,111142,111143,111144,28370],{},"把初始角度改为 ",[92,111145,111146],{},"data.qpos[1] = 0.3",[52,111148,111149],{},"重新运行，观察控制是否变差。",[52,111151,111152,111153,111155],{},"把 actuator ",[92,111154,107044],{}," 改小。",[52,111157,111158,111159,111162,111163,28370],{},"打印 ",[92,111160,111161],{},"model.nq, model.nv, model.nu","，应为 ",[92,111164,111165],{},"2 2 1",[52,111167,111168,111169,111171],{},"把 reward 里的 ",[92,111170,110737],{}," 系数改大，观察总奖励变化。",[52,111173,111174],{},"把控制器改成反号，观察杆子是否更容易倒。",[52,111176,111177],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[37,111179,102430],{"id":102429},[66,111181,111182],{"id":111182},"杆子方向和预期不一致",[10,111184,102373,111185,111187,111188,111190],{},[92,111186,106216],{}," 和 capsule 的 ",[92,111189,103153],{},"，必要时用 viewer 可视化确认。",[66,111192,111193],{"id":111193},"控制器越控越倒",[10,111195,111196],{},"说明反馈符号可能反了，尝试:",[86,111198,111200],{"className":30363,"code":111199,"language":30365,"meta":14,"style":14},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[92,111201,111202],{"__ignoreMap":14},[95,111203,111204,111206,111208,111210,111212,111214,111216,111218,111220,111222],{"class":97,"line":98},[95,111205,107419],{"class":105},[95,111207,151],{"class":101},[95,111209,52248],{"class":101},[95,111211,105237],{"class":154},[95,111213,6501],{"class":101},[95,111215,109797],{"class":105},[95,111217,638],{"class":101},[95,111219,61844],{"class":154},[95,111221,6501],{"class":101},[95,111223,110217],{"class":105},[66,111225,111226],{"id":111226},"小车飞走",[10,111228,111229,111230,111232,111233,111236],{},"降低 ",[92,111231,107044],{}," 或缩小 ",[92,111234,111235],{},"action"," 的 clip 范围。",[66,111238,111240,111242],{"id":111239},"obs3-为什么是杆子角速度",[92,111241,110876],{}," 为什么是杆子角速度",[10,111244,111245],{},"因为这个模型里：",[86,111247,111250],{"className":111248,"code":111249,"language":5170,"meta":14},[5168],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[92,111251,111249],{"__ignoreMap":14},[10,111253,109724],{},[86,111255,111258],{"className":111256,"code":111257,"language":5170,"meta":14},[5168],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[92,111259,111257],{"__ignoreMap":14},[66,111261,111263],{"id":111262},"reward-变成负数是否错误","reward 变成负数是否错误",[10,111265,111266],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[37,111268,102584],{"id":102583},[10,111270,111271],{},"一个控制任务通常包含：",[49,111273,111274,111277,111285,111290,111293],{},[52,111275,111276],{},"模型：Cartpole 的 body、joint、actuator。",[52,111278,111279,111280,318,111282,111284],{},"观测：从 ",[92,111281,104007],{},[92,111283,104337],{}," 里取状态。",[52,111286,111287,111288,28370],{},"动作：写入 ",[92,111289,101053],{},[52,111291,111292],{},"奖励：根据任务目标打分。",[52,111294,111295],{},"循环：obs -> action -> step -> reward。",[10,111297,111298],{},"这就是后面 Gymnasium 环境的基本骨架。",[5109,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":1161,"text":109678},{"id":109742,"depth":1161,"text":109743},{"id":109758,"depth":1161,"text":109759},{"id":101229,"depth":15,"text":101230,"children":111311},[111312,111313],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":111182},{"id":111193,"depth":1161,"text":111193},{"id":111226,"depth":1161,"text":111226},{"id":111239,"depth":1161,"text":111322},"obs[3] 为什么是杆子角速度",{"id":111262,"depth":1161,"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":21,"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],[33,111336,111332],{"id":111337},"_7控制任务reacher-机械臂到达目标",[37,111339,100624],{"id":100623},[10,111341,111342],{},"本章搭建一个二维两关节 reacher 任务。",[10,111344,104308],{},[49,111346,111347,111350,111353,111356,111359],{},[52,111348,111349],{},"两个 hinge joint",[52,111351,111352],{},"两个 motor actuator",[52,111354,111355],{},"site 作为末端点和目标点",[52,111357,111358],{},"根据末端和目标距离设计 reward",[52,111360,111361],{},"构造机械臂任务的基本形式",[10,111363,111364],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[10,111366,111367],{},"Reacher 任务可以理解为：",[86,111369,111372],{"className":111370,"code":111371,"language":5170,"meta":14},[5168],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[92,111373,111371],{"__ignoreMap":14},[10,111375,111376],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[37,111378,100747],{"id":100746},[10,111380,100750],{},[86,111382,111383],{"className":23806,"code":104365,"language":23808,"meta":14,"style":14},[92,111384,111385],{"__ignoreMap":14},[95,111386,111387,111389,111391,111393,111395,111397,111399,111401,111403],{"class":97,"line":98},[95,111388,24561],{"class":1945},[95,111390,26300],{"class":210},[95,111392,23818],{"class":210},[95,111394,26385],{"class":154},[95,111396,104380],{"class":210},[95,111398,100775],{"class":210},[95,111400,102478],{"class":210},[95,111402,100791],{"class":210},[95,111404,104389],{"class":210},[10,111406,102796],{},[86,111408,111409],{"className":23806,"code":100896,"language":23808,"meta":14,"style":14},[92,111410,111411],{"__ignoreMap":14},[95,111412,111413,111415,111417,111419],{"class":97,"line":98},[95,111414,23815],{"class":1945},[95,111416,23818],{"class":210},[95,111418,100907],{"class":210},[95,111420,100910],{"class":210},[10,111422,102813],{},[86,111424,111426],{"className":23806,"code":111425,"language":23808,"meta":14,"style":14},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[92,111427,111428,111445,111454],{"__ignoreMap":14},[95,111429,111430,111432,111434,111436,111439,111441,111443],{"class":97,"line":98},[95,111431,30315],{"class":1945},[95,111433,29161],{"class":210},[95,111435,25100],{"class":154},[95,111437,111438],{"class":210}," mujoco-reacher",[95,111440,100952],{"class":210},[95,111442,100955],{"class":154},[95,111444,100958],{"class":154},[95,111446,111447,111449,111451],{"class":97,"line":15},[95,111448,30315],{"class":1945},[95,111450,100965],{"class":210},[95,111452,111453],{"class":210}," mujoco-reacher\n",[95,111455,111456,111458,111460,111462],{"class":97,"line":1161},[95,111457,23815],{"class":1945},[95,111459,23818],{"class":210},[95,111461,100907],{"class":210},[95,111463,100910],{"class":210},[10,111465,100981],{},[49,111467,111468,111471,111474],{},[52,111469,111470],{},"本章使用低维状态，不使用图像输入。",[52,111472,111473],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[52,111475,111476,111477,318,111479,318,111481,111483],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[92,111478,104007],{},[92,111480,104337],{},[92,111482,103657],{}," 的方法一致。",[37,111485,101022],{"id":101021},[10,111487,111488],{},"Reacher 任务核心:",[86,111490,111493],{"className":111491,"code":111492,"language":5170,"meta":14},[5168],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[92,111494,111492],{"__ignoreMap":14},[10,111496,111497],{},"读取 site 世界坐标:",[86,111499,111501],{"className":30363,"code":111500,"language":30365,"meta":14,"style":14},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[92,111502,111503,111516],{"__ignoreMap":14},[95,111504,111505,111507,111509,111511,111514],{"class":97,"line":98},[95,111506,103611],{"class":105},[95,111508,151],{"class":101},[95,111510,103382],{"class":105},[95,111512,111513],{"class":210},"\"tip\"",[95,111515,112],{"class":105},[95,111517,111518,111521,111523],{"class":97,"line":15},[95,111519,111520],{"class":105},"tip_pos ",[95,111522,151],{"class":101},[95,111524,111525],{"class":105}," data.site_xpos[site_id]\n",[66,111527,111529],{"id":111528},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[10,111531,111532,111533,111535],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[92,111534,104007],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[86,111537,111539],{"className":30363,"code":111538,"language":30365,"meta":14,"style":14},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[92,111540,111541,111551],{"__ignoreMap":14},[95,111542,111543,111546,111548],{"class":97,"line":98},[95,111544,111545],{"class":105},"tip ",[95,111547,151],{"class":101},[95,111549,111550],{"class":105}," data.site_xpos[tip_site_id]\n",[95,111552,111553,111556,111558],{"class":97,"line":15},[95,111554,111555],{"class":105},"target ",[95,111557,151],{"class":101},[95,111559,111560],{"class":105}," data.site_xpos[target_site_id]\n",[10,111562,111563],{},"这样 reward 就很容易写：",[86,111565,111567],{"className":30363,"code":111566,"language":30365,"meta":14,"style":14},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[92,111568,111569,111584],{"__ignoreMap":14},[95,111570,111571,111574,111576,111579,111581],{"class":97,"line":98},[95,111572,111573],{"class":105},"dist ",[95,111575,151],{"class":101},[95,111577,111578],{"class":105}," np.linalg.norm(tip ",[95,111580,638],{"class":101},[95,111582,111583],{"class":105}," target)\n",[95,111585,111586,111588,111590,111592],{"class":97,"line":15},[95,111587,110982],{"class":105},[95,111589,151],{"class":101},[95,111591,52248],{"class":101},[95,111593,111594],{"class":105},"dist\n",[10,111596,111597,111598,111601],{},"距离越小，",[92,111599,111600],{},"-dist"," 越接近 0，奖励越高。",[66,111603,111604],{"id":111604},"两关节机械臂的状态",[10,111606,111607],{},"这个模型有两个 hinge joint：",[86,111609,111612],{"className":111610,"code":111611,"language":5170,"meta":14},[5168],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[92,111613,111611],{"__ignoreMap":14},[10,111615,111616],{},"再加上末端和目标位置：",[86,111618,111621],{"className":111619,"code":111620,"language":5170,"meta":14},[5168],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[92,111622,111620],{"__ignoreMap":14},[10,111624,111625],{},"总维度：",[86,111627,111630],{"className":111628,"code":111629,"language":5170,"meta":14},[5168],"2 + 2 + 3 + 3 = 10\n",[92,111631,111629],{"__ignoreMap":14},[66,111633,111635],{"id":111634},"为什么-gravity-是-0","为什么 gravity 是 0",[10,111637,111638],{},"本章把重力设为：",[86,111640,111642],{"className":53044,"code":111641,"language":53046,"meta":14,"style":14},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[92,111643,111644],{"__ignoreMap":14},[95,111645,111646,111648,111650,111652,111654,111656,111658,111660,111662],{"class":97,"line":98},[95,111647,1016],{"class":105},[95,111649,69143],{"class":51277},[95,111651,101171],{"class":1945},[95,111653,151],{"class":105},[95,111655,101176],{"class":210},[95,111657,101179],{"class":1945},[95,111659,151],{"class":105},[95,111661,103748],{"class":210},[95,111663,101121],{"class":105},[10,111665,111666],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[37,111668,101230],{"id":101229},[86,111670,111672],{"className":30363,"code":111671,"language":30365,"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",[92,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},[95,111675,111676,111678],{"class":97,"line":98},[95,111677,30377],{"class":101},[95,111679,101278],{"class":105},[95,111681,111682,111684,111686,111688],{"class":97,"line":15},[95,111683,30377],{"class":101},[95,111685,31365],{"class":105},[95,111687,31368],{"class":101},[95,111689,31371],{"class":105},[95,111691,111692],{"class":97,"line":1161},[95,111693,2382],{"emptyLinePlaceholder":21},[95,111695,111696],{"class":97,"line":1176},[95,111697,2382],{"emptyLinePlaceholder":21},[95,111699,111700,111702,111704],{"class":97,"line":1182},[95,111701,101291],{"class":154},[95,111703,13547],{"class":101},[95,111705,101296],{"class":210},[95,111707,111708],{"class":97,"line":1196},[95,111709,111710],{"class":210},"\u003Cmujoco model=\"two_link_reacher\">\n",[95,111712,111713],{"class":97,"line":1202},[95,111714,111715],{"class":210},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[95,111717,111718],{"class":97,"line":1293},[95,111719,2382],{"emptyLinePlaceholder":21},[95,111721,111722],{"class":97,"line":1299},[95,111723,101315],{"class":210},[95,111725,111726],{"class":97,"line":1311},[95,111727,111728],{"class":210},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[95,111730,111731],{"class":97,"line":1594},[95,111732,111733],{"class":210},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[95,111735,111736],{"class":97,"line":1599},[95,111737,2382],{"emptyLinePlaceholder":21},[95,111739,111740],{"class":97,"line":1605},[95,111741,111742],{"class":210},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[95,111744,111745],{"class":97,"line":1610},[95,111746,111747],{"class":210},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[95,111749,111750],{"class":97,"line":1624},[95,111751,111752],{"class":210},"      \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",[95,111754,111755],{"class":97,"line":1629},[95,111756,2382],{"emptyLinePlaceholder":21},[95,111758,111759],{"class":97,"line":1635},[95,111760,111761],{"class":210},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[95,111763,111764],{"class":97,"line":1656},[95,111765,111766],{"class":210},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[95,111768,111769],{"class":97,"line":1661},[95,111770,111771],{"class":210},"        \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",[95,111773,111774],{"class":97,"line":1675},[95,111775,111776],{"class":210},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[95,111778,111779],{"class":97,"line":1680},[95,111780,106415],{"class":210},[95,111782,111783],{"class":97,"line":1709},[95,111784,101344],{"class":210},[95,111786,111787],{"class":97,"line":1714},[95,111788,101349],{"class":210},[95,111790,111791],{"class":97,"line":1731},[95,111792,2382],{"emptyLinePlaceholder":21},[95,111794,111795],{"class":97,"line":1736},[95,111796,106432],{"class":210},[95,111798,111799],{"class":97,"line":1741},[95,111800,111801],{"class":210},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[95,111803,111804],{"class":97,"line":1746},[95,111805,111806],{"class":210},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[95,111808,111809],{"class":97,"line":1760},[95,111810,106442],{"class":210},[95,111812,111813],{"class":97,"line":1765},[95,111814,101354],{"class":210},[95,111816,111817],{"class":97,"line":2559},[95,111818,95675],{"class":210},[95,111820,111821],{"class":97,"line":2573},[95,111822,2382],{"emptyLinePlaceholder":21},[95,111824,111825],{"class":97,"line":2581},[95,111826,2382],{"emptyLinePlaceholder":21},[95,111828,111829,111831,111834,111837,111839],{"class":97,"line":2586},[95,111830,31932],{"class":101},[95,111832,111833],{"class":1945}," site_position",[95,111835,111836],{"class":105},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[95,111838,1281],{"class":154},[95,111840,111841],{"class":105},") -> np.ndarray:\n",[95,111843,111844,111846,111848],{"class":97,"line":2592},[95,111845,103377],{"class":105},[95,111847,151],{"class":101},[95,111849,111850],{"class":105}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[95,111852,111853,111855,111857,111859,111861],{"class":97,"line":2598},[95,111854,3083],{"class":101},[95,111856,103426],{"class":105},[95,111858,1016],{"class":101},[95,111860,4075],{"class":154},[95,111862,3721],{"class":105},[95,111864,111865,111867,111869,111871,111873,111876,111878,111880,111882,111884],{"class":97,"line":2603},[95,111866,103409],{"class":101},[95,111868,103412],{"class":154},[95,111870,106],{"class":105},[95,111872,158],{"class":101},[95,111874,111875],{"class":210},"\"site not found: ",[95,111877,1002],{"class":154},[95,111879,79787],{"class":105},[95,111881,1052],{"class":154},[95,111883,357],{"class":210},[95,111885,112],{"class":105},[95,111887,111888,111890],{"class":97,"line":7931},[95,111889,4072],{"class":101},[95,111891,111892],{"class":105}," data.site_xpos[site_id].copy()\n",[95,111894,111895],{"class":97,"line":7955},[95,111896,2382],{"emptyLinePlaceholder":21},[95,111898,111899],{"class":97,"line":7960},[95,111900,2382],{"emptyLinePlaceholder":21},[95,111902,111903,111905,111908],{"class":97,"line":7966},[95,111904,31932],{"class":101},[95,111906,111907],{"class":1945}," get_obs",[95,111909,111910],{"class":105},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[95,111912,111913,111916,111918,111921,111923],{"class":97,"line":7993},[95,111914,111915],{"class":105},"    tip ",[95,111917,151],{"class":101},[95,111919,111920],{"class":105}," site_position(model, data, ",[95,111922,111513],{"class":210},[95,111924,112],{"class":105},[95,111926,111927,111930,111932,111934,111937],{"class":97,"line":7998},[95,111928,111929],{"class":105},"    target ",[95,111931,151],{"class":101},[95,111933,111920],{"class":105},[95,111935,111936],{"class":210},"\"target\"",[95,111938,112],{"class":105},[95,111940,111941,111943],{"class":97,"line":8004},[95,111942,4072],{"class":101},[95,111944,111945],{"class":105}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[95,111947,111948],{"class":97,"line":8016},[95,111949,2382],{"emptyLinePlaceholder":21},[95,111951,111952],{"class":97,"line":8028},[95,111953,2382],{"emptyLinePlaceholder":21},[95,111955,111956,111958,111961,111964,111966],{"class":97,"line":8040},[95,111957,31932],{"class":101},[95,111959,111960],{"class":1945}," reward",[95,111962,111963],{"class":105},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[95,111965,145],{"class":154},[95,111967,3721],{"class":105},[95,111969,111970,111972,111974,111976,111978],{"class":97,"line":9699},[95,111971,111915],{"class":105},[95,111973,151],{"class":101},[95,111975,111920],{"class":105},[95,111977,111513],{"class":210},[95,111979,112],{"class":105},[95,111981,111982,111984,111986,111988,111990],{"class":97,"line":9724},[95,111983,111929],{"class":105},[95,111985,151],{"class":101},[95,111987,111920],{"class":105},[95,111989,111936],{"class":210},[95,111991,112],{"class":105},[95,111993,111994,111997,111999,112001,112003],{"class":97,"line":9747},[95,111995,111996],{"class":105},"    dist ",[95,111998,151],{"class":101},[95,112000,111578],{"class":105},[95,112002,638],{"class":101},[95,112004,111583],{"class":105},[95,112006,112007,112010,112012,112015,112017],{"class":97,"line":9771},[95,112008,112009],{"class":105},"    control_cost ",[95,112011,151],{"class":101},[95,112013,112014],{"class":154}," 0.01",[95,112016,6501],{"class":101},[95,112018,112019],{"class":105}," np.sum(np.square(data.ctrl))\n",[95,112021,112022,112024,112026,112028,112030,112032,112034],{"class":97,"line":9776},[95,112023,4072],{"class":101},[95,112025,109774],{"class":154},[95,112027,106],{"class":105},[95,112029,638],{"class":101},[95,112031,111573],{"class":105},[95,112033,638],{"class":101},[95,112035,112036],{"class":105}," control_cost)\n",[95,112038,112039],{"class":97,"line":9781},[95,112040,2382],{"emptyLinePlaceholder":21},[95,112042,112043],{"class":97,"line":9786},[95,112044,2382],{"emptyLinePlaceholder":21},[95,112046,112047,112049,112051,112053,112055],{"class":97,"line":9795},[95,112048,31932],{"class":101},[95,112050,1955],{"class":1945},[95,112052,101375],{"class":105},[95,112054,95663],{"class":154},[95,112056,3721],{"class":105},[95,112058,112059,112061,112063,112065,112067],{"class":97,"line":9800},[95,112060,101384],{"class":105},[95,112062,151],{"class":101},[95,112064,101389],{"class":105},[95,112066,101291],{"class":154},[95,112068,112],{"class":105},[95,112070,112071,112073,112075],{"class":97,"line":9806},[95,112072,101398],{"class":105},[95,112074,151],{"class":101},[95,112076,101403],{"class":105},[95,112078,112079,112081,112083],{"class":97,"line":9827},[95,112080,110130],{"class":105},[95,112082,151],{"class":101},[95,112084,104738],{"class":154},[95,112086,112087],{"class":97,"line":9833},[95,112088,2382],{"emptyLinePlaceholder":21},[95,112090,112091,112093,112095,112097,112099,112101,112103],{"class":97,"line":9847},[95,112092,3183],{"class":101},[95,112094,31601],{"class":105},[95,112096,26028],{"class":101},[95,112098,32428],{"class":154},[95,112100,106],{"class":105},[95,112102,65051],{"class":154},[95,112104,30771],{"class":105},[95,112106,112107],{"class":97,"line":9853},[95,112108,112109],{"class":105},"        mujoco.mj_forward(model, data)\n",[95,112111,112112,112115,112117,112119,112121],{"class":97,"line":9880},[95,112113,112114],{"class":105},"        tip ",[95,112116,151],{"class":101},[95,112118,111920],{"class":105},[95,112120,111513],{"class":210},[95,112122,112],{"class":105},[95,112124,112125,112128,112130,112132,112134],{"class":97,"line":9889},[95,112126,112127],{"class":105},"        target ",[95,112129,151],{"class":101},[95,112131,111920],{"class":105},[95,112133,111936],{"class":210},[95,112135,112],{"class":105},[95,112137,112138,112141,112143,112146,112148],{"class":97,"line":9895},[95,112139,112140],{"class":105},"        error ",[95,112142,151],{"class":101},[95,112144,112145],{"class":105}," target ",[95,112147,638],{"class":101},[95,112149,112150],{"class":105}," tip\n",[95,112152,112153],{"class":97,"line":9903},[95,112154,2382],{"emptyLinePlaceholder":21},[95,112156,112157,112159,112161,112163,112165,112168,112170,112172,112175,112177,112180,112182,112184,112186,112188],{"class":97,"line":9908},[95,112158,106594],{"class":105},[95,112160,297],{"class":154},[95,112162,4425],{"class":105},[95,112164,151],{"class":101},[95,112166,112167],{"class":105}," np.clip(",[95,112169,105237],{"class":154},[95,112171,6501],{"class":101},[95,112173,112174],{"class":105}," error[",[95,112176,183],{"class":154},[95,112178,112179],{"class":105},"], ",[95,112181,638],{"class":101},[95,112183,102380],{"class":154},[95,112185,12418],{"class":105},[95,112187,102380],{"class":154},[95,112189,112],{"class":105},[95,112191,112192,112194,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220],{"class":97,"line":16587},[95,112193,106594],{"class":105},[95,112195,323],{"class":154},[95,112197,4425],{"class":105},[95,112199,151],{"class":101},[95,112201,112167],{"class":105},[95,112203,105237],{"class":154},[95,112205,6501],{"class":101},[95,112207,112174],{"class":105},[95,112209,297],{"class":154},[95,112211,112179],{"class":105},[95,112213,638],{"class":101},[95,112215,102380],{"class":154},[95,112217,12418],{"class":105},[95,112219,102380],{"class":154},[95,112221,112],{"class":105},[95,112223,112224],{"class":97,"line":16593},[95,112225,2382],{"emptyLinePlaceholder":21},[95,112227,112228],{"class":97,"line":16616},[95,112229,101493],{"class":105},[95,112231,112232,112234,112236],{"class":97,"line":16622},[95,112233,110274],{"class":105},[95,112235,9460],{"class":101},[95,112237,112238],{"class":105}," reward(model, data)\n",[95,112240,112241],{"class":97,"line":16645},[95,112242,2382],{"emptyLinePlaceholder":21},[95,112244,112245,112247,112249,112251,112253,112255,112257],{"class":97,"line":16659},[95,112246,2479],{"class":101},[95,112248,31601],{"class":105},[95,112250,434],{"class":101},[95,112252,5737],{"class":154},[95,112254,101536],{"class":101},[95,112256,4075],{"class":154},[95,112258,3721],{"class":105},[95,112260,112261,112264,112266],{"class":97,"line":16679},[95,112262,112263],{"class":105},"            obs ",[95,112265,151],{"class":101},[95,112267,112268],{"class":105}," get_obs(model, data)\n",[95,112270,112271,112273,112275,112277],{"class":97,"line":16685},[95,112272,34635],{"class":154},[95,112274,106],{"class":105},[95,112276,110308],{"class":210},[95,112278,112279],{"class":105},", step)\n",[95,112281,112282,112284,112286,112289,112292,112294],{"class":97,"line":16696},[95,112283,34635],{"class":154},[95,112285,106],{"class":105},[95,112287,112288],{"class":210},"\"  tip:\"",[95,112290,112291],{"class":105},", np.round(tip, ",[95,112293,177],{"class":154},[95,112295,30482],{"class":105},[95,112297,112298,112300,112302,112305,112308,112310],{"class":97,"line":16719},[95,112299,34635],{"class":154},[95,112301,106],{"class":105},[95,112303,112304],{"class":210},"\"  target:\"",[95,112306,112307],{"class":105},", np.round(target, ",[95,112309,177],{"class":154},[95,112311,30482],{"class":105},[95,112313,112314,112316,112318,112321,112324,112326],{"class":97,"line":16741},[95,112315,34635],{"class":154},[95,112317,106],{"class":105},[95,112319,112320],{"class":210},"\"  ctrl:\"",[95,112322,112323],{"class":105},", np.round(data.ctrl.copy(), ",[95,112325,177],{"class":154},[95,112327,30482],{"class":105},[95,112329,112330,112332,112334,112337,112340,112342],{"class":97,"line":16746},[95,112331,34635],{"class":154},[95,112333,106],{"class":105},[95,112335,112336],{"class":210},"\"  obs_dim:\"",[95,112338,112339],{"class":105},", obs.shape[",[95,112341,297],{"class":154},[95,112343,4639],{"class":105},[95,112345,112346],{"class":97,"line":16752},[95,112347,2382],{"emptyLinePlaceholder":21},[95,112349,112350,112352,112354,112356,112358,112360,112362,112364],{"class":97,"line":16766},[95,112351,31284],{"class":154},[95,112353,106],{"class":105},[95,112355,110353],{"class":210},[95,112357,12418],{"class":105},[95,112359,32003],{"class":154},[95,112361,110360],{"class":105},[95,112363,177],{"class":154},[95,112365,30482],{"class":105},[95,112367,112368,112370,112372,112375,112378,112380,112382,112384],{"class":97,"line":16779},[95,112369,31284],{"class":154},[95,112371,106],{"class":105},[95,112373,112374],{"class":210},"\"final tip:\"",[95,112376,112377],{"class":105},", np.round(site_position(model, data, ",[95,112379,111513],{"class":210},[95,112381,110322],{"class":105},[95,112383,177],{"class":154},[95,112385,30482],{"class":105},[95,112387,112388,112390,112392,112395,112397,112399,112401,112403],{"class":97,"line":16784},[95,112389,31284],{"class":154},[95,112391,106],{"class":105},[95,112393,112394],{"class":210},"\"target:\"",[95,112396,112377],{"class":105},[95,112398,111936],{"class":210},[95,112400,110322],{"class":105},[95,112402,177],{"class":154},[95,112404,30482],{"class":105},[95,112406,112407],{"class":97,"line":16798},[95,112408,2382],{"emptyLinePlaceholder":21},[95,112410,112411],{"class":97,"line":16803},[95,112412,2382],{"emptyLinePlaceholder":21},[95,112414,112415,112417,112419,112421,112423],{"class":97,"line":16809},[95,112416,1513],{"class":101},[95,112418,31205],{"class":154},[95,112420,101536],{"class":101},[95,112422,101539],{"class":210},[95,112424,3721],{"class":105},[95,112426,112427],{"class":97,"line":16814},[95,112428,101546],{"class":105},[10,112430,103547],{},[86,112432,112434],{"className":23806,"code":112433,"language":23808,"meta":14,"style":14},"touch ch7_reacher.py\n",[92,112435,112436],{"__ignoreMap":14},[95,112437,112438,112440],{"class":97,"line":98},[95,112439,101260],{"class":1945},[95,112441,112442],{"class":210}," ch7_reacher.py\n",[10,112444,110421],{},[86,112446,112448],{"className":23806,"code":112447,"language":23808,"meta":14,"style":14},"python ch7_reacher.py\n",[92,112449,112450],{"__ignoreMap":14},[95,112451,112452,112454],{"class":97,"line":98},[95,112453,30365],{"class":1945},[95,112455,112442],{"class":210},[66,112457,101549],{"id":101549},[10,112459,112460],{},"读取 site 坐标：",[86,112462,112464],{"className":30363,"code":112463,"language":30365,"meta":14,"style":14},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[92,112465,112466],{"__ignoreMap":14},[95,112467,112468,112470,112472,112474,112476],{"class":97,"line":98},[95,112469,31932],{"class":101},[95,112471,111833],{"class":1945},[95,112473,111836],{"class":105},[95,112475,1281],{"class":154},[95,112477,111841],{"class":105},[10,112479,112480],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[10,112482,110437],{},[86,112484,112486],{"className":30363,"code":112485,"language":30365,"meta":14,"style":14},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[92,112487,112488],{"__ignoreMap":14},[95,112489,112490,112492],{"class":97,"line":98},[95,112491,17029],{"class":101},[95,112493,111945],{"class":105},[10,112495,112496],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[10,112498,109762],{},[86,112500,112502],{"className":30363,"code":112501,"language":30365,"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",[92,112503,112504,112516,112529],{"__ignoreMap":14},[95,112505,112506,112508,112510,112512,112514],{"class":97,"line":98},[95,112507,111573],{"class":105},[95,112509,151],{"class":101},[95,112511,111578],{"class":105},[95,112513,638],{"class":101},[95,112515,111583],{"class":105},[95,112517,112518,112521,112523,112525,112527],{"class":97,"line":15},[95,112519,112520],{"class":105},"control_cost ",[95,112522,151],{"class":101},[95,112524,112014],{"class":154},[95,112526,6501],{"class":101},[95,112528,112019],{"class":105},[95,112530,112531,112533,112535,112537,112539,112541,112543],{"class":97,"line":1161},[95,112532,17029],{"class":101},[95,112534,109774],{"class":154},[95,112536,106],{"class":105},[95,112538,638],{"class":101},[95,112540,111573],{"class":105},[95,112542,638],{"class":101},[95,112544,112036],{"class":105},[10,112546,112547],{},"奖励由两部分组成：",[49,112549,112550,112555],{},[52,112551,112552,112554],{},[92,112553,111600],{},"：末端离目标越远，奖励越低。",[52,112556,112557,112560],{},[92,112558,112559],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[10,112562,112563],{},"简单控制器：",[86,112565,112567],{"className":30363,"code":112566,"language":30365,"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",[92,112568,112569,112582,112614],{"__ignoreMap":14},[95,112570,112571,112574,112576,112578,112580],{"class":97,"line":98},[95,112572,112573],{"class":105},"error ",[95,112575,151],{"class":101},[95,112577,112145],{"class":105},[95,112579,638],{"class":101},[95,112581,112150],{"class":105},[95,112583,112584,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612],{"class":97,"line":15},[95,112585,105848],{"class":105},[95,112587,297],{"class":154},[95,112589,4425],{"class":105},[95,112591,151],{"class":101},[95,112593,112167],{"class":105},[95,112595,105237],{"class":154},[95,112597,6501],{"class":101},[95,112599,112174],{"class":105},[95,112601,183],{"class":154},[95,112603,112179],{"class":105},[95,112605,638],{"class":101},[95,112607,102380],{"class":154},[95,112609,12418],{"class":105},[95,112611,102380],{"class":154},[95,112613,112],{"class":105},[95,112615,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644],{"class":97,"line":1161},[95,112617,105848],{"class":105},[95,112619,323],{"class":154},[95,112621,4425],{"class":105},[95,112623,151],{"class":101},[95,112625,112167],{"class":105},[95,112627,105237],{"class":154},[95,112629,6501],{"class":101},[95,112631,112174],{"class":105},[95,112633,297],{"class":154},[95,112635,112179],{"class":105},[95,112637,638],{"class":101},[95,112639,102380],{"class":154},[95,112641,12418],{"class":105},[95,112643,102380],{"class":154},[95,112645,112],{"class":105},[10,112647,112648],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[66,112650,101685],{"id":101685},[86,112652,112653],{"className":30363,"code":112463,"language":30365,"meta":14,"style":14},[92,112654,112655],{"__ignoreMap":14},[95,112656,112657,112659,112661,112663,112665],{"class":97,"line":98},[95,112658,31932],{"class":101},[95,112660,111833],{"class":1945},[95,112662,111836],{"class":105},[95,112664,1281],{"class":154},[95,112666,111841],{"class":105},[10,112668,112669,112670,112672,112673,82516,112675,28370],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[92,112671,79787],{}," 是 site 的名字，比如 ",[92,112674,111513],{},[92,112676,111936],{},[86,112678,112680],{"className":30363,"code":112679,"language":30365,"meta":14,"style":14},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[92,112681,112682],{"__ignoreMap":14},[95,112683,112684,112686,112688],{"class":97,"line":98},[95,112685,103611],{"class":105},[95,112687,151],{"class":101},[95,112689,111850],{"class":105},[10,112691,112692],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[86,112694,112696],{"className":30363,"code":112695,"language":30365,"meta":14,"style":14},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[92,112697,112698,112710],{"__ignoreMap":14},[95,112699,112700,112702,112704,112706,112708],{"class":97,"line":98},[95,112701,1513],{"class":101},[95,112703,103426],{"class":105},[95,112705,1016],{"class":101},[95,112707,4075],{"class":154},[95,112709,3721],{"class":105},[95,112711,112712,112714,112716,112718,112720,112722,112724,112726,112728,112730],{"class":97,"line":15},[95,112713,103872],{"class":101},[95,112715,103412],{"class":154},[95,112717,106],{"class":105},[95,112719,158],{"class":101},[95,112721,111875],{"class":210},[95,112723,1002],{"class":154},[95,112725,79787],{"class":105},[95,112727,1052],{"class":154},[95,112729,357],{"class":210},[95,112731,112],{"class":105},[10,112733,112734,112735,112738,112739,112741],{},"如果 site 没找到，就主动报错。",[92,112736,112737],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[92,112740,79787],{}," 的值放进字符串里。",[86,112743,112745],{"className":30363,"code":112744,"language":30365,"meta":14,"style":14},"return data.site_xpos[site_id].copy()\n",[92,112746,112747],{"__ignoreMap":14},[95,112748,112749,112751],{"class":97,"line":98},[95,112750,17029],{"class":101},[95,112752,111892],{"class":105},[10,112754,112755,112756,112758,112759,112762],{},"返回这个 site 的世界坐标。",[92,112757,103657],{}," 里的每一行都是一个 site 的 ",[92,112760,112761],{},"(x, y, z)"," 坐标。",[86,112764,112766],{"className":30363,"code":112765,"language":30365,"meta":14,"style":14},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[92,112767,112768],{"__ignoreMap":14},[95,112769,112770,112772,112774],{"class":97,"line":98},[95,112771,31932],{"class":101},[95,112773,111907],{"class":1945},[95,112775,111910],{"class":105},[10,112777,112778],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[86,112780,112782],{"className":30363,"code":112781,"language":30365,"meta":14,"style":14},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[92,112783,112784,112796],{"__ignoreMap":14},[95,112785,112786,112788,112790,112792,112794],{"class":97,"line":98},[95,112787,111545],{"class":105},[95,112789,151],{"class":101},[95,112791,111920],{"class":105},[95,112793,111513],{"class":210},[95,112795,112],{"class":105},[95,112797,112798,112800,112802,112804,112806],{"class":97,"line":15},[95,112799,111555],{"class":105},[95,112801,151],{"class":101},[95,112803,111920],{"class":105},[95,112805,111936],{"class":210},[95,112807,112],{"class":105},[10,112809,112810],{},"分别读取末端点和目标点的世界坐标。",[86,112812,112813],{"className":30363,"code":112485,"language":30365,"meta":14,"style":14},[92,112814,112815],{"__ignoreMap":14},[95,112816,112817,112819],{"class":97,"line":98},[95,112818,17029],{"class":101},[95,112820,111945],{"class":105},[10,112822,112823],{},"把四部分拼成一个观测数组：",[86,112825,112828],{"className":112826,"code":112827,"language":5170,"meta":14},[5168],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[92,112829,112827],{"__ignoreMap":14},[86,112831,112833],{"className":30363,"code":112832,"language":30365,"meta":14,"style":14},"dist = np.linalg.norm(tip - target)\n",[92,112834,112835],{"__ignoreMap":14},[95,112836,112837,112839,112841,112843,112845],{"class":97,"line":98},[95,112838,111573],{"class":105},[95,112840,151],{"class":101},[95,112842,111578],{"class":105},[95,112844,638],{"class":101},[95,112846,111583],{"class":105},[10,112848,112849,112850,112853,112854,112857],{},"计算 tip 到 target 的距离。",[92,112851,112852],{},"tip - target"," 得到一个三维向量，",[92,112855,112856],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[10,112859,14616],{},[86,112861,112864],{"className":112862,"code":112863,"language":5170,"meta":14},[5168],"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",[92,112865,112863],{"__ignoreMap":14},[86,112867,112869],{"className":30363,"code":112868,"language":30365,"meta":14,"style":14},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[92,112870,112871],{"__ignoreMap":14},[95,112872,112873,112875,112877,112879,112881],{"class":97,"line":98},[95,112874,112520],{"class":105},[95,112876,151],{"class":101},[95,112878,112014],{"class":154},[95,112880,6501],{"class":101},[95,112882,112019],{"class":105},[10,112884,112885,112886,112889,112890,112893],{},"计算动作惩罚。",[92,112887,112888],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[92,112891,112892],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[86,112895,112897],{"className":30363,"code":112896,"language":30365,"meta":14,"style":14},"return float(-dist - control_cost)\n",[92,112898,112899],{"__ignoreMap":14},[95,112900,112901,112903,112905,112907,112909,112911,112913],{"class":97,"line":98},[95,112902,17029],{"class":101},[95,112904,109774],{"class":154},[95,112906,106],{"class":105},[95,112908,638],{"class":101},[95,112910,111573],{"class":105},[95,112912,638],{"class":101},[95,112914,112036],{"class":105},[10,112916,112917],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[86,112919,112920],{"className":30363,"code":110780,"language":30365,"meta":14,"style":14},[92,112921,112922],{"__ignoreMap":14},[95,112923,112924,112926,112928],{"class":97,"line":98},[95,112925,110787],{"class":105},[95,112927,151],{"class":101},[95,112929,104738],{"class":154},[10,112931,112932],{},"累计奖励变量，记录整个运行过程的总分。",[86,112934,112936],{"className":30363,"code":112935,"language":30365,"meta":14,"style":14},"for step in range(500):\n",[92,112937,112938],{"__ignoreMap":14},[95,112939,112940,112942,112944,112946,112948,112950,112952],{"class":97,"line":98},[95,112941,3007],{"class":101},[95,112943,31601],{"class":105},[95,112945,26028],{"class":101},[95,112947,32428],{"class":154},[95,112949,106],{"class":105},[95,112951,65051],{"class":154},[95,112953,30771],{"class":105},[10,112955,112956],{},"运行 500 个控制步。",[86,112958,112959],{"className":30363,"code":104520,"language":30365,"meta":14,"style":14},[92,112960,112961],{"__ignoreMap":14},[95,112962,112963],{"class":97,"line":98},[95,112964,104520],{"class":105},[10,112966,112967,112968,100995,112970,112972],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[92,112969,103208],{},[92,112971,103211],{}," 是当前状态下的坐标。",[86,112974,112976],{"className":30363,"code":112975,"language":30365,"meta":14,"style":14},"error = target - tip\n",[92,112977,112978],{"__ignoreMap":14},[95,112979,112980,112982,112984,112986,112988],{"class":97,"line":98},[95,112981,112573],{"class":105},[95,112983,151],{"class":101},[95,112985,112145],{"class":105},[95,112987,638],{"class":101},[95,112989,112150],{"class":105},[10,112991,112992],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[86,112994,112996],{"className":30363,"code":112995,"language":30365,"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",[92,112997,112998,113030],{"__ignoreMap":14},[95,112999,113000,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028],{"class":97,"line":98},[95,113001,105848],{"class":105},[95,113003,297],{"class":154},[95,113005,4425],{"class":105},[95,113007,151],{"class":101},[95,113009,112167],{"class":105},[95,113011,105237],{"class":154},[95,113013,6501],{"class":101},[95,113015,112174],{"class":105},[95,113017,183],{"class":154},[95,113019,112179],{"class":105},[95,113021,638],{"class":101},[95,113023,102380],{"class":154},[95,113025,12418],{"class":105},[95,113027,102380],{"class":154},[95,113029,112],{"class":105},[95,113031,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060],{"class":97,"line":15},[95,113033,105848],{"class":105},[95,113035,323],{"class":154},[95,113037,4425],{"class":105},[95,113039,151],{"class":101},[95,113041,112167],{"class":105},[95,113043,105237],{"class":154},[95,113045,6501],{"class":101},[95,113047,112174],{"class":105},[95,113049,297],{"class":154},[95,113051,112179],{"class":105},[95,113053,638],{"class":101},[95,113055,102380],{"class":154},[95,113057,12418],{"class":105},[95,113059,102380],{"class":154},[95,113061,112],{"class":105},[10,113063,113064,113065,113068],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[92,113066,113067],{},"error -> ctrl -> step"," 的流程。",[86,113070,113071],{"className":30363,"code":104482,"language":30365,"meta":14,"style":14},[92,113072,113073],{"__ignoreMap":14},[95,113074,113075],{"class":97,"line":98},[95,113076,104482],{"class":105},[10,113078,113079],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[86,113081,113083],{"className":30363,"code":113082,"language":30365,"meta":14,"style":14},"obs = get_obs(model, data)\n",[92,113084,113085],{"__ignoreMap":14},[95,113086,113087,113089,113091],{"class":97,"line":98},[95,113088,110831],{"class":105},[95,113090,151],{"class":101},[95,113092,112268],{"class":105},[10,113094,113095,113096,113099],{},"读取最新观测。后面打印 ",[92,113097,113098],{},"obs.shape[0]","，用来确认观测维度是 10。",[37,113101,102293],{"id":102292},[10,113103,113104],{},"观测维度为:",[86,113106,113109],{"className":113107,"code":113108,"language":5170,"meta":14},[5168],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[92,113110,113108],{"__ignoreMap":14},[10,113112,113113],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[10,113115,113116],{},"程序每 100 步打印：",[86,113118,113121],{"className":113119,"code":113120,"language":5170,"meta":14},[5168],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[92,113122,113120],{"__ignoreMap":14},[10,113124,113125,113126,113128],{},"如果控制有效，你应该看到最终 ",[92,113127,103208],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[37,113130,102325],{"id":102324},[49,113132,113133,113136,113139,113145,113151,113158,113168],{},[52,113134,113135],{},"修改目标点位置。",[52,113137,113138],{},"重新运行，观察最终 tip 是否变化。",[52,113140,113141,113142,113144],{},"把 gravity 改成 ",[92,113143,102566],{},"，观察控制是否变差。",[52,113146,111158,113147,111162,113149,28370],{},[92,113148,102135],{},[92,113150,183],{},[52,113152,102388,113153,102391,113155,113157],{},[92,113154,110573],{},[92,113156,107284],{},"，观察机械臂是否更难移动。",[52,113159,102388,113160,82507,113162,102391,113164,113167],{},[92,113161,103211],{},[92,113163,104123],{},[92,113165,113166],{},"0.2 0 0.6","，观察 reward 和 final tip。",[52,113169,113170],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[37,113172,102430],{"id":102429},[66,113174,113176],{"id":113175},"site-not-found",[92,113177,113178],{},"site not found",[10,113180,113181,113182,100995,113185,28370],{},"检查 XML 中是否有 ",[92,113183,113184],{},"site name=\"tip\"",[92,113186,113187],{},"site name=\"target\"",[66,113189,113190],{"id":113190},"机械臂完全不动",[10,113192,102500],{},[49,113194,113195,113200,113203,113208],{},[52,113196,113197,113199],{},[92,113198,102135],{}," 是否为 2",[52,113201,113202],{},"actuator 是否引用正确 joint",[52,113204,113205,113207],{},[92,113206,101053],{}," 是否被赋值",[52,113209,113210,113211],{},"是否执行了 ",[92,113212,100662],{},[66,113214,113215],{"id":113215},"控制效果不好",[10,113217,113218],{},"正常。本章重点不是控制器最优，而是任务结构:",[86,113220,113223],{"className":113221,"code":113222,"language":5170,"meta":14},[5168],"obs → action → mj_step → reward → next_obs\n",[92,113224,113222],{"__ignoreMap":14},[66,113226,113228],{"id":113227},"tip-坐标不变化","tip 坐标不变化",[10,113230,102552],{},[49,113232,113233,113238,113246,113255],{},[52,113234,113235,113236,28370],{},"是否每步调用了 ",[92,113237,100662],{},[52,113239,113240,113241,100995,113243,28370],{},"是否写入了 ",[92,113242,106103],{},[92,113244,113245],{},"data.ctrl[1]",[52,113247,113248,113249,318,113252,28370],{},"actuator 是否正确引用 ",[92,113250,113251],{},"joint1",[92,113253,113254],{},"joint2",[52,113256,113257],{},"控制输入是否太小。",[66,113259,113260],{"id":113260},"目标点不会动",[10,113262,113263],{},"本章的 target 是固定 site：",[86,113265,113267],{"className":53044,"code":113266,"language":53046,"meta":14,"style":14},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[92,113268,113269],{"__ignoreMap":14},[95,113270,113271,113273,113275,113277,113279,113281,113283,113285,113288],{"class":97,"line":98},[95,113272,1016],{"class":105},[95,113274,103187],{"class":51277},[95,113276,14903],{"class":1945},[95,113278,151],{"class":105},[95,113280,111936],{"class":210},[95,113282,101083],{"class":1945},[95,113284,151],{"class":105},[95,113286,113287],{"class":210},"\"0.5 0 0.4\"",[95,113289,113290],{"class":105}," ...\u002F>\n",[10,113292,113293,113294,113296],{},"它直接挂在 ",[92,113295,101818],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[66,113298,113299],{"id":113299},"机械臂不像真实机械臂",[10,113301,113302],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[37,113304,102584],{"id":102583},[10,113306,113307],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[10,113309,113310],{},"核心公式：",[86,113312,113315],{"className":113313,"code":113314,"language":5170,"meta":14},[5168],"distance = ||tip - target||\nreward = -distance - action_cost\n",[92,113316,113314],{"__ignoreMap":14},[10,113318,113319],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5109,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":1161,"text":111529},{"id":111604,"depth":1161,"text":111604},{"id":111634,"depth":1161,"text":111635},{"id":101229,"depth":15,"text":101230,"children":113333},[113334,113335],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":113178},{"id":113190,"depth":1161,"text":113190},{"id":113215,"depth":1161,"text":113215},{"id":113227,"depth":1161,"text":113228},{"id":113260,"depth":1161,"text":113260},{"id":113299,"depth":1161,"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":21,"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],[33,113358,113354],{"id":113359},"_8gymnasium-风格强化学习接口基础",[37,113361,100624],{"id":100623},[10,113363,113364],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[10,113366,113367],{},"你将实现:",[86,113369,113371],{"className":30363,"code":113370,"language":30365,"meta":14,"style":14},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[92,113372,113373,113383],{"__ignoreMap":14},[95,113374,113375,113378,113380],{"class":97,"line":98},[95,113376,113377],{"class":105},"obs, info ",[95,113379,151],{"class":101},[95,113381,113382],{"class":105}," env.reset()\n",[95,113384,113385,113388,113390],{"class":97,"line":15},[95,113386,113387],{"class":105},"obs, reward, terminated, truncated, info ",[95,113389,151],{"class":101},[95,113391,113392],{"class":105}," env.step(action)\n",[10,113394,113395],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[10,113397,113398,113399,113401],{},"前面章节的代码都是“脚本式”的：在 ",[92,113400,102272],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[10,113403,113404],{},"可以先记住 Gymnasium 环境的核心交互：",[86,113406,113409],{"className":113407,"code":113408,"language":5170,"meta":14},[5168],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[92,113410,113408],{"__ignoreMap":14},[37,113412,100747],{"id":100746},[10,113414,100750],{},[86,113416,113417],{"className":23806,"code":104365,"language":23808,"meta":14,"style":14},[92,113418,113419],{"__ignoreMap":14},[95,113420,113421,113423,113425,113427,113429,113431,113433,113435,113437],{"class":97,"line":98},[95,113422,24561],{"class":1945},[95,113424,26300],{"class":210},[95,113426,23818],{"class":210},[95,113428,26385],{"class":154},[95,113430,104380],{"class":210},[95,113432,100775],{"class":210},[95,113434,102478],{"class":210},[95,113436,100791],{"class":210},[95,113438,104389],{"class":210},[10,113440,102796],{},[86,113442,113444],{"className":23806,"code":113443,"language":23808,"meta":14,"style":14},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[92,113445,113446],{"__ignoreMap":14},[95,113447,113448,113450,113452,113454,113456],{"class":97,"line":98},[95,113449,23815],{"class":1945},[95,113451,23818],{"class":210},[95,113453,100907],{"class":210},[95,113455,107688],{"class":210},[95,113457,113458],{"class":210}," gymnasium\n",[10,113460,102813],{},[86,113462,113464],{"className":23806,"code":113463,"language":23808,"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",[92,113465,113466,113483,113492],{"__ignoreMap":14},[95,113467,113468,113470,113472,113474,113477,113479,113481],{"class":97,"line":98},[95,113469,30315],{"class":1945},[95,113471,29161],{"class":210},[95,113473,25100],{"class":154},[95,113475,113476],{"class":210}," mujoco-gym-api",[95,113478,100952],{"class":210},[95,113480,100955],{"class":154},[95,113482,100958],{"class":154},[95,113484,113485,113487,113489],{"class":97,"line":15},[95,113486,30315],{"class":1945},[95,113488,100965],{"class":210},[95,113490,113491],{"class":210}," mujoco-gym-api\n",[95,113493,113494,113496,113498,113500,113502],{"class":97,"line":1161},[95,113495,23815],{"class":1945},[95,113497,23818],{"class":210},[95,113499,100907],{"class":210},[95,113501,107688],{"class":210},[95,113503,113458],{"class":210},[10,113505,100981],{},[49,113507,113508,113518,113521,113527],{},[52,113509,113510,113511,113514,113515,28370],{},"本章使用 ",[92,113512,113513],{},"gymnasium","，不是旧版 ",[92,113516,113517],{},"gym",[52,113519,113520],{},"Gymnasium API 与旧 Gym API 有差异。",[52,113522,113523,113524,28370],{},"旧 Gym 常见返回值是 4 个: ",[92,113525,113526],{},"obs, reward, done, info",[52,113528,113529,113530,28370],{},"Gymnasium 返回值是 5 个: ",[92,113531,113532],{},"obs, reward, terminated, truncated, info",[37,113534,101022],{"id":101021},[10,113536,113537],{},"强化学习环境接口包含:",[243,113539,113540,113549],{},[246,113541,113542],{},[249,113543,113544,113547],{},[252,113545,113546],{"align":23720},"方法",[252,113548,102673],{"align":23720},[290,113550,113551,113561,113571,113581],{},[249,113552,113553,113558],{},[295,113554,113555],{"align":23720},[92,113556,113557],{},"reset()",[295,113559,113560],{"align":23720},"重置环境",[249,113562,113563,113568],{},[295,113564,113565],{"align":23720},[92,113566,113567],{},"step(action)",[295,113569,113570],{"align":23720},"执行动作",[249,113572,113573,113578],{},[295,113574,113575],{"align":23720},[92,113576,113577],{},"observation_space",[295,113579,113580],{"align":23720},"观测空间",[249,113582,113583,113588],{},[295,113584,113585],{"align":23720},[92,113586,113587],{},"action_space",[295,113589,23638],{"align":23720},[10,113591,113592],{},"一个最小环境需要完成:",[86,113594,113597],{"className":113595,"code":113596,"language":5170,"meta":14},[5168],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[92,113598,113596],{"__ignoreMap":14},[66,113600,113602,100995,113605,104615],{"id":113601},"terminated-和-truncated-的区别",[92,113603,113604],{},"terminated",[92,113606,113607],{},"truncated",[10,113609,113610],{},"Gymnasium 把“结束”拆成两个概念：",[243,113612,113613,113623],{},[246,113614,113615],{},[249,113616,113617,113619,113621],{},[252,113618,104551],{"align":23720},[252,113620,100677],{"align":23720},[252,113622,21170],{"align":23720},[290,113624,113625,113637],{},[249,113626,113627,113631,113634],{},[295,113628,113629],{"align":23720},[92,113630,113604],{},[295,113632,113633],{"align":23720},"任务自然结束",[295,113635,113636],{"align":23720},"机械臂到达目标、机器人摔倒",[249,113638,113639,113643,113646],{},[295,113640,113641],{"align":23720},[92,113642,113607],{},[295,113644,113645],{"align":23720},"因外部限制截断",[295,113647,113648],{"align":23720},"达到最大步数、时间限制",[10,113650,113651],{},"本章中：",[86,113653,113655],{"className":30363,"code":113654,"language":30365,"meta":14,"style":14},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[92,113656,113657,113672],{"__ignoreMap":14},[95,113658,113659,113662,113664,113667,113669],{"class":97,"line":98},[95,113660,113661],{"class":105},"terminated ",[95,113663,151],{"class":101},[95,113665,113666],{"class":105}," dist ",[95,113668,1016],{"class":101},[95,113670,113671],{"class":154}," 0.05\n",[95,113673,113674,113677,113679,113681,113684,113686,113688],{"class":97,"line":15},[95,113675,113676],{"class":105},"truncated ",[95,113678,151],{"class":101},[95,113680,38858],{"class":154},[95,113682,113683],{"class":105},".steps ",[95,113685,1692],{"class":101},[95,113687,38858],{"class":154},[95,113689,113690],{"class":105},".max_steps\n",[10,113692,113693],{},"也就是：",[49,113695,113696,113699],{},[52,113697,113698],{},"末端距离目标小于 0.05，任务成功结束。",[52,113700,113701],{},"步数超过上限，episode 被截断。",[66,113703,113705,100995,113707],{"id":113704},"observation_space-和-action_space",[92,113706,113577],{},[92,113708,113587],{},[10,113710,113711],{},"这两个对象告诉算法：",[86,113713,113716],{"className":113714,"code":113715,"language":5170,"meta":14},[5168],"观测长什么样\n动作允许多大\n",[92,113717,113715],{"__ignoreMap":14},[10,113719,14616],{},[86,113721,113723],{"className":30363,"code":113722,"language":30365,"meta":14,"style":14},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[92,113724,113725],{"__ignoreMap":14},[95,113726,113727,113729,113732,113734,113737,113740,113743,113745,113747,113750,113752,113754,113756,113758,113760,113762,113764,113767,113769,113771],{"class":97,"line":98},[95,113728,30808],{"class":154},[95,113730,113731],{"class":105},".action_space ",[95,113733,151],{"class":101},[95,113735,113736],{"class":105}," spaces.Box(",[95,113738,113739],{"class":5199},"low",[95,113741,113742],{"class":101},"=-",[95,113744,102380],{"class":154},[95,113746,12418],{"class":105},[95,113748,113749],{"class":5199},"high",[95,113751,151],{"class":101},[95,113753,102380],{"class":154},[95,113755,12418],{"class":105},[95,113757,95940],{"class":5199},[95,113759,151],{"class":101},[95,113761,106],{"class":105},[95,113763,183],{"class":154},[95,113765,113766],{"class":105},",), ",[95,113768,93477],{"class":5199},[95,113770,151],{"class":101},[95,113772,113773],{"class":105},"np.float32)\n",[10,113775,113776,113777,113780],{},"表示动作是 2 维数组，每个值都在 ",[92,113778,113779],{},"[-1, 1]"," 范围内。",[86,113782,113784],{"className":30363,"code":113783,"language":30365,"meta":14,"style":14},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[92,113785,113786],{"__ignoreMap":14},[95,113787,113788,113790,113793,113795,113797,113799,113801,113804,113806,113808,113810,113812,113814,113816,113818,113820,113822,113824],{"class":97,"line":98},[95,113789,30808],{"class":154},[95,113791,113792],{"class":105},".observation_space ",[95,113794,151],{"class":101},[95,113796,113736],{"class":105},[95,113798,113739],{"class":5199},[95,113800,113742],{"class":101},[95,113802,113803],{"class":105},"np.inf, ",[95,113805,113749],{"class":5199},[95,113807,151],{"class":101},[95,113809,113803],{"class":105},[95,113811,95940],{"class":5199},[95,113813,151],{"class":101},[95,113815,106],{"class":105},[95,113817,552],{"class":154},[95,113819,113766],{"class":105},[95,113821,93477],{"class":5199},[95,113823,151],{"class":101},[95,113825,113773],{"class":105},[10,113827,113828],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[66,113830,113832],{"id":113831},"frame_skip-是什么","frame_skip 是什么",[86,113834,113836],{"className":30363,"code":113835,"language":30365,"meta":14,"style":14},"self.frame_skip = 5\n",[92,113837,113838],{"__ignoreMap":14},[95,113839,113840,113842,113845,113847],{"class":97,"line":98},[95,113841,30808],{"class":154},[95,113843,113844],{"class":105},".frame_skip ",[95,113846,151],{"class":101},[95,113848,54404],{"class":154},[10,113850,113851,113852,113855,113856,113858],{},"表示外部调用一次 ",[92,113853,113854],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[92,113857,101192],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[37,113860,101230],{"id":101229},[86,113862,113864],{"className":30363,"code":113863,"language":30365,"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",[92,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},[95,113867,113868,113870,113873,113875],{"class":97,"line":98},[95,113869,30377],{"class":101},[95,113871,113872],{"class":105}," gymnasium ",[95,113874,31368],{"class":101},[95,113876,113877],{"class":105}," gym\n",[95,113879,113880,113882],{"class":97,"line":15},[95,113881,30377],{"class":101},[95,113883,101278],{"class":105},[95,113885,113886,113888,113890,113892],{"class":97,"line":1161},[95,113887,30377],{"class":101},[95,113889,31365],{"class":105},[95,113891,31368],{"class":101},[95,113893,31371],{"class":105},[95,113895,113896,113898,113900,113902],{"class":97,"line":1176},[95,113897,30722],{"class":101},[95,113899,113872],{"class":105},[95,113901,30377],{"class":101},[95,113903,113904],{"class":105}," spaces\n",[95,113906,113907],{"class":97,"line":1182},[95,113908,2382],{"emptyLinePlaceholder":21},[95,113910,113911],{"class":97,"line":1196},[95,113912,2382],{"emptyLinePlaceholder":21},[95,113914,113915,113917,113919],{"class":97,"line":1202},[95,113916,101291],{"class":154},[95,113918,13547],{"class":101},[95,113920,101296],{"class":210},[95,113922,113923],{"class":97,"line":1293},[95,113924,113925],{"class":210},"\u003Cmujoco model=\"gym_reacher\">\n",[95,113927,113928],{"class":97,"line":1299},[95,113929,111715],{"class":210},[95,113931,113932],{"class":97,"line":1311},[95,113933,2382],{"emptyLinePlaceholder":21},[95,113935,113936],{"class":97,"line":1594},[95,113937,101315],{"class":210},[95,113939,113940],{"class":97,"line":1599},[95,113941,111733],{"class":210},[95,113943,113944],{"class":97,"line":1605},[95,113945,2382],{"emptyLinePlaceholder":21},[95,113947,113948],{"class":97,"line":1610},[95,113949,111742],{"class":210},[95,113951,113952],{"class":97,"line":1624},[95,113953,111747],{"class":210},[95,113955,113956],{"class":97,"line":1629},[95,113957,113958],{"class":210},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[95,113960,113961],{"class":97,"line":1635},[95,113962,2382],{"emptyLinePlaceholder":21},[95,113964,113965],{"class":97,"line":1656},[95,113966,111761],{"class":210},[95,113968,113969],{"class":97,"line":1661},[95,113970,111766],{"class":210},[95,113972,113973],{"class":97,"line":1675},[95,113974,113975],{"class":210},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[95,113977,113978],{"class":97,"line":1680},[95,113979,111776],{"class":210},[95,113981,113982],{"class":97,"line":1709},[95,113983,106415],{"class":210},[95,113985,113986],{"class":97,"line":1714},[95,113987,101344],{"class":210},[95,113989,113990],{"class":97,"line":1731},[95,113991,101349],{"class":210},[95,113993,113994],{"class":97,"line":1736},[95,113995,2382],{"emptyLinePlaceholder":21},[95,113997,113998],{"class":97,"line":1741},[95,113999,106432],{"class":210},[95,114001,114002],{"class":97,"line":1746},[95,114003,111801],{"class":210},[95,114005,114006],{"class":97,"line":1760},[95,114007,111806],{"class":210},[95,114009,114010],{"class":97,"line":1765},[95,114011,106442],{"class":210},[95,114013,114014],{"class":97,"line":2559},[95,114015,101354],{"class":210},[95,114017,114018],{"class":97,"line":2573},[95,114019,95675],{"class":210},[95,114021,114022],{"class":97,"line":2581},[95,114023,2382],{"emptyLinePlaceholder":21},[95,114025,114026],{"class":97,"line":2586},[95,114027,2382],{"emptyLinePlaceholder":21},[95,114029,114030,114032,114035,114037,114039,114041,114044],{"class":97,"line":2592},[95,114031,14677],{"class":101},[95,114033,114034],{"class":1945}," ReacherEnv",[95,114036,106],{"class":105},[95,114038,113517],{"class":1945},[95,114040,664],{"class":105},[95,114042,114043],{"class":1945},"Env",[95,114045,30771],{"class":105},[95,114047,114048,114051,114053,114055,114058],{"class":97,"line":2598},[95,114049,114050],{"class":105},"    metadata ",[95,114052,151],{"class":101},[95,114054,4430],{"class":105},[95,114056,114057],{"class":210},"\"render_modes\"",[95,114059,114060],{"class":105},": []}\n",[95,114062,114063],{"class":97,"line":2603},[95,114064,2382],{"emptyLinePlaceholder":21},[95,114066,114067,114069,114071,114074,114076],{"class":97,"line":7931},[95,114068,30786],{"class":101},[95,114070,30789],{"class":154},[95,114072,114073],{"class":105},"(self) -> ",[95,114075,95663],{"class":154},[95,114077,3721],{"class":105},[95,114079,114080,114082,114084,114086],{"class":97,"line":7955},[95,114081,30802],{"class":154},[95,114083,17244],{"class":105},[95,114085,30814],{"class":154},[95,114087,1958],{"class":105},[95,114089,114090,114092,114095,114097,114099,114101],{"class":97,"line":7960},[95,114091,30830],{"class":154},[95,114093,114094],{"class":105},".model ",[95,114096,151],{"class":101},[95,114098,101389],{"class":105},[95,114100,101291],{"class":154},[95,114102,112],{"class":105},[95,114104,114105,114107,114110,114112,114115,114117],{"class":97,"line":7966},[95,114106,30830],{"class":154},[95,114108,114109],{"class":105},".data ",[95,114111,151],{"class":101},[95,114113,114114],{"class":105}," mujoco.MjData(",[95,114116,30808],{"class":154},[95,114118,114119],{"class":105},".model)\n",[95,114121,114122],{"class":97,"line":7993},[95,114123,2382],{"emptyLinePlaceholder":21},[95,114125,114126,114128,114131,114133,114136,114138,114141,114143],{"class":97,"line":7998},[95,114127,30830],{"class":154},[95,114129,114130],{"class":105},".tip_site_id ",[95,114132,151],{"class":101},[95,114134,114135],{"class":105}," mujoco.mj_name2id(",[95,114137,30808],{"class":154},[95,114139,114140],{"class":105},".model, mujoco.mjtObj.mjOBJ_SITE, ",[95,114142,111513],{"class":210},[95,114144,112],{"class":105},[95,114146,114147,114149,114152,114154,114156,114158,114160,114162],{"class":97,"line":8004},[95,114148,30830],{"class":154},[95,114150,114151],{"class":105},".target_site_id ",[95,114153,151],{"class":101},[95,114155,114135],{"class":105},[95,114157,30808],{"class":154},[95,114159,114140],{"class":105},[95,114161,111936],{"class":210},[95,114163,112],{"class":105},[95,114165,114166,114168,114170,114172,114174,114176,114179,114181,114183,114185,114187],{"class":97,"line":8016},[95,114167,2479],{"class":101},[95,114169,38858],{"class":154},[95,114171,114130],{"class":105},[95,114173,1016],{"class":101},[95,114175,4075],{"class":154},[95,114177,114178],{"class":101}," or",[95,114180,38858],{"class":154},[95,114182,114151],{"class":105},[95,114184,1016],{"class":101},[95,114186,4075],{"class":154},[95,114188,3721],{"class":105},[95,114190,114191,114194,114196,114198,114201],{"class":97,"line":8028},[95,114192,114193],{"class":101},"            raise",[95,114195,103412],{"class":154},[95,114197,106],{"class":105},[95,114199,114200],{"class":210},"\"required sites not found\"",[95,114202,112],{"class":105},[95,114204,114205],{"class":97,"line":8040},[95,114206,2382],{"emptyLinePlaceholder":21},[95,114208,114209,114211,114213,114215],{"class":97,"line":9699},[95,114210,30830],{"class":154},[95,114212,113844],{"class":105},[95,114214,151],{"class":101},[95,114216,54404],{"class":154},[95,114218,114219,114221,114224,114226],{"class":97,"line":9724},[95,114220,30830],{"class":154},[95,114222,114223],{"class":105},".max_steps ",[95,114225,151],{"class":101},[95,114227,114228],{"class":154}," 200\n",[95,114230,114231,114233,114235,114237],{"class":97,"line":9747},[95,114232,30830],{"class":154},[95,114234,113683],{"class":105},[95,114236,151],{"class":101},[95,114238,47318],{"class":154},[95,114240,114241],{"class":97,"line":9771},[95,114242,2382],{"emptyLinePlaceholder":21},[95,114244,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283],{"class":97,"line":9776},[95,114246,30830],{"class":154},[95,114248,113731],{"class":105},[95,114250,151],{"class":101},[95,114252,113736],{"class":105},[95,114254,113739],{"class":5199},[95,114256,113742],{"class":101},[95,114258,102380],{"class":154},[95,114260,12418],{"class":105},[95,114262,113749],{"class":5199},[95,114264,151],{"class":101},[95,114266,102380],{"class":154},[95,114268,12418],{"class":105},[95,114270,95940],{"class":5199},[95,114272,151],{"class":101},[95,114274,106],{"class":105},[95,114276,183],{"class":154},[95,114278,113766],{"class":105},[95,114280,93477],{"class":5199},[95,114282,151],{"class":101},[95,114284,113773],{"class":105},[95,114286,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321],{"class":97,"line":9781},[95,114288,30830],{"class":154},[95,114290,113792],{"class":105},[95,114292,151],{"class":101},[95,114294,113736],{"class":105},[95,114296,113739],{"class":5199},[95,114298,113742],{"class":101},[95,114300,113803],{"class":105},[95,114302,113749],{"class":5199},[95,114304,151],{"class":101},[95,114306,113803],{"class":105},[95,114308,95940],{"class":5199},[95,114310,151],{"class":101},[95,114312,106],{"class":105},[95,114314,552],{"class":154},[95,114316,113766],{"class":105},[95,114318,93477],{"class":5199},[95,114320,151],{"class":101},[95,114322,113773],{"class":105},[95,114324,114325],{"class":97,"line":9786},[95,114326,2382],{"emptyLinePlaceholder":21},[95,114328,114329,114331,114334],{"class":97,"line":9795},[95,114330,30786],{"class":101},[95,114332,114333],{"class":1945}," _get_obs",[95,114335,114336],{"class":105},"(self) -> np.ndarray:\n",[95,114338,114339,114341,114343,114345,114348,114350],{"class":97,"line":9800},[95,114340,112114],{"class":105},[95,114342,151],{"class":101},[95,114344,38858],{"class":154},[95,114346,114347],{"class":105},".data.site_xpos[",[95,114349,30808],{"class":154},[95,114351,114352],{"class":105},".tip_site_id].copy()\n",[95,114354,114355,114357,114359,114361,114363,114365],{"class":97,"line":9806},[95,114356,112127],{"class":105},[95,114358,151],{"class":101},[95,114360,38858],{"class":154},[95,114362,114347],{"class":105},[95,114364,30808],{"class":154},[95,114366,114367],{"class":105},".target_site_id].copy()\n",[95,114369,114370,114372,114374,114377,114379,114382,114384],{"class":97,"line":9827},[95,114371,110159],{"class":105},[95,114373,151],{"class":101},[95,114375,114376],{"class":105}," np.concatenate([",[95,114378,30808],{"class":154},[95,114380,114381],{"class":105},".data.qpos.copy(), ",[95,114383,30808],{"class":154},[95,114385,114386],{"class":105},".data.qvel.copy(), tip, target])\n",[95,114388,114389,114391],{"class":97,"line":9833},[95,114390,14735],{"class":101},[95,114392,114393],{"class":105}," obs.astype(np.float32)\n",[95,114395,114396],{"class":97,"line":9847},[95,114397,2382],{"emptyLinePlaceholder":21},[95,114399,114400,114402,114405,114407,114409],{"class":97,"line":9853},[95,114401,30786],{"class":101},[95,114403,114404],{"class":1945}," _get_reward",[95,114406,114073],{"class":105},[95,114408,145],{"class":154},[95,114410,3721],{"class":105},[95,114412,114413,114415,114417,114419,114421,114423],{"class":97,"line":9880},[95,114414,112114],{"class":105},[95,114416,151],{"class":101},[95,114418,38858],{"class":154},[95,114420,114347],{"class":105},[95,114422,30808],{"class":154},[95,114424,114425],{"class":105},".tip_site_id]\n",[95,114427,114428,114430,114432,114434,114436,114438],{"class":97,"line":9889},[95,114429,112127],{"class":105},[95,114431,151],{"class":101},[95,114433,38858],{"class":154},[95,114435,114347],{"class":105},[95,114437,30808],{"class":154},[95,114439,114440],{"class":105},".target_site_id]\n",[95,114442,114443,114446,114448,114450,114452],{"class":97,"line":9895},[95,114444,114445],{"class":105},"        dist ",[95,114447,151],{"class":101},[95,114449,111578],{"class":105},[95,114451,638],{"class":101},[95,114453,111583],{"class":105},[95,114455,114456,114459,114461,114463,114465,114468,114470],{"class":97,"line":9903},[95,114457,114458],{"class":105},"        control_cost ",[95,114460,151],{"class":101},[95,114462,112014],{"class":154},[95,114464,6501],{"class":101},[95,114466,114467],{"class":105}," np.sum(np.square(",[95,114469,30808],{"class":154},[95,114471,114472],{"class":105},".data.ctrl))\n",[95,114474,114475,114477,114479,114481,114483,114485,114487],{"class":97,"line":9908},[95,114476,14735],{"class":101},[95,114478,109774],{"class":154},[95,114480,106],{"class":105},[95,114482,638],{"class":101},[95,114484,111573],{"class":105},[95,114486,638],{"class":101},[95,114488,112036],{"class":105},[95,114490,114491],{"class":97,"line":16587},[95,114492,2382],{"emptyLinePlaceholder":21},[95,114494,114495,114497,114500,114503,114505,114508,114510,114512,114514,114516,114518,114521,114524,114526,114528,114530,114532],{"class":97,"line":16593},[95,114496,30786],{"class":101},[95,114498,114499],{"class":1945}," reset",[95,114501,114502],{"class":105},"(self, ",[95,114504,561],{"class":101},[95,114506,114507],{"class":105},", seed: ",[95,114509,109],{"class":154},[95,114511,25094],{"class":101},[95,114513,38918],{"class":154},[95,114515,13547],{"class":101},[95,114517,38918],{"class":154},[95,114519,114520],{"class":105},", options: ",[95,114522,114523],{"class":154},"dict",[95,114525,25094],{"class":101},[95,114527,38918],{"class":154},[95,114529,13547],{"class":101},[95,114531,38918],{"class":154},[95,114533,30771],{"class":105},[95,114535,114536,114538,114541,114544,114546],{"class":97,"line":16616},[95,114537,30802],{"class":154},[95,114539,114540],{"class":105},"().reset(",[95,114542,114543],{"class":5199},"seed",[95,114545,151],{"class":101},[95,114547,114548],{"class":105},"seed)\n",[95,114550,114551,114554,114556,114559,114561],{"class":97,"line":16622},[95,114552,114553],{"class":105},"        mujoco.mj_resetData(",[95,114555,30808],{"class":154},[95,114557,114558],{"class":105},".model, ",[95,114560,30808],{"class":154},[95,114562,114563],{"class":105},".data)\n",[95,114565,114566],{"class":97,"line":16645},[95,114567,2382],{"emptyLinePlaceholder":21},[95,114569,114570,114572,114575,114577,114579,114582,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602,114604],{"class":97,"line":16659},[95,114571,30830],{"class":154},[95,114573,114574],{"class":105},".data.qpos[:] ",[95,114576,151],{"class":101},[95,114578,38858],{"class":154},[95,114580,114581],{"class":105},".np_random.uniform(",[95,114583,113739],{"class":5199},[95,114585,113742],{"class":101},[95,114587,86187],{"class":154},[95,114589,12418],{"class":105},[95,114591,113749],{"class":5199},[95,114593,151],{"class":101},[95,114595,86187],{"class":154},[95,114597,12418],{"class":105},[95,114599,31481],{"class":5199},[95,114601,151],{"class":101},[95,114603,30808],{"class":154},[95,114605,114606],{"class":105},".model.nq)\n",[95,114608,114609,114611,114614,114616],{"class":97,"line":16679},[95,114610,30830],{"class":154},[95,114612,114613],{"class":105},".data.qvel[:] ",[95,114615,151],{"class":101},[95,114617,104738],{"class":154},[95,114619,114620,114623,114625,114627,114629],{"class":97,"line":16685},[95,114621,114622],{"class":105},"        mujoco.mj_forward(",[95,114624,30808],{"class":154},[95,114626,114558],{"class":105},[95,114628,30808],{"class":154},[95,114630,114563],{"class":105},[95,114632,114633],{"class":97,"line":16696},[95,114634,2382],{"emptyLinePlaceholder":21},[95,114636,114637,114639,114641,114643],{"class":97,"line":16719},[95,114638,30830],{"class":154},[95,114640,113683],{"class":105},[95,114642,151],{"class":101},[95,114644,47318],{"class":154},[95,114646,114647,114649,114651],{"class":97,"line":16741},[95,114648,14735],{"class":101},[95,114650,38858],{"class":154},[95,114652,114653],{"class":105},"._get_obs(), {}\n",[95,114655,114656],{"class":97,"line":16746},[95,114657,2382],{"emptyLinePlaceholder":21},[95,114659,114660,114662,114665],{"class":97,"line":16752},[95,114661,30786],{"class":101},[95,114663,114664],{"class":1945}," step",[95,114666,114667],{"class":105},"(self, action):\n",[95,114669,114670,114672,114674,114677,114679,114681],{"class":97,"line":16766},[95,114671,110199],{"class":105},[95,114673,151],{"class":101},[95,114675,114676],{"class":105}," np.asarray(action, ",[95,114678,93477],{"class":5199},[95,114680,151],{"class":101},[95,114682,113773],{"class":105},[95,114684,114685,114687,114689,114691,114693,114696,114698],{"class":97,"line":16779},[95,114686,110199],{"class":105},[95,114688,151],{"class":101},[95,114690,107424],{"class":105},[95,114692,30808],{"class":154},[95,114694,114695],{"class":105},".action_space.low, ",[95,114697,30808],{"class":154},[95,114699,114700],{"class":105},".action_space.high)\n",[95,114702,114703],{"class":97,"line":16784},[95,114704,2382],{"emptyLinePlaceholder":21},[95,114706,114707,114709,114712,114714],{"class":97,"line":16798},[95,114708,30830],{"class":154},[95,114710,114711],{"class":105},".data.ctrl[:] ",[95,114713,151],{"class":101},[95,114715,107447],{"class":105},[95,114717,114718,114720,114722,114724,114726,114728,114730],{"class":97,"line":16803},[95,114719,3385],{"class":101},[95,114721,101478],{"class":105},[95,114723,26028],{"class":101},[95,114725,32428],{"class":154},[95,114727,106],{"class":105},[95,114729,30808],{"class":154},[95,114731,114732],{"class":105},".frame_skip):\n",[95,114734,114735,114738,114740,114742,114744],{"class":97,"line":16809},[95,114736,114737],{"class":105},"            mujoco.mj_step(",[95,114739,30808],{"class":154},[95,114741,114558],{"class":105},[95,114743,30808],{"class":154},[95,114745,114563],{"class":105},[95,114747,114748],{"class":97,"line":16814},[95,114749,2382],{"emptyLinePlaceholder":21},[95,114751,114752,114754,114756,114758],{"class":97,"line":16828},[95,114753,30830],{"class":154},[95,114755,113683],{"class":105},[95,114757,9460],{"class":101},[95,114759,55676],{"class":154},[95,114761,114762],{"class":97,"line":16833},[95,114763,2382],{"emptyLinePlaceholder":21},[95,114765,114766,114768,114770,114772],{"class":97,"line":16838},[95,114767,110159],{"class":105},[95,114769,151],{"class":101},[95,114771,38858],{"class":154},[95,114773,114774],{"class":105},"._get_obs()\n",[95,114776,114777,114779,114781,114783],{"class":97,"line":16852},[95,114778,110264],{"class":105},[95,114780,151],{"class":101},[95,114782,38858],{"class":154},[95,114784,114785],{"class":105},"._get_reward()\n",[95,114787,114788],{"class":97,"line":16864},[95,114789,2382],{"emptyLinePlaceholder":21},[95,114791,114792,114794,114796,114798,114800,114802],{"class":97,"line":16869},[95,114793,112114],{"class":105},[95,114795,151],{"class":101},[95,114797,38858],{"class":154},[95,114799,114347],{"class":105},[95,114801,30808],{"class":154},[95,114803,114425],{"class":105},[95,114805,114806,114808,114810,114812,114814,114816],{"class":97,"line":16882},[95,114807,112127],{"class":105},[95,114809,151],{"class":101},[95,114811,38858],{"class":154},[95,114813,114347],{"class":105},[95,114815,30808],{"class":154},[95,114817,114440],{"class":105},[95,114819,114820,114822,114824,114826,114829,114831],{"class":97,"line":16887},[95,114821,114445],{"class":105},[95,114823,151],{"class":101},[95,114825,109774],{"class":154},[95,114827,114828],{"class":105},"(np.linalg.norm(tip ",[95,114830,638],{"class":101},[95,114832,114833],{"class":105}," target))\n",[95,114835,114836],{"class":97,"line":16892},[95,114837,2382],{"emptyLinePlaceholder":21},[95,114839,114840,114843,114845,114847,114849],{"class":97,"line":16897},[95,114841,114842],{"class":105},"        terminated ",[95,114844,151],{"class":101},[95,114846,113666],{"class":105},[95,114848,1016],{"class":101},[95,114850,113671],{"class":154},[95,114852,114853,114856,114858,114860,114862,114864,114866],{"class":97,"line":16910},[95,114854,114855],{"class":105},"        truncated ",[95,114857,151],{"class":101},[95,114859,38858],{"class":154},[95,114861,113683],{"class":105},[95,114863,1692],{"class":101},[95,114865,38858],{"class":154},[95,114867,113690],{"class":105},[95,114869,114870,114873,114875,114877,114880],{"class":97,"line":16915},[95,114871,114872],{"class":105},"        info ",[95,114874,151],{"class":101},[95,114876,4430],{"class":105},[95,114878,114879],{"class":210},"\"distance\"",[95,114881,114882],{"class":105},": dist}\n",[95,114884,114885,114887],{"class":97,"line":32618},[95,114886,14735],{"class":101},[95,114888,114889],{"class":105}," obs, reward, terminated, truncated, info\n",[95,114891,114892],{"class":97,"line":32624},[95,114893,2382],{"emptyLinePlaceholder":21},[95,114895,114896],{"class":97,"line":32630},[95,114897,2382],{"emptyLinePlaceholder":21},[95,114899,114900,114902,114904,114906,114908],{"class":97,"line":32636},[95,114901,31932],{"class":101},[95,114903,1955],{"class":1945},[95,114905,101375],{"class":105},[95,114907,95663],{"class":154},[95,114909,3721],{"class":105},[95,114911,114912,114915,114917],{"class":97,"line":32642},[95,114913,114914],{"class":105},"    env ",[95,114916,151],{"class":101},[95,114918,114919],{"class":105}," ReacherEnv()\n",[95,114921,114922,114925,114927,114930,114932,114934,114936],{"class":97,"line":32653},[95,114923,114924],{"class":105},"    obs, info ",[95,114926,151],{"class":101},[95,114928,114929],{"class":105}," env.reset(",[95,114931,114543],{"class":5199},[95,114933,151],{"class":101},[95,114935,297],{"class":154},[95,114937,112],{"class":105},[95,114939,114940,114942,114944,114947],{"class":97,"line":32659},[95,114941,31284],{"class":154},[95,114943,106],{"class":105},[95,114945,114946],{"class":210},"\"initial obs shape:\"",[95,114948,114949],{"class":105},", obs.shape)\n",[95,114951,114952,114954,114956,114959],{"class":97,"line":32679},[95,114953,31284],{"class":154},[95,114955,106],{"class":105},[95,114957,114958],{"class":210},"\"initial info:\"",[95,114960,114961],{"class":105},", info)\n",[95,114963,114964],{"class":97,"line":32685},[95,114965,2382],{"emptyLinePlaceholder":21},[95,114967,114968,114970,114972],{"class":97,"line":32696},[95,114969,110130],{"class":105},[95,114971,151],{"class":101},[95,114973,104738],{"class":154},[95,114975,114976,114978,114980,114982,114984,114986,114988],{"class":97,"line":32702},[95,114977,3183],{"class":101},[95,114979,31601],{"class":105},[95,114981,26028],{"class":101},[95,114983,32428],{"class":154},[95,114985,106],{"class":105},[95,114987,806],{"class":154},[95,114989,30771],{"class":105},[95,114991,114992,114994,114996],{"class":97,"line":32708},[95,114993,110199],{"class":105},[95,114995,151],{"class":101},[95,114997,114998],{"class":105}," env.action_space.sample()\n",[95,115000,115001,115004,115006],{"class":97,"line":32714},[95,115002,115003],{"class":105},"        obs, reward, terminated, truncated, info ",[95,115005,151],{"class":101},[95,115007,113392],{"class":105},[95,115009,115010,115012,115014],{"class":97,"line":32720},[95,115011,110274],{"class":105},[95,115013,9460],{"class":101},[95,115015,110279],{"class":105},[95,115017,115018,115020,115022,115024,115026,115029,115031,115033,115036,115038,115040,115043,115045,115047,115050,115052,115054,115056],{"class":97,"line":32726},[95,115019,32436],{"class":154},[95,115021,106],{"class":105},[95,115023,110308],{"class":210},[95,115025,110311],{"class":105},[95,115027,115028],{"class":210},"\"reward:\"",[95,115030,12418],{"class":105},[95,115032,32003],{"class":154},[95,115034,115035],{"class":105},"(reward, ",[95,115037,177],{"class":154},[95,115039,110322],{"class":105},[95,115041,115042],{"class":210},"\"distance:\"",[95,115044,12418],{"class":105},[95,115046,32003],{"class":154},[95,115048,115049],{"class":105},"(info[",[95,115051,114879],{"class":210},[95,115053,112179],{"class":105},[95,115055,177],{"class":154},[95,115057,30482],{"class":105},[95,115059,115060,115062,115065,115068],{"class":97,"line":32732},[95,115061,2479],{"class":101},[95,115063,115064],{"class":105}," terminated ",[95,115066,115067],{"class":101},"or",[95,115069,115070],{"class":105}," truncated:\n",[95,115072,115073],{"class":97,"line":32738},[95,115074,115075],{"class":101},"            break\n",[95,115077,115078],{"class":97,"line":32758},[95,115079,2382],{"emptyLinePlaceholder":21},[95,115081,115082,115084,115086,115088,115090,115092,115094,115096],{"class":97,"line":32764},[95,115083,31284],{"class":154},[95,115085,106],{"class":105},[95,115087,110353],{"class":210},[95,115089,12418],{"class":105},[95,115091,32003],{"class":154},[95,115093,110360],{"class":105},[95,115095,177],{"class":154},[95,115097,30482],{"class":105},[95,115099,115100],{"class":97,"line":32780},[95,115101,2382],{"emptyLinePlaceholder":21},[95,115103,115104],{"class":97,"line":32786},[95,115105,2382],{"emptyLinePlaceholder":21},[95,115107,115108,115110,115112,115114,115116],{"class":97,"line":32800},[95,115109,1513],{"class":101},[95,115111,31205],{"class":154},[95,115113,101536],{"class":101},[95,115115,101539],{"class":210},[95,115117,3721],{"class":105},[95,115119,115120],{"class":97,"line":32806},[95,115121,101546],{"class":105},[10,115123,103547],{},[86,115125,115127],{"className":23806,"code":115126,"language":23808,"meta":14,"style":14},"touch ch8_gym_env.py\n",[92,115128,115129],{"__ignoreMap":14},[95,115130,115131,115133],{"class":97,"line":98},[95,115132,101260],{"class":1945},[95,115134,115135],{"class":210}," ch8_gym_env.py\n",[10,115137,110421],{},[86,115139,115141],{"className":23806,"code":115140,"language":23808,"meta":14,"style":14},"python ch8_gym_env.py\n",[92,115142,115143],{"__ignoreMap":14},[95,115144,115145,115147],{"class":97,"line":98},[95,115146,30365],{"class":1945},[95,115148,115135],{"class":210},[66,115150,101549],{"id":101549},[10,115152,115153],{},"继承 Gymnasium 环境：",[86,115155,115157],{"className":30363,"code":115156,"language":30365,"meta":14,"style":14},"class ReacherEnv(gym.Env):\n",[92,115158,115159],{"__ignoreMap":14},[95,115160,115161,115163,115165,115167,115169,115171,115173],{"class":97,"line":98},[95,115162,14677],{"class":101},[95,115164,114034],{"class":1945},[95,115166,106],{"class":105},[95,115168,113517],{"class":1945},[95,115170,664],{"class":105},[95,115172,114043],{"class":1945},[95,115174,30771],{"class":105},[10,115176,115177],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[10,115179,115180],{},"初始化模型：",[86,115182,115184],{"className":30363,"code":115183,"language":30365,"meta":14,"style":14},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[92,115185,115186,115200],{"__ignoreMap":14},[95,115187,115188,115190,115192,115194,115196,115198],{"class":97,"line":98},[95,115189,30808],{"class":154},[95,115191,114094],{"class":105},[95,115193,151],{"class":101},[95,115195,101389],{"class":105},[95,115197,101291],{"class":154},[95,115199,112],{"class":105},[95,115201,115202,115204,115206,115208,115210,115212],{"class":97,"line":15},[95,115203,30808],{"class":154},[95,115205,114109],{"class":105},[95,115207,151],{"class":101},[95,115209,114114],{"class":105},[95,115211,30808],{"class":154},[95,115213,114119],{"class":105},[10,115215,115216,115217,115219],{},"这和前面章节一样，只是现在放到了类的 ",[92,115218,30814],{}," 里。",[10,115221,115222],{},"缓存 site ID：",[86,115224,115226],{"className":30363,"code":115225,"language":30365,"meta":14,"style":14},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[92,115227,115228,115242],{"__ignoreMap":14},[95,115229,115230,115232,115234,115236,115238,115240],{"class":97,"line":98},[95,115231,30808],{"class":154},[95,115233,114130],{"class":105},[95,115235,151],{"class":101},[95,115237,114135],{"class":105},[95,115239,89531],{"class":154},[95,115241,112],{"class":105},[95,115243,115244,115246,115248,115250,115252,115254],{"class":97,"line":15},[95,115245,30808],{"class":154},[95,115247,114151],{"class":105},[95,115249,151],{"class":101},[95,115251,114135],{"class":105},[95,115253,89531],{"class":154},[95,115255,112],{"class":105},[10,115257,115258],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[10,115260,115261],{},"reset：",[86,115263,115265],{"className":30363,"code":115264,"language":30365,"meta":14,"style":14},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[92,115266,115267],{"__ignoreMap":14},[95,115268,115269,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301],{"class":97,"line":98},[95,115270,31932],{"class":101},[95,115272,114499],{"class":1945},[95,115274,114502],{"class":105},[95,115276,561],{"class":101},[95,115278,114507],{"class":105},[95,115280,109],{"class":154},[95,115282,25094],{"class":101},[95,115284,38918],{"class":154},[95,115286,13547],{"class":101},[95,115288,38918],{"class":154},[95,115290,114520],{"class":105},[95,115292,114523],{"class":154},[95,115294,25094],{"class":101},[95,115296,38918],{"class":154},[95,115298,13547],{"class":101},[95,115300,38918],{"class":154},[95,115302,30771],{"class":105},[10,115304,115305,115307],{},[92,115306,70033],{}," 做四件事：",[49,115309,115310,115313,115316,115319],{},[52,115311,115312],{},"设置随机种子。",[52,115314,115315],{},"重置 MuJoCo data。",[52,115317,115318],{},"随机初始化关节角。",[52,115320,115321],{},"返回初始观测和 info。",[10,115323,115324],{},"step：",[86,115326,115328],{"className":30363,"code":115327,"language":30365,"meta":14,"style":14},"def step(self, action):\n",[92,115329,115330],{"__ignoreMap":14},[95,115331,115332,115334,115336],{"class":97,"line":98},[95,115333,31932],{"class":101},[95,115335,114664],{"class":1945},[95,115337,114667],{"class":105},[10,115339,115340,115342],{},[92,115341,107111],{}," 做六件事：",[49,115344,115345,115348,115354,115357,115360,115363],{},[52,115346,115347],{},"检查并裁剪 action。",[52,115349,115350,115351,28370],{},"写入 ",[92,115352,115353],{},"self.data.ctrl",[52,115355,115356],{},"连续推进若干个 MuJoCo 物理步。",[52,115358,115359],{},"计算新观测。",[52,115361,115362],{},"计算奖励和结束条件。",[52,115364,115365],{},"返回 Gymnasium 标准五元组。",[66,115367,101685],{"id":101685},[86,115369,115371],{"className":30363,"code":115370,"language":30365,"meta":14,"style":14},"import gymnasium as gym\n",[92,115372,115373],{"__ignoreMap":14},[95,115374,115375,115377,115379,115381],{"class":97,"line":98},[95,115376,30377],{"class":101},[95,115378,113872],{"class":105},[95,115380,31368],{"class":101},[95,115382,113877],{"class":105},[10,115384,115385,115386,115388,115389,115392],{},"导入 Gymnasium，并起别名 ",[92,115387,113517],{},"。后面写 ",[92,115390,115391],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[86,115394,115396],{"className":30363,"code":115395,"language":30365,"meta":14,"style":14},"from gymnasium import spaces\n",[92,115397,115398],{"__ignoreMap":14},[95,115399,115400,115402,115404,115406],{"class":97,"line":98},[95,115401,30722],{"class":101},[95,115403,113872],{"class":105},[95,115405,30377],{"class":101},[95,115407,113904],{"class":105},[10,115409,115410,115411,115414],{},"导入空间定义工具。",[92,115412,115413],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[86,115416,115417],{"className":30363,"code":115156,"language":30365,"meta":14,"style":14},[92,115418,115419],{"__ignoreMap":14},[95,115420,115421,115423,115425,115427,115429,115431,115433],{"class":97,"line":98},[95,115422,14677],{"class":101},[95,115424,114034],{"class":1945},[95,115426,106],{"class":105},[95,115428,113517],{"class":1945},[95,115430,664],{"class":105},[95,115432,114043],{"class":1945},[95,115434,30771],{"class":105},[10,115436,115437,115438,115441,115442,115444,115445,100995,115447,115449],{},"定义一个类，名字叫 ",[92,115439,115440],{},"ReacherEnv","。括号里的 ",[92,115443,115391],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[92,115446,70033],{},[92,115448,107111],{}," 这两个核心方法。",[86,115451,115453],{"className":30363,"code":115452,"language":30365,"meta":14,"style":14},"metadata = {\"render_modes\": []}\n",[92,115454,115455],{"__ignoreMap":14},[95,115456,115457,115460,115462,115464,115466],{"class":97,"line":98},[95,115458,115459],{"class":105},"metadata ",[95,115461,151],{"class":101},[95,115463,4430],{"class":105},[95,115465,114057],{"class":210},[95,115467,114060],{"class":105},[10,115469,115470],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[86,115472,115474],{"className":30363,"code":115473,"language":30365,"meta":14,"style":14},"def __init__(self) -> None:\n",[92,115475,115476],{"__ignoreMap":14},[95,115477,115478,115480,115482,115484,115486],{"class":97,"line":98},[95,115479,31932],{"class":101},[95,115481,30789],{"class":154},[95,115483,114073],{"class":105},[95,115485,95663],{"class":154},[95,115487,3721],{"class":105},[10,115489,115490,115492,115493,28370],{},[92,115491,30814],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[92,115494,115495],{},"env = ReacherEnv()",[86,115497,115499],{"className":30363,"code":115498,"language":30365,"meta":14,"style":14},"super().__init__()\n",[92,115500,115501],{"__ignoreMap":14},[95,115502,115503,115506,115508,115510],{"class":97,"line":98},[95,115504,115505],{"class":154},"super",[95,115507,17244],{"class":105},[95,115509,30814],{"class":154},[95,115511,1958],{"class":105},[10,115513,115514,115515,115517],{},"调用父类 ",[92,115516,115391],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[86,115519,115520],{"className":30363,"code":115183,"language":30365,"meta":14,"style":14},[92,115521,115522,115536],{"__ignoreMap":14},[95,115523,115524,115526,115528,115530,115532,115534],{"class":97,"line":98},[95,115525,30808],{"class":154},[95,115527,114094],{"class":105},[95,115529,151],{"class":101},[95,115531,101389],{"class":105},[95,115533,101291],{"class":154},[95,115535,112],{"class":105},[95,115537,115538,115540,115542,115544,115546,115548],{"class":97,"line":15},[95,115539,30808],{"class":154},[95,115541,114109],{"class":105},[95,115543,151],{"class":101},[95,115545,114114],{"class":105},[95,115547,30808],{"class":154},[95,115549,114119],{"class":105},[10,115551,115552,115553,115555,115556,100995,115559,115562],{},"把 MuJoCo 模型和状态保存到 ",[92,115554,30808],{}," 上。",[92,115557,115558],{},"self.model",[92,115560,115561],{},"self.data"," 表示这个环境对象自己的模型和状态。",[86,115564,115565],{"className":30363,"code":115225,"language":30365,"meta":14,"style":14},[92,115566,115567,115581],{"__ignoreMap":14},[95,115568,115569,115571,115573,115575,115577,115579],{"class":97,"line":98},[95,115570,30808],{"class":154},[95,115572,114130],{"class":105},[95,115574,151],{"class":101},[95,115576,114135],{"class":105},[95,115578,89531],{"class":154},[95,115580,112],{"class":105},[95,115582,115583,115585,115587,115589,115591,115593],{"class":97,"line":15},[95,115584,30808],{"class":154},[95,115586,114151],{"class":105},[95,115588,151],{"class":101},[95,115590,114135],{"class":105},[95,115592,89531],{"class":154},[95,115594,112],{"class":105},[10,115596,115597,115598,100995,115601,115604],{},"提前查好 tip 和 target 的 site ID。这样 ",[92,115599,115600],{},"_get_obs",[92,115602,115603],{},"_get_reward"," 里就不用每次按名字查找。",[86,115606,115608],{"className":30363,"code":115607,"language":30365,"meta":14,"style":14},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[92,115609,115610,115620,115630],{"__ignoreMap":14},[95,115611,115612,115614,115616,115618],{"class":97,"line":98},[95,115613,30808],{"class":154},[95,115615,113844],{"class":105},[95,115617,151],{"class":101},[95,115619,54404],{"class":154},[95,115621,115622,115624,115626,115628],{"class":97,"line":15},[95,115623,30808],{"class":154},[95,115625,114223],{"class":105},[95,115627,151],{"class":101},[95,115629,114228],{"class":154},[95,115631,115632,115634,115636,115638],{"class":97,"line":1161},[95,115633,30808],{"class":154},[95,115635,113683],{"class":105},[95,115637,151],{"class":101},[95,115639,47318],{"class":154},[10,115641,115642,115645,115646,115649,115650,115653],{},[92,115643,115644],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[92,115647,115648],{},"max_steps"," 是一个 episode 最多运行多少步。",[92,115651,115652],{},"steps"," 记录当前 episode 已经走了多少步。",[86,115655,115656],{"className":30363,"code":113722,"language":30365,"meta":14,"style":14},[92,115657,115658],{"__ignoreMap":14},[95,115659,115660,115662,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698],{"class":97,"line":98},[95,115661,30808],{"class":154},[95,115663,113731],{"class":105},[95,115665,151],{"class":101},[95,115667,113736],{"class":105},[95,115669,113739],{"class":5199},[95,115671,113742],{"class":101},[95,115673,102380],{"class":154},[95,115675,12418],{"class":105},[95,115677,113749],{"class":5199},[95,115679,151],{"class":101},[95,115681,102380],{"class":154},[95,115683,12418],{"class":105},[95,115685,95940],{"class":5199},[95,115687,151],{"class":101},[95,115689,106],{"class":105},[95,115691,183],{"class":154},[95,115693,113766],{"class":105},[95,115695,93477],{"class":5199},[95,115697,151],{"class":101},[95,115699,113773],{"class":105},[10,115701,115702,115703,115706,115707,100995,115710,115713],{},"定义动作空间。",[92,115704,115705],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[92,115708,115709],{},"low=-1.0",[92,115711,115712],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[86,115715,115716],{"className":30363,"code":113783,"language":30365,"meta":14,"style":14},[92,115717,115718],{"__ignoreMap":14},[95,115719,115720,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754],{"class":97,"line":98},[95,115721,30808],{"class":154},[95,115723,113792],{"class":105},[95,115725,151],{"class":101},[95,115727,113736],{"class":105},[95,115729,113739],{"class":5199},[95,115731,113742],{"class":101},[95,115733,113803],{"class":105},[95,115735,113749],{"class":5199},[95,115737,151],{"class":101},[95,115739,113803],{"class":105},[95,115741,95940],{"class":5199},[95,115743,151],{"class":101},[95,115745,106],{"class":105},[95,115747,552],{"class":154},[95,115749,113766],{"class":105},[95,115751,93477],{"class":5199},[95,115753,151],{"class":101},[95,115755,113773],{"class":105},[10,115757,115758,115759,115762,115763,115766],{},"定义观测空间。",[92,115760,115761],{},"shape=(10,)"," 表示观测是 10 个数。",[92,115764,115765],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[86,115768,115770],{"className":30363,"code":115769,"language":30365,"meta":14,"style":14},"def _get_obs(self) -> np.ndarray:\n",[92,115771,115772],{"__ignoreMap":14},[95,115773,115774,115776,115778],{"class":97,"line":98},[95,115775,31932],{"class":101},[95,115777,114333],{"class":1945},[95,115779,114336],{"class":105},[10,115781,115782,115783,115785],{},"定义内部函数，用来生成观测。函数名前面的 ",[92,115784,1098],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[86,115787,115789],{"className":30363,"code":115788,"language":30365,"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",[92,115790,115791,115805],{"__ignoreMap":14},[95,115792,115793,115795,115797,115799,115801,115803],{"class":97,"line":98},[95,115794,111545],{"class":105},[95,115796,151],{"class":101},[95,115798,38858],{"class":154},[95,115800,114347],{"class":105},[95,115802,30808],{"class":154},[95,115804,114352],{"class":105},[95,115806,115807,115809,115811,115813,115815,115817],{"class":97,"line":15},[95,115808,111555],{"class":105},[95,115810,151],{"class":101},[95,115812,38858],{"class":154},[95,115814,114347],{"class":105},[95,115816,30808],{"class":154},[95,115818,114367],{"class":105},[10,115820,115821],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[86,115823,115825],{"className":30363,"code":115824,"language":30365,"meta":14,"style":14},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[92,115826,115827,115843],{"__ignoreMap":14},[95,115828,115829,115831,115833,115835,115837,115839,115841],{"class":97,"line":98},[95,115830,110831],{"class":105},[95,115832,151],{"class":101},[95,115834,114376],{"class":105},[95,115836,30808],{"class":154},[95,115838,114381],{"class":105},[95,115840,30808],{"class":154},[95,115842,114386],{"class":105},[95,115844,115845,115847],{"class":97,"line":15},[95,115846,17029],{"class":101},[95,115848,114393],{"class":105},[10,115850,115851,115852,115855,115856,115858],{},"拼接观测，并转换成 ",[92,115853,115854],{},"float32","。很多强化学习库默认使用 ",[92,115857,115854],{},"，所以这里主动转换。",[86,115860,115861],{"className":30363,"code":115264,"language":30365,"meta":14,"style":14},[92,115862,115863],{"__ignoreMap":14},[95,115864,115865,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897],{"class":97,"line":98},[95,115866,31932],{"class":101},[95,115868,114499],{"class":1945},[95,115870,114502],{"class":105},[95,115872,561],{"class":101},[95,115874,114507],{"class":105},[95,115876,109],{"class":154},[95,115878,25094],{"class":101},[95,115880,38918],{"class":154},[95,115882,13547],{"class":101},[95,115884,38918],{"class":154},[95,115886,114520],{"class":105},[95,115888,114523],{"class":154},[95,115890,25094],{"class":101},[95,115892,38918],{"class":154},[95,115894,13547],{"class":101},[95,115896,38918],{"class":154},[95,115898,30771],{"class":105},[10,115900,115901,115902,115904,115905,115908],{},"定义 reset。",[92,115903,114543],{}," 用来控制随机数，保证实验可以复现。",[92,115906,115907],{},"options"," 用来接收额外配置，本章暂时不用。",[86,115910,115912],{"className":30363,"code":115911,"language":30365,"meta":14,"style":14},"super().reset(seed=seed)\n",[92,115913,115914],{"__ignoreMap":14},[95,115915,115916,115918,115920,115922,115924],{"class":97,"line":98},[95,115917,115505],{"class":154},[95,115919,114540],{"class":105},[95,115921,114543],{"class":5199},[95,115923,151],{"class":101},[95,115925,114548],{"class":105},[10,115927,115928,115929,115932],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[92,115930,115931],{},"self.np_random"," 生成可复现的随机数。",[86,115934,115936],{"className":30363,"code":115935,"language":30365,"meta":14,"style":14},"mujoco.mj_resetData(self.model, self.data)\n",[92,115937,115938],{"__ignoreMap":14},[95,115939,115940,115943,115945,115947,115949],{"class":97,"line":98},[95,115941,115942],{"class":105},"mujoco.mj_resetData(",[95,115944,30808],{"class":154},[95,115946,114558],{"class":105},[95,115948,30808],{"class":154},[95,115950,114563],{"class":105},[10,115952,115953],{},"把 MuJoCo 状态重置到默认状态。",[86,115955,115957],{"className":30363,"code":115956,"language":30365,"meta":14,"style":14},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[92,115958,115959],{"__ignoreMap":14},[95,115960,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993],{"class":97,"line":98},[95,115962,30808],{"class":154},[95,115964,114574],{"class":105},[95,115966,151],{"class":101},[95,115968,38858],{"class":154},[95,115970,114581],{"class":105},[95,115972,113739],{"class":5199},[95,115974,113742],{"class":101},[95,115976,86187],{"class":154},[95,115978,12418],{"class":105},[95,115980,113749],{"class":5199},[95,115982,151],{"class":101},[95,115984,86187],{"class":154},[95,115986,12418],{"class":105},[95,115988,31481],{"class":5199},[95,115990,151],{"class":101},[95,115992,30808],{"class":154},[95,115994,114606],{"class":105},[10,115996,115318,115997,116000,116001,116004,116005,116007],{},[92,115998,115999],{},"[:]"," 表示修改整个数组。",[92,116002,116003],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[92,116006,102127],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[86,116009,116011],{"className":30363,"code":116010,"language":30365,"meta":14,"style":14},"self.data.qvel[:] = 0.0\n",[92,116012,116013],{"__ignoreMap":14},[95,116014,116015,116017,116019,116021],{"class":97,"line":98},[95,116016,30808],{"class":154},[95,116018,114613],{"class":105},[95,116020,151],{"class":101},[95,116022,104738],{"class":154},[10,116024,116025],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[86,116027,116029],{"className":30363,"code":116028,"language":30365,"meta":14,"style":14},"self.steps = 0\nreturn self._get_obs(), {}\n",[92,116030,116031,116041],{"__ignoreMap":14},[95,116032,116033,116035,116037,116039],{"class":97,"line":98},[95,116034,30808],{"class":154},[95,116036,113683],{"class":105},[95,116038,151],{"class":101},[95,116040,47318],{"class":154},[95,116042,116043,116045,116047],{"class":97,"line":15},[95,116044,17029],{"class":101},[95,116046,38858],{"class":154},[95,116048,114653],{"class":105},[10,116050,116051],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[86,116053,116054],{"className":30363,"code":115327,"language":30365,"meta":14,"style":14},[92,116055,116056],{"__ignoreMap":14},[95,116057,116058,116060,116062],{"class":97,"line":98},[95,116059,31932],{"class":101},[95,116061,114664],{"class":1945},[95,116063,114667],{"class":105},[10,116065,116066],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[86,116068,116070],{"className":30363,"code":116069,"language":30365,"meta":14,"style":14},"action = np.asarray(action, dtype=np.float32)\n",[92,116071,116072],{"__ignoreMap":14},[95,116073,116074,116076,116078,116080,116082,116084],{"class":97,"line":98},[95,116075,107419],{"class":105},[95,116077,151],{"class":101},[95,116079,114676],{"class":105},[95,116081,93477],{"class":5199},[95,116083,151],{"class":101},[95,116085,113773],{"class":105},[10,116087,116088,116089,28370],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[92,116090,115854],{},[86,116092,116094],{"className":30363,"code":116093,"language":30365,"meta":14,"style":14},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[92,116095,116096],{"__ignoreMap":14},[95,116097,116098,116100,116102,116104,116106,116108,116110],{"class":97,"line":98},[95,116099,107419],{"class":105},[95,116101,151],{"class":101},[95,116103,107424],{"class":105},[95,116105,30808],{"class":154},[95,116107,114695],{"class":105},[95,116109,30808],{"class":154},[95,116111,114700],{"class":105},[10,116113,116114],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[86,116116,116118],{"className":30363,"code":116117,"language":30365,"meta":14,"style":14},"self.data.ctrl[:] = action\n",[92,116119,116120],{"__ignoreMap":14},[95,116121,116122,116124,116126,116128],{"class":97,"line":98},[95,116123,30808],{"class":154},[95,116125,114711],{"class":105},[95,116127,151],{"class":101},[95,116129,107447],{"class":105},[10,116131,116132],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[86,116134,116136],{"className":30363,"code":116135,"language":30365,"meta":14,"style":14},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[92,116137,116138,116154],{"__ignoreMap":14},[95,116139,116140,116142,116144,116146,116148,116150,116152],{"class":97,"line":98},[95,116141,3007],{"class":101},[95,116143,101478],{"class":105},[95,116145,26028],{"class":101},[95,116147,32428],{"class":154},[95,116149,106],{"class":105},[95,116151,30808],{"class":154},[95,116153,114732],{"class":105},[95,116155,116156,116159,116161,116163,116165],{"class":97,"line":15},[95,116157,116158],{"class":105},"    mujoco.mj_step(",[95,116160,30808],{"class":154},[95,116162,114558],{"class":105},[95,116164,30808],{"class":154},[95,116166,114563],{"class":105},[10,116168,116169,116170,116173,116174,116176,116177,28370],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[92,116171,116172],{},"frame_skip=5","，所以外部调用一次 ",[92,116175,113854],{},"，内部实际执行 5 次 ",[92,116178,101192],{},[86,116180,116182],{"className":30363,"code":116181,"language":30365,"meta":14,"style":14},"self.steps += 1\n",[92,116183,116184],{"__ignoreMap":14},[95,116185,116186,116188,116190,116192],{"class":97,"line":98},[95,116187,30808],{"class":154},[95,116189,113683],{"class":105},[95,116191,9460],{"class":101},[95,116193,55676],{"class":154},[10,116195,116196],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[86,116198,116200],{"className":30363,"code":116199,"language":30365,"meta":14,"style":14},"obs = self._get_obs()\nreward = self._get_reward()\n",[92,116201,116202,116212],{"__ignoreMap":14},[95,116203,116204,116206,116208,116210],{"class":97,"line":98},[95,116205,110831],{"class":105},[95,116207,151],{"class":101},[95,116209,38858],{"class":154},[95,116211,114774],{"class":105},[95,116213,116214,116216,116218,116220],{"class":97,"line":15},[95,116215,110982],{"class":105},[95,116217,151],{"class":101},[95,116219,38858],{"class":154},[95,116221,114785],{"class":105},[10,116223,116224],{},"计算新的观测和奖励。",[86,116226,116228],{"className":30363,"code":116227,"language":30365,"meta":14,"style":14},"dist = float(np.linalg.norm(tip - target))\n",[92,116229,116230],{"__ignoreMap":14},[95,116231,116232,116234,116236,116238,116240,116242],{"class":97,"line":98},[95,116233,111573],{"class":105},[95,116235,151],{"class":101},[95,116237,109774],{"class":154},[95,116239,114828],{"class":105},[95,116241,638],{"class":101},[95,116243,114833],{"class":105},[10,116245,116246],{},"计算末端到目标的距离，并转换成 Python float。",[86,116248,116249],{"className":30363,"code":113654,"language":30365,"meta":14,"style":14},[92,116250,116251,116263],{"__ignoreMap":14},[95,116252,116253,116255,116257,116259,116261],{"class":97,"line":98},[95,116254,113661],{"class":105},[95,116256,151],{"class":101},[95,116258,113666],{"class":105},[95,116260,1016],{"class":101},[95,116262,113671],{"class":154},[95,116264,116265,116267,116269,116271,116273,116275,116277],{"class":97,"line":15},[95,116266,113676],{"class":105},[95,116268,151],{"class":101},[95,116270,38858],{"class":154},[95,116272,113683],{"class":105},[95,116274,1692],{"class":101},[95,116276,38858],{"class":154},[95,116278,113690],{"class":105},[10,116280,116281],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[86,116283,116285],{"className":30363,"code":116284,"language":30365,"meta":14,"style":14},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[92,116286,116287,116300],{"__ignoreMap":14},[95,116288,116289,116292,116294,116296,116298],{"class":97,"line":98},[95,116290,116291],{"class":105},"info ",[95,116293,151],{"class":101},[95,116295,4430],{"class":105},[95,116297,114879],{"class":210},[95,116299,114882],{"class":105},[95,116301,116302,116304],{"class":97,"line":15},[95,116303,17029],{"class":101},[95,116305,114889],{"class":105},[10,116307,116308,116311],{},[92,116309,116310],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[86,116313,116315],{"className":30363,"code":116314,"language":30365,"meta":14,"style":14},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[92,116316,116317,116326],{"__ignoreMap":14},[95,116318,116319,116322,116324],{"class":97,"line":98},[95,116320,116321],{"class":105},"env ",[95,116323,151],{"class":101},[95,116325,114919],{"class":105},[95,116327,116328,116330,116332,116334,116336,116338,116340],{"class":97,"line":15},[95,116329,113377],{"class":105},[95,116331,151],{"class":101},[95,116333,114929],{"class":105},[95,116335,114543],{"class":5199},[95,116337,151],{"class":101},[95,116339,297],{"class":154},[95,116341,112],{"class":105},[10,116343,116344,116345,116348],{},"创建环境并重置。",[92,116346,116347],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[86,116350,116352],{"className":30363,"code":116351,"language":30365,"meta":14,"style":14},"action = env.action_space.sample()\n",[92,116353,116354],{"__ignoreMap":14},[95,116355,116356,116358,116360],{"class":97,"line":98},[95,116357,107419],{"class":105},[95,116359,151],{"class":101},[95,116361,114998],{"class":105},[10,116363,116364],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[37,116366,102293],{"id":102292},[10,116368,105461],{},[86,116370,116373],{"className":116371,"code":116372,"language":5170,"meta":14},[5168],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[92,116374,116372],{"__ignoreMap":14},[10,116376,116377],{},"这个环境已经具备强化学习环境的基本结构。",[10,116379,116380],{},"主函数里使用随机动作：",[86,116382,116383],{"className":30363,"code":116351,"language":30365,"meta":14,"style":14},[92,116384,116385],{"__ignoreMap":14},[95,116386,116387,116389,116391],{"class":97,"line":98},[95,116388,107419],{"class":105},[95,116390,151],{"class":101},[95,116392,114998],{"class":105},[10,116394,116395],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[37,116397,102325],{"id":102324},[49,116399,116400,116403,116409,116418,116427,116436,116442],{},[52,116401,116402],{},"运行程序。",[52,116404,116405,116406,28370],{},"确认 ",[92,116407,116408],{},"obs.shape == (10,)",[52,116410,111158,116411,116414,116415,28370],{},[92,116412,116413],{},"env.action_space","，应类似 ",[92,116416,116417],{},"Box(-1.0, 1.0, (2,), float32)",[52,116419,105562,116420,116423,116424,28370],{},[92,116421,116422],{},"self.max_steps = 10","，确认环境会更快 ",[92,116425,116426],{},"truncated=True",[52,116428,102388,116429,102391,116432,116435],{},[92,116430,116431],{},"terminated = dist \u003C 0.05",[92,116433,116434],{},"dist \u003C 0.2","，观察是否更容易结束。",[52,116437,102388,116438,116441],{},[92,116439,116440],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[52,116443,116444,116445,116447,116448,116451],{},"在 ",[92,116446,116310],{}," 里加入 ",[92,116449,116450],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[37,116453,102430],{"id":102429},[66,116455,116457],{"id":116456},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[10,116459,116460,116461,116463],{},"Gymnasium 的 ",[92,116462,107111],{}," 返回 5 个值:",[86,116465,116467],{"className":30363,"code":116466,"language":30365,"meta":14,"style":14},"obs, reward, terminated, truncated, info\n",[92,116468,116469],{"__ignoreMap":14},[95,116470,116471],{"class":97,"line":98},[95,116472,116466],{"class":105},[10,116474,116475],{},"不是旧 Gym 的 4 个值。",[66,116477,116479,116482],{"id":116478},"datactrl-action-维度错误",[92,116480,116481],{},"data.ctrl[:] = action"," 维度错误",[10,116484,102500],{},[86,116486,116488],{"className":30363,"code":116487,"language":30365,"meta":14,"style":14},"print(self.model.nu)\nprint(action.shape)\n",[92,116489,116490,116501],{"__ignoreMap":14},[95,116491,116492,116494,116496,116498],{"class":97,"line":98},[95,116493,30400],{"class":154},[95,116495,106],{"class":105},[95,116497,30808],{"class":154},[95,116499,116500],{"class":105},".model.nu)\n",[95,116502,116503,116505],{"class":97,"line":15},[95,116504,30400],{"class":154},[95,116506,116507],{"class":105},"(action.shape)\n",[10,116509,116510],{},"两者必须匹配。",[66,116512,116514],{"id":116513},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[10,116516,102439],{},[86,116518,116520],{"className":30363,"code":116519,"language":30365,"meta":14,"style":14},"mujoco.mj_forward(self.model, self.data)\n",[92,116521,116522],{"__ignoreMap":14},[95,116523,116524,116527,116529,116531,116533],{"class":97,"line":98},[95,116525,116526],{"class":105},"mujoco.mj_forward(",[95,116528,30808],{"class":154},[95,116530,114558],{"class":105},[95,116532,30808],{"class":154},[95,116534,114563],{"class":105},[66,116536,116538,116540],{"id":116537},"observation_space-维度和-obs-不一致",[92,116539,113577],{}," 维度和 obs 不一致",[10,116542,102552],{},[86,116544,116546],{"className":30363,"code":116545,"language":30365,"meta":14,"style":14},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[92,116547,116548,116558,116565],{"__ignoreMap":14},[95,116549,116550,116552,116554,116556],{"class":97,"line":98},[95,116551,110831],{"class":105},[95,116553,151],{"class":101},[95,116555,38858],{"class":154},[95,116557,114774],{"class":105},[95,116559,116560,116562],{"class":97,"line":15},[95,116561,30400],{"class":154},[95,116563,116564],{"class":105},"(obs.shape)\n",[95,116566,116567,116569,116571,116573],{"class":97,"line":1161},[95,116568,30400],{"class":154},[95,116570,106],{"class":105},[95,116572,30808],{"class":154},[95,116574,116575],{"class":105},".observation_space.shape)\n",[10,116577,116578],{},"两者必须一致。本章观测是：",[86,116580,116583],{"className":116581,"code":116582,"language":5170,"meta":14},[5168],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[92,116584,116582],{"__ignoreMap":14},[66,116586,116588],{"id":116587},"action-超过范围","action 超过范围",[10,116590,116591],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[86,116593,116594],{"className":30363,"code":116093,"language":30365,"meta":14,"style":14},[92,116595,116596],{"__ignoreMap":14},[95,116597,116598,116600,116602,116604,116606,116608,116610],{"class":97,"line":98},[95,116599,107419],{"class":105},[95,116601,151],{"class":101},[95,116603,107424],{"class":105},[95,116605,30808],{"class":154},[95,116607,114695],{"class":105},[95,116609,30808],{"class":154},[95,116611,114700],{"class":105},[10,116613,116614,116615,28370],{},"这能避免无效动作直接写入 ",[92,116616,101053],{},[66,116618,116620],{"id":116619},"忘记返回-info","忘记返回 info",[10,116622,116460,116623,100995,116625,116627],{},[92,116624,70033],{},[92,116626,107111],{}," 都会返回 info：",[86,116629,116630],{"className":30363,"code":113370,"language":30365,"meta":14,"style":14},[92,116631,116632,116640],{"__ignoreMap":14},[95,116633,116634,116636,116638],{"class":97,"line":98},[95,116635,113377],{"class":105},[95,116637,151],{"class":101},[95,116639,113382],{"class":105},[95,116641,116642,116644,116646],{"class":97,"line":15},[95,116643,113387],{"class":105},[95,116645,151],{"class":101},[95,116647,113392],{"class":105},[10,116649,116650,116651,28370],{},"即使暂时没有额外信息，也返回 ",[92,116652,32444],{},[37,116654,116656],{"id":116655},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[10,116658,116659],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[49,116661,116662,116665,116668,116671,116674,116677],{},[52,116663,116664],{},"更稳定的 reward。",[52,116666,116667],{},"合理的 episode 长度。",[52,116669,116670],{},"可重复的随机目标采样。",[52,116672,116673],{},"render 接口。",[52,116675,116676],{},"环境注册代码。",[52,116678,116679],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[10,116681,116682],{},"如果只是自己写训练循环，最小形式是：",[86,116684,116686],{"className":30363,"code":116685,"language":30365,"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",[92,116687,116688,116696,116712,116716,116732,116741,116750,116760],{"__ignoreMap":14},[95,116689,116690,116692,116694],{"class":97,"line":98},[95,116691,116321],{"class":105},[95,116693,151],{"class":101},[95,116695,114919],{"class":105},[95,116697,116698,116700,116702,116704,116706,116708,116710],{"class":97,"line":15},[95,116699,113377],{"class":105},[95,116701,151],{"class":101},[95,116703,114929],{"class":105},[95,116705,114543],{"class":5199},[95,116707,151],{"class":101},[95,116709,297],{"class":154},[95,116711,112],{"class":105},[95,116713,116714],{"class":97,"line":1161},[95,116715,2382],{"emptyLinePlaceholder":21},[95,116717,116718,116720,116722,116724,116726,116728,116730],{"class":97,"line":1176},[95,116719,3007],{"class":101},[95,116721,101478],{"class":105},[95,116723,26028],{"class":101},[95,116725,32428],{"class":154},[95,116727,106],{"class":105},[95,116729,6393],{"class":154},[95,116731,30771],{"class":105},[95,116733,116734,116737,116739],{"class":97,"line":1182},[95,116735,116736],{"class":105},"    action ",[95,116738,151],{"class":101},[95,116740,114998],{"class":105},[95,116742,116743,116746,116748],{"class":97,"line":1196},[95,116744,116745],{"class":105},"    obs, reward, terminated, truncated, info ",[95,116747,151],{"class":101},[95,116749,113392],{"class":105},[95,116751,116752,116754,116756,116758],{"class":97,"line":1202},[95,116753,3083],{"class":101},[95,116755,115064],{"class":105},[95,116757,115067],{"class":101},[95,116759,115070],{"class":105},[95,116761,116762,116765,116767],{"class":97,"line":1293},[95,116763,116764],{"class":105},"        obs, info ",[95,116766,151],{"class":101},[95,116768,113382],{"class":105},[37,116770,116772],{"id":116771},"_9本章小结","9.本章小结",[10,116774,116775],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[86,116777,116780],{"className":116778,"code":116779,"language":5170,"meta":14},[5168],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[92,116781,116779],{"__ignoreMap":14},[10,116783,116784],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5109,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":1161,"text":116795},"terminated 和 truncated 的区别",{"id":113704,"depth":1161,"text":116797},"observation_space 和 action_space",{"id":113831,"depth":1161,"text":113832},{"id":101229,"depth":15,"text":101230,"children":116800},[116801,116802],{"id":101549,"depth":1161,"text":101549},{"id":101685,"depth":1161,"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":1161,"text":116457},{"id":116478,"depth":1161,"text":116809},"data.ctrl[:] = action 维度错误",{"id":116513,"depth":1161,"text":116514},{"id":116537,"depth":1161,"text":116812},"observation_space 维度和 obs 不一致",{"id":116587,"depth":1161,"text":116588},{"id":116619,"depth":1161,"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":21,"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],[33,116828,116830],{"id":116829},"mujoco-学习","MuJoCo 学习",[10,116832,116833],{},"初版",[10,116835,116836],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[49,116838,116839,116842,116845,116854],{},[52,116840,116841],{},"MuJoCo 模型文件在描述什么。",[52,116843,116844],{},"Python 代码怎样读取和推进仿真。",[52,116846,116847,318,116849,318,116851,116853],{},[92,116848,104007],{},[92,116850,104337],{},[92,116852,104340],{}," 这些数组为什么重要。",[52,116855,116856],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[10,116858,116859,116860,116862],{},"默认环境为 Fedora 44、Python >= 3.10、",[92,116861,101004],{}," 官方 Python bindings。",[10,116864,116865,116866,116868],{},"注意：本文禁止使用 ",[92,116867,100989],{},"。所有示例均使用：",[86,116870,116871],{"className":30363,"code":101555,"language":30365,"meta":14,"style":14},[92,116872,116873],{"__ignoreMap":14},[95,116874,116875,116877],{"class":97,"line":98},[95,116876,30377],{"class":101},[95,116878,101278],{"class":105},[37,116880,116881],{"id":116881},"适合谁阅读",[10,116883,116884],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[49,116886,116887,116890,116893,116896],{},[52,116888,116889],{},"没学过 MuJoCo，只会一点 Python。",[52,116891,116892],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[52,116894,116895],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[52,116897,116898,116899,116901,116902,116904],{},"以前接触过 ",[92,116900,100989],{},"，现在想迁移到官方 ",[92,116903,100998],{}," Python bindings。",[10,116906,116907],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[37,116909,116911],{"id":116910},"mujoco-到底是什么","MuJoCo 到底是什么",[10,116913,116914],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[86,116916,116919],{"className":116917,"code":116918,"language":5170,"meta":14},[5168],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[92,116920,116918],{"__ignoreMap":14},[10,116922,116923],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[49,116925,116926,116929,116932,116935],{},[52,116927,116928],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[52,116930,116931],{},"快速测试控制算法，不必一开始就上真实机器人。",[52,116933,116934],{},"生成强化学习环境。",[52,116936,116937],{},"采集状态、动作、图像、奖励等训练数据。",[37,116939,116940],{"id":116940},"学习前的心智模型",[10,116942,116943],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[243,116945,116946,116958],{},[246,116947,116948],{},[249,116949,116950,116953,116956],{},[252,116951,116952],{"align":23720},"部分",[252,116954,116955],{"align":23720},"负责什么",[252,116957,21170],{"align":23720},[290,116959,116960,116971,116983,116995,117007],{},[249,116961,116962,116965,116968],{},[295,116963,116964],{"align":23720},"MJCF XML",[295,116966,116967],{"align":23720},"定义世界和机器人结构",[295,116969,116970],{"align":23720},"地面、盒子、关节、电机、摄像头",[249,116972,116973,116977,116980],{},[295,116974,116975],{"align":23720},[92,116976,100686],{},[295,116978,116979],{"align":23720},"编译后的静态模型",[295,116981,116982],{"align":23720},"有几个关节、有几个电机、时间步长是多少",[249,116984,116985,116989,116992],{},[295,116986,116987],{"align":23720},[92,116988,100696],{},[295,116990,116991],{"align":23720},"运行中的动态状态",[295,116993,116994],{"align":23720},"当前时间、位置、速度、电机输入",[249,116996,116997,117001,117004],{},[295,116998,116999],{"align":23720},[92,117000,101192],{},[295,117002,117003],{"align":23720},"推进一步物理仿真",[295,117005,117006],{"align":23720},"根据重力、力、碰撞更新状态",[249,117008,117009,117012,117015],{},[295,117010,117011],{"align":23720},"Viewer \u002F Renderer",[295,117013,117014],{"align":23720},"把仿真显示出来",[295,117016,117017],{"align":23720},"打开窗口或保存图片",[10,117019,117020],{},"一句话总结：",[86,117022,117025],{"className":117023,"code":117024,"language":5170,"meta":14},[5168],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[92,117026,117024],{"__ignoreMap":14},[10,117028,117029],{},"参考来源：",[1113,117031,117032,117039,117046],{},[52,117033,117034,117035],{},"MuJoCo Python 官方文档：",[344,117036,117037],{"href":117037,"rel":117038},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23849],[52,117040,117041,117042],{},"MuJoCo XML Reference：",[344,117043,117044],{"href":117044,"rel":117045},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23849],[52,117047,117048,117049],{},"MuJoCo Overview：",[344,117050,117051],{"href":117051,"rel":117052},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23849],[37,117054,117055],{"id":117055},"章节目录",[49,117057,117058,117064,117070,117076,117082,117088,117094,117100],{},[52,117059,117060],{},[344,117061,117063],{"href":117062},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[52,117065,117066],{},[344,117067,117069],{"href":117068},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[52,117071,117072],{},[344,117073,117075],{"href":117074},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[52,117077,117078],{},[344,117079,117081],{"href":117080},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[52,117083,117084],{},[344,117085,117087],{"href":117086},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[52,117089,117090],{},[344,117091,117093],{"href":117092},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[52,117095,117096],{},[344,117097,117099],{"href":117098},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[52,117101,117102],{},[344,117103,117105],{"href":117104},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[37,117107,117108],{"id":117108},"推荐学习路线",[86,117110,117113],{"className":117111,"code":117112,"language":5170,"meta":14},[5168],"环境安装\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",[92,117114,117112],{"__ignoreMap":14},[10,117116,117117],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[37,117119,117120],{"id":117120},"建议的目录结构",[10,117122,117123],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[86,117125,117127],{"className":23806,"code":117126,"language":23808,"meta":14,"style":14},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[92,117128,117129,117137],{"__ignoreMap":14},[95,117130,117131,117133,117135],{"class":97,"line":98},[95,117132,101243],{"class":1945},[95,117134,29201],{"class":154},[95,117136,101248],{"class":210},[95,117138,117139,117141],{"class":97,"line":15},[95,117140,101253],{"class":154},[95,117142,101248],{"class":210},[10,117144,117145],{},"每一章的代码都单独保存：",[86,117147,117150],{"className":117148,"code":117149,"language":5170,"meta":14},[5168],"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",[92,117151,117149],{"__ignoreMap":14},[10,117153,117154],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[37,117156,117157],{"id":117157},"学习方法",[10,117159,117160],{},"每章建议按这个顺序操作：",[49,117162,117163,117166,117169,117172,117175,117178],{},[52,117164,117165],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[52,117167,117168],{},"复制最小可运行代码，保存成指定文件。",[52,117170,117171],{},"运行代码，确认没有报错。",[52,117173,117174],{},"对照“运行结果说明”理解输出。",[52,117176,117177],{},"做“验证步骤”，主动改一两个参数。",[52,117179,117180],{},"遇到报错先看“常见错误与解决方案”。",[10,117182,117183],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[37,117185,117186],{"id":117186},"全局排错顺序",[10,117188,117189],{},"遇到问题时，按下面顺序查：",[49,117191,117192,117198,117204,117209,117212,117215,117222,117232],{},[52,117193,117194,117195],{},"Python 环境是否激活：",[92,117196,117197],{},"which python",[52,117199,117200,117201],{},"MuJoCo 是否能导入：",[92,117202,117203],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[52,117205,117206,117207],{},"是否误装了 ",[92,117208,100989],{},[52,117210,117211],{},"XML 标签是否闭合、属性是否拼写正确",[52,117213,117214],{},"actuator 引用的 joint 名字是否存在",[52,117216,117217,117219,117220],{},[92,117218,101053],{}," 的长度是否等于 ",[92,117221,102135],{},[52,117223,105562,117224,82516,117226,117228,117229],{},[92,117225,104007],{},[92,117227,104337],{}," 后是否调用了 ",[92,117230,117231],{},"mujoco.mj_forward",[52,117233,117234],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5109,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":23362},"\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":23360,"extension":18,"meta":117712,"navigation":21,"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],[33,117260,117256],{"id":117261},"_1-最常用的基本操作更新",[10,117263,117264],{},"装linux系统教程：",[10,117266,117267],{},[344,117268,117269],{"href":117269,"rel":117270},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23849],[86,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",[92,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},[95,117279,117280],{"class":97,"line":98},[95,117281,117282],{"class":164},"#更新相关的知识\n",[95,117284,117285],{"class":97,"line":15},[95,117286,117287],{"class":164},"# 更新软件包列表（从服务器获取最新软件信息）\n",[95,117289,117290,117292,117295],{"class":97,"line":1161},[95,117291,24561],{"class":1945},[95,117293,117294],{"class":210}," apt",[95,117296,26227],{"class":210},[95,117298,117299],{"class":97,"line":1176},[95,117300,117301],{"class":164},"# 升级所有可更新的软件包（不删除旧包）\n",[95,117303,117304,117306,117308],{"class":97,"line":1182},[95,117305,24561],{"class":1945},[95,117307,117294],{"class":210},[95,117309,117310],{"class":210}," upgrade\n",[95,117312,117313],{"class":97,"line":1196},[95,117314,117315],{"class":164},"#更新和升级软件包\n",[95,117317,117318,117320,117322,117325,117327,117329,117331,117334],{"class":97,"line":1202},[95,117319,24561],{"class":1945},[95,117321,117294],{"class":210},[95,117323,117324],{"class":210}," update",[95,117326,26175],{"class":105},[95,117328,24561],{"class":1945},[95,117330,117294],{"class":210},[95,117332,117333],{"class":210}," upgrade",[95,117335,100958],{"class":154},[95,117337,117338],{"class":97,"line":1293},[95,117339,117340],{"class":164},"#列出可更新的软件包及版本信息\n",[95,117342,117343,117346,117349],{"class":97,"line":1299},[95,117344,117345],{"class":1945},"apt",[95,117347,117348],{"class":210}," list",[95,117350,117351],{"class":154}," --upgradable\n",[95,117353,117354],{"class":97,"line":1311},[95,117355,117356],{"class":164},"#彻底升级（处理依赖关系，可能删除旧包）\n",[95,117358,117359,117361,117363],{"class":97,"line":1594},[95,117360,24561],{"class":1945},[95,117362,117294],{"class":210},[95,117364,117365],{"class":210}," full-upgrade\n",[95,117367,117368],{"class":97,"line":1599},[95,117369,117370],{"class":164},"#设置指定版本\n",[95,117372,117373,117375,117377,117379,117381,117384,117386,117388,117390,117392,117395,117397],{"class":97,"line":1605},[95,117374,24561],{"class":1945},[95,117376,117294],{"class":210},[95,117378,23818],{"class":210},[95,117380,28887],{"class":101},[95,117382,117383],{"class":210},"package_nam",[95,117385,180],{"class":105},[95,117387,1066],{"class":101},[95,117389,151],{"class":210},[95,117391,1016],{"class":101},[95,117393,117394],{"class":210},"version_numbe",[95,117396,776],{"class":105},[95,117398,51284],{"class":101},[95,117400,117401],{"class":97,"line":1610},[95,117402,117403],{"class":164},"#只安装软件包不升级\n",[95,117405,117406,117408,117410,117412,117414,117416,117418,117420],{"class":97,"line":1624},[95,117407,24561],{"class":1945},[95,117409,117294],{"class":210},[95,117411,23818],{"class":210},[95,117413,28887],{"class":101},[95,117415,117383],{"class":210},[95,117417,180],{"class":105},[95,117419,1066],{"class":101},[95,117421,117422],{"class":154}," --no-upgrade\n",[95,117424,117425],{"class":97,"line":1629},[95,117426,117427],{"class":164},"#只升级，不存在就不安装\n",[95,117429,117430,117432,117434,117436,117438,117440,117442,117444],{"class":97,"line":1635},[95,117431,24561],{"class":1945},[95,117433,117294],{"class":210},[95,117435,23818],{"class":210},[95,117437,28887],{"class":101},[95,117439,117383],{"class":210},[95,117441,180],{"class":105},[95,117443,1066],{"class":101},[95,117445,117446],{"class":154}," --only-upgrade\n",[95,117448,117449],{"class":97,"line":1656},[95,117450,2382],{"emptyLinePlaceholder":21},[95,117452,117453],{"class":97,"line":1661},[95,117454,117455],{"class":164},"#安装指定的软件命令\n",[95,117457,117458,117460,117462,117464,117466,117468,117470],{"class":97,"line":1675},[95,117459,24561],{"class":1945},[95,117461,117294],{"class":210},[95,117463,23818],{"class":210},[95,117465,28887],{"class":101},[95,117467,117383],{"class":210},[95,117469,180],{"class":105},[95,117471,51284],{"class":101},[95,117473,117474],{"class":97,"line":1680},[95,117475,2382],{"emptyLinePlaceholder":21},[95,117477,117478],{"class":97,"line":1709},[95,117479,117480],{"class":164},"#安装多个软件包\n",[95,117482,117483,117485,117487,117489,117491,117494,117497,117499,117501,117504,117506,117508],{"class":97,"line":1714},[95,117484,24561],{"class":1945},[95,117486,117294],{"class":210},[95,117488,23818],{"class":210},[95,117490,28887],{"class":101},[95,117492,117493],{"class":210},"package_",[95,117495,117496],{"class":101},"1>",[95,117498,28887],{"class":101},[95,117500,117493],{"class":210},[95,117502,117503],{"class":101},"2>",[95,117505,28887],{"class":101},[95,117507,117493],{"class":210},[95,117509,117510],{"class":101},"3>\n",[95,117512,117513],{"class":97,"line":1731},[95,117514,2382],{"emptyLinePlaceholder":21},[95,117516,117517],{"class":97,"line":1736},[95,117518,117519],{"class":164},"#更新指定的软件命令\n",[95,117521,117522,117524,117526,117528,117530,117532,117534],{"class":97,"line":1741},[95,117523,24561],{"class":1945},[95,117525,117294],{"class":210},[95,117527,117324],{"class":210},[95,117529,28887],{"class":101},[95,117531,117383],{"class":210},[95,117533,180],{"class":105},[95,117535,51284],{"class":101},[95,117537,117538],{"class":97,"line":1746},[95,117539,2382],{"emptyLinePlaceholder":21},[95,117541,117542],{"class":97,"line":1760},[95,117543,117544],{"class":164},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[95,117546,117547,117549,117552,117554,117556,117558],{"class":97,"line":1765},[95,117548,117345],{"class":1945},[95,117550,117551],{"class":210}," show",[95,117553,28887],{"class":101},[95,117555,117383],{"class":210},[95,117557,180],{"class":105},[95,117559,51284],{"class":101},[95,117561,117562],{"class":97,"line":2559},[95,117563,2382],{"emptyLinePlaceholder":21},[95,117565,117566],{"class":97,"line":2573},[95,117567,117568],{"class":164},"#删除软件包命令\n",[95,117570,117571,117573,117575,117577,117579,117581,117583],{"class":97,"line":2581},[95,117572,24561],{"class":1945},[95,117574,117294],{"class":210},[95,117576,26064],{"class":210},[95,117578,28887],{"class":101},[95,117580,117383],{"class":210},[95,117582,180],{"class":105},[95,117584,51284],{"class":101},[95,117586,117587],{"class":97,"line":2586},[95,117588,2382],{"emptyLinePlaceholder":21},[95,117590,117591],{"class":97,"line":2592},[95,117592,117593],{"class":164},"# 清理旧版本和缓存（释放磁盘空间）\n",[95,117595,117596,117598,117600,117603],{"class":97,"line":2598},[95,117597,24561],{"class":1945},[95,117599,117294],{"class":210},[95,117601,117602],{"class":210}," autoremove",[95,117604,117605],{"class":164},"  # 删除不再需要的依赖和库文件\n",[95,117607,117608,117610,117612,117615],{"class":97,"line":2603},[95,117609,24561],{"class":1945},[95,117611,117294],{"class":210},[95,117613,117614],{"class":210}," clean",[95,117616,117617],{"class":164},"       # 清理下载的缓存包\n",[95,117619,117620],{"class":97,"line":7931},[95,117621,2382],{"emptyLinePlaceholder":21},[95,117623,117624],{"class":97,"line":7955},[95,117625,117626],{"class":164},"#移除软件包及配置文件\n",[95,117628,117629,117631,117633,117636,117638,117640,117642],{"class":97,"line":7960},[95,117630,24561],{"class":1945},[95,117632,117294],{"class":210},[95,117634,117635],{"class":210}," purge",[95,117637,28887],{"class":101},[95,117639,117383],{"class":210},[95,117641,180],{"class":105},[95,117643,51284],{"class":101},[95,117645,117646],{"class":97,"line":7966},[95,117647,2382],{"emptyLinePlaceholder":21},[95,117649,117650],{"class":97,"line":7993},[95,117651,117652],{"class":164},"#查找软件包命令\n",[95,117654,117655,117657,117659,117662,117664,117667,117669],{"class":97,"line":7998},[95,117656,24561],{"class":1945},[95,117658,117294],{"class":210},[95,117660,117661],{"class":210}," search",[95,117663,28887],{"class":101},[95,117665,117666],{"class":210},"keywor",[95,117668,420],{"class":105},[95,117670,51284],{"class":101},[95,117672,117673],{"class":97,"line":8004},[95,117674,2382],{"emptyLinePlaceholder":21},[95,117676,117677],{"class":97,"line":8016},[95,117678,117679],{"class":164},"#列出所有已安装的包\n",[95,117681,117682,117684,117686],{"class":97,"line":8028},[95,117683,117345],{"class":1945},[95,117685,117348],{"class":210},[95,117687,117688],{"class":154}," --installed\n",[95,117690,117691],{"class":97,"line":8040},[95,117692,2382],{"emptyLinePlaceholder":21},[95,117694,117695],{"class":97,"line":9699},[95,117696,117697],{"class":164},"#列出所有已安装的包的版本信息\n",[95,117699,117700,117702,117704],{"class":97,"line":9724},[95,117701,117345],{"class":1945},[95,117703,117348],{"class":210},[95,117705,117706],{"class":154}," --all-versions\n",[5109,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":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117718,"title":117719,"body":117720,"description":23360,"extension":18,"meta":118461,"navigation":21,"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],[33,117723,117719],{"id":117724},"_2-linux装机教程",[37,117726,117728],{"id":117727},"_21-实体机","2.1 实体机",[10,117730,117731],{},"使用清华源：（Ubuntu24.04）",[10,117733,117734],{},[344,117735,117736],{"href":117736,"rel":117737},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23849],[37,117739,117741],{"id":117740},"_22-普通虚拟机","2.2 普通虚拟机",[66,117743,117745],{"id":117744},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[10,117747,117748],{},[344,117749,117750],{"href":117750,"rel":117751},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23849],[10,117753,117754],{},[1444,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",[10,117758,117759],{},[1444,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",[10,117763,117764],{},[1444,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",[10,117768,117769],{},[1444,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",[10,117773,117774],{},[1444,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",[10,117778,117779],{},"内存4G（4096MB）；",[10,117781,117782],{},"CPU给4个核；",[10,117784,117785],{},"硬盘动态分配60G；",[10,117787,117788],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[66,117790,117792],{"id":117791},"_222-安装ubuntu","2.2.2 安装Ubuntu",[10,117794,117795],{},"按照1.1的步骤下载Ubuntu",[10,117797,117798],{},[1444,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",[10,117802,117803],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[10,117805,117806],{},[1444,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",[10,117810,117811],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[10,117813,117814],{},[1444,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",[10,117818,117819,117820,117823],{},"选择“正常安装”(找不到都用Alt+F7)， ",[255,117821,117822],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[10,117825,117826],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[10,117828,117829],{},"将改动写入磁盘吗 继续",[10,117831,117832],{},"选择东八区（shanghai，大致在地图上点一下），继续",[10,117834,117835],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[10,117837,117838],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[10,117840,117841,117842,117845,117846,117849],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[255,117843,117844],{},"除了"," 选不发送系统信息与不升级之外， ",[255,117847,117848],{},"其它"," 都跳过或前进）",[66,117851,117853],{"id":117852},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21981,117855,117857],{"id":117856},"_2231-全屏","2.2.3.1 全屏",[10,117859,117860],{},[1444,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",[10,117864,117865],{},[1444,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",[21981,117869,117871],{"id":117870},"_2232-文件交换","2.2.3.2 文件交换",[10,117873,117874],{},[1444,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",[21981,117878,117880],{"id":117879},"_2233-新建文本文档","2.2.3.3 新建文本文档",[10,117882,117883],{},[1444,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",[37,117887,117889],{"id":117888},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[66,117891,117893],{"id":117892},"_231-简介与优缺点","2.3.1 简介与优缺点",[49,117895,117896],{},[52,117897,117898],{},"什么情况下推荐？",[10,117900,117901],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[49,117903,117904],{"start":15},[52,117905,117906,117907],{},"优缺点：",[49,117908,117909,117939],{},[52,117910,117911,117912],{},"优点：",[49,117913,117914,117917,117924,117927,117930,117933,117936],{},[52,117915,117916],{},"WSL2是最好的Linux发行版;(bushi)",[52,117918,117919,117920,117923],{},"性能损耗极低。且比在Windows上跑深度性能 ",[255,117921,117922],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[52,117925,117926],{},"非常方便调用USB设备，可以USB直通;",[52,117928,117929],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[52,117931,117932],{},"非常方便Win与WSL2互相传文件等协同操作;",[52,117934,117935],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[52,117937,117938],{},"非常方便使用Windows的VScode远程开发;",[52,117940,117941,117942],{},"缺点：",[49,117943,117944],{},[52,117945,117946],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[10,117948,117949],{},[1444,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",[66,117953,117955],{"id":117954},"_232-安装教程","2.3.2 安装教程",[21981,117957,117959],{"id":117958},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[49,117961,117962],{},[52,117963,117964],{},"方法一(图形界面)",[10,117966,117967,117968,24603],{},"用Win+R输入",[92,117969,117970],{},"appwiz.cpl",[10,117972,117973],{},[1444,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",[10,117977,117978,117979,117982,117983,26458],{},"点击OK进入 ",[255,117980,117981],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[255,117984,117985],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[10,117987,117988],{},[1444,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",[10,117992,117993,117994,100995,117997,118000],{},"选择 ",[255,117995,117996],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[255,117998,117999],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[10,118002,118003],{},[1444,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",[49,118007,118008],{"start":15},[52,118009,118010],{},"方法二(命令行)",[86,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",[92,118017,118018,118023,118028,118033],{"__ignoreMap":14},[95,118019,118020],{"class":97,"line":98},[95,118021,118022],{},"# 开启 Linux 子系统\n",[95,118024,118025],{"class":97,"line":15},[95,118026,118027],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[95,118029,118030],{"class":97,"line":1161},[95,118031,118032],{},"# 开启虚拟机平台\n",[95,118034,118035],{"class":97,"line":1176},[95,118036,118037],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21981,118039,118041],{"id":118040},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[10,118043,118044],{},"用管理员权限打开powershell",[10,118046,118047],{},[1444,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",[10,118051,118052],{},"升级WSL并设置默认版本为WSL2",[86,118054,118056],{"className":118013,"code":118055,"language":118015,"meta":14,"style":14},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[92,118057,118058,118063,118068,118073],{"__ignoreMap":14},[95,118059,118060],{"class":97,"line":98},[95,118061,118062],{},"# 更新 wsl\n",[95,118064,118065],{"class":97,"line":15},[95,118066,118067],{},"wsl --update\n",[95,118069,118070],{"class":97,"line":1161},[95,118071,118072],{},"# 将 wsl 版本设置为 wsl2\n",[95,118074,118075],{"class":97,"line":1176},[95,118076,118077],{},"wsl --set-default-version 2\n",[21981,118079,118081],{"id":118080},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[49,118083,118084],{},[52,118085,118086],{},"方式一(商店下载)",[10,118088,118089],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[10,118091,118092],{},[1444,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",[49,118096,118097],{"start":15},[52,118098,118099],{},"方式二(命令行安装)",[86,118101,118103],{"className":118013,"code":118102,"language":118015,"meta":14,"style":14},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[92,118104,118105,118110,118115],{"__ignoreMap":14},[95,118106,118107],{"class":97,"line":98},[95,118108,118109],{},"# 列出可安装的 Linux 版本\n",[95,118111,118112],{"class":97,"line":15},[95,118113,118114],{},"#（需要科学手段）\n",[95,118116,118117],{"class":97,"line":1161},[95,118118,118119],{},"wsl --list --online\n",[10,118121,118122],{},[1444,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",[10,118126,118127],{},"选择对应发行版并安装",[86,118129,118131],{"className":118013,"code":118130,"language":118015,"meta":14,"style":14},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[92,118132,118133,118138],{"__ignoreMap":14},[95,118134,118135],{"class":97,"line":98},[95,118136,118137],{},"# Ubuntu安装完毕后需要重启系统\n",[95,118139,118140],{"class":97,"line":15},[95,118141,118142],{},"wsl --install -d Ubuntu-24.04\n",[21981,118144,118146],{"id":118145},"_2324-查看系统状态","2.3.2.4 查看系统状态",[86,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",[92,118151,118152,118157,118162,118167,118172,118176,118180,118185,118190,118195],{"__ignoreMap":14},[95,118153,118154],{"class":97,"line":98},[95,118155,118156],{},"# 查看 wsl\n",[95,118158,118159],{"class":97,"line":15},[95,118160,118161],{},"wsl -l\n",[95,118163,118164],{"class":97,"line":1161},[95,118165,118166],{},"# 查看 wsl 运行版本或模式\n",[95,118168,118169],{"class":97,"line":1176},[95,118170,118171],{},"wsl -l -v\n",[95,118173,118174],{"class":97,"line":1182},[95,118175,2382],{"emptyLinePlaceholder":21},[95,118177,118178],{"class":97,"line":1196},[95,118179,2382],{"emptyLinePlaceholder":21},[95,118181,118182],{"class":97,"line":1202},[95,118183,118184],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[95,118186,118187],{"class":97,"line":1293},[95,118188,118189],{},"wsl --set-version \u003Cdistro> 2\n",[95,118191,118192],{"class":97,"line":1299},[95,118193,118194],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[95,118196,118197],{"class":97,"line":1311},[95,118198,118199],{},"wsl --unregister \u003Cdistro>\n",[10,118201,118202],{},"输出Version为2即正常",[10,118204,118205],{},[1444,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",[21981,118209,118211],{"id":118210},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[10,118213,118214],{},"直接在Powershell里输入wsl命令进入子系统",[86,118216,118218],{"className":118013,"code":118217,"language":118015,"meta":14,"style":14},"# 进入子系统\nwsl\n",[92,118219,118220,118225],{"__ignoreMap":14},[95,118221,118222],{"class":97,"line":98},[95,118223,118224],{},"# 进入子系统\n",[95,118226,118227],{"class":97,"line":15},[95,118228,118229],{},"wsl\n",[10,118231,118232],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[10,118234,118235],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[10,118237,118238],{},[1444,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",[66,118242,118244],{"id":118243},"_233-配置各种环境","2.3.3 配置各种环境",[21981,118246,118248],{"id":118247},"_2331-换源","2.3.3.1 换源",[10,118250,118251],{},"(同实体机LINUX，往下找教程)",[21981,118253,118255],{"id":118254},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22893,118257,118259],{"id":118258},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[10,118261,118262],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[10,118264,118265],{},[1444,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",[10,118269,118270],{},[1444,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",[22893,118274,118276],{"id":118275},"_23322-cuda","2.3.3.2.2 CUDA",[10,118278,118279,118280],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[344,118281,118282],{"href":118282,"rel":118283},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23849],[10,118285,118286,118289],{},[1444,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",[1444,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",[10,118293,118294],{},"在下方的网站，选择合适的版本。",[10,118296,118297,118298],{},"WSL2 专属 CUDA 指南：",[344,118299,118300],{"href":118300,"rel":118301},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23849],[10,118303,118304],{},[255,118305,118306],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[10,118308,118309],{},[1444,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",[10,118313,118314],{},"挨行敲一遍",[10,118316,118317],{},[1444,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",[10,118321,118322,118323,118326],{},"敲完后，输入",[92,118324,118325],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[10,118328,118329],{},[1444,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",[10,118333,118334,118335,118338],{},"（请详看下方教程的",[255,118336,118337],{},"安装CUDA的配置环境来看","如何配置环境）",[22893,118340,118342],{"id":118341},"_23323-cudnn","2.3.3.2.3 cuDNN",[10,118344,118251],{},[10,118346,118347],{},[1444,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",[21981,118351,118353],{"id":118352},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[10,118355,118356],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[10,118358,118359],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[10,118361,118362],{},[1444,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",[10,118366,118367],{},"连接WSL2",[10,118369,118370],{},[1444,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",[10,118374,118375],{},"远程开发成功。",[10,118377,118378],{},[1444,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",[10,118382,118383],{},[1444,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",[10,118387,118388],{},[1444,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",[21981,118392,118394],{"id":118393},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[10,118396,118397],{},[1444,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",[21981,118401,118403],{"id":118402},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[86,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",[92,118408,118409,118417,118425,118436,118440],{"__ignoreMap":14},[95,118410,118411,118413,118415],{"class":97,"line":98},[95,118412,24561],{"class":1945},[95,118414,117294],{"class":210},[95,118416,26227],{"class":210},[95,118418,118419,118421,118423],{"class":97,"line":15},[95,118420,24561],{"class":1945},[95,118422,117294],{"class":210},[95,118424,117310],{"class":210},[95,118426,118427,118429,118431,118433],{"class":97,"line":1161},[95,118428,24561],{"class":1945},[95,118430,117294],{"class":210},[95,118432,23818],{"class":210},[95,118434,118435],{"class":210}," mesa-utils\n",[95,118437,118438],{"class":97,"line":1176},[95,118439,2382],{"emptyLinePlaceholder":21},[95,118441,118442],{"class":97,"line":1182},[95,118443,118444],{"class":164},"#然后重启wsl2即可\n",[5109,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":1161,"text":117745},{"id":117791,"depth":1161,"text":117792},{"id":117852,"depth":1161,"text":117853},{"id":117888,"depth":15,"text":117889,"children":118457},[118458,118459,118460],{"id":117892,"depth":1161,"text":117893},{"id":117954,"depth":1161,"text":117955},{"id":118243,"depth":1161,"text":118244},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117719,"description":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118467,"title":118468,"body":118469,"description":23360,"extension":18,"meta":121405,"navigation":21,"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],[33,118472,118468],{"id":118473},"_3-安装必备配置",[37,118475,118477],{"id":118476},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[86,118479,118482],{"className":118480,"code":118481,"language":5170},[5168],"  打开下方网站（注意，该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",[92,118483,118481],{"__ignoreMap":14},[66,118485,118487],{"id":118486},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[86,118489,118492],{"className":118490,"code":118491,"language":5170},[5168],"  输入以下命令\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",[92,118493,118491],{"__ignoreMap":14},[66,118495,118497],{"id":118496},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[86,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",[92,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},[95,118506,118507,118509,118511],{"class":97,"line":98},[95,118508,24561],{"class":1945},[95,118510,117294],{"class":210},[95,118512,26227],{"class":210},[95,118514,118515,118517,118519,118521],{"class":97,"line":15},[95,118516,24561],{"class":1945},[95,118518,117294],{"class":210},[95,118520,23818],{"class":210},[95,118522,118523],{"class":210}," vim\n",[95,118525,118526,118528,118531,118533],{"class":97,"line":1161},[95,118527,24561],{"class":1945},[95,118529,118530],{"class":210}," rm",[95,118532,25310],{"class":154},[95,118534,118535],{"class":210}," \u002Fetc\u002Fapt\u002Fsources.list\n",[95,118537,118538,118540,118542,118544,118547],{"class":97,"line":1176},[95,118539,24561],{"class":1945},[95,118541,118530],{"class":210},[95,118543,25310],{"class":154},[95,118545,118546],{"class":210}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[95,118548,118549],{"class":154},"**\n",[95,118551,118552],{"class":97,"line":1182},[95,118553,2382],{"emptyLinePlaceholder":21},[95,118555,118556,118558,118561],{"class":97,"line":1196},[95,118557,24561],{"class":1945},[95,118559,118560],{"class":210}," vim",[95,118562,118563],{"class":210}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[95,118565,118566],{"class":97,"line":1202},[95,118567,118568],{"class":210},"```\n",[95,118570,118571],{"class":97,"line":1293},[95,118572,2382],{"emptyLinePlaceholder":21},[95,118574,118575],{"class":97,"line":1299},[95,118576,2382],{"emptyLinePlaceholder":21},[95,118578,118579],{"class":97,"line":1311},[95,118580,118581],{"class":1945},"选择好Ubuntu版本后，复制下方的内容。\n",[95,118583,118584],{"class":97,"line":1594},[95,118585,2382],{"emptyLinePlaceholder":21},[95,118587,118588,118590,118593,118596],{"class":97,"line":1599},[95,118589,332],{"class":101},[95,118591,118592],{"class":210},"[](",[95,118594,118595],{"class":1945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[95,118597,112],{"class":210},[95,118599,118600],{"class":97,"line":1605},[95,118601,2382],{"emptyLinePlaceholder":21},[95,118603,118604],{"class":97,"line":1610},[95,118605,118606],{"class":1945},"粘贴进去\n",[95,118608,118609],{"class":97,"line":1624},[95,118610,2382],{"emptyLinePlaceholder":21},[95,118612,118613,118615,118617,118620],{"class":97,"line":1629},[95,118614,332],{"class":101},[95,118616,118592],{"class":210},[95,118618,118619],{"class":1945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[95,118621,112],{"class":210},[95,118623,118624],{"class":97,"line":1635},[95,118625,2382],{"emptyLinePlaceholder":21},[95,118627,118628,118631,118634,118637,118639],{"class":97,"line":1656},[95,118629,118630],{"class":1945},"按一下ESC，然后英文冒号，输入",[95,118632,118633],{"class":210}," `",[95,118635,118636],{"class":1945},":wq!",[95,118638,1078],{"class":210},[95,118640,118641],{"class":1945},"然后回车\n",[95,118643,118644],{"class":97,"line":1661},[95,118645,2382],{"emptyLinePlaceholder":21},[95,118647,118648,118650,118652,118655],{"class":97,"line":1675},[95,118649,332],{"class":101},[95,118651,118592],{"class":210},[95,118653,118654],{"class":1945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[95,118656,112],{"class":210},[95,118658,118659],{"class":97,"line":1680},[95,118660,2382],{"emptyLinePlaceholder":21},[95,118662,118663],{"class":97,"line":1709},[95,118664,118665],{"class":1945},"输入以下命令\n",[95,118667,118668],{"class":97,"line":1714},[95,118669,2382],{"emptyLinePlaceholder":21},[95,118671,118672,118675],{"class":97,"line":1731},[95,118673,118674],{"class":210},"```",[95,118676,118677],{"class":1945},"Bash\n",[95,118679,118680,118682,118684],{"class":97,"line":1736},[95,118681,24561],{"class":1945},[95,118683,117294],{"class":210},[95,118685,26227],{"class":210},[10,118687,118688],{},"这里被替换成对应学校则成功",[10,118690,118691],{},[1444,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",[37,118695,118697],{"id":118696},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[66,118699,118701],{"id":118700},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[10,118703,118704],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[10,118706,118707],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[10,118709,118710],{},[344,118711,118712],{"href":118712,"rel":118713},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23849],[10,118715,118716],{},[1444,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",[10,118720,118721],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[10,118723,118724],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[10,118726,118727],{},[1444,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",[86,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",[92,118734,118735,118740,118747,118752],{"__ignoreMap":14},[95,118736,118737],{"class":97,"line":98},[95,118738,118739],{"class":164},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[95,118741,118742,118744],{"class":97,"line":15},[95,118743,101253],{"class":154},[95,118745,118746],{"class":210}," ~\u002FDownloads\n",[95,118748,118749],{"class":97,"line":1161},[95,118750,118751],{"class":164},"#下方chrome安装包名不一定是这个，根据名字来看\n",[95,118753,118754,118756,118758,118760],{"class":97,"line":1176},[95,118755,24561],{"class":1945},[95,118757,117294],{"class":210},[95,118759,23818],{"class":210},[95,118761,118762],{"class":210}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[10,118764,118765],{},[1444,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",[66,118769,118771],{"id":118770},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[86,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",[92,118776,118777,118782,118790,118801,118806,118810,118815,118825,118833,118844],{"__ignoreMap":14},[95,118778,118779],{"class":97,"line":98},[95,118780,118781],{"class":164},"# 老版\n",[95,118783,118784,118786,118788],{"class":97,"line":15},[95,118785,24561],{"class":1945},[95,118787,117294],{"class":210},[95,118789,26227],{"class":210},[95,118791,118792,118794,118796,118798],{"class":97,"line":1161},[95,118793,24561],{"class":1945},[95,118795,117294],{"class":210},[95,118797,23818],{"class":210},[95,118799,118800],{"class":210}," neofetch\n",[95,118802,118803],{"class":97,"line":1176},[95,118804,118805],{"class":1945},"neofetch\n",[95,118807,118808],{"class":97,"line":1182},[95,118809,2382],{"emptyLinePlaceholder":21},[95,118811,118812],{"class":97,"line":1196},[95,118813,118814],{"class":164},"# 新版\n",[95,118816,118817,118819,118822],{"class":97,"line":1202},[95,118818,24561],{"class":1945},[95,118820,118821],{"class":210}," add-apt-repository",[95,118823,118824],{"class":210}," ppa:zhangsongcui3371\u002Ffastfetch\n",[95,118826,118827,118829,118831],{"class":97,"line":1293},[95,118828,24561],{"class":1945},[95,118830,117294],{"class":210},[95,118832,26227],{"class":210},[95,118834,118835,118837,118839,118841],{"class":97,"line":1299},[95,118836,24561],{"class":1945},[95,118838,117294],{"class":210},[95,118840,23818],{"class":210},[95,118842,118843],{"class":210}," fastfetch\n",[95,118845,118846],{"class":97,"line":1311},[95,118847,118848],{"class":1945},"fastfetch\n",[10,118850,118851],{},"这里显示，一共有3162个debian的程序，7个snap程序",[10,118853,118854],{},[1444,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",[66,118858,118860],{"id":118859},"_323-移除snap应用","3.2.3 移除snap应用",[10,118862,118863],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[86,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",[92,118868,118869,118881,118892],{"__ignoreMap":14},[95,118870,118871,118873,118875,118878],{"class":97,"line":98},[95,118872,24561],{"class":1945},[95,118874,26498],{"class":210},[95,118876,118877],{"class":210}," disable",[95,118879,118880],{"class":210}," snapd.service\n",[95,118882,118883,118885,118887,118889],{"class":97,"line":15},[95,118884,24561],{"class":1945},[95,118886,26498],{"class":210},[95,118888,118877],{"class":210},[95,118890,118891],{"class":210}," snapd.socket\n",[95,118893,118894,118896,118898,118900],{"class":97,"line":1161},[95,118895,24561],{"class":1945},[95,118897,26498],{"class":210},[95,118899,118877],{"class":210},[95,118901,118902],{"class":210}," snapd.seeded.service\n",[10,118904,118905],{},"然后查看snap应用列表",[10,118907,118908,118909,118914],{},"根据你安装的选择不同（最小安装或普通安装），有",[344,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",[23849],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[86,118916,118918],{"className":117273,"code":118917,"language":117275,"meta":14,"style":14},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[92,118919,118920,118925],{"__ignoreMap":14},[95,118921,118922],{"class":97,"line":98},[95,118923,118924],{"class":164},"# 查询当前系统上snap安装了哪些app\n",[95,118926,118927,118930],{"class":97,"line":15},[95,118928,118929],{"class":1945},"snap",[95,118931,118932],{"class":210}," list\n",[10,118934,118935],{},[1444,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",[10,118939,118940,118941,118944],{},"卸载掉图中所有应用，按照 ",[255,118942,118943],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[86,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",[92,118949,118950,118955,118967,118972,118983,118988,118999,119004,119015,119020,119024,119029,119040,119051],{"__ignoreMap":14},[95,118951,118952],{"class":97,"line":98},[95,118953,118954],{"class":164},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[95,118956,118957,118959,118962,118964],{"class":97,"line":15},[95,118958,24561],{"class":1945},[95,118960,118961],{"class":210}," snap",[95,118963,26064],{"class":210},[95,118965,118966],{"class":210}," snap-store\n",[95,118968,118969],{"class":97,"line":1161},[95,118970,118971],{"class":164},"#移除firefox浏览器\n",[95,118973,118974,118976,118978,118980],{"class":97,"line":1176},[95,118975,24561],{"class":1945},[95,118977,118961],{"class":210},[95,118979,26064],{"class":210},[95,118981,118982],{"class":210}," firefox\n",[95,118984,118985],{"class":97,"line":1182},[95,118986,118987],{"class":164},"#移除gnome-42-2204\n",[95,118989,118990,118992,118994,118996],{"class":97,"line":1196},[95,118991,24561],{"class":1945},[95,118993,118961],{"class":210},[95,118995,26064],{"class":210},[95,118997,118998],{"class":210}," gnome-42-2204\n",[95,119000,119001],{"class":97,"line":1202},[95,119002,119003],{"class":164},"#移除gtk-common-themes\n",[95,119005,119006,119008,119010,119012],{"class":97,"line":1293},[95,119007,24561],{"class":1945},[95,119009,118961],{"class":210},[95,119011,26064],{"class":210},[95,119013,119014],{"class":210}," gtk-common-themes\n",[95,119016,119017],{"class":97,"line":1299},[95,119018,119019],{"class":164},"#移除其它...\n",[95,119021,119022],{"class":97,"line":1311},[95,119023,2656],{"class":105},[95,119025,119026],{"class":97,"line":1594},[95,119027,119028],{"class":164},"#移除core22,bare以及snapd\n",[95,119030,119031,119033,119035,119037],{"class":97,"line":1599},[95,119032,24561],{"class":1945},[95,119034,118961],{"class":210},[95,119036,26064],{"class":210},[95,119038,119039],{"class":210}," core22\n",[95,119041,119042,119044,119046,119048],{"class":97,"line":1605},[95,119043,24561],{"class":1945},[95,119045,118961],{"class":210},[95,119047,26064],{"class":210},[95,119049,119050],{"class":210}," bare\n",[95,119052,119053,119055,119057,119059],{"class":97,"line":1610},[95,119054,24561],{"class":1945},[95,119056,118961],{"class":210},[95,119058,26064],{"class":210},[95,119060,119061],{"class":210}," snapd\n",[10,119063,119064],{},[1444,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",[10,119068,119069],{},"输入以下命令查看是否还有snap包",[86,119071,119073],{"className":117273,"code":119072,"language":117275,"meta":14,"style":14},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[92,119074,119075,119081,119085,119089,119093],{"__ignoreMap":14},[95,119076,119077,119079],{"class":97,"line":98},[95,119078,118929],{"class":1945},[95,119080,118932],{"class":210},[95,119082,119083],{"class":97,"line":15},[95,119084,118781],{"class":164},[95,119086,119087],{"class":97,"line":1161},[95,119088,118805],{"class":1945},[95,119090,119091],{"class":97,"line":1176},[95,119092,118814],{"class":164},[95,119094,119095],{"class":97,"line":1182},[95,119096,118848],{"class":1945},[10,119098,119099],{},[1444,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",[66,119103,119105],{"id":119104},"_324-移除snap","3.2.4 移除snap",[10,119107,119108,119109,119114],{},"在删除掉",[344,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",[23849],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[86,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",[92,119119,119120,119125,119138,119143,119154],{"__ignoreMap":14},[95,119121,119122],{"class":97,"line":98},[95,119123,119124],{"class":164}," #使用apt移除掉snap\n",[95,119126,119127,119129,119131,119133,119136],{"class":97,"line":15},[95,119128,24561],{"class":1945},[95,119130,117294],{"class":210},[95,119132,117602],{"class":210},[95,119134,119135],{"class":154}," --purge",[95,119137,119061],{"class":210},[95,119139,119140],{"class":97,"line":1161},[95,119141,119142],{"class":164},"#移除snapd的一些目录\n",[95,119144,119145,119147,119149,119151],{"class":97,"line":1176},[95,119146,24561],{"class":1945},[95,119148,118530],{"class":210},[95,119150,25310],{"class":154},[95,119152,119153],{"class":210}," \u002Fvar\u002Fcache\u002Fsnapd\n",[95,119155,119156,119158,119160,119162],{"class":97,"line":1182},[95,119157,24561],{"class":1945},[95,119159,118530],{"class":210},[95,119161,25310],{"class":154},[95,119163,119164],{"class":210}," ~\u002Fsnap\n",[10,119166,119167,119168,119171],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[92,119169,119170],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[66,119173,119175],{"id":119174},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[10,119177,119178],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[86,119180,119182],{"className":117273,"code":119181,"language":117275,"meta":14,"style":14},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[92,119183,119184],{"__ignoreMap":14},[95,119185,119186,119188,119190],{"class":97,"line":98},[95,119187,24561],{"class":1945},[95,119189,118560],{"class":210},[95,119191,119192],{"class":210}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[10,119194,119195,119196,119199],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[92,119197,119198],{},":wq"," 回车",[86,119201,119203],{"className":117273,"code":119202,"language":117275,"meta":14,"style":14},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[92,119204,119205,119212,119226],{"__ignoreMap":14},[95,119206,119207,119210],{"class":97,"line":98},[95,119208,119209],{"class":1945},"Package:",[95,119211,119061],{"class":210},[95,119213,119214,119217,119220,119223],{"class":97,"line":15},[95,119215,119216],{"class":1945},"Pin:",[95,119218,119219],{"class":210}," release",[95,119221,119222],{"class":210}," a=",[95,119224,119225],{"class":154},"*\n",[95,119227,119228,119231],{"class":97,"line":1161},[95,119229,119230],{"class":1945},"Pin-Priority:",[95,119232,119233],{"class":154}," -10\n",[10,119235,119236],{},[1444,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",[66,119240,119242],{"id":119241},"_326-测试是否成功","3.2.6 测试是否成功",[86,119244,119246],{"className":117273,"code":119245,"language":117275,"meta":14,"style":14},"sudo apt update\nsudo apt install firefox\n",[92,119247,119248,119256],{"__ignoreMap":14},[95,119249,119250,119252,119254],{"class":97,"line":98},[95,119251,24561],{"class":1945},[95,119253,117294],{"class":210},[95,119255,26227],{"class":210},[95,119257,119258,119260,119262,119264],{"class":97,"line":15},[95,119259,24561],{"class":1945},[95,119261,117294],{"class":210},[95,119263,23818],{"class":210},[95,119265,118982],{"class":210},[10,119267,119268],{},"这里提示snapd无法被安装，就证明成功了",[10,119270,119271],{},[1444,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",[66,119275,119277],{"id":119276},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[10,119279,119280],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[10,119282,119283],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[10,119285,119286],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[86,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",[92,119291,119292,119297,119306,119311,119319],{"__ignoreMap":14},[95,119293,119294],{"class":97,"line":98},[95,119295,119296],{"class":164},"# 添加Mozilla提供的源\n",[95,119298,119299,119301,119303],{"class":97,"line":15},[95,119300,24561],{"class":1945},[95,119302,118821],{"class":210},[95,119304,119305],{"class":210}," ppa:mozillateam\u002Fppa\n",[95,119307,119308],{"class":97,"line":1161},[95,119309,119310],{"class":164},"# 安装Firefox\n",[95,119312,119313,119315,119317],{"class":97,"line":1176},[95,119314,24561],{"class":1945},[95,119316,117294],{"class":210},[95,119318,26227],{"class":210},[95,119320,119321,119323,119325,119327],{"class":97,"line":1182},[95,119322,24561],{"class":1945},[95,119324,117294],{"class":210},[95,119326,23818],{"class":210},[95,119328,118982],{"class":210},[66,119330,119332],{"id":119331},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[10,119334,119335],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[10,119337,119338],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[86,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",[92,119343,119344,119349,119359,119367,119371],{"__ignoreMap":14},[95,119345,119346],{"class":97,"line":98},[95,119347,119348],{"class":164},"#删掉禁止安装snap的配置文件\n",[95,119350,119351,119353,119355,119357],{"class":97,"line":15},[95,119352,24561],{"class":1945},[95,119354,118530],{"class":210},[95,119356,25310],{"class":154},[95,119358,119192],{"class":210},[95,119360,119361,119363,119365],{"class":97,"line":1161},[95,119362,24561],{"class":1945},[95,119364,117294],{"class":210},[95,119366,26227],{"class":210},[95,119368,119369],{"class":97,"line":1176},[95,119370,2382],{"emptyLinePlaceholder":21},[95,119372,119373,119375,119377],{"class":97,"line":1182},[95,119374,24561],{"class":1945},[95,119376,117294],{"class":210},[95,119378,119379],{"class":210}," dist-update\n",[37,119381,119383],{"id":119382},"_33-中文输入法","3.3 中文输入法",[66,119385,119387],{"id":119386},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[10,119389,119390],{},"官网下载搜狗输入法",[10,119392,119393],{},[1444,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",[10,119397,119398],{},[1444,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",[10,119402,119403],{},"打开终端输入如下",[86,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",[92,119408,119409,119416],{"__ignoreMap":14},[95,119410,119411,119413],{"class":97,"line":98},[95,119412,101253],{"class":154},[95,119414,119415],{"class":210}," ~\u002FDownloads\u002F\n",[95,119417,119418,119420,119422,119424],{"class":97,"line":15},[95,119419,24561],{"class":1945},[95,119421,117294],{"class":210},[95,119423,23818],{"class":210},[95,119425,119426],{"class":210}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[10,119428,119429],{},"打开Fcitx",[10,119431,119432,119435],{},[1444,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",[1444,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",[10,119439,119440],{},[1444,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",[10,119444,119445],{},"添加搜狗输入法",[10,119447,119448],{},[1444,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",[10,119452,119453],{},[1444,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",[10,119457,119458],{},"将搜狗输入法设置为唯一输入法",[10,119460,119461],{},[1444,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",[66,119465,119467],{"id":119466},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[49,119469,119470],{},[52,119471,119472],{},"卸载旧输入法",[86,119474,119476],{"className":118500,"code":119475,"language":118502,"meta":14,"style":14},"sudo apt purge fcitx* ibus*\n",[92,119477,119478],{"__ignoreMap":14},[95,119479,119480,119482,119484,119486,119489,119491,119494],{"class":97,"line":98},[95,119481,24561],{"class":1945},[95,119483,117294],{"class":210},[95,119485,117635],{"class":210},[95,119487,119488],{"class":210}," fcitx",[95,119490,561],{"class":154},[95,119492,119493],{"class":210}," ibus",[95,119495,119225],{"class":154},[49,119497,119498],{"start":15},[52,119499,119500],{},"安装Fcitx5",[86,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",[92,119505,119506,119511,119525,119529,119534,119543,119551],{"__ignoreMap":14},[95,119507,119508],{"class":97,"line":98},[95,119509,119510],{"class":164},"# Ubuntu22.04及以上、Debian12及以上\n",[95,119512,119513,119515,119517,119519,119522],{"class":97,"line":15},[95,119514,24561],{"class":1945},[95,119516,117294],{"class":210},[95,119518,23818],{"class":210},[95,119520,119521],{"class":210}," fcitx5",[95,119523,119524],{"class":210}," fcitx5-chinese-addons\n",[95,119526,119527],{"class":97,"line":1161},[95,119528,2382],{"emptyLinePlaceholder":21},[95,119530,119531],{"class":97,"line":1176},[95,119532,119533],{"class":164},"# Ubuntu20.04\n",[95,119535,119536,119538,119540],{"class":97,"line":1182},[95,119537,24561],{"class":1945},[95,119539,118821],{"class":210},[95,119541,119542],{"class":210}," ppa:zhsj\u002Ffcitx5\n",[95,119544,119545,119547,119549],{"class":97,"line":1196},[95,119546,24561],{"class":1945},[95,119548,117294],{"class":210},[95,119550,26227],{"class":210},[95,119552,119553,119555,119557,119559,119561],{"class":97,"line":1202},[95,119554,24561],{"class":1945},[95,119556,117294],{"class":210},[95,119558,23818],{"class":210},[95,119560,119521],{"class":210},[95,119562,119524],{"class":210},[49,119564,119565,119568],{"start":1161},[52,119566,119567],{},"Reboot System",[52,119569,119570],{},"启动Fcitx5",[10,119572,119573],{},[1444,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",[49,119577,119578],{"start":1182},[52,119579,119580],{},"修改一些设置",[10,119582,119583],{},"将Pinyin和Keyboard - English US加入到左边。",[10,119585,119586],{},[1444,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",[10,119590,119591],{},"添加快捷键以便于更好切换中英文",[10,119593,119594],{},[1444,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",[49,119598,119599],{"start":1196},[52,119600,119601],{},"重启",[86,119603,119605],{"className":118500,"code":119604,"language":118502,"meta":14,"style":14},"sudo shutdown -r now\n",[92,119606,119607],{"__ignoreMap":14},[95,119608,119609,119611,119614,119617],{"class":97,"line":98},[95,119610,24561],{"class":1945},[95,119612,119613],{"class":210}," shutdown",[95,119615,119616],{"class":154}," -r",[95,119618,119619],{"class":210}," now\n",[49,119621,119622],{"start":1202},[52,119623,119624],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[10,119626,119627],{},[344,119628,119629],{"href":119629,"rel":119630},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23849],[49,119632,119633],{"start":1293},[52,119634,119635],{},"再重启",[86,119637,119638],{"className":118500,"code":119604,"language":118502,"meta":14,"style":14},[92,119639,119640],{"__ignoreMap":14},[95,119641,119642,119644,119646,119648],{"class":97,"line":98},[95,119643,24561],{"class":1945},[95,119645,119613],{"class":210},[95,119647,119616],{"class":154},[95,119649,119619],{"class":210},[37,119651,119653],{"id":119652},"_34-pip3源替换","3.4 pip3源替换",[10,119655,119656],{},"非Debian系发行版需要做。",[10,119658,119659],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[10,119661,119662],{},"使用dnf的系统也可能不用做。",[86,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",[92,119667,119668,119673,119680,119685,119690],{"__ignoreMap":14},[95,119669,119670],{"class":97,"line":98},[95,119671,119672],{"class":164},"# 检查是否已安装 pip\n",[95,119674,119675,119678],{"class":97,"line":15},[95,119676,119677],{"class":1945},"pip3",[95,119679,26278],{"class":154},[95,119681,119682],{"class":97,"line":1161},[95,119683,119684],{"class":164},"# 如果未安装，先安装 pip3（见下方）\n",[95,119686,119687],{"class":97,"line":1176},[95,119688,119689],{"class":164},"# 配置 pip 使用清华源\n",[95,119691,119692,119694,119697,119700,119703],{"class":97,"line":1182},[95,119693,119677],{"class":1945},[95,119695,119696],{"class":210}," config",[95,119698,119699],{"class":210}," set",[95,119701,119702],{"class":210}," global.index-url",[95,119704,119705],{"class":210}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[10,119707,119708],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[10,119710,119711],{},[1444,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",[86,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",[92,119718,119719,119724,119732,119743,119747,119752,119771,119775,119780,119792,119796,119801],{"__ignoreMap":14},[95,119720,119721],{"class":97,"line":98},[95,119722,119723],{"class":164},"#安装pip3\n",[95,119725,119726,119728,119730],{"class":97,"line":15},[95,119727,24561],{"class":1945},[95,119729,117294],{"class":210},[95,119731,26227],{"class":210},[95,119733,119734,119736,119738,119740],{"class":97,"line":1161},[95,119735,24561],{"class":1945},[95,119737,26061],{"class":210},[95,119739,23818],{"class":210},[95,119741,119742],{"class":210}," python3-pip\n",[95,119744,119745],{"class":97,"line":1176},[95,119746,2382],{"emptyLinePlaceholder":21},[95,119748,119749],{"class":97,"line":1182},[95,119750,119751],{"class":164},"#更新pip3\n",[95,119753,119754,119756,119758,119760,119762,119764,119767,119769],{"class":97,"line":1196},[95,119755,100856],{"class":1945},[95,119757,100859],{"class":154},[95,119759,100882],{"class":210},[95,119761,23818],{"class":210},[95,119763,26415],{"class":154},[95,119765,119766],{"class":210}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[95,119768,100887],{"class":154},[95,119770,100890],{"class":210},[95,119772,119773],{"class":97,"line":1202},[95,119774,2382],{"emptyLinePlaceholder":21},[95,119776,119777],{"class":97,"line":1293},[95,119778,119779],{"class":164},"#设置pip源为清华源\n",[95,119781,119782,119784,119786,119788,119790],{"class":97,"line":1299},[95,119783,119677],{"class":1945},[95,119785,119696],{"class":210},[95,119787,119699],{"class":210},[95,119789,119702],{"class":210},[95,119791,119705],{"class":210},[95,119793,119794],{"class":97,"line":1311},[95,119795,2382],{"emptyLinePlaceholder":21},[95,119797,119798],{"class":97,"line":1594},[95,119799,119800],{"class":164},"#测试\n",[95,119802,119803,119805,119807,119809,119811,119813],{"class":97,"line":1599},[95,119804,100856],{"class":1945},[95,119806,100859],{"class":154},[95,119808,100882],{"class":210},[95,119810,23818],{"class":210},[95,119812,100887],{"class":154},[95,119814,100890],{"class":210},[10,119816,119817],{},"成功的话，会看到Looking后面是tsinghua字样。",[10,119819,119820],{},[1444,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",[37,119824,119826],{"id":119825},"_35-显卡驱动安装","3.5 显卡驱动安装",[66,119828,119830],{"id":119829},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[86,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",[92,119835,119836,119841,119856,119861],{"__ignoreMap":14},[95,119837,119838],{"class":97,"line":98},[95,119839,119840],{"class":164},"# 如果是使用apt安装的驱动\n",[95,119842,119843,119845,119847,119849,119851,119854],{"class":97,"line":15},[95,119844,24561],{"class":1945},[95,119846,26061],{"class":210},[95,119848,26064],{"class":210},[95,119850,119135],{"class":154},[95,119852,119853],{"class":210}," nvidia",[95,119855,119225],{"class":154},[95,119857,119858],{"class":97,"line":1161},[95,119859,119860],{"class":164},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[95,119862,119863,119865],{"class":97,"line":1176},[95,119864,24561],{"class":1945},[95,119866,119867],{"class":210}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[66,119869,119871],{"id":119870},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21981,119873,119875],{"id":119874},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22893,119877,119879],{"id":119878},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[86,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",[92,119884,119885,119890,119901,119906,119916,119921],{"__ignoreMap":14},[95,119886,119887],{"class":97,"line":98},[95,119888,119889],{"class":164},"# 安装英伟达驱动\n",[95,119891,119892,119894,119896,119898],{"class":97,"line":15},[95,119893,24561],{"class":1945},[95,119895,117294],{"class":210},[95,119897,23818],{"class":210},[95,119899,119900],{"class":210}," nvidia-driver-版本号\n",[95,119902,119903],{"class":97,"line":1161},[95,119904,119905],{"class":164},"# 重启 \n",[95,119907,119908,119910,119912,119914],{"class":97,"line":1176},[95,119909,24561],{"class":1945},[95,119911,119613],{"class":210},[95,119913,119616],{"class":154},[95,119915,119619],{"class":210},[95,119917,119918],{"class":97,"line":1182},[95,119919,119920],{"class":164},"# 检查驱动是否安装成功\n",[95,119922,119923],{"class":97,"line":1196},[95,119924,119925],{"class":1945},"nvidia-smi\n",[22893,119927,119929],{"id":119928},"_35212-debian","3.5.2.1.2 Debian",[86,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",[92,119934,119935,119939,119953,119957,119967,119971],{"__ignoreMap":14},[95,119936,119937],{"class":97,"line":98},[95,119938,119889],{"class":164},[95,119940,119941,119943,119945,119947,119950],{"class":97,"line":15},[95,119942,24561],{"class":1945},[95,119944,117294],{"class":210},[95,119946,23818],{"class":210},[95,119948,119949],{"class":210}," nvidia-driver",[95,119951,119952],{"class":210}," nvidia-settings\n",[95,119954,119955],{"class":97,"line":1161},[95,119956,119905],{"class":164},[95,119958,119959,119961,119963,119965],{"class":97,"line":1176},[95,119960,24561],{"class":1945},[95,119962,119613],{"class":210},[95,119964,119616],{"class":154},[95,119966,119619],{"class":210},[95,119968,119969],{"class":97,"line":1182},[95,119970,119920],{"class":164},[95,119972,119973],{"class":97,"line":1196},[95,119974,119925],{"class":1945},[21981,119976,119978],{"id":119977},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[10,119980,119981,119982,119985],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[255,119983,119984],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[10,119987,119988,119989],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23537,119990,119991],{},[255,119992,119993],{},"（也可以不禁用桌面环境，直接进行下一步。）",[86,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",[92,119998,119999,120004,120014,120019,120032,120037],{"__ignoreMap":14},[95,120000,120001],{"class":97,"line":98},[95,120002,120003],{"class":164},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[95,120005,120006,120008,120011],{"class":97,"line":15},[95,120007,24561],{"class":1945},[95,120009,120010],{"class":210}," telinit",[95,120012,120013],{"class":154}," 3\n",[95,120015,120016],{"class":97,"line":1161},[95,120017,120018],{"class":164},"# ubuntu 使用下方命令\n",[95,120020,120021,120023,120026,120029],{"class":97,"line":1176},[95,120022,24561],{"class":1945},[95,120024,120025],{"class":210}," service",[95,120027,120028],{"class":210}," lightdm",[95,120030,120031],{"class":210}," stop\n",[95,120033,120034],{"class":97,"line":1182},[95,120035,120036],{"class":164},"# Fedora 使用下方命令\n",[95,120038,120039,120041,120043,120046],{"class":97,"line":1196},[95,120040,24561],{"class":1945},[95,120042,26498],{"class":210},[95,120044,120045],{"class":210}," isolate",[95,120047,120048],{"class":210}," multi-user.target\n",[10,120050,120051],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[86,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",[92,120056,120057,120062,120073,120078,120085,120090,120102,120107,120114,120119],{"__ignoreMap":14},[95,120058,120059],{"class":97,"line":98},[95,120060,120061],{"class":164},"# 编译环境+准备工作\n",[95,120063,120064,120066,120068,120070],{"class":97,"line":15},[95,120065,24561],{"class":1945},[95,120067,117294],{"class":210},[95,120069,23818],{"class":210},[95,120071,120072],{"class":210}," build-essential\n",[95,120074,120075],{"class":97,"line":1161},[95,120076,120077],{"class":164},"# 进入到.run目录中\n",[95,120079,120080,120082],{"class":97,"line":1176},[95,120081,101253],{"class":154},[95,120083,120084],{"class":210}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[95,120086,120087],{"class":97,"line":1182},[95,120088,120089],{"class":164},"# 给驱动文件增加可执行权限：\n",[95,120091,120092,120094,120096,120099],{"class":97,"line":1196},[95,120093,24561],{"class":1945},[95,120095,24564],{"class":210},[95,120097,120098],{"class":210}," a+x",[95,120100,120101],{"class":210}," NVIDIA-Linux-x86_64-550.107.02.run\n",[95,120103,120104],{"class":97,"line":1202},[95,120105,120106],{"class":164},"# 然后执行安装：\n",[95,120108,120109,120111],{"class":97,"line":1293},[95,120110,24561],{"class":1945},[95,120112,120113],{"class":210}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[95,120115,120116],{"class":97,"line":1299},[95,120117,120118],{"class":164},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[95,120120,120121,120123,120126],{"class":97,"line":1311},[95,120122,24561],{"class":1945},[95,120124,120125],{"class":210}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[95,120127,120128],{"class":154},"  --no-opengl-files\n",[10,120130,120131],{},"安装完毕重启即可",[86,120133,120135],{"className":118500,"code":120134,"language":118502,"meta":14,"style":14},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[92,120136,120137,120141,120147,120151],{"__ignoreMap":14},[95,120138,120139],{"class":97,"line":98},[95,120140,119905],{"class":164},[95,120142,120143,120145],{"class":97,"line":15},[95,120144,24561],{"class":1945},[95,120146,26632],{"class":210},[95,120148,120149],{"class":97,"line":1161},[95,120150,119920],{"class":164},[95,120152,120153],{"class":97,"line":1176},[95,120154,119925],{"class":1945},[66,120156,120158],{"id":120157},"_353-安装cuda","3.5.3 安装CUDA",[10,120160,120161],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[10,120163,120164],{},[1444,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",[49,120168,120169],{},[52,120170,120171],{},"先查看显卡驱动所支持的最高CUDA版本",[86,120173,120174],{"className":118500,"code":119925,"language":118502,"meta":14,"style":14},[92,120175,120176],{"__ignoreMap":14},[95,120177,120178],{"class":97,"line":98},[95,120179,119925],{"class":1945},[10,120181,120182],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[10,120184,120185],{},[1444,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",[49,120189,120190],{"start":15},[52,120191,120192],{},"下载CUDA并安装CUDA",[10,120194,118279,120195],{},[344,120196,118282],{"href":118282,"rel":120197},[23849],[10,120199,120200],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[10,120202,120203],{},[1444,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",[10,120207,120208,120209,120214],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[344,120210,120213],{"href":120211,"rel":120212},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23849],"Vinci机器人队单片机教程","）",[10,120216,120217],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[10,120219,120220],{},[1444,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",[10,120224,120225],{},"将最下方框框里的命令敲入终端",[86,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",[92,120230,120231,120236,120245,120250,120257,120262,120270,120275,120286,120291],{"__ignoreMap":14},[95,120232,120233],{"class":97,"line":98},[95,120234,120235],{"class":164},"# 在当前文件夹下创建一个ttt的子文件夹\n",[95,120237,120238,120240,120242],{"class":97,"line":15},[95,120239,101243],{"class":1945},[95,120241,29201],{"class":154},[95,120243,120244],{"class":210}," .\u002Fttt\n",[95,120246,120247],{"class":97,"line":1161},[95,120248,120249],{"class":164},"# 进入ttt文件夹\n",[95,120251,120252,120254],{"class":97,"line":1176},[95,120253,101253],{"class":154},[95,120255,120256],{"class":210}," ttt\n",[95,120258,120259],{"class":97,"line":1182},[95,120260,120261],{"class":164},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[95,120263,120264,120267],{"class":97,"line":1196},[95,120265,120266],{"class":1945},"wget",[95,120268,120269],{"class":210}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[95,120271,120272],{"class":97,"line":1202},[95,120273,120274],{"class":164},"# 给予权限\n",[95,120276,120277,120279,120281,120283],{"class":97,"line":1293},[95,120278,24561],{"class":1945},[95,120280,24564],{"class":210},[95,120282,120098],{"class":210},[95,120284,120285],{"class":210}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[95,120287,120288],{"class":97,"line":1299},[95,120289,120290],{"class":164},"# 运行脚本\n",[95,120292,120293,120295],{"class":97,"line":1311},[95,120294,24561],{"class":1945},[95,120296,120285],{"class":210},[10,120298,120299],{},[1444,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",[10,120303,120304],{},"正在安装中：",[10,120306,120307],{},[1444,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",[10,120311,120312],{},"输入accept接受即可",[10,120314,120315],{},[1444,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",[10,120319,120320],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[10,120322,120323],{},[1444,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",[10,120327,120328],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[10,120330,120331],{},[1444,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",[49,120335,120336],{"start":1161},[52,120337,120338],{},"配置环境",[10,120340,120341],{},"根据上方确认一下路径，比如我上面红色框起来的为",[86,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",[92,120346,120347,120363,120378],{"__ignoreMap":14},[95,120348,120349,120352,120355,120358,120361],{"class":97,"line":98},[95,120350,120351],{"class":1945},"Please",[95,120353,120354],{"class":210}," make",[95,120356,120357],{"class":210}," sure",[95,120359,120360],{"class":210}," that",[95,120362,2656],{"class":105},[95,120364,120365,120367,120370,120373,120376],{"class":97,"line":15},[95,120366,52248],{"class":1945},[95,120368,120369],{"class":210},"   PATH",[95,120371,120372],{"class":210}," includes",[95,120374,120375],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[95,120377,2656],{"class":105},[95,120379,120380,120382,120385,120387,120390,120393,120395,120398,120401,120404,120407,120409,120412,120414],{"class":97,"line":1161},[95,120381,52248],{"class":1945},[95,120383,120384],{"class":210},"   LD_LIBRARY_PATH",[95,120386,120372],{"class":210},[95,120388,120389],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[95,120391,120392],{"class":210}," or,",[95,120394,5192],{"class":210},[95,120396,120397],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[95,120399,120400],{"class":210}," to",[95,120402,120403],{"class":210}," \u002Fetc\u002Fld.so.conf",[95,120405,120406],{"class":210}," and",[95,120408,27215],{"class":210},[95,120410,120411],{"class":210}," ldconfig",[95,120413,64581],{"class":210},[95,120415,120416],{"class":210}," root\n",[10,120418,120419],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[86,120421,120423],{"className":118500,"code":120422,"language":118502,"meta":14,"style":14},"which nvcc\n",[92,120424,120425],{"__ignoreMap":14},[95,120426,120427,120430],{"class":97,"line":98},[95,120428,120429],{"class":154},"which",[95,120431,120432],{"class":210}," nvcc\n",[10,120434,120435],{},[1444,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",[10,120439,120440],{},"所以我进行以下操作：",[86,120442,120444],{"className":118500,"code":120443,"language":118502,"meta":14,"style":14},"sudo vim ~\u002F.bashrc\n",[92,120445,120446],{"__ignoreMap":14},[95,120447,120448,120450,120452],{"class":97,"line":98},[95,120449,24561],{"class":1945},[95,120451,118560],{"class":210},[95,120453,120454],{"class":210}," ~\u002F.bashrc\n",[10,120456,120457],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[86,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",[92,120462,120463,120475],{"__ignoreMap":14},[95,120464,120465,120467,120470,120472],{"class":97,"line":98},[95,120466,25027],{"class":101},[95,120468,120469],{"class":105}," PATH",[95,120471,151],{"class":101},[95,120473,120474],{"class":105},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[95,120476,120477,120479,120482,120484],{"class":97,"line":15},[95,120478,25027],{"class":101},[95,120480,120481],{"class":105}," LD_LIBRARY_PATH",[95,120483,151],{"class":101},[95,120485,120486],{"class":105},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[10,120488,120489],{},[1444,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",[86,120493,120495],{"className":118500,"code":120494,"language":118502,"meta":14,"style":14},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[92,120496,120497,120502,120508,120513],{"__ignoreMap":14},[95,120498,120499],{"class":97,"line":98},[95,120500,120501],{"class":164},"# 刷新当前终端的环境变量\n",[95,120503,120504,120506],{"class":97,"line":15},[95,120505,100870],{"class":154},[95,120507,120454],{"class":210},[95,120509,120510],{"class":97,"line":1161},[95,120511,120512],{"class":164},"# 验证CUDA是否安装成功\n",[95,120514,120515,120518],{"class":97,"line":1176},[95,120516,120517],{"class":1945},"nvcc",[95,120519,120520],{"class":154}," -V\n",[10,120522,120523],{},"出现下图这种则安装成功。",[10,120525,120526],{},[1444,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",[66,120530,120532],{"id":120531},"_354-安装cudnn","3.5.4 安装cuDNN",[49,120534,120535],{},[52,120536,120537],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[10,120539,120540,120541,120546],{},"前往 NVIDIA cuDNN 下载页面：",[344,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",[23849],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[10,120548,120549],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[10,120551,120552],{},[1444,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",[10,120556,120557],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[10,120559,120560],{},[1444,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",[10,120564,120565],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[10,120567,120568],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[10,120570,120571],{},[255,120572,120573],{},"我这里选择所有Linux X86_64最通用的办法：",[10,120575,120576],{},"下载好的：",[10,120578,120579],{},[1444,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",[49,120583,120584],{"start":15},[52,120585,120586],{},"安装cuDNN",[10,120588,120589],{},"找到该文件所在目录，并打开终端，cd到该目录。",[10,120591,120592],{},[1444,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",[10,120596,120597],{},"解压文件，并复制到对应位置完成安装",[86,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",[92,120602,120603,120608,120619,120624,120631,120636,120652,120666,120671,120682,120691,120695,120711],{"__ignoreMap":14},[95,120604,120605],{"class":97,"line":98},[95,120606,120607],{"class":164},"# 解压cuDNN文件\n",[95,120609,120610,120613,120616],{"class":97,"line":15},[95,120611,120612],{"class":1945},"tar",[95,120614,120615],{"class":154}," -xvf",[95,120617,120618],{"class":210}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[95,120620,120621],{"class":97,"line":1161},[95,120622,120623],{"class":164},"# cd进文件夹\n",[95,120625,120626,120628],{"class":97,"line":1176},[95,120627,101253],{"class":154},[95,120629,120630],{"class":210}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[95,120632,120633],{"class":97,"line":1182},[95,120634,120635],{"class":164},"# 复制cuDNN文件到CUDA目录\n",[95,120637,120638,120640,120642,120645,120647,120650],{"class":97,"line":1196},[95,120639,24561],{"class":1945},[95,120641,27846],{"class":210},[95,120643,120644],{"class":210}," include\u002Fcudnn",[95,120646,561],{"class":154},[95,120648,120649],{"class":210},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[95,120651,2656],{"class":105},[95,120653,120654,120656,120658,120661,120663],{"class":97,"line":1202},[95,120655,24561],{"class":1945},[95,120657,27846],{"class":210},[95,120659,120660],{"class":210}," lib\u002Flibcudnn",[95,120662,561],{"class":154},[95,120664,120665],{"class":210},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[95,120667,120668],{"class":97,"line":1293},[95,120669,120670],{"class":164},"# 对比一下有没有缺文件\n",[95,120672,120673,120675,120678,120680],{"class":97,"line":1299},[95,120674,26746],{"class":1945},[95,120676,120677],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[95,120679,561],{"class":154},[95,120681,2656],{"class":105},[95,120683,120684,120686,120689],{"class":97,"line":1311},[95,120685,26746],{"class":1945},[95,120687,120688],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[95,120690,119225],{"class":154},[95,120692,120693],{"class":97,"line":1594},[95,120694,120274],{"class":164},[95,120696,120697,120699,120701,120704,120706,120708],{"class":97,"line":1599},[95,120698,24561],{"class":1945},[95,120700,24564],{"class":210},[95,120702,120703],{"class":210}," a+r",[95,120705,120677],{"class":210},[95,120707,561],{"class":154},[95,120709,120710],{"class":105},"   \n",[95,120712,120713,120715,120717,120719,120721],{"class":97,"line":1605},[95,120714,24561],{"class":1945},[95,120716,24564],{"class":210},[95,120718,120703],{"class":210},[95,120720,120688],{"class":210},[95,120722,119225],{"class":154},[49,120724,120725],{"start":1161},[52,120726,120727],{},"检查是否安装成功",[86,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",[92,120732,120733,120738],{"__ignoreMap":14},[95,120734,120735],{"class":97,"line":98},[95,120736,120737],{"class":164},"# 检查cuDNN版本命令\n",[95,120739,120740,120743,120746,120748,120750,120753,120756],{"class":97,"line":15},[95,120741,120742],{"class":1945},"cat",[95,120744,120745],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[95,120747,25094],{"class":101},[95,120749,30221],{"class":1945},[95,120751,120752],{"class":210}," CUDNN_MAJOR",[95,120754,120755],{"class":154}," -A",[95,120757,47708],{"class":154},[10,120759,120760],{},"出现下图这样的就是安装成功了",[10,120762,120763],{},[1444,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",[49,120767,120768],{"start":1176},[52,120769,120770],{},"软链接(一般不需要)",[86,120772,120774],{"className":118500,"code":120773,"language":118502,"meta":14,"style":14},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[92,120775,120776,120781],{"__ignoreMap":14},[95,120777,120778],{"class":97,"line":98},[95,120779,120780],{"class":164},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[95,120782,120783,120785],{"class":97,"line":15},[95,120784,24561],{"class":1945},[95,120786,120787],{"class":210}," ldconfig\n",[10,120789,120790],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[86,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",[92,120798,120799,120804,120809,120814,120819,120824,120829],{"__ignoreMap":14},[95,120800,120801],{"class":97,"line":98},[95,120802,120803],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[95,120805,120806],{"class":97,"line":15},[95,120807,120808],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[95,120810,120811],{"class":97,"line":1161},[95,120812,120813],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[95,120815,120816],{"class":97,"line":1176},[95,120817,120818],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[95,120820,120821],{"class":97,"line":1182},[95,120822,120823],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[95,120825,120826],{"class":97,"line":1196},[95,120827,120828],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[95,120830,120831],{"class":97,"line":1202},[95,120832,120833],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[10,120835,120836],{},"运行下方的命令",[86,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",[92,120841,120842,120847,120854,120859],{"__ignoreMap":14},[95,120843,120844],{"class":97,"line":98},[95,120845,120846],{"class":164},"# cd进入CUDA路径\n",[95,120848,120849,120851],{"class":97,"line":15},[95,120850,101253],{"class":154},[95,120852,120853],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[95,120855,120856],{"class":97,"line":1161},[95,120857,120858],{"class":164}," # 查看本路径下的需要软链接的文件名\n",[95,120860,120861],{"class":97,"line":1176},[95,120862,120863],{"class":1945}," ls\n",[10,120865,120866],{},[1444,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",[10,120870,120871,120872,18393,120875,18393,120878,120881],{},"如上图，我需要将",[92,120873,120874],{},"libcudnn_xxx_xxxxx.so.8.9.7",[92,120876,120877],{},"libcudnn_xxx_xxxxx.so.8",[92,120879,120880],{},"libcudnn_xxx_xxxxx.so","软链接",[86,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",[92,120886,120887,120892,120908,120922,120936,120950,120964,120978,120992,120997,121003,121008],{"__ignoreMap":14},[95,120888,120889],{"class":97,"line":98},[95,120890,120891],{"class":164},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[95,120893,120894,120896,120899,120902,120905],{"class":97,"line":15},[95,120895,24561],{"class":1945},[95,120897,120898],{"class":210}," ln",[95,120900,120901],{"class":154}," -sf",[95,120903,120904],{"class":210}," libcudnn_cnn_train.so.8.9.7",[95,120906,120907],{"class":210}," libcudnn_cnn_train.so.8\n",[95,120909,120910,120912,120914,120916,120919],{"class":97,"line":1161},[95,120911,24561],{"class":1945},[95,120913,120898],{"class":210},[95,120915,120901],{"class":154},[95,120917,120918],{"class":210}," libcudnn_adv_infer.so.8.9.7",[95,120920,120921],{"class":210}," libcudnn_adv_infer.so.8\n",[95,120923,120924,120926,120928,120930,120933],{"class":97,"line":1176},[95,120925,24561],{"class":1945},[95,120927,120898],{"class":210},[95,120929,120901],{"class":154},[95,120931,120932],{"class":210}," libcudnn_adv_train.so.8.9.7",[95,120934,120935],{"class":210}," libcudnn_adv_train.so.8\n",[95,120937,120938,120940,120942,120944,120947],{"class":97,"line":1182},[95,120939,24561],{"class":1945},[95,120941,120898],{"class":210},[95,120943,120901],{"class":154},[95,120945,120946],{"class":210}," libcudnn_cnn_infer.so.8.9.7",[95,120948,120949],{"class":210}," libcudnn_cnn_infer.so.8\n",[95,120951,120952,120954,120956,120958,120961],{"class":97,"line":1196},[95,120953,24561],{"class":1945},[95,120955,120898],{"class":210},[95,120957,120901],{"class":154},[95,120959,120960],{"class":210}," libcudnn.so.8.9.7",[95,120962,120963],{"class":210}," libcudnn.so.8\n",[95,120965,120966,120968,120970,120972,120975],{"class":97,"line":1202},[95,120967,24561],{"class":1945},[95,120969,120898],{"class":210},[95,120971,120901],{"class":154},[95,120973,120974],{"class":210}," libcudnn_ops_infer.so.8.9.7",[95,120976,120977],{"class":210}," libcudnn_ops_infer.so.8\n",[95,120979,120980,120982,120984,120986,120989],{"class":97,"line":1293},[95,120981,24561],{"class":1945},[95,120983,120898],{"class":210},[95,120985,120901],{"class":154},[95,120987,120988],{"class":210}," libcudnn_ops_train.so.8.9.7",[95,120990,120991],{"class":210}," libcudnn_ops_train.so.8\n",[95,120993,120994],{"class":97,"line":1299},[95,120995,120996],{"class":164},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[95,120998,120999,121001],{"class":97,"line":1311},[95,121000,24561],{"class":1945},[95,121002,120787],{"class":210},[95,121004,121005],{"class":97,"line":1594},[95,121006,121007],{"class":164},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[95,121009,121010,121012,121015,121018,121020,121023],{"class":97,"line":1599},[95,121011,26746],{"class":1945},[95,121013,121014],{"class":154}," -l",[95,121016,121017],{"class":210}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[95,121019,561],{"class":154},[95,121021,121022],{"class":210},".so",[95,121024,119225],{"class":154},[66,121026,121028],{"id":121027},"_355-常见问题","3.5.5 常见问题",[49,121030,121031],{},[52,121032,121033],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[86,121035,121037],{"className":118500,"code":121036,"language":118502,"meta":14,"style":14},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[92,121038,121039],{"__ignoreMap":14},[95,121040,121041,121043,121045],{"class":97,"line":98},[95,121042,24561],{"class":1945},[95,121044,118560],{"class":210},[95,121046,121047],{"class":210}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[10,121049,121050],{},"blacklist-nouveau.conf文件内容如下：",[86,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",[92,121055,121056,121064,121071,121083,121093],{"__ignoreMap":14},[95,121057,121058,121061],{"class":97,"line":98},[95,121059,121060],{"class":1945},"blacklist",[95,121062,121063],{"class":210}," nouveau\n",[95,121065,121066,121068],{"class":97,"line":15},[95,121067,121060],{"class":1945},[95,121069,121070],{"class":210}," lbm-nouveau\n",[95,121072,121073,121075,121078,121081],{"class":97,"line":1161},[95,121074,115907],{"class":1945},[95,121076,121077],{"class":210}," nouveau",[95,121079,121080],{"class":210}," modeset=",[95,121082,3067],{"class":154},[95,121084,121085,121088,121090],{"class":97,"line":1176},[95,121086,121087],{"class":154},"alias",[95,121089,121077],{"class":210},[95,121091,121092],{"class":210}," off\n",[95,121094,121095,121097,121100],{"class":97,"line":1182},[95,121096,121087],{"class":154},[95,121098,121099],{"class":210}," lbm-nouveau",[95,121101,121092],{"class":210},[10,121103,121104],{},"接着运行下方命令",[86,121106,121108],{"className":118500,"code":121107,"language":118502,"meta":14,"style":14},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[92,121109,121110,121120,121125],{"__ignoreMap":14},[95,121111,121112,121114,121117],{"class":97,"line":98},[95,121113,24561],{"class":1945},[95,121115,121116],{"class":210}," update-initramfs",[95,121118,121119],{"class":154}," -u\n",[95,121121,121122],{"class":97,"line":15},[95,121123,121124],{"class":1945},"或者\n",[95,121126,121127,121129,121132],{"class":97,"line":1161},[95,121128,24561],{"class":1945},[95,121130,121131],{"class":210}," dracut",[95,121133,121134],{"class":154}," --force\n",[10,121136,121137],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[86,121139,121141],{"className":118500,"code":121140,"language":118502,"meta":14,"style":14},"lsmod | grep nouveau\n",[92,121142,121143],{"__ignoreMap":14},[95,121144,121145,121148,121150,121152],{"class":97,"line":98},[95,121146,121147],{"class":1945},"lsmod",[95,121149,25094],{"class":101},[95,121151,30221],{"class":1945},[95,121153,121063],{"class":210},[49,121155,121156],{"start":15},[52,121157,121158],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[86,121160,121162],{"className":118500,"code":121161,"language":118502,"meta":14,"style":14},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[92,121163,121164],{"__ignoreMap":14},[95,121165,121166,121168,121170],{"class":97,"line":98},[95,121167,24561],{"class":1945},[95,121169,118560],{"class":210},[95,121171,121172],{"class":210}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[10,121174,121175],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[86,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",[92,121180,121181,121189,121197,121205,121212,121220,121230,121238],{"__ignoreMap":14},[95,121182,121183,121186],{"class":97,"line":98},[95,121184,121185],{"class":1945},"Section",[95,121187,121188],{"class":210}," \"OutputClass\"\n",[95,121190,121191,121194],{"class":97,"line":15},[95,121192,121193],{"class":1945},"   Identifier",[95,121195,121196],{"class":210}," \"nvidia\"\n",[95,121198,121199,121202],{"class":97,"line":1161},[95,121200,121201],{"class":1945},"   MatchDriver",[95,121203,121204],{"class":210}," \"nvidia-drm\"\n",[95,121206,121207,121210],{"class":97,"line":1176},[95,121208,121209],{"class":1945},"   Driver",[95,121211,121196],{"class":210},[95,121213,121214,121217],{"class":97,"line":1182},[95,121215,121216],{"class":1945},"   Option",[95,121218,121219],{"class":210}," \"AllowEmptyInitialConfiguration\"\n",[95,121221,121222,121224,121227],{"class":97,"line":1196},[95,121223,121216],{"class":1945},[95,121225,121226],{"class":210}," \"PrimaryGPU\"",[95,121228,121229],{"class":210}," \"yes\"\n",[95,121231,121232,121235],{"class":97,"line":1202},[95,121233,121234],{"class":1945},"   ModulePath",[95,121236,121237],{"class":210}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[95,121239,121240],{"class":97,"line":1293},[95,121241,121242],{"class":1945},"EndSection\n",[49,121244,121245],{"start":1161},[52,121246,121247],{},"安装N卡驱动提示错误",[86,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",[92,121252,121253],{"__ignoreMap":14},[95,121254,121255],{"class":97,"line":98},[95,121256,121250],{},[49,121258,121259],{},[52,121260,121261],{},"检查当前运行的内核版本：",[10,121263,121264],{},"运行以下命令以查看你当前正在使用的内核版本：",[86,121266,121268],{"className":117273,"code":121267,"language":117275,"meta":14,"style":14},"uname -r\n",[92,121269,121270],{"__ignoreMap":14},[95,121271,121272,121274],{"class":97,"line":98},[95,121273,70181],{"class":1945},[95,121275,121276],{"class":154}," -r\n",[49,121278,121279],{"start":15},[52,121280,121281],{},"安装内核开发文件：",[10,121283,121284,121285,121288],{},"确保你已经安装了与当前内核版本相匹配的 ",[92,121286,121287],{},"kernel-devel"," 包。运行以下命令来安装：",[86,121290,121292],{"className":117273,"code":121291,"language":117275,"meta":14,"style":14},"sudo dnf install kernel-devel-$(uname -r)\n",[92,121293,121294],{"__ignoreMap":14},[95,121295,121296,121298,121300,121302,121305,121307,121309,121311],{"class":97,"line":98},[95,121297,24561],{"class":1945},[95,121299,26300],{"class":210},[95,121301,23818],{"class":210},[95,121303,121304],{"class":210}," kernel-devel-",[95,121306,25084],{"class":105},[95,121308,70181],{"class":1945},[95,121310,119616],{"class":154},[95,121312,112],{"class":105},[10,121314,121315],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[49,121317,121318],{"start":1161},[52,121319,121320],{},"安装内核源代码（如果需要）：",[10,121322,121323],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[86,121325,121327],{"className":117273,"code":121326,"language":117275,"meta":14,"style":14},"sudo dnf install kernel-headers kernel-source\n",[92,121328,121329],{"__ignoreMap":14},[95,121330,121331,121333,121335,121337,121340],{"class":97,"line":98},[95,121332,24561],{"class":1945},[95,121334,26300],{"class":210},[95,121336,23818],{"class":210},[95,121338,121339],{"class":210}," kernel-headers",[95,121341,121342],{"class":210}," kernel-source\n",[49,121344,121345],{"start":1176},[52,121346,121347],{},"检查安装：",[10,121349,121350,121351,121354],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[92,121352,121353],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[86,121356,121358],{"className":117273,"code":121357,"language":117275,"meta":14,"style":14},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[92,121359,121360],{"__ignoreMap":14},[95,121361,121362,121364],{"class":97,"line":98},[95,121363,26746],{"class":1945},[95,121365,121366],{"class":210}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[10,121368,121369,121370,121373],{},"如果仍然遇到问题，可以通过 ",[92,121371,121372],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5109,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":1161,"text":118487},{"id":118496,"depth":1161,"text":118497},{"id":118696,"depth":15,"text":118697,"children":121384},[121385,121386,121387,121388,121389,121390,121391,121392],{"id":118700,"depth":1161,"text":118701},{"id":118770,"depth":1161,"text":118771},{"id":118859,"depth":1161,"text":118860},{"id":119104,"depth":1161,"text":119105},{"id":119174,"depth":1161,"text":119175},{"id":119241,"depth":1161,"text":119242},{"id":119276,"depth":1161,"text":119277},{"id":119331,"depth":1161,"text":119332},{"id":119382,"depth":15,"text":119383,"children":121394},[121395,121396],{"id":119386,"depth":1161,"text":119387},{"id":119466,"depth":1161,"text":119467},{"id":119652,"depth":15,"text":119653},{"id":119825,"depth":15,"text":119826,"children":121399},[121400,121401,121402,121403,121404],{"id":119829,"depth":1161,"text":119830},{"id":119870,"depth":1161,"text":119871},{"id":120157,"depth":1161,"text":120158},{"id":120531,"depth":1161,"text":120532},{"id":121027,"depth":1161,"text":121028},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118468,"description":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121411,"title":121412,"body":121413,"description":23360,"extension":18,"meta":121753,"navigation":21,"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],[33,121416,121412],{"id":121417},"_4-命令教程长期积累",[49,121419,121420],{},[52,121421,121422],{},"大多数命令",[10,121424,121425],{},"常用 Linux 命令速查：",[86,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",[92,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},[95,121432,121433],{"class":97,"line":98},[95,121434,121435],{"class":164},"# 文件与目录\n",[95,121437,121438,121440],{"class":97,"line":15},[95,121439,26746],{"class":1945},[95,121441,121442],{"class":164},"        # 列出目录内容\n",[95,121444,121445,121447],{"class":97,"line":1161},[95,121446,101253],{"class":154},[95,121448,121449],{"class":164},"        # 切换目录\n",[95,121451,121452,121455],{"class":97,"line":1176},[95,121453,121454],{"class":154},"pwd",[95,121456,121457],{"class":164},"       # 显示当前路径\n",[95,121459,121460,121462],{"class":97,"line":1182},[95,121461,101243],{"class":1945},[95,121463,121464],{"class":164},"     # 创建目录\n",[95,121466,121467,121469],{"class":97,"line":1196},[95,121468,25307],{"class":1945},[95,121470,121471],{"class":164},"        # 删除文件或目录\n",[95,121473,121474,121477],{"class":97,"line":1202},[95,121475,121476],{"class":1945},"cp",[95,121478,121479],{"class":164},"        # 复制文件或目录\n",[95,121481,121482,121485],{"class":97,"line":1293},[95,121483,121484],{"class":1945},"mv",[95,121486,121487],{"class":164},"        # 移动\u002F重命名文件或目录\n",[95,121489,121490,121492],{"class":97,"line":1299},[95,121491,101260],{"class":1945},[95,121493,121494],{"class":164},"     # 创建空文件\n",[95,121496,121497,121499],{"class":97,"line":1311},[95,121498,120742],{"class":1945},[95,121500,121501],{"class":164},"       # 查看文件内容\n",[95,121503,121504,121507],{"class":97,"line":1594},[95,121505,121506],{"class":1945},"head\u002Ftail",[95,121508,121509],{"class":164}," # 查看文件头部\u002F尾部\n",[95,121511,121512],{"class":97,"line":1599},[95,121513,2382],{"emptyLinePlaceholder":21},[95,121515,121516],{"class":97,"line":1605},[95,121517,121518],{"class":164},"# 权限管理\n",[95,121520,121521,121523],{"class":97,"line":1610},[95,121522,24596],{"class":1945},[95,121524,121525],{"class":164},"     # 修改文件权限\n",[95,121527,121528,121531],{"class":97,"line":1624},[95,121529,121530],{"class":1945},"chown",[95,121532,121533],{"class":164},"     # 修改文件所有者\n",[95,121535,121536,121538],{"class":97,"line":1629},[95,121537,24561],{"class":1945},[95,121539,121540],{"class":164},"      # 以管理员身份执行\n",[95,121542,121543],{"class":97,"line":1635},[95,121544,2382],{"emptyLinePlaceholder":21},[95,121546,121547],{"class":97,"line":1656},[95,121548,121549],{"class":164},"# 系统信息\n",[95,121551,121552,121554],{"class":97,"line":1661},[95,121553,70181],{"class":1945},[95,121555,121556],{"class":164},"     # 系统信息\n",[95,121558,121559,121562],{"class":97,"line":1675},[95,121560,121561],{"class":1945},"df",[95,121563,121564],{"class":164},"        # 磁盘使用情况\n",[95,121566,121567,121570],{"class":97,"line":1680},[95,121568,121569],{"class":1945},"free",[95,121571,121572],{"class":164},"      # 内存使用情况\n",[95,121574,121575,121578],{"class":97,"line":1709},[95,121576,121577],{"class":1945},"top\u002Fhtop",[95,121579,121580],{"class":164},"  # 进程监控\n",[95,121582,121583,121586],{"class":97,"line":1714},[95,121584,121585],{"class":1945},"ps",[95,121587,121588],{"class":164},"        # 查看进程\n",[95,121590,121591],{"class":97,"line":1731},[95,121592,2382],{"emptyLinePlaceholder":21},[95,121594,121595],{"class":97,"line":1736},[95,121596,121597],{"class":164},"# 网络\n",[95,121599,121600,121603],{"class":97,"line":1741},[95,121601,121602],{"class":1945},"ping",[95,121604,121605],{"class":164},"      # 测试网络连通性\n",[95,121607,121608,121610],{"class":97,"line":1746},[95,121609,26834],{"class":1945},[95,121611,121612],{"class":164},"      # 发送 HTTP 请求\n",[95,121614,121615,121617],{"class":97,"line":1760},[95,121616,120266],{"class":1945},[95,121618,121619],{"class":164},"      # 下载文件\n",[95,121621,121622,121625],{"class":97,"line":1765},[95,121623,121624],{"class":1945},"ssh",[95,121626,121627],{"class":164},"       # 远程登录\n",[95,121629,121630,121633],{"class":97,"line":2559},[95,121631,121632],{"class":1945},"scp",[95,121634,121635],{"class":164},"       # 远程文件传输\n",[95,121637,121638],{"class":97,"line":2573},[95,121639,2382],{"emptyLinePlaceholder":21},[95,121641,121642],{"class":97,"line":2581},[95,121643,121644],{"class":164},"# 包管理（Debian\u002FUbuntu）\n",[95,121646,121647,121649,121651],{"class":97,"line":2586},[95,121648,117345],{"class":1945},[95,121650,117324],{"class":210},[95,121652,121653],{"class":164},"   # 更新软件源\n",[95,121655,121656,121658,121660],{"class":97,"line":2592},[95,121657,117345],{"class":1945},[95,121659,23818],{"class":210},[95,121661,121662],{"class":164},"  # 安装软件包\n",[95,121664,121665,121667,121669],{"class":97,"line":2598},[95,121666,117345],{"class":1945},[95,121668,26064],{"class":210},[95,121670,121671],{"class":164},"   # 卸载软件包\n",[49,121673,121674],{"start":15},[52,121675,121676],{},"KDE Dolphin 以root打开",[10,121678,121679],{},"kde5",[86,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",[92,121684,121685],{"__ignoreMap":14},[95,121686,121687,121690,121693,121696,121698,121700,121703,121706,121708,121711,121713],{"class":97,"line":98},[95,121688,121689],{"class":1945},"pkexec",[95,121691,121692],{"class":210}," env",[95,121694,121695],{"class":210}," DISPLAY=",[95,121697,28128],{"class":105},[95,121699,28186],{"class":210},[95,121701,121702],{"class":105},"$XAUTHORITY ",[95,121704,121705],{"class":210},"KDE_SESSION_VERSION=",[95,121707,425],{"class":154},[95,121709,121710],{"class":210}," KDE_FULL_SESSION=",[95,121712,1344],{"class":154},[95,121714,121715],{"class":210}," dolphin\n",[10,121717,121718],{},"kde6",[86,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",[92,121723,121724],{"__ignoreMap":14},[95,121725,121726,121728,121730,121732,121734,121736,121738,121740,121742,121744,121746],{"class":97,"line":98},[95,121727,121689],{"class":1945},[95,121729,121692],{"class":210},[95,121731,121695],{"class":210},[95,121733,28128],{"class":105},[95,121735,28186],{"class":210},[95,121737,121702],{"class":105},[95,121739,121705],{"class":210},[95,121741,450],{"class":154},[95,121743,121710],{"class":210},[95,121745,1344],{"class":154},[95,121747,121715],{"class":210},[5109,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":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121759,"title":121760,"body":121761,"description":23360,"extension":18,"meta":121775,"navigation":21,"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],[33,121764,121760],{"id":121765},"_5-各种环境配置",[10,121767,121768],{},[344,121769,121772],{"href":121770,"rel":121771},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23849],"电控组环境搭建大全",{"title":14,"searchDepth":15,"depth":15,"links":121774},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121760,"description":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121781,"title":121782,"body":121783,"description":23360,"extension":18,"meta":122131,"navigation":21,"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],[33,121786,121782],{"id":121787},"_6-拓展功能",[37,121789,121791],{"id":121790},"_61-wine","6.1 Wine",[37,121793,121795],{"id":121794},"_62-android","6.2 Android",[66,121797,121799],{"id":121798},"_621-i卡a卡","6.2.1 I卡、A卡",[49,121801,121802],{},[52,121803,121804],{},"Wayland-Waydroid(体验超级好)",[10,121806,121807,121808],{},"Waydroid 官网与安装指南：",[344,121809,121810],{"href":121810,"rel":121811},"https:\u002F\u002Fwaydro.id\u002F",[23849],[66,121813,121815],{"id":121814},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[49,121817,121818],{},[52,121819,121820,121821,121823,121824,121828,121830,121833,121838,122035],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53693,121822],{},"BlissOS 官网下载：",[344,121825,121826],{"href":121826,"rel":121827},"https:\u002F\u002Fblissos.org\u002F",[23849],[53693,121829],{},[1444,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",[49,121834,121835],{"start":1161},[52,121836,121837],{},"比较推荐的配置",[86,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",[92,121842,121843,121850,121860,121870,121880,121892,121902,121909,121919,121928,121937,121947,121957,121966,121976,121986,121998,122008,122017,122027],{"__ignoreMap":14},[95,121844,121845,121848],{"class":97,"line":98},[95,121846,121847],{"class":1945},"qemu-system-x86_64",[95,121849,24663],{"class":154},[95,121851,121852,121855,121858],{"class":97,"line":15},[95,121853,121854],{"class":154},"        -M",[95,121856,121857],{"class":210}," q35,vmport=off",[95,121859,24663],{"class":154},[95,121861,121862,121865,121868],{"class":97,"line":1161},[95,121863,121864],{"class":154},"        -accel",[95,121866,121867],{"class":210}," kvm",[95,121869,24663],{"class":154},[95,121871,121872,121875,121878],{"class":97,"line":1176},[95,121873,121874],{"class":154},"        -cpu",[95,121876,121877],{"class":210}," qemu64,+sse3,+sse4.2",[95,121879,24663],{"class":154},[95,121881,121882,121885,121888,121890],{"class":97,"line":1182},[95,121883,121884],{"class":154},"        -smp",[95,121886,121887],{"class":210}," 8,cores=",[95,121889,399],{"class":154},[95,121891,24663],{"class":154},[95,121893,121894,121897,121900],{"class":97,"line":1196},[95,121895,121896],{"class":154},"        -m",[95,121898,121899],{"class":210}," 6G",[95,121901,24663],{"class":154},[95,121903,121904,121907],{"class":97,"line":1202},[95,121905,121906],{"class":154},"        -usb",[95,121908,24663],{"class":154},[95,121910,121911,121914,121917],{"class":97,"line":1293},[95,121912,121913],{"class":154},"        -device",[95,121915,121916],{"class":210}," virtio-tablet",[95,121918,24663],{"class":154},[95,121920,121921,121923,121926],{"class":97,"line":1299},[95,121922,121913],{"class":154},[95,121924,121925],{"class":210}," virtio-keyboard",[95,121927,24663],{"class":154},[95,121929,121930,121932,121935],{"class":97,"line":1311},[95,121931,121913],{"class":154},[95,121933,121934],{"class":210}," usb-tablet",[95,121936,24663],{"class":154},[95,121938,121939,121942,121945],{"class":97,"line":1594},[95,121940,121941],{"class":154},"        -bios",[95,121943,121944],{"class":210}," OVMF-pure-efi64.fd",[95,121946,24663],{"class":154},[95,121948,121949,121952,121955],{"class":97,"line":1599},[95,121950,121951],{"class":154},"        -net",[95,121953,121954],{"class":210}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[95,121956,24663],{"class":154},[95,121958,121959,121961,121964],{"class":97,"line":1605},[95,121960,121951],{"class":154},[95,121962,121963],{"class":210}," nic,model=virtio",[95,121965,24663],{"class":154},[95,121967,121968,121971,121974],{"class":97,"line":1610},[95,121969,121970],{"class":154},"        -audio",[95,121972,121973],{"class":210}," sdl,model=hda",[95,121975,24663],{"class":154},[95,121977,121978,121981,121984],{"class":97,"line":1624},[95,121979,121980],{"class":154},"        -display",[95,121982,121983],{"class":210}," sdl,gl=on,show-cursor=on",[95,121985,24663],{"class":154},[95,121987,121988,121990,121993,121996],{"class":97,"line":1629},[95,121989,121913],{"class":154},[95,121991,121992],{"class":210}," virtio-vga-gl,xres=1920,yres=",[95,121994,121995],{"class":154},"1080",[95,121997,24663],{"class":154},[95,121999,122000,122003,122006],{"class":97,"line":1635},[95,122001,122002],{"class":154},"        -drive",[95,122004,122005],{"class":210}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[95,122007,24663],{"class":154},[95,122009,122010,122012,122015],{"class":97,"line":1656},[95,122011,122002],{"class":154},[95,122013,122014],{"class":210}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[95,122016,24663],{"class":154},[95,122018,122019,122022,122025],{"class":97,"line":1661},[95,122020,122021],{"class":154},"        -monitor",[95,122023,122024],{"class":210}," stdio",[95,122026,24663],{"class":154},[95,122028,122029,122032],{"class":97,"line":1675},[95,122030,122031],{"class":154},"        -serial",[95,122033,122034],{"class":210}," none\n",[49,122036,122037],{"start":1182},[52,122038,122039,122040],{},"常用操作：",[49,122041,122042,122045,122101],{},[52,122043,122044],{},"全屏：Ctrl+Alt+F",[52,122046,122047,122048,122053],{},"adb调试",[49,122049,122050],{},[52,122051,122052],{},"使Linux与Android用ADB连接。",[86,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",[92,122057,122058,122063,122074,122079,122091,122096],{"__ignoreMap":14},[95,122059,122060],{"class":97,"line":98},[95,122061,122062],{"class":164},"# 连接安卓\n",[95,122064,122065,122068,122071],{"class":97,"line":15},[95,122066,122067],{"class":1945},"adb",[95,122069,122070],{"class":210}," connect",[95,122072,122073],{"class":154}," 127.0.0.1\n",[95,122075,122076],{"class":97,"line":1161},[95,122077,122078],{"class":164},"# 打开shell\n",[95,122080,122081,122083,122085,122088],{"class":97,"line":1176},[95,122082,122067],{"class":1945},[95,122084,26868],{"class":154},[95,122086,122087],{"class":210}," 127.0.0.1:5555",[95,122089,122090],{"class":210}," shell\n",[95,122092,122093],{"class":97,"line":1182},[95,122094,122095],{"class":164},"# 使用root权限\n",[95,122097,122098],{"class":97,"line":1196},[95,122099,122100],{"class":1945},"su\n",[52,122102,122103,122104],{},"中文输入法",[49,122105,122106],{},[52,122107,122108],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[37,122110,122112],{"id":122111},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[10,122114,122115,122116],{},"rEFInd 官网与文档：",[344,122117,122118],{"href":122118,"rel":122119},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23849],[5109,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":1161,"text":121799},{"id":121814,"depth":1161,"text":121815},{"id":122111,"depth":15,"text":122112},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121782,"description":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122137,"title":122138,"body":122139,"description":23360,"extension":18,"meta":125438,"navigation":21,"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],[33,122142,122138],{"id":122143},"_7-其他操作",[37,122145,122147],{"id":122146},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[10,122149,122150],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[10,122152,122153,122154,122157],{},"进入工控机的硬盘目录，进入",[92,122155,122156],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[86,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",[92,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},[95,122166,122167,122170],{"class":97,"line":98},[95,122168,122169],{"class":51277},"network",[95,122171,122172],{"class":105},": \n",[95,122174,122175,122178,122180,122182],{"class":97,"line":15},[95,122176,122177],{"class":51277},"  version",[95,122179,51414],{"class":105},[95,122181,183],{"class":154},[95,122183,2656],{"class":105},[95,122185,122186,122189],{"class":97,"line":1161},[95,122187,122188],{"class":51277},"  wifis",[95,122190,122172],{"class":105},[95,122192,122193,122196],{"class":97,"line":1176},[95,122194,122195],{"class":51277},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[95,122197,122172],{"class":105},[95,122199,122200,122203,122205,122208],{"class":97,"line":1182},[95,122201,122202],{"class":51277},"      renderer",[95,122204,51414],{"class":105},[95,122206,122207],{"class":210},"NetworkManager",[95,122209,2656],{"class":105},[95,122211,122212,122215],{"class":97,"line":1196},[95,122213,122214],{"class":51277},"      match",[95,122216,122172],{"class":105},[95,122218,122219,122222,122224,122227],{"class":97,"line":1202},[95,122220,122221],{"class":51277},"        name",[95,122223,51414],{"class":105},[95,122225,122226],{"class":210},"\"wlan0\"",[95,122228,2656],{"class":105},[95,122230,122231,122234,122236,122238],{"class":97,"line":1293},[95,122232,122233],{"class":51277},"      dhcp4",[95,122235,51414],{"class":105},[95,122237,1344],{"class":154},[95,122239,2656],{"class":105},[95,122241,122242,122245,122247,122249],{"class":97,"line":1299},[95,122243,122244],{"class":51277},"      dhcp6",[95,122246,51414],{"class":105},[95,122248,1344],{"class":154},[95,122250,2656],{"class":105},[95,122252,122253,122256],{"class":97,"line":1311},[95,122254,122255],{"class":51277},"      access-points",[95,122257,122172],{"class":105},[95,122259,122260,122263],{"class":97,"line":1594},[95,122261,122262],{"class":210},"        \"EMIS_Vinci_Robocon_5G\"",[95,122264,122172],{"class":105},[95,122266,122267,122270],{"class":97,"line":1599},[95,122268,122269],{"class":51277},"          auth",[95,122271,122172],{"class":105},[95,122273,122274,122277,122279,122282],{"class":97,"line":1605},[95,122275,122276],{"class":51277},"            key-management",[95,122278,51414],{"class":105},[95,122280,122281],{"class":210},"\"psk\"",[95,122283,2656],{"class":105},[95,122285,122286,122289,122291,122294],{"class":97,"line":1610},[95,122287,122288],{"class":51277},"            password",[95,122290,51414],{"class":105},[95,122292,122293],{"class":210},"\"vinci666\"",[95,122295,2656],{"class":105},[95,122297,122298,122301],{"class":97,"line":1624},[95,122299,122300],{"class":51277},"          networkmanager",[95,122302,122172],{"class":105},[95,122304,122305,122308,122310,122313],{"class":97,"line":1629},[95,122306,122307],{"class":51277},"            uuid",[95,122309,51414],{"class":105},[95,122311,122312],{"class":210},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[95,122314,2656],{"class":105},[95,122316,122317,122320,122322,122325],{"class":97,"line":1635},[95,122318,122319],{"class":51277},"            name",[95,122321,51414],{"class":105},[95,122323,122324],{"class":210},"\"EMIS_Vinci_Robocon_5G\"",[95,122326,2656],{"class":105},[95,122328,122329,122332],{"class":97,"line":1656},[95,122330,122331],{"class":51277},"            passthrough",[95,122333,122172],{"class":105},[95,122335,122336,122339,122341,122344],{"class":97,"line":1661},[95,122337,122338],{"class":51277},"              wifi-security.auth-alg",[95,122340,51414],{"class":105},[95,122342,122343],{"class":210},"\"open\"",[95,122345,2656],{"class":105},[95,122347,122348,122351,122353,122356],{"class":97,"line":1675},[95,122349,122350],{"class":51277},"              ipv6.addr-gen-mode",[95,122352,51414],{"class":105},[95,122354,122355],{"class":210},"\"default\"",[95,122357,2656],{"class":105},[95,122359,122360,122363,122365,122368],{"class":97,"line":1680},[95,122361,122362],{"class":51277},"              ipv6.ip6-privacy",[95,122364,51414],{"class":105},[95,122366,122367],{"class":210},"\"-1\"",[95,122369,2656],{"class":105},[95,122371,122372,122375,122377,122379],{"class":97,"line":1709},[95,122373,122374],{"class":51277},"              proxy._",[95,122376,51414],{"class":105},[95,122378,7635],{"class":210},[95,122380,2656],{"class":105},[95,122382,122383,122386],{"class":97,"line":1714},[95,122384,122385],{"class":51277},"      networkmanager",[95,122387,122172],{"class":105},[95,122389,122390,122393,122395,122397],{"class":97,"line":1731},[95,122391,122392],{"class":51277},"        uuid",[95,122394,51414],{"class":105},[95,122396,122312],{"class":210},[95,122398,2656],{"class":105},[95,122400,122401,122403,122405],{"class":97,"line":1736},[95,122402,122221],{"class":51277},[95,122404,51414],{"class":105},[95,122406,122407],{"class":210},"\"EMIS_Vinci_Robocon_5G\"\n",[10,122409,122410],{},"将其改为新wifi的名和密码：",[86,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",[92,122415,122416,122422,122431,122437,122444,122453,122461,122467,122473],{"__ignoreMap":14},[95,122417,122418,122420],{"class":97,"line":98},[95,122419,122169],{"class":51277},[95,122421,3721],{"class":105},[95,122423,122424,122426,122428],{"class":97,"line":15},[95,122425,122177],{"class":51277},[95,122427,51414],{"class":105},[95,122429,122430],{"class":154},"2\n",[95,122432,122433,122435],{"class":97,"line":1161},[95,122434,122188],{"class":51277},[95,122436,3721],{"class":105},[95,122438,122439,122442],{"class":97,"line":1176},[95,122440,122441],{"class":51277},"    wlan0",[95,122443,3721],{"class":105},[95,122445,122446,122448,122450],{"class":97,"line":1182},[95,122447,122233],{"class":51277},[95,122449,51414],{"class":105},[95,122451,122452],{"class":154},"true\n",[95,122454,122455,122457,122459],{"class":97,"line":1196},[95,122456,122244],{"class":51277},[95,122458,51414],{"class":105},[95,122460,122452],{"class":154},[95,122462,122463,122465],{"class":97,"line":1202},[95,122464,122255],{"class":51277},[95,122466,3721],{"class":105},[95,122468,122469,122471],{"class":97,"line":1293},[95,122470,122262],{"class":210},[95,122472,3721],{"class":105},[95,122474,122475,122478,122480],{"class":97,"line":1299},[95,122476,122477],{"class":51277},"          password",[95,122479,51414],{"class":105},[95,122481,122482],{"class":210},"\"vinci666\"\n",[10,122484,122485],{},"工控机开机即可连上网。",[37,122487,122489],{"id":122488},"_72-ssh远程开发","7.2 SSH远程开发",[66,122491,122493],{"id":122492},"_721-环境准备","7.2.1 环境准备",[10,122495,122496],{},[255,122497,122498],{},"1.硬件准备",[10,122500,122501],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[10,122503,122504],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[10,122506,122507],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[10,122509,122510],{},[255,122511,122512],{},"2.设置固定IP",[10,122514,122515],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[10,122517,122518],{},"1.进入设置界面",[10,122520,122521],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[10,122523,122524],{},[1444,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",[10,122528,122529],{},"2.配置所连接的网络",[10,122531,122532],{},[1444,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",[10,122536,122537],{},"3.设置固定IP",[10,122539,122540],{},"查看当前IP地址。",[10,122542,122543],{},[1444,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",[10,122547,122548],{},"设置固定IP。",[10,122550,122551],{},[1444,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",[10,122555,122556],{},"至此，IP配置完毕。",[66,122558,122560],{"id":122559},"_722-环境搭建","7.2.2 环境搭建",[10,122562,122563],{},[255,122564,25738],{},[10,122566,122567],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[10,122569,122570],{},[255,122571,122572],{},"实现",[10,122574,122575],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[49,122577,122578,122581,122584,122587],{},[52,122579,122580],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[52,122582,122583],{},"远程主机启动SSH服务；",[52,122585,122586],{},"本地主机登陆远程主机；",[52,122588,122589],{},"实现数据传输。",[10,122591,122592],{},"1.安装SSH客户端与服务端",[10,122594,122595],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[86,122597,122599],{"className":120793,"code":122598,"language":120795,"meta":120796,"style":14}," sudo apt install openssh-server\n",[92,122600,122601],{"__ignoreMap":14},[95,122602,122603],{"class":97,"line":98},[95,122604,122598],{},[10,122606,122607],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[86,122609,122611],{"className":120793,"code":122610,"language":120795,"meta":120796,"style":14},"sudo apt install openssh-client\n",[92,122612,122613],{"__ignoreMap":14},[95,122614,122615],{"class":97,"line":98},[95,122616,122610],{},[10,122618,122619],{},"2.远程主机启动SSH服务",[10,122621,122622],{},"远程主机启动 ssh 服务命令如下：",[86,122624,122626],{"className":120793,"code":122625,"language":120795,"meta":120796,"style":14},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[92,122627,122628],{"__ignoreMap":14},[95,122629,122630],{"class":97,"line":98},[95,122631,122625],{},[10,122633,122634],{},"启动后可使用如下命令查看服务是否正常运行：",[86,122636,122638],{"className":120793,"code":122637,"language":120795,"meta":120796,"style":14},"ps -e | grep ssh\n",[92,122639,122640],{"__ignoreMap":14},[95,122641,122642],{"class":97,"line":98},[95,122643,122637],{},[10,122645,122646],{},"如果启动成功，会包含 sshd 程序。",[10,122648,122649],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[86,122651,122653],{"className":120793,"code":122652,"language":120795,"meta":120796,"style":14},"sudo systemctl enable ssh\n",[92,122654,122655],{"__ignoreMap":14},[95,122656,122657],{"class":97,"line":98},[95,122658,122652],{},[10,122660,122661],{},"3.本地远程登录",[10,122663,122664],{},"登录远程主机可以调用如下命令:",[86,122666,122668],{"className":117273,"code":122667,"language":117275,"meta":14,"style":14},"ssh -X 用户名@ip地址\n",[92,122669,122670],{"__ignoreMap":14},[95,122671,122672,122674,122677],{"class":97,"line":98},[95,122673,121624],{"class":1945},[95,122675,122676],{"class":154}," -X",[95,122678,122679],{"class":210}," 用户名@ip地址\n",[10,122681,122682],{},"然后根据提示，录入登陆密码，即可成功登录。",[10,122684,122685],{},"如果退出，可以调用exit命令：",[86,122687,122689],{"className":120793,"code":122688,"language":120795,"meta":120796,"style":14},"exit\n",[92,122690,122691],{"__ignoreMap":14},[95,122692,122693],{"class":97,"line":98},[95,122694,122688],{},[10,122696,122697],{},[255,122698,122699],{},"4.实现数据传输",[10,122701,122702],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[10,122704,122705],{},"上传文件指令格式如下：",[86,122707,122709],{"className":120793,"code":122708,"language":120795,"meta":120796,"style":14},"scp 本地文件路径 账号@ip:路径\n",[92,122710,122711],{"__ignoreMap":14},[95,122712,122713],{"class":97,"line":98},[95,122714,122708],{},[10,122716,122717],{},"上传文件夹指令格式如下：",[86,122719,122721],{"className":120793,"code":122720,"language":120795,"meta":120796,"style":14},"scp -r 本地文件夹路径 账号@ip:路径\n",[92,122722,122723],{"__ignoreMap":14},[95,122724,122725],{"class":97,"line":98},[95,122726,122720],{},[10,122728,122729],{},"下载文件指令格式如下：",[86,122731,122733],{"className":120793,"code":122732,"language":120795,"meta":120796,"style":14},"scp 账号@ip:路径 本地文件夹路径\n",[92,122734,122735],{"__ignoreMap":14},[95,122736,122737],{"class":97,"line":98},[95,122738,122732],{},[10,122740,122741],{},"下载文件夹指令格式如下：",[86,122743,122745],{"className":120793,"code":122744,"language":120795,"meta":120796,"style":14},"scp -r 账号@ip:路径 本地文件夹路径\n",[92,122746,122747],{"__ignoreMap":14},[95,122748,122749],{"class":97,"line":98},[95,122750,122744],{},[10,122752,122753],{},[255,122754,122755],{},"优化",[10,122757,122758],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[49,122760,122761,122764],{},[52,122762,122763],{},"本地生成密钥对；",[52,122765,122766],{},"将公钥上传至远程主机。",[10,122768,122769],{},[255,122770,122771],{},"1.生成密钥对",[10,122773,122774],{},"本地客户端生成公私钥：（一路回车默认即可）",[86,122776,122778],{"className":120793,"code":122777,"language":120795,"meta":120796,"style":14},"ssh-keygen\n",[92,122779,122780],{"__ignoreMap":14},[95,122781,122782],{"class":97,"line":98},[95,122783,122777],{},[10,122785,122786],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[49,122788,122789,122792],{},[52,122790,122791],{},"id_rsa （私钥）；",[52,122793,122794],{},"id_rsa.pub (公钥)。",[10,122796,122797],{},[255,122798,122799],{},"2.公钥上传",[10,122801,122802],{},"上传指令如下：",[86,122804,122806],{"className":120793,"code":122805,"language":120795,"meta":120796,"style":14},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[92,122807,122808],{"__ignoreMap":14},[95,122809,122810],{"class":97,"line":98},[95,122811,122805],{},[10,122813,122814],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[10,122816,122817],{},"以后再远程登录就无需录入密码了。",[66,122819,122821],{"id":122820},"_723-使用vscode优化","7.2.3 使用VScode优化",[10,122823,122824],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[10,122826,122827],{},[255,122828,122829],{},"1.准备工作",[10,122831,122832],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[10,122834,122835],{},[255,122836,122837],{},"2.为VScode安装远程开发插件",[10,122839,122840,122841,122844,122845,122848,122849,28370],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[92,122842,122843],{},"扩展：商店","的搜索栏输入",[92,122846,122847],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[92,122850,122851],{},"安装",[10,122853,122854],{},[1444,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",[10,122858,122859],{},[255,122860,122861],{},"3.配置远程连接",[10,122863,122864,122865,122868,122869,122872],{},"步骤1：使用快捷键",[92,122866,122867],{},"ctrl + shift + p","打开命令输入窗口，并输入",[92,122870,122871],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[10,122874,122875],{},[1444,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",[10,122879,122880,122881,28370],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[92,122882,122883],{},"Add New SSH Host",[10,122885,122886],{},[1444,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",[10,122890,122891,122892,122895,122896,122899,122900,122903],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[92,122893,122894],{},"ssh +X ubuntu@192.168.43.164","，其中，",[92,122897,122898],{},"ubuntu","需要替换为你的登录用户名，",[92,122901,122902],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[10,122905,122906],{},[1444,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",[10,122910,122911],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[10,122913,122914],{},[1444,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",[10,122918,122919],{},[1444,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",[10,122923,122924],{},[255,122925,122926],{},"4.使用",[10,122928,122929,122930,122868,122932,122934],{},"步骤1：继续使用快捷键",[92,122931,122867],{},[92,122933,122871],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[10,122936,122937],{},[1444,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",[10,122941,122942,122943,122946],{},"或者，也可以点击侧边栏的",[92,122944,122945],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[10,122948,122949],{},[1444,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",[10,122953,122954,122955,122958,122959,122962],{},"步骤2：选择菜单栏的",[92,122956,122957],{},"文件","下的",[92,122960,122961],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[10,122964,122965],{},[1444,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",[10,122969,122970],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[37,122972,122974],{"id":122973},"_73-远程桌面","7.3 远程桌面",[10,122976,122977],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[10,122979,122980],{},"我们选择使用VNC来看。",[49,122982,122983],{},[52,122984,122985],{},"安装VNC服务器：",[10,122987,122988],{},"这里以TigerVNC为例进行安装：",[86,122990,122992],{"className":117273,"code":122991,"language":117275,"meta":14,"style":14},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[92,122993,122994],{"__ignoreMap":14},[95,122995,122996,122998,123000,123002,123005],{"class":97,"line":98},[95,122997,24561],{"class":1945},[95,122999,117294],{"class":210},[95,123001,23818],{"class":210},[95,123003,123004],{"class":210}," tigervnc-standalone-server",[95,123006,123007],{"class":210}," tigervnc-common\n",[49,123009,123010],{"start":15},[52,123011,123012],{},"设置VNC密码：",[10,123014,123015],{},"为VNC用户设置密码，运行以下命令：",[86,123017,123019],{"className":117273,"code":123018,"language":117275,"meta":14,"style":14},"vncpasswd\n",[92,123020,123021],{"__ignoreMap":14},[95,123022,123023],{"class":97,"line":98},[95,123024,123018],{"class":1945},[49,123026,123027],{"start":1161},[52,123028,123029],{},"配置VNC启动脚本:",[10,123031,123032],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[86,123034,123036],{"className":117273,"code":123035,"language":117275,"meta":14,"style":14},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[92,123037,123038,123047],{"__ignoreMap":14},[95,123039,123040,123042,123044],{"class":97,"line":98},[95,123041,101243],{"class":1945},[95,123043,29201],{"class":154},[95,123045,123046],{"class":210}," ~\u002F.vnc\n",[95,123048,123049,123052],{"class":97,"line":15},[95,123050,123051],{"class":1945},"nano",[95,123053,123054],{"class":210}," ~\u002F.vnc\u002Fxstartup\n",[10,123056,123057],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[86,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",[92,123062,123063,123068,123076,123083],{"__ignoreMap":14},[95,123064,123065],{"class":97,"line":98},[95,123066,123067],{"class":164},"#!\u002Fbin\u002Fsh\n",[95,123069,123070,123073],{"class":97,"line":15},[95,123071,123072],{"class":154},"unset",[95,123074,123075],{"class":210}," SESSION_MANAGER\n",[95,123077,123078,123080],{"class":97,"line":1161},[95,123079,123072],{"class":154},[95,123081,123082],{"class":210}," DBUS_SESSION_BUS_ADDRESS\n",[95,123084,123085],{"class":97,"line":1176},[95,123086,123087],{"class":1945},"gnome-session\n",[10,123089,123090],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[49,123092,123093],{"start":1176},[52,123094,123095],{},"给予执行权限：",[10,123097,123098],{},"为xstartup文件设置执行权限：",[86,123100,123102],{"className":117273,"code":123101,"language":117275,"meta":14,"style":14},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[92,123103,123104],{"__ignoreMap":14},[95,123105,123106,123108,123111],{"class":97,"line":98},[95,123107,24596],{"class":1945},[95,123109,123110],{"class":210}," +x",[95,123112,123054],{"class":210},[49,123114,123115],{"start":1182},[52,123116,123117],{},"启动VNC服务器：",[86,123119,123121],{"className":117273,"code":123120,"language":117275,"meta":14,"style":14},"vncserver -geometry 1920x1080 -localhost=0\n",[92,123122,123123],{"__ignoreMap":14},[95,123124,123125,123128,123131,123134],{"class":97,"line":98},[95,123126,123127],{"class":1945},"vncserver",[95,123129,123130],{"class":154}," -geometry",[95,123132,123133],{"class":210}," 1920x1080",[95,123135,123136],{"class":154}," -localhost=0\n",[10,123138,123139],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[10,123141,123142],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[49,123144,123145],{"start":1196},[52,123146,123147],{},"查看已开启的VNC服务器：",[86,123149,123151],{"className":117273,"code":123150,"language":117275,"meta":14,"style":14},"vncserver -list\n",[92,123152,123153],{"__ignoreMap":14},[95,123154,123155,123157],{"class":97,"line":98},[95,123156,123127],{"class":1945},[95,123158,123159],{"class":154}," -list\n",[10,123161,123162],{},[1444,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",[49,123166,123167],{"start":1202},[52,123168,123169],{},"连接到VNC服务器：",[10,123171,123172],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[49,123174,123175],{"start":1293},[52,123176,123177],{},"停止VNC服务器：",[10,123179,123180],{},"如果需要停止VNC服务器，可以使用以下命令：",[86,123182,123184],{"className":117273,"code":123183,"language":117275,"meta":14,"style":14},"vncserver -kill :1\n",[92,123185,123186],{"__ignoreMap":14},[95,123187,123188,123190,123193],{"class":97,"line":98},[95,123189,123127],{"class":1945},[95,123191,123192],{"class":154}," -kill",[95,123194,123195],{"class":210}," :1\n",[10,123197,123198],{},"将:1替换为你实际使用的显示编号。",[10,123200,123201],{},[1444,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",[10,123205,123206],{},[1444,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",[37,123210,123212],{"id":123211},"_74-usb端口设置","7.4 USB端口设置",[10,123214,123215],{},[255,123216,123217],{},"首先先配置好权限",[86,123219,123221],{"className":117273,"code":123220,"language":117275,"meta":14,"style":14},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[92,123222,123223,123228,123241,123248,123253],{"__ignoreMap":14},[95,123224,123225],{"class":97,"line":98},[95,123226,123227],{"class":164},"# 将用户权限提高\n",[95,123229,123230,123232,123234,123236,123239],{"class":97,"line":15},[95,123231,24561],{"class":1945},[95,123233,26559],{"class":210},[95,123235,26562],{"class":154},[95,123237,123238],{"class":210}," dialout",[95,123240,26567],{"class":105},[95,123242,123243,123245],{"class":97,"line":1161},[95,123244,26586],{"class":1945},[95,123246,123247],{"class":210}," dialout\n",[95,123249,123250],{"class":97,"line":1176},[95,123251,123252],{"class":164},"# 查看下面命令是否输出dialout（若输出才正常）\n",[95,123254,123255],{"class":97,"line":1182},[95,123256,123257],{"class":1945},"groups\n",[10,123259,123260],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[66,123262,123264],{"id":123263},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[10,123266,123267,123270],{},[255,123268,123269],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[10,123272,123273,123276],{},[255,123274,123275],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[10,123278,123279],{},[255,123280,123281],{},"流程如下：",[10,123283,123284],{},"（1）.查找设备idVendor和idProduct",[10,123286,123287,123288,123291],{},"接入两个USB设备，在终端调用指令",[92,123289,123290],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[10,123293,123294],{},[1444,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",[10,123298,123299,123300,123303],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[92,123301,123302],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[10,123305,123306],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[10,123308,123309],{},"（2）.编写映射规则",[10,123311,123312,123313,123316],{},"在",[92,123314,123315],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[86,123318,123320],{"className":117273,"code":123319,"language":117275,"meta":14,"style":14},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[92,123321,123322],{"__ignoreMap":14},[95,123323,123324,123326,123328],{"class":97,"line":98},[95,123325,24561],{"class":1945},[95,123327,118560],{"class":210},[95,123329,123330],{"class":210}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[10,123332,123333],{},"输入如下内容：",[86,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",[92,123338,123339,123369],{"__ignoreMap":14},[95,123340,123341,123344,123346,123349,123352,123355,123358,123360,123363,123366],{"class":97,"line":98},[95,123342,123343],{"class":105},"KERNEL",[95,123345,151],{"class":101},[95,123347,123348],{"class":210},"=\"ttyUSB*\",",[95,123350,123351],{"class":1945}," ATTRS",[95,123353,123354],{"class":210},"{idVendor}==",[95,123356,123357],{"class":1945},"\"10c4\"",[95,123359,484],{"class":1945},[95,123361,123362],{"class":210}," ATTRS{idProduct}==\"ea60\",",[95,123364,123365],{"class":210}," MODE:=\"0777\",",[95,123367,123368],{"class":210}," SYMLINK+=\"mylidar\"\n",[95,123370,123371,123373,123375,123377,123379,123381,123384,123386,123389,123391],{"class":97,"line":15},[95,123372,123343],{"class":105},[95,123374,151],{"class":101},[95,123376,123348],{"class":210},[95,123378,123351],{"class":1945},[95,123380,123354],{"class":210},[95,123382,123383],{"class":1945},"\"1a86\"",[95,123385,484],{"class":1945},[95,123387,123388],{"class":210}," ATTRS{idProduct}==\"7523\",",[95,123390,123365],{"class":210},[95,123392,123393],{"class":210}," SYMLINK+=\"mycar\"\n",[10,123395,123396],{},"代码解释：",[1113,123398,123399,123402,123405,123408],{},[52,123400,123401],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[52,123403,123404],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[52,123406,123407],{},"SYMLINK是符号连接，即绑定的别名；",[52,123409,123410],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[10,123412,123413,123414,123417,123420],{},"***小提示：***",[23537,123415,123416],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[92,123418,123419],{},"\u002Fetc\u002Fudev\u002Frule.d",[23537,123421,123422],{},"目录即可。",[10,123424,123425],{},"表格 还在加载中，请等待加载完成后再尝试复制",[10,123427,123428],{},"（3）.使规则生效",[10,123430,123431],{},"在终端下输入如下指令：",[86,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",[92,123436,123437,123442,123454,123465,123469,123474,123487],{"__ignoreMap":14},[95,123438,123439],{"class":97,"line":98},[95,123440,123441],{"class":164},"# Ubuntu用下方命令\n",[95,123443,123444,123446,123448,123451],{"class":97,"line":15},[95,123445,24561],{"class":1945},[95,123447,120025],{"class":210},[95,123449,123450],{"class":210}," udev",[95,123452,123453],{"class":210}," reload\n",[95,123455,123456,123458,123460,123462],{"class":97,"line":1161},[95,123457,24561],{"class":1945},[95,123459,120025],{"class":210},[95,123461,123450],{"class":210},[95,123463,123464],{"class":210}," restart\n",[95,123466,123467],{"class":97,"line":1176},[95,123468,2382],{"emptyLinePlaceholder":21},[95,123470,123471],{"class":97,"line":1182},[95,123472,123473],{"class":164},"#Fedora用下方命令\n",[95,123475,123476,123478,123481,123484],{"class":97,"line":1196},[95,123477,24561],{"class":1945},[95,123479,123480],{"class":210}," udevadm",[95,123482,123483],{"class":210}," control",[95,123485,123486],{"class":154}," --reload\n",[95,123488,123489,123491,123493],{"class":97,"line":1202},[95,123490,24561],{"class":1945},[95,123492,123480],{"class":210},[95,123494,123495],{"class":210}," trigger\n",[10,123497,123498],{},"再重新插拔设备即可。",[10,123500,123501],{},"（4）.测试",[10,123503,123504],{},"终端下输入如下指令",[86,123506,123508],{"className":117273,"code":123507,"language":117275,"meta":14,"style":14},"ll \u002Fdev | grep ttyUSB\n",[92,123509,123510],{"__ignoreMap":14},[95,123511,123512,123515,123518,123520,123522],{"class":97,"line":98},[95,123513,123514],{"class":1945},"ll",[95,123516,123517],{"class":210}," \u002Fdev",[95,123519,25094],{"class":101},[95,123521,30221],{"class":1945},[95,123523,123524],{"class":210}," ttyUSB\n",[10,123526,123527],{},"运行结果如下：",[10,123529,123530],{},[1444,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",[10,123534,123535,123536,123539],{},"也可以多次插拔USB设备，会发现设备端口",[92,123537,123538],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[10,123541,123542],{},[255,123543,117941],{},[10,123545,123546],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[66,123548,123550],{"id":123549},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[10,123552,123553,123555],{},[255,123554,123269],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[10,123557,123558,123560],{},[255,123559,123275],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[10,123562,123563],{},[255,123564,123281],{},[10,123566,123567],{},"（1）.查看所连接的主机USB接口的KERNELS",[10,123569,123570],{},"调用如下指令查看第一台雷达的USB信息：",[86,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",[92,123575,123576,123596],{"__ignoreMap":14},[95,123577,123578,123581,123583,123586,123589,123591,123593],{"class":97,"line":98},[95,123579,123580],{"class":1945},"udevadm",[95,123582,69798],{"class":210},[95,123584,123585],{"class":154}," --attribute-walk",[95,123587,123588],{"class":154}," --name=\u002Fdev\u002FttyUSB0",[95,123590,25094],{"class":101},[95,123592,30221],{"class":1945},[95,123594,123595],{"class":210}," KERNELS\n",[95,123597,123598,123600,123602,123604,123607,123609,123611],{"class":97,"line":15},[95,123599,123580],{"class":1945},[95,123601,69798],{"class":210},[95,123603,123585],{"class":154},[95,123605,123606],{"class":154}," --name=\u002Fdev\u002FttyACM0",[95,123608,25094],{"class":101},[95,123610,30221],{"class":1945},[95,123612,123595],{"class":210},[10,123614,123615],{},[1444,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",[10,123619,123620],{},"调用如下指令查看第二台雷达的USB信息：",[86,123622,123624],{"className":117273,"code":123623,"language":117275,"meta":14,"style":14},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[92,123625,123626],{"__ignoreMap":14},[95,123627,123628,123630,123632,123634,123637,123639,123641],{"class":97,"line":98},[95,123629,123580],{"class":1945},[95,123631,69798],{"class":210},[95,123633,123585],{"class":154},[95,123635,123636],{"class":154}," --name=\u002Fdev\u002FttyUSB1",[95,123638,25094],{"class":101},[95,123640,30221],{"class":1945},[95,123642,123595],{"class":210},[10,123644,123645,123646,123649,123650,123653,123654,123657],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[92,123647,123648],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[92,123651,123652],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[255,123655,123656],{},"唯一性标识","”。",[10,123659,123309],{},[10,123661,123312,123662,123664],{},[92,123663,123315],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[86,123666,123667],{"className":117273,"code":123319,"language":117275,"meta":14,"style":14},[92,123668,123669],{"__ignoreMap":14},[95,123670,123671,123673,123675],{"class":97,"line":98},[95,123672,24561],{"class":1945},[95,123674,118560],{"class":210},[95,123676,123330],{"class":210},[86,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",[92,123681,123682,123711],{"__ignoreMap":14},[95,123683,123684,123686,123688,123690,123693,123695,123698,123701,123703,123706,123708],{"class":97,"line":98},[95,123685,123343],{"class":105},[95,123687,151],{"class":101},[95,123689,123348],{"class":210},[95,123691,123692],{"class":105}," KERNELS",[95,123694,151],{"class":101},[95,123696,123697],{"class":210},"=\"1-1.3:1.0\",",[95,123699,123700],{"class":1945}," MODE:",[95,123702,151],{"class":210},[95,123704,123705],{"class":1945},"\"0777\"",[95,123707,484],{"class":1945},[95,123709,123710],{"class":210}," SYMLINK+=\"rplidar_front\"\n",[95,123712,123713,123715,123717,123719,123721,123723,123726,123728,123730,123732,123734],{"class":97,"line":15},[95,123714,123343],{"class":105},[95,123716,151],{"class":101},[95,123718,123348],{"class":210},[95,123720,123692],{"class":105},[95,123722,151],{"class":101},[95,123724,123725],{"class":210},"=\"1-1.4:1.0\",",[95,123727,123700],{"class":1945},[95,123729,151],{"class":210},[95,123731,123705],{"class":1945},[95,123733,484],{"class":1945},[95,123735,123736],{"class":210}," SYMLINK+=\"rplidar_back\"\n",[10,123738,123428],{},[10,123740,123431],{},[86,123742,123743],{"className":117273,"code":123434,"language":117275,"meta":14,"style":14},[92,123744,123745,123749,123759,123769,123773,123777,123787],{"__ignoreMap":14},[95,123746,123747],{"class":97,"line":98},[95,123748,123441],{"class":164},[95,123750,123751,123753,123755,123757],{"class":97,"line":15},[95,123752,24561],{"class":1945},[95,123754,120025],{"class":210},[95,123756,123450],{"class":210},[95,123758,123453],{"class":210},[95,123760,123761,123763,123765,123767],{"class":97,"line":1161},[95,123762,24561],{"class":1945},[95,123764,120025],{"class":210},[95,123766,123450],{"class":210},[95,123768,123464],{"class":210},[95,123770,123771],{"class":97,"line":1176},[95,123772,2382],{"emptyLinePlaceholder":21},[95,123774,123775],{"class":97,"line":1182},[95,123776,123473],{"class":164},[95,123778,123779,123781,123783,123785],{"class":97,"line":1196},[95,123780,24561],{"class":1945},[95,123782,123480],{"class":210},[95,123784,123483],{"class":210},[95,123786,123486],{"class":154},[95,123788,123789,123791,123793],{"class":97,"line":1202},[95,123790,24561],{"class":1945},[95,123792,123480],{"class":210},[95,123794,123495],{"class":210},[10,123796,123498],{},[10,123798,123501],{},[10,123800,123504,123801,123804],{},[92,123802,123803],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[10,123806,123807],{},[1444,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",[10,123811,123812],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[10,123814,123815,123817],{},[255,123816,117941],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[66,123819,123821],{"id":123820},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[10,123823,123824],{},"（1）.查看所连接的主机USB接口的信息",[86,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",[92,123829,123830,123860],{"__ignoreMap":14},[95,123831,123832,123834,123836,123839,123841,123843,123845,123847,123850,123853,123855,123858],{"class":97,"line":98},[95,123833,123580],{"class":1945},[95,123835,69798],{"class":210},[95,123837,123838],{"class":154}," -a",[95,123840,29201],{"class":154},[95,123842,28407],{"class":105},[95,123844,123580],{"class":1945},[95,123846,69798],{"class":210},[95,123848,123849],{"class":154}," -q",[95,123851,123852],{"class":210}," path",[95,123854,25100],{"class":154},[95,123856,123857],{"class":210}," \u002Fdev\u002FttyACM0",[95,123859,112],{"class":105},[95,123861,123862,123864,123866,123868,123870,123872,123874,123876,123878,123880,123882,123885],{"class":97,"line":15},[95,123863,123580],{"class":1945},[95,123865,69798],{"class":210},[95,123867,123838],{"class":154},[95,123869,29201],{"class":154},[95,123871,28407],{"class":105},[95,123873,123580],{"class":1945},[95,123875,69798],{"class":210},[95,123877,123849],{"class":154},[95,123879,123852],{"class":210},[95,123881,25100],{"class":154},[95,123883,123884],{"class":210}," \u002Fdev\u002FttyUSB0",[95,123886,112],{"class":105},[10,123888,123889],{},[1444,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",[10,123893,123894],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[10,123896,123309],{},[10,123898,123312,123899,123664],{},[92,123900,123315],{},[86,123902,123903],{"className":117273,"code":123319,"language":117275,"meta":14,"style":14},[92,123904,123905],{"__ignoreMap":14},[95,123906,123907,123909,123911],{"class":97,"line":98},[95,123908,24561],{"class":1945},[95,123910,118560],{"class":210},[95,123912,123330],{"class":210},[86,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",[92,123917,123918,123946,123972],{"__ignoreMap":14},[95,123919,123920,123922,123924,123927,123929,123931,123933,123935,123938,123941,123943],{"class":97,"line":98},[95,123921,123343],{"class":105},[95,123923,151],{"class":101},[95,123925,123926],{"class":210},"=\"ttyACM*\",",[95,123928,123351],{"class":1945},[95,123930,123354],{"class":210},[95,123932,123383],{"class":1945},[95,123934,484],{"class":1945},[95,123936,123937],{"class":210}," ATTRS{idProduct}==\"55d4\",",[95,123939,123940],{"class":210}," ATTRS{serial}==\"0001\",",[95,123942,123365],{"class":210},[95,123944,123945],{"class":210}," SYMLINK+=\"ttyACM_MCU\"\n",[95,123947,123948,123950,123952,123954,123956,123958,123960,123962,123964,123967,123969],{"class":97,"line":15},[95,123949,123343],{"class":105},[95,123951,151],{"class":101},[95,123953,123926],{"class":210},[95,123955,123351],{"class":1945},[95,123957,123354],{"class":210},[95,123959,123383],{"class":1945},[95,123961,484],{"class":1945},[95,123963,123937],{"class":210},[95,123965,123966],{"class":210}," ATTRS{serial}==\"0002\",",[95,123968,123365],{"class":210},[95,123970,123971],{"class":210}," SYMLINK+=\"ttyACM_Lidar\"\n",[95,123973,123974,123976,123978,123980,123982,123984,123986,123988,123990,123992],{"class":97,"line":1161},[95,123975,123343],{"class":105},[95,123977,151],{"class":101},[95,123979,123348],{"class":210},[95,123981,123351],{"class":1945},[95,123983,123354],{"class":210},[95,123985,123383],{"class":1945},[95,123987,484],{"class":1945},[95,123989,123388],{"class":210},[95,123991,123365],{"class":210},[95,123993,123994],{"class":210}," SYMLINK+=\"ttyUSB_IMU\"\n",[10,123996,123428],{},[10,123998,123431],{},[86,124000,124001],{"className":117273,"code":123434,"language":117275,"meta":14,"style":14},[92,124002,124003,124007,124017,124027,124031,124035,124045],{"__ignoreMap":14},[95,124004,124005],{"class":97,"line":98},[95,124006,123441],{"class":164},[95,124008,124009,124011,124013,124015],{"class":97,"line":15},[95,124010,24561],{"class":1945},[95,124012,120025],{"class":210},[95,124014,123450],{"class":210},[95,124016,123453],{"class":210},[95,124018,124019,124021,124023,124025],{"class":97,"line":1161},[95,124020,24561],{"class":1945},[95,124022,120025],{"class":210},[95,124024,123450],{"class":210},[95,124026,123464],{"class":210},[95,124028,124029],{"class":97,"line":1176},[95,124030,2382],{"emptyLinePlaceholder":21},[95,124032,124033],{"class":97,"line":1182},[95,124034,123473],{"class":164},[95,124036,124037,124039,124041,124043],{"class":97,"line":1196},[95,124038,24561],{"class":1945},[95,124040,123480],{"class":210},[95,124042,123483],{"class":210},[95,124044,123486],{"class":154},[95,124046,124047,124049,124051],{"class":97,"line":1202},[95,124048,24561],{"class":1945},[95,124050,123480],{"class":210},[95,124052,123495],{"class":210},[10,124054,124055,124056],{},"再重新插拔设备即可，或者 ",[255,124057,124058],{},"直接重启系统。",[10,124060,123501],{},[10,124062,123504,124063,123804],{},[92,124064,123803],{},[10,124066,124067],{},[1444,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",[10,124071,123812],{},[10,124073,124074,124076],{},[255,124075,117941],{}," 一些设备可能没有串口号等。",[66,124078,124080],{"id":124079},"_744-其他注意事项","7.4.4 其他注意事项",[10,124082,124083,124084,124086,124087,124090,124091,18393,124094,124097,124098,124100],{},"并非所有的USB设备端口号都是",[92,124085,123538],{},"的格式，比如Arduino的端口号可能是",[92,124088,124089],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[92,124092,124093],{},"videon",[92,124095,124096],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[92,124099,124093],{},"端口，绑定时需要关联的也是该接口。",[10,124102,124103,124104,124107,124108,124111,124112,124114,124115,124118,124119,124122,124123,124126,124127,124126,124130,124126,124133,28370],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[92,124105,124106],{},"KERNEL==\"ttyUSB*\"","修改为",[92,124109,124110],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[92,124113,124106],{},"修改为类似于",[92,124116,124117],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[92,124120,124121],{},"video[0,2,4,6]","表示可以绑定的端口为",[92,124124,124125],{},"video0","或",[92,124128,124129],{},"video2",[92,124131,124132],{},"video4",[92,124134,124135],{},"video6",[37,124137,124139],{"id":124138},"_75-挂载内网网页","7.5 挂载内网网页",[10,124141,124142],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[10,124144,124145],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[10,124147,124148],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[10,124150,124151,124152],{},"Termux 下载地址（F-Droid）：",[344,124153,124154],{"href":124154,"rel":124155},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23849],[10,124157,124158],{},"首先打开app后，先更新软件缓存：",[86,124160,124162],{"className":117273,"code":124161,"language":117275,"meta":14,"style":14},"pkg update\n",[92,124163,124164],{"__ignoreMap":14},[95,124165,124166,124169],{"class":97,"line":98},[95,124167,124168],{"class":1945},"pkg",[95,124170,26227],{"class":210},[10,124172,124173],{},"然后换源",[86,124175,124177],{"className":117273,"code":124176,"language":117275,"meta":14,"style":14},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[92,124178,124179],{"__ignoreMap":14},[95,124180,124181,124183,124186],{"class":97,"line":98},[95,124182,123051],{"class":1945},[95,124184,124185],{"class":105}," $PREFIX",[95,124187,124188],{"class":210},"\u002Fetc\u002Fapt\u002Fsources.list\n",[10,124190,124191],{},"将该文件内容替换为下面：",[86,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",[92,124196,124197],{"__ignoreMap":14},[95,124198,124199,124202,124205,124208],{"class":97,"line":98},[95,124200,124201],{"class":1945},"deb",[95,124203,124204],{"class":210}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[95,124206,124207],{"class":210}," stable",[95,124209,124210],{"class":210}," main\n",[1113,124212,124213,124240],{},[52,124214,124215,124216,124218,124219],{},"如果你使用的是",[92,124217,123051],{},"编辑器：",[1113,124220,124221,124228,124234],{},[52,124222,124223,124224,124227],{},"按 ",[92,124225,124226],{},"Ctrl+O"," 保存文件。",[52,124229,124223,124230,124233],{},[92,124231,124232],{},"Enter"," 确认文件名。",[52,124235,124223,124236,124239],{},[92,124237,124238],{},"Ctrl+X"," 退出编辑器。",[52,124241,124215,124242,124218,124245],{},[92,124243,124244],{},"vim",[1113,124246,124247,124253],{},[52,124248,124223,124249,124252],{},[92,124250,124251],{},"Esc"," 退出编辑模式。",[52,124254,124255,124256,124258],{},"输入 ",[92,124257,119198],{}," 保存并退出。",[10,124260,124261],{},"接下来重新更新软件源：",[86,124263,124265],{"className":117273,"code":124264,"language":117275,"meta":14,"style":14},"pkg update && pkg upgrade\n",[92,124266,124267],{"__ignoreMap":14},[95,124268,124269,124271,124273,124275,124277],{"class":97,"line":98},[95,124270,124168],{"class":1945},[95,124272,117324],{"class":210},[95,124274,26175],{"class":105},[95,124276,124168],{"class":1945},[95,124278,117310],{"class":210},[10,124280,124281],{},"安装python：",[86,124283,124285],{"className":117273,"code":124284,"language":117275,"meta":14,"style":14},"pkg install python\n",[92,124286,124287],{"__ignoreMap":14},[95,124288,124289,124291,124293],{"class":97,"line":98},[95,124290,124168],{"class":1945},[95,124292,23818],{"class":210},[95,124294,124295],{"class":210}," python\n",[10,124297,124298,26458],{},[255,124299,124300],{},"通过Termux访问设备存储",[10,124302,124303],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[86,124305,124307],{"className":117273,"code":124306,"language":117275,"meta":14,"style":14},"termux-setup-storage\n",[92,124308,124309],{"__ignoreMap":14},[95,124310,124311],{"class":97,"line":98},[95,124312,124306],{"class":1945},[49,124314,124315],{},[52,124316,124317,26458,124320],{},[255,124318,124319],{},"进入HTML文件所在的目录",[49,124321,124322],{},[52,124323,124324,124325,124327],{},"使用",[92,124326,101253],{},"命令进入HTML文件所在的目录：",[86,124329,124331],{"className":117273,"code":124330,"language":117275,"meta":14,"style":14},"cd ~\u002Fyour_html_folder\n",[92,124332,124333],{"__ignoreMap":14},[95,124334,124335,124337],{"class":97,"line":98},[95,124336,101253],{"class":154},[95,124338,124339],{"class":210}," ~\u002Fyour_html_folder\n",[49,124341,124342],{"start":15},[52,124343,124344,26458,124347,124352,124369],{},[255,124345,124346],{},"启动Python HTTP服务器",[49,124348,124349],{},[52,124350,124351],{},"运行以下命令启动一个简单的HTTP服务器：",[86,124353,124355],{"className":117273,"code":124354,"language":117275,"meta":14,"style":14},"python -m http.server 8000\n",[92,124356,124357],{"__ignoreMap":14},[95,124358,124359,124361,124363,124366],{"class":97,"line":98},[95,124360,30365],{"class":1945},[95,124362,100859],{"class":154},[95,124364,124365],{"class":210}," http.server",[95,124367,124368],{"class":154}," 8000\n",[49,124370,124371],{"start":1161},[52,124372,124373,124374,124377],{},"这会在端口",[92,124375,124376],{},"8000","上启动一个Web服务器。",[1113,124379,124380],{},[52,124381,124382],{},"启动服务器后，Termux会显示日志信息，例如：",[86,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",[92,124387,124388],{"__ignoreMap":14},[95,124389,124390],{"class":97,"line":98},[95,124391,124385],{},[1113,124393,124394],{},[52,124395,124396],{},"这表示服务器已成功启动。",[10,124398,124399],{},[255,124400,124401],{},"在浏览器中访问HTML文件",[49,124403,124404],{},[52,124405,124406,26458,124409,124414],{},[255,124407,124408],{},"在同一设备上访问",[49,124410,124411],{},[52,124412,124413],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[86,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",[92,124419,124420],{"__ignoreMap":14},[95,124421,124422,124425],{"class":97,"line":98},[95,124423,124424],{"class":105},"http:",[95,124426,124427],{"class":164},"\u002F\u002Flocalhost:8000\n",[1113,124429,124430],{},[52,124431,124432,124433,124436],{},"如果HTML文件中有",[92,124434,124435],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[37,124438,124440],{"id":124439},"_76-linux重点知识","7.6 Linux重点知识",[66,124442,124444],{"id":124443},"_761-关于点的说明","7.6.1 关于点的说明",[10,124446,124447],{},[1444,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",[10,124451,124452],{},"一点本目录，两点上目录",[66,124454,124456],{"id":124455},"_762-目录","7.6.2 目录",[21981,124458,124460],{"id":124459},"_7621-系统启动必须","7.6.2.1 系统启动必须",[10,124462,124463],{},[255,124464,124465],{},"\u002Fboot:",[10,124467,124468],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[10,124470,124471],{},[255,124472,124473],{},"\u002Fetc:",[10,124475,124476],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[10,124478,124479],{},[255,124480,124481],{},"\u002Flib：",[10,124483,124484],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[10,124486,124487],{},[255,124488,124489],{},"\u002Fsys:",[10,124491,124492],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21981,124494,124496],{"id":124495},"_7622-指令集合","7.6.2.2 指令集合",[10,124498,124499],{},[255,124500,124501],{},"\u002Fbin:",[10,124503,124504],{},"为二进制文件的缩写，存放最经常使用的命令",[10,124506,124507],{},[255,124508,124509],{},"\u002Fsbin:",[10,124511,124512],{},"只有系统管理员才能使用的程序和指令",[21981,124514,124516],{"id":124515},"_7623-外部文件管理","7.6.2.3 外部文件管理",[10,124518,124519],{},[255,124520,124521],{},"\u002Fdev:",[10,124523,124524],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[10,124526,124527],{},[255,124528,124529],{},"\u002Fmedia:",[10,124531,124532],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[10,124534,124535],{},[255,124536,124537],{},"\u002Fmnt:",[10,124539,124540],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21981,124542,124544],{"id":124543},"_7624-临时文件","7.6.2.4 临时文件",[10,124546,124547],{},[255,124548,124549],{},"\u002Frun:",[10,124551,124552],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[10,124554,124555],{},[255,124556,124557],{},"\u002Flost+found:",[10,124559,124560],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[10,124562,124563],{},[255,124564,124565],{},"\u002Ftmp:",[10,124567,124568],{},"这个目录是用来存放一些临时文件的",[21981,124570,124572],{"id":124571},"_7625-账户","7.6.2.5 账户",[10,124574,124575],{},[255,124576,124577],{},"\u002Froot：",[10,124579,124580],{},"系统管理员的用户主目录",[10,124582,124583,26458],{},[255,124584,124585],{},"\u002Fhome",[10,124587,124588],{},"用户的主目录，以用户的账号命名的",[10,124590,124591,26458],{},[255,124592,124593],{},"\u002Fusr",[10,124595,124596],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[10,124598,124599],{},[255,124600,124601],{},"\u002Fusr\u002Fbin：",[10,124603,124604],{},"系统用户使用的应用程序与指令",[10,124606,124607],{},[255,124608,124609],{},"\u002Fusr\u002Fsbin：",[10,124611,124612],{},"超级用户使用的比较高级的管理程序和系统守护程序",[10,124614,124615],{},[255,124616,124617],{},"\u002Fusr\u002Fsrc：",[10,124619,124620],{},"内核源代码默认的放置目录",[21981,124622,124624],{"id":124623},"_7626-运行过程要用","7.6.2.6 运行过程要用",[10,124626,124627],{},[255,124628,124629],{},"\u002Fvar：",[10,124631,124632],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[10,124634,124635],{},[255,124636,124637],{},"\u002Fproc:",[10,124639,124640,124641,124644],{},"管理 ",[255,124642,124643],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21981,124646,124648],{"id":124647},"_7627-扩展用的","7.6.2.7 扩展用的",[10,124650,124651],{},[255,124652,124653],{},"\u002Fopt:",[10,124655,124656],{},"默认是空的，我们安装额外软件可以放在这个里面",[10,124658,124659],{},[255,124660,124661],{},"\u002Fsrv:",[10,124663,124664],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[66,124666,124668],{"id":124667},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[10,124670,124671],{},[1444,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",[10,124675,124676],{},"windows-->linux:",[10,124678,124679],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[10,124681,124682],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[10,124684,124685],{},"linux传输文件到windows",[10,124687,124688],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[66,124690,124692],{"id":124691},"_764-易忘知识","7.6.4 易忘知识",[10,124694,124695],{},"操作系统内核查看",[86,124697,124698],{"className":117273,"code":121267,"language":117275,"meta":14,"style":14},[92,124699,124700],{"__ignoreMap":14},[95,124701,124702,124704],{"class":97,"line":98},[95,124703,70181],{"class":1945},[95,124705,121276],{"class":154},[10,124707,124708],{},[1444,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",[10,124712,124713],{},[1444,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",[86,124717,124719],{"className":117273,"code":124718,"language":117275,"meta":14,"style":14},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[92,124720,124721,124733],{"__ignoreMap":14},[95,124722,124723,124725,124728,124731],{"class":97,"line":98},[95,124724,121484],{"class":1945},[95,124726,124727],{"class":210}," mvtest",[95,124729,124730],{"class":210}," mvtest2",[95,124732,2656],{"class":105},[95,124734,124735],{"class":97,"line":15},[95,124736,124737],{"class":1945},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[10,124739,124740],{},[1444,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",[10,124744,124745],{},[1444,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",[10,124749,124750,124751,124754],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[92,124752,124753],{},"du -a"," 可以快速查看磁盘使用细节。",[66,124756,124758],{"id":124757},"_765-vim","7.6.5 Vim",[10,124760,124761],{},[1444,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",[10,124765,124766],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[10,124768,124769],{},"一开始进去为命令模式，此时点击输入的字母为命令",[10,124771,124772],{},[255,124773,124774],{},"1.命令模式：",[10,124776,124777],{},"i 切换到输入模式，在光标当前位置开始输入文本",[10,124779,124780],{},"x 删除当前光标所在处的字符",[10,124782,124783],{},"：切换到底线命令模式，以在最底一行输入命令",[10,124785,124786],{},"a 进行插入模式，在光标下一个位置输入文本",[10,124788,124789],{},"o 在当前的下方插入一个新行，并进入插入模式",[10,124791,124792],{},"0 在当前行的上方插入一个新行，并进入插入模式",[10,124794,124795],{},"dd 剪切当前行",[10,124797,124798],{},"yy 复制当前行",[10,124800,124801],{},"p 粘贴剪贴板内容到光标下方",[10,124803,124804],{},"P 粘贴剪贴板内容到光标上方",[10,124806,124807],{},"u 撤销上一次操作",[10,124809,124810],{},"ctrl+r 重做上一次操作",[10,124812,124813,124815],{},[901,124814],{}," 保存文件",[10,124817,124818,124820],{},[751,124819],{}," 退出Vim编辑器",[10,124822,124823,124825],{},[751,124824],{},"! 强制退出Vim编辑器，不保存修改",[10,124827,124828],{},[255,124829,124830],{},"2.输入模式：",[10,124832,124833],{},[1444,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",[10,124837,124838],{},[255,124839,124840],{},"3.底线命令模式：",[10,124842,124843],{},[1444,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",[10,124847,124848],{},"按下esc可以退出底线命令模式",[66,124850,124852],{"id":124851},"_766-apt","7.6.6 apt",[10,124854,124855],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[66,124857,124859],{"id":124858},"_767-home与root的区别","7.6.7 home与root的区别",[10,124861,124862],{},[1444,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",[10,124866,124867],{},[1444,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",[10,124871,124872],{},[1444,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",[10,124876,124877],{},[1444,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",[66,124881,124883],{"id":124882},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[10,124885,124886],{},[344,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",[23849],[49,124891,124892,124895],{},[52,124893,124894],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[52,124896,124897],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[10,124899,124900],{},[1444,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",[10,124904,124905],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[10,124907,124908],{},[1444,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",[86,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",[92,124915,124916,124921],{"__ignoreMap":14},[95,124917,124918],{"class":97,"line":98},[95,124919,124920],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[95,124922,124923],{"class":97,"line":15},[95,124924,124925],{},".\u002Fpycharm.sh\n",[10,124927,124928],{},"3️⃣创建.desktop文件",[10,124930,124931],{},[255,124932,124933],{},"原理：",[1113,124935,124936,124946],{},[52,124937,124938,124939,124945],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[255,124940,124941,124944],{},[92,124942,124943],{},".desktop"," 文件"," 来识别应用。",[52,124947,124948,124950,124951],{},[92,124949,124943],{}," 文件相当于一个“应用注册表”，告诉系统：",[1113,124952,124953,124956,124959,124962,124965],{},[52,124954,124955],{},"应用名字（Name）",[52,124957,124958],{},"图标（Icon）",[52,124960,124961],{},"执行命令（Exec）",[52,124963,124964],{},"分类（Categories）",[52,124966,124967],{},"是否需要终端（Terminal）",[86,124969,124971],{"className":120793,"code":124970,"language":120795,"meta":120796,"style":14},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[92,124972,124973,124978],{"__ignoreMap":14},[95,124974,124975],{"class":97,"line":98},[95,124976,124977],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[95,124979,124980],{"class":97,"line":15},[95,124981,124982],{},"nano pycharm.desktop\n",[10,124984,124985],{},"nano是一个命令行下的编辑器，也可以使用vim",[86,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",[92,124990,124991,124996,125001,125006,125011,125016,125021,125026,125031,125036],{"__ignoreMap":14},[95,124992,124993],{"class":97,"line":98},[95,124994,124995],{},"[Desktop Entry]\n",[95,124997,124998],{"class":97,"line":15},[95,124999,125000],{},"Version=1.0\n",[95,125002,125003],{"class":97,"line":1161},[95,125004,125005],{},"Type=Application\n",[95,125007,125008],{"class":97,"line":1176},[95,125009,125010],{},"Name=PyCharm\n",[95,125012,125013],{"class":97,"line":1182},[95,125014,125015],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[95,125017,125018],{"class":97,"line":1196},[95,125019,125020],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[95,125022,125023],{"class":97,"line":1202},[95,125024,125025],{},"Comment=JetBrains PyCharm IDE\n",[95,125027,125028],{"class":97,"line":1293},[95,125029,125030],{},"Categories=Development;IDE;\n",[95,125032,125033],{"class":97,"line":1299},[95,125034,125035],{},"Terminal=false\n",[95,125037,125038],{"class":97,"line":1311},[95,125039,125040],{},"StartupWMClass=jetbrains-pycharm\n",[1113,125042,125043,125049,125055,125061],{},[52,125044,125045,125048],{},[92,125046,125047],{},"Exec"," → 点击图标时执行的命令",[52,125050,125051,125054],{},[92,125052,125053],{},"Icon"," → 显示在菜单和桌面上的图标",[52,125056,125057,125060],{},[92,125058,125059],{},"Terminal=false"," → 不打开终端",[52,125062,125063,125066],{},[92,125064,125065],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125068,125069,125070],"blockquote",{},[10,125071,125072,125073,125075,125076],{},"可以理解成 ",[92,125074,124943],{}," 文件是 Linux 的 ",[255,125077,125078],{},"快捷方式配置文件",[10,125080,125081],{},"4️⃣设置可执行权限",[86,125083,125085],{"className":120793,"code":125084,"language":120795,"meta":120796,"style":14},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[92,125086,125087],{"__ignoreMap":14},[95,125088,125089],{"class":97,"line":98},[95,125090,125084],{},[10,125092,125093],{},"5️⃣桌面图标启动的话如下：",[86,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",[92,125098,125099,125104],{"__ignoreMap":14},[95,125100,125101],{"class":97,"line":98},[95,125102,125103],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[95,125105,125106],{"class":97,"line":15},[95,125107,125108],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[49,125110,125111],{"start":1161},[52,125112,125113],{},"下载Appimage文件实现软件的安装",[10,125115,125116],{},"1️⃣先下载appimage",[10,125118,125119],{},[344,125120,125121],{"href":125121,"rel":125122},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23849],[10,125124,125125],{},[1444,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",[10,125129,125130],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[10,125132,125133],{},[1444,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",[10,125137,125138],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[10,125140,125141],{},[1444,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",[10,125145,125146],{},[1444,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",[10,125150,125151,125152,125155],{},"3️⃣给他们放在",[92,125153,125154],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[10,125157,125158],{},"4️⃣给软件执行权限",[86,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",[92,125163,125164,125169],{"__ignoreMap":14},[95,125165,125166],{"class":97,"line":98},[95,125167,125168],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[95,125170,125171],{"class":97,"line":15},[95,125172,125173],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[10,125175,125176],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[86,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",[92,125181,125182,125189,125196,125202],{"__ignoreMap":14},[95,125183,125184,125186],{"class":97,"line":98},[95,125185,101253],{"class":154},[95,125187,125188],{"class":210}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[95,125190,125191,125193],{"class":97,"line":15},[95,125192,101260],{"class":1945},[95,125194,125195],{"class":210}," .\u002Fqqmusic.desktop\n",[95,125197,125198,125200],{"class":97,"line":1161},[95,125199,124244],{"class":1945},[95,125201,125195],{"class":210},[95,125203,125204,125206,125208,125210],{"class":97,"line":1176},[95,125205,24561],{"class":1945},[95,125207,24564],{"class":210},[95,125209,123110],{"class":210},[95,125211,125195],{"class":210},[10,125213,125214,125216],{},[92,125215,101260],{},"：一个 Linux 命令，主要功能是：",[1113,125218,125219,125222],{},[52,125220,125221],{},"如果文件不存在，就创建一个新的空文件",[52,125223,125224],{},"如果文件已存在，就更新该文件的最后修改时间",[86,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",[92,125229,125230,125234,125239,125244,125249,125253,125258],{"__ignoreMap":14},[95,125231,125232],{"class":97,"line":98},[95,125233,124995],{},[95,125235,125236],{"class":97,"line":15},[95,125237,125238],{},"Name=QQ音乐\n",[95,125240,125241],{"class":97,"line":1161},[95,125242,125243],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[95,125245,125246],{"class":97,"line":1176},[95,125247,125248],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[95,125250,125251],{"class":97,"line":1182},[95,125252,125005],{},[95,125254,125255],{"class":97,"line":1196},[95,125256,125257],{},"Categories=Audio;Music;Player;\n",[95,125259,125260],{"class":97,"line":1202},[95,125261,125262],{},"Comment=QQ Music Client for Linux\n",[10,125264,125265],{},"将文件复制进去",[10,125267,125268],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[10,125270,125271],{},[1444,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",[10,125275,125276],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[10,125278,125279],{},[1444,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",[10,125283,125284,125285,125288,125289,125292],{},"如果你用的不是KDE，那么也可以直接修改",[92,125286,125287],{},"qqmuic.desktop","：在exec的末尾加上",[92,125290,125291],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[86,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",[92,125297,125298,125302,125306,125311,125315,125319,125323],{"__ignoreMap":14},[95,125299,125300],{"class":97,"line":98},[95,125301,124995],{},[95,125303,125304],{"class":97,"line":15},[95,125305,125238],{},[95,125307,125308],{"class":97,"line":1161},[95,125309,125310],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[95,125312,125313],{"class":97,"line":1176},[95,125314,125248],{},[95,125316,125317],{"class":97,"line":1182},[95,125318,125005],{},[95,125320,125321],{"class":97,"line":1196},[95,125322,125257],{},[95,125324,125325],{"class":97,"line":1202},[95,125326,125262],{},[10,125328,125329],{},[1444,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",[10,125333,125334],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[86,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",[92,125339,125340],{"__ignoreMap":14},[95,125341,125342],{"class":97,"line":98},[95,125343,125337],{},[49,125345,125346],{"start":1176},[52,125347,125348],{},"去Flathub上安装软件",[10,125350,125351],{},[344,125352,125353],{"href":125353,"rel":125354},"https:\u002F\u002Fflathub.org\u002F",[23849],[10,125356,125357],{},"1️⃣去上面的官网搜索软件+下载软件",[10,125359,125360],{},[1444,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",[86,125364,125366],{"className":120793,"code":125365,"language":120795,"meta":120796,"style":14},"flatpak install flathub com.obsproject.Studio\n",[92,125367,125368],{"__ignoreMap":14},[95,125369,125370],{"class":97,"line":98},[95,125371,125365],{},[10,125373,125374],{},[1444,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",[10,125378,125379],{},"2️⃣运行软件",[10,125381,125382],{},"a.官方方式：",[10,125384,125385],{},[1444,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",[86,125389,125390],{"className":120793,"code":125365,"language":120795,"meta":120796,"style":14},[92,125391,125392],{"__ignoreMap":14},[95,125393,125394],{"class":97,"line":98},[95,125395,125365],{},[10,125397,125398],{},"b.当普通软件运行：",[10,125400,125401],{},[1444,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",[10,125405,125406],{},[1444,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",[5109,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":1161,"text":122493},{"id":122559,"depth":1161,"text":122560},{"id":122820,"depth":1161,"text":122821},{"id":122973,"depth":15,"text":122974},{"id":123211,"depth":15,"text":123212,"children":125422},[125423,125424,125425,125426],{"id":123263,"depth":1161,"text":123264},{"id":123549,"depth":1161,"text":123550},{"id":123820,"depth":1161,"text":123821},{"id":124079,"depth":1161,"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":1161,"text":124444},{"id":124455,"depth":1161,"text":124456},{"id":124667,"depth":1161,"text":124668},{"id":124691,"depth":1161,"text":124692},{"id":124757,"depth":1161,"text":124758},{"id":124851,"depth":1161,"text":124852},{"id":124858,"depth":1161,"text":124859},{"id":124882,"depth":1161,"text":124883},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122138,"description":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125444,"title":125445,"body":125446,"description":23360,"extension":18,"meta":125450,"navigation":21,"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":30248},"\u002Fwiki\u002F2025-01-27-linux",{"title":125445,"description":23360},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125456,"title":125457,"body":125458,"description":125462,"extension":18,"meta":125853,"navigation":21,"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],[10,125461,125462],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[33,125464,125466],{"id":125465},"_1ubuntu环境配置","1.Ubuntu环境配置",[49,125468,125469,125472,125475,125478,125481],{},[52,125470,125471],{},"ubuntu环境换源",[52,125473,125474],{},"安装cuda",[52,125476,125477],{},"安装miniconda",[52,125479,125480],{},"安装pytorch",[52,125482,125483],{},"安装genesis",[10,125485,125486],{},"参考链接：",[86,125488,125490],{"className":23806,"code":125489,"language":23808,"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",[92,125491,125492],{"__ignoreMap":14},[95,125493,125494,125497,125500,125503,125505,125508,125511,125513,125516,125519,125521,125524,125527,125529,125532,125535,125537],{"class":97,"line":98},[95,125495,125496],{"class":1945},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[95,125498,125499],{"class":210},"=blogdetail",[95,125501,125502],{"class":105},"&sharetype",[95,125504,151],{"class":101},[95,125506,125507],{"class":210},"blogdetail",[95,125509,125510],{"class":105},"&sharerId",[95,125512,151],{"class":101},[95,125514,125515],{"class":210},"144728092",[95,125517,125518],{"class":105},"&sharerefer",[95,125520,151],{"class":101},[95,125522,125523],{"class":210},"PC",[95,125525,125526],{"class":105},"&sharesource",[95,125528,151],{"class":101},[95,125530,125531],{"class":210},"qq_69379513",[95,125533,125534],{"class":105},"&sharefrom",[95,125536,151],{"class":101},[95,125538,125539],{"class":210},"from_link\n",[33,125541,125543],{"id":125542},"_2genesis-报错issue","2.Genesis 报错issue",[10,125545,125486],{},[86,125547,125548],{"className":23806,"code":125489,"language":23808,"meta":14,"style":14},[92,125549,125550],{"__ignoreMap":14},[95,125551,125552,125554,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584],{"class":97,"line":98},[95,125553,125496],{"class":1945},[95,125555,125499],{"class":210},[95,125557,125502],{"class":105},[95,125559,151],{"class":101},[95,125561,125507],{"class":210},[95,125563,125510],{"class":105},[95,125565,151],{"class":101},[95,125567,125515],{"class":210},[95,125569,125518],{"class":105},[95,125571,151],{"class":101},[95,125573,125523],{"class":210},[95,125575,125526],{"class":105},[95,125577,151],{"class":101},[95,125579,125531],{"class":210},[95,125581,125534],{"class":105},[95,125583,151],{"class":101},[95,125585,125539],{"class":210},[86,125587,125589],{"className":23806,"code":125588,"language":23808,"meta":14,"style":14},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[92,125590,125591],{"__ignoreMap":14},[95,125592,125593],{"class":97,"line":98},[95,125594,125588],{"class":1945},[33,125596,125598],{"id":125597},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[10,125600,125601],{},"hello_robot.py",[86,125603,125605],{"className":30363,"code":125604,"language":30365,"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",[92,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},[95,125608,125609,125611],{"class":97,"line":98},[95,125610,30377],{"class":101},[95,125612,45290],{"class":105},[95,125614,125615,125618,125621,125623,125625],{"class":97,"line":15},[95,125616,125617],{"class":105},"os.environ[",[95,125619,125620],{"class":210},"'PYOPENGL_PLATFORM'",[95,125622,4425],{"class":105},[95,125624,151],{"class":101},[95,125626,125627],{"class":210}," 'glx'\n",[95,125629,125630],{"class":97,"line":1161},[95,125631,2382],{"emptyLinePlaceholder":21},[95,125633,125634,125636,125639,125641],{"class":97,"line":1176},[95,125635,30377],{"class":101},[95,125637,125638],{"class":105}," genesis ",[95,125640,31368],{"class":101},[95,125642,125643],{"class":105}," gs\n",[95,125645,125646,125648,125651,125653],{"class":97,"line":1182},[95,125647,30722],{"class":101},[95,125649,125650],{"class":105}," pynput ",[95,125652,30377],{"class":101},[95,125654,125655],{"class":105}," keyboard\n",[95,125657,125658],{"class":97,"line":1196},[95,125659,2382],{"emptyLinePlaceholder":21},[95,125661,125662,125665,125668,125670],{"class":97,"line":1202},[95,125663,125664],{"class":105},"gs.init(",[95,125666,125667],{"class":5199},"backend",[95,125669,151],{"class":101},[95,125671,125672],{"class":105},"gs.gpu)\n",[95,125674,125675],{"class":97,"line":1293},[95,125676,2382],{"emptyLinePlaceholder":21},[95,125678,125679,125682,125684,125687,125690,125692,125694],{"class":97,"line":1299},[95,125680,125681],{"class":105},"scene ",[95,125683,151],{"class":101},[95,125685,125686],{"class":105}," gs.Scene(",[95,125688,125689],{"class":5199},"show_viewer",[95,125691,151],{"class":101},[95,125693,31461],{"class":154},[95,125695,112],{"class":105},[95,125697,125698,125701,125703],{"class":97,"line":1311},[95,125699,125700],{"class":105},"plane ",[95,125702,151],{"class":101},[95,125704,125705],{"class":105}," scene.add_entity(gs.morphs.Plane())\n",[95,125707,125708,125711,125713],{"class":97,"line":1594},[95,125709,125710],{"class":105},"franka ",[95,125712,151],{"class":101},[95,125714,125715],{"class":105}," scene.add_entity(\n",[95,125717,125718,125721,125723,125725,125728],{"class":97,"line":1599},[95,125719,125720],{"class":105},"    gs.morphs.MJCF(",[95,125722,45339],{"class":5199},[95,125724,151],{"class":101},[95,125726,125727],{"class":210},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[95,125729,38032],{"class":105},[95,125731,125732],{"class":97,"line":1605},[95,125733,112],{"class":105},[95,125735,125736],{"class":97,"line":1610},[95,125737,2382],{"emptyLinePlaceholder":21},[95,125739,125740],{"class":97,"line":1624},[95,125741,125742],{"class":105},"scene.build()\n",[95,125744,125745],{"class":97,"line":1629},[95,125746,2382],{"emptyLinePlaceholder":21},[95,125748,125749,125751,125754],{"class":97,"line":1635},[95,125750,31932],{"class":101},[95,125752,125753],{"class":1945}," on_press",[95,125755,125756],{"class":105},"(key):\n",[95,125758,125759,125762],{"class":97,"line":1656},[95,125760,125761],{"class":101},"    try",[95,125763,3721],{"class":105},[95,125765,125766,125768,125771,125773,125776],{"class":97,"line":1661},[95,125767,2479],{"class":101},[95,125769,125770],{"class":105}," key.char ",[95,125772,2931],{"class":101},[95,125774,125775],{"class":210}," 'q'",[95,125777,3721],{"class":105},[95,125779,125780,125782],{"class":97,"line":1675},[95,125781,15715],{"class":101},[95,125783,125784],{"class":154}," False\n",[95,125786,125787,125790,125793],{"class":97,"line":1680},[95,125788,125789],{"class":101},"    except",[95,125791,125792],{"class":154}," AttributeError",[95,125794,3721],{"class":105},[95,125796,125797],{"class":97,"line":1709},[95,125798,125799],{"class":101},"        pass\n",[95,125801,125802],{"class":97,"line":1714},[95,125803,2382],{"emptyLinePlaceholder":21},[95,125805,125806,125809,125811,125814,125817,125819],{"class":97,"line":1731},[95,125807,125808],{"class":105},"listener ",[95,125810,151],{"class":101},[95,125812,125813],{"class":105}," keyboard.Listener(",[95,125815,125816],{"class":5199},"on_press",[95,125818,151],{"class":101},[95,125820,125821],{"class":105},"on_press)\n",[95,125823,125824],{"class":97,"line":1736},[95,125825,125826],{"class":105},"listener.start()\n",[95,125828,125829],{"class":97,"line":1741},[95,125830,2382],{"emptyLinePlaceholder":21},[95,125832,125833,125835],{"class":97,"line":1746},[95,125834,108640],{"class":101},[95,125836,125837],{"class":105}," listener.running:\n",[95,125839,125840],{"class":97,"line":1760},[95,125841,125842],{"class":105},"    scene.step()\n",[10,125844,125845],{},[1444,125846],{"alt":14,"src":125847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5109,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":23362},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125457,"description":125462},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125859,"title":125860,"body":125861,"description":23360,"extension":18,"meta":125876,"navigation":21,"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],[33,125864,125860],{"id":125865},"_1-基础知识",[37,125867,125869],{"id":125868},"_11-js的组成","1.1 js的组成",[10,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":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125882,"title":125883,"body":125884,"description":23360,"extension":18,"meta":126023,"navigation":21,"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],[33,125887,125883],{"id":125888},"_2-vscode必备内容",[37,125890,125892],{"id":125891},"_21-标签分类","2.1 标签分类",[10,125894,125895],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[37,125897,125899],{"id":125898},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[10,125901,125902,125903,125905,125906,125909],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[92,125904,332],{}," 然后按 ",[92,125907,125908],{},"Tab","，快速自动生成基本结构。",[37,125911,125913],{"id":125912},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[10,125915,125916],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[10,125918,125919],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[10,125921,125922],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[37,125924,125926],{"id":125925},"_24-视图缩放","2.4 视图缩放",[10,125928,125929,125930,125933],{},"缩放视图 ",[92,125931,125932],{},"ctrl+"," 可实现代码增大。",[10,125935,125936,125939],{},[92,125937,125938],{},"ctrl-"," 可实现代码减小。",[37,125941,125943],{"id":125942},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[10,125945,125946,125947,28370],{},"VSCode 新建文件快捷键为 ",[92,125948,125949],{},"ctrl+N",[10,125951,125952,125953,125956,125957,125960],{},"保存快捷键为 ",[92,125954,125955],{},"ctrl+S","，将文本保存为 ",[92,125958,125959],{},".html"," 文件。",[37,125962,125964],{"id":125963},"_26-auto-rename-tag","2.6 Auto Rename Tag",[10,125966,125967],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[37,125969,125971],{"id":125970},"_27-vscode-icons","2.7 vscode-icons",[10,125973,125974],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[37,125976,125978],{"id":125977},"_28-easy-less","2.8 Easy LESS",[10,125980,125981],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[37,125983,125985],{"id":125984},"_29-会了吧插件","2.9 会了吧插件",[10,125987,125988],{},"会了吧插件可以展示代码中英语单词的意思。",[37,125990,125992],{"id":125991},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[10,125994,125995],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[10,125997,125998],{},"②选定多个相同的单词:ctrl+D",[10,126000,126001],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[10,126003,126004],{},"④全局替换某些单词:ctrl+h",[10,126006,126007],{},"⑤快速定位到某一行:ctrl+g",[10,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":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126029,"title":126030,"body":126031,"description":23360,"extension":18,"meta":126190,"navigation":21,"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],[33,126034,126030],{"id":126035},"_3-html文本与容器标签",[37,126037,126039],{"id":126038},"_31-标题标签","3.1 标题标签",[10,126041,126042,126045,126046,126049],{},[92,126043,126044],{},"\u003Ch1>","我是一级标签",[92,126047,126048],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[10,126051,126052,126045,126054],{},[92,126053,126044],{},[92,126055,126048],{},[10,126057,123312,126058,126061],{},[92,126059,126060],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[37,126063,126065],{"id":126064},"_32-段落标签","3.2 段落标签",[10,126067,126068,126071,126072],{},[92,126069,126070],{},"\u003Cp>","....",[92,126073,126074],{},"\u003C\u002Fp>",[37,126076,126078],{"id":126077},"_33-换行标签","3.3 换行标签",[10,126080,126081],{},[92,126082,126083],{},"\u003Cbr \u002F>",[10,126085,126086],{},"具有强制换行的作用",[10,126088,126089],{},"单标签",[37,126091,126093],{"id":126092},"_34-文本格式化标签","3.4 文本格式化标签",[10,126095,126096],{},"提供粗体、斜体和下划线等效果",[10,126098,126099,126100,82516,126103,126106],{},"加粗：",[92,126101,126102],{},"\u003Cstrong>...\u003C\u002Fstrong>",[92,126104,126105],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[10,126108,126109,126110,82516,126113,126106],{},"斜体：",[92,126111,126112],{},"\u003Cem>...\u003C\u002Fem>",[92,126114,126115],{},"\u003Ci>...\u003C\u002Fi>",[10,126117,126118,126119,82516,126122,126106],{},"删除线：",[92,126120,126121],{},"\u003Cdel>...\u003C\u002Fdel>",[92,126123,126124],{},"\u003Cs>...\u003C\u002Fs>",[10,126126,126127,126128,82516,126131,126106],{},"下划线：",[92,126129,126130],{},"\u003Cins>...\u003C\u002Fins>",[92,126132,126133],{},"\u003Cu>...\u003C\u002Fu>",[37,126135,126137,126138,18393,126141,102670],{"id":126136},"_35-div和span标签","3.5 ",[92,126139,126140],{},"\u003Cdiv>",[92,126142,126143],{},"\u003Cspan>",[10,126145,126146,100995,126148,126150],{},[92,126147,126140],{},[92,126149,126143],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[10,126152,126153],{},[92,126154,126155],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[10,126157,126158],{},[92,126159,126160],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[10,126162,126163,126164,126166,126167,126169,126170,126173],{},"两者特点：①",[92,126165,126140],{}," 标签用来布局，但一行通常只放一个 ",[92,126168,126140],{},"。可以理解为一个大盒子，独占一行，在 ",[92,126171,126172],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[10,126175,77226,126176,126178,126179,126181],{},[92,126177,126143],{}," 标签也可用于布局，一行可以放多个 ",[92,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":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126196,"title":126197,"body":126198,"description":23360,"extension":18,"meta":126395,"navigation":21,"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],[33,126201,126197],{"id":126202},"_4-html图像与链接",[37,126204,126206],{"id":126205},"_41-图像标签","4.1 图像标签",[10,126208,126209],{},"（1）标签",[10,126211,126212,126215],{},[92,126213,126214],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[10,126217,126218,126219,126222],{},"src是",[92,126220,126221],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[10,126224,126225,126226],{},"alt:文本，替换文本。图像不能显示的文字 ",[92,126227,126228],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[10,126230,126231,126232],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[92,126233,126234],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[10,126236,126237],{},"width:像素，设置图像的宽度",[10,126239,126240],{},"height:像素，设置图像的高度",[10,126242,126243],{},"border：像素，设置图像的边框粗细",[10,126245,126246],{},"（2）图像标签属性的注意点：",[10,126248,126249],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[10,126251,126252],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[10,126254,126255],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[37,126257,126259],{"id":126258},"_42-路径注意要点","4.2 路径注意要点：",[10,126261,126262],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[10,126264,126265],{},"（2）根目录：就是打开文件夹的第一层根目录",[10,126267,126268],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[10,126270,126271,126272],{},"①同一级路径：图像文件位于HTML文件同一级，如",[92,126273,126274],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[10,126276,126277,126278],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[92,126279,126280],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[10,126282,126283,126284],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[92,126285,126286],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[10,126288,126289,126290,357],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[344,126291,126292],{"href":126292,"rel":126293},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23849],[37,126295,126297],{"id":126296},"_43-超链接标签","4.3 超链接标签",[10,126299,126300,126303],{},[92,126301,126302],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[10,126305,126306,126307],{},"①语法格式：",[92,126308,126309],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[10,126311,126312],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[10,126314,126315],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[10,126317,126318,126319],{},"③链接分类：外部链接：",[92,126320,126321],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[10,126323,126324,126325],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[92,126326,126327],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[10,126329,126330,126331],{},"空链接：如果当时没有确定链接目标时，",[92,126332,126333],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[10,126335,126336],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[10,126338,126339],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[37,126341,126343],{"id":126342},"_44-锚点链接","4.4 锚点链接",[10,126345,126346],{},"点我们点击链接，可以快速定位到页面中的某个位置",[10,126348,126349,126350,126353,126354],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[92,126351,126352],{},"\u003Ca href=\"#two\">","第二级",[92,126355,126356],{},"\u003C\u002Fa>",[10,126358,126359,126360],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[92,126361,126362],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[37,126364,126366],{"id":126365},"_45-注释标签","4.5 注释标签",[10,126368,126369,126372,126373],{},[92,126370,126371],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[92,126374,126375],{},"ctrl+\u002F",[37,126377,126379],{"id":126378},"_46-特殊字符","4.6 特殊字符",[10,126381,126382],{},"可以实现添加多个空格",[1444,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":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126401,"title":126402,"body":126403,"description":23360,"extension":18,"meta":126696,"navigation":21,"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],[33,126406,126402],{"id":126407},"_5-html表格列表与表单",[37,126409,126411],{"id":126410},"_51-表格标签","5.1 表格标签",[10,126413,126414],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[10,126416,126417],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[10,126419,126420],{},"②表格基本语法：",[1444,126422],{"style":126385,"src":126423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[10,126425,126426],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1444,126428],{"style":126385,"src":126429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[10,126431,126432],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1444,126434],{"style":126385,"src":126435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[10,126437,126438],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[10,126440,126441,126444,126445,126447,126448,126451,126452,126454,126455,126458],{},[92,126442,126443],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[92,126446,126443],{},"内部必须拥有",[92,126449,126450],{},"\u003Ctr>","标签，一般位于第一行，",[92,126453,126443],{},"比",[92,126456,126457],{},"\u003Cth>","范围广",[10,126460,126461,126464],{},[92,126462,126463],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[37,126466,126468],{"id":126467},"_52-合并单元格","5.2 合并单元格",[10,126470,126471],{},"（1）合并单元格方式：",[10,126473,126474],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[10,126476,126477],{},"②跨列合并：colspan=\"合并单元格的个数\"",[10,126479,126480],{},"（2）目标单元格：",[10,126482,126483],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[10,126485,126486],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[37,126488,126490],{"id":126489},"_53-列表标签","5.3 列表标签",[10,126492,126493],{},"（1）分类：无序列表、有序列表、自定义列表",[10,126495,126496],{},"①无序列表：",[1444,126498],{"style":126385,"src":126499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[10,126501,126502],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[10,126504,126505,126508,126509,126512,126513,126515],{},[92,126506,126507],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[92,126510,126511],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[92,126514,126507],{},"中输入其他标签或文字是不对的",[10,126517,126518,126520],{},[92,126519,126511],{},"之间相当于一个容器，可以容纳所有元素",[10,126522,126523],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[10,126525,126526],{},"在css中去除前边的小圆点采用如下代码:",[86,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",[92,126533,126534],{"__ignoreMap":14},[95,126535,126536,126539],{"class":97,"line":98},[95,126537,126538],{"class":51277},"list-style",[95,126540,126541],{"class":105},": none;\n",[10,126543,126544],{},"②有序列表：",[1444,126546],{"style":126385,"src":126547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[10,126549,126550],{},"③自定义列表：",[1444,126552],{"style":126385,"src":126553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1444,126555],{"style":126385,"src":126556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[37,126558,126560],{"id":126559},"_54-表单标签","5.4 表单标签",[10,126562,126563],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[10,126565,126566,126567,126570],{},"（1）表单域：包含单元素的区域，",[92,126568,126569],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1444,126572],{"style":126385,"src":126573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[10,126575,126576],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[10,126578,126579],{},"表单元素提交必须有name属性",[10,126581,126582],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[10,126584,126585],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[10,126587,77203,126588,126591],{},[92,126589,126590],{},"\u003Cinput>","输入表单元素",[1444,126593],{"style":126385,"src":126594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1444,126596],{"style":126385,"src":126597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[10,126599,126600,126601],{},"单选按钮：",[92,126602,126603],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1444,126605],{"style":126385,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[10,126608,126609],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1444,126611],{"style":126385,"src":126612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[10,126614,126615,126618],{},[255,126616,126617],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[10,126620,126621],{},"②select下拉表单元素：可以节约页面控件",[1444,126623],{"style":126385,"src":126624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[10,126626,126627,13778,126629,126632,126633,126635,126636,126638],{},[255,126628,135],{},[92,126630,126631],{},"\u003Cselect>","中至少包含一对",[92,126634,102691],{},"；在",[92,126637,102691],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[10,126640,126641,126642,126645],{},"③",[92,126643,126644],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1444,126647],{"style":126385,"src":126648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[10,126650,126651],{},"3行20列",[37,126653,126655,126656,102670],{"id":126654},"_55-lable标签","5.5 ",[92,126657,126658],{},"\u003Clable>",[10,126660,126661,126662,126664,126665,126667],{},"它不是表单标签，但常常与表单标签搭配使用，",[92,126663,126658],{},"标签用于绑定一个表单标签，当点击",[92,126666,126658],{},"标签内的文本",[10,126669,126670],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1444,126672],{"style":126385,"src":126673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1444,126675],{"style":126385,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[37,126678,126680],{"id":126679},"_56-实例","5.6 实例",[1444,126682],{"style":126385,"src":126683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5109,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":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126702,"title":126703,"body":126704,"description":23360,"extension":18,"meta":127253,"navigation":21,"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],[33,126707,126703],{"id":126708},"_6-css语法与文本样式",[37,126710,126712],{"id":126711},"_61-css语法规范","6.1 css语法规范",[10,126714,126715],{},"由两部分组成，选择器及一条或多条声明",[1444,126717],{"style":126385,"src":126718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[10,126720,126721],{},[255,126722,135],{},[10,126724,126725],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[10,126727,126728],{},"②属性与属性值以“键值对”的形式出现",[10,126730,126731],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[10,126733,126734],{},"④属性和属性值之间用英文“;”分开",[1444,126736],{"style":126385,"src":126737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1444,126739],{"style":126385,"src":126740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1444,126742],{"style":126385,"src":126743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[37,126745,126747],{"id":126746},"_62-css选择器","6.2 css选择器",[10,126749,126750],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[66,126752,126754],{"id":126753},"_621-标签选择器","6.2.1 标签选择器",[10,126756,126757],{},"①优点：能快速为页面中同类型的标签统一设置样式",[10,126759,126760],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1444,126762],{"style":126385,"src":126763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[66,126765,126767],{"id":126766},"_622-类选择器","6.2.2 类选择器",[10,126769,126770],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[10,126772,126773],{},"②样例",[1444,126775],{"style":126385,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[10,126778,126779,126780,126782],{},"③ ",[255,126781,126617],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[10,126784,126785],{},"可以理解为给这个标签起了个名字，来表示；",[10,126787,126788],{},"长名称或词组可以使用横线来为选择器命名；",[10,126790,126791],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[10,126793,126794],{},"命名要有意义；",[1444,126796],{"style":126385,"src":126797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[10,126799,126800],{},"类选择器也可以指定特殊的元素p.center{}",[10,126802,126803],{},"p.center和.center都对",[86,126805,126807],{"className":126529,"code":126806,"language":126531,"meta":14,"style":14},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[92,126808,126809,126814,126823,126833],{"__ignoreMap":14},[95,126810,126811],{"class":97,"line":98},[95,126812,126813],{"class":164},"\u002F* 类选择器指定特殊元素 *\u002F\n",[95,126815,126816,126818,126821],{"class":97,"line":15},[95,126817,10],{"class":51277},[95,126819,126820],{"class":1945},".center",[95,126822,15555],{"class":105},[95,126824,126825,126827,126829,126831],{"class":97,"line":1161},[95,126826,70503],{"class":154},[95,126828,51414],{"class":105},[95,126830,51569],{"class":154},[95,126832,1272],{"class":105},[95,126834,126835],{"class":97,"line":1176},[95,126836,1547],{"class":105},[66,126838,126840],{"id":126839},"_623-多类名使用","6.2.3 多类名使用",[10,126842,126843],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1444,126845],{"style":126385,"src":126846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[10,126848,126849],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[66,126851,126853],{"id":126852},"_624-id选择器","6.2.4 id选择器",[10,126855,126856],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[10,126858,126859],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1444,126861],{"style":126385,"src":126862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[10,126864,126865],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[10,126867,126868],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[66,126870,126872],{"id":126871},"_625-通配符选择器","6.2.5 通配符选择器",[10,126874,126875],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[10,126877,126878],{},"* {",[10,126880,126881],{},"color=\"red\"}",[66,126883,126885],{"id":126884},"_626-总结","6.2.6 总结",[1444,126887],{"style":126385,"src":126888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[37,126890,126892],{"id":126891},"_63-css字体属性","6.3 css字体属性",[10,126894,126895],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[66,126897,126899],{"id":126898},"_631-字体系列","6.3.1 字体系列",[10,126901,126902],{},"font-family: '宋体';",[10,126904,126905,126907],{},[255,126906,135],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[66,126909,126911],{"id":126910},"_632-字体大小","6.3.2 字体大小",[10,126913,126914],{},"font-size: 20px",[10,126916,126917,26458],{},[255,126918,126617],{},[10,126920,126921],{},"①px（像素）大小是网页的最常用单位",[10,126923,126924],{},"②谷歌浏览器默认为16px",[10,126926,126927],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[10,126929,126930],{},"④可以给body指定整个页面的大小：会自动引用",[86,126932,126934],{"className":126529,"code":126933,"language":126531,"meta":14,"style":14},"body {\n  font-size: 16px;\n}\n",[92,126935,126936,126942,126954],{"__ignoreMap":14},[95,126937,126938,126940],{"class":97,"line":98},[95,126939,51777],{"class":51277},[95,126941,15555],{"class":105},[95,126943,126944,126946,126948,126950,126952],{"class":97,"line":15},[95,126945,70603],{"class":154},[95,126947,51414],{"class":105},[95,126949,707],{"class":154},[95,126951,51469],{"class":101},[95,126953,1272],{"class":105},[95,126955,126956],{"class":97,"line":1161},[95,126957,1547],{"class":105},[10,126959,126960],{},"⑤标题标签比较特殊，需要单独指定大小",[66,126962,126964],{"id":126963},"_633-字体粗细","6.3.3 字体粗细",[10,126966,126967],{},"font-weight: bold;",[10,126969,126970],{},"font-weight: 100；",[10,126972,126973,126975],{},[255,126974,135],{}," ①粗体文字变细：尽量别用normal，多用数字",[10,126977,126978],{},"font-weight= 400;",[10,126980,126981],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[66,126983,126985],{"id":126984},"_634-文字样式","6.3.4 文字样式",[10,126987,126988],{},"font-style: normal；",[10,126990,126991,26458],{},[255,126992,126993],{},"属性值",[10,126995,126996],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[10,126998,126999],{},"②italic：浏览器会显示斜体的字体样式",[1444,127001],{"style":126385,"src":127002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[66,127004,127006],{"id":127005},"_635-字体符合属性","6.3.5 字体符合属性",[1444,127008],{"style":126385,"src":127009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1444,127011],{"style":126385,"src":127012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[10,127014,127015],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[10,127017,127018,26458],{},[255,127019,126617],{},[10,127021,127022],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[10,127024,127025],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[10,127027,127028],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[37,127030,127032],{"id":127031},"_64-css-test文本属性","6.4 css test文本属性",[66,127034,127036],{"id":127035},"_641-文本颜色","6.4.1 文本颜色",[10,127038,127039],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[86,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",[92,127044,127045,127050,127056,127066,127071,127076],{"__ignoreMap":14},[95,127046,127047],{"class":97,"line":98},[95,127048,127049],{"class":164},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[95,127051,127052,127054],{"class":97,"line":15},[95,127053,10],{"class":51277},[95,127055,15555],{"class":105},[95,127057,127058,127060,127062,127064],{"class":97,"line":1161},[95,127059,70882],{"class":154},[95,127061,51414],{"class":105},[95,127063,57398],{"class":154},[95,127065,1272],{"class":105},[95,127067,127068],{"class":97,"line":1176},[95,127069,127070],{"class":164},"  \u002F* color: #ff0000; *\u002F\n",[95,127072,127073],{"class":97,"line":1182},[95,127074,127075],{"class":164},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[95,127077,127078],{"class":97,"line":1196},[95,127079,1547],{"class":105},[1444,127081],{"style":126385,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[66,127084,127086],{"id":127085},"_642-对齐文本","6.4.2 对齐文本",[10,127088,127089,127090,127093],{},"text-align属于用于设置元素内文本内容的 ",[255,127091,127092],{},"水平对齐"," 方式",[10,127095,127096],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[66,127098,127100],{"id":127099},"_643-装饰文本","6.4.3 装饰文本",[10,127102,127103],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[86,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",[92,127108,127109,127115,127125,127129,127135,127146],{"__ignoreMap":14},[95,127110,127111,127113],{"class":97,"line":98},[95,127112,344],{"class":51277},[95,127114,15555],{"class":105},[95,127116,127117,127119,127121,127123],{"class":97,"line":15},[95,127118,70479],{"class":154},[95,127120,51414],{"class":105},[95,127122,54714],{"class":154},[95,127124,1272],{"class":105},[95,127126,127127],{"class":97,"line":1161},[95,127128,1547],{"class":105},[95,127130,127131,127133],{"class":97,"line":1176},[95,127132,10],{"class":51277},[95,127134,15555],{"class":105},[95,127136,127137,127139,127141,127144],{"class":97,"line":1182},[95,127138,70479],{"class":154},[95,127140,51414],{"class":105},[95,127142,127143],{"class":154},"underline",[95,127145,1272],{"class":105},[95,127147,127148],{"class":97,"line":1196},[95,127149,1547],{"class":105},[66,127151,127153],{"id":127152},"_644-文本缩进","6.4.4 文本缩进",[10,127155,127156],{},"实现文本的第一行首行缩进自己指定的距离",[10,127158,127159],{},"20px往右边走；-20px往左边走",[10,127161,127162],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[86,127164,127166],{"className":126529,"code":127165,"language":126531,"meta":14,"style":14},"p {\n  text-indent: 2em;\n}\n",[92,127167,127168,127174,127187],{"__ignoreMap":14},[95,127169,127170,127172],{"class":97,"line":98},[95,127171,10],{"class":51277},[95,127173,15555],{"class":105},[95,127175,127176,127179,127181,127183,127185],{"class":97,"line":15},[95,127177,127178],{"class":154},"  text-indent",[95,127180,51414],{"class":105},[95,127182,183],{"class":154},[95,127184,23537],{"class":101},[95,127186,1272],{"class":105},[95,127188,127189],{"class":97,"line":1161},[95,127190,1547],{"class":105},[66,127192,127194],{"id":127193},"_645-行间距","6.4.5 行间距",[10,127196,127197],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[86,127199,127201],{"className":126529,"code":127200,"language":126531,"meta":14,"style":14},"p {\n  line-height: 1.6;\n}\n",[92,127202,127203,127209,127221],{"__ignoreMap":14},[95,127204,127205,127207],{"class":97,"line":98},[95,127206,10],{"class":51277},[95,127208,15555],{"class":105},[95,127210,127211,127214,127216,127219],{"class":97,"line":15},[95,127212,127213],{"class":154},"  line-height",[95,127215,51414],{"class":105},[95,127217,127218],{"class":154},"1.6",[95,127220,1272],{"class":105},[95,127222,127223],{"class":97,"line":1161},[95,127224,1547],{"class":105},[5109,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":1161,"text":126754},{"id":126766,"depth":1161,"text":126767},{"id":126839,"depth":1161,"text":126840},{"id":126852,"depth":1161,"text":126853},{"id":126871,"depth":1161,"text":126872},{"id":126884,"depth":1161,"text":126885},{"id":126891,"depth":15,"text":126892,"children":127240},[127241,127242,127243,127244,127245],{"id":126898,"depth":1161,"text":126899},{"id":126910,"depth":1161,"text":126911},{"id":126963,"depth":1161,"text":126964},{"id":126984,"depth":1161,"text":126985},{"id":127005,"depth":1161,"text":127006},{"id":127031,"depth":15,"text":127032,"children":127247},[127248,127249,127250,127251,127252],{"id":127035,"depth":1161,"text":127036},{"id":127085,"depth":1161,"text":127086},{"id":127099,"depth":1161,"text":127100},{"id":127152,"depth":1161,"text":127153},{"id":127193,"depth":1161,"text":127194},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126703,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127259,"title":127260,"body":127261,"description":23360,"extension":18,"meta":127910,"navigation":21,"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],[33,127264,127260],{"id":127265},"_7-css引入方式与选择器进阶",[37,127267,127269],{"id":127268},"_71-css引入方式","7.1 css引入方式",[66,127271,127273],{"id":127272},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[86,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",[92,127280,127281,127289,127296,127308,127321,127326],{"__ignoreMap":14},[95,127282,127283,127285,127287],{"class":97,"line":98},[95,127284,1016],{"class":105},[95,127286,5109],{"class":51277},[95,127288,51284],{"class":105},[95,127290,127291,127294],{"class":97,"line":15},[95,127292,127293],{"class":51277},"  h1",[95,127295,15555],{"class":105},[95,127297,127298,127301,127303,127306],{"class":97,"line":1161},[95,127299,127300],{"class":154},"    color",[95,127302,51414],{"class":105},[95,127304,127305],{"class":154},"blue",[95,127307,1272],{"class":105},[95,127309,127310,127313,127315,127317,127319],{"class":97,"line":1176},[95,127311,127312],{"class":154},"    font-size",[95,127314,51414],{"class":105},[95,127316,906],{"class":154},[95,127318,51469],{"class":101},[95,127320,1272],{"class":105},[95,127322,127323],{"class":97,"line":1182},[95,127324,127325],{"class":105},"  }\n",[95,127327,127328,127330,127332],{"class":97,"line":1196},[95,127329,51762],{"class":105},[95,127331,5109],{"class":51277},[95,127333,51284],{"class":105},[10,127335,127336,26458],{},[255,127337,126617],{},[10,127339,77203,127340,127343,127344,127347],{},[92,127341,127342],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[92,127345,127346],{},"\u003Chead>","标签中",[10,127349,127350],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[10,127352,127353],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[66,127355,127357],{"id":127356},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[86,127359,127361],{"className":127276,"code":127360,"language":127278,"meta":14,"style":14},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[92,127362,127363],{"__ignoreMap":14},[95,127364,127365,127367,127369,127371,127373,127376,127379,127381],{"class":97,"line":98},[95,127366,1016],{"class":105},[95,127368,10],{"class":51277},[95,127370,62603],{"class":1945},[95,127372,151],{"class":105},[95,127374,127375],{"class":210},"\"color: red; font-size: 16px;\"",[95,127377,127378],{"class":105},">这是一个段落\u003C\u002F",[95,127380,10],{"class":51277},[95,127382,51284],{"class":105},[10,127384,127385,26458],{},[255,127386,126617],{},[10,127388,127389],{},"①style其实就是标签的属性",[10,127391,127392],{},"②在双引号中间，写法要符合css规范",[10,127394,127395],{},"③可以控制当前的标签设置样式",[10,127397,127398],{},"④书写繁琐，简单时才用",[10,127400,127401],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[66,127403,127405],{"id":127404},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[10,127407,127408],{},"使用最多，单独建一个css文件，然后html引用",[10,127410,127411],{},"①css文件部分： style.css",[86,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",[92,127416,127417,127422,127428,127438,127450],{"__ignoreMap":14},[95,127418,127419],{"class":97,"line":98},[95,127420,127421],{"class":164},"\u002F* style.css *\u002F\n",[95,127423,127424,127426],{"class":97,"line":15},[95,127425,33],{"class":51277},[95,127427,15555],{"class":105},[95,127429,127430,127432,127434,127436],{"class":97,"line":1161},[95,127431,70882],{"class":154},[95,127433,51414],{"class":105},[95,127435,127305],{"class":154},[95,127437,1272],{"class":105},[95,127439,127440,127442,127444,127446,127448],{"class":97,"line":1176},[95,127441,70603],{"class":154},[95,127443,51414],{"class":105},[95,127445,906],{"class":154},[95,127447,51469],{"class":101},[95,127449,1272],{"class":105},[95,127451,127452],{"class":97,"line":1182},[95,127453,1547],{"class":105},[10,127455,127456],{},"②html部分",[86,127458,127460],{"className":127276,"code":127459,"language":127278,"meta":14,"style":14},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[92,127461,127462],{"__ignoreMap":14},[95,127463,127464,127466,127468,127470,127472,127474,127476,127478,127481],{"class":97,"line":98},[95,127465,1016],{"class":105},[95,127467,68982],{"class":51277},[95,127469,68985],{"class":1945},[95,127471,151],{"class":105},[95,127473,68990],{"class":210},[95,127475,61034],{"class":1945},[95,127477,151],{"class":105},[95,127479,127480],{"class":210},"\"style.css\"",[95,127482,51284],{"class":105},[10,127484,127485,127488],{},[92,127486,127487],{},"\u003Chr>","水平线标签（但是不常用！）",[10,127490,127491],{},"ctrl+0回到页面原来大小",[37,127493,127495],{"id":127494},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[66,127497,127499],{"id":127498},"_721-快速生成html","7.2.1 快速生成html",[10,127501,127502,127503],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[92,127504,127505],{},"\u003Cdiv>``\u003C\u002Fdiv>",[10,127507,127508],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[10,127510,127511],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[10,127513,127514],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[10,127516,127517],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[10,127519,127520],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[10,127522,127523],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[86,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",[92,127528,127529,127534,127539,127544,127549,127554,127559,127564],{"__ignoreMap":14},[95,127530,127531],{"class":97,"line":98},[95,127532,127533],{"class":164},"\u003C!-- Emmet 语法示例 -->\n",[95,127535,127536],{"class":97,"line":15},[95,127537,127538],{"class":164},"\u003C!-- div*3        → 生成3个div -->\n",[95,127540,127541],{"class":97,"line":1161},[95,127542,127543],{"class":164},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[95,127545,127546],{"class":97,"line":1176},[95,127547,127548],{"class":164},"\u003C!-- div+p        → 兄弟div和p -->\n",[95,127550,127551],{"class":97,"line":1182},[95,127552,127553],{"class":164},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[95,127555,127556],{"class":97,"line":1196},[95,127557,127558],{"class":164},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[95,127560,127561],{"class":97,"line":1202},[95,127562,127563],{"class":164},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[95,127565,127566],{"class":97,"line":1293},[95,127567,127568],{"class":164},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[66,127570,127572],{"id":127571},"_722-快速生成css","7.2.2 快速生成css",[10,127574,127575],{},"简写开头",[10,127577,127578],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[37,127580,127582],{"id":127581},"_73-css复合选择器","7.3 css复合选择器",[66,127584,127586],{"id":127585},"_731-后代选择器","7.3.1 后代选择器",[86,127588,127590],{"className":126529,"code":127589,"language":126531,"meta":14,"style":14},".parent .child {\n  color: blue;\n}\n",[92,127591,127592,127602,127612],{"__ignoreMap":14},[95,127593,127594,127597,127600],{"class":97,"line":98},[95,127595,127596],{"class":1945},".parent",[95,127598,127599],{"class":1945}," .child",[95,127601,15555],{"class":105},[95,127603,127604,127606,127608,127610],{"class":97,"line":15},[95,127605,70882],{"class":154},[95,127607,51414],{"class":105},[95,127609,127305],{"class":154},[95,127611,1272],{"class":105},[95,127613,127614],{"class":97,"line":1161},[95,127615,1547],{"class":105},[10,127617,127618],{},"元素1 元素2 {样式声明}",[10,127620,127621],{},[255,127622,127623],{},"注意点:",[10,127625,127626],{},"①元素1和元素2中间用空格隔开",[10,127628,127629],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[10,127631,127632],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[10,127634,127635],{},"④元素1和元素2可以是任意基础选择器",[66,127637,127639],{"id":127638},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[10,127641,127642],{},[255,127643,127623],{},[10,127645,127646],{},"①元素1和元素2中间用大于号隔开",[10,127648,127629],{},[10,127650,127651],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[66,127653,127655],{"id":127654},"_733-并集选择器","7.3.3 并集选择器",[10,127657,127658],{},"元素1，元素2 {样式声明}",[10,127660,127661],{},[255,127662,127623],{},[10,127664,127665],{},"①元素1和元素2中间用逗号隔开",[10,127667,127668],{},"②逗号可以理解为和的意思",[10,127670,127671],{},"③并集选择器通常用于集体声明",[66,127673,127675],{"id":127674},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[10,127677,127678],{},[255,127679,127623],{},[10,127681,127682,127683,127685],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68982,127684],{},"－:visited－:hover－:active。",[10,127687,127688,127689,127692,127693,25725],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127690,127691],"hover",{}," 、 ",[127694,127695],"first-child",{},[10,127697,127698],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[10,127700,127701],{},"link对没访问的进行设置",[10,127703,127704],{},"vistied对已访问的进行改变",[10,127706,127707],{},"hover鼠标经过就会变",[10,127709,127710],{},"active常按(点)就会变",[86,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",[92,127715,127716,127721,127730,127740,127750,127754,127763,127774,127778,127786,127796,127806,127810,127819,127830],{"__ignoreMap":14},[95,127717,127718],{"class":97,"line":98},[95,127719,127720],{"class":164},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[95,127722,127723,127725,127728],{"class":97,"line":15},[95,127724,344],{"class":51277},[95,127726,127727],{"class":1945},":link",[95,127729,15555],{"class":105},[95,127731,127732,127734,127736,127738],{"class":97,"line":1161},[95,127733,70882],{"class":154},[95,127735,51414],{"class":105},[95,127737,62346],{"class":154},[95,127739,1272],{"class":105},[95,127741,127742,127744,127746,127748],{"class":97,"line":1176},[95,127743,70479],{"class":154},[95,127745,51414],{"class":105},[95,127747,54714],{"class":154},[95,127749,1272],{"class":105},[95,127751,127752],{"class":97,"line":1182},[95,127753,1547],{"class":105},[95,127755,127756,127758,127761],{"class":97,"line":1196},[95,127757,344],{"class":51277},[95,127759,127760],{"class":1945},":visited",[95,127762,15555],{"class":105},[95,127764,127765,127767,127769,127772],{"class":97,"line":1202},[95,127766,70882],{"class":154},[95,127768,51414],{"class":105},[95,127770,127771],{"class":154},"purple",[95,127773,1272],{"class":105},[95,127775,127776],{"class":97,"line":1293},[95,127777,1547],{"class":105},[95,127779,127780,127782,127784],{"class":97,"line":1299},[95,127781,344],{"class":51277},[95,127783,60917],{"class":1945},[95,127785,15555],{"class":105},[95,127787,127788,127790,127792,127794],{"class":97,"line":1311},[95,127789,70882],{"class":154},[95,127791,51414],{"class":105},[95,127793,54866],{"class":154},[95,127795,1272],{"class":105},[95,127797,127798,127800,127802,127804],{"class":97,"line":1594},[95,127799,70479],{"class":154},[95,127801,51414],{"class":105},[95,127803,127143],{"class":154},[95,127805,1272],{"class":105},[95,127807,127808],{"class":97,"line":1599},[95,127809,1547],{"class":105},[95,127811,127812,127814,127817],{"class":97,"line":1605},[95,127813,344],{"class":51277},[95,127815,127816],{"class":1945},":active",[95,127818,15555],{"class":105},[95,127820,127821,127823,127825,127828],{"class":97,"line":1610},[95,127822,70882],{"class":154},[95,127824,51414],{"class":105},[95,127826,127827],{"class":154},"green",[95,127829,1272],{"class":105},[95,127831,127832],{"class":97,"line":1624},[95,127833,1547],{"class":105},[66,127835,127837,127838,127841],{"id":127836},"_735-伪类选择器","7.3.5 ",[127839,127840],"focus",{},"伪类选择器",[10,127843,127844,127846,127847,127849],{},[127839,127845],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[92,127848,126590],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[86,127851,127853],{"className":126529,"code":127852,"language":126531,"meta":14,"style":14},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[92,127854,127855,127863,127874,127884],{"__ignoreMap":14},[95,127856,127857,127859,127861],{"class":97,"line":98},[95,127858,53798],{"class":51277},[95,127860,61877],{"class":1945},[95,127862,15555],{"class":105},[95,127864,127865,127868,127870,127872],{"class":97,"line":15},[95,127866,127867],{"class":154},"  border-color",[95,127869,51414],{"class":105},[95,127871,54866],{"class":154},[95,127873,1272],{"class":105},[95,127875,127876,127878,127880,127882],{"class":97,"line":1161},[95,127877,70775],{"class":154},[95,127879,51414],{"class":105},[95,127881,54714],{"class":154},[95,127883,1272],{"class":105},[95,127885,127886],{"class":97,"line":1176},[95,127887,1547],{"class":105},[5109,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":1161,"text":127273},{"id":127356,"depth":1161,"text":127357},{"id":127404,"depth":1161,"text":127405},{"id":127494,"depth":15,"text":127495,"children":127899},[127900,127901],{"id":127498,"depth":1161,"text":127499},{"id":127571,"depth":1161,"text":127572},{"id":127581,"depth":15,"text":127582,"children":127903},[127904,127905,127906,127907,127908],{"id":127585,"depth":1161,"text":127586},{"id":127638,"depth":1161,"text":127639},{"id":127654,"depth":1161,"text":127655},{"id":127674,"depth":1161,"text":127675},{"id":127836,"depth":1161,"text":127909},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127260,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127916,"title":127917,"body":127918,"description":23360,"extension":18,"meta":129841,"navigation":21,"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],[33,127921,127917],{"id":127922},"_8-css显示模式与背景特性",[37,127924,127926],{"id":127925},"_81-css元素显示模式","8.1 css元素显示模式",[10,127928,127929,127930,127932,127933,127935],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[92,127931,126140],{},"自己占一行，比如一行可以放多个",[92,127934,126143],{},"，HTML 元素一般分为块元素和行内元素两种类型",[66,127937,127939],{"id":127938},"_811-块元素","8.1.1 块元素",[10,127941,127942,127943,127945,127946,318,127949,318,127951,318,127953,318,127956,318,127959,127962,127963,127965],{},"常见的块元素有",[92,127944,126044],{},"~",[92,127947,127948],{},"\u003Ch6>",[92,127950,126070],{},[92,127952,126140],{},[92,127954,127955],{},"\u003Cul>",[92,127957,127958],{},"\u003Col>",[92,127960,127961],{},"\u003Cli>","等，其中 ",[92,127964,126140],{}," 标签是最典型的块元素",[10,127967,127968],{},[255,127969,127970],{},"块级元素的特点：",[10,127972,127973],{},"① 比较霸道，自己独占一行。",[10,127975,127976],{},"② 高度，宽度、外边距以及内边距都可以控制。",[10,127978,127979],{},"③ 宽度默认是容器（父级宽度）的100%。",[10,127981,127982],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[10,127984,127985],{},[255,127986,135],{},[10,127988,127989],{},"①文字类的元素内不能使用块级元素",[10,127991,77226,127992,127994,127995,127997,127998],{},[92,127993,126070],{}," 标签主要用于存放文字，因此 ",[92,127996,126070],{}," 里面不能放块级元素，特别是不能放",[92,127999,126140],{},[10,128001,128002,128003,127945,128005,128007],{},"⑥同理， ",[92,128004,126044],{},[92,128006,127948],{},"等都是文字类块级标签，里面也不能放其他块级元素",[66,128009,128011],{"id":128010},"_812-行内元素","8.1.2 行内元素",[10,128013,128014,128015,318,128017,318,128020,318,128023,318,128026,318,128029,318,128032,318,128035,318,128038,318,128041,128043,128044,128046],{},"常见的行内元素有 ",[92,128016,126302],{},[92,128018,128019],{},"\u003Cstrong>",[92,128021,128022],{},"\u003Cb>",[92,128024,128025],{},"\u003Cem>",[92,128027,128028],{},"\u003Ci>",[92,128030,128031],{},"\u003Cdel>",[92,128033,128034],{},"\u003Cs>",[92,128036,128037],{},"\u003Cins>",[92,128039,128040],{},"\u003Cu>",[92,128042,126143],{}," 等，其中 ",[92,128045,126143],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[10,128048,128049],{},[255,128050,128051],{},"特点：",[10,128053,128054],{},"① 相邻行内元素在一行上，一行可以显示多个。",[10,128056,128057],{},"② 高、宽直接设置是无效的。",[10,128059,128060],{},"③ 默认宽度就是它本身内容的宽度。",[10,128062,128063],{},"④ 行内元素只能容纳文本或其他行内元素。",[10,128065,128066],{},[255,128067,135],{},[10,128069,128070],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[10,128072,128073,128074,128076,128077,128079],{},"②特殊情况链接 ",[92,128075,126302],{}," 里面可以放块级元素，但是给 ",[92,128078,126302],{}," 转换一下块级模式最安全",[66,128081,128083],{"id":128082},"_813-行内块元素","8.1.3 行内块元素",[10,128085,128086,128087,318,128090,318,128093,128096],{},"在行内元素中有几个特殊的标签 —— ",[92,128088,128089],{},"\u003Cimg \u002F>",[92,128091,128092],{},"\u003Cinput \u002F>",[92,128094,128095],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[10,128098,128099],{},[255,128100,128101],{},"行内块元素的特点：",[10,128103,128104],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[10,128106,128107],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[10,128109,128110],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[66,128112,128114],{"id":128113},"_814-总结","8.1.4 总结",[1444,128116],{"style":126385,"src":128117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[66,128119,128121],{"id":128120},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[10,128123,128124],{},"①转换为块元素：display:block;",[86,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",[92,128129,128130,128135,128141,128152,128164,128176],{"__ignoreMap":14},[95,128131,128132],{"class":97,"line":98},[95,128133,128134],{"class":164},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[95,128136,128137,128139],{"class":97,"line":15},[95,128138,344],{"class":51277},[95,128140,15555],{"class":105},[95,128142,128143,128146,128148,128150],{"class":97,"line":1161},[95,128144,128145],{"class":154},"  display",[95,128147,51414],{"class":105},[95,128149,60846],{"class":154},[95,128151,1272],{"class":105},[95,128153,128154,128156,128158,128160,128162],{"class":97,"line":1176},[95,128155,70545],{"class":154},[95,128157,51414],{"class":105},[95,128159,417],{"class":154},[95,128161,51469],{"class":101},[95,128163,1272],{"class":105},[95,128165,128166,128168,128170,128172,128174],{"class":97,"line":1182},[95,128167,70765],{"class":154},[95,128169,51414],{"class":105},[95,128171,507],{"class":154},[95,128173,51469],{"class":101},[95,128175,1272],{"class":105},[95,128177,128178],{"class":97,"line":1196},[95,128179,1547],{"class":105},[10,128181,128182],{},"②转换为行内元素：display:inline;",[86,128184,128186],{"className":126529,"code":128185,"language":126531,"meta":14,"style":14},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[92,128187,128188,128193,128199,128210],{"__ignoreMap":14},[95,128189,128190],{"class":97,"line":98},[95,128191,128192],{"class":164},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[95,128194,128195,128197],{"class":97,"line":15},[95,128196,51588],{"class":51277},[95,128198,15555],{"class":105},[95,128200,128201,128203,128205,128208],{"class":97,"line":1161},[95,128202,128145],{"class":154},[95,128204,51414],{"class":105},[95,128206,128207],{"class":154},"inline",[95,128209,1272],{"class":105},[95,128211,128212],{"class":97,"line":1176},[95,128213,1547],{"class":105},[10,128215,128216],{},"③转换为行内块：display:inline-block;",[86,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",[92,128221,128222,128227,128233,128243,128255,128267],{"__ignoreMap":14},[95,128223,128224],{"class":97,"line":98},[95,128225,128226],{"class":164},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[95,128228,128229,128231],{"class":97,"line":15},[95,128230,95],{"class":51277},[95,128232,15555],{"class":105},[95,128234,128235,128237,128239,128241],{"class":97,"line":1161},[95,128236,128145],{"class":154},[95,128238,51414],{"class":105},[95,128240,72360],{"class":154},[95,128242,1272],{"class":105},[95,128244,128245,128247,128249,128251,128253],{"class":97,"line":1176},[95,128246,70545],{"class":154},[95,128248,51414],{"class":105},[95,128250,718],{"class":154},[95,128252,51469],{"class":101},[95,128254,1272],{"class":105},[95,128256,128257,128259,128261,128263,128265],{"class":97,"line":1182},[95,128258,70765],{"class":154},[95,128260,51414],{"class":105},[95,128262,1057],{"class":154},[95,128264,51469],{"class":101},[95,128266,1272],{"class":105},[95,128268,128269],{"class":97,"line":1196},[95,128270,1547],{"class":105},[66,128272,128274],{"id":128273},"_816-小米侧边栏","8.1.6 小米侧边栏",[1444,128276],{"style":126385,"src":128277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[86,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",[92,128282,128283,128288,128303,128322,128341,128360,128379,128398,128417,128436],{"__ignoreMap":14},[95,128284,128285],{"class":97,"line":98},[95,128286,128287],{"class":164},"\u003C!-- 小米侧边栏案例 -->\n",[95,128289,128290,128292,128294,128296,128298,128301],{"class":97,"line":15},[95,128291,1016],{"class":105},[95,128293,51588],{"class":51277},[95,128295,53463],{"class":1945},[95,128297,151],{"class":105},[95,128299,128300],{"class":210},"\"sidebar\"",[95,128302,51284],{"class":105},[95,128304,128305,128307,128309,128311,128313,128315,128318,128320],{"class":97,"line":1161},[95,128306,52121],{"class":105},[95,128308,344],{"class":51277},[95,128310,61034],{"class":1945},[95,128312,151],{"class":105},[95,128314,61039],{"class":210},[95,128316,128317],{"class":105},">手机 电话卡\u003C\u002F",[95,128319,344],{"class":51277},[95,128321,51284],{"class":105},[95,128323,128324,128326,128328,128330,128332,128334,128337,128339],{"class":97,"line":1176},[95,128325,52121],{"class":105},[95,128327,344],{"class":51277},[95,128329,61034],{"class":1945},[95,128331,151],{"class":105},[95,128333,61039],{"class":210},[95,128335,128336],{"class":105},">电视 盒子\u003C\u002F",[95,128338,344],{"class":51277},[95,128340,51284],{"class":105},[95,128342,128343,128345,128347,128349,128351,128353,128356,128358],{"class":97,"line":1182},[95,128344,52121],{"class":105},[95,128346,344],{"class":51277},[95,128348,61034],{"class":1945},[95,128350,151],{"class":105},[95,128352,61039],{"class":210},[95,128354,128355],{"class":105},">笔记本 平板\u003C\u002F",[95,128357,344],{"class":51277},[95,128359,51284],{"class":105},[95,128361,128362,128364,128366,128368,128370,128372,128375,128377],{"class":97,"line":1196},[95,128363,52121],{"class":105},[95,128365,344],{"class":51277},[95,128367,61034],{"class":1945},[95,128369,151],{"class":105},[95,128371,61039],{"class":210},[95,128373,128374],{"class":105},">出行 穿戴\u003C\u002F",[95,128376,344],{"class":51277},[95,128378,51284],{"class":105},[95,128380,128381,128383,128385,128387,128389,128391,128394,128396],{"class":97,"line":1202},[95,128382,52121],{"class":105},[95,128384,344],{"class":51277},[95,128386,61034],{"class":1945},[95,128388,151],{"class":105},[95,128390,61039],{"class":210},[95,128392,128393],{"class":105},">智能 路由器\u003C\u002F",[95,128395,344],{"class":51277},[95,128397,51284],{"class":105},[95,128399,128400,128402,128404,128406,128408,128410,128413,128415],{"class":97,"line":1293},[95,128401,52121],{"class":105},[95,128403,344],{"class":51277},[95,128405,61034],{"class":1945},[95,128407,151],{"class":105},[95,128409,61039],{"class":210},[95,128411,128412],{"class":105},">健康 儿童\u003C\u002F",[95,128414,344],{"class":51277},[95,128416,51284],{"class":105},[95,128418,128419,128421,128423,128425,128427,128429,128432,128434],{"class":97,"line":1299},[95,128420,52121],{"class":105},[95,128422,344],{"class":51277},[95,128424,61034],{"class":1945},[95,128426,151],{"class":105},[95,128428,61039],{"class":210},[95,128430,128431],{"class":105},">耳机 音响\u003C\u002F",[95,128433,344],{"class":51277},[95,128435,51284],{"class":105},[95,128437,128438,128440,128442],{"class":97,"line":1311},[95,128439,51762],{"class":105},[95,128441,51588],{"class":51277},[95,128443,51284],{"class":105},[86,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",[92,128448,128449,128458,128468,128481,128493,128505,128517,128527,128538,128542,128552,128563],{"__ignoreMap":14},[95,128450,128451,128454,128456],{"class":97,"line":98},[95,128452,128453],{"class":1945},".sidebar",[95,128455,1380],{"class":51277},[95,128457,15555],{"class":105},[95,128459,128460,128462,128464,128466],{"class":97,"line":15},[95,128461,128145],{"class":154},[95,128463,51414],{"class":105},[95,128465,60846],{"class":154},[95,128467,1272],{"class":105},[95,128469,128470,128472,128474,128477,128479],{"class":97,"line":1161},[95,128471,70545],{"class":154},[95,128473,51414],{"class":105},[95,128475,128476],{"class":154},"234",[95,128478,51469],{"class":101},[95,128480,1272],{"class":105},[95,128482,128483,128485,128487,128489,128491],{"class":97,"line":1176},[95,128484,70765],{"class":154},[95,128486,51414],{"class":105},[95,128488,558],{"class":154},[95,128490,51469],{"class":101},[95,128492,1272],{"class":105},[95,128494,128495,128497,128499,128501,128503],{"class":97,"line":1182},[95,128496,127213],{"class":154},[95,128498,51414],{"class":105},[95,128500,558],{"class":154},[95,128502,51469],{"class":101},[95,128504,1272],{"class":105},[95,128506,128507,128509,128511,128513,128515],{"class":97,"line":1196},[95,128508,70800],{"class":154},[95,128510,51414],{"class":105},[95,128512,1057],{"class":154},[95,128514,51469],{"class":101},[95,128516,1272],{"class":105},[95,128518,128519,128521,128523,128525],{"class":97,"line":1202},[95,128520,70882],{"class":154},[95,128522,51414],{"class":105},[95,128524,60819],{"class":154},[95,128526,1272],{"class":105},[95,128528,128529,128531,128533,128536],{"class":97,"line":1293},[95,128530,70855],{"class":154},[95,128532,51414],{"class":105},[95,128534,128535],{"class":154},"#55585a",[95,128537,1272],{"class":105},[95,128539,128540],{"class":97,"line":1299},[95,128541,1547],{"class":105},[95,128543,128544,128546,128548,128550],{"class":97,"line":1311},[95,128545,128453],{"class":1945},[95,128547,1380],{"class":51277},[95,128549,60917],{"class":1945},[95,128551,15555],{"class":105},[95,128553,128554,128556,128558,128561],{"class":97,"line":1594},[95,128555,70855],{"class":154},[95,128557,51414],{"class":105},[95,128559,128560],{"class":154},"#ff6700",[95,128562,1272],{"class":105},[95,128564,128565],{"class":97,"line":1599},[95,128566,1547],{"class":105},[1444,128568],{"style":126385,"src":128569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[10,128571,128572],{},"行高=盒子高度：实现文字的垂直居中",[10,128574,128575],{},"原理讲解：",[1444,128577],{"style":126385,"src":128578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[37,128580,128582],{"id":128581},"_82-css背景","8.2 css背景",[10,128584,128585],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[66,128587,128589],{"id":128588},"_821-背景颜色","8.2.1 背景颜色",[10,128591,128592],{},"background-color:颜色值;",[10,128594,128595],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[66,128597,128599],{"id":128598},"_822-背景图片","8.2.2 背景图片",[10,128601,128602],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[86,128604,128606],{"className":126529,"code":128605,"language":126531,"meta":14,"style":14},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[92,128607,128608,128614,128630],{"__ignoreMap":14},[95,128609,128610,128612],{"class":97,"line":98},[95,128611,51588],{"class":51277},[95,128613,15555],{"class":105},[95,128615,128616,128619,128621,128623,128625,128628],{"class":97,"line":15},[95,128617,128618],{"class":154},"  background-image",[95,128620,51414],{"class":105},[95,128622,61703],{"class":154},[95,128624,106],{"class":105},[95,128626,128627],{"class":5199},"images\u002Fbg.png",[95,128629,2701],{"class":105},[95,128631,128632],{"class":97,"line":1161},[95,128633,1547],{"class":105},[243,128635,128636,128645],{},[246,128637,128638],{},[249,128639,128640,128643],{},[252,128641,128642],{"align":23720},"参数值",[252,128644,102673],{"align":23720},[290,128646,128647,128654],{},[249,128648,128649,128651],{},[295,128650,54714],{"align":23720},[295,128652,128653],{"align":23720},"无背景图（默认的）",[249,128655,128656,128658],{},[295,128657,61703],{"align":23720},[295,128659,128660],{"align":23720},"使用绝对或相对地址指定背景图像",[86,128662,128663],{"className":126529,"code":128605,"language":126531,"meta":14,"style":14},[92,128664,128665,128671,128685],{"__ignoreMap":14},[95,128666,128667,128669],{"class":97,"line":98},[95,128668,51588],{"class":51277},[95,128670,15555],{"class":105},[95,128672,128673,128675,128677,128679,128681,128683],{"class":97,"line":15},[95,128674,128618],{"class":154},[95,128676,51414],{"class":105},[95,128678,61703],{"class":154},[95,128680,106],{"class":105},[95,128682,128627],{"class":5199},[95,128684,2701],{"class":105},[95,128686,128687],{"class":97,"line":1161},[95,128688,1547],{"class":105},[10,128690,128691],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[66,128693,128695],{"id":128694},"_823-背景平铺","8.2.3 背景平铺",[86,128697,128699],{"className":126529,"code":128698,"language":126531,"meta":14,"style":14},"div {\n  background-repeat: no-repeat;\n}\n",[92,128700,128701,128707,128718],{"__ignoreMap":14},[95,128702,128703,128705],{"class":97,"line":98},[95,128704,51588],{"class":51277},[95,128706,15555],{"class":105},[95,128708,128709,128712,128714,128716],{"class":97,"line":15},[95,128710,128711],{"class":154},"  background-repeat",[95,128713,51414],{"class":105},[95,128715,61713],{"class":154},[95,128717,1272],{"class":105},[95,128719,128720],{"class":97,"line":1161},[95,128721,1547],{"class":105},[243,128723,128724,128732],{},[246,128725,128726],{},[249,128727,128728,128730],{},[252,128729,128642],{"align":23720},[252,128731,102673],{"align":23720},[290,128733,128734,128742,128749,128757],{},[249,128735,128736,128739],{},[295,128737,128738],{"align":23720},"repeat",[295,128740,128741],{"align":23720},"背景图像在纵向和横向上平铺（默认的）",[249,128743,128744,128746],{},[295,128745,61713],{"align":23720},[295,128747,128748],{"align":23720},"背景图像不平铺",[249,128750,128751,128754],{},[295,128752,128753],{"align":23720},"repeat-x",[295,128755,128756],{"align":23720},"背景图像在横向上平铺",[249,128758,128759,128762],{},[295,128760,128761],{"align":23720},"repeat-y",[295,128763,128764],{"align":23720},"背景图像在纵向平铺",[66,128766,128768],{"id":128767},"_824-背景图片位置","8.2.4 背景图片位置",[86,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",[92,128773,128774,128779,128785,128799,128803,128808,128814,128830,128834,128839,128845,128859],{"__ignoreMap":14},[95,128775,128776],{"class":97,"line":98},[95,128777,128778],{"class":164},"\u002F* 方位名词 *\u002F\n",[95,128780,128781,128783],{"class":97,"line":15},[95,128782,51588],{"class":51277},[95,128784,15555],{"class":105},[95,128786,128787,128790,128792,128794,128797],{"class":97,"line":1161},[95,128788,128789],{"class":154},"  background-position",[95,128791,51414],{"class":105},[95,128793,51569],{"class":154},[95,128795,128796],{"class":154}," top",[95,128798,1272],{"class":105},[95,128800,128801],{"class":97,"line":1176},[95,128802,1547],{"class":105},[95,128804,128805],{"class":97,"line":1182},[95,128806,128807],{"class":164},"\u002F* 精确单位 *\u002F\n",[95,128809,128810,128812],{"class":97,"line":1196},[95,128811,51588],{"class":51277},[95,128813,15555],{"class":105},[95,128815,128816,128818,128820,128822,128824,128826,128828],{"class":97,"line":1202},[95,128817,128789],{"class":154},[95,128819,51414],{"class":105},[95,128821,806],{"class":154},[95,128823,51469],{"class":101},[95,128825,57481],{"class":154},[95,128827,51469],{"class":101},[95,128829,1272],{"class":105},[95,128831,128832],{"class":97,"line":1293},[95,128833,1547],{"class":105},[95,128835,128836],{"class":97,"line":1299},[95,128837,128838],{"class":164},"\u002F* 混合单位 *\u002F\n",[95,128840,128841,128843],{"class":97,"line":1311},[95,128842,51588],{"class":51277},[95,128844,15555],{"class":105},[95,128846,128847,128849,128851,128853,128855,128857],{"class":97,"line":1594},[95,128848,128789],{"class":154},[95,128850,51414],{"class":105},[95,128852,806],{"class":154},[95,128854,51469],{"class":101},[95,128856,17127],{"class":154},[95,128858,1272],{"class":105},[95,128860,128861],{"class":97,"line":1599},[95,128862,1547],{"class":105},[10,128864,128865],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[243,128867,128868,128876],{},[246,128869,128870],{},[249,128871,128872,128874],{},[252,128873,128642],{"align":23720},[252,128875,25854],{"align":23720},[290,128877,128878,128885],{},[249,128879,128880,128882],{},[295,128881,51945],{"align":23720},[295,128883,128884],{"align":23720},"百分数|由浮点数和单位标识符组成的长度值",[249,128886,128887,128890],{},[295,128888,128889],{"align":23720},"position",[295,128891,128892],{"align":23720},"top|center|bottom|left|center|right 方位名词",[10,128894,128895],{},"其他说明：",[10,128897,128898],{},"①参数是方位名词",[10,128900,128901],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[10,128903,128904],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[10,128906,128907],{},"②参数是精确单位",[10,128909,128910],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[10,128912,128913],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[10,128915,128916],{},"③参数是混合单位",[10,128918,128919],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[66,128921,128923],{"id":128922},"_825-背景图片固定","8.2.5 背景图片固定",[86,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",[92,128928,128929,128934,128940,128952,128956,128961,128967,128977],{"__ignoreMap":14},[95,128930,128931],{"class":97,"line":98},[95,128932,128933],{"class":164},"\u002F* 背景滚动（默认） *\u002F\n",[95,128935,128936,128938],{"class":97,"line":15},[95,128937,51588],{"class":51277},[95,128939,15555],{"class":105},[95,128941,128942,128945,128947,128950],{"class":97,"line":1161},[95,128943,128944],{"class":154},"  background-attachment",[95,128946,51414],{"class":105},[95,128948,128949],{"class":154},"scroll",[95,128951,1272],{"class":105},[95,128953,128954],{"class":97,"line":1176},[95,128955,1547],{"class":105},[95,128957,128958],{"class":97,"line":1182},[95,128959,128960],{"class":164},"\u002F* 背景固定 *\u002F\n",[95,128962,128963,128965],{"class":97,"line":1196},[95,128964,51588],{"class":51277},[95,128966,15555],{"class":105},[95,128968,128969,128971,128973,128975],{"class":97,"line":1202},[95,128970,128944],{"class":154},[95,128972,51414],{"class":105},[95,128974,86210],{"class":154},[95,128976,1272],{"class":105},[95,128978,128979],{"class":97,"line":1293},[95,128980,1547],{"class":105},[243,128982,128983,128992],{},[246,128984,128985],{},[249,128986,128987,128990],{},[252,128988,128989],{"align":23720},"参数",[252,128991,102673],{"align":23720},[290,128993,128994,129001],{},[249,128995,128996,128998],{},[295,128997,128949],{"align":23720},[295,128999,129000],{"align":23720},"背景图像是随对象内容滚动",[249,129002,129003,129005],{},[295,129004,86210],{"align":23720},[295,129006,129007],{"align":23720},"背景图像固定",[66,129009,129011],{"id":129010},"_826-背景样式合写","8.2.6 背景样式合写",[86,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",[92,129016,129017,129022,129028,129056],{"__ignoreMap":14},[95,129018,129019],{"class":97,"line":98},[95,129020,129021],{"class":164},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[95,129023,129024,129026],{"class":97,"line":15},[95,129025,51588],{"class":51277},[95,129027,15555],{"class":105},[95,129029,129030,129032,129034,129036,129039,129041,129043,129045,129047,129050,129052,129054],{"class":97,"line":1161},[95,129031,70588],{"class":154},[95,129033,51414],{"class":105},[95,129035,60819],{"class":154},[95,129037,129038],{"class":154}," url",[95,129040,106],{"class":105},[95,129042,128627],{"class":5199},[95,129044,13697],{"class":105},[95,129046,61713],{"class":154},[95,129048,129049],{"class":154}," fixed",[95,129051,17127],{"class":154},[95,129053,128796],{"class":154},[95,129055,1272],{"class":105},[95,129057,129058],{"class":97,"line":1176},[95,129059,1547],{"class":105},[66,129061,129063],{"id":129062},"_827-背景色半透明","8.2.7 背景色半透明",[86,129065,129067],{"className":126529,"code":129066,"language":126531,"meta":14,"style":14},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[92,129068,129069,129075,129101],{"__ignoreMap":14},[95,129070,129071,129073],{"class":97,"line":98},[95,129072,51588],{"class":51277},[95,129074,15555],{"class":105},[95,129076,129077,129079,129081,129083,129085,129087,129089,129091,129093,129095,129097,129099],{"class":97,"line":15},[95,129078,70588],{"class":154},[95,129080,51414],{"class":105},[95,129082,55087],{"class":154},[95,129084,106],{"class":105},[95,129086,297],{"class":154},[95,129088,12418],{"class":105},[95,129090,297],{"class":154},[95,129092,12418],{"class":105},[95,129094,297],{"class":154},[95,129096,12418],{"class":105},[95,129098,100498],{"class":154},[95,129100,2701],{"class":105},[95,129102,129103],{"class":97,"line":1161},[95,129104,1547],{"class":105},[10,129106,99373],{},[10,129108,129109],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[10,129111,129112],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[10,129114,129115],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[10,129117,129118],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[66,129120,129122],{"id":129121},"_828-总结","8.2.8 总结",[243,129124,129125,129136],{},[246,129126,129127],{},[249,129128,129129,129132,129134],{},[252,129130,129131],{"align":23720},"属性",[252,129133,102673],{"align":23720},[252,129135,258],{"align":23720},[290,129137,129138,129149,129160,129171,129182,129193,129204],{},[249,129139,129140,129143,129146],{},[295,129141,129142],{"align":23720},"background-color",[295,129144,129145],{"align":23720},"背景颜色",[295,129147,129148],{"align":23720},"预定义的颜色值\u002F十六进制\u002FRGB代码",[249,129150,129151,129154,129157],{},[295,129152,129153],{"align":23720},"background-image",[295,129155,129156],{"align":23720},"背景图片",[295,129158,129159],{"align":23720},"url(图片路径)",[249,129161,129162,129165,129168],{},[295,129163,129164],{"align":23720},"background-repeat",[295,129166,129167],{"align":23720},"是否平铺",[295,129169,129170],{"align":23720},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[249,129172,129173,129176,129179],{},[295,129174,129175],{"align":23720},"background-position",[295,129177,129178],{"align":23720},"背景位置",[295,129180,129181],{"align":23720},"length\u002Fposition 分别是x和y坐标",[249,129183,129184,129187,129190],{},[295,129185,129186],{"align":23720},"background-attachment",[295,129188,129189],{"align":23720},"背景附着",[295,129191,129192],{"align":23720},"scroll(背景滚动) \u002Ffixed (背景固定)",[249,129194,129195,129198,129201],{},[295,129196,129197],{"align":23720},"背景简写",[295,129199,129200],{"align":23720},"书写更简单",[295,129202,129203],{"align":23720},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[249,129205,129206,129209,129212],{},[295,129207,129208],{"align":23720},"背景半透明",[295,129210,129211],{"align":23720},"背景颜色半透明",[295,129213,129214],{"align":23720},"background: rgba(0,0,0.3); 后面必须是4个值",[10,129216,129217],{},"颜色渐变：",[1444,129219],{"style":126385,"src":129220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1444,129222],{"style":126385,"src":129223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[66,129225,129227],{"id":129226},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[86,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",[92,129232,129233,129248,129267,129286,129305,129324,129343],{"__ignoreMap":14},[95,129234,129235,129237,129239,129241,129243,129246],{"class":97,"line":98},[95,129236,1016],{"class":105},[95,129238,51588],{"class":51277},[95,129240,53463],{"class":1945},[95,129242,151],{"class":105},[95,129244,129245],{"class":210},"\"nav\"",[95,129247,51284],{"class":105},[95,129249,129250,129252,129254,129256,129258,129260,129263,129265],{"class":97,"line":15},[95,129251,52121],{"class":105},[95,129253,344],{"class":51277},[95,129255,61034],{"class":1945},[95,129257,151],{"class":105},[95,129259,61039],{"class":210},[95,129261,129262],{"class":105},">五彩导航1\u003C\u002F",[95,129264,344],{"class":51277},[95,129266,51284],{"class":105},[95,129268,129269,129271,129273,129275,129277,129279,129282,129284],{"class":97,"line":1161},[95,129270,52121],{"class":105},[95,129272,344],{"class":51277},[95,129274,61034],{"class":1945},[95,129276,151],{"class":105},[95,129278,61039],{"class":210},[95,129280,129281],{"class":105},">五彩导航2\u003C\u002F",[95,129283,344],{"class":51277},[95,129285,51284],{"class":105},[95,129287,129288,129290,129292,129294,129296,129298,129301,129303],{"class":97,"line":1176},[95,129289,52121],{"class":105},[95,129291,344],{"class":51277},[95,129293,61034],{"class":1945},[95,129295,151],{"class":105},[95,129297,61039],{"class":210},[95,129299,129300],{"class":105},">五彩导航3\u003C\u002F",[95,129302,344],{"class":51277},[95,129304,51284],{"class":105},[95,129306,129307,129309,129311,129313,129315,129317,129320,129322],{"class":97,"line":1182},[95,129308,52121],{"class":105},[95,129310,344],{"class":51277},[95,129312,61034],{"class":1945},[95,129314,151],{"class":105},[95,129316,61039],{"class":210},[95,129318,129319],{"class":105},">五彩导航4\u003C\u002F",[95,129321,344],{"class":51277},[95,129323,51284],{"class":105},[95,129325,129326,129328,129330,129332,129334,129336,129339,129341],{"class":97,"line":1196},[95,129327,52121],{"class":105},[95,129329,344],{"class":51277},[95,129331,61034],{"class":1945},[95,129333,151],{"class":105},[95,129335,61039],{"class":210},[95,129337,129338],{"class":105},">五彩导航5\u003C\u002F",[95,129340,344],{"class":51277},[95,129342,51284],{"class":105},[95,129344,129345,129347,129349],{"class":97,"line":1202},[95,129346,51762],{"class":105},[95,129348,51588],{"class":51277},[95,129350,51284],{"class":105},[86,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",[92,129355,129356,129365,129375,129387,129399,129409,129421,129431,129435,129460,129483,129506,129529],{"__ignoreMap":14},[95,129357,129358,129361,129363],{"class":97,"line":98},[95,129359,129360],{"class":1945},".nav",[95,129362,1380],{"class":51277},[95,129364,15555],{"class":105},[95,129366,129367,129369,129371,129373],{"class":97,"line":15},[95,129368,128145],{"class":154},[95,129370,51414],{"class":105},[95,129372,72360],{"class":154},[95,129374,1272],{"class":105},[95,129376,129377,129379,129381,129383,129385],{"class":97,"line":1161},[95,129378,70545],{"class":154},[95,129380,51414],{"class":105},[95,129382,923],{"class":154},[95,129384,51469],{"class":101},[95,129386,1272],{"class":105},[95,129388,129389,129391,129393,129395,129397],{"class":97,"line":1176},[95,129390,70765],{"class":154},[95,129392,51414],{"class":105},[95,129394,962],{"class":154},[95,129396,51469],{"class":101},[95,129398,1272],{"class":105},[95,129400,129401,129403,129405,129407],{"class":97,"line":1182},[95,129402,70503],{"class":154},[95,129404,51414],{"class":105},[95,129406,51569],{"class":154},[95,129408,1272],{"class":105},[95,129410,129411,129413,129415,129417,129419],{"class":97,"line":1196},[95,129412,127213],{"class":154},[95,129414,51414],{"class":105},[95,129416,962],{"class":154},[95,129418,51469],{"class":101},[95,129420,1272],{"class":105},[95,129422,129423,129425,129427,129429],{"class":97,"line":1202},[95,129424,70882],{"class":154},[95,129426,51414],{"class":105},[95,129428,60819],{"class":154},[95,129430,1272],{"class":105},[95,129432,129433],{"class":97,"line":1293},[95,129434,1547],{"class":105},[95,129436,129437,129439,129441,129444,129446,129448,129451,129453,129455,129457],{"class":97,"line":1299},[95,129438,129360],{"class":1945},[95,129440,1380],{"class":51277},[95,129442,129443],{"class":1945},":nth-child",[95,129445,106],{"class":105},[95,129447,323],{"class":154},[95,129449,129450],{"class":105},") { ",[95,129452,129142],{"class":154},[95,129454,51414],{"class":105},[95,129456,128560],{"class":154},[95,129458,129459],{"class":105},"; }\n",[95,129461,129462,129464,129466,129468,129470,129472,129474,129476,129478,129481],{"class":97,"line":1311},[95,129463,129360],{"class":1945},[95,129465,1380],{"class":51277},[95,129467,129443],{"class":1945},[95,129469,106],{"class":105},[95,129471,183],{"class":154},[95,129473,129450],{"class":105},[95,129475,129142],{"class":154},[95,129477,51414],{"class":105},[95,129479,129480],{"class":154},"#ff0000",[95,129482,129459],{"class":105},[95,129484,129485,129487,129489,129491,129493,129495,129497,129499,129501,129504],{"class":97,"line":1594},[95,129486,129360],{"class":1945},[95,129488,1380],{"class":51277},[95,129490,129443],{"class":1945},[95,129492,106],{"class":105},[95,129494,177],{"class":154},[95,129496,129450],{"class":105},[95,129498,129142],{"class":154},[95,129500,51414],{"class":105},[95,129502,129503],{"class":154},"#00a4ff",[95,129505,129459],{"class":105},[95,129507,129508,129510,129512,129514,129516,129518,129520,129522,129524,129527],{"class":97,"line":1599},[95,129509,129360],{"class":1945},[95,129511,1380],{"class":51277},[95,129513,129443],{"class":1945},[95,129515,106],{"class":105},[95,129517,399],{"class":154},[95,129519,129450],{"class":105},[95,129521,129142],{"class":154},[95,129523,51414],{"class":105},[95,129525,129526],{"class":154},"#ff00ff",[95,129528,129459],{"class":105},[95,129530,129531,129533,129535,129537,129539,129541,129543,129545,129547,129550],{"class":97,"line":1605},[95,129532,129360],{"class":1945},[95,129534,1380],{"class":51277},[95,129536,129443],{"class":1945},[95,129538,106],{"class":105},[95,129540,425],{"class":154},[95,129542,129450],{"class":105},[95,129544,129142],{"class":154},[95,129546,51414],{"class":105},[95,129548,129549],{"class":154},"#00ff00",[95,129551,129459],{"class":105},[37,129553,129555],{"id":129554},"_83-css三大特性","8.3 css三大特性",[66,129557,129559],{"id":129558},"_831-层叠性","8.3.1 层叠性",[10,129561,129562],{},"为了解决样式冲突问题",[10,129564,129565],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[10,129567,129568],{},"   ②样式不冲突，不会层叠",[66,129570,129572],{"id":129571},"_832-继承性","8.3.2 继承性",[10,129574,129575],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[10,129577,129578],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[86,129580,129582],{"className":126529,"code":129581,"language":126531,"meta":14,"style":14},"p {\n  color: #333;\n}\n",[92,129583,129584,129590,129600],{"__ignoreMap":14},[95,129585,129586,129588],{"class":97,"line":98},[95,129587,10],{"class":51277},[95,129589,15555],{"class":105},[95,129591,129592,129594,129596,129598],{"class":97,"line":15},[95,129593,70882],{"class":154},[95,129595,51414],{"class":105},[95,129597,62346],{"class":154},[95,129599,1272],{"class":105},[95,129601,129602],{"class":97,"line":1161},[95,129603,1547],{"class":105},[1444,129605],{"style":126385,"src":129606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[10,129608,129609],{},"解释：①行高可以跟单位也可以不跟单位",[10,129611,129612],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[10,129614,129615],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[10,129617,129618],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[66,129620,129622],{"id":129621},"_833-优先级","8.3.3 优先级",[49,129624,129625,129628],{},[52,129626,129627],{},"选择器相同，则执行层叠性",[52,129629,129630],{},"选择器不同，则根据选择器权重执行",[243,129632,129633,129643],{},[246,129634,129635],{},[249,129636,129637,129640],{},[252,129638,129639],{"align":23720},"选择器",[252,129641,129642],{"align":23720},"选择器权重",[290,129644,129645,129653,129661,129669,129677,129685],{},[249,129646,129647,129650],{},[295,129648,129649],{"align":23720},"继承 或者*",[295,129651,129652],{"align":23720},"0，0，0，0",[249,129654,129655,129658],{},[295,129656,129657],{"align":23720},"标签选择器",[295,129659,129660],{"align":23720},"0，0，0，1",[249,129662,129663,129666],{},[295,129664,129665],{"align":23720},"类选择器，伪类选择器",[295,129667,129668],{"align":23720},"0，0，1，0",[249,129670,129671,129674],{},[295,129672,129673],{"align":23720},"ID选择器",[295,129675,129676],{"align":23720},"0，1，0，0",[249,129678,129679,129682],{},[295,129680,129681],{"align":23720},"行内样式",[295,129683,129684],{"align":23720},"1，0，0，0",[249,129686,129687,129690],{},[295,129688,129689],{"align":23720},"！important",[295,129691,129692],{"align":23720},"无穷大",[10,129694,129695],{},"! important用法：",[86,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",[92,129700,129701,129706,129712,129725,129729,129734,129740,129750],{"__ignoreMap":14},[95,129702,129703],{"class":97,"line":98},[95,129704,129705],{"class":164},"\u002F* !important 拥有最高优先级 *\u002F\n",[95,129707,129708,129710],{"class":97,"line":15},[95,129709,51588],{"class":51277},[95,129711,15555],{"class":105},[95,129713,129714,129716,129718,129720,129723],{"class":97,"line":1161},[95,129715,70882],{"class":154},[95,129717,51414],{"class":105},[95,129719,51622],{"class":154},[95,129721,129722],{"class":101}," !important",[95,129724,1272],{"class":105},[95,129726,129727],{"class":97,"line":1176},[95,129728,1547],{"class":105},[95,129730,129731],{"class":97,"line":1182},[95,129732,129733],{"class":164},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[95,129735,129736,129738],{"class":97,"line":1196},[95,129737,51588],{"class":51277},[95,129739,15555],{"class":105},[95,129741,129742,129744,129746,129748],{"class":97,"line":1202},[95,129743,70882],{"class":154},[95,129745,51414],{"class":105},[95,129747,57398],{"class":154},[95,129749,1272],{"class":105},[95,129751,129752],{"class":97,"line":1293},[95,129753,1547],{"class":105},[10,129755,129756],{},"优先级注意点：",[10,129758,129759],{},"①权重是有4组数字组成,但是不会有进位",[10,129761,129762],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[10,129764,129765],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[10,129767,129768],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[10,129770,129771],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[10,129773,129774],{},"⑥复合选择器",[243,129776,129777,129787],{},[246,129778,129779],{},[249,129780,129781,129784],{},[252,129782,129783],{"align":23720},"div ul li",[252,129785,129786],{"align":23720},"0,0,0,3",[290,129788,129789,129797,129805],{},[249,129790,129791,129794],{},[295,129792,129793],{"align":23720},".nav ul li",[295,129795,129796],{"align":23720},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[249,129798,129799,129802],{},[295,129800,129801],{"align":23720},"a:hover",[295,129803,129804],{"align":23720},"0,0,1,1",[249,129806,129807,129810],{},[295,129808,129809],{"align":23720},".nav a",[295,129811,129804],{"align":23720},[5109,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":1161,"text":127939},{"id":128010,"depth":1161,"text":128011},{"id":128082,"depth":1161,"text":128083},{"id":128113,"depth":1161,"text":128114},{"id":128120,"depth":1161,"text":128121},{"id":128273,"depth":1161,"text":128274},{"id":128581,"depth":15,"text":128582,"children":129826},[129827,129828,129829,129830,129831,129832,129833,129834,129835],{"id":128588,"depth":1161,"text":128589},{"id":128598,"depth":1161,"text":128599},{"id":128694,"depth":1161,"text":128695},{"id":128767,"depth":1161,"text":128768},{"id":128922,"depth":1161,"text":128923},{"id":129010,"depth":1161,"text":129011},{"id":129062,"depth":1161,"text":129063},{"id":129121,"depth":1161,"text":129122},{"id":129226,"depth":1161,"text":129227},{"id":129554,"depth":15,"text":129555,"children":129837},[129838,129839,129840],{"id":129558,"depth":1161,"text":129559},{"id":129571,"depth":1161,"text":129572},{"id":129621,"depth":1161,"text":129622},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127917,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129847,"title":129848,"body":129849,"description":23360,"extension":18,"meta":131439,"navigation":21,"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],[33,129852,129848],{"id":129853},"_9-css盒模型浮动与切图",[37,129855,129857],{"id":129856},"_91-盒子模型","9.1 盒子模型",[10,129859,129860],{},"利用盒子来设计网页",[10,129862,129863],{},"盒子包含：边框、外边距、内边距、实际内容",[10,129865,129866],{},"网页布局设置：",[10,129868,129869],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[10,129871,129872],{},"②利用css设置好盒子样式，然后摆放到相应位置",[10,129874,129875],{},"③往盒子里装内容",[1444,129877],{"style":126385,"src":129878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[66,129880,129882],{"id":129881},"_911-边框border","9.1.1 边框（border）",[49,129884,129885,129888],{},[52,129886,129887],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[52,129889,129890],{},"语法",[86,129892,129894],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[92,129895,129896,129901,129907,129924],{"__ignoreMap":14},[95,129897,129898],{"class":97,"line":98},[95,129899,129900],{"class":164},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[95,129902,129903,129905],{"class":97,"line":15},[95,129904,51588],{"class":51277},[95,129906,15555],{"class":105},[95,129908,129909,129911,129913,129915,129917,129919,129922],{"class":97,"line":1161},[95,129910,70873],{"class":154},[95,129912,51414],{"class":105},[95,129914,323],{"class":154},[95,129916,51469],{"class":101},[95,129918,51498],{"class":154},[95,129920,129921],{"class":154}," #ccc",[95,129923,1272],{"class":105},[95,129925,129926],{"class":97,"line":1176},[95,129927,1547],{"class":105},[243,129929,129930,129938],{},[246,129931,129932],{},[249,129933,129934,129936],{},[252,129935,129131],{"align":23720},[252,129937,102673],{"align":23720},[290,129939,129940,129948,129956],{},[249,129941,129942,129945],{},[295,129943,129944],{"align":23720},"border-width",[295,129946,129947],{"align":23720},"定义边框粗细，单位是px",[249,129949,129950,129953],{},[295,129951,129952],{"align":23720},"border-style",[295,129954,129955],{"align":23720},"边框的样式",[249,129957,129958,129961],{},[295,129959,129960],{"align":23720},"border-color",[295,129962,129963],{"align":23720},"边框的颜色",[10,129965,129966],{},"边框样式 border-style 可以设置如下值：",[1113,129968,129969,129972,129975,129978],{},[52,129970,129971],{},"none：没有边框即忽略所有边框的宽度（默认值）",[52,129973,129974],{},"solid：边框为单实线(最为常用的)",[52,129976,129977],{},"dashed：边框为虚线",[52,129979,129980],{},"dotted：边框为点线",[49,129982,129983],{"start":1161},[52,129984,129985],{},"边框的合写分写",[86,129987,129988],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[92,129989,129990,129994,130000,130016],{"__ignoreMap":14},[95,129991,129992],{"class":97,"line":98},[95,129993,129900],{"class":164},[95,129995,129996,129998],{"class":97,"line":15},[95,129997,51588],{"class":51277},[95,129999,15555],{"class":105},[95,130001,130002,130004,130006,130008,130010,130012,130014],{"class":97,"line":1161},[95,130003,70873],{"class":154},[95,130005,51414],{"class":105},[95,130007,323],{"class":154},[95,130009,51469],{"class":101},[95,130011,51498],{"class":154},[95,130013,129921],{"class":154},[95,130015,1272],{"class":105},[95,130017,130018],{"class":97,"line":1176},[95,130019,1547],{"class":105},[10,130021,130022],{},"边框分开写法：",[86,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",[92,130027,130028,130033,130039,130057,130075,130094,130112],{"__ignoreMap":14},[95,130029,130030],{"class":97,"line":98},[95,130031,130032],{"class":164},"\u002F* 边框分开写法 *\u002F\n",[95,130034,130035,130037],{"class":97,"line":15},[95,130036,51588],{"class":51277},[95,130038,15555],{"class":105},[95,130040,130041,130044,130046,130048,130050,130052,130055],{"class":97,"line":1161},[95,130042,130043],{"class":154},"  border-top",[95,130045,51414],{"class":105},[95,130047,323],{"class":154},[95,130049,51469],{"class":101},[95,130051,51498],{"class":154},[95,130053,130054],{"class":154}," #000",[95,130056,1272],{"class":105},[95,130058,130059,130062,130064,130066,130068,130070,130073],{"class":97,"line":1176},[95,130060,130061],{"class":154},"  border-right",[95,130063,51414],{"class":105},[95,130065,183],{"class":154},[95,130067,51469],{"class":101},[95,130069,62218],{"class":154},[95,130071,130072],{"class":154}," #333",[95,130074,1272],{"class":105},[95,130076,130077,130080,130082,130084,130086,130089,130092],{"class":97,"line":1182},[95,130078,130079],{"class":154},"  border-bottom",[95,130081,51414],{"class":105},[95,130083,177],{"class":154},[95,130085,51469],{"class":101},[95,130087,130088],{"class":154}," dotted",[95,130090,130091],{"class":154}," #666",[95,130093,1272],{"class":105},[95,130095,130096,130099,130101,130103,130105,130107,130110],{"class":97,"line":1196},[95,130097,130098],{"class":154},"  border-left",[95,130100,51414],{"class":105},[95,130102,323],{"class":154},[95,130104,51469],{"class":101},[95,130106,51498],{"class":154},[95,130108,130109],{"class":154}," #999",[95,130111,1272],{"class":105},[95,130113,130114],{"class":97,"line":1202},[95,130115,1547],{"class":105},[49,130117,130118],{"start":1176},[52,130119,130120],{},"表格的细线边框",[10,130122,130123],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[86,130125,130127],{"className":126529,"code":130126,"language":126531,"meta":14,"style":14},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[92,130128,130129,130134,130140,130150],{"__ignoreMap":14},[95,130130,130131],{"class":97,"line":98},[95,130132,130133],{"class":164},"\u002F* 表格细线边框合并 *\u002F\n",[95,130135,130136,130138],{"class":97,"line":15},[95,130137,243],{"class":51277},[95,130139,15555],{"class":105},[95,130141,130142,130144,130146,130148],{"class":97,"line":1161},[95,130143,70555],{"class":154},[95,130145,51414],{"class":105},[95,130147,65012],{"class":154},[95,130149,1272],{"class":105},[95,130151,130152],{"class":97,"line":1176},[95,130153,1547],{"class":105},[10,130155,130156],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[49,130158,130159],{"start":1182},[52,130160,130161],{},"解决边框额外增加盒子的实际大小的方法：",[1113,130163,130164,130167],{},[52,130165,130166],{},"测量盒子大小的时候,不量边框",[52,130168,130169],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[66,130171,130173],{"id":130172},"_912-内边距","9.1.2 内边距",[49,130175,130176,130179],{},[52,130177,130178],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[52,130180,129890],{},[243,130182,130183,130193],{},[246,130184,130185],{},[249,130186,130187,130190],{},[252,130188,130189],{"align":23720},"值的个数",[252,130191,130192],{"align":23720},"表达意思",[290,130194,130195,130203,130211,130219],{},[249,130196,130197,130200],{},[295,130198,130199],{"align":23720},"padding: 5px;",[295,130201,130202],{"align":23720},"1个值，代表上下左右都有5个元素",[249,130204,130205,130208],{},[295,130206,130207],{"align":23720},"padding: 5px 10px;",[295,130209,130210],{"align":23720},"2个值，代表上下内边距为5像素，左右内边距为10像素",[249,130212,130213,130216],{},[295,130214,130215],{"align":23720},"padding: 5px 10px 20px;",[295,130217,130218],{"align":23720},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[249,130220,130221,130224],{},[295,130222,130223],{"align":23720},"padding: 5px 10px 20px 30px;",[295,130225,130226],{"align":23720},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[243,130228,130229,130237],{},[246,130230,130231],{},[249,130232,130233,130235],{},[252,130234,129131],{"align":23720},[252,130236,102673],{"align":23720},[290,130238,130239,130247,130255,130263],{},[249,130240,130241,130244],{},[295,130242,130243],{"align":23720},"padding-left",[295,130245,130246],{"align":23720},"左内边距",[249,130248,130249,130252],{},[295,130250,130251],{"align":23720},"padding-right",[295,130253,130254],{"align":23720},"右内边距",[249,130256,130257,130260],{},[295,130258,130259],{"align":23720},"padding-top",[295,130261,130262],{"align":23720},"上内边距",[249,130264,130265,130268],{},[295,130266,130267],{"align":23720},"padding-bottom",[295,130269,130270],{"align":23720},"下内边距",[49,130272,130273],{"start":1161},[52,130274,130275],{},"内边距会影响盒子的实际大小",[10,130277,130278],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[10,130280,130281],{},"①内容和边框有了距离，添加了内边距",[10,130283,130284],{},"②padding影响了盒子实际大小",[10,130286,130287],{},"内边距对盒子大小的影响：",[10,130289,130290],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[10,130292,130293],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[10,130295,95197],{},[10,130297,130298],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[66,130300,130302],{"id":130301},"_913-外边距","9.1.3 外边距",[49,130304,130305],{},[52,130306,130307],{},"控制盒子与盒子之间的距离",[243,130309,130310,130318],{},[246,130311,130312],{},[249,130313,130314,130316],{},[252,130315,129131],{"align":23720},[252,130317,102673],{"align":23720},[290,130319,130320,130328,130336,130344],{},[249,130321,130322,130325],{},[295,130323,130324],{"align":23720},"margin-left",[295,130326,130327],{"align":23720},"左外边距",[249,130329,130330,130333],{},[295,130331,130332],{"align":23720},"margin-right",[295,130334,130335],{"align":23720},"右外边距",[249,130337,130338,130341],{},[295,130339,130340],{"align":23720},"margin-top",[295,130342,130343],{"align":23720},"上外边距",[249,130345,130346,130349],{},[295,130347,130348],{"align":23720},"margin-bottom",[295,130350,130351],{"align":23720},"下外边距",[49,130353,130354],{"start":15},[52,130355,130356],{},"外边距可以让块级盒子水平居中的两个条件：",[10,130358,130359],{},"①盒子必须指定了宽度（width）",[10,130361,130362],{},"②盒子左右的外边距都设置为 auto",[86,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",[92,130367,130368,130373,130380,130396],{"__ignoreMap":14},[95,130369,130370],{"class":97,"line":98},[95,130371,130372],{"class":164},"\u002F* margin 复合写法（同上） *\u002F\n",[95,130374,130375,130378],{"class":97,"line":15},[95,130376,130377],{"class":1945},".box",[95,130379,15555],{"class":105},[95,130381,130382,130384,130386,130388,130390,130393],{"class":97,"line":1161},[95,130383,70447],{"class":154},[95,130385,51414],{"class":105},[95,130387,297],{"class":154},[95,130389,51533],{"class":154},[95,130391,130392],{"class":105},";  ",[95,130394,130395],{"class":164},"\u002F* 块级盒子水平居中 *\u002F\n",[95,130397,130398],{"class":97,"line":1176},[95,130399,1547],{"class":105},[49,130401,130402],{"start":1161},[52,130403,130404],{},"外边距塌陷问题",[10,130406,130407],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1444,130409],{"style":126385,"src":130410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[10,130412,130413],{},"解决方案：",[10,130415,130416],{},"①可以为父亲元素定义上边距",[86,130418,130419],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[92,130420,130421,130425,130431,130445],{"__ignoreMap":14},[95,130422,130423],{"class":97,"line":98},[95,130424,130372],{"class":164},[95,130426,130427,130429],{"class":97,"line":15},[95,130428,130377],{"class":1945},[95,130430,15555],{"class":105},[95,130432,130433,130435,130437,130439,130441,130443],{"class":97,"line":1161},[95,130434,70447],{"class":154},[95,130436,51414],{"class":105},[95,130438,297],{"class":154},[95,130440,51533],{"class":154},[95,130442,130392],{"class":105},[95,130444,130395],{"class":164},[95,130446,130447],{"class":97,"line":1176},[95,130448,1547],{"class":105},[10,130450,130451],{},"②可以为父亲元素定义上内边距",[10,130453,130454],{},"③可以为父亲元素添加overflow:hidden",[1444,130456],{"style":126385,"src":130457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[86,130459,130460],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[92,130461,130462,130466,130472,130486],{"__ignoreMap":14},[95,130463,130464],{"class":97,"line":98},[95,130465,130372],{"class":164},[95,130467,130468,130470],{"class":97,"line":15},[95,130469,130377],{"class":1945},[95,130471,15555],{"class":105},[95,130473,130474,130476,130478,130480,130482,130484],{"class":97,"line":1161},[95,130475,70447],{"class":154},[95,130477,51414],{"class":105},[95,130479,297],{"class":154},[95,130481,51533],{"class":154},[95,130483,130392],{"class":105},[95,130485,130395],{"class":164},[95,130487,130488],{"class":97,"line":1176},[95,130489,1547],{"class":105},[1444,130491],{"style":126385,"src":130492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[10,130494,130495],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[10,130497,130498],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[66,130500,130502],{"id":130501},"_914-清除内外边距","9.1.4 清除内外边距",[10,130504,130505],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[86,130507,130508],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[92,130509,130510,130514,130520,130534],{"__ignoreMap":14},[95,130511,130512],{"class":97,"line":98},[95,130513,130372],{"class":164},[95,130515,130516,130518],{"class":97,"line":15},[95,130517,130377],{"class":1945},[95,130519,15555],{"class":105},[95,130521,130522,130524,130526,130528,130530,130532],{"class":97,"line":1161},[95,130523,70447],{"class":154},[95,130525,51414],{"class":105},[95,130527,297],{"class":154},[95,130529,51533],{"class":154},[95,130531,130392],{"class":105},[95,130533,130395],{"class":164},[95,130535,130536],{"class":97,"line":1176},[95,130537,1547],{"class":105},[10,130539,130540],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[66,130542,130544],{"id":130543},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1113,130546,130547,130550,130553,130556,130559,130562],{},[52,130548,130549],{},"文件→打开 ：可以打开我们要测量的图片",[52,130551,130552],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[52,130554,130555],{},"右击标尺，把里面的单位改为像素",[52,130557,130558],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[52,130560,130561],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[52,130563,130564],{},"用选区拖动 可以测量大小",[1444,130566],{"style":126385,"src":130567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1113,130569,130570,130573],{},[52,130571,130572],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[52,130574,130575],{},"吸管取色工具",[1444,130577],{"style":126385,"src":130578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[66,130580,130582],{"id":130581},"_916-案例","9.1.6 案例",[49,130584,130585],{},[52,130586,130587],{},"小米商品",[1444,130589],{"style":126385,"src":130590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[86,130592,130593],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[92,130594,130595,130599,130605,130619],{"__ignoreMap":14},[95,130596,130597],{"class":97,"line":98},[95,130598,130372],{"class":164},[95,130600,130601,130603],{"class":97,"line":15},[95,130602,130377],{"class":1945},[95,130604,15555],{"class":105},[95,130606,130607,130609,130611,130613,130615,130617],{"class":97,"line":1161},[95,130608,70447],{"class":154},[95,130610,51414],{"class":105},[95,130612,297],{"class":154},[95,130614,51533],{"class":154},[95,130616,130392],{"class":105},[95,130618,130395],{"class":164},[95,130620,130621],{"class":97,"line":1176},[95,130622,1547],{"class":105},[49,130624,130625],{"start":15},[52,130626,130627],{},"快报模块",[1444,130629],{"style":126385,"src":130630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[86,130632,130634],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[92,130635,130636,130641,130656,130661],{"__ignoreMap":14},[95,130637,130638],{"class":97,"line":98},[95,130639,130640],{"class":164},"\u003C!-- HTML 代码示例 -->\n",[95,130642,130643,130645,130647,130649,130651,130654],{"class":97,"line":15},[95,130644,1016],{"class":105},[95,130646,51588],{"class":51277},[95,130648,53463],{"class":1945},[95,130650,151],{"class":105},[95,130652,130653],{"class":210},"\"example\"",[95,130655,51284],{"class":105},[95,130657,130658],{"class":97,"line":1161},[95,130659,130660],{"class":105},"  示例内容\n",[95,130662,130663,130665,130667],{"class":97,"line":1176},[95,130664,51762],{"class":105},[95,130666,51588],{"class":51277},[95,130668,51284],{"class":105},[66,130670,130672],{"id":130671},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[49,130674,130675],{},[52,130676,130677],{},"圆角边框",[10,130679,130680],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1444,130682],{"style":126385,"src":130683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[86,130685,130687],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},"div {\n  border: 1px solid #ccc;\n}\n",[92,130688,130689,130695,130711],{"__ignoreMap":14},[95,130690,130691,130693],{"class":97,"line":98},[95,130692,51588],{"class":51277},[95,130694,15555],{"class":105},[95,130696,130697,130699,130701,130703,130705,130707,130709],{"class":97,"line":15},[95,130698,70873],{"class":154},[95,130700,51414],{"class":105},[95,130702,323],{"class":154},[95,130704,51469],{"class":101},[95,130706,51498],{"class":154},[95,130708,129921],{"class":154},[95,130710,1272],{"class":105},[95,130712,130713],{"class":97,"line":1161},[95,130714,1547],{"class":105},[10,130716,130717],{},"解释:",[1113,130719,130720,130723,130726,130729,130732],{},[52,130721,130722],{},"参数值可以为数值或百分比的形式",[52,130724,130725],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[52,130727,130728],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[52,130730,130731],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[52,130733,130734],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[49,130736,130737],{"start":15},[52,130738,130739],{},"盒子阴影",[86,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",[92,130744,130745,130751,130788],{"__ignoreMap":14},[95,130746,130747,130749],{"class":97,"line":98},[95,130748,51588],{"class":51277},[95,130750,15555],{"class":105},[95,130752,130753,130756,130758,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786],{"class":97,"line":15},[95,130754,130755],{"class":154},"  box-shadow",[95,130757,51414],{"class":105},[95,130759,297],{"class":154},[95,130761,14738],{"class":154},[95,130763,51469],{"class":101},[95,130765,2020],{"class":154},[95,130767,51469],{"class":101},[95,130769,78744],{"class":154},[95,130771,106],{"class":105},[95,130773,297],{"class":154},[95,130775,12418],{"class":105},[95,130777,297],{"class":154},[95,130779,12418],{"class":105},[95,130781,297],{"class":154},[95,130783,12418],{"class":105},[95,130785,86187],{"class":154},[95,130787,2701],{"class":105},[95,130789,130790],{"class":97,"line":1161},[95,130791,1547],{"class":105},[243,130793,130794,130802],{},[246,130795,130796],{},[249,130797,130798,130800],{},[252,130799,258],{"align":23720},[252,130801,27474],{"align":23720},[290,130803,130804,130812,130820,130828,130836,130844],{},[249,130805,130806,130809],{},[295,130807,130808],{"align":23720},"h-shadow",[295,130810,130811],{"align":23720},"必需,水平阴影的位置,允许负值",[249,130813,130814,130817],{},[295,130815,130816],{"align":23720},"v-shadow",[295,130818,130819],{"align":23720},"必需,垂直阴影的位置,允许负值",[249,130821,130822,130825],{},[295,130823,130824],{"align":23720},"blur",[295,130826,130827],{"align":23720},"可选,模糊距离,就是影子的虚实",[249,130829,130830,130833],{},[295,130831,130832],{"align":23720},"spread",[295,130834,130835],{"align":23720},"可选,阴影尺寸",[249,130837,130838,130841],{},[295,130839,130840],{"align":23720},"color",[295,130842,130843],{"align":23720},"可选,阴影的颜色",[249,130845,130846,130849],{},[295,130847,130848],{"align":23720},"inset",[295,130850,130851],{"align":23720},"可选,将外部阴影(outset)改为内部阴影",[49,130853,130854],{"start":1161},[52,130855,130856],{},"文字阴影",[86,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",[92,130861,130862,130868,130907],{"__ignoreMap":14},[95,130863,130864,130866],{"class":97,"line":98},[95,130865,10],{"class":51277},[95,130867,15555],{"class":105},[95,130869,130870,130873,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905],{"class":97,"line":15},[95,130871,130872],{"class":154},"  text-shadow",[95,130874,51414],{"class":105},[95,130876,323],{"class":154},[95,130878,51469],{"class":101},[95,130880,25103],{"class":154},[95,130882,51469],{"class":101},[95,130884,14738],{"class":154},[95,130886,51469],{"class":101},[95,130888,78744],{"class":154},[95,130890,106],{"class":105},[95,130892,297],{"class":154},[95,130894,12418],{"class":105},[95,130896,297],{"class":154},[95,130898,12418],{"class":105},[95,130900,297],{"class":154},[95,130902,12418],{"class":105},[95,130904,100498],{"class":154},[95,130906,2701],{"class":105},[95,130908,130909],{"class":97,"line":1161},[95,130910,1547],{"class":105},[243,130912,130913,130921],{},[246,130914,130915],{},[249,130916,130917,130919],{},[252,130918,258],{"align":23720},[252,130920,27474],{"align":23720},[290,130922,130923,130929,130936,130943],{},[249,130924,130925,130927],{},[295,130926,130808],{"align":23720},[295,130928,130811],{"align":23720},[249,130930,130931,130933],{},[295,130932,130816],{"align":23720},[295,130934,130935],{"align":23720},"必需,垂直阴影位置,允许负值",[249,130937,130938,130940],{},[295,130939,130824],{"align":23720},[295,130941,130942],{"align":23720},"可选,模糊的距离",[249,130944,130945,130947],{},[295,130946,130840],{"align":23720},[295,130948,130843],{"align":23720},[37,130950,130952],{"id":130951},"_92-浮动","9.2 浮动",[66,130954,130956],{"id":130955},"_921-浮动介绍","9.2.1 浮动介绍",[10,130958,130959],{},"在16.2中详细介绍",[66,130961,130963],{"id":130962},"_922-清除浮动","9.2.2 清除浮动",[49,130965,130966,130969],{},[52,130967,130968],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[52,130970,130971],{},"清除浮动的本质",[10,130973,130974],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[10,130976,9008],{},[1113,130978,130979,130982,130985],{},[52,130980,130981],{},"如果父盒子本身有高度，则不需要清除浮动",[52,130983,130984],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[52,130986,130987],{},"父级有了高度，就不会影响下面的标准流了",[49,130989,130990],{"start":1161},[52,130991,130992],{},"清除浮动样式",[86,130994,130996],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[92,130997,130998,131005,131016,131020,131027,131037],{"__ignoreMap":14},[95,130999,131000,131003],{"class":97,"line":98},[95,131001,131002],{"class":1945},".left",[95,131004,15555],{"class":105},[95,131006,131007,131010,131012,131014],{"class":97,"line":15},[95,131008,131009],{"class":154},"  float",[95,131011,51414],{"class":105},[95,131013,23720],{"class":154},[95,131015,1272],{"class":105},[95,131017,131018],{"class":97,"line":1161},[95,131019,1547],{"class":105},[95,131021,131022,131025],{"class":97,"line":1176},[95,131023,131024],{"class":1945},".right",[95,131026,15555],{"class":105},[95,131028,131029,131031,131033,131035],{"class":97,"line":1182},[95,131030,131009],{"class":154},[95,131032,51414],{"class":105},[95,131034,72499],{"class":154},[95,131036,1272],{"class":105},[95,131038,131039],{"class":97,"line":1196},[95,131040,1547],{"class":105},[243,131042,131043,131051],{},[246,131044,131045],{},[249,131046,131047,131049],{},[252,131048,126993],{"align":23720},[252,131050,27474],{"align":23720},[290,131052,131053,131060,131067],{},[249,131054,131055,131057],{},[295,131056,23720],{"align":23720},[295,131058,131059],{"align":23720},"不允许左侧有浮动元素（清除左侧浮动的影响）",[249,131061,131062,131064],{},[295,131063,72499],{"align":23720},[295,131065,131066],{"align":23720},"不允许右侧有浮动元素（清除右侧浮动的影响）",[249,131068,131069,131072],{},[295,131070,131071],{"align":23720},"both",[295,131073,131074],{"align":23720},"同时清除左右侧浮动的影响",[10,131076,131077],{},"法一",[10,131079,131080],{},"额外标签法也称为隔墙法",[10,131082,131083],{},"使用方式：",[10,131085,131086],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[86,131088,131089],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,131090,131091,131097,131107,131111,131117,131127],{"__ignoreMap":14},[95,131092,131093,131095],{"class":97,"line":98},[95,131094,131002],{"class":1945},[95,131096,15555],{"class":105},[95,131098,131099,131101,131103,131105],{"class":97,"line":15},[95,131100,131009],{"class":154},[95,131102,51414],{"class":105},[95,131104,23720],{"class":154},[95,131106,1272],{"class":105},[95,131108,131109],{"class":97,"line":1161},[95,131110,1547],{"class":105},[95,131112,131113,131115],{"class":97,"line":1176},[95,131114,131024],{"class":1945},[95,131116,15555],{"class":105},[95,131118,131119,131121,131123,131125],{"class":97,"line":1182},[95,131120,131009],{"class":154},[95,131122,51414],{"class":105},[95,131124,72499],{"class":154},[95,131126,1272],{"class":105},[95,131128,131129],{"class":97,"line":1196},[95,131130,1547],{"class":105},[10,131132,131133],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[10,131135,131136],{},"优点： 通俗易懂，书写方便",[10,131138,131139],{},"缺点： 添加许多无意义的标签，结构化较差",[10,131141,131142],{},"注意： 要求这个新的空标签必须是块级元素。",[10,131144,131145],{},"法二",[10,131147,131148],{},"父级添加overflow属性",[86,131150,131151],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,131152,131153,131159,131169,131173,131179,131189],{"__ignoreMap":14},[95,131154,131155,131157],{"class":97,"line":98},[95,131156,131002],{"class":1945},[95,131158,15555],{"class":105},[95,131160,131161,131163,131165,131167],{"class":97,"line":15},[95,131162,131009],{"class":154},[95,131164,51414],{"class":105},[95,131166,23720],{"class":154},[95,131168,1272],{"class":105},[95,131170,131171],{"class":97,"line":1161},[95,131172,1547],{"class":105},[95,131174,131175,131177],{"class":97,"line":1176},[95,131176,131024],{"class":1945},[95,131178,15555],{"class":105},[95,131180,131181,131183,131185,131187],{"class":97,"line":1182},[95,131182,131009],{"class":154},[95,131184,51414],{"class":105},[95,131186,72499],{"class":154},[95,131188,1272],{"class":105},[95,131190,131191],{"class":97,"line":1196},[95,131192,1547],{"class":105},[10,131194,131195],{},"overflow: hidden;",[10,131197,131198],{},"优点：代码简洁",[10,131200,131201],{},"缺点：无法显示溢出的部分",[10,131203,131204],{},"注意：是给父元素添加代码",[10,131206,131207],{},"法三",[10,131209,131210],{},"父级添加after伪元素",[10,131212,131213,131216],{},[131214,131215],"after",{}," 方式是额外标签法的升级版",[10,131218,131219],{},"使用的时候复制就可以",[86,131221,131222],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,131223,131224,131230,131240,131244,131250,131260],{"__ignoreMap":14},[95,131225,131226,131228],{"class":97,"line":98},[95,131227,131002],{"class":1945},[95,131229,15555],{"class":105},[95,131231,131232,131234,131236,131238],{"class":97,"line":15},[95,131233,131009],{"class":154},[95,131235,51414],{"class":105},[95,131237,23720],{"class":154},[95,131239,1272],{"class":105},[95,131241,131242],{"class":97,"line":1161},[95,131243,1547],{"class":105},[95,131245,131246,131248],{"class":97,"line":1176},[95,131247,131024],{"class":1945},[95,131249,15555],{"class":105},[95,131251,131252,131254,131256,131258],{"class":97,"line":1182},[95,131253,131009],{"class":154},[95,131255,51414],{"class":105},[95,131257,72499],{"class":154},[95,131259,1272],{"class":105},[95,131261,131262],{"class":97,"line":1196},[95,131263,1547],{"class":105},[10,131265,131266],{},"优点：没有增加标签，结构更简单",[10,131268,131269],{},"缺点：照顾低版本浏览器",[10,131271,131272],{},"代表网站： 百度、淘宝网、网易等",[10,131274,131275],{},"法四",[10,131277,131278],{},"父级添加双伪元素",[86,131280,131281],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,131282,131283,131289,131299,131303,131309,131319],{"__ignoreMap":14},[95,131284,131285,131287],{"class":97,"line":98},[95,131286,131002],{"class":1945},[95,131288,15555],{"class":105},[95,131290,131291,131293,131295,131297],{"class":97,"line":15},[95,131292,131009],{"class":154},[95,131294,51414],{"class":105},[95,131296,23720],{"class":154},[95,131298,1272],{"class":105},[95,131300,131301],{"class":97,"line":1161},[95,131302,1547],{"class":105},[95,131304,131305,131307],{"class":97,"line":1176},[95,131306,131024],{"class":1945},[95,131308,15555],{"class":105},[95,131310,131311,131313,131315,131317],{"class":97,"line":1182},[95,131312,131009],{"class":154},[95,131314,51414],{"class":105},[95,131316,72499],{"class":154},[95,131318,1272],{"class":105},[95,131320,131321],{"class":97,"line":1196},[95,131322,1547],{"class":105},[10,131324,131325],{},"优点：代码更简洁",[10,131327,131269],{},[10,131329,131330],{},"代表网站：小米、腾讯等",[37,131332,131334],{"id":131333},"_93-ps切图","9.3 PS切图",[66,131336,131338],{"id":131337},"_931-常见图片格式","9.3.1 常见图片格式",[243,131340,131341,131351],{},[246,131342,131343],{},[249,131344,131345,131348],{},[252,131346,131347],{"align":23720},"jpg图像格式",[252,131349,131350],{"align":23720},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[290,131352,131353,131361,131369],{},[249,131354,131355,131358],{},[295,131356,131357],{"align":23720},"gif图像格式",[295,131359,131360],{"align":23720},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[249,131362,131363,131366],{},[295,131364,131365],{"align":23720},"png图像格式",[295,131367,131368],{"align":23720},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[249,131370,131371,131374],{},[295,131372,131373],{"align":23720},"PSD图像格式",[295,131375,131376],{"align":23720},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[66,131378,131380],{"id":131379},"_932-图层切图","9.3.2 图层切图",[10,131382,131383],{},"最简单的切图方式：右击图层 → 导出 → 切片",[10,131385,131386],{},"按住shift选中两个图层->图层菜单->合并图层",[66,131388,131390],{"id":131389},"_933-切片切图","9.3.3 切片切图",[1113,131392,131393,131396],{},[52,131394,131395],{},"利用切片工具手动划出",[52,131397,131398],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[66,131400,131402],{"id":131401},"_934-切图步骤","9.3.4 切图步骤",[10,131404,131405],{},"用切片工具选中：",[1444,131407],{"style":126385,"src":131408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[10,131410,131411],{},"文件 -> 导出",[1444,131413],{"style":126385,"src":131414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5109,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":1161,"text":129882},{"id":130172,"depth":1161,"text":130173},{"id":130301,"depth":1161,"text":130302},{"id":130501,"depth":1161,"text":130502},{"id":130543,"depth":1161,"text":130544},{"id":130581,"depth":1161,"text":130582},{"id":130671,"depth":1161,"text":130672},{"id":130951,"depth":15,"text":130952,"children":131430},[131431,131432],{"id":130955,"depth":1161,"text":130956},{"id":130962,"depth":1161,"text":130963},{"id":131333,"depth":15,"text":131334,"children":131434},[131435,131436,131437,131438],{"id":131337,"depth":1161,"text":131338},{"id":131379,"depth":1161,"text":131380},{"id":131389,"depth":1161,"text":131390},{"id":131401,"depth":1161,"text":131402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129848,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131445,"title":131446,"body":131447,"description":23360,"extension":18,"meta":132088,"navigation":21,"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],[33,131450,131446],{"id":131451},"_10-css规范与学成在线案例",[37,131453,131455],{"id":131454},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[49,131457,131458,131464,131470,131476],{},[52,131459,131460,131463],{},[255,131461,131462],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[52,131465,131466,131469],{},[255,131467,131468],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[52,131471,131472,131475],{},[255,131473,131474],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[52,131477,131478,131481],{},[255,131479,131480],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[86,131483,131484],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[92,131485,131486,131490,131496,131512],{"__ignoreMap":14},[95,131487,131488],{"class":97,"line":98},[95,131489,129900],{"class":164},[95,131491,131492,131494],{"class":97,"line":15},[95,131493,51588],{"class":51277},[95,131495,15555],{"class":105},[95,131497,131498,131500,131502,131504,131506,131508,131510],{"class":97,"line":1161},[95,131499,70873],{"class":154},[95,131501,51414],{"class":105},[95,131503,323],{"class":154},[95,131505,51469],{"class":101},[95,131507,51498],{"class":154},[95,131509,129921],{"class":154},[95,131511,1272],{"class":105},[95,131513,131514],{"class":97,"line":1176},[95,131515,1547],{"class":105},[37,131517,131519],{"id":131518},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[66,131521,131523],{"id":131522},"_1021-header头部制作","10.2.1 header头部制作",[1444,131525],{"style":126385,"src":131526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1113,131528,131529,131536,131543,131549,131556,131563],{},[52,131530,131531,131532,131535],{},"1号是版心盒子 ",[255,131533,131534],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[52,131537,131538,131539,131542],{},"版心盒子 里面包含 2号盒子 ",[255,131540,131541],{},"logo"," 图标",[52,131544,131545,131546,131548],{},"版心盒子 里面包含 3号盒子 ",[255,131547,53690],{}," 导航栏",[52,131550,131551,131552,131555],{},"版心盒子 里面包含 4号盒子 ",[255,131553,131554],{},"search"," 搜索框",[52,131557,131558,131559,131562],{},"版心盒子 里面包含 5号盒子 ",[255,131560,131561],{},"user"," 个人信息",[52,131564,131565,131566],{},"注意，要求里面的 ",[255,131567,131568],{},"4个子盒子 必须都浮动",[49,131570,131571],{},[52,131572,131573],{},[255,131574,131575],{},"导航栏注意点:",[10,131577,131578,131579,131582,131583],{},"实际开发中， ",[255,131580,131581],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[255,131584,131585],{},"用 li 包含链接(li+a)的做法",[1113,131587,131588,131591],{},[52,131589,131590],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[52,131592,131593],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[10,131595,9008],{},[10,131597,131598],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[10,131600,131601],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[10,131603,131604],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[49,131606,131607],{"start":15},[52,131608,131609],{},[255,131610,131611],{},"4号盒子search的细节：",[1113,131613,131614,131617,131620],{},[52,131615,131616],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[52,131618,131619],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[52,131621,131622,131625],{},[92,131623,131624],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[66,131627,131629],{"id":131628},"_1022-banner制作","10.2.2 banner制作",[1444,131631],{"style":126385,"src":131632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1113,131634,131635,131642,131648,131655],{},[52,131636,131637,131638,131641],{},"1号盒子是通栏的大盒子 ",[255,131639,131640],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[52,131643,131644,131645,131647],{},"2号盒子是版心 ",[255,131646,901],{}," ， 要水平居中对齐",[52,131649,131650,131651,131654],{},"3号盒子版心内，左对齐 ",[255,131652,131653],{},"subnav"," 侧导航栏",[52,131656,131657,131658,131661],{},"4号盒子版心内，右对齐 ",[255,131659,131660],{},"course"," 课程",[66,131663,131665],{"id":131664},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1444,131667],{"style":126385,"src":131668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1113,131670,131671,131674,131677,131680],{},[52,131672,131673],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[52,131675,131676],{},"1号盒子是标题 H3 左侧浮动",[52,131678,131679],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[52,131681,131682],{},"3号盒子 右浮动 mod 修改",[66,131684,131686],{"id":131685},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1444,131688],{"style":126385,"src":131689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1113,131691,131692,131698,131705,131712,131715],{},[52,131693,131694,131695,131697],{},"1号盒子为最大的盒子 ",[255,131696,53691],{}," 版心水平居中对齐",[52,131699,131700,131701,131704],{},"2号盒子为上面部分 ",[255,131702,131703],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[52,131706,131707,131708,131711],{},"3号盒子为底下部分 ",[255,131709,131710],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[52,131713,131714],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[52,131716,131717],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[66,131719,131721],{"id":131720},"_1025-底部模块制作","10.2.5 底部模块制作",[1444,131723],{"style":126385,"src":131724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1113,131726,131727,131734,131737,131744],{},[52,131728,131729,131730,131733],{},"1号盒子通栏大盒子 底部 ",[255,131731,131732],{},"footer"," 给高度 底色是白色",[52,131735,131736],{},"2号盒子版心水平居中",[52,131738,131739,131740,131743],{},"3号盒子版权 ",[255,131741,131742],{},"copyright"," 左对齐",[52,131745,131746,131747,131750],{},"4号盒子 链接组 ",[255,131748,131749],{},"links"," 右对齐",[66,131752,131754],{"id":131753},"_1026-代码模块","10.2.6 代码模块",[49,131756,131757],{},[52,131758,131759],{},"html部分",[86,131761,131763],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[92,131764,131765],{"__ignoreMap":14},[95,131766,131767,131769,131771,131773,131775,131778,131781,131783,131786,131789,131791],{"class":97,"line":98},[95,131768,1016],{"class":105},[95,131770,344],{"class":51277},[95,131772,61034],{"class":1945},[95,131774,151],{"class":105},[95,131776,131777],{"class":210},"\"https:\u002F\u002Fexample.com\"",[95,131779,131780],{"class":1945}," target",[95,131782,151],{"class":105},[95,131784,131785],{"class":210},"\"_blank\"",[95,131787,131788],{"class":105},">链接文字\u003C\u002F",[95,131790,344],{"class":51277},[95,131792,51284],{"class":105},[49,131794,131795],{"start":15},[52,131796,131797],{},"css部分",[86,131799,131800],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},[92,131801,131802],{"__ignoreMap":14},[95,131803,131804,131806,131808,131810,131812,131814,131816,131818,131820,131822,131824],{"class":97,"line":98},[95,131805,1016],{"class":105},[95,131807,344],{"class":51277},[95,131809,61034],{"class":1945},[95,131811,151],{"class":105},[95,131813,131777],{"class":210},[95,131815,131780],{"class":1945},[95,131817,151],{"class":105},[95,131819,131785],{"class":210},[95,131821,131788],{"class":105},[95,131823,344],{"class":51277},[95,131825,51284],{"class":105},[66,131827,131829],{"id":131828},"_1027-收获","10.2.7 收获",[49,131831,131832,131835,131838,131841,131844],{},[52,131833,131834],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[52,131836,131837],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[52,131839,131840],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[52,131842,131843],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[52,131845,131846],{},"遗忘代码",[86,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",[92,131851,131852,131874,131879,131889],{"__ignoreMap":14},[95,131853,131854,131856,131858,131860,131862,131864,131866,131868,131870,131872],{"class":97,"line":98},[95,131855,51588],{"class":51277},[95,131857,12418],{"class":105},[95,131859,10],{"class":51277},[95,131861,12418],{"class":105},[95,131863,33],{"class":51277},[95,131865,12418],{"class":105},[95,131867,1113],{"class":51277},[95,131869,12418],{"class":105},[95,131871,52],{"class":51277},[95,131873,15555],{"class":105},[95,131875,131876],{"class":97,"line":15},[95,131877,131878],{"class":164},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[95,131880,131881,131883,131885,131887],{"class":97,"line":1161},[95,131882,128145],{"class":154},[95,131884,51414],{"class":105},[95,131886,60846],{"class":154},[95,131888,1272],{"class":105},[95,131890,131891],{"class":97,"line":1176},[95,131892,1547],{"class":105},[49,131894,131895],{"start":1196},[52,131896,131897],{},"html引css的程序",[86,131899,131900],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},[92,131901,131902,131924,131928,131938],{"__ignoreMap":14},[95,131903,131904,131906,131908,131910,131912,131914,131916,131918,131920,131922],{"class":97,"line":98},[95,131905,51588],{"class":51277},[95,131907,12418],{"class":105},[95,131909,10],{"class":51277},[95,131911,12418],{"class":105},[95,131913,33],{"class":51277},[95,131915,12418],{"class":105},[95,131917,1113],{"class":51277},[95,131919,12418],{"class":105},[95,131921,52],{"class":51277},[95,131923,15555],{"class":105},[95,131925,131926],{"class":97,"line":15},[95,131927,131878],{"class":164},[95,131929,131930,131932,131934,131936],{"class":97,"line":1161},[95,131931,128145],{"class":154},[95,131933,51414],{"class":105},[95,131935,60846],{"class":154},[95,131937,1272],{"class":105},[95,131939,131940],{"class":97,"line":1176},[95,131941,1547],{"class":105},[49,131943,131944,131947,131950,131953,131956],{"start":1202},[52,131945,131946],{},"浮动的盒子不会有外边距合并问题",[52,131948,131949],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[52,131951,131952],{},"ctrl+g快速定位行；shift+alt多个光标",[52,131954,131955],{},"学习上方各个模块的选择器起名方法，以后就这样用",[52,131957,131958],{},"在写选择器时尽量写全一些，例如",[86,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",[92,131963,131964,131969,131985,131990,132005,132010,132025,132030,132045,132050],{"__ignoreMap":14},[95,131965,131966],{"class":97,"line":98},[95,131967,131968],{"class":164},"\u002F* 静态定位（默认） *\u002F\n",[95,131970,131971,131974,131976,131978,131980,131983],{"class":97,"line":15},[95,131972,131973],{"class":1945},".static",[95,131975,79784],{"class":105},[95,131977,128889],{"class":154},[95,131979,51414],{"class":105},[95,131981,131982],{"class":154},"static",[95,131984,129459],{"class":105},[95,131986,131987],{"class":97,"line":1161},[95,131988,131989],{"class":164},"\u002F* 相对定位 *\u002F\n",[95,131991,131992,131995,131997,131999,132001,132003],{"class":97,"line":1176},[95,131993,131994],{"class":1945},".relative",[95,131996,79784],{"class":105},[95,131998,128889],{"class":154},[95,132000,51414],{"class":105},[95,132002,54741],{"class":154},[95,132004,129459],{"class":105},[95,132006,132007],{"class":97,"line":1182},[95,132008,132009],{"class":164},"\u002F* 绝对定位 *\u002F\n",[95,132011,132012,132015,132017,132019,132021,132023],{"class":97,"line":1196},[95,132013,132014],{"class":1945},".absolute",[95,132016,79784],{"class":105},[95,132018,128889],{"class":154},[95,132020,51414],{"class":105},[95,132022,54808],{"class":154},[95,132024,129459],{"class":105},[95,132026,132027],{"class":97,"line":1202},[95,132028,132029],{"class":164},"\u002F* 固定定位 *\u002F\n",[95,132031,132032,132035,132037,132039,132041,132043],{"class":97,"line":1293},[95,132033,132034],{"class":1945},".fixed",[95,132036,79784],{"class":105},[95,132038,128889],{"class":154},[95,132040,51414],{"class":105},[95,132042,86210],{"class":154},[95,132044,129459],{"class":105},[95,132046,132047],{"class":97,"line":1299},[95,132048,132049],{"class":164},"\u002F* 粘性定位 *\u002F\n",[95,132051,132052,132055,132057,132059,132061,132064],{"class":97,"line":1311},[95,132053,132054],{"class":1945},".sticky",[95,132056,79784],{"class":105},[95,132058,128889],{"class":154},[95,132060,51414],{"class":105},[95,132062,132063],{"class":154},"sticky",[95,132065,129459],{"class":105},[49,132067,132068,132071],{"start":1599},[52,132069,132070],{},"一定要用好注释",[52,132072,132073],{},"浮动的盒子不会有外边距合并的问题",[5109,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":1161,"text":131523},{"id":131628,"depth":1161,"text":131629},{"id":131664,"depth":1161,"text":131665},{"id":131685,"depth":1161,"text":131686},{"id":131720,"depth":1161,"text":131721},{"id":131753,"depth":1161,"text":131754},{"id":131828,"depth":1161,"text":131829},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131446,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132094,"title":132095,"body":132096,"description":23360,"extension":18,"meta":133582,"navigation":21,"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],[33,132099,132095],{"id":132100},"_11-传统布局与定位体系",[37,132102,132104],{"id":132103},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[66,132106,132108],{"id":132107},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1113,132110,132111,132114,132117],{},[52,132112,132113],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[52,132115,132116],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[52,132118,132119],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[66,132121,132123],{"id":132122},"_1112-浮动","11.1.2 浮动",[1113,132125,132126,132129,132132,132135,132138],{},[52,132127,132128],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[52,132130,132131],{},"浮动可以改变元素标签默认的排列方式",[52,132133,132134],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[52,132136,132137],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[52,132139,132140],{},"在使用行内块转换时盒子之间是有空隙的",[86,132142,132143],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,132144,132145,132151,132161,132165,132171,132181],{"__ignoreMap":14},[95,132146,132147,132149],{"class":97,"line":98},[95,132148,131002],{"class":1945},[95,132150,15555],{"class":105},[95,132152,132153,132155,132157,132159],{"class":97,"line":15},[95,132154,131009],{"class":154},[95,132156,51414],{"class":105},[95,132158,23720],{"class":154},[95,132160,1272],{"class":105},[95,132162,132163],{"class":97,"line":1161},[95,132164,1547],{"class":105},[95,132166,132167,132169],{"class":97,"line":1176},[95,132168,131024],{"class":1945},[95,132170,15555],{"class":105},[95,132172,132173,132175,132177,132179],{"class":97,"line":1182},[95,132174,131009],{"class":154},[95,132176,51414],{"class":105},[95,132178,72499],{"class":154},[95,132180,1272],{"class":105},[95,132182,132183],{"class":97,"line":1196},[95,132184,1547],{"class":105},[243,132186,132187,132195],{},[246,132188,132189],{},[249,132190,132191,132193],{},[252,132192,126993],{"align":23720},[252,132194,27474],{"align":23720},[290,132196,132197,132204,132211],{},[249,132198,132199,132201],{},[295,132200,54714],{"align":23720},[295,132202,132203],{"align":23720},"元素不浮动（默认值）",[249,132205,132206,132208],{},[295,132207,23720],{"align":23720},[295,132209,132210],{"align":23720},"元素向左浮动",[249,132212,132213,132215],{},[295,132214,72499],{"align":23720},[295,132216,132217],{"align":23720},"元素向右浮动",[10,132219,132220],{},"浮动重点：",[1113,132222,132223,132226,132229,132232,132235],{},[52,132224,132225],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[52,132227,132228],{},"浮动的元素会一行内显示并且元素顶部对齐",[52,132230,132231],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[52,132233,132234],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[52,132236,132237],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[10,132239,132240],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[10,132242,132243],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[86,132245,132246],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,132247,132248,132254,132264,132268,132274,132284],{"__ignoreMap":14},[95,132249,132250,132252],{"class":97,"line":98},[95,132251,131002],{"class":1945},[95,132253,15555],{"class":105},[95,132255,132256,132258,132260,132262],{"class":97,"line":15},[95,132257,131009],{"class":154},[95,132259,51414],{"class":105},[95,132261,23720],{"class":154},[95,132263,1272],{"class":105},[95,132265,132266],{"class":97,"line":1161},[95,132267,1547],{"class":105},[95,132269,132270,132272],{"class":97,"line":1176},[95,132271,131024],{"class":1945},[95,132273,15555],{"class":105},[95,132275,132276,132278,132280,132282],{"class":97,"line":1182},[95,132277,131009],{"class":154},[95,132279,51414],{"class":105},[95,132281,72499],{"class":154},[95,132283,1272],{"class":105},[95,132285,132286],{"class":97,"line":1196},[95,132287,1547],{"class":105},[66,132289,132291],{"id":132290},"_1113-定位","11.1.3 定位",[21981,132293,132295],{"id":132294},"_11131-使用场景","11.1.3.1 使用场景",[10,132297,132298],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[10,132300,132301],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21981,132303,132305],{"id":132304},"_11132-定位组成","11.1.3.2 定位组成",[10,132307,132308],{},"定位 = 定位模式 + 边偏移",[49,132310,132311],{},[52,132312,132313,132316,132317],{},[255,132314,132315],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[255,132318,132319],{},"定位模式",[86,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",[92,132324,132325,132331,132345,132362,132379],{"__ignoreMap":14},[95,132326,132327,132329],{"class":97,"line":98},[95,132328,130377],{"class":1945},[95,132330,15555],{"class":105},[95,132332,132333,132336,132338,132340,132342],{"class":97,"line":15},[95,132334,132335],{"class":154},"  position",[95,132337,51414],{"class":105},[95,132339,54741],{"class":154},[95,132341,130392],{"class":105},[95,132343,132344],{"class":164},"\u002F* 定位模式 *\u002F\n",[95,132346,132347,132350,132352,132354,132356,132359],{"class":97,"line":1161},[95,132348,132349],{"class":154},"  top",[95,132351,51414],{"class":105},[95,132353,552],{"class":154},[95,132355,51469],{"class":101},[95,132357,132358],{"class":105},";           ",[95,132360,132361],{"class":164},"\u002F* 边偏移：上 *\u002F\n",[95,132363,132364,132367,132369,132371,132373,132376],{"class":97,"line":1176},[95,132365,132366],{"class":154},"  left",[95,132368,51414],{"class":105},[95,132370,806],{"class":154},[95,132372,51469],{"class":101},[95,132374,132375],{"class":105},";          ",[95,132377,132378],{"class":164},"\u002F* 边偏移：左 *\u002F\n",[95,132380,132381],{"class":97,"line":1182},[95,132382,1547],{"class":105},[243,132384,132385,132394],{},[246,132386,132387],{},[249,132388,132389,132391],{},[252,132390,258],{"align":23720},[252,132392,132393],{"align":23720},"语义",[290,132395,132396,132403,132410,132417],{},[249,132397,132398,132400],{},[295,132399,131982],{"align":23720},[295,132401,132402],{"align":23720},"静态定位",[249,132404,132405,132407],{},[295,132406,54741],{"align":23720},[295,132408,132409],{"align":23720},"相对定位",[249,132411,132412,132414],{},[295,132413,54808],{"align":23720},[295,132415,132416],{"align":23720},"绝对定位",[249,132418,132419,132421],{},[295,132420,86210],{"align":23720},[295,132422,132423],{"align":23720},"固定定位",[10,132425,132426],{},"（1）静态定位：",[1113,132428,132429,132440],{},[52,132430,132431,132432,132435,132436,132439],{},"静态定位是元素的 ",[255,132433,132434],{},"默认定位方式"," ， ",[255,132437,132438],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[52,132441,5164],{},[86,132443,132444],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132445,132446,132452,132464,132478,132492],{"__ignoreMap":14},[95,132447,132448,132450],{"class":97,"line":98},[95,132449,130377],{"class":1945},[95,132451,15555],{"class":105},[95,132453,132454,132456,132458,132460,132462],{"class":97,"line":15},[95,132455,132335],{"class":154},[95,132457,51414],{"class":105},[95,132459,54741],{"class":154},[95,132461,130392],{"class":105},[95,132463,132344],{"class":164},[95,132465,132466,132468,132470,132472,132474,132476],{"class":97,"line":1161},[95,132467,132349],{"class":154},[95,132469,51414],{"class":105},[95,132471,552],{"class":154},[95,132473,51469],{"class":101},[95,132475,132358],{"class":105},[95,132477,132361],{"class":164},[95,132479,132480,132482,132484,132486,132488,132490],{"class":97,"line":1176},[95,132481,132366],{"class":154},[95,132483,51414],{"class":105},[95,132485,806],{"class":154},[95,132487,51469],{"class":101},[95,132489,132375],{"class":105},[95,132491,132378],{"class":164},[95,132493,132494],{"class":97,"line":1182},[95,132495,1547],{"class":105},[1113,132497,132498,132501],{},[52,132499,132500],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[52,132502,132503],{},"静态定位在布局时我们几乎不用的",[10,132505,132506],{},"（2）相对定位",[1113,132508,132509,132516],{},[52,132510,132511,132512,132515],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[255,132513,132514],{},"原来的位置"," 来说的（自恋型）",[52,132517,5164],{},[86,132519,132520],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132521,132522,132528,132540,132554,132568],{"__ignoreMap":14},[95,132523,132524,132526],{"class":97,"line":98},[95,132525,130377],{"class":1945},[95,132527,15555],{"class":105},[95,132529,132530,132532,132534,132536,132538],{"class":97,"line":15},[95,132531,132335],{"class":154},[95,132533,51414],{"class":105},[95,132535,54741],{"class":154},[95,132537,130392],{"class":105},[95,132539,132344],{"class":164},[95,132541,132542,132544,132546,132548,132550,132552],{"class":97,"line":1161},[95,132543,132349],{"class":154},[95,132545,51414],{"class":105},[95,132547,552],{"class":154},[95,132549,51469],{"class":101},[95,132551,132358],{"class":105},[95,132553,132361],{"class":164},[95,132555,132556,132558,132560,132562,132564,132566],{"class":97,"line":1176},[95,132557,132366],{"class":154},[95,132559,51414],{"class":105},[95,132561,806],{"class":154},[95,132563,51469],{"class":101},[95,132565,132375],{"class":105},[95,132567,132378],{"class":164},[95,132569,132570],{"class":97,"line":1182},[95,132571,1547],{"class":105},[1113,132573,132574],{},[52,132575,132576,132577,132579,132580,132582,132583,132586,132587,132590,132591,132593,132594,132597],{},"相对定位的特点：",[53693,132578],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53693,132581],{},"  ② ",[255,132584,132585],{},"原来"," 在标准流的 ",[255,132588,132589],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53693,132592],{},"  ③因此， ",[255,132595,132596],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[10,132599,132600],{},"（3）绝对定位",[1113,132602,132603,132612],{},[52,132604,132605,132607,132608,132611],{},[255,132606,132416],{}," 是元素在移动位置的时候，是相对于它 ",[255,132609,132610],{},"祖先元素"," 来说的（拼爹型）",[52,132613,5164],{},[86,132615,132616],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132617,132618,132624,132636,132650,132664],{"__ignoreMap":14},[95,132619,132620,132622],{"class":97,"line":98},[95,132621,130377],{"class":1945},[95,132623,15555],{"class":105},[95,132625,132626,132628,132630,132632,132634],{"class":97,"line":15},[95,132627,132335],{"class":154},[95,132629,51414],{"class":105},[95,132631,54741],{"class":154},[95,132633,130392],{"class":105},[95,132635,132344],{"class":164},[95,132637,132638,132640,132642,132644,132646,132648],{"class":97,"line":1161},[95,132639,132349],{"class":154},[95,132641,51414],{"class":105},[95,132643,552],{"class":154},[95,132645,51469],{"class":101},[95,132647,132358],{"class":105},[95,132649,132361],{"class":164},[95,132651,132652,132654,132656,132658,132660,132662],{"class":97,"line":1176},[95,132653,132366],{"class":154},[95,132655,51414],{"class":105},[95,132657,806],{"class":154},[95,132659,51469],{"class":101},[95,132661,132375],{"class":105},[95,132663,132378],{"class":164},[95,132665,132666],{"class":97,"line":1182},[95,132667,1547],{"class":105},[1113,132669,132670,132685,132694,132697],{},[52,132671,132672,132673,132675,132676,132678,132679,132681,132682,132684],{},"绝对定位的特点：",[53693,132674],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53693,132677],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53693,132680],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53693,132683],{},"  (4)固定定位",[52,132686,132687,132689,132690,132693],{},[255,132688,132423],{}," 是元素 ",[255,132691,132692],{},"固定于浏览器可视区的位置"," 。（认死理型）",[52,132695,132696],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[52,132698,132699],{},"语法:",[86,132701,132702],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132703,132704,132710,132722,132736,132750],{"__ignoreMap":14},[95,132705,132706,132708],{"class":97,"line":98},[95,132707,130377],{"class":1945},[95,132709,15555],{"class":105},[95,132711,132712,132714,132716,132718,132720],{"class":97,"line":15},[95,132713,132335],{"class":154},[95,132715,51414],{"class":105},[95,132717,54741],{"class":154},[95,132719,130392],{"class":105},[95,132721,132344],{"class":164},[95,132723,132724,132726,132728,132730,132732,132734],{"class":97,"line":1161},[95,132725,132349],{"class":154},[95,132727,51414],{"class":105},[95,132729,552],{"class":154},[95,132731,51469],{"class":101},[95,132733,132358],{"class":105},[95,132735,132361],{"class":164},[95,132737,132738,132740,132742,132744,132746,132748],{"class":97,"line":1176},[95,132739,132366],{"class":154},[95,132741,51414],{"class":105},[95,132743,806],{"class":154},[95,132745,51469],{"class":101},[95,132747,132375],{"class":105},[95,132749,132378],{"class":164},[95,132751,132752],{"class":97,"line":1182},[95,132753,1547],{"class":105},[1113,132755,132756,132765],{},[52,132757,132758,132759,132761,132762,132764],{},"特点:",[53693,132760],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53693,132763],{},"  ②固定定位不再占有原先的位置,完全脱标",[52,132766,132767,132768,132770,132771,132773,132774,132776],{},"固定在版心位置的方法:",[53693,132769],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53693,132772],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53693,132775],{},"  实例：",[86,132778,132779],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132780,132781,132787,132799,132813,132827],{"__ignoreMap":14},[95,132782,132783,132785],{"class":97,"line":98},[95,132784,130377],{"class":1945},[95,132786,15555],{"class":105},[95,132788,132789,132791,132793,132795,132797],{"class":97,"line":15},[95,132790,132335],{"class":154},[95,132792,51414],{"class":105},[95,132794,54741],{"class":154},[95,132796,130392],{"class":105},[95,132798,132344],{"class":164},[95,132800,132801,132803,132805,132807,132809,132811],{"class":97,"line":1161},[95,132802,132349],{"class":154},[95,132804,51414],{"class":105},[95,132806,552],{"class":154},[95,132808,51469],{"class":101},[95,132810,132358],{"class":105},[95,132812,132361],{"class":164},[95,132814,132815,132817,132819,132821,132823,132825],{"class":97,"line":1176},[95,132816,132366],{"class":154},[95,132818,51414],{"class":105},[95,132820,806],{"class":154},[95,132822,51469],{"class":101},[95,132824,132375],{"class":105},[95,132826,132378],{"class":164},[95,132828,132829],{"class":97,"line":1182},[95,132830,1547],{"class":105},[1444,132832],{"style":126385,"src":132833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[10,132835,132836],{},"(5)粘性定位",[1113,132838,132839,132842],{},[52,132840,132841],{},"粘性定位可以被认为是相对定位和固定定位的混合",[52,132843,5164],{},[86,132845,132846],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132847,132848,132854,132866,132880,132894],{"__ignoreMap":14},[95,132849,132850,132852],{"class":97,"line":98},[95,132851,130377],{"class":1945},[95,132853,15555],{"class":105},[95,132855,132856,132858,132860,132862,132864],{"class":97,"line":15},[95,132857,132335],{"class":154},[95,132859,51414],{"class":105},[95,132861,54741],{"class":154},[95,132863,130392],{"class":105},[95,132865,132344],{"class":164},[95,132867,132868,132870,132872,132874,132876,132878],{"class":97,"line":1161},[95,132869,132349],{"class":154},[95,132871,51414],{"class":105},[95,132873,552],{"class":154},[95,132875,51469],{"class":101},[95,132877,132358],{"class":105},[95,132879,132361],{"class":164},[95,132881,132882,132884,132886,132888,132890,132892],{"class":97,"line":1176},[95,132883,132366],{"class":154},[95,132885,51414],{"class":105},[95,132887,806],{"class":154},[95,132889,51469],{"class":101},[95,132891,132375],{"class":105},[95,132893,132378],{"class":164},[95,132895,132896],{"class":97,"line":1182},[95,132897,1547],{"class":105},[1113,132899,132900],{},[52,132901,132902,132903,132905,132906,132908,132909,132911,132912,132915,132916,132918],{},"粘性定位的特点：",[53693,132904],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53693,132907],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53693,132910],{},"  ③必须添加 top 、left、right、bottom ",[255,132913,132914],{},"其中一个"," 才有效",[53693,132917],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[86,132920,132921],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,132922,132923,132929,132941,132955,132969],{"__ignoreMap":14},[95,132924,132925,132927],{"class":97,"line":98},[95,132926,130377],{"class":1945},[95,132928,15555],{"class":105},[95,132930,132931,132933,132935,132937,132939],{"class":97,"line":15},[95,132932,132335],{"class":154},[95,132934,51414],{"class":105},[95,132936,54741],{"class":154},[95,132938,130392],{"class":105},[95,132940,132344],{"class":164},[95,132942,132943,132945,132947,132949,132951,132953],{"class":97,"line":1161},[95,132944,132349],{"class":154},[95,132946,51414],{"class":105},[95,132948,552],{"class":154},[95,132950,51469],{"class":101},[95,132952,132358],{"class":105},[95,132954,132361],{"class":164},[95,132956,132957,132959,132961,132963,132965,132967],{"class":97,"line":1176},[95,132958,132366],{"class":154},[95,132960,51414],{"class":105},[95,132962,806],{"class":154},[95,132964,51469],{"class":101},[95,132966,132375],{"class":105},[95,132968,132378],{"class":164},[95,132970,132971],{"class":97,"line":1182},[95,132972,1547],{"class":105},[1444,132974],{"style":126385,"src":132975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[10,132977,132978],{},"(6)总结",[243,132980,132981,132996],{},[246,132982,132983],{},[249,132984,132985,132987,132990,132993],{},[252,132986,132319],{"align":23720},[252,132988,132989],{"align":23720},"是否脱标",[252,132991,132992],{"align":23720},"移动位置",[252,132994,132995],{"align":23720},"是否常用",[290,132997,132998,133011,133025,133039,133052],{},[249,132999,133000,133003,133005,133008],{},[295,133001,133002],{"align":23720},"Static 静态定位",[295,133004,104655],{"align":23720},[295,133006,133007],{"align":23720},"不能使用边偏移",[295,133009,133010],{"align":23720},"很少",[249,133012,133013,133016,133019,133022],{},[295,133014,133015],{"align":23720},"Relative 相对定位",[295,133017,133018],{"align":23720},"否(占有位置)",[295,133020,133021],{"align":23720},"相对于自身位置移动",[295,133023,133024],{"align":23720},"基本单独使用",[249,133026,133027,133030,133033,133036],{},[295,133028,133029],{"align":23720},"Absolute 绝对定位",[295,133031,133032],{"align":23720},"是(不占有位置)",[295,133034,133035],{"align":23720},"带有定位的父级",[295,133037,133038],{"align":23720},"要和定位父级元素搭配使用",[249,133040,133041,133044,133046,133049],{},[295,133042,133043],{"align":23720},"Fixed 固定定位",[295,133045,133032],{"align":23720},[295,133047,133048],{"align":23720},"浏览器可视区",[295,133050,133051],{"align":23720},"单独使用,不需要父级",[249,133053,133054,133057,133059,133061],{},[295,133055,133056],{"align":23720},"Sticky 粘性定位",[295,133058,133018],{"align":23720},[295,133060,133048],{"align":23720},[295,133062,133063],{"align":23720},"当前阶段少",[49,133065,133066],{"start":15},[52,133067,133068,133071],{},[255,133069,133070],{},"边偏移"," 则决定了该元素的最终位置",[243,133073,133074,133085],{},[246,133075,133076],{},[249,133077,133078,133081,133083],{},[252,133079,133080],{"align":23720},"边偏移属性",[252,133082,27477],{"align":23720},[252,133084,27474],{"align":23720},[290,133086,133087,133098,133109,133119],{},[249,133088,133089,133092,133095],{},[295,133090,133091],{"align":23720},"top",[295,133093,133094],{"align":23720},"top: 80px;",[295,133096,133097],{"align":23720},"顶端偏移量，定义元素相对于父元素上边线的距离",[249,133099,133100,133103,133106],{},[295,133101,133102],{"align":23720},"bottom",[295,133104,133105],{"align":23720},"bottom: 80px ;",[295,133107,133108],{"align":23720},"底部偏移量，定义元素相对于其父元素下边线的距离",[249,133110,133111,133113,133116],{},[295,133112,23720],{"align":23720},[295,133114,133115],{"align":23720},"left: 80px ;",[295,133117,133118],{"align":23720},"左侧偏移量，定义元素相对于其父元素左边线的距离",[249,133120,133121,133123,133126],{},[295,133122,72499],{"align":23720},[295,133124,133125],{"align":23720},"right: 80px ;",[295,133127,133128],{"align":23720},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1113,133130,133131],{},[52,133132,9008,133133,133135,133136,133138,133139,133141,133142,133145,133146,133148,133149,133151],{},[53693,133134],{},"  ① ",[255,133137,133070],{}," 需要和 ",[255,133140,132319],{}," 联合使用， ",[255,133143,133144],{},"单独使用无效"," ；",[53693,133147],{},"  ②top和bottom不要同时使用",[53693,133150],{},"  ③left和right不要同时使用",[21981,133153,133155],{"id":133154},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[10,133157,133158],{},"子级是绝对定位的话，父级要用相对定位",[1113,133160,133161,133164,133167,133170],{},[52,133162,133163],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[52,133165,133166],{},"父盒子需要加定位限制子盒子在父盒子内显示",[52,133168,133169],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[52,133171,133172,133173,133176],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[255,133174,133175],{},"子绝父绝"," 也会遇到",[21981,133178,133180],{"id":133179},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1113,133182,133183,133198],{},[52,133184,133185,133186,133189,133190,133193,133194,133197],{},"在使用 ",[255,133187,133188],{},"定位"," 布局时，可能会 ",[255,133191,133192],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[255,133195,133196],{},"z-index"," 来控制盒子的前后次序 (z轴)",[52,133199,5164],{},[86,133201,133202],{"className":126529,"code":132322,"language":126531,"meta":14,"style":14},[92,133203,133204,133210,133222,133236,133250],{"__ignoreMap":14},[95,133205,133206,133208],{"class":97,"line":98},[95,133207,130377],{"class":1945},[95,133209,15555],{"class":105},[95,133211,133212,133214,133216,133218,133220],{"class":97,"line":15},[95,133213,132335],{"class":154},[95,133215,51414],{"class":105},[95,133217,54741],{"class":154},[95,133219,130392],{"class":105},[95,133221,132344],{"class":164},[95,133223,133224,133226,133228,133230,133232,133234],{"class":97,"line":1161},[95,133225,132349],{"class":154},[95,133227,51414],{"class":105},[95,133229,552],{"class":154},[95,133231,51469],{"class":101},[95,133233,132358],{"class":105},[95,133235,132361],{"class":164},[95,133237,133238,133240,133242,133244,133246,133248],{"class":97,"line":1176},[95,133239,132366],{"class":154},[95,133241,51414],{"class":105},[95,133243,806],{"class":154},[95,133245,51469],{"class":101},[95,133247,132375],{"class":105},[95,133249,132378],{"class":164},[95,133251,133252],{"class":97,"line":1182},[95,133253,1547],{"class":105},[1113,133255,133256],{},[52,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],{},[255,133262,126993],{}," ： ",[255,133265,133266],{},"正整数",[255,133268,133269],{},"负整数",[255,133271,297],{}," ，默认值是 0，数值越大，盒子越靠上；",[53693,133274],{},"  ②如果 ",[255,133277,133278],{},"属性值相同"," ，则按照书写顺序， ",[255,133281,133282],{},"后来居上",[53693,133284],{},"  ③数字后面 ",[255,133287,133288],{},"不能加单位",[53693,133290],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21981,133293,133295],{"id":133294},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[10,133297,133298],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[10,133300,133301],{},"方法:",[1113,133303,133304,133314],{},[52,133305,133306,133307,133310,133311],{},"left: 50%; 让 ",[255,133308,133309],{},"盒子的左侧"," 移动到 ",[255,133312,133313],{},"父级元素的水平中心位置",[52,133315,133316,133317,133320,133321],{},"margin-left: -100px; 让盒子 ",[255,133318,133319],{},"向左"," 移动 ",[255,133322,133323],{},"自身宽度的一半",[21981,133325,133327],{"id":133326},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[49,133329,133330,133333],{},[52,133331,133332],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[52,133334,133335],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[10,133337,133338],{},"也就是说绝对定位和固定定位和浮动类似",[49,133340,133341],{"start":1161},[52,133342,133343],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1113,133345,133346,133349,133352],{},[52,133347,133348],{},"可以用inline-block 转换为行内块",[52,133350,133351],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[52,133353,133354],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[10,133356,133357],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21981,133359,133361],{"id":133360},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[49,133363,133364,133367,133370,133373],{},[52,133365,133366],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[52,133368,133369],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[52,133371,133372],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[52,133374,133375],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[86,133377,133378],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,133379,133380,133386,133396,133400,133406,133416],{"__ignoreMap":14},[95,133381,133382,133384],{"class":97,"line":98},[95,133383,131002],{"class":1945},[95,133385,15555],{"class":105},[95,133387,133388,133390,133392,133394],{"class":97,"line":15},[95,133389,131009],{"class":154},[95,133391,51414],{"class":105},[95,133393,23720],{"class":154},[95,133395,1272],{"class":105},[95,133397,133398],{"class":97,"line":1161},[95,133399,1547],{"class":105},[95,133401,133402,133404],{"class":97,"line":1176},[95,133403,131024],{"class":1945},[95,133405,15555],{"class":105},[95,133407,133408,133410,133412,133414],{"class":97,"line":1182},[95,133409,131009],{"class":154},[95,133411,51414],{"class":105},[95,133413,72499],{"class":154},[95,133415,1272],{"class":105},[95,133417,133418],{"class":97,"line":1196},[95,133419,1547],{"class":105},[1444,133421],{"style":126385,"src":133422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21981,133424,133426],{"id":133425},"_11138-轮播图","11.1.3.8 轮播图",[1444,133428],{"style":126385,"src":133429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[49,133431,133432],{},[52,133433,133434],{},"制作顺序:",[1113,133436,133437,133440,133443,133452],{},[52,133438,133439],{},"大盒子我们类名为： tb-promo 淘宝广告",[52,133441,133442],{},"里面先放一张图片",[52,133444,133445,133446,133448,133449,133451],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53693,133447],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53693,133450],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[52,133453,133454,133455,133457,133458,133460],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53693,133456],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53693,133459],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[49,133462,133463],{"start":15},[52,133464,133465],{},"代码模块",[86,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",[92,133470,133471,133476,133483,133493,133503,133513,133517,133522,133529,133539],{"__ignoreMap":14},[95,133472,133473],{"class":97,"line":98},[95,133474,133475],{"class":164},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[95,133477,133478,133481],{"class":97,"line":15},[95,133479,133480],{"class":1945},".son",[95,133482,15555],{"class":105},[95,133484,133485,133487,133489,133491],{"class":97,"line":1161},[95,133486,132335],{"class":154},[95,133488,51414],{"class":105},[95,133490,54808],{"class":154},[95,133492,1272],{"class":105},[95,133494,133495,133497,133499,133501],{"class":97,"line":1176},[95,133496,132349],{"class":154},[95,133498,51414],{"class":105},[95,133500,297],{"class":154},[95,133502,1272],{"class":105},[95,133504,133505,133507,133509,133511],{"class":97,"line":1182},[95,133506,132366],{"class":154},[95,133508,51414],{"class":105},[95,133510,297],{"class":154},[95,133512,1272],{"class":105},[95,133514,133515],{"class":97,"line":1196},[95,133516,1547],{"class":105},[95,133518,133519],{"class":97,"line":1202},[95,133520,133521],{"class":164},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[95,133523,133524,133527],{"class":97,"line":1293},[95,133525,133526],{"class":1945},".father",[95,133528,15555],{"class":105},[95,133530,133531,133533,133535,133537],{"class":97,"line":1299},[95,133532,132335],{"class":154},[95,133534,51414],{"class":105},[95,133536,54741],{"class":154},[95,133538,1272],{"class":105},[95,133540,133541],{"class":97,"line":1311},[95,133542,1547],{"class":105},[10,133544,133545],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[66,133547,133549],{"id":133548},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1444,133551],{"style":126385,"src":133552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[10,133554,133555],{},"✨ 黄金口诀：",[10,133557,133558],{},"\"TOP正下负上，LEFT正右负左\"",[10,133560,133561],{},"\"RIGHT正左负右，BOTTOM正上负下",[10,133563,133564],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[10,133566,133567],{},"✨ 简单记：",[10,133569,133570],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5109,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":1161,"text":132108},{"id":132122,"depth":1161,"text":132123},{"id":132290,"depth":1161,"text":132291},{"id":133548,"depth":1161,"text":133549},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132095,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133588,"title":133589,"body":133590,"description":23360,"extension":18,"meta":135013,"navigation":21,"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],[33,133593,133589],{"id":133594},"_12-显示隐藏与图形资源",[37,133596,133598],{"id":133597},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1113,133600,133601,133604],{},[52,133602,133603],{},"目的:让一个元素在页面中消失或者显示出来",[52,133605,133606],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[66,133608,133610],{"id":133609},"_1211-display-显示","12.1.1 display 显示",[49,133612,133613],{},[52,133614,133615],{},"display 设置或检索对象是否及如何显示",[1113,133617,133618,133621],{},[52,133619,133620],{},"display: none;隐藏对象",[52,133622,133623],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[49,133625,133626,133633],{"start":15},[52,133627,133628,133629,133632],{},"特点： display 隐藏元素后， ",[255,133630,133631],{},"不再占"," 有原来的位置",[52,133634,133635],{},"在js中使用非常的广泛",[66,133637,133639],{"id":133638},"_1212-visibility可见性","12.1.2 visibility可见性",[49,133641,133642],{},[52,133643,133644],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1113,133646,133647,133650],{},[52,133648,133649],{},"visibility： visible；元素可见",[52,133651,133652],{},"visibility：hidden；元素隐藏",[49,133654,133655,133658,133661],{"start":15},[52,133656,133657],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[52,133659,133660],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[52,133662,133663],{},"隐藏后继续占有原有位置",[66,133665,133667],{"id":133666},"_1213-overflow溢出","12.1.3 overflow溢出",[1113,133669,133670],{},[52,133671,133672],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[243,133674,133675,133683],{},[246,133676,133677],{},[249,133678,133679,133681],{},[252,133680,126993],{"align":23720},[252,133682,27474],{"align":23720},[290,133684,133685,133693,133700,133707],{},[249,133686,133687,133690],{},[295,133688,133689],{"align":23720},"visible",[295,133691,133692],{"align":23720},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[249,133694,133695,133697],{},[295,133696,61691],{"align":23720},[295,133698,133699],{"align":23720},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[249,133701,133702,133704],{},[295,133703,128949],{"align":23720},[295,133705,133706],{"align":23720},"不管超出内容否，总是显示滚动条",[249,133708,133709,133711],{},[295,133710,72640],{"align":23720},[295,133712,133713],{"align":23720},"超出自动显示滚动条，不超出不显示滚动条",[1113,133715,133716,133719],{},[52,133717,133718],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[52,133720,133721],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[66,133723,133725],{"id":133724},"_1214-案例收获","12.1.4 案例收获",[1444,133727],{"style":126385,"src":133728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[10,133730,133731],{},"问题：没做出来动态效果，使用hover没实现",[10,133733,133734],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[86,133736,133737],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,133738,133739,133743,133757,133761,133775,133779,133793,133797,133811,133815],{"__ignoreMap":14},[95,133740,133741],{"class":97,"line":98},[95,133742,131968],{"class":164},[95,133744,133745,133747,133749,133751,133753,133755],{"class":97,"line":15},[95,133746,131973],{"class":1945},[95,133748,79784],{"class":105},[95,133750,128889],{"class":154},[95,133752,51414],{"class":105},[95,133754,131982],{"class":154},[95,133756,129459],{"class":105},[95,133758,133759],{"class":97,"line":1161},[95,133760,131989],{"class":164},[95,133762,133763,133765,133767,133769,133771,133773],{"class":97,"line":1176},[95,133764,131994],{"class":1945},[95,133766,79784],{"class":105},[95,133768,128889],{"class":154},[95,133770,51414],{"class":105},[95,133772,54741],{"class":154},[95,133774,129459],{"class":105},[95,133776,133777],{"class":97,"line":1182},[95,133778,132009],{"class":164},[95,133780,133781,133783,133785,133787,133789,133791],{"class":97,"line":1196},[95,133782,132014],{"class":1945},[95,133784,79784],{"class":105},[95,133786,128889],{"class":154},[95,133788,51414],{"class":105},[95,133790,54808],{"class":154},[95,133792,129459],{"class":105},[95,133794,133795],{"class":97,"line":1202},[95,133796,132029],{"class":164},[95,133798,133799,133801,133803,133805,133807,133809],{"class":97,"line":1293},[95,133800,132034],{"class":1945},[95,133802,79784],{"class":105},[95,133804,128889],{"class":154},[95,133806,51414],{"class":105},[95,133808,86210],{"class":154},[95,133810,129459],{"class":105},[95,133812,133813],{"class":97,"line":1299},[95,133814,132049],{"class":164},[95,133816,133817,133819,133821,133823,133825,133827],{"class":97,"line":1311},[95,133818,132054],{"class":1945},[95,133820,79784],{"class":105},[95,133822,128889],{"class":154},[95,133824,51414],{"class":105},[95,133826,132063],{"class":154},[95,133828,129459],{"class":105},[10,133830,133831],{},"完整代码：",[86,133833,133834],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,133835,133836,133840,133854,133858,133872,133876,133890,133894,133908,133912],{"__ignoreMap":14},[95,133837,133838],{"class":97,"line":98},[95,133839,131968],{"class":164},[95,133841,133842,133844,133846,133848,133850,133852],{"class":97,"line":15},[95,133843,131973],{"class":1945},[95,133845,79784],{"class":105},[95,133847,128889],{"class":154},[95,133849,51414],{"class":105},[95,133851,131982],{"class":154},[95,133853,129459],{"class":105},[95,133855,133856],{"class":97,"line":1161},[95,133857,131989],{"class":164},[95,133859,133860,133862,133864,133866,133868,133870],{"class":97,"line":1176},[95,133861,131994],{"class":1945},[95,133863,79784],{"class":105},[95,133865,128889],{"class":154},[95,133867,51414],{"class":105},[95,133869,54741],{"class":154},[95,133871,129459],{"class":105},[95,133873,133874],{"class":97,"line":1182},[95,133875,132009],{"class":164},[95,133877,133878,133880,133882,133884,133886,133888],{"class":97,"line":1196},[95,133879,132014],{"class":1945},[95,133881,79784],{"class":105},[95,133883,128889],{"class":154},[95,133885,51414],{"class":105},[95,133887,54808],{"class":154},[95,133889,129459],{"class":105},[95,133891,133892],{"class":97,"line":1202},[95,133893,132029],{"class":164},[95,133895,133896,133898,133900,133902,133904,133906],{"class":97,"line":1293},[95,133897,132034],{"class":1945},[95,133899,79784],{"class":105},[95,133901,128889],{"class":154},[95,133903,51414],{"class":105},[95,133905,86210],{"class":154},[95,133907,129459],{"class":105},[95,133909,133910],{"class":97,"line":1299},[95,133911,132049],{"class":164},[95,133913,133914,133916,133918,133920,133922,133924],{"class":97,"line":1311},[95,133915,132054],{"class":1945},[95,133917,79784],{"class":105},[95,133919,128889],{"class":154},[95,133921,51414],{"class":105},[95,133923,132063],{"class":154},[95,133925,129459],{"class":105},[10,133927,133928],{},"分布思路重点详解：",[86,133930,133931],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,133932,133933,133937,133951,133955,133969,133973,133987,133991,134005,134009],{"__ignoreMap":14},[95,133934,133935],{"class":97,"line":98},[95,133936,131968],{"class":164},[95,133938,133939,133941,133943,133945,133947,133949],{"class":97,"line":15},[95,133940,131973],{"class":1945},[95,133942,79784],{"class":105},[95,133944,128889],{"class":154},[95,133946,51414],{"class":105},[95,133948,131982],{"class":154},[95,133950,129459],{"class":105},[95,133952,133953],{"class":97,"line":1161},[95,133954,131989],{"class":164},[95,133956,133957,133959,133961,133963,133965,133967],{"class":97,"line":1176},[95,133958,131994],{"class":1945},[95,133960,79784],{"class":105},[95,133962,128889],{"class":154},[95,133964,51414],{"class":105},[95,133966,54741],{"class":154},[95,133968,129459],{"class":105},[95,133970,133971],{"class":97,"line":1182},[95,133972,132009],{"class":164},[95,133974,133975,133977,133979,133981,133983,133985],{"class":97,"line":1196},[95,133976,132014],{"class":1945},[95,133978,79784],{"class":105},[95,133980,128889],{"class":154},[95,133982,51414],{"class":105},[95,133984,54808],{"class":154},[95,133986,129459],{"class":105},[95,133988,133989],{"class":97,"line":1202},[95,133990,132029],{"class":164},[95,133992,133993,133995,133997,133999,134001,134003],{"class":97,"line":1293},[95,133994,132034],{"class":1945},[95,133996,79784],{"class":105},[95,133998,128889],{"class":154},[95,134000,51414],{"class":105},[95,134002,86210],{"class":154},[95,134004,129459],{"class":105},[95,134006,134007],{"class":97,"line":1299},[95,134008,132049],{"class":164},[95,134010,134011,134013,134015,134017,134019,134021],{"class":97,"line":1311},[95,134012,132054],{"class":1945},[95,134014,79784],{"class":105},[95,134016,128889],{"class":154},[95,134018,51414],{"class":105},[95,134020,132063],{"class":154},[95,134022,129459],{"class":105},[1444,134024],{"style":126385,"src":134025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[10,134027,134028],{},"图片太大，盒子太小，此时需要修改图片的大小",[86,134030,134032],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[92,134033,134034],{"__ignoreMap":14},[95,134035,134036,134038,134040,134042,134044,134047,134049,134051,134054,134057,134059,134062],{"class":97,"line":98},[95,134037,1016],{"class":105},[95,134039,1444],{"class":51277},[95,134041,55216],{"class":1945},[95,134043,151],{"class":105},[95,134045,134046],{"class":210},"\"images\u002Fpic.jpg\"",[95,134048,55224],{"class":1945},[95,134050,151],{"class":105},[95,134052,134053],{"class":210},"\"描述文字\"",[95,134055,134056],{"class":1945}," title",[95,134058,151],{"class":105},[95,134060,134061],{"class":210},"\"悬停提示\"",[95,134063,51284],{"class":105},[1444,134065],{"style":126385,"src":134066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[10,134068,134069],{},"制造遮罩层",[86,134071,134072],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,134073,134074],{"__ignoreMap":14},[95,134075,134076,134078,134080,134082,134084,134086,134088,134090,134092,134094,134096,134098],{"class":97,"line":98},[95,134077,1016],{"class":105},[95,134079,1444],{"class":51277},[95,134081,55216],{"class":1945},[95,134083,151],{"class":105},[95,134085,134046],{"class":210},[95,134087,55224],{"class":1945},[95,134089,151],{"class":105},[95,134091,134053],{"class":210},[95,134093,134056],{"class":1945},[95,134095,151],{"class":105},[95,134097,134061],{"class":210},[95,134099,51284],{"class":105},[10,134101,134102],{},"此时是这样的为标准流",[1444,134104],{"style":126385,"src":134105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[10,134107,134108],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[10,134110,134111],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[10,134113,134114],{},"让他在中间，用center(background-position)",[10,134116,134117],{},"将需要变的尽可能放到一个盒子中",[10,134119,134120],{},"放大盒子上内部盒子发生变化",[86,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",[92,134125,134126,134132,134142,134146,134153,134163,134175,134187],{"__ignoreMap":14},[95,134127,134128,134130],{"class":97,"line":98},[95,134129,127596],{"class":1945},[95,134131,15555],{"class":105},[95,134133,134134,134136,134138,134140],{"class":97,"line":15},[95,134135,132335],{"class":154},[95,134137,51414],{"class":105},[95,134139,54741],{"class":154},[95,134141,1272],{"class":105},[95,134143,134144],{"class":97,"line":1161},[95,134145,1547],{"class":105},[95,134147,134148,134151],{"class":97,"line":1176},[95,134149,134150],{"class":1945},".child",[95,134152,15555],{"class":105},[95,134154,134155,134157,134159,134161],{"class":97,"line":1182},[95,134156,132335],{"class":154},[95,134158,51414],{"class":105},[95,134160,54808],{"class":154},[95,134162,1272],{"class":105},[95,134164,134165,134167,134169,134171,134173],{"class":97,"line":1196},[95,134166,132349],{"class":154},[95,134168,51414],{"class":105},[95,134170,762],{"class":154},[95,134172,434],{"class":101},[95,134174,1272],{"class":105},[95,134176,134177,134179,134181,134183,134185],{"class":97,"line":1202},[95,134178,132366],{"class":154},[95,134180,51414],{"class":105},[95,134182,762],{"class":154},[95,134184,434],{"class":101},[95,134186,1272],{"class":105},[95,134188,134189],{"class":97,"line":1293},[95,134190,1547],{"class":105},[10,134192,134193],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[37,134195,134197],{"id":134196},"_122-精灵图","12.2 精灵图",[66,134199,134201],{"id":134200},"_1221-理解","12.2.1 理解",[49,134203,134204,134222],{},[52,134205,134206,134207,132435,134210,134213,134214,134217,134218,134221],{},"目的： ",[255,134208,134209],{},"为了有效地减少服务器接收和发送请求的次数",[255,134211,134212],{},"提高"," 页面的 ",[255,134215,134216],{},"加载速度"," ，出现了 ",[255,134219,134220],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[52,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],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[66,134244,134246],{"id":134245},"_1222-扒图","12.2.2 扒图",[86,134248,134251],{"className":134249,"code":134250,"language":5170},[5168],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[92,134252,134250],{"__ignoreMap":14},[1444,134254],{"style":126385,"src":134255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1444,134257],{"style":126385,"src":134258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[66,134260,134262],{"id":134261},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1444,134264],{"style":126385,"src":134265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[10,134267,134268],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1444,134270],{"style":126385,"src":134271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[86,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",[92,134276,134277,134282,134289,134301,134313,134332,134349],{"__ignoreMap":14},[95,134278,134279],{"class":97,"line":98},[95,134280,134281],{"class":164},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[95,134283,134284,134287],{"class":97,"line":15},[95,134285,134286],{"class":1945},".icon",[95,134288,15555],{"class":105},[95,134290,134291,134293,134295,134297,134299],{"class":97,"line":1161},[95,134292,70545],{"class":154},[95,134294,51414],{"class":105},[95,134296,806],{"class":154},[95,134298,51469],{"class":101},[95,134300,1272],{"class":105},[95,134302,134303,134305,134307,134309,134311],{"class":97,"line":1176},[95,134304,70765],{"class":154},[95,134306,51414],{"class":105},[95,134308,806],{"class":154},[95,134310,51469],{"class":101},[95,134312,1272],{"class":105},[95,134314,134315,134317,134319,134321,134323,134326,134328,134330],{"class":97,"line":1182},[95,134316,70588],{"class":154},[95,134318,51414],{"class":105},[95,134320,61703],{"class":154},[95,134322,106],{"class":105},[95,134324,134325],{"class":5199},"sprites.png",[95,134327,13697],{"class":105},[95,134329,61713],{"class":154},[95,134331,1272],{"class":105},[95,134333,134334,134336,134338,134340,134342,134345,134347],{"class":97,"line":1196},[95,134335,128789],{"class":154},[95,134337,51414],{"class":105},[95,134339,51740],{"class":154},[95,134341,51469],{"class":101},[95,134343,134344],{"class":154}," -20",[95,134346,51469],{"class":101},[95,134348,1272],{"class":105},[95,134350,134351],{"class":97,"line":1202},[95,134352,1547],{"class":105},[1444,134354],{"style":126385,"src":134355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[10,134357,134358],{},"在前端中坐标轴的正方向是右和下",[37,134360,134362],{"id":134361},"_123-字体图标","12.3 字体图标",[66,134364,134366],{"id":134365},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[10,134368,134369],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[10,134371,134372],{},"精灵图是有诸多优点的，但是缺点很明显。",[10,134374,134375],{},"1.图片文件还是比较大的。",[10,134377,134378],{},"2.图片本身放大和缩小会失真。",[10,134380,134381],{},"3.一旦图片制作完毕想要更换非常复杂。",[10,134383,134384,134385,25725],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[255,134386,134387],{},"字体图标 iconfont",[10,134389,134390,134393,134394,28370],{},[255,134391,134392],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[255,134395,134396],{},"展示的是图标，本质属于字体",[66,134398,134400],{"id":134399},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1113,134402,134403,134408,134411,134414,134417],{},[52,134404,134405,134407],{},[255,134406,25861],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[52,134409,134410],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[52,134412,134413],{},"兼容性：几乎支持所有的浏览器，请放心使用",[52,134415,134416],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[52,134418,134419],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[66,134421,134423],{"id":134422},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1113,134425,134426],{},[52,134427,134428,134429],{},"icomoon字体库：",[344,134430,134433],{"href":134431,"rel":134432},"http:\u002F\u002Ficomoon.io\u002F",[23849],"http:\u002F\u002Ficomoon.io",[10,134435,134436],{},"进去之后点icomoon app",[1444,134438],{"style":126385,"src":134439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[10,134441,134442],{},"可以对其编辑：",[1444,134444],{"style":126385,"src":134445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[10,134447,134448],{},"生成字体：",[1444,134450],{"style":126385,"src":134451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[10,134453,134454],{},"下载：",[1444,134456],{"style":126385,"src":134457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1113,134459,134460],{},[52,134461,134462,134463],{},"阿里iconfont字体库： ",[344,134464,134465],{"href":134465,"rel":134466},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23849],[66,134468,134470],{"id":134469},"_1234-字体图标的引入","12.3.4 字体图标的引入",[49,134472,134473],{},[52,134474,134475,134476,134479],{},"把下载包里面的 ",[255,134477,134478],{},"fonts"," 文件夹放入页面根目录下",[1444,134481],{"style":126385,"src":134482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[49,134484,134485],{"start":15},[52,134486,134487],{},"字体文件格式",[243,134489,134490,134499],{},[246,134491,134492],{},[249,134493,134494,134497],{},[252,134495,134496],{"align":23720},"格式",[252,134498,23724],{"align":23720},[290,134500,134501,134511,134521,134531],{},[249,134502,134503,134508],{},[295,134504,134505],{"align":23720},[255,134506,134507],{},".ttf",[295,134509,134510],{"align":23720},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[249,134512,134513,134518],{},[295,134514,134515],{"align":23720},[255,134516,134517],{},".woff",[295,134519,134520],{"align":23720},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[249,134522,134523,134528],{},[295,134524,134525],{"align":23720},[255,134526,134527],{},".eot",[295,134529,134530],{"align":23720},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[249,134532,134533,134538],{},[295,134534,134535],{"align":23720},[255,134536,134537],{},"svg",[295,134539,134540],{"align":23720},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[49,134542,134543],{"start":1161},[52,134544,134545],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[86,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",[92,134550,134551,134556,134563,134575,134591,134616,134637,134657,134677,134681,134687,134697,134708],{"__ignoreMap":14},[95,134552,134553],{"class":97,"line":98},[95,134554,134555],{"class":164},"\u002F* 引入字体图标 *\u002F\n",[95,134557,134558,134561],{"class":97,"line":15},[95,134559,134560],{"class":101},"@font-face",[95,134562,15555],{"class":105},[95,134564,134565,134568,134570,134573],{"class":97,"line":1161},[95,134566,134567],{"class":154},"  font-family",[95,134569,51414],{"class":105},[95,134571,134572],{"class":210},"'icomoon'",[95,134574,1272],{"class":105},[95,134576,134577,134580,134582,134584,134586,134589],{"class":97,"line":1176},[95,134578,134579],{"class":154},"  src",[95,134581,51414],{"class":105},[95,134583,61703],{"class":154},[95,134585,106],{"class":105},[95,134587,134588],{"class":210},"'fonts\u002Ficomoon.eot'",[95,134590,2701],{"class":105},[95,134592,134593,134595,134597,134599,134601,134604,134606,134609,134611,134614],{"class":97,"line":1182},[95,134594,134579],{"class":154},[95,134596,51414],{"class":105},[95,134598,61703],{"class":154},[95,134600,106],{"class":105},[95,134602,134603],{"class":210},"'fonts\u002Ficomoon.eot?#iefix'",[95,134605,13697],{"class":105},[95,134607,134608],{"class":154},"format",[95,134610,106],{"class":105},[95,134612,134613],{"class":210},"'embedded-opentype'",[95,134615,38032],{"class":105},[95,134617,134618,134621,134623,134626,134628,134630,134632,134635],{"class":97,"line":1196},[95,134619,134620],{"class":154},"       url",[95,134622,106],{"class":105},[95,134624,134625],{"class":210},"'fonts\u002Ficomoon.woff'",[95,134627,13697],{"class":105},[95,134629,134608],{"class":154},[95,134631,106],{"class":105},[95,134633,134634],{"class":210},"'woff'",[95,134636,38032],{"class":105},[95,134638,134639,134641,134643,134646,134648,134650,134652,134655],{"class":97,"line":1202},[95,134640,134620],{"class":154},[95,134642,106],{"class":105},[95,134644,134645],{"class":210},"'fonts\u002Ficomoon.ttf'",[95,134647,13697],{"class":105},[95,134649,134608],{"class":154},[95,134651,106],{"class":105},[95,134653,134654],{"class":210},"'truetype'",[95,134656,38032],{"class":105},[95,134658,134659,134661,134663,134666,134668,134670,134672,134675],{"class":97,"line":1293},[95,134660,134620],{"class":154},[95,134662,106],{"class":105},[95,134664,134665],{"class":210},"'fonts\u002Ficomoon.svg#icomoon'",[95,134667,13697],{"class":105},[95,134669,134608],{"class":154},[95,134671,106],{"class":105},[95,134673,134674],{"class":210},"'svg'",[95,134676,2701],{"class":105},[95,134678,134679],{"class":97,"line":1299},[95,134680,1547],{"class":105},[95,134682,134683,134685],{"class":97,"line":1311},[95,134684,134286],{"class":1945},[95,134686,15555],{"class":105},[95,134688,134689,134691,134693,134695],{"class":97,"line":1594},[95,134690,134567],{"class":154},[95,134692,51414],{"class":105},[95,134694,134572],{"class":210},[95,134696,1272],{"class":105},[95,134698,134699,134702,134704,134706],{"class":97,"line":1599},[95,134700,134701],{"class":154},"  font-style",[95,134703,51414],{"class":105},[95,134705,63818],{"class":154},[95,134707,1272],{"class":105},[95,134709,134710],{"class":97,"line":1605},[95,134711,1547],{"class":105},[10,134713,134714],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1444,134716],{"style":126385,"src":134717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[49,134719,134720],{"start":1176},[52,134721,134722],{},"添加字体",[1444,134724],{"style":126385,"src":134725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[10,134727,134728],{},"复制：",[1444,134730],{"style":126385,"src":134731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[10,134733,134734],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[49,134736,134737],{"start":1182},[52,134738,134739],{},"代码展示：",[86,134741,134742],{"className":126529,"code":134548,"language":126531,"meta":14,"style":14},[92,134743,134744,134748,134754,134764,134778,134800,134818,134836,134854,134858,134864,134874,134884],{"__ignoreMap":14},[95,134745,134746],{"class":97,"line":98},[95,134747,134555],{"class":164},[95,134749,134750,134752],{"class":97,"line":15},[95,134751,134560],{"class":101},[95,134753,15555],{"class":105},[95,134755,134756,134758,134760,134762],{"class":97,"line":1161},[95,134757,134567],{"class":154},[95,134759,51414],{"class":105},[95,134761,134572],{"class":210},[95,134763,1272],{"class":105},[95,134765,134766,134768,134770,134772,134774,134776],{"class":97,"line":1176},[95,134767,134579],{"class":154},[95,134769,51414],{"class":105},[95,134771,61703],{"class":154},[95,134773,106],{"class":105},[95,134775,134588],{"class":210},[95,134777,2701],{"class":105},[95,134779,134780,134782,134784,134786,134788,134790,134792,134794,134796,134798],{"class":97,"line":1182},[95,134781,134579],{"class":154},[95,134783,51414],{"class":105},[95,134785,61703],{"class":154},[95,134787,106],{"class":105},[95,134789,134603],{"class":210},[95,134791,13697],{"class":105},[95,134793,134608],{"class":154},[95,134795,106],{"class":105},[95,134797,134613],{"class":210},[95,134799,38032],{"class":105},[95,134801,134802,134804,134806,134808,134810,134812,134814,134816],{"class":97,"line":1196},[95,134803,134620],{"class":154},[95,134805,106],{"class":105},[95,134807,134625],{"class":210},[95,134809,13697],{"class":105},[95,134811,134608],{"class":154},[95,134813,106],{"class":105},[95,134815,134634],{"class":210},[95,134817,38032],{"class":105},[95,134819,134820,134822,134824,134826,134828,134830,134832,134834],{"class":97,"line":1202},[95,134821,134620],{"class":154},[95,134823,106],{"class":105},[95,134825,134645],{"class":210},[95,134827,13697],{"class":105},[95,134829,134608],{"class":154},[95,134831,106],{"class":105},[95,134833,134654],{"class":210},[95,134835,38032],{"class":105},[95,134837,134838,134840,134842,134844,134846,134848,134850,134852],{"class":97,"line":1293},[95,134839,134620],{"class":154},[95,134841,106],{"class":105},[95,134843,134665],{"class":210},[95,134845,13697],{"class":105},[95,134847,134608],{"class":154},[95,134849,106],{"class":105},[95,134851,134674],{"class":210},[95,134853,2701],{"class":105},[95,134855,134856],{"class":97,"line":1299},[95,134857,1547],{"class":105},[95,134859,134860,134862],{"class":97,"line":1311},[95,134861,134286],{"class":1945},[95,134863,15555],{"class":105},[95,134865,134866,134868,134870,134872],{"class":97,"line":1594},[95,134867,134567],{"class":154},[95,134869,51414],{"class":105},[95,134871,134572],{"class":210},[95,134873,1272],{"class":105},[95,134875,134876,134878,134880,134882],{"class":97,"line":1599},[95,134877,134701],{"class":154},[95,134879,51414],{"class":105},[95,134881,63818],{"class":154},[95,134883,1272],{"class":105},[95,134885,134886],{"class":97,"line":1605},[95,134887,1547],{"class":105},[1444,134889],{"style":126385,"src":134890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[10,134892,134893],{},"更加细节展示：",[49,134895,134896],{},[52,134897,134898],{},"html 标签内添加小图标",[1444,134900],{"style":126385,"src":134901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[49,134903,134904],{"start":15},[52,134905,134906],{},"给标签定义字体",[86,134908,134909],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,134910,134911,134915,134929,134933],{"__ignoreMap":14},[95,134912,134913],{"class":97,"line":98},[95,134914,130640],{"class":164},[95,134916,134917,134919,134921,134923,134925,134927],{"class":97,"line":15},[95,134918,1016],{"class":105},[95,134920,51588],{"class":51277},[95,134922,53463],{"class":1945},[95,134924,151],{"class":105},[95,134926,130653],{"class":210},[95,134928,51284],{"class":105},[95,134930,134931],{"class":97,"line":1161},[95,134932,130660],{"class":105},[95,134934,134935,134937,134939],{"class":97,"line":1176},[95,134936,51762],{"class":105},[95,134938,51588],{"class":51277},[95,134940,51284],{"class":105},[10,134942,134943],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1444,134945],{"style":126385,"src":134946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[66,134948,134950],{"id":134949},"_1235-字体图标的追加","12.3.5 字体图标的追加",[10,134952,134953],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[10,134955,134956,134957,134960],{},"把压缩包里面的 ",[255,134958,134959],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[10,134962,134963],{},"打开网站，点下方：",[1444,134965],{"style":126385,"src":134966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1444,134968],{"style":126385,"src":134969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1444,134971],{"style":126385,"src":134972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[10,134974,134975],{},"点yes重新加载",[10,134977,134978],{},"然后重复之前的操作就可以实现了",[10,134980,134981],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[66,134983,134985],{"id":134984},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1444,134987],{"style":126385,"src":134988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5109,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":1161,"text":133610},{"id":133638,"depth":1161,"text":133639},{"id":133666,"depth":1161,"text":133667},{"id":133724,"depth":1161,"text":133725},{"id":134196,"depth":15,"text":134197,"children":135001},[135002,135003,135004],{"id":134200,"depth":1161,"text":134201},{"id":134245,"depth":1161,"text":134246},{"id":134261,"depth":1161,"text":134262},{"id":134361,"depth":15,"text":134362,"children":135006},[135007,135008,135009,135010,135011,135012],{"id":134365,"depth":1161,"text":134366},{"id":134399,"depth":1161,"text":134400},{"id":134422,"depth":1161,"text":134423},{"id":134469,"depth":1161,"text":134470},{"id":134949,"depth":1161,"text":134950},{"id":134984,"depth":1161,"text":134985},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133589,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135019,"title":135020,"body":135021,"description":23360,"extension":18,"meta":136248,"navigation":21,"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],[33,135024,135020],{"id":135025},"_13-界面样式与布局技巧",[37,135027,135029],{"id":135028},"_131-css三角","13.1 css三角",[10,135031,135032],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1113,135034,135035,135038,135041,135044],{},[52,135036,135037],{},"用css 边框可以模拟三角效果",[52,135039,135040],{},"宽度高度为0",[52,135042,135043],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[52,135045,135046],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[86,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",[92,135051,135052,135057,135064,135074,135084,135100,135111],{"__ignoreMap":14},[95,135053,135054],{"class":97,"line":98},[95,135055,135056],{"class":164},"\u002F* CSS 实现三角形 *\u002F\n",[95,135058,135059,135062],{"class":97,"line":15},[95,135060,135061],{"class":1945},".triangle",[95,135063,15555],{"class":105},[95,135065,135066,135068,135070,135072],{"class":97,"line":1161},[95,135067,70545],{"class":154},[95,135069,51414],{"class":105},[95,135071,297],{"class":154},[95,135073,1272],{"class":105},[95,135075,135076,135078,135080,135082],{"class":97,"line":1176},[95,135077,70765],{"class":154},[95,135079,51414],{"class":105},[95,135081,297],{"class":154},[95,135083,1272],{"class":105},[95,135085,135086,135088,135090,135092,135094,135096,135098],{"class":97,"line":1182},[95,135087,70873],{"class":154},[95,135089,51414],{"class":105},[95,135091,552],{"class":154},[95,135093,51469],{"class":101},[95,135095,51498],{"class":154},[95,135097,63968],{"class":154},[95,135099,1272],{"class":105},[95,135101,135102,135105,135107,135109],{"class":97,"line":1196},[95,135103,135104],{"class":154},"  border-bottom-color",[95,135106,51414],{"class":105},[95,135108,62346],{"class":154},[95,135110,1272],{"class":105},[95,135112,135113],{"class":97,"line":1202},[95,135114,1547],{"class":105},[86,135116,135117],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[92,135118,135119,135125,135141],{"__ignoreMap":14},[95,135120,135121,135123],{"class":97,"line":98},[95,135122,51588],{"class":51277},[95,135124,15555],{"class":105},[95,135126,135127,135129,135131,135133,135135,135137,135139],{"class":97,"line":15},[95,135128,70873],{"class":154},[95,135130,51414],{"class":105},[95,135132,323],{"class":154},[95,135134,51469],{"class":101},[95,135136,51498],{"class":154},[95,135138,129921],{"class":154},[95,135140,1272],{"class":105},[95,135142,135143],{"class":97,"line":1161},[95,135144,1547],{"class":105},[1444,135146],{"style":126385,"src":135147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[37,135149,135151],{"id":135150},"_132-css用户界面样式","13.2 css用户界面样式",[66,135153,135155],{"id":135154},"_1321-鼠标样式","13.2.1 鼠标样式",[86,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",[92,135160,135161,135166,135185,135203,135222,135239],{"__ignoreMap":14},[95,135162,135163],{"class":97,"line":98},[95,135164,135165],{"class":164},"\u002F* 鼠标样式 *\u002F\n",[95,135167,135168,135170,135172,135175,135177,135179,135182],{"class":97,"line":15},[95,135169,51588],{"class":51277},[95,135171,79784],{"class":105},[95,135173,135174],{"class":154},"cursor",[95,135176,51414],{"class":105},[95,135178,62007],{"class":154},[95,135180,135181],{"class":105},"; }   ",[95,135183,135184],{"class":164},"\u002F* 手型 *\u002F\n",[95,135186,135187,135189,135191,135193,135195,135198,135200],{"class":97,"line":1161},[95,135188,51588],{"class":51277},[95,135190,79784],{"class":105},[95,135192,135174],{"class":154},[95,135194,51414],{"class":105},[95,135196,135197],{"class":154},"default",[95,135199,135181],{"class":105},[95,135201,135202],{"class":164},"\u002F* 默认 *\u002F\n",[95,135204,135205,135207,135209,135211,135213,135216,135219],{"class":97,"line":1176},[95,135206,51588],{"class":51277},[95,135208,79784],{"class":105},[95,135210,135174],{"class":154},[95,135212,51414],{"class":105},[95,135214,135215],{"class":154},"move",[95,135217,135218],{"class":105},"; }      ",[95,135220,135221],{"class":164},"\u002F* 移动 *\u002F\n",[95,135223,135224,135226,135228,135230,135232,135234,135236],{"class":97,"line":1182},[95,135225,51588],{"class":51277},[95,135227,79784],{"class":105},[95,135229,135174],{"class":154},[95,135231,51414],{"class":105},[95,135233,5170],{"class":154},[95,135235,135218],{"class":105},[95,135237,135238],{"class":164},"\u002F* 文本 *\u002F\n",[95,135240,135241,135243,135245,135247,135249,135252,135255],{"class":97,"line":1196},[95,135242,51588],{"class":51277},[95,135244,79784],{"class":105},[95,135246,135174],{"class":154},[95,135248,51414],{"class":105},[95,135250,135251],{"class":154},"not-allowed",[95,135253,135254],{"class":105},"; } ",[95,135256,135257],{"class":164},"\u002F* 禁止 *\u002F\n",[243,135259,135260,135268],{},[246,135261,135262],{},[249,135263,135264,135266],{},[252,135265,126993],{"align":23720},[252,135267,27474],{"align":23720},[290,135269,135270,135277,135284,135291,135298],{},[249,135271,135272,135274],{},[295,135273,135197],{"align":23720},[295,135275,135276],{"align":23720},"小白 默认",[249,135278,135279,135281],{},[295,135280,62007],{"align":23720},[295,135282,135283],{"align":23720},"小手",[249,135285,135286,135288],{},[295,135287,135215],{"align":23720},[295,135289,135290],{"align":23720},"移动",[249,135292,135293,135295],{},[295,135294,5170],{"align":23720},[295,135296,135297],{"align":23720},"文本",[249,135299,135300,135302],{},[295,135301,135251],{"align":23720},[295,135303,135304],{"align":23720},"禁止",[66,135306,135308],{"id":135307},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[10,135310,135311],{},"去除表单轮廓线",[10,135313,135314],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[86,135316,135317],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[92,135318,135319,135323,135329,135345],{"__ignoreMap":14},[95,135320,135321],{"class":97,"line":98},[95,135322,129900],{"class":164},[95,135324,135325,135327],{"class":97,"line":15},[95,135326,51588],{"class":51277},[95,135328,15555],{"class":105},[95,135330,135331,135333,135335,135337,135339,135341,135343],{"class":97,"line":1161},[95,135332,70873],{"class":154},[95,135334,51414],{"class":105},[95,135336,323],{"class":154},[95,135338,51469],{"class":101},[95,135340,51498],{"class":154},[95,135342,129921],{"class":154},[95,135344,1272],{"class":105},[95,135346,135347],{"class":97,"line":1176},[95,135348,1547],{"class":105},[10,135350,135351],{},"文本域：",[1444,135353],{"style":126385,"src":135354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[10,135356,135357],{},"此时会有一个空白区域",[1444,135359],{"style":126385,"src":135360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[10,135362,135363],{},"写在同一行就不会出现这个问题",[1444,135365],{"style":126385,"src":135366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[10,135368,135369],{},"文本域是行内块元素，一定记住！！！",[10,135371,98210],{},[1444,135373],{"style":126385,"src":135374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[10,135376,135377],{},"文本域尽量放在一行",[10,135379,135380],{},"知识回顾：cols是列，rols是行",[1444,135382],{"style":126385,"src":135383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[10,135385,135386],{},"它可以进行拖动，显然这是我们不愿意看到的",[1444,135388],{"style":126385,"src":135389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[10,135391,135392],{},"使用resize进行解决",[86,135394,135396],{"className":126529,"code":135395,"language":126531,"meta":14,"style":14},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[92,135397,135398,135404,135417],{"__ignoreMap":14},[95,135399,135400,135402],{"class":97,"line":98},[95,135401,53798],{"class":51277},[95,135403,15555],{"class":105},[95,135405,135406,135408,135410,135412,135414],{"class":97,"line":15},[95,135407,70775],{"class":154},[95,135409,51414],{"class":105},[95,135411,54714],{"class":154},[95,135413,130392],{"class":105},[95,135415,135416],{"class":164},"\u002F* 取消表单轮廓线 *\u002F\n",[95,135418,135419],{"class":97,"line":1161},[95,135420,1547],{"class":105},[10,135422,135423],{},"此时就无法通过右下方实现拖动了",[66,135425,135427],{"id":135426},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[10,135429,135430],{},"实现一个盒子中的文字和图片对齐",[10,135432,135433,135434,135437],{},"用于设置一个元素的 ",[255,135435,135436],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[10,135439,135440],{},"图片和文字默认是基线对齐",[1444,135442],{"style":126385,"src":135443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[86,135445,135446],{"className":126529,"code":135395,"language":126531,"meta":14,"style":14},[92,135447,135448,135454,135466],{"__ignoreMap":14},[95,135449,135450,135452],{"class":97,"line":98},[95,135451,53798],{"class":51277},[95,135453,15555],{"class":105},[95,135455,135456,135458,135460,135462,135464],{"class":97,"line":15},[95,135457,70775],{"class":154},[95,135459,51414],{"class":105},[95,135461,54714],{"class":154},[95,135463,130392],{"class":105},[95,135465,135416],{"class":164},[95,135467,135468],{"class":97,"line":1161},[95,135469,1547],{"class":105},[1444,135471],{"style":126385,"src":135472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21981,135474,135476],{"id":135475},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[10,135478,135479],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1444,135481],{"style":126385,"src":135482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[10,135484,135485,135486,135489],{},"此时可以给图片、表单这些行内块元素的 ",[255,135487,135488],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21981,135491,135493],{"id":135492},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[10,135495,135496],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[10,135498,14616],{},[86,135500,135502],{"className":126529,"code":135501,"language":126531,"meta":14,"style":14},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[92,135503,135504,135509,135515,135527],{"__ignoreMap":14},[95,135505,135506],{"class":97,"line":98},[95,135507,135508],{"class":164},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[95,135510,135511,135513],{"class":97,"line":15},[95,135512,1444],{"class":51277},[95,135514,15555],{"class":105},[95,135516,135517,135520,135522,135525],{"class":97,"line":1161},[95,135518,135519],{"class":154},"  vertical-align",[95,135521,51414],{"class":105},[95,135523,135524],{"class":154},"middle",[95,135526,1272],{"class":105},[95,135528,135529],{"class":97,"line":1176},[95,135530,1547],{"class":105},[1444,135532],{"style":126385,"src":135533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[10,135535,135536],{},"主要解决方法有两种：",[49,135538,135539],{},[52,135540,135541,135544,135545,135548],{},[255,135542,135543],{},"给图片"," 添加 ",[255,135546,135547],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[10,135550,135551,135552],{},"2.把图片转换为块级元素 ",[255,135553,135554],{},"display: block",[10,135556,135557],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[10,135559,135560],{},"img {",[10,135562,135563],{},"vertical-align:middle;",[10,135565,1052],{},[66,135567,135569],{"id":135568},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[10,135571,135572],{},"效果：",[1444,135574],{"style":126385,"src":135575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[10,135577,135578],{},"单行文本溢出显示省略号--必须满足三个条件：",[86,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",[92,135583,135584,135589,135595,135605,135610,135620],{"__ignoreMap":14},[95,135585,135586],{"class":97,"line":98},[95,135587,135588],{"class":164},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[95,135590,135591,135593],{"class":97,"line":15},[95,135592,1444],{"class":51277},[95,135594,15555],{"class":105},[95,135596,135597,135599,135601,135603],{"class":97,"line":1161},[95,135598,135519],{"class":154},[95,135600,51414],{"class":105},[95,135602,135524],{"class":154},[95,135604,1272],{"class":105},[95,135606,135607],{"class":97,"line":1176},[95,135608,135609],{"class":164},"  \u002F* 或 *\u002F\n",[95,135611,135612,135614,135616,135618],{"class":97,"line":1182},[95,135613,128145],{"class":154},[95,135615,51414],{"class":105},[95,135617,60846],{"class":154},[95,135619,1272],{"class":105},[95,135621,135622],{"class":97,"line":1196},[95,135623,1547],{"class":105},[66,135625,135627],{"id":135626},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[10,135629,135572],{},[1444,135631],{"style":126385,"src":135632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[10,135634,135635,135636,135639],{},"多行文本溢出显示省略号， ",[255,135637,135638],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[86,135641,135642],{"className":126529,"code":135581,"language":126531,"meta":14,"style":14},[92,135643,135644,135648,135654,135664,135668,135678],{"__ignoreMap":14},[95,135645,135646],{"class":97,"line":98},[95,135647,135588],{"class":164},[95,135649,135650,135652],{"class":97,"line":15},[95,135651,1444],{"class":51277},[95,135653,15555],{"class":105},[95,135655,135656,135658,135660,135662],{"class":97,"line":1161},[95,135657,135519],{"class":154},[95,135659,51414],{"class":105},[95,135661,135524],{"class":154},[95,135663,1272],{"class":105},[95,135665,135666],{"class":97,"line":1176},[95,135667,135609],{"class":164},[95,135669,135670,135672,135674,135676],{"class":97,"line":1182},[95,135671,128145],{"class":154},[95,135673,51414],{"class":105},[95,135675,60846],{"class":154},[95,135677,1272],{"class":105},[95,135679,135680],{"class":97,"line":1196},[95,135681,1547],{"class":105},[10,135683,135684],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[37,135686,135688],{"id":135687},"_133-常见布局技巧","13.3 常见布局技巧",[10,135690,135691],{},[255,135692,135693],{},"巧妙利用一个技术更快更好的布局：",[49,135695,135696,135699,135702,135705],{},[52,135697,135698],{},"margin负值的运用",[52,135700,135701],{},"文字围绕浮动元素",[52,135703,135704],{},"行内块的巧妙运用",[52,135706,135707],{},"CSS三角强化",[66,135709,135711],{"id":135710},"_1331-margin负值的运用","13.3.1 margin负值的运用",[10,135713,135714],{},"应用场景：",[1444,135716],{"style":126385,"src":135717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1444,135719],{"style":126385,"src":135720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[10,135722,135723],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[10,135725,135726],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[86,135728,135729],{"className":126529,"code":129893,"language":126531,"meta":14,"style":14},[92,135730,135731,135735,135741,135757],{"__ignoreMap":14},[95,135732,135733],{"class":97,"line":98},[95,135734,129900],{"class":164},[95,135736,135737,135739],{"class":97,"line":15},[95,135738,51588],{"class":51277},[95,135740,15555],{"class":105},[95,135742,135743,135745,135747,135749,135751,135753,135755],{"class":97,"line":1161},[95,135744,70873],{"class":154},[95,135746,51414],{"class":105},[95,135748,323],{"class":154},[95,135750,51469],{"class":101},[95,135752,51498],{"class":154},[95,135754,129921],{"class":154},[95,135756,1272],{"class":105},[95,135758,135759],{"class":97,"line":1176},[95,135760,1547],{"class":105},[1444,135762],{"style":126385,"src":135763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[10,135765,135766],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[86,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",[92,135771,135772,135777,135783,135793,135805,135817],{"__ignoreMap":14},[95,135773,135774],{"class":97,"line":98},[95,135775,135776],{"class":164},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[95,135778,135779,135781],{"class":97,"line":15},[95,135780,130377],{"class":1945},[95,135782,15555],{"class":105},[95,135784,135785,135787,135789,135791],{"class":97,"line":1161},[95,135786,132335],{"class":154},[95,135788,51414],{"class":105},[95,135790,54741],{"class":154},[95,135792,1272],{"class":105},[95,135794,135795,135797,135799,135801,135803],{"class":97,"line":1176},[95,135796,132349],{"class":154},[95,135798,51414],{"class":105},[95,135800,552],{"class":154},[95,135802,51469],{"class":101},[95,135804,1272],{"class":105},[95,135806,135807,135809,135811,135813,135815],{"class":97,"line":1182},[95,135808,132366],{"class":154},[95,135810,51414],{"class":105},[95,135812,806],{"class":154},[95,135814,51469],{"class":101},[95,135816,1272],{"class":105},[95,135818,135819],{"class":97,"line":1196},[95,135820,1547],{"class":105},[10,135822,135823],{},"加上上述代码会发现：",[1444,135825],{"style":126385,"src":135826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[10,135828,135829],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[10,135831,135832],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[86,135834,135835],{"className":126529,"code":135769,"language":126531,"meta":14,"style":14},[92,135836,135837,135841,135847,135857,135869,135881],{"__ignoreMap":14},[95,135838,135839],{"class":97,"line":98},[95,135840,135776],{"class":164},[95,135842,135843,135845],{"class":97,"line":15},[95,135844,130377],{"class":1945},[95,135846,15555],{"class":105},[95,135848,135849,135851,135853,135855],{"class":97,"line":1161},[95,135850,132335],{"class":154},[95,135852,51414],{"class":105},[95,135854,54741],{"class":154},[95,135856,1272],{"class":105},[95,135858,135859,135861,135863,135865,135867],{"class":97,"line":1176},[95,135860,132349],{"class":154},[95,135862,51414],{"class":105},[95,135864,552],{"class":154},[95,135866,51469],{"class":101},[95,135868,1272],{"class":105},[95,135870,135871,135873,135875,135877,135879],{"class":97,"line":1182},[95,135872,132366],{"class":154},[95,135874,51414],{"class":105},[95,135876,806],{"class":154},[95,135878,51469],{"class":101},[95,135880,1272],{"class":105},[95,135882,135883],{"class":97,"line":1196},[95,135884,1547],{"class":105},[10,135886,135887],{},"解决方式2：",[10,135889,135890],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[86,135892,135894],{"className":126529,"code":135893,"language":126531,"meta":14,"style":14},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[92,135895,135896,135902,135912,135924,135936],{"__ignoreMap":14},[95,135897,135898,135900],{"class":97,"line":98},[95,135899,51588],{"class":51277},[95,135901,15555],{"class":105},[95,135903,135904,135906,135908,135910],{"class":97,"line":15},[95,135905,132335],{"class":154},[95,135907,51414],{"class":105},[95,135909,54741],{"class":154},[95,135911,1272],{"class":105},[95,135913,135914,135916,135918,135920,135922],{"class":97,"line":1161},[95,135915,132349],{"class":154},[95,135917,51414],{"class":105},[95,135919,552],{"class":154},[95,135921,51469],{"class":101},[95,135923,1272],{"class":105},[95,135925,135926,135928,135930,135932,135934],{"class":97,"line":1176},[95,135927,132366],{"class":154},[95,135929,51414],{"class":105},[95,135931,806],{"class":154},[95,135933,51469],{"class":101},[95,135935,1272],{"class":105},[95,135937,135938],{"class":97,"line":1182},[95,135939,1547],{"class":105},[66,135941,135943],{"id":135942},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[10,135945,135714],{},[1444,135947],{"style":126385,"src":135948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[10,135950,135951],{},"实现结构图：",[1444,135953],{"style":126385,"src":135954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[10,135956,135957],{},"巧妙运用浮动元素不会压住文字的特性",[10,135959,135960],{},"代码显示：",[86,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",[92,135965,135966,135972,135982,135986,135991,135995,136001,136015],{"__ignoreMap":14},[95,135967,135968,135970],{"class":97,"line":98},[95,135969,130377],{"class":1945},[95,135971,15555],{"class":105},[95,135973,135974,135976,135978,135980],{"class":97,"line":15},[95,135975,131009],{"class":154},[95,135977,51414],{"class":105},[95,135979,23720],{"class":154},[95,135981,1272],{"class":105},[95,135983,135984],{"class":97,"line":1161},[95,135985,1547],{"class":105},[95,135987,135988],{"class":97,"line":1176},[95,135989,135990],{"class":105},"```Css\n",[95,135992,135993],{"class":97,"line":1182},[95,135994,130372],{"class":164},[95,135996,135997,135999],{"class":97,"line":1196},[95,135998,130377],{"class":1945},[95,136000,15555],{"class":105},[95,136002,136003,136005,136007,136009,136011,136013],{"class":97,"line":1202},[95,136004,70447],{"class":154},[95,136006,51414],{"class":105},[95,136008,297],{"class":154},[95,136010,51533],{"class":154},[95,136012,130392],{"class":105},[95,136014,130395],{"class":164},[95,136016,136017],{"class":97,"line":1293},[95,136018,1547],{"class":105},[10,136020,136021],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[86,136023,136026],{"className":136024,"code":136025,"language":5170},[5168],"\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",[92,136027,136025],{"__ignoreMap":14},[1444,136029],{"style":126385,"src":136030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[10,136032,136033],{},"最终展示结果：",[86,136035,136036],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[92,136037,136038,136042,136048,136062],{"__ignoreMap":14},[95,136039,136040],{"class":97,"line":98},[95,136041,130372],{"class":164},[95,136043,136044,136046],{"class":97,"line":15},[95,136045,130377],{"class":1945},[95,136047,15555],{"class":105},[95,136049,136050,136052,136054,136056,136058,136060],{"class":97,"line":1161},[95,136051,70447],{"class":154},[95,136053,51414],{"class":105},[95,136055,297],{"class":154},[95,136057,51533],{"class":154},[95,136059,130392],{"class":105},[95,136061,130395],{"class":164},[95,136063,136064],{"class":97,"line":1176},[95,136065,1547],{"class":105},[1444,136067],{"style":126385,"src":136068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[37,136070,136072],{"id":136071},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[66,136074,136076],{"id":136075},"_1341-原理","13.4.1 原理",[1444,136078],{"style":126385,"src":136079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[86,136081,136082],{"className":126529,"code":130365,"language":126531,"meta":14,"style":14},[92,136083,136084,136088,136094,136108],{"__ignoreMap":14},[95,136085,136086],{"class":97,"line":98},[95,136087,130372],{"class":164},[95,136089,136090,136092],{"class":97,"line":15},[95,136091,130377],{"class":1945},[95,136093,15555],{"class":105},[95,136095,136096,136098,136100,136102,136104,136106],{"class":97,"line":1161},[95,136097,70447],{"class":154},[95,136099,51414],{"class":105},[95,136101,297],{"class":154},[95,136103,51533],{"class":154},[95,136105,130392],{"class":105},[95,136107,130395],{"class":164},[95,136109,136110],{"class":97,"line":1176},[95,136111,1547],{"class":105},[66,136113,136115],{"id":136114},"_1342-实例","13.4.2 实例",[1444,136117],{"style":126385,"src":136118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[86,136120,136121],{"className":126529,"code":130995,"language":126531,"meta":14,"style":14},[92,136122,136123,136129,136139,136143,136149,136159],{"__ignoreMap":14},[95,136124,136125,136127],{"class":97,"line":98},[95,136126,131002],{"class":1945},[95,136128,15555],{"class":105},[95,136130,136131,136133,136135,136137],{"class":97,"line":15},[95,136132,131009],{"class":154},[95,136134,51414],{"class":105},[95,136136,23720],{"class":154},[95,136138,1272],{"class":105},[95,136140,136141],{"class":97,"line":1161},[95,136142,1547],{"class":105},[95,136144,136145,136147],{"class":97,"line":1176},[95,136146,131024],{"class":1945},[95,136148,15555],{"class":105},[95,136150,136151,136153,136155,136157],{"class":97,"line":1182},[95,136152,131009],{"class":154},[95,136154,51414],{"class":105},[95,136156,72499],{"class":154},[95,136158,1272],{"class":105},[95,136160,136161],{"class":97,"line":1196},[95,136162,1547],{"class":105},[37,136164,136166],{"id":136165},"_135-css的初始化","13.5 css的初始化",[10,136168,136169],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[10,136171,136172],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[10,136174,136175],{},"每个网页都必须首先进行 CSS初始化。",[10,136177,136178],{},"这里我们以 京东CSS初始化代码为例。",[10,136180,136181],{},"在网页右键查看网页源代码",[10,136183,136184],{},"找到css的link引入语句",[10,136186,136187],{},"然后ctrl+f 输入body",[10,136189,77203],{},[1444,136191],{"style":126385,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[10,136194,77226],{},[1444,136196],{"style":126385,"src":136197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[10,136199,136200],{},"③打开了网页上传压缩的代码",[1444,136202],{"style":126385,"src":136203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[10,136205,136206],{},"④从body前可以查看这个网页的初始化代码",[10,136208,136209],{},[255,136210,136211],{},"Unicode编码字体：",[10,136213,136214],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[10,136216,83184],{},[10,136218,136219],{},"黑体 \\9ED1\\4F53",[10,136221,136222],{},"宋体 \\5B8B\\4F53",[10,136224,136225],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5109,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":1161,"text":135155},{"id":135307,"depth":1161,"text":135308},{"id":135426,"depth":1161,"text":135427},{"id":135568,"depth":1161,"text":135569},{"id":135626,"depth":1161,"text":135627},{"id":135687,"depth":15,"text":135688,"children":136240},[136241,136242],{"id":135710,"depth":1161,"text":135711},{"id":135942,"depth":1161,"text":135943},{"id":136071,"depth":15,"text":136072,"children":136244},[136245,136246],{"id":136075,"depth":1161,"text":136076},{"id":136114,"depth":1161,"text":136115},{"id":136165,"depth":15,"text":136166},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135020,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136254,"title":136255,"body":136256,"description":23360,"extension":18,"meta":137942,"navigation":21,"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],[33,136259,136255],{"id":136260},"_14-html5与css3新特性",[37,136262,136264],{"id":136263},"_141-html5的新特性","14.1 HTML5的新特性",[66,136266,136268],{"id":136267},"_1411-基本标签","14.1.1 基本标签",[10,136270,136271],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[10,136273,136274,136275,136278],{},"这些新特性都有兼容性问题，基本是 ",[255,136276,136277],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[10,136280,136281],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[10,136283,136284],{},"现在使用的是新特性：",[1113,136286,136287,136293,136299,136305,136311,136317],{},[52,136288,136289,136292],{},[92,136290,136291],{},"\u003Cheader>"," 头部标签",[52,136294,136295,136298],{},[92,136296,136297],{},"\u003Cnav>"," 导航标签",[52,136300,136301,136304],{},[92,136302,136303],{},"\u003Carticle>"," 内容标签",[52,136306,136307,136310],{},[92,136308,136309],{},"\u003Csection>"," 定义文档某个区域",[52,136312,136313,136316],{},[92,136314,136315],{},"\u003Caside>"," 侧边栏标签",[52,136318,136319,136322],{},[92,136320,136321],{},"\u003Cfooter>"," 尾部标签",[1444,136324],{"style":126385,"src":136325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[10,136327,135],{},[1113,136329,136330,136333,136336,136339],{},[52,136331,136332],{},"这种语义化标准主要是针对搜索引擎的",[52,136334,136335],{},"这些标签页面中可以经常使用",[52,136337,136338],{},"在IE9中，需要把这些元素转换为块级元素",[52,136340,136341],{},"移动端更喜欢使用这些标签",[66,136343,136345],{"id":136344},"_1412-多媒体标签","14.1.2 多媒体标签",[10,136347,136348,136349,136351,136352,136354],{},"音频 ",[255,136350,28159],{}," 和视频 ",[255,136353,28168],{}," 两个标签",[21981,136356,136358],{"id":136357},"_14121-视频标签-video","14.1.2.1 视频标签- video",[49,136360,136361],{},[52,136362,136363],{},"支持格式：",[1444,136365],{"style":126385,"src":136366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[10,136368,136369],{},"尽量使用MP4，兼容性好",[10,136371,136372],{},"用MP4就可以",[86,136374,136376],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[92,136377,136378],{"__ignoreMap":14},[95,136379,136380,136382,136384,136386,136388,136391,136393,136396,136399,136402,136404,136406],{"class":97,"line":98},[95,136381,1016],{"class":105},[95,136383,28168],{"class":51277},[95,136385,55216],{"class":1945},[95,136387,151],{"class":105},[95,136389,136390],{"class":210},"\"movie.mp4\"",[95,136392,92400],{"class":1945},[95,136394,136395],{"class":1945}," autoplay",[95,136397,136398],{"class":1945}," muted",[95,136400,136401],{"class":1945}," loop",[95,136403,55291],{"class":105},[95,136405,28168],{"class":51277},[95,136407,51284],{"class":105},[49,136409,136410],{"start":15},[52,136411,136412],{},"兼容写法",[10,136414,136415],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[86,136417,136418],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},[92,136419,136420],{"__ignoreMap":14},[95,136421,136422,136424,136426,136428,136430,136432,136434,136436,136438,136440,136442,136444],{"class":97,"line":98},[95,136423,1016],{"class":105},[95,136425,28168],{"class":51277},[95,136427,55216],{"class":1945},[95,136429,151],{"class":105},[95,136431,136390],{"class":210},[95,136433,92400],{"class":1945},[95,136435,136395],{"class":1945},[95,136437,136398],{"class":1945},[95,136439,136401],{"class":1945},[95,136441,55291],{"class":105},[95,136443,28168],{"class":51277},[95,136445,51284],{"class":105},[10,136447,136448],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[49,136450,136451],{"start":1161},[52,136452,136453],{},"video常用属性",[1444,136455],{"style":126385,"src":136456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[10,136458,136459],{},"poster属性后面是跟的等待加载图片的地址",[86,136461,136462],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,136463,136464],{"__ignoreMap":14},[95,136465,136466,136468,136470,136472,136474,136476,136478,136480,136482,136484,136486,136488],{"class":97,"line":98},[95,136467,1016],{"class":105},[95,136469,1444],{"class":51277},[95,136471,55216],{"class":1945},[95,136473,151],{"class":105},[95,136475,134046],{"class":210},[95,136477,55224],{"class":1945},[95,136479,151],{"class":105},[95,136481,134053],{"class":210},[95,136483,134056],{"class":1945},[95,136485,151],{"class":105},[95,136487,134061],{"class":210},[95,136489,51284],{"class":105},[10,136491,136492],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[86,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",[92,136497,136498,136503,136509,136533,136538,136543],{"__ignoreMap":14},[95,136499,136500],{"class":97,"line":98},[95,136501,136502],{"class":164},"\u002F* 2D 位移 *\u002F\n",[95,136504,136505,136507],{"class":97,"line":15},[95,136506,51588],{"class":51277},[95,136508,15555],{"class":105},[95,136510,136511,136514,136516,136519,136521,136523,136525,136527,136529,136531],{"class":97,"line":1161},[95,136512,136513],{"class":154},"  transform",[95,136515,51414],{"class":105},[95,136517,136518],{"class":154},"translate",[95,136520,106],{"class":105},[95,136522,417],{"class":154},[95,136524,51469],{"class":101},[95,136526,12418],{"class":105},[95,136528,762],{"class":154},[95,136530,51469],{"class":101},[95,136532,2701],{"class":105},[95,136534,136535],{"class":97,"line":1176},[95,136536,136537],{"class":164},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[95,136539,136540],{"class":97,"line":1182},[95,136541,136542],{"class":164},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[95,136544,136545],{"class":97,"line":1196},[95,136546,1547],{"class":105},[10,136548,136549],{},"muted:自动静音属性",[21981,136551,136553],{"id":136552},"_14122-音频标签audio","14.1.2.2 音频标签audio",[49,136555,136556],{},[52,136557,136558],{},"基本使用",[10,136560,136561,136562,136567,136568],{},"当前 ",[255,136563,136564],{},[92,136565,136566],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[255,136569,136570],{},"mp3格式",[1444,136572],{"style":126385,"src":136573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[49,136575,136576],{"start":15},[52,136577,136412],{},[86,136579,136580],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},[92,136581,136582],{"__ignoreMap":14},[95,136583,136584,136586,136588,136590,136592,136594,136596,136598,136600,136602,136604,136606],{"class":97,"line":98},[95,136585,1016],{"class":105},[95,136587,28168],{"class":51277},[95,136589,55216],{"class":1945},[95,136591,151],{"class":105},[95,136593,136390],{"class":210},[95,136595,92400],{"class":1945},[95,136597,136395],{"class":1945},[95,136599,136398],{"class":1945},[95,136601,136401],{"class":1945},[95,136603,55291],{"class":105},[95,136605,28168],{"class":51277},[95,136607,51284],{"class":105},[10,136609,136610],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[49,136612,136613],{"start":1161},[52,136614,136615],{},"常用属性",[1444,136617],{"style":126385,"src":136618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[86,136620,136621],{"className":127276,"code":136375,"language":127278,"meta":14,"style":14},[92,136622,136623],{"__ignoreMap":14},[95,136624,136625,136627,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647],{"class":97,"line":98},[95,136626,1016],{"class":105},[95,136628,28168],{"class":51277},[95,136630,55216],{"class":1945},[95,136632,151],{"class":105},[95,136634,136390],{"class":210},[95,136636,92400],{"class":1945},[95,136638,136395],{"class":1945},[95,136640,136398],{"class":1945},[95,136642,136401],{"class":1945},[95,136644,55291],{"class":105},[95,136646,28168],{"class":51277},[95,136648,51284],{"class":105},[10,136650,136651],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21981,136653,136655],{"id":136654},"_14123-总结","14.1.2.3 总结",[1113,136657,136658,136661,136664,136667,136670],{},[52,136659,136660],{},"音频标签和视频标签使用方式基本一致",[52,136662,136663],{},"浏览器支持情况不同",[52,136665,136666],{},"谷歌浏览器把音频和视频自动播放禁止了",[52,136668,136669],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[52,136671,136672],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[66,136674,136676],{"id":136675},"_1413-表单元素","14.1.3 表单元素",[21981,136678,136680],{"id":136679},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1444,136682],{"style":126385,"src":136683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[86,136685,136687],{"className":127276,"code":136686,"language":127278,"meta":14,"style":14},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[92,136688,136689],{"__ignoreMap":14},[95,136690,136691,136693,136695,136697,136699,136701,136703,136705,136708,136710,136712,136715],{"class":97,"line":98},[95,136692,1016],{"class":105},[95,136694,53798],{"class":51277},[95,136696,53801],{"class":1945},[95,136698,151],{"class":105},[95,136700,62676],{"class":210},[95,136702,14903],{"class":1945},[95,136704,151],{"class":105},[95,136706,136707],{"class":210},"\"username\"",[95,136709,60997],{"class":1945},[95,136711,151],{"class":105},[95,136713,136714],{"class":210},"\"请输入用户名\"",[95,136716,51284],{"class":105},[1444,136718],{"style":126385,"src":136719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21981,136721,136723],{"id":136722},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1444,136725],{"style":126385,"src":136726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[10,136728,136729],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[10,136731,136732],{},"快捷操作：",[1444,136734],{"style":126385,"src":136735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[10,136737,136738],{},"例子1：",[86,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",[92,136743,136744,136767,136794,136823,136842],{"__ignoreMap":14},[95,136745,136746,136748,136750,136752,136754,136757,136760,136762,136765],{"class":97,"line":98},[95,136747,1016],{"class":105},[95,136749,66602],{"class":51277},[95,136751,66605],{"class":1945},[95,136753,151],{"class":105},[95,136755,136756],{"class":210},"\"\u002Fsubmit\"",[95,136758,136759],{"class":1945}," method",[95,136761,151],{"class":105},[95,136763,136764],{"class":210},"\"post\"",[95,136766,51284],{"class":105},[95,136768,136769,136771,136773,136775,136777,136779,136781,136783,136785,136787,136789,136792],{"class":97,"line":15},[95,136770,52121],{"class":105},[95,136772,53798],{"class":51277},[95,136774,53801],{"class":1945},[95,136776,151],{"class":105},[95,136778,62676],{"class":210},[95,136780,14903],{"class":1945},[95,136782,151],{"class":105},[95,136784,136707],{"class":210},[95,136786,60997],{"class":1945},[95,136788,151],{"class":105},[95,136790,136791],{"class":210},"\"用户名\"",[95,136793,51284],{"class":105},[95,136795,136796,136798,136800,136802,136804,136807,136809,136811,136814,136816,136818,136821],{"class":97,"line":1161},[95,136797,52121],{"class":105},[95,136799,53798],{"class":51277},[95,136801,53801],{"class":1945},[95,136803,151],{"class":105},[95,136805,136806],{"class":210},"\"password\"",[95,136808,14903],{"class":1945},[95,136810,151],{"class":105},[95,136812,136813],{"class":210},"\"pwd\"",[95,136815,60997],{"class":1945},[95,136817,151],{"class":105},[95,136819,136820],{"class":210},"\"密码\"",[95,136822,51284],{"class":105},[95,136824,136825,136827,136829,136831,136833,136835,136838,136840],{"class":97,"line":1176},[95,136826,52121],{"class":105},[95,136828,53864],{"class":51277},[95,136830,53801],{"class":1945},[95,136832,151],{"class":105},[95,136834,66625],{"class":210},[95,136836,136837],{"class":105},">提交\u003C\u002F",[95,136839,53864],{"class":51277},[95,136841,51284],{"class":105},[95,136843,136844,136846,136848],{"class":97,"line":1182},[95,136845,51762],{"class":105},[95,136847,66602],{"class":51277},[95,136849,51284],{"class":105},[1444,136851],{"style":126385,"src":136852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[10,136854,136855],{},"value是表单域的内容",[10,136857,136858],{},"例子2：",[86,136860,136861],{"className":127276,"code":136741,"language":127278,"meta":14,"style":14},[92,136862,136863,136883,136909,136935,136953],{"__ignoreMap":14},[95,136864,136865,136867,136869,136871,136873,136875,136877,136879,136881],{"class":97,"line":98},[95,136866,1016],{"class":105},[95,136868,66602],{"class":51277},[95,136870,66605],{"class":1945},[95,136872,151],{"class":105},[95,136874,136756],{"class":210},[95,136876,136759],{"class":1945},[95,136878,151],{"class":105},[95,136880,136764],{"class":210},[95,136882,51284],{"class":105},[95,136884,136885,136887,136889,136891,136893,136895,136897,136899,136901,136903,136905,136907],{"class":97,"line":15},[95,136886,52121],{"class":105},[95,136888,53798],{"class":51277},[95,136890,53801],{"class":1945},[95,136892,151],{"class":105},[95,136894,62676],{"class":210},[95,136896,14903],{"class":1945},[95,136898,151],{"class":105},[95,136900,136707],{"class":210},[95,136902,60997],{"class":1945},[95,136904,151],{"class":105},[95,136906,136791],{"class":210},[95,136908,51284],{"class":105},[95,136910,136911,136913,136915,136917,136919,136921,136923,136925,136927,136929,136931,136933],{"class":97,"line":1161},[95,136912,52121],{"class":105},[95,136914,53798],{"class":51277},[95,136916,53801],{"class":1945},[95,136918,151],{"class":105},[95,136920,136806],{"class":210},[95,136922,14903],{"class":1945},[95,136924,151],{"class":105},[95,136926,136813],{"class":210},[95,136928,60997],{"class":1945},[95,136930,151],{"class":105},[95,136932,136820],{"class":210},[95,136934,51284],{"class":105},[95,136936,136937,136939,136941,136943,136945,136947,136949,136951],{"class":97,"line":1176},[95,136938,52121],{"class":105},[95,136940,53864],{"class":51277},[95,136942,53801],{"class":1945},[95,136944,151],{"class":105},[95,136946,66625],{"class":210},[95,136948,136837],{"class":105},[95,136950,53864],{"class":51277},[95,136952,51284],{"class":105},[95,136954,136955,136957,136959],{"class":97,"line":1182},[95,136956,51762],{"class":105},[95,136958,66602],{"class":51277},[95,136960,51284],{"class":105},[1444,136962],{"style":126385,"src":136963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[37,136965,136967],{"id":136966},"_142-css新特性","14.2 CSS新特性",[66,136969,136971],{"id":136970},"_1421-新增选择器","14.2.1 新增选择器",[21981,136973,136975],{"id":136974},"_14211-属性选择器","14.2.1.1 属性选择器",[1444,136977],{"style":126385,"src":136978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[86,136980,136982],{"className":126529,"code":136981,"language":126531,"meta":14,"style":14},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[92,136983,136984,136999,137015],{"__ignoreMap":14},[95,136985,136986,136988,136990,136992,136994,136996],{"class":97,"line":98},[95,136987,53798],{"class":51277},[95,136989,996],{"class":105},[95,136991,103084],{"class":1945},[95,136993,151],{"class":101},[95,136995,62676],{"class":210},[95,136997,136998],{"class":105},"] {\n",[95,137000,137001,137003,137005,137007,137009,137011,137013],{"class":97,"line":15},[95,137002,70873],{"class":154},[95,137004,51414],{"class":105},[95,137006,323],{"class":154},[95,137008,51469],{"class":101},[95,137010,51498],{"class":154},[95,137012,130109],{"class":154},[95,137014,1272],{"class":105},[95,137016,137017],{"class":97,"line":1161},[95,137018,1547],{"class":105},[1444,137020],{"style":126385,"src":137021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[10,137023,135],{},[1113,137025,137026,137029,137032,137035],{},[52,137027,137028],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[52,137030,137031],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[52,137033,137034],{},"属性选择器也可以选择出来自定义的属性",[52,137036,137037,137039],{},[255,137038,9008],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21981,137041,137043],{"id":137042},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1444,137045],{"style":126385,"src":137046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[49,137048,137049],{},[52,137050,137051],{},"fist-child",[86,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",[92,137056,137057,137062,137077,137097,137115],{"__ignoreMap":14},[95,137058,137059],{"class":97,"line":98},[95,137060,137061],{"class":164},"\u002F* 属性选择器 *\u002F\n",[95,137063,137064,137066,137068,137070,137072,137074],{"class":97,"line":15},[95,137065,53798],{"class":51277},[95,137067,996],{"class":105},[95,137069,103084],{"class":1945},[95,137071,151],{"class":101},[95,137073,62676],{"class":210},[95,137075,137076],{"class":105},"] { }\n",[95,137078,137079,137081,137083,137085,137088,137091,137094],{"class":97,"line":1161},[95,137080,53798],{"class":51277},[95,137082,996],{"class":105},[95,137084,14677],{"class":1945},[95,137086,137087],{"class":101},"^=",[95,137089,137090],{"class":210},"\"icon\"",[95,137092,137093],{"class":105},"] { }  ",[95,137095,137096],{"class":164},"\u002F* 以 icon 开头 *\u002F\n",[95,137098,137099,137101,137103,137105,137108,137110,137112],{"class":97,"line":1176},[95,137100,53798],{"class":51277},[95,137102,996],{"class":105},[95,137104,14677],{"class":1945},[95,137106,137107],{"class":101},"$=",[95,137109,137090],{"class":210},[95,137111,137093],{"class":105},[95,137113,137114],{"class":164},"\u002F* 以 icon 结尾 *\u002F\n",[95,137116,137117,137119,137121,137123,137126,137128,137130],{"class":97,"line":1182},[95,137118,53798],{"class":51277},[95,137120,996],{"class":105},[95,137122,14677],{"class":1945},[95,137124,137125],{"class":101},"*=",[95,137127,137090],{"class":210},[95,137129,137093],{"class":105},[95,137131,137132],{"class":164},"\u002F* 包含 icon *\u002F\n",[10,137134,137135],{},"ul的第一个儿子文本为红色",[10,137137,137138],{},"一定要在冒号前加空格，不然就是选中所有的了",[86,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",[92,137143,137144,137150,137160,137164,137168,137173,137186,137199,137215,137232,137249],{"__ignoreMap":14},[95,137145,137146,137148],{"class":97,"line":98},[95,137147,126820],{"class":1945},[95,137149,15555],{"class":105},[95,137151,137152,137154,137156,137158],{"class":97,"line":15},[95,137153,70882],{"class":154},[95,137155,51414],{"class":105},[95,137157,57398],{"class":154},[95,137159,1272],{"class":105},[95,137161,137162],{"class":97,"line":1161},[95,137163,1547],{"class":105},[95,137165,137166],{"class":97,"line":1176},[95,137167,135990],{"class":105},[95,137169,137170],{"class":97,"line":1182},[95,137171,137172],{"class":164},"\u002F* 结构伪类选择器 *\u002F\n",[95,137174,137175,137177,137180,137183],{"class":97,"line":1196},[95,137176,52],{"class":51277},[95,137178,137179],{"class":1945},":first-child",[95,137181,137182],{"class":105}," { }           ",[95,137184,137185],{"class":164},"\u002F* 第一个 *\u002F\n",[95,137187,137188,137190,137193,137196],{"class":97,"line":1202},[95,137189,52],{"class":51277},[95,137191,137192],{"class":1945},":last-child",[95,137194,137195],{"class":105}," { }            ",[95,137197,137198],{"class":164},"\u002F* 最后一个 *\u002F\n",[95,137200,137201,137203,137205,137207,137209,137212],{"class":97,"line":1293},[95,137202,52],{"class":51277},[95,137204,129443],{"class":1945},[95,137206,106],{"class":105},[95,137208,183],{"class":154},[95,137210,137211],{"class":105},") { }          ",[95,137213,137214],{"class":164},"\u002F* 第2个 *\u002F\n",[95,137216,137217,137219,137221,137223,137226,137229],{"class":97,"line":1299},[95,137218,52],{"class":51277},[95,137220,129443],{"class":1945},[95,137222,106],{"class":105},[95,137224,137225],{"class":154},"2n",[95,137227,137228],{"class":105},") { }         ",[95,137230,137231],{"class":164},"\u002F* 偶数 *\u002F\n",[95,137233,137234,137236,137238,137240,137243,137246],{"class":97,"line":1311},[95,137235,52],{"class":51277},[95,137237,129443],{"class":1945},[95,137239,106],{"class":105},[95,137241,137242],{"class":154},"2n+1",[95,137244,137245],{"class":105},") { }       ",[95,137247,137248],{"class":164},"\u002F* 奇数 *\u002F\n",[95,137250,137251,137253,137255,137257,137260,137262],{"class":97,"line":1594},[95,137252,52],{"class":51277},[95,137254,129443],{"class":1945},[95,137256,106],{"class":105},[95,137258,137259],{"class":154},"-n+3",[95,137261,137245],{"class":105},[95,137263,137264],{"class":164},"\u002F* 前3个 *\u002F\n",[51588,137266,137269],{"className":137267},[137268],"example","\n  示例内容\n",[10,137271,137272],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1113,137274,137275],{},[52,137276,137277,137280],{},[92,137278,137279],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[10,137282,137283],{},"也就是说它选择的是熊大",[49,137285,137286],{"start":1196},[52,137287,137288],{},"权重",[86,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",[92,137293,137294,137298,137308,137318,137332,137346,137360],{"__ignoreMap":14},[95,137295,137296],{"class":97,"line":98},[95,137297,137172],{"class":164},[95,137299,137300,137302,137304,137306],{"class":97,"line":15},[95,137301,52],{"class":51277},[95,137303,137179],{"class":1945},[95,137305,137182],{"class":105},[95,137307,137185],{"class":164},[95,137309,137310,137312,137314,137316],{"class":97,"line":1161},[95,137311,52],{"class":51277},[95,137313,137192],{"class":1945},[95,137315,137195],{"class":105},[95,137317,137198],{"class":164},[95,137319,137320,137322,137324,137326,137328,137330],{"class":97,"line":1176},[95,137321,52],{"class":51277},[95,137323,129443],{"class":1945},[95,137325,106],{"class":105},[95,137327,183],{"class":154},[95,137329,137211],{"class":105},[95,137331,137214],{"class":164},[95,137333,137334,137336,137338,137340,137342,137344],{"class":97,"line":1182},[95,137335,52],{"class":51277},[95,137337,129443],{"class":1945},[95,137339,106],{"class":105},[95,137341,137225],{"class":154},[95,137343,137228],{"class":105},[95,137345,137231],{"class":164},[95,137347,137348,137350,137352,137354,137356,137358],{"class":97,"line":1196},[95,137349,52],{"class":51277},[95,137351,129443],{"class":1945},[95,137353,106],{"class":105},[95,137355,137242],{"class":154},[95,137357,137245],{"class":105},[95,137359,137248],{"class":164},[95,137361,137362,137364,137366,137368,137370,137372],{"class":97,"line":1202},[95,137363,52],{"class":51277},[95,137365,129443],{"class":1945},[95,137367,106],{"class":105},[95,137369,137259],{"class":154},[95,137371,137245],{"class":105},[95,137373,137264],{"class":164},[10,137375,137376],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21981,137378,137380],{"id":137379},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[10,137382,137383],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1444,137385],{"style":126385,"src":137386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[49,137388,137389],{},[52,137390,135],{},[1113,137392,137393,137396,137399,137402,137405,137408],{},[52,137394,137395],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[52,137397,137398],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[52,137400,137401],{},"语法： element::before {}",[52,137403,137404],{},"before 和 after 必须有 content 属性",[52,137406,137407],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[52,137409,137410],{},"伪元素选择器和标签选择器一样，权重为 1",[49,137412,137413],{"start":15},[52,137414,137415],{},"实例",[86,137417,137418],{"className":126529,"code":137291,"language":126531,"meta":14,"style":14},[92,137419,137420,137424,137434,137444,137458,137472,137486],{"__ignoreMap":14},[95,137421,137422],{"class":97,"line":98},[95,137423,137172],{"class":164},[95,137425,137426,137428,137430,137432],{"class":97,"line":15},[95,137427,52],{"class":51277},[95,137429,137179],{"class":1945},[95,137431,137182],{"class":105},[95,137433,137185],{"class":164},[95,137435,137436,137438,137440,137442],{"class":97,"line":1161},[95,137437,52],{"class":51277},[95,137439,137192],{"class":1945},[95,137441,137195],{"class":105},[95,137443,137198],{"class":164},[95,137445,137446,137448,137450,137452,137454,137456],{"class":97,"line":1176},[95,137447,52],{"class":51277},[95,137449,129443],{"class":1945},[95,137451,106],{"class":105},[95,137453,183],{"class":154},[95,137455,137211],{"class":105},[95,137457,137214],{"class":164},[95,137459,137460,137462,137464,137466,137468,137470],{"class":97,"line":1182},[95,137461,52],{"class":51277},[95,137463,129443],{"class":1945},[95,137465,106],{"class":105},[95,137467,137225],{"class":154},[95,137469,137228],{"class":105},[95,137471,137231],{"class":164},[95,137473,137474,137476,137478,137480,137482,137484],{"class":97,"line":1196},[95,137475,52],{"class":51277},[95,137477,129443],{"class":1945},[95,137479,106],{"class":105},[95,137481,137242],{"class":154},[95,137483,137245],{"class":105},[95,137485,137248],{"class":164},[95,137487,137488,137490,137492,137494,137496,137498],{"class":97,"line":1202},[95,137489,52],{"class":51277},[95,137491,129443],{"class":1945},[95,137493,106],{"class":105},[95,137495,137259],{"class":154},[95,137497,137245],{"class":105},[95,137499,137264],{"class":164},[1444,137501],{"style":126385,"src":137502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[49,137504,137505],{"start":1161},[52,137506,137507],{},"使用场景1",[1444,137509],{"style":126385,"src":137510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[10,137512,137513],{},"不需要再加盒子来整红色那部分了",[86,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",[92,137518,137519,137524,137533,137544,137554,137558,137567,137578,137588],{"__ignoreMap":14},[95,137520,137521],{"class":97,"line":98},[95,137522,137523],{"class":164},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[95,137525,137526,137528,137531],{"class":97,"line":15},[95,137527,51588],{"class":51277},[95,137529,137530],{"class":1945},"::before",[95,137532,15555],{"class":105},[95,137534,137535,137538,137540,137542],{"class":97,"line":1161},[95,137536,137537],{"class":154},"  content",[95,137539,51414],{"class":105},[95,137541,7635],{"class":210},[95,137543,1272],{"class":105},[95,137545,137546,137548,137550,137552],{"class":97,"line":1176},[95,137547,128145],{"class":154},[95,137549,51414],{"class":105},[95,137551,60846],{"class":154},[95,137553,1272],{"class":105},[95,137555,137556],{"class":97,"line":1182},[95,137557,1547],{"class":105},[95,137559,137560,137562,137565],{"class":97,"line":1196},[95,137561,51588],{"class":51277},[95,137563,137564],{"class":1945},"::after",[95,137566,15555],{"class":105},[95,137568,137569,137571,137573,137576],{"class":97,"line":1202},[95,137570,137537],{"class":154},[95,137572,51414],{"class":105},[95,137574,137575],{"class":210},"\"→\"",[95,137577,1272],{"class":105},[95,137579,137580,137582,137584,137586],{"class":97,"line":1293},[95,137581,70882],{"class":154},[95,137583,51414],{"class":105},[95,137585,62047],{"class":154},[95,137587,1272],{"class":105},[95,137589,137590],{"class":97,"line":1299},[95,137591,1547],{"class":105},[1444,137593],{"style":126385,"src":137594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[10,137596,137597],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1444,137599],{"style":126385,"src":137600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[10,137602,137603],{},"但是在引用时需要先转义一下",[10,137605,137606],{},"content='\\e930'",[49,137608,137609],{"start":1176},[52,137610,137611],{},"使用场景2",[10,137613,137614],{},"仿土豆效果",[10,137616,137617],{},"通过使用伪元素选择器可以减少body中盒子的数量",[86,137619,137620],{"className":126529,"code":137516,"language":126531,"meta":14,"style":14},[92,137621,137622,137626,137634,137644,137654,137658,137666,137676,137686],{"__ignoreMap":14},[95,137623,137624],{"class":97,"line":98},[95,137625,137523],{"class":164},[95,137627,137628,137630,137632],{"class":97,"line":15},[95,137629,51588],{"class":51277},[95,137631,137530],{"class":1945},[95,137633,15555],{"class":105},[95,137635,137636,137638,137640,137642],{"class":97,"line":1161},[95,137637,137537],{"class":154},[95,137639,51414],{"class":105},[95,137641,7635],{"class":210},[95,137643,1272],{"class":105},[95,137645,137646,137648,137650,137652],{"class":97,"line":1176},[95,137647,128145],{"class":154},[95,137649,51414],{"class":105},[95,137651,60846],{"class":154},[95,137653,1272],{"class":105},[95,137655,137656],{"class":97,"line":1182},[95,137657,1547],{"class":105},[95,137659,137660,137662,137664],{"class":97,"line":1196},[95,137661,51588],{"class":51277},[95,137663,137564],{"class":1945},[95,137665,15555],{"class":105},[95,137667,137668,137670,137672,137674],{"class":97,"line":1202},[95,137669,137537],{"class":154},[95,137671,51414],{"class":105},[95,137673,137575],{"class":210},[95,137675,1272],{"class":105},[95,137677,137678,137680,137682,137684],{"class":97,"line":1293},[95,137679,70882],{"class":154},[95,137681,51414],{"class":105},[95,137683,62047],{"class":154},[95,137685,1272],{"class":105},[95,137687,137688],{"class":97,"line":1299},[95,137689,1547],{"class":105},[1444,137691],{"style":126385,"src":137692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[49,137694,137695],{"start":1182},[52,137696,137697],{},"使用场景3",[10,137699,137700],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[86,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",[92,137705,137706,137712,137722,137726,137730,137734,137742,137752,137762,137766,137774,137784,137794],{"__ignoreMap":14},[95,137707,137708,137710],{"class":97,"line":98},[95,137709,130377],{"class":1945},[95,137711,15555],{"class":105},[95,137713,137714,137716,137718,137720],{"class":97,"line":15},[95,137715,131009],{"class":154},[95,137717,51414],{"class":105},[95,137719,23720],{"class":154},[95,137721,1272],{"class":105},[95,137723,137724],{"class":97,"line":1161},[95,137725,1547],{"class":105},[95,137727,137728],{"class":97,"line":1176},[95,137729,135990],{"class":105},[95,137731,137732],{"class":97,"line":1182},[95,137733,137523],{"class":164},[95,137735,137736,137738,137740],{"class":97,"line":1196},[95,137737,51588],{"class":51277},[95,137739,137530],{"class":1945},[95,137741,15555],{"class":105},[95,137743,137744,137746,137748,137750],{"class":97,"line":1202},[95,137745,137537],{"class":154},[95,137747,51414],{"class":105},[95,137749,7635],{"class":210},[95,137751,1272],{"class":105},[95,137753,137754,137756,137758,137760],{"class":97,"line":1293},[95,137755,128145],{"class":154},[95,137757,51414],{"class":105},[95,137759,60846],{"class":154},[95,137761,1272],{"class":105},[95,137763,137764],{"class":97,"line":1299},[95,137765,1547],{"class":105},[95,137767,137768,137770,137772],{"class":97,"line":1311},[95,137769,51588],{"class":51277},[95,137771,137564],{"class":1945},[95,137773,15555],{"class":105},[95,137775,137776,137778,137780,137782],{"class":97,"line":1594},[95,137777,137537],{"class":154},[95,137779,51414],{"class":105},[95,137781,137575],{"class":210},[95,137783,1272],{"class":105},[95,137785,137786,137788,137790,137792],{"class":97,"line":1599},[95,137787,70882],{"class":154},[95,137789,51414],{"class":105},[95,137791,62047],{"class":154},[95,137793,1272],{"class":105},[95,137795,137796],{"class":97,"line":1605},[95,137797,1547],{"class":105},[10,137799,137800],{},"div {\nmargin: 0 auto;\n}",[86,137802,137805],{"className":137803,"code":137804,"language":5170},[5168],"\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",[92,137806,137804],{"__ignoreMap":14},[10,137808,137809],{},"如果想让多个元素都发生变化",[10,137811,137812],{},"不能如下操作：",[10,137814,137815],{},"transition: width 2s ease 0.5s;",[10,137817,137818],{},"transition: height 2s ease 0.5s;不对！！！",[10,137820,137821],{},"上方会样式冲突，导致不显示任何过渡效果",[10,137823,137824],{},"使用如下：加逗号隔开",[10,137826,137827],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[10,137829,137830],{},"transition all 2s ease;",[66,137832,137834],{"id":137833},"_1426-过渡练习","14.2.6 过渡练习",[49,137836,137837],{},[52,137838,137839],{},"进度条",[1444,137841],{"style":126385,"src":137842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[86,137844,137846],{"className":126529,"code":137845,"language":126531,"meta":14,"style":14},"div {\n  transition: all 0.3s ease;\n}\n",[92,137847,137848,137854,137872],{"__ignoreMap":14},[95,137849,137850,137852],{"class":97,"line":98},[95,137851,51588],{"class":51277},[95,137853,15555],{"class":105},[95,137855,137856,137859,137861,137863,137866,137868,137870],{"class":97,"line":15},[95,137857,137858],{"class":154},"  transition",[95,137860,51414],{"class":105},[95,137862,28106],{"class":154},[95,137864,137865],{"class":154}," 0.3",[95,137867,801],{"class":101},[95,137869,78657],{"class":154},[95,137871,1272],{"class":105},[95,137873,137874],{"class":97,"line":1161},[95,137875,1547],{"class":105},[49,137877,137878],{"start":15},[52,137879,137880],{},"小米logo",[10,137882,137883],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[86,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",[92,137888,137889,137894,137900,137916,137921],{"__ignoreMap":14},[95,137890,137891],{"class":97,"line":98},[95,137892,137893],{"class":164},"\u002F* CSS3 过渡 *\u002F\n",[95,137895,137896,137898],{"class":97,"line":15},[95,137897,51588],{"class":51277},[95,137899,15555],{"class":105},[95,137901,137902,137904,137906,137908,137910,137912,137914],{"class":97,"line":1161},[95,137903,137858],{"class":154},[95,137905,51414],{"class":105},[95,137907,28106],{"class":154},[95,137909,137865],{"class":154},[95,137911,801],{"class":101},[95,137913,78657],{"class":154},[95,137915,1272],{"class":105},[95,137917,137918],{"class":97,"line":1176},[95,137919,137920],{"class":164},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[95,137922,137923],{"class":97,"line":1182},[95,137924,1547],{"class":105},[10,137926,137927],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5109,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":1161,"text":136268},{"id":136344,"depth":1161,"text":136345},{"id":136675,"depth":1161,"text":136676},{"id":136966,"depth":15,"text":136967,"children":137939},[137940,137941],{"id":136970,"depth":1161,"text":136971},{"id":137833,"depth":1161,"text":137834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136255,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137948,"title":137949,"body":137950,"description":23360,"extension":18,"meta":139694,"navigation":21,"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],[33,137953,137949],{"id":137954},"_15-品优购项目上篇-搭建与公共模块",[37,137956,137958],{"id":137957},"_151-项目规划","15.1 项目规划",[1444,137960],{"style":126385,"src":137961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[10,137963,137964,137967],{},[255,137965,137966],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[10,137969,137970,137973],{},[255,137971,137972],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[37,137975,137977],{"id":137976},"_152-项目介绍","15.2 项目介绍",[10,137979,137966],{},[1444,137981],{"style":126385,"src":137982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[10,137984,137985],{},"主页：",[1444,137987],{"style":126385,"src":137988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[10,137990,137991],{},"列表页：",[1444,137993],{"style":126385,"src":137994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[10,137996,137997],{},"注册页：",[1444,137999],{"style":126385,"src":138000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[37,138002,138004],{"id":138003},"_153-项目搭建工作","15.3 项目搭建工作",[66,138006,138008],{"id":138007},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1444,138010],{"style":126385,"src":138011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[10,138013,138014],{},"经常更换的图片要放到upload文件夹中",[10,138016,138017],{},"不经常换的放到images文件夹中",[66,138019,138021],{"id":138020},"_1532-创建文件如下","15.3.2 创建文件如下",[1444,138023],{"style":126385,"src":138024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1444,138026],{"style":126385,"src":138027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[10,138029,138030],{},[255,138031,138032],{},"初始化样式：",[10,138034,138035],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[10,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}",[10,138040,138041],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[66,138043,138045],{"id":138044},"_1533-项目模块化开发","15.3.3 项目模块化开发",[10,138047,138048],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[10,138050,138051,138052,138057],{},"这里最典型的应用就是 ",[255,138053,138054],{},[92,138055,138056],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1444,138059],{"style":126385,"src":138060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[10,138062,138063],{},"通过link方法来引入",[66,138065,138067],{"id":138066},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1444,138069],{"style":126385,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[10,138072,138073],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[49,138075,138076],{},[52,138077,138078],{},"制作favicon图标",[10,138080,138081,138082,138085],{},"①把品优购图标切成 ",[92,138083,138084],{},"png"," 图片",[10,138087,138088,138089,138091,138092,138095,138096],{},"②把 ",[92,138090,138084],{}," 图片转换为 ",[92,138093,138094],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[344,138097,138098],{"href":138098,"rel":138099},"http:\u002F\u002Fwww.bitbug.net\u002F",[23849],[49,138101,138102,138105],{"start":15},[52,138103,138104],{},"favicon图标放到网站根目录下",[52,138106,138107],{},"HTML页面引入favicon",[10,138109,138110,138111,138114],{},"在html 页面里面的 ",[92,138112,138113],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[10,138116,138117],{},[92,138118,138119],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[10,138121,138122],{},"复制这行代码或者在生成这个的网站进行复制",[1444,138124],{"style":126385,"src":138125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[10,138127,138128],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[10,138130,138131,138132],{},"例如:",[344,138133,138134],{"href":138134,"rel":138135},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23849],[66,138137,138139],{"id":138138},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[10,138141,138142,138145],{},[255,138143,138144],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[10,138147,138148,138151],{},[255,138149,138150],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[10,138153,138154],{},"页面必须有三个标签用来符合 SEO 优化",[1444,138156],{"style":126385,"src":138157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[49,138159,138160],{},[52,138161,138162],{},"title网站标题",[10,138164,138165,138168],{},[255,138166,138167],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[10,138170,68767],{},[1113,138172,138173,138176],{},[52,138174,138175],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[52,138177,138178],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[49,138180,138181],{"start":15},[52,138182,138183],{},"description网站描述",[10,138185,138186],{},"简要说明我们网站主要是做什么的",[10,138188,138189,138192],{},[255,138190,138191],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[10,138194,68767],{},[10,138196,138197],{},[92,138198,138199],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[49,138201,138202],{"start":1161},[52,138203,138204],{},"keywords关键词",[10,138206,138207],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[10,138209,68767],{},[10,138211,138212],{},[92,138213,138214],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[10,138216,138217],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[10,138219,138220],{},[255,138221,138222],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[49,138224,138225],{"start":1176},[52,138226,138227],{},"代码总结",[86,138229,138230],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,138231,138232,138236,138250,138254],{"__ignoreMap":14},[95,138233,138234],{"class":97,"line":98},[95,138235,130640],{"class":164},[95,138237,138238,138240,138242,138244,138246,138248],{"class":97,"line":15},[95,138239,1016],{"class":105},[95,138241,51588],{"class":51277},[95,138243,53463],{"class":1945},[95,138245,151],{"class":105},[95,138247,130653],{"class":210},[95,138249,51284],{"class":105},[95,138251,138252],{"class":97,"line":1161},[95,138253,130660],{"class":105},[95,138255,138256,138258,138260],{"class":97,"line":1176},[95,138257,51762],{"class":105},[95,138259,51588],{"class":51277},[95,138261,51284],{"class":105},[37,138263,138265],{"id":138264},"_154-项目公共部分制作","15.4 项目公共部分制作",[66,138267,138269],{"id":138268},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1444,138271],{"style":126385,"src":138272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[66,138274,138276],{"id":138275},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[10,138278,138279],{},"布局思路：",[1113,138281,138282,138285,138288,138310,138343],{},[52,138283,138284],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[52,138286,138287],{},"里面包含版心的盒子",[52,138289,138290,138291],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1113,138292,138293,138301,138307],{},[52,138294,138295,138296,21483,138298,138300],{},"1 号盒子 里面包含一个",[92,138297,1113],{},[92,138299,1113],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[52,138302,138303,138304,138306],{},"里面的内容是水平排列，所以需要给",[92,138305,52],{},"设置浮动",[52,138308,138309],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[52,138311,138312,138313],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1113,138314,138315,138329,138334],{},[52,138316,138317,138318,21483,138320,138322,138323,138325,138326,138328],{},"2 号盒子 里面包含一个",[92,138319,1113],{},[92,138321,1113],{},"包裹",[92,138324,52],{},"，中间的",[92,138327,1027],{},"可以用样式去设置，也可以用字符 |",[52,138330,138331,138332,138306],{},"里面内容水平排列，给",[92,138333,52],{},[52,138335,138336,138337,138339,138340,138342],{},"找到里面所有偶数的 ",[92,138338,52],{}," 设置样式（偶数的 ",[92,138341,52],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[52,138344,138345,138346],{},"需要用到字体图标",[1113,138347,138348,138354,138357,138360,138363],{},[52,138349,138350,138351],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[92,138352,138353],{},"arrow-icon",[52,138355,138356],{},"先要引入字体图片的资源",[52,138358,138359],{},"在样式里面利用 font-face 来进行声明",[52,138361,138362],{},"在伪元素的 content属性设置 图标的编码",[52,138364,138365],{},"给伪元素设置font-family属性",[10,138367,138368],{},"结构实例代码：",[86,138370,138372],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},"div::before {\n  content: \"\";\n  display: block;\n}\n",[92,138373,138374,138382,138392,138402],{"__ignoreMap":14},[95,138375,138376,138378,138380],{"class":97,"line":98},[95,138377,51588],{"class":51277},[95,138379,137530],{"class":1945},[95,138381,15555],{"class":105},[95,138383,138384,138386,138388,138390],{"class":97,"line":15},[95,138385,137537],{"class":154},[95,138387,51414],{"class":105},[95,138389,7635],{"class":210},[95,138391,1272],{"class":105},[95,138393,138394,138396,138398,138400],{"class":97,"line":1161},[95,138395,128145],{"class":154},[95,138397,51414],{"class":105},[95,138399,60846],{"class":154},[95,138401,1272],{"class":105},[95,138403,138404],{"class":97,"line":1176},[95,138405,1547],{"class":105},[10,138407,138408],{},"样式实例代码：",[86,138410,138411],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,138412,138413,138421,138431,138441],{"__ignoreMap":14},[95,138414,138415,138417,138419],{"class":97,"line":98},[95,138416,51588],{"class":51277},[95,138418,137530],{"class":1945},[95,138420,15555],{"class":105},[95,138422,138423,138425,138427,138429],{"class":97,"line":15},[95,138424,137537],{"class":154},[95,138426,51414],{"class":105},[95,138428,7635],{"class":210},[95,138430,1272],{"class":105},[95,138432,138433,138435,138437,138439],{"class":97,"line":1161},[95,138434,128145],{"class":154},[95,138436,51414],{"class":105},[95,138438,60846],{"class":154},[95,138440,1272],{"class":105},[95,138442,138443],{"class":97,"line":1176},[95,138444,1547],{"class":105},[66,138446,138448],{"id":138447},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1113,138450,138451],{},[52,138452,138453],{},"header 盒子必须要有高度",[10,138455,138456,138457,138459,138460],{},"1 号盒子是 ",[92,138458,131541],{}," 标志定位，在正常开发过程中， ",[255,138461,138462,138463,138466],{},"logo的布局其实是有讲究的，需要进行 ",[92,138464,138465],{},"logoSEO","的优化 （★★★）",[1113,138468,138469,138477,138485,138512],{},[52,138470,138471,138473,138474,138476],{},[92,138472,131541],{}," 里面首先放一个 ",[92,138475,33],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[52,138478,138479,138481,138482,138484],{},[92,138480,33],{}," 里面再放一个链接，可以返回首页的，把 ",[92,138483,131541],{}," 的背景图片给链接即可",[52,138486,138487,138488],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1113,138489,138490,138505],{},[52,138491,138492,138493,138496,138497,138500,138501,138504],{},"方法1：",[92,138494,138495],{},"text-indent"," 移到盒子外面（",[92,138498,138499],{},"text-indent: -9999px",") ，然后 ",[92,138502,138503],{},"overflow:hidden"," ，淘宝的做法",[52,138506,138507,138508,138511],{},"方法2：直接给 ",[92,138509,138510],{},"font-size: 0;"," 就看不到文字了，京东的做法",[52,138513,138514,138515,138517,138518,138520],{},"最后给链接一个 ",[92,138516,51384],{}," 属性，这样鼠标放到 ",[92,138519,131541],{}," 上就可以看到提示文字了",[10,138522,138368],{},[86,138524,138525],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},[92,138526,138527],{"__ignoreMap":14},[95,138528,138529,138531,138533,138535,138537,138539,138541,138543,138545,138547,138549],{"class":97,"line":98},[95,138530,1016],{"class":105},[95,138532,344],{"class":51277},[95,138534,61034],{"class":1945},[95,138536,151],{"class":105},[95,138538,131777],{"class":210},[95,138540,131780],{"class":1945},[95,138542,151],{"class":105},[95,138544,131785],{"class":210},[95,138546,131788],{"class":105},[95,138548,344],{"class":51277},[95,138550,51284],{"class":105},[10,138552,138408],{},[86,138554,138555],{"className":127276,"code":131762,"language":127278,"meta":14,"style":14},[92,138556,138557],{"__ignoreMap":14},[95,138558,138559,138561,138563,138565,138567,138569,138571,138573,138575,138577,138579],{"class":97,"line":98},[95,138560,1016],{"class":105},[95,138562,344],{"class":51277},[95,138564,61034],{"class":1945},[95,138566,151],{"class":105},[95,138568,131777],{"class":210},[95,138570,131780],{"class":1945},[95,138572,151],{"class":105},[95,138574,131785],{"class":210},[95,138576,131788],{"class":105},[95,138578,344],{"class":51277},[95,138580,51284],{"class":105},[10,138582,138583,138584,138586],{},"2 号盒子是 ",[92,138585,131554],{}," 搜索模块定位",[1113,138588,138589,138592,138595,138598],{},[52,138590,138591],{},"search盒子利用定位的方式放在对应的位置",[52,138593,138594],{},"search盒子设置绝对定位，header盒子设置相对定位",[52,138596,138597],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[52,138599,138600],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[10,138602,138368],{},[86,138604,138605],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},[92,138606,138607,138629,138633,138643],{"__ignoreMap":14},[95,138608,138609,138611,138613,138615,138617,138619,138621,138623,138625,138627],{"class":97,"line":98},[95,138610,51588],{"class":51277},[95,138612,12418],{"class":105},[95,138614,10],{"class":51277},[95,138616,12418],{"class":105},[95,138618,33],{"class":51277},[95,138620,12418],{"class":105},[95,138622,1113],{"class":51277},[95,138624,12418],{"class":105},[95,138626,52],{"class":51277},[95,138628,15555],{"class":105},[95,138630,138631],{"class":97,"line":15},[95,138632,131878],{"class":164},[95,138634,138635,138637,138639,138641],{"class":97,"line":1161},[95,138636,128145],{"class":154},[95,138638,51414],{"class":105},[95,138640,60846],{"class":154},[95,138642,1272],{"class":105},[95,138644,138645],{"class":97,"line":1176},[95,138646,1547],{"class":105},[10,138648,138408],{},[86,138650,138651],{"className":126529,"code":131849,"language":126531,"meta":14,"style":14},[92,138652,138653,138675,138679,138689],{"__ignoreMap":14},[95,138654,138655,138657,138659,138661,138663,138665,138667,138669,138671,138673],{"class":97,"line":98},[95,138656,51588],{"class":51277},[95,138658,12418],{"class":105},[95,138660,10],{"class":51277},[95,138662,12418],{"class":105},[95,138664,33],{"class":51277},[95,138666,12418],{"class":105},[95,138668,1113],{"class":51277},[95,138670,12418],{"class":105},[95,138672,52],{"class":51277},[95,138674,15555],{"class":105},[95,138676,138677],{"class":97,"line":15},[95,138678,131878],{"class":164},[95,138680,138681,138683,138685,138687],{"class":97,"line":1161},[95,138682,128145],{"class":154},[95,138684,51414],{"class":105},[95,138686,60846],{"class":154},[95,138688,1272],{"class":105},[95,138690,138691],{"class":97,"line":1176},[95,138692,1547],{"class":105},[10,138694,138695],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[10,138697,138698,138699,138702],{},"3 号盒子是 ",[92,138700,138701],{},"hotwords"," 热词模块定位",[1113,138704,138705,138708,138711],{},[52,138706,138707],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[52,138709,138710],{},"给里面所有的a标签设置 左右10px的外边距",[52,138712,138713],{},"给第一个a标签设置文字变红色（#c81623）",[10,138715,138368],{},[86,138717,138719],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},"div {\n  margin: 0 auto;\n}\n",[92,138720,138721,138727,138739],{"__ignoreMap":14},[95,138722,138723,138725],{"class":97,"line":98},[95,138724,51588],{"class":51277},[95,138726,15555],{"class":105},[95,138728,138729,138731,138733,138735,138737],{"class":97,"line":15},[95,138730,70447],{"class":154},[95,138732,51414],{"class":105},[95,138734,297],{"class":154},[95,138736,51533],{"class":154},[95,138738,1272],{"class":105},[95,138740,138741],{"class":97,"line":1161},[95,138742,1547],{"class":105},[10,138744,138408],{},[86,138746,138747],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,138748,138749,138755,138767],{"__ignoreMap":14},[95,138750,138751,138753],{"class":97,"line":98},[95,138752,51588],{"class":51277},[95,138754,15555],{"class":105},[95,138756,138757,138759,138761,138763,138765],{"class":97,"line":15},[95,138758,70447],{"class":154},[95,138760,51414],{"class":105},[95,138762,297],{"class":154},[95,138764,51533],{"class":154},[95,138766,1272],{"class":105},[95,138768,138769],{"class":97,"line":1161},[95,138770,1547],{"class":105},[10,138772,138773,138774,138777],{},"4 号盒子是 ",[92,138775,138776],{},"shopcar"," 购物车模块",[1113,138779,138780,138785,138788,138791],{},[52,138781,123312,138782,138784],{},[92,138783,138776],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[52,138786,138787],{},"count 统计部分用绝对定位做",[52,138789,138790],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[52,138792,138793],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[10,138795,138368],{},[86,138797,138798],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,138799,138800,138804,138818,138822,138836,138840,138854,138858,138872,138876],{"__ignoreMap":14},[95,138801,138802],{"class":97,"line":98},[95,138803,131968],{"class":164},[95,138805,138806,138808,138810,138812,138814,138816],{"class":97,"line":15},[95,138807,131973],{"class":1945},[95,138809,79784],{"class":105},[95,138811,128889],{"class":154},[95,138813,51414],{"class":105},[95,138815,131982],{"class":154},[95,138817,129459],{"class":105},[95,138819,138820],{"class":97,"line":1161},[95,138821,131989],{"class":164},[95,138823,138824,138826,138828,138830,138832,138834],{"class":97,"line":1176},[95,138825,131994],{"class":1945},[95,138827,79784],{"class":105},[95,138829,128889],{"class":154},[95,138831,51414],{"class":105},[95,138833,54741],{"class":154},[95,138835,129459],{"class":105},[95,138837,138838],{"class":97,"line":1182},[95,138839,132009],{"class":164},[95,138841,138842,138844,138846,138848,138850,138852],{"class":97,"line":1196},[95,138843,132014],{"class":1945},[95,138845,79784],{"class":105},[95,138847,128889],{"class":154},[95,138849,51414],{"class":105},[95,138851,54808],{"class":154},[95,138853,129459],{"class":105},[95,138855,138856],{"class":97,"line":1202},[95,138857,132029],{"class":164},[95,138859,138860,138862,138864,138866,138868,138870],{"class":97,"line":1293},[95,138861,132034],{"class":1945},[95,138863,79784],{"class":105},[95,138865,128889],{"class":154},[95,138867,51414],{"class":105},[95,138869,86210],{"class":154},[95,138871,129459],{"class":105},[95,138873,138874],{"class":97,"line":1299},[95,138875,132049],{"class":164},[95,138877,138878,138880,138882,138884,138886,138888],{"class":97,"line":1311},[95,138879,132054],{"class":1945},[95,138881,79784],{"class":105},[95,138883,128889],{"class":154},[95,138885,51414],{"class":105},[95,138887,132063],{"class":154},[95,138889,129459],{"class":105},[10,138891,138408],{},[86,138893,138894],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,138895,138896,138900,138914,138918,138932,138936,138950,138954,138968,138972],{"__ignoreMap":14},[95,138897,138898],{"class":97,"line":98},[95,138899,131968],{"class":164},[95,138901,138902,138904,138906,138908,138910,138912],{"class":97,"line":15},[95,138903,131973],{"class":1945},[95,138905,79784],{"class":105},[95,138907,128889],{"class":154},[95,138909,51414],{"class":105},[95,138911,131982],{"class":154},[95,138913,129459],{"class":105},[95,138915,138916],{"class":97,"line":1161},[95,138917,131989],{"class":164},[95,138919,138920,138922,138924,138926,138928,138930],{"class":97,"line":1176},[95,138921,131994],{"class":1945},[95,138923,79784],{"class":105},[95,138925,128889],{"class":154},[95,138927,51414],{"class":105},[95,138929,54741],{"class":154},[95,138931,129459],{"class":105},[95,138933,138934],{"class":97,"line":1182},[95,138935,132009],{"class":164},[95,138937,138938,138940,138942,138944,138946,138948],{"class":97,"line":1196},[95,138939,132014],{"class":1945},[95,138941,79784],{"class":105},[95,138943,128889],{"class":154},[95,138945,51414],{"class":105},[95,138947,54808],{"class":154},[95,138949,129459],{"class":105},[95,138951,138952],{"class":97,"line":1202},[95,138953,132029],{"class":164},[95,138955,138956,138958,138960,138962,138964,138966],{"class":97,"line":1293},[95,138957,132034],{"class":1945},[95,138959,79784],{"class":105},[95,138961,128889],{"class":154},[95,138963,51414],{"class":105},[95,138965,86210],{"class":154},[95,138967,129459],{"class":105},[95,138969,138970],{"class":97,"line":1299},[95,138971,132049],{"class":164},[95,138973,138974,138976,138978,138980,138982,138984],{"class":97,"line":1311},[95,138975,132054],{"class":1945},[95,138977,79784],{"class":105},[95,138979,128889],{"class":154},[95,138981,51414],{"class":105},[95,138983,132063],{"class":154},[95,138985,129459],{"class":105},[66,138987,138989,138990,138992],{"id":138988},"_1544-nav导航模块制作","15.4.4 ",[92,138991,53690],{},"导航模块制作",[1444,138994],{"style":126385,"src":138995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[10,138997,138998,139000],{},[92,138999,53690],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[10,139002,139003,139004],{},"1 号盒子左侧浮动，",[92,139005,139006],{},"dropdown",[1113,139008,139009,139019,139027,139033,139041,139051,139059,139070],{},[52,139010,139011,139012,100995,139015,139018],{},"1号盒子有讲究，根据相关性 里面包含 ",[92,139013,139014],{},".dt",[92,139016,139017],{},".dd"," 两个盒子",[52,139020,139021,139023,139024,139026],{},[92,139022,139014],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[92,139025,139017],{}," 挤到下面去了",[52,139028,139029,139030,139032],{},"给 ",[92,139031,139017],{}," 盒子设置宽度 和 高度，以及背景颜色",[52,139034,139029,139035,139037,139038,120214],{},[92,139036,139017],{}," 盒子里面定义 无序列表 （",[92,139039,139040],{},"ul > li > a",[52,139042,139043,139044,139046,139047,139050],{},"每个 ",[92,139045,52],{}," 都有一个高度（",[92,139048,139049],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[52,139052,139029,139053,139055,139056,120214],{},[92,139054,52],{}," 里面的a设置文字大小（",[92,139057,139058],{},"14px",[52,139060,139029,139061,139063,139064,139066,139067,139069],{},[92,139062,52],{}," 设置 ",[92,139065,127690],{},"，当鼠标移入的时候，让",[92,139068,52],{},"的背景变成白色，让里面的文字变成红色",[52,139071,139072,139074,139075,139077,139078,139080],{},[92,139073,52],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[92,139076,52],{},"的右侧，那么给",[92,139079,52],{},"设置相对定位",[10,139082,139083],{},"一定要注意相关性",[10,139085,138368],{},[86,139087,139088],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,139089,139090,139098,139108,139118],{"__ignoreMap":14},[95,139091,139092,139094,139096],{"class":97,"line":98},[95,139093,51588],{"class":51277},[95,139095,137530],{"class":1945},[95,139097,15555],{"class":105},[95,139099,139100,139102,139104,139106],{"class":97,"line":15},[95,139101,137537],{"class":154},[95,139103,51414],{"class":105},[95,139105,7635],{"class":210},[95,139107,1272],{"class":105},[95,139109,139110,139112,139114,139116],{"class":97,"line":1161},[95,139111,128145],{"class":154},[95,139113,51414],{"class":105},[95,139115,60846],{"class":154},[95,139117,1272],{"class":105},[95,139119,139120],{"class":97,"line":1176},[95,139121,1547],{"class":105},[10,139123,138408],{},[86,139125,139126],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,139127,139128,139136,139146,139156],{"__ignoreMap":14},[95,139129,139130,139132,139134],{"class":97,"line":98},[95,139131,51588],{"class":51277},[95,139133,137530],{"class":1945},[95,139135,15555],{"class":105},[95,139137,139138,139140,139142,139144],{"class":97,"line":15},[95,139139,137537],{"class":154},[95,139141,51414],{"class":105},[95,139143,7635],{"class":210},[95,139145,1272],{"class":105},[95,139147,139148,139150,139152,139154],{"class":97,"line":1161},[95,139149,128145],{"class":154},[95,139151,51414],{"class":105},[95,139153,60846],{"class":154},[95,139155,1272],{"class":105},[95,139157,139158],{"class":97,"line":1176},[95,139159,1547],{"class":105},[10,139161,139162],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[10,139164,139165,139166,139169],{},"2 号盒子左侧浮动，",[92,139167,139168],{},"navitems"," 导航栏组",[1113,139171,139172,139177,139186],{},[52,139173,139174,139175],{},"里面结构是 ",[92,139176,139040],{},[52,139178,139179,139180,139182,139183,139185],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[92,139181,344],{},"左右的",[92,139184,30868],{},"把两侧撑开",[52,139187,139188],{},"让文字垂直居中（行高等于高度）",[1444,139190],{"style":126385,"src":139191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[10,139193,139194],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[10,139196,138368],{},[86,139198,139200],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},".box {\n  float: left;\n}\n",[92,139201,139202,139208,139218],{"__ignoreMap":14},[95,139203,139204,139206],{"class":97,"line":98},[95,139205,130377],{"class":1945},[95,139207,15555],{"class":105},[95,139209,139210,139212,139214,139216],{"class":97,"line":15},[95,139211,131009],{"class":154},[95,139213,51414],{"class":105},[95,139215,23720],{"class":154},[95,139217,1272],{"class":105},[95,139219,139220],{"class":97,"line":1161},[95,139221,1547],{"class":105},[10,139223,138408],{},[86,139225,139226],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,139227,139228,139234,139244],{"__ignoreMap":14},[95,139229,139230,139232],{"class":97,"line":98},[95,139231,130377],{"class":1945},[95,139233,15555],{"class":105},[95,139235,139236,139238,139240,139242],{"class":97,"line":15},[95,139237,131009],{"class":154},[95,139239,51414],{"class":105},[95,139241,23720],{"class":154},[95,139243,1272],{"class":105},[95,139245,139246],{"class":97,"line":1161},[95,139247,1547],{"class":105},[10,139249,139250],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1444,139252],{"style":126385,"src":139253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[86,139255,139256],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[92,139257,139258,139264,139280],{"__ignoreMap":14},[95,139259,139260,139262],{"class":97,"line":98},[95,139261,51588],{"class":51277},[95,139263,15555],{"class":105},[95,139265,139266,139268,139270,139272,139274,139276,139278],{"class":97,"line":15},[95,139267,70873],{"class":154},[95,139269,51414],{"class":105},[95,139271,323],{"class":154},[95,139273,51469],{"class":101},[95,139275,51498],{"class":154},[95,139277,129921],{"class":154},[95,139279,1272],{"class":105},[95,139281,139282],{"class":97,"line":1161},[95,139283,1547],{"class":105},[66,139285,139287],{"id":139286},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1444,139289],{"style":126385,"src":139290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1113,139292,139293,139298,139303],{},[52,139294,139295,139297],{},[92,139296,131732],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[52,139299,139300,139302],{},[92,139301,131732],{}," 里面有一个大的版心",[52,139304,139305,139306,139309,139310],{},"版心里面包含 1 号盒子，",[92,139307,139308],{},"mod_service"," 是服务模块，mod 是模块的意思",[1113,139311,139312,139317,139330,139346,139351],{},[52,139313,139029,139314,139316],{},[92,139315,139308],{}," 设置高度（80px）和下边框",[52,139318,139319,139320,139323,139324,139326,139327,139329],{},"在里面定义 ",[92,139321,139322],{},"ul > li"," ,每个",[92,139325,52],{}," 宽度是300px 高度是 50px，给每个",[92,139328,52],{},"设置35px的左内边距",[52,139331,139332,139333,139335,139336,139338,139339,139341,139342,18393,139344,120214],{},"在每个",[92,139334,52],{},"里面，放一个 ",[92,139337,22893],{},"（里面放图标），一个",[92,139340,51588],{},"（里面放",[92,139343,51588],{},[92,139345,10],{},[52,139347,139029,139348,139350],{},[92,139349,22893],{},"设置浮动，让h5与这个div左右排列",[52,139352,139353],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[10,139355,138368],{},[86,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",[92,139360,139361,139367,139379,139391,139418],{"__ignoreMap":14},[95,139362,139363,139365],{"class":97,"line":98},[95,139364,134286],{"class":1945},[95,139366,15555],{"class":105},[95,139368,139369,139371,139373,139375,139377],{"class":97,"line":15},[95,139370,70545],{"class":154},[95,139372,51414],{"class":105},[95,139374,806],{"class":154},[95,139376,51469],{"class":101},[95,139378,1272],{"class":105},[95,139380,139381,139383,139385,139387,139389],{"class":97,"line":1161},[95,139382,70765],{"class":154},[95,139384,51414],{"class":105},[95,139386,806],{"class":154},[95,139388,51469],{"class":101},[95,139390,1272],{"class":105},[95,139392,139393,139395,139397,139399,139401,139403,139405,139407,139410,139412,139414,139416],{"class":97,"line":1176},[95,139394,70588],{"class":154},[95,139396,51414],{"class":105},[95,139398,61703],{"class":154},[95,139400,106],{"class":105},[95,139402,134325],{"class":5199},[95,139404,13697],{"class":105},[95,139406,61713],{"class":154},[95,139408,139409],{"class":154}," -10",[95,139411,51469],{"class":101},[95,139413,134344],{"class":154},[95,139415,51469],{"class":101},[95,139417,1272],{"class":105},[95,139419,139420],{"class":97,"line":1182},[95,139421,1547],{"class":105},[10,139423,138408],{},[86,139425,139426],{"className":126529,"code":139358,"language":126531,"meta":14,"style":14},[92,139427,139428,139434,139446,139458,139484],{"__ignoreMap":14},[95,139429,139430,139432],{"class":97,"line":98},[95,139431,134286],{"class":1945},[95,139433,15555],{"class":105},[95,139435,139436,139438,139440,139442,139444],{"class":97,"line":15},[95,139437,70545],{"class":154},[95,139439,51414],{"class":105},[95,139441,806],{"class":154},[95,139443,51469],{"class":101},[95,139445,1272],{"class":105},[95,139447,139448,139450,139452,139454,139456],{"class":97,"line":1161},[95,139449,70765],{"class":154},[95,139451,51414],{"class":105},[95,139453,806],{"class":154},[95,139455,51469],{"class":101},[95,139457,1272],{"class":105},[95,139459,139460,139462,139464,139466,139468,139470,139472,139474,139476,139478,139480,139482],{"class":97,"line":1176},[95,139461,70588],{"class":154},[95,139463,51414],{"class":105},[95,139465,61703],{"class":154},[95,139467,106],{"class":105},[95,139469,134325],{"class":5199},[95,139471,13697],{"class":105},[95,139473,61713],{"class":154},[95,139475,139409],{"class":154},[95,139477,51469],{"class":101},[95,139479,134344],{"class":154},[95,139481,51469],{"class":101},[95,139483,1272],{"class":105},[95,139485,139486],{"class":97,"line":1182},[95,139487,1547],{"class":105},[10,139489,139490],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1113,139492,139493,139496,139502,139508,139520],{},[52,139494,139495],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[52,139497,139498,139499,120214],{},"里面的布局利用 自定义列表来实现（",[92,139500,139501],{},"dl > dt + dd",[52,139503,139029,139504,139507],{},[92,139505,139506],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[52,139509,139029,139510,139513,139514,18393,139516,139519],{},[92,139511,139512],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[92,139515,139512],{},[92,139517,139518],{},"dd","之间有些距离",[52,139521,139522],{},"最后一个 dl 结构和样式不一样，需要单独设置",[10,139524,138368],{},[86,139526,139527],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,139528,139529,139535,139547],{"__ignoreMap":14},[95,139530,139531,139533],{"class":97,"line":98},[95,139532,51588],{"class":51277},[95,139534,15555],{"class":105},[95,139536,139537,139539,139541,139543,139545],{"class":97,"line":15},[95,139538,70447],{"class":154},[95,139540,51414],{"class":105},[95,139542,297],{"class":154},[95,139544,51533],{"class":154},[95,139546,1272],{"class":105},[95,139548,139549],{"class":97,"line":1161},[95,139550,1547],{"class":105},[10,139552,138408],{},[86,139554,139555],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,139556,139557,139563,139575],{"__ignoreMap":14},[95,139558,139559,139561],{"class":97,"line":98},[95,139560,51588],{"class":51277},[95,139562,15555],{"class":105},[95,139564,139565,139567,139569,139571,139573],{"class":97,"line":15},[95,139566,70447],{"class":154},[95,139568,51414],{"class":105},[95,139570,297],{"class":154},[95,139572,51533],{"class":154},[95,139574,1272],{"class":105},[95,139576,139577],{"class":97,"line":1161},[95,139578,1547],{"class":105},[10,139580,139581],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1113,139583,139584,139593,139596,139607],{},[52,139585,139586,139587,139589,139590,139592],{},"分为上下两块，上面是 ",[92,139588,131749],{}," 友情链接，下面是 ",[92,139591,131742],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[52,139594,139595],{},"把内容分别复制到相应模块中",[52,139597,139029,139598,139600,139601,139603,139604,139606],{},[92,139599,131749],{}," 设置 15px 的下外边距，给",[92,139602,131749],{}," 里面 的 ",[92,139605,344],{}," 标签设置 左右 3px 的外边距",[52,139608,139609,139610,139612],{},"给",[92,139611,131742],{}," 设置 20px 的行高",[10,139614,138368],{},[86,139616,139617],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,139618,139619,139625,139637],{"__ignoreMap":14},[95,139620,139621,139623],{"class":97,"line":98},[95,139622,51588],{"class":51277},[95,139624,15555],{"class":105},[95,139626,139627,139629,139631,139633,139635],{"class":97,"line":15},[95,139628,70447],{"class":154},[95,139630,51414],{"class":105},[95,139632,297],{"class":154},[95,139634,51533],{"class":154},[95,139636,1272],{"class":105},[95,139638,139639],{"class":97,"line":1161},[95,139640,1547],{"class":105},[10,139642,138408],{},[86,139644,139645],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,139646,139647,139653,139665],{"__ignoreMap":14},[95,139648,139649,139651],{"class":97,"line":98},[95,139650,51588],{"class":51277},[95,139652,15555],{"class":105},[95,139654,139655,139657,139659,139661,139663],{"class":97,"line":15},[95,139656,70447],{"class":154},[95,139658,51414],{"class":105},[95,139660,297],{"class":154},[95,139662,51533],{"class":154},[95,139664,1272],{"class":105},[95,139666,139667],{"class":97,"line":1161},[95,139668,1547],{"class":105},[10,139670,139671],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5109,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":1161,"text":138008},{"id":138020,"depth":1161,"text":138021},{"id":138044,"depth":1161,"text":138045},{"id":138066,"depth":1161,"text":138067},{"id":138138,"depth":1161,"text":138139},{"id":138264,"depth":15,"text":138265,"children":139687},[139688,139689,139690,139691,139693],{"id":138268,"depth":1161,"text":138269},{"id":138275,"depth":1161,"text":138276},{"id":138447,"depth":1161,"text":138448},{"id":138988,"depth":1161,"text":139692},"15.4.4 nav导航模块制作",{"id":139286,"depth":1161,"text":139287},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137949,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139700,"title":139701,"body":139702,"description":23360,"extension":18,"meta":142104,"navigation":21,"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],[33,139705,139701],{"id":139706},"_16-品优购项目下篇-主体与页面开发",[37,139708,139710],{"id":139709},"_161-项目主体模块制作","16.1 项目主体模块制作",[66,139712,139714],{"id":139713},"_1611-首页制作","16.1.1 首页制作",[10,139716,139717,139719,139720,139722,139723,139726],{},[255,139718,102035],{}," 主体模块是 ",[255,139721,74035],{}," 里面专有的，注意需要新的样式文件 ",[255,139724,139725],{},"index.css，"," 就不要写在common.css中了",[1444,139728],{"style":126385,"src":139729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1444,139731],{"style":126385,"src":139732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[10,139734,139735],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1113,139737,139738,139741,139744],{},[52,139739,139740],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[52,139742,139743],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[52,139745,139746],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[10,139748,138368],{},[86,139750,139751],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,139752,139753,139759,139769],{"__ignoreMap":14},[95,139754,139755,139757],{"class":97,"line":98},[95,139756,130377],{"class":1945},[95,139758,15555],{"class":105},[95,139760,139761,139763,139765,139767],{"class":97,"line":15},[95,139762,131009],{"class":154},[95,139764,51414],{"class":105},[95,139766,23720],{"class":154},[95,139768,1272],{"class":105},[95,139770,139771],{"class":97,"line":1161},[95,139772,1547],{"class":105},[10,139774,138408],{},[86,139776,139777],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,139778,139779,139785,139795],{"__ignoreMap":14},[95,139780,139781,139783],{"class":97,"line":98},[95,139782,130377],{"class":1945},[95,139784,15555],{"class":105},[95,139786,139787,139789,139791,139793],{"class":97,"line":15},[95,139788,131009],{"class":154},[95,139790,51414],{"class":105},[95,139792,23720],{"class":154},[95,139794,1272],{"class":105},[95,139796,139797],{"class":97,"line":1161},[95,139798,1547],{"class":105},[49,139800,139801],{},[52,139802,139803],{},"左侧focus模块制作",[1444,139805],{"style":126385,"src":139806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[10,139808,138368],{},[86,139810,139811],{"className":126529,"code":127852,"language":126531,"meta":14,"style":14},[92,139812,139813,139821,139831,139841],{"__ignoreMap":14},[95,139814,139815,139817,139819],{"class":97,"line":98},[95,139816,53798],{"class":51277},[95,139818,61877],{"class":1945},[95,139820,15555],{"class":105},[95,139822,139823,139825,139827,139829],{"class":97,"line":15},[95,139824,127867],{"class":154},[95,139826,51414],{"class":105},[95,139828,54866],{"class":154},[95,139830,1272],{"class":105},[95,139832,139833,139835,139837,139839],{"class":97,"line":1161},[95,139834,70775],{"class":154},[95,139836,51414],{"class":105},[95,139838,54714],{"class":154},[95,139840,1272],{"class":105},[95,139842,139843],{"class":97,"line":1176},[95,139844,1547],{"class":105},[10,139846,138408],{},[86,139848,139849],{"className":126529,"code":127852,"language":126531,"meta":14,"style":14},[92,139850,139851,139859,139869,139879],{"__ignoreMap":14},[95,139852,139853,139855,139857],{"class":97,"line":98},[95,139854,53798],{"class":51277},[95,139856,61877],{"class":1945},[95,139858,15555],{"class":105},[95,139860,139861,139863,139865,139867],{"class":97,"line":15},[95,139862,127867],{"class":154},[95,139864,51414],{"class":105},[95,139866,54866],{"class":154},[95,139868,1272],{"class":105},[95,139870,139871,139873,139875,139877],{"class":97,"line":1161},[95,139872,70775],{"class":154},[95,139874,51414],{"class":105},[95,139876,54714],{"class":154},[95,139878,1272],{"class":105},[95,139880,139881],{"class":97,"line":1176},[95,139882,1547],{"class":105},[10,139884,139885],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[49,139887,139888],{"start":15},[52,139889,139890],{},"右侧newsflash模块制作",[1444,139892],{"style":126385,"src":139893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[10,139895,139896],{},"右侧的模块 分为上中下三个盒子",[10,139898,139899],{},"结构代码：",[86,139901,139902],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,139903,139904],{"__ignoreMap":14},[95,139905,139906,139908,139910,139912,139914,139916,139918,139920,139922,139924,139926,139928],{"class":97,"line":98},[95,139907,1016],{"class":105},[95,139909,1444],{"class":51277},[95,139911,55216],{"class":1945},[95,139913,151],{"class":105},[95,139915,134046],{"class":210},[95,139917,55224],{"class":1945},[95,139919,151],{"class":105},[95,139921,134053],{"class":210},[95,139923,134056],{"class":1945},[95,139925,151],{"class":105},[95,139927,134061],{"class":210},[95,139929,51284],{"class":105},[10,139931,139932,139933,139936],{},"1 号盒子为 ",[92,139934,139935],{},"news"," 新闻模块 高度为 165px",[1444,139938],{"style":126385,"src":139939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[10,139941,139942,139943,139946,139947],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[92,139944,139945],{},"news-hd","，下面是 ",[92,139948,139949],{},"news-bd",[10,139951,139899],{},[86,139953,139954],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,139955,139956,139960,139974,139978],{"__ignoreMap":14},[95,139957,139958],{"class":97,"line":98},[95,139959,130640],{"class":164},[95,139961,139962,139964,139966,139968,139970,139972],{"class":97,"line":15},[95,139963,1016],{"class":105},[95,139965,51588],{"class":51277},[95,139967,53463],{"class":1945},[95,139969,151],{"class":105},[95,139971,130653],{"class":210},[95,139973,51284],{"class":105},[95,139975,139976],{"class":97,"line":1161},[95,139977,130660],{"class":105},[95,139979,139980,139982,139984],{"class":97,"line":1176},[95,139981,51762],{"class":105},[95,139983,51588],{"class":51277},[95,139985,51284],{"class":105},[10,139987,139988],{},"样式代码：",[86,139990,139991],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,139992,139993,139997,140011,140015],{"__ignoreMap":14},[95,139994,139995],{"class":97,"line":98},[95,139996,130640],{"class":164},[95,139998,139999,140001,140003,140005,140007,140009],{"class":97,"line":15},[95,140000,1016],{"class":105},[95,140002,51588],{"class":51277},[95,140004,53463],{"class":1945},[95,140006,151],{"class":105},[95,140008,130653],{"class":210},[95,140010,51284],{"class":105},[95,140012,140013],{"class":97,"line":1161},[95,140014,130660],{"class":105},[95,140016,140017,140019,140021],{"class":97,"line":1176},[95,140018,51762],{"class":105},[95,140020,51588],{"class":51277},[95,140022,51284],{"class":105},[10,140024,140025,140026,140028],{},"上面是",[92,140027,139945],{},"，设置高度是 33px，设置下边框",[1113,140030,140031,140037],{},[52,140032,140033,140034,140036],{},"里面放一个",[92,140035,22893],{}," 标题",[52,140038,140039,140040,140042,140043,140045],{},"放一个a",[92,140041,102670],{},"，内容是 更多，然后让 ",[92,140044,344],{}," 进行右浮动，三角用伪元素设置字体图标就好",[10,140047,139899],{},[86,140049,140050],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,140051,140052,140060,140070,140080],{"__ignoreMap":14},[95,140053,140054,140056,140058],{"class":97,"line":98},[95,140055,51588],{"class":51277},[95,140057,137530],{"class":1945},[95,140059,15555],{"class":105},[95,140061,140062,140064,140066,140068],{"class":97,"line":15},[95,140063,137537],{"class":154},[95,140065,51414],{"class":105},[95,140067,7635],{"class":210},[95,140069,1272],{"class":105},[95,140071,140072,140074,140076,140078],{"class":97,"line":1161},[95,140073,128145],{"class":154},[95,140075,51414],{"class":105},[95,140077,60846],{"class":154},[95,140079,1272],{"class":105},[95,140081,140082],{"class":97,"line":1176},[95,140083,1547],{"class":105},[10,140085,139988],{},[86,140087,140088],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,140089,140090,140098,140108,140118],{"__ignoreMap":14},[95,140091,140092,140094,140096],{"class":97,"line":98},[95,140093,51588],{"class":51277},[95,140095,137530],{"class":1945},[95,140097,15555],{"class":105},[95,140099,140100,140102,140104,140106],{"class":97,"line":15},[95,140101,137537],{"class":154},[95,140103,51414],{"class":105},[95,140105,7635],{"class":210},[95,140107,1272],{"class":105},[95,140109,140110,140112,140114,140116],{"class":97,"line":1161},[95,140111,128145],{"class":154},[95,140113,51414],{"class":105},[95,140115,60846],{"class":154},[95,140117,1272],{"class":105},[95,140119,140120],{"class":97,"line":1176},[95,140121,1547],{"class":105},[10,140123,140124,140125],{},"下面是",[92,140126,139949],{},[1113,140128,140129,140137],{},[52,140130,140131,140132,100995,140134,140136],{},"里面包含 ",[92,140133,1113],{},[92,140135,52],{}," 还有链接",[52,140138,139609,140139,140141,140142,140144,140145,140148,140149],{},[92,140140,52],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[92,140143,131195],{}," 2.设置 ",[92,140146,140147],{},"white-space: nowrap;"," 3. 设置 ",[92,140150,140151],{},"text-overflow: ellipsis;",[10,140153,139899],{},[86,140155,140157],{"className":126529,"code":140156,"language":126531,"meta":14,"style":14},"div {\n  overflow: hidden;\n}\n",[92,140158,140159,140165,140176],{"__ignoreMap":14},[95,140160,140161,140163],{"class":97,"line":98},[95,140162,51588],{"class":51277},[95,140164,15555],{"class":105},[95,140166,140167,140170,140172,140174],{"class":97,"line":15},[95,140168,140169],{"class":154},"  overflow",[95,140171,51414],{"class":105},[95,140173,61691],{"class":154},[95,140175,1272],{"class":105},[95,140177,140178],{"class":97,"line":1161},[95,140179,1547],{"class":105},[10,140181,139988],{},[86,140183,140184],{"className":126529,"code":140156,"language":126531,"meta":14,"style":14},[92,140185,140186,140192,140202],{"__ignoreMap":14},[95,140187,140188,140190],{"class":97,"line":98},[95,140189,51588],{"class":51277},[95,140191,15555],{"class":105},[95,140193,140194,140196,140198,140200],{"class":97,"line":15},[95,140195,140169],{"class":154},[95,140197,51414],{"class":105},[95,140199,61691],{"class":154},[95,140201,1272],{"class":105},[95,140203,140204],{"class":97,"line":1161},[95,140205,1547],{"class":105},[10,140207,140208,140209,140212],{},"2 号盒子为 ",[92,140210,140211],{},"lifeservice"," 生活服务模块 高度为 209px",[1444,140214],{"style":126385,"src":140215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1113,140217,140218,140221,140231,140255,140266],{},[52,140219,140220],{},"设置边框（左右下边框）",[52,140222,140223,140224,140227,140228,140230],{},"里面的内容 是 ",[92,140225,140226],{},"ul > 12*li","，给",[92,140229,52],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[52,140232,140233,140234],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1113,140235,140236,140241,140250],{},[52,140237,140238,140240],{},[92,140239,140211],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[52,140242,140243,140244,140246,140247,140249],{},"可以让 ",[92,140245,140211],{}," 里面的 ",[92,140248,1113],{}," 宽度为 252，就可以装的下 4 个 小 li",[52,140251,140252,140254],{},[92,140253,140211],{}," 盒子 overflow 隐藏多余的部分就可以了",[52,140256,116444,140257,140259,140260,140262,140263,140265],{},[92,140258,52],{}," 里面放一个 ",[92,140261,547],{},"（里面放图标），下面的文本用 ",[92,140264,10],{}," 标签包裹",[52,140267,139029,140268,140270,140271,140273,140274,139063,140276,140279],{},[92,140269,547],{}," 设置 24px宽和28px的高（注意 ",[92,140272,547],{}," 是行内元素， 转成行内块），给 ",[92,140275,52],{},[92,140277,140278],{},"text-align:center"," 让里面内容居中显示",[10,140281,139899],{},[86,140283,140285],{"className":126529,"code":140284,"language":126531,"meta":14,"style":14},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[92,140286,140287,140305,140310,140320],{"__ignoreMap":14},[95,140288,140289,140291,140293,140295,140297,140299,140301,140303],{"class":97,"line":98},[95,140290,95],{"class":51277},[95,140292,12418],{"class":105},[95,140294,344],{"class":51277},[95,140296,12418],{"class":105},[95,140298,23537],{"class":51277},[95,140300,12418],{"class":105},[95,140302,255],{"class":51277},[95,140304,15555],{"class":105},[95,140306,140307],{"class":97,"line":15},[95,140308,140309],{"class":164},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[95,140311,140312,140314,140316,140318],{"class":97,"line":1161},[95,140313,128145],{"class":154},[95,140315,51414],{"class":105},[95,140317,128207],{"class":154},[95,140319,1272],{"class":105},[95,140321,140322],{"class":97,"line":1176},[95,140323,1547],{"class":105},[10,140325,139988],{},[86,140327,140328],{"className":126529,"code":140284,"language":126531,"meta":14,"style":14},[92,140329,140330,140348,140352,140362],{"__ignoreMap":14},[95,140331,140332,140334,140336,140338,140340,140342,140344,140346],{"class":97,"line":98},[95,140333,95],{"class":51277},[95,140335,12418],{"class":105},[95,140337,344],{"class":51277},[95,140339,12418],{"class":105},[95,140341,23537],{"class":51277},[95,140343,12418],{"class":105},[95,140345,255],{"class":51277},[95,140347,15555],{"class":105},[95,140349,140350],{"class":97,"line":15},[95,140351,140309],{"class":164},[95,140353,140354,140356,140358,140360],{"class":97,"line":1161},[95,140355,128145],{"class":154},[95,140357,51414],{"class":105},[95,140359,128207],{"class":154},[95,140361,1272],{"class":105},[95,140363,140364],{"class":97,"line":1176},[95,140365,1547],{"class":105},[10,140367,140368,140369,140372],{},"3 号盒子为 ",[92,140370,140371],{},"bargain"," 特价商品",[1113,140374,140375],{},[52,140376,140377],{},"这个比较简单，直接插入一张图片即可",[10,140379,139899],{},[86,140381,140382],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,140383,140384],{"__ignoreMap":14},[95,140385,140386,140388,140390,140392,140394,140396,140398,140400,140402,140404,140406,140408],{"class":97,"line":98},[95,140387,1016],{"class":105},[95,140389,1444],{"class":51277},[95,140391,55216],{"class":1945},[95,140393,151],{"class":105},[95,140395,134046],{"class":210},[95,140397,55224],{"class":1945},[95,140399,151],{"class":105},[95,140401,134053],{"class":210},[95,140403,134056],{"class":1945},[95,140405,151],{"class":105},[95,140407,134061],{"class":210},[95,140409,51284],{"class":105},[10,140411,139988],{},[86,140413,140414],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,140415,140416],{"__ignoreMap":14},[95,140417,140418,140420,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440],{"class":97,"line":98},[95,140419,1016],{"class":105},[95,140421,1444],{"class":51277},[95,140423,55216],{"class":1945},[95,140425,151],{"class":105},[95,140427,134046],{"class":210},[95,140429,55224],{"class":1945},[95,140431,151],{"class":105},[95,140433,134053],{"class":210},[95,140435,134056],{"class":1945},[95,140437,151],{"class":105},[95,140439,134061],{"class":210},[95,140441,51284],{"class":105},[66,140443,140445],{"id":140444},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1444,140447],{"style":126385,"src":140448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[10,140450,140451,140452,140455],{},"大盒子 ",[92,140453,140454],{},"recom"," 推荐模块 recommend",[1113,140457,140458],{},[52,140459,140460,140461,140463,140464,140467],{},"给这个 ",[92,140462,140454],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[92,140465,140466],{},"#ebebeb","），设置距离上边 12px",[10,140469,139899],{},[86,140471,140473],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},"div {\n  background-color: #f0f0f0;\n}\n",[92,140474,140475,140481,140492],{"__ignoreMap":14},[95,140476,140477,140479],{"class":97,"line":98},[95,140478,51588],{"class":51277},[95,140480,15555],{"class":105},[95,140482,140483,140485,140487,140490],{"class":97,"line":15},[95,140484,70855],{"class":154},[95,140486,51414],{"class":105},[95,140488,140489],{"class":154},"#f0f0f0",[95,140491,1272],{"class":105},[95,140493,140494],{"class":97,"line":1161},[95,140495,1547],{"class":105},[10,140497,139988],{},[86,140499,140500],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[92,140501,140502,140508,140518],{"__ignoreMap":14},[95,140503,140504,140506],{"class":97,"line":98},[95,140505,51588],{"class":51277},[95,140507,15555],{"class":105},[95,140509,140510,140512,140514,140516],{"class":97,"line":15},[95,140511,70855],{"class":154},[95,140513,51414],{"class":105},[95,140515,140489],{"class":154},[95,140517,1272],{"class":105},[95,140519,140520],{"class":97,"line":1161},[95,140521,1547],{"class":105},[10,140523,140524],{},"里面包含 2 个盒子， 浮动即可",[10,140526,139899],{},[86,140528,140529],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,140530,140531,140537,140547],{"__ignoreMap":14},[95,140532,140533,140535],{"class":97,"line":98},[95,140534,130377],{"class":1945},[95,140536,15555],{"class":105},[95,140538,140539,140541,140543,140545],{"class":97,"line":15},[95,140540,131009],{"class":154},[95,140542,51414],{"class":105},[95,140544,23720],{"class":154},[95,140546,1272],{"class":105},[95,140548,140549],{"class":97,"line":1161},[95,140550,1547],{"class":105},[10,140552,140553,140554],{},"1 号盒子 ",[92,140555,140556],{},"recom_hd",[1113,140558,140559,140562],{},[52,140560,140561],{},"设置宽度205px，高度163px",[52,140563,140033,140564,140566],{},[92,140565,1444],{},"标签，插入图片即可",[10,140568,139899],{},[86,140570,140571],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,140572,140573],{"__ignoreMap":14},[95,140574,140575,140577,140579,140581,140583,140585,140587,140589,140591,140593,140595,140597],{"class":97,"line":98},[95,140576,1016],{"class":105},[95,140578,1444],{"class":51277},[95,140580,55216],{"class":1945},[95,140582,151],{"class":105},[95,140584,134046],{"class":210},[95,140586,55224],{"class":1945},[95,140588,151],{"class":105},[95,140590,134053],{"class":210},[95,140592,134056],{"class":1945},[95,140594,151],{"class":105},[95,140596,134061],{"class":210},[95,140598,51284],{"class":105},[10,140600,139988],{},[86,140602,140603],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,140604,140605],{"__ignoreMap":14},[95,140606,140607,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629],{"class":97,"line":98},[95,140608,1016],{"class":105},[95,140610,1444],{"class":51277},[95,140612,55216],{"class":1945},[95,140614,151],{"class":105},[95,140616,134046],{"class":210},[95,140618,55224],{"class":1945},[95,140620,151],{"class":105},[95,140622,134053],{"class":210},[95,140624,134056],{"class":1945},[95,140626,151],{"class":105},[95,140628,134061],{"class":210},[95,140630,51284],{"class":105},[10,140632,140633,140634,140637],{},"2 号盒子 ",[92,140635,140636],{},"recom_bd"," ，注意里面的小竖线",[1113,140639,140640,140651,140654,140659,140664],{},[52,140641,140642,140643,140645,140646,140648,140649],{},"右侧结构里面放 ",[92,140644,1113],{}," 包含 4个 ",[92,140647,52],{},"，每个li里面包含一个",[92,140650,1444],{},[52,140652,140653],{},"直接利用切片工具把里面的内容当成一张图片",[52,140655,139029,140656,140658],{},[92,140657,52],{}," 设置浮动",[52,140660,139029,140661,140663],{},[92,140662,1444],{}," 设置宽高，宽度 248px，高度 163px",[52,140665,140666,140667,140227,140670,140672,140673,140675,140676],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[92,140668,140669],{},"top 10px",[92,140671,52],{},"设置相对定位（注意，最后一个",[92,140674,52],{},"不用设置伪元素），可以利用 ",[92,140677,140678],{},"nth-child(-n+3){...}",[10,140680,139899],{},[86,140682,140683],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,140684,140685,140693,140703,140713],{"__ignoreMap":14},[95,140686,140687,140689,140691],{"class":97,"line":98},[95,140688,51588],{"class":51277},[95,140690,137530],{"class":1945},[95,140692,15555],{"class":105},[95,140694,140695,140697,140699,140701],{"class":97,"line":15},[95,140696,137537],{"class":154},[95,140698,51414],{"class":105},[95,140700,7635],{"class":210},[95,140702,1272],{"class":105},[95,140704,140705,140707,140709,140711],{"class":97,"line":1161},[95,140706,128145],{"class":154},[95,140708,51414],{"class":105},[95,140710,60846],{"class":154},[95,140712,1272],{"class":105},[95,140714,140715],{"class":97,"line":1176},[95,140716,1547],{"class":105},[10,140718,139988],{},[86,140720,140721],{"className":126529,"code":138371,"language":126531,"meta":14,"style":14},[92,140722,140723,140731,140741,140751],{"__ignoreMap":14},[95,140724,140725,140727,140729],{"class":97,"line":98},[95,140726,51588],{"class":51277},[95,140728,137530],{"class":1945},[95,140730,15555],{"class":105},[95,140732,140733,140735,140737,140739],{"class":97,"line":15},[95,140734,137537],{"class":154},[95,140736,51414],{"class":105},[95,140738,7635],{"class":210},[95,140740,1272],{"class":105},[95,140742,140743,140745,140747,140749],{"class":97,"line":1161},[95,140744,128145],{"class":154},[95,140746,51414],{"class":105},[95,140748,60846],{"class":154},[95,140750,1272],{"class":105},[95,140752,140753],{"class":97,"line":1176},[95,140754,1547],{"class":105},[66,140756,140758],{"id":140757},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1444,140760],{"style":126385,"src":140761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[10,140763,140764],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[10,140766,140767],{},"第一楼是家用电器模块： 里面包含两个盒子",[10,140769,140770,140773],{},[92,140771,140772],{},"box_hd"," 制作",[10,140775,140553,140776,140778],{},[92,140777,140772],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1444,140780],{"style":126385,"src":140781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1113,140783,140784,140789,140794,140797],{},[52,140785,140786,140788],{},[92,140787,140772],{}," 给 30px 的高度，2个像素的下边框",[52,140790,140791,140792],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[92,140793,139040],{},[52,140795,140796],{},"左侧盒左浮动，右侧盒子右浮动",[52,140798,140799,140801,140802,140804],{},[92,140800,344],{},"标签之间的距离用左右的",[92,140803,30868],{},"撑开即可",[10,140806,140807],{},"结构代码",[86,140809,140810],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,140811,140812,140818,140828],{"__ignoreMap":14},[95,140813,140814,140816],{"class":97,"line":98},[95,140815,130377],{"class":1945},[95,140817,15555],{"class":105},[95,140819,140820,140822,140824,140826],{"class":97,"line":15},[95,140821,131009],{"class":154},[95,140823,51414],{"class":105},[95,140825,23720],{"class":154},[95,140827,1272],{"class":105},[95,140829,140830],{"class":97,"line":1161},[95,140831,1547],{"class":105},[10,140833,140834],{},"样式代码",[86,140836,140837],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,140838,140839,140845,140855],{"__ignoreMap":14},[95,140840,140841,140843],{"class":97,"line":98},[95,140842,130377],{"class":1945},[95,140844,15555],{"class":105},[95,140846,140847,140849,140851,140853],{"class":97,"line":15},[95,140848,131009],{"class":154},[95,140850,51414],{"class":105},[95,140852,23720],{"class":154},[95,140854,1272],{"class":105},[95,140856,140857],{"class":97,"line":1161},[95,140858,1547],{"class":105},[10,140860,140861,140773],{},[92,140862,140863],{},"box_bd",[10,140865,140866],{},"2 号盒子 box_bd，不要给高度",[1444,140868],{"style":126385,"src":140869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[10,140871,140872],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[10,140874,140875],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[10,140877,140878],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1113,140880,140881,140893,140909],{},[52,140882,140883,140885,140886,140889,140890,140892],{},[92,140884,140863],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[92,140887,140888],{},"tab_content","，在",[92,140891,140888],{}," 里面包裹tab选项卡对应的内容",[52,140894,140895,140896,140899,140900,140902,140903,140905,140906,140908],{},"内容被一个大盒子包裹（",[92,140897,140898],{},"tab_list_item","），里面是 ",[92,140901,1113],{}," 包裹 5个 ",[92,140904,52],{},"，每个",[92,140907,52],{},"设置对应的宽度，然后设置浮动",[52,140910,140911,140912,140914,140915,140917,140918],{},"而这5个",[92,140913,52],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[92,140916,52],{},"设置",[1113,140919,140920,140938,140941],{},[52,140921,140922,140923,140925,140926,140928,140929,140931,140932,140934,140935,140937],{},"第一个小 ",[92,140924,52],{}," 分为上下结构，上面是 ",[92,140927,1113],{}," 包裹 ",[92,140930,52],{}," ，",[92,140933,52],{},"里面包裹 ",[92,140936,344],{},"，下面插入一张图片",[52,140939,140940],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[52,140942,140943,140944,140946,140947,140949,140950,140952],{},"后面的小 ",[92,140945,52],{}," 里面先放一个",[92,140948,344],{},"标签，然后在",[92,140951,344],{},"标签里面插入图片即可",[10,140954,140807],{},[86,140956,140957],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,140958,140959],{"__ignoreMap":14},[95,140960,140961,140963,140965,140967,140969,140971,140973,140975,140977,140979,140981,140983],{"class":97,"line":98},[95,140962,1016],{"class":105},[95,140964,1444],{"class":51277},[95,140966,55216],{"class":1945},[95,140968,151],{"class":105},[95,140970,134046],{"class":210},[95,140972,55224],{"class":1945},[95,140974,151],{"class":105},[95,140976,134053],{"class":210},[95,140978,134056],{"class":1945},[95,140980,151],{"class":105},[95,140982,134061],{"class":210},[95,140984,51284],{"class":105},[10,140986,140834],{},[86,140988,140989],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,140990,140991],{"__ignoreMap":14},[95,140992,140993,140995,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015],{"class":97,"line":98},[95,140994,1016],{"class":105},[95,140996,1444],{"class":51277},[95,140998,55216],{"class":1945},[95,141000,151],{"class":105},[95,141002,134046],{"class":210},[95,141004,55224],{"class":1945},[95,141006,151],{"class":105},[95,141008,134053],{"class":210},[95,141010,134056],{"class":1945},[95,141012,151],{"class":105},[95,141014,134061],{"class":210},[95,141016,51284],{"class":105},[10,141018,141019],{},"tab栏切换需求！！！！！！介绍：",[1444,141021],{"style":126385,"src":141022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1113,141024,141025,141033,141039,141042],{},[52,141026,141027,141030,141031],{},[92,141028,141029],{},"tab","栏的布局是 ",[92,141032,139040],{},[52,141034,141035,141036,141038],{},"有多少个",[92,141037,141029],{},"选项卡，那么对应就有多少个内容",[52,141040,141041],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[52,141043,141044,141045,141048,141049,141051,141052,141054],{},"等后面我们学习了",[92,141046,141047],{},"js","之后，我们就会配合",[92,141050,141047],{},"来实现，",[92,141053,141029],{},"栏的切换",[37,141056,141058],{"id":141057},"_162-列表制作","16.2 列表制作",[66,141060,141062],{"id":141061},"_1621-准备工作","16.2.1 准备工作",[1113,141064,141065,141068,141071,141074],{},[52,141066,141067],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[52,141069,141070],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[52,141072,141073],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[52,141075,141076],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[66,141078,141080,141081,100995,141083,141085],{"id":141079},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[92,141082,131534],{},[92,141084,53690],{}," 修改",[1444,141087],{"style":126385,"src":141088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1113,141090,141091],{},[52,141092,141093],{},"秒杀盒子 sk（ second kill ） 定位即可",[10,141095,139899],{},[86,141097,141098],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,141099,141100,141104,141118,141122,141136,141140,141154,141158,141172,141176],{"__ignoreMap":14},[95,141101,141102],{"class":97,"line":98},[95,141103,131968],{"class":164},[95,141105,141106,141108,141110,141112,141114,141116],{"class":97,"line":15},[95,141107,131973],{"class":1945},[95,141109,79784],{"class":105},[95,141111,128889],{"class":154},[95,141113,51414],{"class":105},[95,141115,131982],{"class":154},[95,141117,129459],{"class":105},[95,141119,141120],{"class":97,"line":1161},[95,141121,131989],{"class":164},[95,141123,141124,141126,141128,141130,141132,141134],{"class":97,"line":1176},[95,141125,131994],{"class":1945},[95,141127,79784],{"class":105},[95,141129,128889],{"class":154},[95,141131,51414],{"class":105},[95,141133,54741],{"class":154},[95,141135,129459],{"class":105},[95,141137,141138],{"class":97,"line":1182},[95,141139,132009],{"class":164},[95,141141,141142,141144,141146,141148,141150,141152],{"class":97,"line":1196},[95,141143,132014],{"class":1945},[95,141145,79784],{"class":105},[95,141147,128889],{"class":154},[95,141149,51414],{"class":105},[95,141151,54808],{"class":154},[95,141153,129459],{"class":105},[95,141155,141156],{"class":97,"line":1202},[95,141157,132029],{"class":164},[95,141159,141160,141162,141164,141166,141168,141170],{"class":97,"line":1293},[95,141161,132034],{"class":1945},[95,141163,79784],{"class":105},[95,141165,128889],{"class":154},[95,141167,51414],{"class":105},[95,141169,86210],{"class":154},[95,141171,129459],{"class":105},[95,141173,141174],{"class":97,"line":1299},[95,141175,132049],{"class":164},[95,141177,141178,141180,141182,141184,141186,141188],{"class":97,"line":1311},[95,141179,132054],{"class":1945},[95,141181,79784],{"class":105},[95,141183,128889],{"class":154},[95,141185,51414],{"class":105},[95,141187,132063],{"class":154},[95,141189,129459],{"class":105},[10,141191,139988],{},[86,141193,141194],{"className":126529,"code":131961,"language":126531,"meta":14,"style":14},[92,141195,141196,141200,141214,141218,141232,141236,141250,141254,141268,141272],{"__ignoreMap":14},[95,141197,141198],{"class":97,"line":98},[95,141199,131968],{"class":164},[95,141201,141202,141204,141206,141208,141210,141212],{"class":97,"line":15},[95,141203,131973],{"class":1945},[95,141205,79784],{"class":105},[95,141207,128889],{"class":154},[95,141209,51414],{"class":105},[95,141211,131982],{"class":154},[95,141213,129459],{"class":105},[95,141215,141216],{"class":97,"line":1161},[95,141217,131989],{"class":164},[95,141219,141220,141222,141224,141226,141228,141230],{"class":97,"line":1176},[95,141221,131994],{"class":1945},[95,141223,79784],{"class":105},[95,141225,128889],{"class":154},[95,141227,51414],{"class":105},[95,141229,54741],{"class":154},[95,141231,129459],{"class":105},[95,141233,141234],{"class":97,"line":1182},[95,141235,132009],{"class":164},[95,141237,141238,141240,141242,141244,141246,141248],{"class":97,"line":1196},[95,141239,132014],{"class":1945},[95,141241,79784],{"class":105},[95,141243,128889],{"class":154},[95,141245,51414],{"class":105},[95,141247,54808],{"class":154},[95,141249,129459],{"class":105},[95,141251,141252],{"class":97,"line":1202},[95,141253,132029],{"class":164},[95,141255,141256,141258,141260,141262,141264,141266],{"class":97,"line":1293},[95,141257,132034],{"class":1945},[95,141259,79784],{"class":105},[95,141261,128889],{"class":154},[95,141263,51414],{"class":105},[95,141265,86210],{"class":154},[95,141267,129459],{"class":105},[95,141269,141270],{"class":97,"line":1299},[95,141271,132049],{"class":164},[95,141273,141274,141276,141278,141280,141282,141284],{"class":97,"line":1311},[95,141275,132054],{"class":1945},[95,141277,79784],{"class":105},[95,141279,128889],{"class":154},[95,141281,51414],{"class":105},[95,141283,132063],{"class":154},[95,141285,129459],{"class":105},[1113,141287,141288,141299],{},[52,141289,141290,141291,141294,141295,100995,141297],{},"1 号盒子左侧浮动 ",[92,141292,141293],{},"sk_list"," 里面包含 ",[92,141296,1113],{},[92,141298,52],{},[52,141300,141301,141302,141294,141305,100995,141307],{},"2 号盒子左侧浮动 ",[92,141303,141304],{},"sk_con",[92,141306,1113],{},[92,141308,52],{},[10,141310,139899],{},[86,141312,141313],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,141314,141315,141321,141331],{"__ignoreMap":14},[95,141316,141317,141319],{"class":97,"line":98},[95,141318,130377],{"class":1945},[95,141320,15555],{"class":105},[95,141322,141323,141325,141327,141329],{"class":97,"line":15},[95,141324,131009],{"class":154},[95,141326,51414],{"class":105},[95,141328,23720],{"class":154},[95,141330,1272],{"class":105},[95,141332,141333],{"class":97,"line":1161},[95,141334,1547],{"class":105},[10,141336,139988],{},[86,141338,141339],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,141340,141341,141347,141357],{"__ignoreMap":14},[95,141342,141343,141345],{"class":97,"line":98},[95,141344,130377],{"class":1945},[95,141346,15555],{"class":105},[95,141348,141349,141351,141353,141355],{"class":97,"line":15},[95,141350,131009],{"class":154},[95,141352,51414],{"class":105},[95,141354,23720],{"class":154},[95,141356,1272],{"class":105},[95,141358,141359],{"class":97,"line":1161},[95,141360,1547],{"class":105},[66,141362,141364,141365],{"id":141363},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[92,141366,141367],{},"sk_container",[1444,141369],{"style":126385,"src":141370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1113,141372,141373,141378],{},[52,141374,140553,141375,141377],{},[92,141376,141367],{}," 给宽度 1200，不要给高度",[52,141379,141380],{},"一定不要忘记清除浮动",[10,141382,139899],{},[86,141384,141385],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,141386,141387,141393,141403],{"__ignoreMap":14},[95,141388,141389,141391],{"class":97,"line":98},[95,141390,130377],{"class":1945},[95,141392,15555],{"class":105},[95,141394,141395,141397,141399,141401],{"class":97,"line":15},[95,141396,131009],{"class":154},[95,141398,51414],{"class":105},[95,141400,23720],{"class":154},[95,141402,1272],{"class":105},[95,141404,141405],{"class":97,"line":1161},[95,141406,1547],{"class":105},[49,141408,141409],{},[52,141410,141411],{},"sk_hd制作",[1113,141413,141414],{},[52,141415,140633,141416,141419],{},[92,141417,141418],{},"sk_hd"," ，插入图片即可",[10,141421,139899],{},[86,141423,141424],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,141425,141426],{"__ignoreMap":14},[95,141427,141428,141430,141432,141434,141436,141438,141440,141442,141444,141446,141448,141450],{"class":97,"line":98},[95,141429,1016],{"class":105},[95,141431,1444],{"class":51277},[95,141433,55216],{"class":1945},[95,141435,151],{"class":105},[95,141437,134046],{"class":210},[95,141439,55224],{"class":1945},[95,141441,151],{"class":105},[95,141443,134053],{"class":210},[95,141445,134056],{"class":1945},[95,141447,151],{"class":105},[95,141449,134061],{"class":210},[95,141451,51284],{"class":105},[49,141453,141454],{"start":15},[52,141455,141456],{},"sk_bd制作",[1113,141458,141459],{},[52,141460,141461,141462,141465,141466,100995,141468,141470],{},"3 号盒子 ",[92,141463,141464],{},"sk_bd"," ，里面包含很多的 ",[92,141467,1113],{},[92,141469,52],{},[1113,141471,141472,141481],{},[52,141473,141474,141475,141477,141478,141480],{},"当鼠标移入到 ",[92,141476,52],{}," 上面的时候显示红色的边框，在这里先给 ",[92,141479,52],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[52,141482,141483,141484,141486,141487,141489,141490,141493,141494,141496],{},"由于给每个 ",[92,141485,52],{}," 都设置了外边距，导致一行的最后一个 ",[92,141488,52],{}," 掉了下来，在这里我们利用 ",[92,141491,141492],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[92,141495,52],{},"，去掉外边距就好了",[10,141498,139899],{},[86,141500,141501],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,141502,141503,141509,141521],{"__ignoreMap":14},[95,141504,141505,141507],{"class":97,"line":98},[95,141506,51588],{"class":51277},[95,141508,15555],{"class":105},[95,141510,141511,141513,141515,141517,141519],{"class":97,"line":15},[95,141512,70447],{"class":154},[95,141514,51414],{"class":105},[95,141516,297],{"class":154},[95,141518,51533],{"class":154},[95,141520,1272],{"class":105},[95,141522,141523],{"class":97,"line":1161},[95,141524,1547],{"class":105},[10,141526,139988],{},[86,141528,141529],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,141530,141531,141537,141549],{"__ignoreMap":14},[95,141532,141533,141535],{"class":97,"line":98},[95,141534,51588],{"class":51277},[95,141536,15555],{"class":105},[95,141538,141539,141541,141543,141545,141547],{"class":97,"line":15},[95,141540,70447],{"class":154},[95,141542,51414],{"class":105},[95,141544,297],{"class":154},[95,141546,51533],{"class":154},[95,141548,1272],{"class":105},[95,141550,141551],{"class":97,"line":1161},[95,141552,1547],{"class":105},[37,141554,141556],{"id":141555},"_163-注册页面制作","16.3 注册页面制作",[1444,141558],{"style":126385,"src":141559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[10,141561,141562,141564],{},[255,141563,9008],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1444,141566],{"style":126385,"src":141567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[66,141569,141571],{"id":141570},"_1631-准备工作","16.3.1 准备工作",[1113,141573,141574,141577],{},[52,141575,141576],{},"创建register.html，引入 base.css，引入favicon图标",[52,141578,141579],{},"创建register.css ，在html页面进行引入",[66,141581,141583,141584,141586],{"id":141582},"_1632-header-头部实现","16.3.2 ",[92,141585,131534],{}," 头部实现",[1113,141588,141589,141592],{},[52,141590,141591],{},"整个内容用 版心 进行包裹",[52,141593,141594],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[10,141596,139899],{},[86,141598,141599],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,141600,141601],{"__ignoreMap":14},[95,141602,141603,141605,141607,141609,141611,141613,141615,141617,141619,141621,141623,141625],{"class":97,"line":98},[95,141604,1016],{"class":105},[95,141606,1444],{"class":51277},[95,141608,55216],{"class":1945},[95,141610,151],{"class":105},[95,141612,134046],{"class":210},[95,141614,55224],{"class":1945},[95,141616,151],{"class":105},[95,141618,134053],{"class":210},[95,141620,134056],{"class":1945},[95,141622,151],{"class":105},[95,141624,134061],{"class":210},[95,141626,51284],{"class":105},[10,141628,139988],{},[86,141630,141631],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,141632,141633],{"__ignoreMap":14},[95,141634,141635,141637,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657],{"class":97,"line":98},[95,141636,1016],{"class":105},[95,141638,1444],{"class":51277},[95,141640,55216],{"class":1945},[95,141642,151],{"class":105},[95,141644,134046],{"class":210},[95,141646,55224],{"class":1945},[95,141648,151],{"class":105},[95,141650,134053],{"class":210},[95,141652,134056],{"class":1945},[95,141654,151],{"class":105},[95,141656,134061],{"class":210},[95,141658,51284],{"class":105},[66,141660,141662,141663,141666],{"id":141661},"_1633-registerarea-主体模块实现","16.3.3 ",[92,141664,141665],{},"registerarea"," 主体模块实现",[1444,141668],{"style":126385,"src":141669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[10,141671,141672],{},"整个大盒子 高度为 522px，设置4个边框",[10,141674,139899],{},[86,141676,141677],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[92,141678,141679,141685,141701],{"__ignoreMap":14},[95,141680,141681,141683],{"class":97,"line":98},[95,141682,51588],{"class":51277},[95,141684,15555],{"class":105},[95,141686,141687,141689,141691,141693,141695,141697,141699],{"class":97,"line":15},[95,141688,70873],{"class":154},[95,141690,51414],{"class":105},[95,141692,323],{"class":154},[95,141694,51469],{"class":101},[95,141696,51498],{"class":154},[95,141698,129921],{"class":154},[95,141700,1272],{"class":105},[95,141702,141703],{"class":97,"line":1161},[95,141704,1547],{"class":105},[10,141706,139988],{},[86,141708,141709],{"className":126529,"code":130686,"language":126531,"meta":14,"style":14},[92,141710,141711,141717,141733],{"__ignoreMap":14},[95,141712,141713,141715],{"class":97,"line":98},[95,141714,51588],{"class":51277},[95,141716,15555],{"class":105},[95,141718,141719,141721,141723,141725,141727,141729,141731],{"class":97,"line":15},[95,141720,70873],{"class":154},[95,141722,51414],{"class":105},[95,141724,323],{"class":154},[95,141726,51469],{"class":101},[95,141728,51498],{"class":154},[95,141730,129921],{"class":154},[95,141732,1272],{"class":105},[95,141734,141735],{"class":97,"line":1161},[95,141736,1547],{"class":105},[10,141738,141739],{},"1号盒子 是一个 h3 标签，放标题",[1113,141741,141742],{},[52,141743,141744],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[10,141746,139899],{},[86,141748,141749],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,141750,141751,141757,141767],{"__ignoreMap":14},[95,141752,141753,141755],{"class":97,"line":98},[95,141754,130377],{"class":1945},[95,141756,15555],{"class":105},[95,141758,141759,141761,141763,141765],{"class":97,"line":15},[95,141760,131009],{"class":154},[95,141762,51414],{"class":105},[95,141764,23720],{"class":154},[95,141766,1272],{"class":105},[95,141768,141769],{"class":97,"line":1161},[95,141770,1547],{"class":105},[10,141772,139988],{},[86,141774,141775],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,141776,141777,141783,141793],{"__ignoreMap":14},[95,141778,141779,141781],{"class":97,"line":98},[95,141780,130377],{"class":1945},[95,141782,15555],{"class":105},[95,141784,141785,141787,141789,141791],{"class":97,"line":15},[95,141786,131009],{"class":154},[95,141788,51414],{"class":105},[95,141790,23720],{"class":154},[95,141792,1272],{"class":105},[95,141794,141795],{"class":97,"line":1161},[95,141796,1547],{"class":105},[10,141798,141799],{},"2号盒子 里面放注册的内容",[1113,141801,141802,141805,141814,141828,141841,141844,141847,141865,141879],{},[52,141803,141804],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[52,141806,141807,141808,141810,141811,141813],{},"里面的内容利用 ",[92,141809,1113],{}," 包含 ",[92,141812,52],{}," 来实现的（不需要用表格）",[52,141815,139043,141816,141818,141819,141821,141822,141824,141825,141827],{},[92,141817,52],{}," 里面，左侧放 ",[92,141820,33593],{}," 标签， 中间放",[92,141823,53798],{}," 标签， 右侧放 ",[92,141826,95],{}," 提示信息",[52,141829,141830,141831,141833,141834,141836,141837,141840],{},"左侧 ",[92,141832,33593],{},"里面的文字都是右对齐，我们可以给",[92,141835,33593],{},"设置一个宽度（88px），然后利用",[92,141838,141839],{},"text-align"," 来设置右对齐",[52,141842,141843],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[52,141845,141846],{},"右侧 span修饰一下文字颜色",[52,141848,141849,141850],{},"提示信息的样式优化",[1113,141851,141852,141855,141858],{},[52,141853,141854],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[52,141856,141857],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[52,141859,141860,141861,141864],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[92,141862,141863],{},"vertical-algin"," 来设置 图片与文字对齐方式",[52,141866,141867,141868],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1113,141869,141870,141876],{},[52,141871,141872,141873,141875],{},"设置 ",[92,141874,23537],{}," 的 左右 12px 的内边距，设置一下文字颜色",[52,141877,141878],{},"分别设置 背景颜色",[52,141880,141881,141882,141884],{},"同意协议 和 完成注册 都是用 ",[92,141883,52],{}," 进行包裹",[10,141886,139899],{},[86,141888,141889],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[92,141890,141891,141897,141907],{"__ignoreMap":14},[95,141892,141893,141895],{"class":97,"line":98},[95,141894,51588],{"class":51277},[95,141896,15555],{"class":105},[95,141898,141899,141901,141903,141905],{"class":97,"line":15},[95,141900,70855],{"class":154},[95,141902,51414],{"class":105},[95,141904,140489],{"class":154},[95,141906,1272],{"class":105},[95,141908,141909],{"class":97,"line":1161},[95,141910,1547],{"class":105},[10,141912,139988],{},[86,141914,141915],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[92,141916,141917,141923,141933],{"__ignoreMap":14},[95,141918,141919,141921],{"class":97,"line":98},[95,141920,51588],{"class":51277},[95,141922,15555],{"class":105},[95,141924,141925,141927,141929,141931],{"class":97,"line":15},[95,141926,70855],{"class":154},[95,141928,51414],{"class":105},[95,141930,140489],{"class":154},[95,141932,1272],{"class":105},[95,141934,141935],{"class":97,"line":1161},[95,141936,1547],{"class":105},[66,141938,141940],{"id":141939},"_1634-底部实现","16.3.4 底部实现",[10,141942,139899],{},[86,141944,141945],{"className":126529,"code":140472,"language":126531,"meta":14,"style":14},[92,141946,141947,141953,141963],{"__ignoreMap":14},[95,141948,141949,141951],{"class":97,"line":98},[95,141950,51588],{"class":51277},[95,141952,15555],{"class":105},[95,141954,141955,141957,141959,141961],{"class":97,"line":15},[95,141956,70855],{"class":154},[95,141958,51414],{"class":105},[95,141960,140489],{"class":154},[95,141962,1272],{"class":105},[95,141964,141965],{"class":97,"line":1161},[95,141966,1547],{"class":105},[10,141968,139988],{},[86,141970,141971],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,141972,141973,141977,141991,141995],{"__ignoreMap":14},[95,141974,141975],{"class":97,"line":98},[95,141976,130640],{"class":164},[95,141978,141979,141981,141983,141985,141987,141989],{"class":97,"line":15},[95,141980,1016],{"class":105},[95,141982,51588],{"class":51277},[95,141984,53463],{"class":1945},[95,141986,151],{"class":105},[95,141988,130653],{"class":210},[95,141990,51284],{"class":105},[95,141992,141993],{"class":97,"line":1161},[95,141994,130660],{"class":105},[95,141996,141997,141999,142001],{"class":97,"line":1176},[95,141998,51762],{"class":105},[95,142000,51588],{"class":51277},[95,142002,51284],{"class":105},[37,142004,142006],{"id":142005},"_164-项目总结","16.4 项目总结",[49,142008,142009,142012,142015,142018],{},[52,142010,142011],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[52,142013,142014],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[52,142016,142017],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[52,142019,142020],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1444,142022],{"style":126385,"src":142023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[49,142025,142026],{"start":1182},[52,142027,142028],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1444,142030],{"style":126385,"src":142031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[49,142033,142034],{"start":1196},[52,142035,142036],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1444,142038],{"style":126385,"src":142039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[86,142041,142042],{"className":127276,"code":136686,"language":127278,"meta":14,"style":14},[92,142043,142044],{"__ignoreMap":14},[95,142045,142046,142048,142050,142052,142054,142056,142058,142060,142062,142064,142066,142068],{"class":97,"line":98},[95,142047,1016],{"class":105},[95,142049,53798],{"class":51277},[95,142051,53801],{"class":1945},[95,142053,151],{"class":105},[95,142055,62676],{"class":210},[95,142057,14903],{"class":1945},[95,142059,151],{"class":105},[95,142061,136707],{"class":210},[95,142063,60997],{"class":1945},[95,142065,151],{"class":105},[95,142067,136714],{"class":210},[95,142069,51284],{"class":105},[49,142071,142072,142075],{"start":1202},[52,142073,142074],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[52,142076,142077],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5109,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":1161,"text":139714},{"id":140444,"depth":1161,"text":140445},{"id":140757,"depth":1161,"text":140758},{"id":141057,"depth":15,"text":141058,"children":142089},[142090,142091,142093],{"id":141061,"depth":1161,"text":141062},{"id":141079,"depth":1161,"text":142092},"16.2.2 列表页 header 和 nav 修改",{"id":141363,"depth":1161,"text":142094},"16.2.3 列表页主体 sk_container",{"id":141555,"depth":15,"text":141556,"children":142096},[142097,142098,142100,142102],{"id":141570,"depth":1161,"text":141571},{"id":141582,"depth":1161,"text":142099},"16.3.2 header 头部实现",{"id":141661,"depth":1161,"text":142101},"16.3.3 registerarea 主体模块实现",{"id":141939,"depth":1161,"text":141940},{"id":142005,"depth":15,"text":142006},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139701,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142110,"title":142111,"body":142112,"description":23360,"extension":18,"meta":142220,"navigation":21,"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],[33,142115,142111],{"id":142116},"_17-web服务器与网站发布",[37,142118,142120],{"id":142119},"_171-web服务器","17.1 Web服务器",[10,142122,142123],{},"把自己网站上传到服务器上，可以让其他人访问",[1444,142125],{"style":126385,"src":142126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[10,142128,142129,142132,142133],{},[255,142130,142131],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[255,142134,142135],{},"Web 服务器等",[10,142137,142138,142139,100995,142142,25725],{},"根据服务器在网络中所在的位置不同，又可分为 ",[255,142140,142141],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[255,142143,142144],{},"远程服务器",[66,142146,142148],{"id":142147},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[10,142150,142151],{},[255,142152,142153],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[10,142155,142156,142157],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[344,142158,142159],{"href":142159,"rel":142160},"http:\u002F\u002Ffree.3v.do\u002F",[23849],[1113,142162,142163,142166,142169,142176],{},[52,142164,142165],{},"去免费空间网站注册账号。",[52,142167,142168],{},"记录下主机名、用户名、密码、域名。",[52,142170,142171,142172,142175],{},"利用 ",[92,142173,142174],{},"utftp"," 软件 上传网站到远程服务器",[52,142177,142178],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[10,142180,142181],{},"使用软件上传，对上传软件文件进行解压",[1444,142183],{"style":126385,"src":142184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1444,142186],{"style":126385,"src":142187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[10,142189,142190],{},"输入刚刚申请的服务器账号信息：",[1444,142192],{"style":126385,"src":142193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1444,142195],{"style":126385,"src":142196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1444,142198],{"style":126385,"src":142199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1444,142201],{"style":126385,"src":142202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[10,142204,142205],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1444,142207],{"style":126385,"src":142208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[10,142210,142211],{},"浏览器输入域名即可访问",[10,142213,142214],{},"首页一定必须是index",{"title":14,"searchDepth":15,"depth":15,"links":142216},[142217],{"id":142119,"depth":15,"text":142120,"children":142218},[142219],{"id":142147,"depth":1161,"text":142148},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142111,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142226,"title":142227,"body":142228,"description":23360,"extension":18,"meta":143155,"navigation":21,"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],[33,142231,142227],{"id":142232},"_18-2d动画与3d转换",[37,142234,142236],{"id":142235},"_181-css3-2d转换","18.1 CSS3 2D转换",[10,142238,142239],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[10,142241,142242],{},"转换（transform）你可以简单理解为变形",[1113,142244,142245,142248,142251],{},[52,142246,142247],{},"移动：translate",[52,142249,142250],{},"旋转：rotate",[52,142252,142253],{},"缩放：scale",[1444,142255],{"style":126385,"src":142256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[66,142258,142260],{"id":142259},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21981,142262,142264],{"id":142263},"_18111-translate介绍","18.1.1.1 translate介绍",[10,142266,142267,142268],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[255,142269,133188],{},[1444,142271],{"style":126385,"src":142272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[10,142274,142275],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[10,142277,142278],{},"对于行内元素无效",[10,142280,142281],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21981,142283,142285],{"id":142284},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[86,142287,142288],{"className":126529,"code":138718,"language":126531,"meta":14,"style":14},[92,142289,142290,142296,142308],{"__ignoreMap":14},[95,142291,142292,142294],{"class":97,"line":98},[95,142293,51588],{"class":51277},[95,142295,15555],{"class":105},[95,142297,142298,142300,142302,142304,142306],{"class":97,"line":15},[95,142299,70447],{"class":154},[95,142301,51414],{"class":105},[95,142303,297],{"class":154},[95,142305,51533],{"class":154},[95,142307,1272],{"class":105},[95,142309,142310],{"class":97,"line":1161},[95,142311,1547],{"class":105},[66,142313,142315],{"id":142314},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21981,142317,142319],{"id":142318},"_18121-rotate介绍","18.1.2.1 rotate介绍",[10,142321,142322],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1444,142324],{"style":126385,"src":142325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21981,142327,142329],{"id":142328},"_18122-旋转效果","18.1.2.2 旋转效果",[86,142331,142333],{"className":126529,"code":142332,"language":126531,"meta":14,"style":14},"div {\n  transform: rotate(45deg);\n}\n",[92,142334,142335,142341,142359],{"__ignoreMap":14},[95,142336,142337,142339],{"class":97,"line":98},[95,142338,51588],{"class":51277},[95,142340,15555],{"class":105},[95,142342,142343,142345,142347,142350,142352,142354,142357],{"class":97,"line":15},[95,142344,136513],{"class":154},[95,142346,51414],{"class":105},[95,142348,142349],{"class":154},"rotate",[95,142351,106],{"class":105},[95,142353,635],{"class":154},[95,142355,142356],{"class":101},"deg",[95,142358,2701],{"class":105},[95,142360,142361],{"class":97,"line":1161},[95,142362,1547],{"class":105},[21981,142364,142366],{"id":142365},"_18123-三角做法","18.1.2.3 三角做法",[10,142368,142369],{},"该下标当经过最外层大盒子时会实现向上反转",[1444,142371],{"style":126385,"src":142372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[86,142374,142375],{"className":126529,"code":135049,"language":126531,"meta":14,"style":14},[92,142376,142377,142381,142387,142397,142407,142423,142433],{"__ignoreMap":14},[95,142378,142379],{"class":97,"line":98},[95,142380,135056],{"class":164},[95,142382,142383,142385],{"class":97,"line":15},[95,142384,135061],{"class":1945},[95,142386,15555],{"class":105},[95,142388,142389,142391,142393,142395],{"class":97,"line":1161},[95,142390,70545],{"class":154},[95,142392,51414],{"class":105},[95,142394,297],{"class":154},[95,142396,1272],{"class":105},[95,142398,142399,142401,142403,142405],{"class":97,"line":1176},[95,142400,70765],{"class":154},[95,142402,51414],{"class":105},[95,142404,297],{"class":154},[95,142406,1272],{"class":105},[95,142408,142409,142411,142413,142415,142417,142419,142421],{"class":97,"line":1182},[95,142410,70873],{"class":154},[95,142412,51414],{"class":105},[95,142414,552],{"class":154},[95,142416,51469],{"class":101},[95,142418,51498],{"class":154},[95,142420,63968],{"class":154},[95,142422,1272],{"class":105},[95,142424,142425,142427,142429,142431],{"class":97,"line":1196},[95,142426,135104],{"class":154},[95,142428,51414],{"class":105},[95,142430,62346],{"class":154},[95,142432,1272],{"class":105},[95,142434,142435],{"class":97,"line":1202},[95,142436,1547],{"class":105},[66,142438,142440],{"id":142439},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21981,142442,142444],{"id":142443},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[10,142446,142447],{},"设置中心点",[1444,142449],{"style":126385,"src":142450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[10,142452,142453],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21981,142455,142457],{"id":142456},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[86,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",[92,142462,142463,142468,142474,142489,142494,142499],{"__ignoreMap":14},[95,142464,142465],{"class":97,"line":98},[95,142466,142467],{"class":164},"\u002F* 转换中心点 *\u002F\n",[95,142469,142470,142472],{"class":97,"line":15},[95,142471,51588],{"class":51277},[95,142473,15555],{"class":105},[95,142475,142476,142479,142481,142483,142485,142487],{"class":97,"line":1161},[95,142477,142478],{"class":154},"  transform-origin",[95,142480,51414],{"class":105},[95,142482,51569],{"class":154},[95,142484,17127],{"class":154},[95,142486,130392],{"class":105},[95,142488,135202],{"class":164},[95,142490,142491],{"class":97,"line":1176},[95,142492,142493],{"class":164},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[95,142495,142496],{"class":97,"line":1182},[95,142497,142498],{"class":164},"  \u002F* transform-origin: left top; *\u002F\n",[95,142500,142501],{"class":97,"line":1196},[95,142502,1547],{"class":105},[21981,142504,142506],{"id":142505},"_18133-旋转案例","18.1.3.3 旋转案例",[1444,142508],{"style":126385,"src":142509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[86,142511,142512],{"className":126529,"code":142332,"language":126531,"meta":14,"style":14},[92,142513,142514,142520,142536],{"__ignoreMap":14},[95,142515,142516,142518],{"class":97,"line":98},[95,142517,51588],{"class":51277},[95,142519,15555],{"class":105},[95,142521,142522,142524,142526,142528,142530,142532,142534],{"class":97,"line":15},[95,142523,136513],{"class":154},[95,142525,51414],{"class":105},[95,142527,142349],{"class":154},[95,142529,106],{"class":105},[95,142531,635],{"class":154},[95,142533,142356],{"class":101},[95,142535,2701],{"class":105},[95,142537,142538],{"class":97,"line":1161},[95,142539,1547],{"class":105},[66,142541,142543],{"id":142542},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21981,142545,142547],{"id":142546},"_18141-scale介绍","18.1.4.1 scale介绍",[10,142549,142550],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1444,142552],{"style":126385,"src":142553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21981,142555,142557],{"id":142556},"_18142-分页按钮","18.1.4.2 分页按钮",[1444,142559],{"style":126385,"src":142560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[86,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",[92,142565,142566,142572,142588,142592,142596,142601,142607,142621,142626],{"__ignoreMap":14},[95,142567,142568,142570],{"class":97,"line":98},[95,142569,51588],{"class":51277},[95,142571,15555],{"class":105},[95,142573,142574,142576,142578,142581,142583,142586],{"class":97,"line":15},[95,142575,136513],{"class":154},[95,142577,51414],{"class":105},[95,142579,142580],{"class":154},"scale",[95,142582,106],{"class":105},[95,142584,142585],{"class":154},"1.2",[95,142587,2701],{"class":105},[95,142589,142590],{"class":97,"line":1161},[95,142591,1547],{"class":105},[95,142593,142594],{"class":97,"line":1176},[95,142595,135990],{"class":105},[95,142597,142598],{"class":97,"line":1182},[95,142599,142600],{"class":164},"\u002F* 2D 缩放 *\u002F\n",[95,142602,142603,142605],{"class":97,"line":1196},[95,142604,51588],{"class":51277},[95,142606,15555],{"class":105},[95,142608,142609,142611,142613,142615,142617,142619],{"class":97,"line":1202},[95,142610,136513],{"class":154},[95,142612,51414],{"class":105},[95,142614,142580],{"class":154},[95,142616,106],{"class":105},[95,142618,142585],{"class":154},[95,142620,2701],{"class":105},[95,142622,142623],{"class":97,"line":1293},[95,142624,142625],{"class":164},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[95,142627,142628],{"class":97,"line":1299},[95,142629,1547],{"class":105},[10,142631,142632],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[86,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",[92,142637,142638,142643,142653,142674,142695,142699,142704,142710,142737],{"__ignoreMap":14},[95,142639,142640],{"class":97,"line":98},[95,142641,142642],{"class":164},"\u002F* 定义动画 *\u002F\n",[95,142644,142645,142648,142651],{"class":97,"line":15},[95,142646,142647],{"class":101},"@keyframes",[95,142649,142650],{"class":5199}," move",[95,142652,15555],{"class":105},[95,142654,142655,142658,142660,142662,142664,142667,142669,142671],{"class":97,"line":1161},[95,142656,142657],{"class":1945},"  0%",[95,142659,79784],{"class":105},[95,142661,48119],{"class":154},[95,142663,51414],{"class":105},[95,142665,142666],{"class":154},"translateX",[95,142668,106],{"class":105},[95,142670,297],{"class":154},[95,142672,142673],{"class":105},"); }\n",[95,142675,142676,142679,142681,142683,142685,142687,142689,142691,142693],{"class":97,"line":1176},[95,142677,142678],{"class":1945},"  100%",[95,142680,79784],{"class":105},[95,142682,48119],{"class":154},[95,142684,51414],{"class":105},[95,142686,142666],{"class":154},[95,142688,106],{"class":105},[95,142690,417],{"class":154},[95,142692,51469],{"class":101},[95,142694,142673],{"class":105},[95,142696,142697],{"class":97,"line":1182},[95,142698,1547],{"class":105},[95,142700,142701],{"class":97,"line":1196},[95,142702,142703],{"class":164},"\u002F* 调用动画 *\u002F\n",[95,142705,142706,142708],{"class":97,"line":1202},[95,142707,51588],{"class":51277},[95,142709,15555],{"class":105},[95,142711,142712,142715,142717,142719,142721,142723,142725,142727,142729,142732,142735],{"class":97,"line":1293},[95,142713,142714],{"class":154},"  animation",[95,142716,51414],{"class":105},[95,142718,135215],{"class":154},[95,142720,25103],{"class":154},[95,142722,801],{"class":101},[95,142724,78657],{"class":154},[95,142726,4075],{"class":154},[95,142728,801],{"class":101},[95,142730,142731],{"class":154}," infinite",[95,142733,142734],{"class":154}," alternate",[95,142736,1272],{"class":105},[95,142738,142739],{"class":97,"line":1299},[95,142740,1547],{"class":105},[10,142742,142632],{},[86,142744,142747],{"className":142745,"code":142746,"language":5170},[5168],"\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",[92,142748,142746],{"__ignoreMap":14},[21981,142750,142752],{"id":142751},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[10,142754,142755],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1444,142757],{"style":126385,"src":142758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[86,142760,142761],{"className":126529,"code":142635,"language":126531,"meta":14,"style":14},[92,142762,142763,142767,142775,142793,142813,142817,142821,142827,142851],{"__ignoreMap":14},[95,142764,142765],{"class":97,"line":98},[95,142766,142642],{"class":164},[95,142768,142769,142771,142773],{"class":97,"line":15},[95,142770,142647],{"class":101},[95,142772,142650],{"class":5199},[95,142774,15555],{"class":105},[95,142776,142777,142779,142781,142783,142785,142787,142789,142791],{"class":97,"line":1161},[95,142778,142657],{"class":1945},[95,142780,79784],{"class":105},[95,142782,48119],{"class":154},[95,142784,51414],{"class":105},[95,142786,142666],{"class":154},[95,142788,106],{"class":105},[95,142790,297],{"class":154},[95,142792,142673],{"class":105},[95,142794,142795,142797,142799,142801,142803,142805,142807,142809,142811],{"class":97,"line":1176},[95,142796,142678],{"class":1945},[95,142798,79784],{"class":105},[95,142800,48119],{"class":154},[95,142802,51414],{"class":105},[95,142804,142666],{"class":154},[95,142806,106],{"class":105},[95,142808,417],{"class":154},[95,142810,51469],{"class":101},[95,142812,142673],{"class":105},[95,142814,142815],{"class":97,"line":1182},[95,142816,1547],{"class":105},[95,142818,142819],{"class":97,"line":1196},[95,142820,142703],{"class":164},[95,142822,142823,142825],{"class":97,"line":1202},[95,142824,51588],{"class":51277},[95,142826,15555],{"class":105},[95,142828,142829,142831,142833,142835,142837,142839,142841,142843,142845,142847,142849],{"class":97,"line":1293},[95,142830,142714],{"class":154},[95,142832,51414],{"class":105},[95,142834,135215],{"class":154},[95,142836,25103],{"class":154},[95,142838,801],{"class":101},[95,142840,78657],{"class":154},[95,142842,4075],{"class":154},[95,142844,801],{"class":101},[95,142846,142731],{"class":154},[95,142848,142734],{"class":154},[95,142850,1272],{"class":105},[95,142852,142853],{"class":97,"line":1299},[95,142854,1547],{"class":105},[10,142856,142857],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[66,142859,142861],{"id":142860},"_1823-知识点回顾","18.2.3 知识点回顾",[86,142863,142864],{"className":126529,"code":128698,"language":126531,"meta":14,"style":14},[92,142865,142866,142872,142882],{"__ignoreMap":14},[95,142867,142868,142870],{"class":97,"line":98},[95,142869,51588],{"class":51277},[95,142871,15555],{"class":105},[95,142873,142874,142876,142878,142880],{"class":97,"line":15},[95,142875,128711],{"class":154},[95,142877,51414],{"class":105},[95,142879,61713],{"class":154},[95,142881,1272],{"class":105},[95,142883,142884],{"class":97,"line":1161},[95,142885,1547],{"class":105},[37,142887,142889],{"id":142888},"_183-3d-转换","18.3 3D 转换",[10,142891,142892],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[66,142894,142896],{"id":142895},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1444,142898],{"style":126385,"src":142899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[66,142901,142903],{"id":142902},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1444,142905],{"style":126385,"src":142906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[10,142908,142909],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[10,142911,142912],{},"translate3d的效果需要搭配透视perspective来使用",[1444,142914],{"style":126385,"src":142915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[66,142917,142919],{"id":142918},"_1833-透视-perspective","18.3.3 透视 perspective",[1444,142921],{"style":126385,"src":142922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[10,142924,142925],{},"透视写在父盒子上，单位为像素",[66,142927,142929],{"id":142928},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21981,142931,142933],{"id":142932},"_18341-分开解释","18.3.4.1 分开解释",[1444,142935],{"style":126385,"src":142936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1444,142938],{"style":126385,"src":142939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1444,142941],{"style":126385,"src":142942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[10,142944,142945],{},"总结来说就是左手原则",[21981,142947,142949],{"id":142948},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1444,142951],{"style":126385,"src":142952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[66,142954,142956],{"id":142955},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1444,142958],{"style":126385,"src":142959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1444,142961],{"style":126385,"src":142962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[86,142964,142966],{"className":126529,"code":142965,"language":126531,"meta":14,"style":14},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[92,142967,142968,142974,142987,143004],{"__ignoreMap":14},[95,142969,142970,142972],{"class":97,"line":98},[95,142971,51588],{"class":51277},[95,142973,15555],{"class":105},[95,142975,142976,142979,142981,142983,142985],{"class":97,"line":15},[95,142977,142978],{"class":154},"  perspective",[95,142980,51414],{"class":105},[95,142982,65051],{"class":154},[95,142984,51469],{"class":101},[95,142986,1272],{"class":105},[95,142988,142989,142991,142993,142996,142998,143000,143002],{"class":97,"line":1161},[95,142990,136513],{"class":154},[95,142992,51414],{"class":105},[95,142994,142995],{"class":154},"rotateX",[95,142997,106],{"class":105},[95,142999,635],{"class":154},[95,143001,142356],{"class":101},[95,143003,2701],{"class":105},[95,143005,143006],{"class":97,"line":1176},[95,143007,1547],{"class":105},[66,143009,143011],{"id":143010},"_1836-案例","18.3.6 案例",[21981,143013,143015],{"id":143014},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1444,143017],{"style":126385,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1444,143020],{"style":126385,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1444,143023],{"style":126385,"src":143024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[86,143026,143028],{"className":126529,"code":143027,"language":126531,"meta":14,"style":14},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[92,143029,143030,143035,143041,143053],{"__ignoreMap":14},[95,143031,143032],{"class":97,"line":98},[95,143033,143034],{"class":164},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[95,143036,143037,143039],{"class":97,"line":15},[95,143038,133526],{"class":1945},[95,143040,15555],{"class":105},[95,143042,143043,143045,143047,143049,143051],{"class":97,"line":1161},[95,143044,142978],{"class":154},[95,143046,51414],{"class":105},[95,143048,65051],{"class":154},[95,143050,51469],{"class":101},[95,143052,1272],{"class":105},[95,143054,143055],{"class":97,"line":1176},[95,143056,1547],{"class":105},[21981,143058,143060],{"id":143059},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1444,143062],{"style":126385,"src":143063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[86,143065,143066],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,143067,143068,143072,143086,143090],{"__ignoreMap":14},[95,143069,143070],{"class":97,"line":98},[95,143071,130640],{"class":164},[95,143073,143074,143076,143078,143080,143082,143084],{"class":97,"line":15},[95,143075,1016],{"class":105},[95,143077,51588],{"class":51277},[95,143079,53463],{"class":1945},[95,143081,151],{"class":105},[95,143083,130653],{"class":210},[95,143085,51284],{"class":105},[95,143087,143088],{"class":97,"line":1161},[95,143089,130660],{"class":105},[95,143091,143092,143094,143096],{"class":97,"line":1176},[95,143093,51762],{"class":105},[95,143095,51588],{"class":51277},[95,143097,51284],{"class":105},[21981,143099,143101],{"id":143100},"_18363-旋转木马","18.3.6.3 旋转木马",[1444,143103],{"style":126385,"src":143104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[86,143106,143107],{"className":126529,"code":142332,"language":126531,"meta":14,"style":14},[92,143108,143109,143115,143131],{"__ignoreMap":14},[95,143110,143111,143113],{"class":97,"line":98},[95,143112,51588],{"class":51277},[95,143114,15555],{"class":105},[95,143116,143117,143119,143121,143123,143125,143127,143129],{"class":97,"line":15},[95,143118,136513],{"class":154},[95,143120,51414],{"class":105},[95,143122,142349],{"class":154},[95,143124,106],{"class":105},[95,143126,635],{"class":154},[95,143128,142356],{"class":101},[95,143130,2701],{"class":105},[95,143132,143133],{"class":97,"line":1161},[95,143134,1547],{"class":105},[5109,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":1161,"text":142260},{"id":142314,"depth":1161,"text":142315},{"id":142439,"depth":1161,"text":142440},{"id":142542,"depth":1161,"text":142543},{"id":142860,"depth":1161,"text":142861},{"id":142888,"depth":15,"text":142889,"children":143148},[143149,143150,143151,143152,143153,143154],{"id":142895,"depth":1161,"text":142896},{"id":142902,"depth":1161,"text":142903},{"id":142918,"depth":1161,"text":142919},{"id":142928,"depth":1161,"text":142929},{"id":142955,"depth":1161,"text":142956},{"id":143010,"depth":1161,"text":143011},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142227,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143161,"title":143162,"body":143163,"description":23360,"extension":18,"meta":143366,"navigation":21,"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],[33,143166,143162],{"id":143167},"_19-移动端基础-前缀现状与视口",[37,143169,143171],{"id":143170},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1444,143173],{"style":126385,"src":143174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[10,143176,143177],{},"意思就是加个前缀，增加兼容性",[37,143179,143181],{"id":143180},"_192-移动端现状认识","19.2 移动端现状认识",[1444,143183],{"style":126385,"src":143184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[10,143186,143187],{},"调试方法：",[1444,143189],{"style":126385,"src":143190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[37,143192,143194],{"id":143193},"_193-视口","19.3 视口",[10,143196,143197],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[66,143199,143201],{"id":143200},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1444,143203],{"style":126385,"src":143204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[66,143206,143208],{"id":143207},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1444,143210],{"style":126385,"src":143211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[66,143213,143215],{"id":143214},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1113,143217,143218,143221,143224,143227],{},[52,143219,143220],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[52,143222,143223],{},"理想视口，对设备来讲，是最理想的视口尺寸",[52,143225,143226],{},"需要手动添写meta视口标签通知浏览器操作",[52,143228,143229],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[66,143231,143233],{"id":143232},"_1934-meta视口标签","19.3.4 meta视口标签",[86,143235,143237],{"className":127276,"code":143236,"language":127278,"meta":14,"style":14},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[92,143238,143239],{"__ignoreMap":14},[95,143240,143241,143243,143245,143247,143249,143251,143253,143255,143257],{"class":97,"line":98},[95,143242,1016],{"class":105},[95,143244,51321],{"class":51277},[95,143246,14903],{"class":1945},[95,143248,151],{"class":105},[95,143250,51368],{"class":210},[95,143252,51348],{"class":1945},[95,143254,151],{"class":105},[95,143256,51375],{"class":210},[95,143258,51284],{"class":105},[1444,143260],{"style":126385,"src":143261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[10,143263,143264],{},"标准视口设置：",[49,143266,143267,143270,143273,143276,143279],{},[52,143268,143269],{},"视口宽度和设备保持一致",[52,143271,143272],{},"视口的默认缩放比例1.0",[52,143274,143275],{},"不允许用户自行缩放",[52,143277,143278],{},"最大允许的缩放比例1.0",[52,143280,143281],{},"最小允许的缩放比例1.0",[66,143283,143285],{"id":143284},"_1935-二倍图","19.3.5 二倍图",[21981,143287,143289],{"id":143288},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1444,143291],{"style":126385,"src":143292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1444,143294],{"style":126385,"src":143295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21981,143297,143299],{"id":143298},"_19352-多倍图","19.3.5.2 多倍图",[1444,143301],{"style":126385,"src":143302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[10,143304,143305],{},"二倍图法，代码如下：",[86,143307,143309],{"className":126529,"code":143308,"language":126531,"meta":14,"style":14},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[92,143310,143311,143316],{"__ignoreMap":14},[95,143312,143313],{"class":97,"line":98},[95,143314,143315],{"class":164},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[95,143317,143318,143321],{"class":97,"line":15},[95,143319,143320],{"class":51277},"background-size",[95,143322,143323],{"class":105},": 50% 50%;\n",[21981,143325,143327],{"id":143326},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1444,143329],{"style":126385,"src":143330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[49,143332,143333,143336,143339,143342],{},[52,143334,143335],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[52,143337,143338],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[52,143340,143341],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[52,143343,143344],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21981,143346,143348],{"id":143347},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1444,143350],{"style":126385,"src":143351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5109,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":1161,"text":143201},{"id":143207,"depth":1161,"text":143208},{"id":143214,"depth":1161,"text":143215},{"id":143232,"depth":1161,"text":143233},{"id":143284,"depth":1161,"text":143285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143162,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143372,"title":143373,"body":143374,"description":23360,"extension":18,"meta":144251,"navigation":21,"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],[33,143377,143373],{"id":143378},"_20-移动端布局实战上篇",[37,143380,143382],{"id":143381},"_201-移动端主流方案","20.1 移动端主流方案",[49,143384,143385],{},[52,143386,143387],{},[255,143388,143389],{},"单独移动端页面（主流）",[1444,143391],{"style":126385,"src":143392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[49,143394,143395],{"start":15},[52,143396,143397],{},[255,143398,143399],{},"响应式兼容PC移动端",[1444,143401],{"style":126385,"src":143402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[49,143404,143405],{"start":1161},[52,143406,143407],{},"两种页面选型布局方式",[1444,143409],{"style":126385,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[37,143412,143414],{"id":143413},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[66,143416,143418],{"id":143417},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[10,143420,143421,143422],{},"官网地址： ",[344,143423,143424],{"href":143424,"rel":143425},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23849],[1444,143427],{"style":126385,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1444,143430],{"style":126385,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[66,143433,143435],{"id":143434},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1444,143437],{"style":126385,"src":143438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1444,143440],{"style":126385,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[10,143443,143444],{},"去除高亮：",[10,143446,143447],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[10,143449,143450],{},"-webkit- tap-highlight-color: transparent;",[37,143452,143454],{"id":143453},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1444,143456],{"style":126385,"src":143457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[37,143459,143461],{"id":143460},"_204-流式布局案例","20.4 流式布局案例",[10,143463,135],{},[10,143465,143466],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[10,143468,143469],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[10,143471,143472],{},"图片格式：",[1444,143474],{"style":126385,"src":143475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[10,143477,135572],{},[1444,143479],{"style":126385,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[10,143482,139899],{},[86,143484,143485],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,143486,143487],{"__ignoreMap":14},[95,143488,143489,143491,143493,143495,143497,143499,143501,143503,143505,143507,143509,143511],{"class":97,"line":98},[95,143490,1016],{"class":105},[95,143492,1444],{"class":51277},[95,143494,55216],{"class":1945},[95,143496,151],{"class":105},[95,143498,134046],{"class":210},[95,143500,55224],{"class":1945},[95,143502,151],{"class":105},[95,143504,134053],{"class":210},[95,143506,134056],{"class":1945},[95,143508,151],{"class":105},[95,143510,134061],{"class":210},[95,143512,51284],{"class":105},[10,143514,139988],{},[86,143516,143517],{"className":127276,"code":134031,"language":127278,"meta":14,"style":14},[92,143518,143519],{"__ignoreMap":14},[95,143520,143521,143523,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543],{"class":97,"line":98},[95,143522,1016],{"class":105},[95,143524,1444],{"class":51277},[95,143526,55216],{"class":1945},[95,143528,151],{"class":105},[95,143530,134046],{"class":210},[95,143532,55224],{"class":1945},[95,143534,151],{"class":105},[95,143536,134053],{"class":210},[95,143538,134056],{"class":1945},[95,143540,151],{"class":105},[95,143542,134061],{"class":210},[95,143544,51284],{"class":105},[37,143546,143548],{"id":143547},"_205-flex布局","20.5 flex布局",[1444,143550],{"style":126385,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[66,143553,143555],{"id":143554},"_2051-布局原理","20.5.1 布局原理",[10,143557,143558],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1113,143560,143561,143564,143567,143570,143573],{},[52,143562,143563],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[52,143565,143566],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[52,143568,143569],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[52,143571,143572],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[52,143574,143575],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[10,143577,143578],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[10,143580,143581],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[86,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",[92,143586,143587,143592,143599,143609,143621,143632,143643,143654],{"__ignoreMap":14},[95,143588,143589],{"class":97,"line":98},[95,143590,143591],{"class":164},"\u002F* Flex 弹性布局 *\u002F\n",[95,143593,143594,143597],{"class":97,"line":15},[95,143595,143596],{"class":1945},".container",[95,143598,15555],{"class":105},[95,143600,143601,143603,143605,143607],{"class":97,"line":1161},[95,143602,128145],{"class":154},[95,143604,51414],{"class":105},[95,143606,51454],{"class":154},[95,143608,1272],{"class":105},[95,143610,143611,143614,143616,143619],{"class":97,"line":1176},[95,143612,143613],{"class":154},"  flex-direction",[95,143615,51414],{"class":105},[95,143617,143618],{"class":154},"row",[95,143620,1272],{"class":105},[95,143622,143623,143626,143628,143630],{"class":97,"line":1182},[95,143624,143625],{"class":154},"  justify-content",[95,143627,51414],{"class":105},[95,143629,51645],{"class":154},[95,143631,1272],{"class":105},[95,143633,143634,143637,143639,143641],{"class":97,"line":1196},[95,143635,143636],{"class":154},"  align-items",[95,143638,51414],{"class":105},[95,143640,51569],{"class":154},[95,143642,1272],{"class":105},[95,143644,143645,143648,143650,143652],{"class":97,"line":1202},[95,143646,143647],{"class":154},"  flex-wrap",[95,143649,51414],{"class":105},[95,143651,78587],{"class":154},[95,143653,1272],{"class":105},[95,143655,143656],{"class":97,"line":1293},[95,143657,1547],{"class":105},[10,143659,70430],{},[10,143661,143662],{},".form-item .male-label {",[10,143664,143665],{},"   margin-right: 20px;",[10,143667,143668],{},"   display: inline-flex;",[10,143670,143671],{},"   align-items: center;",[10,143673,1052],{},[1444,143675],{"style":126385,"src":143676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1444,143678],{"style":126385,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[66,143681,143683],{"id":143682},"_2052-常见父项属性","20.5.2 常见父项属性",[49,143685,143686,143689,143692,143695,143698,143701,143704],{},[52,143687,143688],{},"flex-direction：设置主轴的方向",[52,143690,143691],{},"justify-content：设置主轴上的子元素排列方式",[52,143693,143694],{},"flex-wrap：设置子元素是否换行",[52,143696,143697],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[52,143699,143700],{},"align-items：设置侧轴上的子元素排列方式（单行）",[52,143702,143703],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[52,143705,143688],{},[1444,143707],{"style":126385,"src":143708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1444,143710],{"style":126385,"src":143711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[49,143713,143714],{"start":15},[52,143715,143691],{},[1444,143717],{"style":126385,"src":143718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[10,143720,143721,143724],{},[92,143722,143723],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[10,143726,143727],{},"跟着主轴走",[49,143729,143730],{"start":1161},[52,143731,143694],{},[1444,143733],{"style":126385,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[10,143736,143737],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[49,143739,143740],{"start":1176},[52,143741,143697],{},[1444,143743],{"style":126385,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[10,143746,143747],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[10,143749,143750],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[49,143752,143753],{"start":1182},[52,143754,143700],{},[1444,143756],{"style":126385,"src":143757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[10,143759,143760],{},"align-items与align-content之间的区别：",[10,143762,143763],{},"单找items，多找content",[1444,143765],{"style":126385,"src":143766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[49,143768,143769],{"start":1196},[52,143770,143703],{},[1444,143772],{"style":126385,"src":143773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[66,143775,143777],{"id":143776},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[49,143779,143780],{},[52,143781,143782],{},[255,143783,143784],{},"flex 属性",[10,143786,143787],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1444,143789],{"style":126385,"src":143790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[10,143792,143793],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[10,143795,143796],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[49,143798,143799],{"start":15},[52,143800,143801,13778,143804],{},[255,143802,143803],{},"align-self",[255,143805,143806],{},"控制子项自己在侧轴上的排列方式",[1444,143808],{"style":126385,"src":143809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[10,143811,143812],{},"单个子盒子在父盒子侧轴上的排列方式",[49,143814,143815],{"start":1161},[52,143816,143817,143819],{},[255,143818,95274],{}," 属性定义项目的排列顺序",[1444,143821],{"style":126385,"src":143822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[66,143824,143826],{"id":143825},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1444,143828],{"style":126385,"src":143829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[10,143831,143832],{},"必须要添加浏览器的私有前缀",[66,143834,143836],{"id":143835},"_2055-携程网首页案例","20.5.5 携程网首页案例",[10,143838,143839],{},"学到最重要的知识：",[10,143841,143842],{},"flex处理这样的布局思路",[1444,143844],{"style":126385,"src":143845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[86,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",[92,143850,143851,143857,143867,143877,143887],{"__ignoreMap":14},[95,143852,143853,143855],{"class":97,"line":98},[95,143854,143596],{"class":1945},[95,143856,15555],{"class":105},[95,143858,143859,143861,143863,143865],{"class":97,"line":15},[95,143860,128145],{"class":154},[95,143862,51414],{"class":105},[95,143864,51454],{"class":154},[95,143866,1272],{"class":105},[95,143868,143869,143871,143873,143875],{"class":97,"line":1161},[95,143870,143625],{"class":154},[95,143872,51414],{"class":105},[95,143874,51569],{"class":154},[95,143876,1272],{"class":105},[95,143878,143879,143881,143883,143885],{"class":97,"line":1176},[95,143880,143636],{"class":154},[95,143882,51414],{"class":105},[95,143884,51569],{"class":154},[95,143886,1272],{"class":105},[95,143888,143889],{"class":97,"line":1182},[95,143890,1547],{"class":105},[10,143892,143893],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[10,143895,143896],{},"使用属性选择器",[1444,143898],{"style":126385,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[10,143901,68866],{},[86,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",[92,143906,143907,143912,143926,143931,143951,143956,143975,143980,143999,144004,144023],{"__ignoreMap":14},[95,143908,143909],{"class":97,"line":98},[95,143910,143911],{"class":164},"\u003C!-- 携程网移动端案例结构 -->\n",[95,143913,143914,143916,143918,143920,143922,143924],{"class":97,"line":15},[95,143915,1016],{"class":105},[95,143917,51588],{"class":51277},[95,143919,53463],{"class":1945},[95,143921,151],{"class":105},[95,143923,92300],{"class":210},[95,143925,51284],{"class":105},[95,143927,143928],{"class":97,"line":1161},[95,143929,143930],{"class":164},"  \u003C!-- 搜索栏 -->\n",[95,143932,143933,143935,143937,143939,143941,143944,143947,143949],{"class":97,"line":1176},[95,143934,52121],{"class":105},[95,143936,51588],{"class":51277},[95,143938,53463],{"class":1945},[95,143940,151],{"class":105},[95,143942,143943],{"class":210},"\"search-index\"",[95,143945,143946],{"class":105},">...\u003C\u002F",[95,143948,51588],{"class":51277},[95,143950,51284],{"class":105},[95,143952,143953],{"class":97,"line":1182},[95,143954,143955],{"class":164},"  \u003C!-- 焦点图 -->\n",[95,143957,143958,143960,143962,143964,143966,143969,143971,143973],{"class":97,"line":1196},[95,143959,52121],{"class":105},[95,143961,51588],{"class":51277},[95,143963,53463],{"class":1945},[95,143965,151],{"class":105},[95,143967,143968],{"class":210},"\"focus\"",[95,143970,143946],{"class":105},[95,143972,51588],{"class":51277},[95,143974,51284],{"class":105},[95,143976,143977],{"class":97,"line":1202},[95,143978,143979],{"class":164},"  \u003C!-- 主导航 -->\n",[95,143981,143982,143984,143986,143988,143990,143993,143995,143997],{"class":97,"line":1293},[95,143983,52121],{"class":105},[95,143985,51588],{"class":51277},[95,143987,53463],{"class":1945},[95,143989,151],{"class":105},[95,143991,143992],{"class":210},"\"local-nav\"",[95,143994,143946],{"class":105},[95,143996,51588],{"class":51277},[95,143998,51284],{"class":105},[95,144000,144001],{"class":97,"line":1299},[95,144002,144003],{"class":164},"  \u003C!-- 子导航 -->\n",[95,144005,144006,144008,144010,144012,144014,144017,144019,144021],{"class":97,"line":1311},[95,144007,52121],{"class":105},[95,144009,51588],{"class":51277},[95,144011,53463],{"class":1945},[95,144013,151],{"class":105},[95,144015,144016],{"class":210},"\"nav-common\"",[95,144018,143946],{"class":105},[95,144020,51588],{"class":51277},[95,144022,51284],{"class":105},[95,144024,144025,144027,144029],{"class":97,"line":1594},[95,144026,51762],{"class":105},[95,144028,51588],{"class":51277},[95,144030,51284],{"class":105},[10,144032,70430],{},[86,144034,144035],{"className":126529,"code":136981,"language":126531,"meta":14,"style":14},[92,144036,144037,144051,144067],{"__ignoreMap":14},[95,144038,144039,144041,144043,144045,144047,144049],{"class":97,"line":98},[95,144040,53798],{"class":51277},[95,144042,996],{"class":105},[95,144044,103084],{"class":1945},[95,144046,151],{"class":101},[95,144048,62676],{"class":210},[95,144050,136998],{"class":105},[95,144052,144053,144055,144057,144059,144061,144063,144065],{"class":97,"line":15},[95,144054,70873],{"class":154},[95,144056,51414],{"class":105},[95,144058,323],{"class":154},[95,144060,51469],{"class":101},[95,144062,51498],{"class":154},[95,144064,130109],{"class":154},[95,144066,1272],{"class":105},[95,144068,144069],{"class":97,"line":1161},[95,144070,1547],{"class":105},[10,144072,144073],{},"总代码和效果展示：",[1444,144075],{"style":126385,"src":144076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[10,144078,68866],{},[86,144080,144081],{"className":127276,"code":143904,"language":127278,"meta":14,"style":14},[92,144082,144083,144087,144101,144105,144123,144127,144145,144149,144167,144171,144189],{"__ignoreMap":14},[95,144084,144085],{"class":97,"line":98},[95,144086,143911],{"class":164},[95,144088,144089,144091,144093,144095,144097,144099],{"class":97,"line":15},[95,144090,1016],{"class":105},[95,144092,51588],{"class":51277},[95,144094,53463],{"class":1945},[95,144096,151],{"class":105},[95,144098,92300],{"class":210},[95,144100,51284],{"class":105},[95,144102,144103],{"class":97,"line":1161},[95,144104,143930],{"class":164},[95,144106,144107,144109,144111,144113,144115,144117,144119,144121],{"class":97,"line":1176},[95,144108,52121],{"class":105},[95,144110,51588],{"class":51277},[95,144112,53463],{"class":1945},[95,144114,151],{"class":105},[95,144116,143943],{"class":210},[95,144118,143946],{"class":105},[95,144120,51588],{"class":51277},[95,144122,51284],{"class":105},[95,144124,144125],{"class":97,"line":1182},[95,144126,143955],{"class":164},[95,144128,144129,144131,144133,144135,144137,144139,144141,144143],{"class":97,"line":1196},[95,144130,52121],{"class":105},[95,144132,51588],{"class":51277},[95,144134,53463],{"class":1945},[95,144136,151],{"class":105},[95,144138,143968],{"class":210},[95,144140,143946],{"class":105},[95,144142,51588],{"class":51277},[95,144144,51284],{"class":105},[95,144146,144147],{"class":97,"line":1202},[95,144148,143979],{"class":164},[95,144150,144151,144153,144155,144157,144159,144161,144163,144165],{"class":97,"line":1293},[95,144152,52121],{"class":105},[95,144154,51588],{"class":51277},[95,144156,53463],{"class":1945},[95,144158,151],{"class":105},[95,144160,143992],{"class":210},[95,144162,143946],{"class":105},[95,144164,51588],{"class":51277},[95,144166,51284],{"class":105},[95,144168,144169],{"class":97,"line":1299},[95,144170,144003],{"class":164},[95,144172,144173,144175,144177,144179,144181,144183,144185,144187],{"class":97,"line":1311},[95,144174,52121],{"class":105},[95,144176,51588],{"class":51277},[95,144178,53463],{"class":1945},[95,144180,151],{"class":105},[95,144182,144016],{"class":210},[95,144184,143946],{"class":105},[95,144186,51588],{"class":51277},[95,144188,51284],{"class":105},[95,144190,144191,144193,144195],{"class":97,"line":1594},[95,144192,51762],{"class":105},[95,144194,51588],{"class":51277},[95,144196,51284],{"class":105},[10,144198,70430],{},[86,144200,144201],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,144202,144203,144207,144221,144225],{"__ignoreMap":14},[95,144204,144205],{"class":97,"line":98},[95,144206,130640],{"class":164},[95,144208,144209,144211,144213,144215,144217,144219],{"class":97,"line":15},[95,144210,1016],{"class":105},[95,144212,51588],{"class":51277},[95,144214,53463],{"class":1945},[95,144216,151],{"class":105},[95,144218,130653],{"class":210},[95,144220,51284],{"class":105},[95,144222,144223],{"class":97,"line":1161},[95,144224,130660],{"class":105},[95,144226,144227,144229,144231],{"class":97,"line":1176},[95,144228,51762],{"class":105},[95,144230,51588],{"class":51277},[95,144232,51284],{"class":105},[5109,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":1161,"text":143418},{"id":143434,"depth":1161,"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":1161,"text":143555},{"id":143682,"depth":1161,"text":143683},{"id":143776,"depth":1161,"text":143777},{"id":143825,"depth":1161,"text":143826},{"id":143835,"depth":1161,"text":143836},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143373,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144257,"title":144258,"body":144259,"description":23360,"extension":18,"meta":145486,"navigation":21,"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],[33,144262,144258],{"id":144263},"_21-移动端布局实战下篇",[37,144265,144267],{"id":144266},"_211-rem适配布局","21.1 rem适配布局",[66,144269,144271],{"id":144270},"_2111-rem单位","21.1.1 rem单位",[1444,144273],{"style":126385,"src":144274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[10,144276,144277],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[66,144279,144281],{"id":144280},"_2112-媒体查询","21.1.2 媒体查询",[49,144283,144284],{},[52,144285,144286],{},"参数介绍",[1444,144288],{"style":126385,"src":144289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1444,144291],{"style":126385,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1444,144294],{"style":126385,"src":144295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1444,144297],{"style":126385,"src":144298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1444,144300],{"style":126385,"src":144301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[86,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",[92,144306,144307,144312,144331,144338,144351,144355],{"__ignoreMap":14},[95,144308,144309],{"class":97,"line":98},[95,144310,144311],{"class":164},"\u002F* 媒体查询 *\u002F\n",[95,144313,144314,144317,144319,144322,144324,144327,144329],{"class":97,"line":15},[95,144315,144316],{"class":101},"@media",[95,144318,1640],{"class":105},[95,144320,144321],{"class":154},"max-width",[95,144323,51414],{"class":105},[95,144325,144326],{"class":154},"768",[95,144328,51469],{"class":101},[95,144330,12425],{"class":105},[95,144332,144333,144336],{"class":97,"line":1161},[95,144334,144335],{"class":1945},"  .container",[95,144337,15555],{"class":105},[95,144339,144340,144343,144345,144347,144349],{"class":97,"line":1176},[95,144341,144342],{"class":154},"    width",[95,144344,51414],{"class":105},[95,144346,417],{"class":154},[95,144348,434],{"class":101},[95,144350,1272],{"class":105},[95,144352,144353],{"class":97,"line":1182},[95,144354,127325],{"class":105},[95,144356,144357],{"class":97,"line":1196},[95,144358,1547],{"class":105},[10,144360,144361],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[49,144363,144364],{"start":15},[52,144365,144366],{},"引入资源",[1444,144368],{"style":126385,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[10,144371,144372],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[66,144374,144376],{"id":144375},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1113,144378,144379,144382,144385],{},[52,144380,144381],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[52,144383,144384],{},"媒体查询可以根据不同设备宽度来修改样式",[52,144386,144387],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[37,144389,144391],{"id":144390},"_212-less基础","21.2 Less基础",[10,144393,144394],{},"css冗余度较高，不利于复用，没有很好的计算能力",[10,144396,144397],{},"Less可以解决该问题，它是css的扩展语言",[10,144399,144400,144401],{},"Less中文网址： ",[344,144402,144403],{"href":144403,"rel":144404},"http:\u002F\u002Flesscss.cn\u002F",[23849],[10,144406,144407],{},[255,144408,144409],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[66,144411,144413],{"id":144412},"_2121-less安装","21.2.1 less安装",[10,144415,144416],{},"如果使用vscode，则无需进行下方安装步骤",[10,144418,144419],{},[344,144420,144421],{"href":144421,"rel":144422},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23849],[1444,144424],{"style":126385,"src":144425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[66,144427,144429],{"id":144428},"_2122-less使用","21.2.2 less使用",[10,144431,144432],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[49,144434,144435],{},[52,144436,144437],{},[255,144438,144439],{},"Less 变量",[1444,144441],{"style":126385,"src":144442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1444,144444],{"style":126385,"src":144445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[49,144447,144448],{"start":15},[52,144449,144450],{},[255,144451,144452],{},"Less 编译",[1444,144454],{"style":126385,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[49,144457,144458],{"start":1161},[52,144459,144460],{},[255,144461,144462],{},"Less 嵌套",[1444,144464],{"style":126385,"src":144465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1444,144467],{"style":126385,"src":144468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[49,144470,144471],{"start":1176},[52,144472,144473],{},[255,144474,144475],{},"Less 运算",[1444,144477],{"style":126385,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[10,144480,144481],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[10,144483,135],{},[1113,144485,144486,144489,144492,144495,144498],{},[52,144487,144488],{},"乘号（*）和除号（\u002F）的写法",[52,144490,144491],{},"运算符中间左右有个空格隔开 1px + 5",[52,144493,144494],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[52,144496,144497],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[52,144499,144500],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[37,144502,144504],{"id":144503},"_213-rem-适配方案","21.3 rem 适配方案",[10,144506,144507],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[10,144509,144510],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1444,144512],{"style":126385,"src":144513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[66,144515,144517],{"id":144516},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[10,144519,144520],{},"rem + 媒体查询 + less 技术",[1444,144522],{"style":126385,"src":144523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[10,144525,144526],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[10,144528,144529],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1444,144531],{"style":126385,"src":144532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[10,144534,144535],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[10,144537,14616],{},[1444,144539],{"style":126385,"src":144540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[10,144542,144543],{},"index.html:",[86,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",[92,144548,144549,144554,144560,144576,144580,144586,144602],{"__ignoreMap":14},[95,144550,144551],{"class":97,"line":98},[95,144552,144553],{"class":164},"\u002F* rem 适配方案 *\u002F\n",[95,144555,144556,144558],{"class":97,"line":15},[95,144557,50612],{"class":51277},[95,144559,15555],{"class":105},[95,144561,144562,144564,144566,144569,144571,144573],{"class":97,"line":1161},[95,144563,70603],{"class":154},[95,144565,51414],{"class":105},[95,144567,144568],{"class":154},"62.5",[95,144570,434],{"class":101},[95,144572,130392],{"class":105},[95,144574,144575],{"class":164},"\u002F* 1rem = 10px *\u002F\n",[95,144577,144578],{"class":97,"line":1176},[95,144579,1547],{"class":105},[95,144581,144582,144584],{"class":97,"line":1182},[95,144583,130377],{"class":1945},[95,144585,15555],{"class":105},[95,144587,144588,144590,144592,144594,144597,144599],{"class":97,"line":1196},[95,144589,70545],{"class":154},[95,144591,51414],{"class":105},[95,144593,552],{"class":154},[95,144595,144596],{"class":101},"rem",[95,144598,130392],{"class":105},[95,144600,144601],{"class":164},"\u002F* 100px *\u002F\n",[95,144603,144604],{"class":97,"line":1202},[95,144605,1547],{"class":105},[10,144607,144608],{},"common.less",[86,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",[92,144613,144614,144620,144635,144639,144645,144659,144663,144667,144671,144677,144691,144695,144701,144715],{"__ignoreMap":14},[95,144615,144616,144618],{"class":97,"line":98},[95,144617,50612],{"class":51277},[95,144619,15555],{"class":105},[95,144621,144622,144624,144626,144628,144630,144632],{"class":97,"line":15},[95,144623,70603],{"class":154},[95,144625,51414],{"class":105},[95,144627,144568],{"class":154},[95,144629,434],{"class":101},[95,144631,26052],{"class":105},[95,144633,144634],{"class":164},"\u002F* 10px *\u002F\n",[95,144636,144637],{"class":97,"line":1161},[95,144638,1547],{"class":105},[95,144640,144641,144643],{"class":97,"line":1176},[95,144642,51588],{"class":51277},[95,144644,15555],{"class":105},[95,144646,144647,144649,144651,144653,144655,144657],{"class":97,"line":1182},[95,144648,70545],{"class":154},[95,144650,51414],{"class":105},[95,144652,552],{"class":154},[95,144654,144596],{"class":101},[95,144656,26052],{"class":105},[95,144658,144601],{"class":164},[95,144660,144661],{"class":97,"line":1196},[95,144662,1547],{"class":105},[95,144664,144665],{"class":97,"line":1202},[95,144666,135990],{"class":105},[95,144668,144669],{"class":97,"line":1293},[95,144670,144553],{"class":164},[95,144672,144673,144675],{"class":97,"line":1299},[95,144674,50612],{"class":51277},[95,144676,15555],{"class":105},[95,144678,144679,144681,144683,144685,144687,144689],{"class":97,"line":1311},[95,144680,70603],{"class":154},[95,144682,51414],{"class":105},[95,144684,144568],{"class":154},[95,144686,434],{"class":101},[95,144688,130392],{"class":105},[95,144690,144575],{"class":164},[95,144692,144693],{"class":97,"line":1594},[95,144694,1547],{"class":105},[95,144696,144697,144699],{"class":97,"line":1599},[95,144698,130377],{"class":1945},[95,144700,15555],{"class":105},[95,144702,144703,144705,144707,144709,144711,144713],{"class":97,"line":1605},[95,144704,70545],{"class":154},[95,144706,51414],{"class":105},[95,144708,552],{"class":154},[95,144710,144596],{"class":101},[95,144712,130392],{"class":105},[95,144714,144601],{"class":164},[95,144716,144717],{"class":97,"line":1610},[95,144718,1547],{"class":105},[10,144720,144721,144722,144725],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23537,144723,144724],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[86,144727,144730],{"className":144728,"code":144729,"language":5170},[5168],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[92,144731,144729],{"__ignoreMap":14},[10,144733,144734],{},"less保存时会自动变成.css文件",[10,144736,144737],{},"好好搞懂上述代码写法",[66,144739,144741],{"id":144740},"_2132-样式导入样式","21.3.2 样式导入样式",[1444,144743],{"style":126385,"src":144744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[66,144746,144748],{"id":144747},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[49,144750,144751],{},[52,144752,144753],{},"准备工作",[1444,144755],{"style":126385,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[10,144758,144759,144760],{},"github地址：",[344,144761,144762],{"href":144762,"rel":144763},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23849],[10,144765,144766],{},"下载之后，将index.js文件拖到项目中就可以了",[10,144768,144769,144770],{},"js文件引入到index.html中使用的是",[92,144771,144772],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[49,144774,144775],{"start":15},[52,144776,144777],{},"vscode插件",[1444,144779],{"style":126385,"src":144780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[10,144782,144783],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[10,144785,144786],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1444,144788],{"style":126385,"src":144789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[10,144791,144792],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1444,144794],{"style":126385,"src":144795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[10,144797,144798],{},"修改成75就可以，alt+z为快捷键",[10,144800,144801],{},"index.css：",[86,144803,144804],{"className":126529,"code":144546,"language":126531,"meta":14,"style":14},[92,144805,144806,144810,144816,144830,144834,144840,144854],{"__ignoreMap":14},[95,144807,144808],{"class":97,"line":98},[95,144809,144553],{"class":164},[95,144811,144812,144814],{"class":97,"line":15},[95,144813,50612],{"class":51277},[95,144815,15555],{"class":105},[95,144817,144818,144820,144822,144824,144826,144828],{"class":97,"line":1161},[95,144819,70603],{"class":154},[95,144821,51414],{"class":105},[95,144823,144568],{"class":154},[95,144825,434],{"class":101},[95,144827,130392],{"class":105},[95,144829,144575],{"class":164},[95,144831,144832],{"class":97,"line":1176},[95,144833,1547],{"class":105},[95,144835,144836,144838],{"class":97,"line":1182},[95,144837,130377],{"class":1945},[95,144839,15555],{"class":105},[95,144841,144842,144844,144846,144848,144850,144852],{"class":97,"line":1196},[95,144843,70545],{"class":154},[95,144845,51414],{"class":105},[95,144847,552],{"class":154},[95,144849,144596],{"class":101},[95,144851,130392],{"class":105},[95,144853,144601],{"class":164},[95,144855,144856],{"class":97,"line":1202},[95,144857,1547],{"class":105},[10,144859,144543],{},[86,144861,144862],{"className":126529,"code":126933,"language":126531,"meta":14,"style":14},[92,144863,144864,144870,144882],{"__ignoreMap":14},[95,144865,144866,144868],{"class":97,"line":98},[95,144867,51777],{"class":51277},[95,144869,15555],{"class":105},[95,144871,144872,144874,144876,144878,144880],{"class":97,"line":15},[95,144873,70603],{"class":154},[95,144875,51414],{"class":105},[95,144877,707],{"class":154},[95,144879,51469],{"class":101},[95,144881,1272],{"class":105},[95,144883,144884],{"class":97,"line":1161},[95,144885,1547],{"class":105},[37,144887,144889],{"id":144888},"_214-响应式开发","21.4 响应式开发",[10,144891,144892],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1444,144894],{"style":126385,"src":144895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[10,144897,144898],{},"做法：",[1113,144900,144901,144904],{},[52,144902,144903],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[52,144905,144906],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1444,144908],{"style":126385,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[10,144911,144912],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[66,144914,144916],{"id":144915},"_2141-简单代码示范","21.4.1 简单代码示范",[86,144918,144919],{"className":126529,"code":144546,"language":126531,"meta":14,"style":14},[92,144920,144921,144925,144931,144945,144949,144955,144969],{"__ignoreMap":14},[95,144922,144923],{"class":97,"line":98},[95,144924,144553],{"class":164},[95,144926,144927,144929],{"class":97,"line":15},[95,144928,50612],{"class":51277},[95,144930,15555],{"class":105},[95,144932,144933,144935,144937,144939,144941,144943],{"class":97,"line":1161},[95,144934,70603],{"class":154},[95,144936,51414],{"class":105},[95,144938,144568],{"class":154},[95,144940,434],{"class":101},[95,144942,130392],{"class":105},[95,144944,144575],{"class":164},[95,144946,144947],{"class":97,"line":1176},[95,144948,1547],{"class":105},[95,144950,144951,144953],{"class":97,"line":1182},[95,144952,130377],{"class":1945},[95,144954,15555],{"class":105},[95,144956,144957,144959,144961,144963,144965,144967],{"class":97,"line":1196},[95,144958,70545],{"class":154},[95,144960,51414],{"class":105},[95,144962,552],{"class":154},[95,144964,144596],{"class":101},[95,144966,130392],{"class":105},[95,144968,144601],{"class":164},[95,144970,144971],{"class":97,"line":1202},[95,144972,1547],{"class":105},[10,144974,144975],{},"父盒子一般命名为container",[66,144977,144979],{"id":144978},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[10,144981,144982,144983],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[255,144984,144985],{},"使得 Web 开发更加快捷",[1113,144987,144988],{},[52,144989,144990,144991],{},"官网：",[255,144992,144993],{},[344,144994,144995],{"href":144995,"rel":144996},"http:\u002F\u002Fgetbootstrap.com\u002F",[23849],[10,144998,144999],{},"可以直接去官网拿现成的东西",[49,145001,145002],{},[52,145003,145004],{},"Bootstrap的使用",[10,145006,145007],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[10,145009,145010],{},"Bootstrap 使用四步曲：",[10,145012,145013,145016],{},[255,145014,145015],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1444,145018],{"style":126385,"src":145019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[10,145021,145022],{},"打开Bootstrap官网，然后下载",[1444,145024],{"style":126385,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1444,145027],{"style":126385,"src":145028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[10,145030,145031],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[10,145033,145034],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[10,145036,145037],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1444,145039],{"style":126385,"src":145040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[86,145042,145044],{"className":126529,"code":145043,"language":126531,"meta":14,"style":14},".center {\n  color: red;\n}\n",[92,145045,145046,145052,145062],{"__ignoreMap":14},[95,145047,145048,145050],{"class":97,"line":98},[95,145049,126820],{"class":1945},[95,145051,15555],{"class":105},[95,145053,145054,145056,145058,145060],{"class":97,"line":15},[95,145055,70882],{"class":154},[95,145057,51414],{"class":105},[95,145059,57398],{"class":154},[95,145061,1272],{"class":105},[95,145063,145064],{"class":97,"line":1161},[95,145065,1547],{"class":105},[10,145067,145068,145071],{},[92,145069,145070],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1444,145073],{"style":126385,"src":145074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1444,145076],{"style":126385,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1444,145079],{"style":126385,"src":145080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[10,145082,145083],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1444,145085],{"style":126385,"src":145086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[10,145088,145089],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[49,145091,145092],{"start":15},[52,145093,145094],{},"布局容器",[1444,145096],{"style":126385,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[10,145099,145100],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[10,145102,145103],{},"container-fluid用于移动式布局比较方便",[49,145105,145106],{"start":1161},[52,145107,145108,145109],{},"bootstrap ",[255,145110,145111],{},"栅格系统原理",[1444,145113],{"style":126385,"src":145114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[49,145116,145117],{"start":1176},[52,145118,145119],{},[255,145120,145121],{},"栅格选项参数",[1444,145123],{"style":126385,"src":145124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[10,145126,145127],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[10,145129,14616],{},[86,145131,145132],{"className":126529,"code":145043,"language":126531,"meta":14,"style":14},[92,145133,145134,145140,145150],{"__ignoreMap":14},[95,145135,145136,145138],{"class":97,"line":98},[95,145137,126820],{"class":1945},[95,145139,15555],{"class":105},[95,145141,145142,145144,145146,145148],{"class":97,"line":15},[95,145143,70882],{"class":154},[95,145145,51414],{"class":105},[95,145147,57398],{"class":154},[95,145149,1272],{"class":105},[95,145151,145152],{"class":97,"line":1161},[95,145153,1547],{"class":105},[10,145155,135572],{},[1444,145157],{"style":126385,"src":145158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[10,145160,145161],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[10,145163,145164],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[10,145166,145167],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[10,145169,145170],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[10,145172,145173],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[10,145175,145176],{},"汇总展示说明：",[86,145178,145179],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,145180,145181,145185,145199,145203],{"__ignoreMap":14},[95,145182,145183],{"class":97,"line":98},[95,145184,130640],{"class":164},[95,145186,145187,145189,145191,145193,145195,145197],{"class":97,"line":15},[95,145188,1016],{"class":105},[95,145190,51588],{"class":51277},[95,145192,53463],{"class":1945},[95,145194,151],{"class":105},[95,145196,130653],{"class":210},[95,145198,51284],{"class":105},[95,145200,145201],{"class":97,"line":1161},[95,145202,130660],{"class":105},[95,145204,145205,145207,145209],{"class":97,"line":1176},[95,145206,51762],{"class":105},[95,145208,51588],{"class":51277},[95,145210,51284],{"class":105},[1444,145212],{"style":126385,"src":145213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[10,145215,145216],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[86,145218,145219],{"className":127276,"code":130633,"language":127278,"meta":14,"style":14},[92,145220,145221,145225,145239,145243],{"__ignoreMap":14},[95,145222,145223],{"class":97,"line":98},[95,145224,130640],{"class":164},[95,145226,145227,145229,145231,145233,145235,145237],{"class":97,"line":15},[95,145228,1016],{"class":105},[95,145230,51588],{"class":51277},[95,145232,53463],{"class":1945},[95,145234,151],{"class":105},[95,145236,130653],{"class":210},[95,145238,51284],{"class":105},[95,145240,145241],{"class":97,"line":1161},[95,145242,130660],{"class":105},[95,145244,145245,145247,145249],{"class":97,"line":1176},[95,145246,51762],{"class":105},[95,145248,51588],{"class":51277},[95,145250,51284],{"class":105},[49,145252,145253],{"start":1182},[52,145254,145255],{},[255,145256,145257],{},"列嵌套",[1444,145259],{"style":126385,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[10,145262,145263],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[10,145265,145266],{},"没加row内部这样：",[1444,145268],{"style":126385,"src":145269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[10,145271,145272],{},"加上row之后内部为：",[1444,145274],{"style":126385,"src":145275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[49,145277,145278],{"start":1196},[52,145279,145280],{},[255,145281,145282],{},"列偏移",[1444,145284],{"style":126385,"src":145285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[10,145287,145288],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[10,145290,145291],{},"要加偏移量，即偏移份数",[10,145293,145294],{},"偏移的份数=12-两个盒子的份数",[49,145296,145297],{"start":1202},[52,145298,145299],{},[255,145300,145301],{},"列排序",[1444,145303],{"style":126385,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[10,145306,145307],{},"pull拉左；push推右",[49,145309,145310],{"start":1293},[52,145311,145312],{},[255,145313,145314],{},"响应式工具",[1444,145316],{"style":126385,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[10,145319,145320],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[66,145322,145324],{"id":145323},"_2143-响应式小项目","21.4.3 响应式小项目",[10,145326,145327],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[10,145329,145330],{},"ul {",[10,145332,145333],{},"list-style: none;",[10,145335,145336],{},"margin:0;",[10,145338,145339],{},"padding:0; }",[1444,145341],{"style":126385,"src":145342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1444,145344],{"style":126385,"src":145345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[10,145347,145348],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[10,145350,68866],{},[86,145352,145353],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,145354,145355,145361,145371],{"__ignoreMap":14},[95,145356,145357,145359],{"class":97,"line":98},[95,145358,130377],{"class":1945},[95,145360,15555],{"class":105},[95,145362,145363,145365,145367,145369],{"class":97,"line":15},[95,145364,131009],{"class":154},[95,145366,51414],{"class":105},[95,145368,23720],{"class":154},[95,145370,1272],{"class":105},[95,145372,145373],{"class":97,"line":1161},[95,145374,1547],{"class":105},[10,145376,70430],{},[86,145378,145379],{"className":126529,"code":139199,"language":126531,"meta":14,"style":14},[92,145380,145381,145387,145397],{"__ignoreMap":14},[95,145382,145383,145385],{"class":97,"line":98},[95,145384,130377],{"class":1945},[95,145386,15555],{"class":105},[95,145388,145389,145391,145393,145395],{"class":97,"line":15},[95,145390,131009],{"class":154},[95,145392,51414],{"class":105},[95,145394,23720],{"class":154},[95,145396,1272],{"class":105},[95,145398,145399],{"class":97,"line":1161},[95,145400,1547],{"class":105},[37,145402,145404],{"id":145403},"_215-swiper-插件使用","21.5 swiper 插件使用",[1113,145406,145407,145410,145413],{},[52,145408,145409],{},"下载需要的css和js文件html页面中 引入相关文件",[52,145411,145412],{},"官网找到类似案例，复制html结构，css样式 js 语法",[52,145414,145415],{},"根据需求定制修改模块",[1444,145417],{"style":126385,"src":145418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[10,145420,145421],{},"解压后将这两部分放到项目中",[1444,145423],{"style":126385,"src":145424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[10,145426,145427],{},"这个插件可以帮助我们实现轮播图效果",[10,145429,145430],{},"用法：",[1444,145432],{"style":126385,"src":145433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[10,145435,145436],{},"找到自己喜欢的",[1444,145438],{"style":126385,"src":145439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[10,145441,145442],{},"右键，查看网页源代码",[1444,145444],{"style":126385,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[10,145447,145448],{},"复制人家的结构内容",[10,145450,145451],{},"然后去看API文档：",[1444,145453],{"style":126385,"src":145454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[10,145456,145457],{},"可以看看如何修改样式",[10,145459,145460],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5109,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":1161,"text":144271},{"id":144280,"depth":1161,"text":144281},{"id":144375,"depth":1161,"text":144376},{"id":144390,"depth":15,"text":144391,"children":145472},[145473,145474],{"id":144412,"depth":1161,"text":144413},{"id":144428,"depth":1161,"text":144429},{"id":144503,"depth":15,"text":144504,"children":145476},[145477,145478,145479],{"id":144516,"depth":1161,"text":144517},{"id":144740,"depth":1161,"text":144741},{"id":144747,"depth":1161,"text":144748},{"id":144888,"depth":15,"text":144889,"children":145481},[145482,145483,145484],{"id":144915,"depth":1161,"text":144916},{"id":144978,"depth":1161,"text":144979},{"id":145323,"depth":1161,"text":145324},{"id":145403,"depth":15,"text":145404},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144258,"description":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145492,"title":145493,"body":145494,"description":23360,"extension":18,"meta":145714,"navigation":21,"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],[33,145497,145493],{"id":145498},"_22-代码提交与新型相对单位",[37,145500,145502],{"id":145501},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[10,145504,145505],{},"法1：",[49,145507,145508,145515,145518],{},[52,145509,145510,145511],{},"登录网站注册：",[344,145512,145513],{"href":145513,"rel":145514},"https:\u002F\u002Fgitee.com\u002F",[23849],[52,145516,145517],{},"码云创建新的仓库",[52,145519,145520],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1113,145522,145523],{},[52,145524,145525],{},"在网站根目录右键-- Git Bash Here",[1444,145527],{"style":126385,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1113,145530,145531],{},[52,145532,145533],{},"如果是第一次利用git提交，请配置好全局选项",[86,145535,145537],{"className":117273,"code":145536,"language":117275,"meta":14,"style":14},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[92,145538,145539,145555],{"__ignoreMap":14},[95,145540,145541,145544,145546,145549,145552],{"class":97,"line":98},[95,145542,145543],{"class":1945},"git",[95,145545,119696],{"class":210},[95,145547,145548],{"class":154}," --global",[95,145550,145551],{"class":210}," user.name",[95,145553,145554],{"class":210}," \"你的名字\"\n",[95,145556,145557,145559,145561,145563,145566],{"class":97,"line":15},[95,145558,145543],{"class":1945},[95,145560,119696],{"class":210},[95,145562,145548],{"class":154},[95,145564,145565],{"class":210}," user.email",[95,145567,145568],{"class":210}," \"你的邮箱\"\n",[1113,145570,145571],{},[52,145572,145573],{},"初始化仓库",[86,145575,145577],{"className":117273,"code":145576,"language":117275,"meta":14,"style":14},"git init\n",[92,145578,145579],{"__ignoreMap":14},[95,145580,145581,145583],{"class":97,"line":98},[95,145582,145543],{"class":1945},[95,145584,145585],{"class":210}," init\n",[1113,145587,145588],{},[52,145589,145590],{},"把本地文件放到暂存区",[86,145592,145594],{"className":117273,"code":145593,"language":117275,"meta":14,"style":14},"git add .\n",[92,145595,145596],{"__ignoreMap":14},[95,145597,145598,145600,145602],{"class":97,"line":98},[95,145599,145543],{"class":1945},[95,145601,5192],{"class":210},[95,145603,28726],{"class":210},[1113,145605,145606],{},[52,145607,145608],{},"把本地文件放到本地仓库里面",[86,145610,145612],{"className":117273,"code":145611,"language":117275,"meta":14,"style":14},"git commit -m \"first commit\"\n",[92,145613,145614],{"__ignoreMap":14},[95,145615,145616,145618,145621,145623],{"class":97,"line":98},[95,145617,145543],{"class":1945},[95,145619,145620],{"class":210}," commit",[95,145622,100859],{"class":154},[95,145624,145625],{"class":210}," \"first commit\"\n",[1113,145627,145628],{},[52,145629,145630],{},"链接远程仓库",[86,145632,145634],{"className":117273,"code":145633,"language":117275,"meta":14,"style":14},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[92,145635,145636],{"__ignoreMap":14},[95,145637,145638,145640,145643,145645,145648],{"class":97,"line":98},[95,145639,145543],{"class":1945},[95,145641,145642],{"class":210}," remote",[95,145644,5192],{"class":210},[95,145646,145647],{"class":210}," origin",[95,145649,145650],{"class":210}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1113,145652,145653],{},[52,145654,145655],{},"把本地仓库的文件推送到远程仓库 push",[86,145657,145659],{"className":117273,"code":145658,"language":117275,"meta":14,"style":14},"git push -u origin master\n",[92,145660,145661],{"__ignoreMap":14},[95,145662,145663,145665,145667,145669,145671],{"class":97,"line":98},[95,145664,145543],{"class":1945},[95,145666,29001],{"class":210},[95,145668,28275],{"class":154},[95,145670,145647],{"class":210},[95,145672,145673],{"class":210}," master\n",[1444,145675],{"style":126385,"src":145676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[10,145678,145679],{},"上方方法暂未实现，后边学完git后在整",[10,145681,145682],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1444,145684],{"style":126385,"src":145685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[37,145687,145689],{"id":145688},"_222-新型相对单位","22.2 新型相对单位",[1444,145691],{"style":126385,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1444,145694],{"style":126385,"src":145695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[10,145697,145698],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[10,145700,145701],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1444,145703],{"style":126385,"src":145704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[10,145706,145707],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5109,145709,23942],{},{"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":23360},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145720,"title":145721,"body":145722,"description":145726,"extension":18,"meta":145727,"navigation":21,"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":23360,"extension":18,"meta":146882,"navigation":21,"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],[33,145738,145734],{"id":145739},"_1-python环境与第一个程序",[37,145741,145743],{"id":145742},"_11-什么是python","1.1 什么是Python",[10,145745,145746],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[10,145748,145749],{},"理解 Python 时抓住三个关键词：",[49,145751,145752,145755,145758],{},[52,145753,145754],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[52,145756,145757],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[52,145759,145760,145761,318,145764,318,145767,318,145770,318,145772,28370],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[92,145762,145763],{},"os",[92,145765,145766],{},"sys",[92,145768,145769],{},"json",[92,145771,57837],{},[92,145773,145774],{},"datetime",[10,145776,145777],{},"Python 程序的运行链路：",[86,145779,145782],{"className":145780,"code":145781,"language":5170,"meta":14},[5168],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[92,145783,145781],{"__ignoreMap":14},[37,145785,145787],{"id":145786},"_12-python解释器","1.2 Python解释器",[10,145789,145790],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[86,145792,145794],{"className":23806,"code":145793,"language":23808,"meta":14,"style":14},"python --version\npython3 --version\npython\npython3\n",[92,145795,145796,145802,145808,145813],{"__ignoreMap":14},[95,145797,145798,145800],{"class":97,"line":98},[95,145799,30365],{"class":1945},[95,145801,26278],{"class":154},[95,145803,145804,145806],{"class":97,"line":15},[95,145805,100856],{"class":1945},[95,145807,26278],{"class":154},[95,145809,145810],{"class":97,"line":1161},[95,145811,145812],{"class":1945},"python\n",[95,145814,145815],{"class":97,"line":1176},[95,145816,145817],{"class":1945},"python3\n",[10,145819,145820],{},"进入交互模式后，可以直接输入表达式：",[86,145822,145824],{"className":30363,"code":145823,"language":30365,"meta":14,"style":14},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[92,145825,145826,145837,145842,145856],{"__ignoreMap":14},[95,145827,145828,145831,145833,145835],{"class":97,"line":98},[95,145829,145830],{"class":101},">>>",[95,145832,25103],{"class":154},[95,145834,45551],{"class":101},[95,145836,47708],{"class":154},[95,145838,145839],{"class":97,"line":15},[95,145840,145841],{"class":154},"3\n",[95,145843,145844,145846,145849,145851,145854],{"class":97,"line":1161},[95,145845,145830],{"class":101},[95,145847,145848],{"class":154}," print",[95,145850,106],{"class":105},[95,145852,145853],{"class":210},"\"hello python\"",[95,145855,112],{"class":105},[95,145857,145858],{"class":97,"line":1176},[95,145859,145860],{"class":105},"hello python\n",[10,145862,145863],{},"退出交互模式：",[86,145865,145867],{"className":30363,"code":145866,"language":30365,"meta":14,"style":14},"exit()\n",[92,145868,145869],{"__ignoreMap":14},[95,145870,145871,145874],{"class":97,"line":98},[95,145872,145873],{"class":154},"exit",[95,145875,1958],{"class":105},[10,145877,145878],{},"或使用快捷键：",[86,145880,145883],{"className":145881,"code":145882,"language":5170,"meta":14},[5168],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[92,145884,145882],{"__ignoreMap":14},[37,145886,145888],{"id":145887},"_13-安装python","1.3 安装Python",[66,145890,145892],{"id":145891},"_131-windows安装","1.3.1 Windows安装",[49,145894,145895,145902,145905,145911,145917],{},[52,145896,145897,145898],{},"打开 Python 官网：",[344,145899,145900],{"href":145900,"rel":145901},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23849],[52,145903,145904],{},"下载 Windows Installer。",[52,145906,145907,145908,28370],{},"安装时勾选 ",[92,145909,145910],{},"Add Python to PATH",[52,145912,145913,145914,28370],{},"点击 ",[92,145915,145916],{},"Install Now",[52,145918,145919],{},"安装完成后打开命令提示符验证：",[86,145921,145923],{"className":23806,"code":145922,"language":23808,"meta":14,"style":14},"python --version\npip --version\n",[92,145924,145925,145931],{"__ignoreMap":14},[95,145926,145927,145929],{"class":97,"line":98},[95,145928,30365],{"class":1945},[95,145930,26278],{"class":154},[95,145932,145933,145935],{"class":97,"line":15},[95,145934,23815],{"class":1945},[95,145936,26278],{"class":154},[10,145938,145939,145940,145943],{},"如果提示 ",[92,145941,145942],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[66,145945,145947],{"id":145946},"_132-macos安装","1.3.2 macOS安装",[10,145949,145950],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[86,145952,145954],{"className":23806,"code":145953,"language":23808,"meta":14,"style":14},"brew install python\npython3 --version\npip3 --version\n",[92,145955,145956,145965,145971],{"__ignoreMap":14},[95,145957,145958,145961,145963],{"class":97,"line":98},[95,145959,145960],{"class":1945},"brew",[95,145962,23818],{"class":210},[95,145964,124295],{"class":210},[95,145966,145967,145969],{"class":97,"line":15},[95,145968,100856],{"class":1945},[95,145970,26278],{"class":154},[95,145972,145973,145975],{"class":97,"line":1161},[95,145974,119677],{"class":1945},[95,145976,26278],{"class":154},[10,145978,145979],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[66,145981,145983],{"id":145982},"_133-linux安装","1.3.3 Linux安装",[10,145985,145986],{},"Ubuntu\u002FDebian：",[86,145988,145990],{"className":23806,"code":145989,"language":23808,"meta":14,"style":14},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[92,145991,145992,146000,146015,146021],{"__ignoreMap":14},[95,145993,145994,145996,145998],{"class":97,"line":98},[95,145995,24561],{"class":1945},[95,145997,117294],{"class":210},[95,145999,26227],{"class":210},[95,146001,146002,146004,146006,146008,146010,146012],{"class":97,"line":15},[95,146003,24561],{"class":1945},[95,146005,117294],{"class":210},[95,146007,23818],{"class":210},[95,146009,104380],{"class":210},[95,146011,100775],{"class":210},[95,146013,146014],{"class":210}," python3-venv\n",[95,146016,146017,146019],{"class":97,"line":1161},[95,146018,100856],{"class":1945},[95,146020,26278],{"class":154},[95,146022,146023,146025],{"class":97,"line":1176},[95,146024,119677],{"class":1945},[95,146026,26278],{"class":154},[10,146028,146029],{},"Fedora：",[86,146031,146033],{"className":23806,"code":146032,"language":23808,"meta":14,"style":14},"sudo dnf install python3 python3-pip\n",[92,146034,146035],{"__ignoreMap":14},[95,146036,146037,146039,146041,146043,146045],{"class":97,"line":98},[95,146038,24561],{"class":1945},[95,146040,26300],{"class":210},[95,146042,23818],{"class":210},[95,146044,104380],{"class":210},[95,146046,119742],{"class":210},[10,146048,146049,146050,146052],{},"Linux 上通常使用 ",[92,146051,100856],{}," 命令，避免和系统旧版本 Python 冲突。",[37,146054,146056],{"id":146055},"_14-pip包管理器","1.4 pip包管理器",[10,146058,146059,146061],{},[92,146060,23815],{}," 用来安装第三方库。",[86,146063,146065],{"className":23806,"code":146064,"language":23808,"meta":14,"style":14},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[92,146066,146067,146076,146085,146093,146099],{"__ignoreMap":14},[95,146068,146069,146071,146073],{"class":97,"line":98},[95,146070,23815],{"class":1945},[95,146072,23818],{"class":210},[95,146074,146075],{"class":210}," requests\n",[95,146077,146078,146080,146083],{"class":97,"line":15},[95,146079,23815],{"class":1945},[95,146081,146082],{"class":210}," uninstall",[95,146084,146075],{"class":210},[95,146086,146087,146089,146091],{"class":97,"line":1161},[95,146088,23815],{"class":1945},[95,146090,117551],{"class":210},[95,146092,146075],{"class":210},[95,146094,146095,146097],{"class":97,"line":1176},[95,146096,23815],{"class":1945},[95,146098,118932],{"class":210},[95,146100,146101,146103],{"class":97,"line":1182},[95,146102,23815],{"class":1945},[95,146104,146105],{"class":210}," freeze\n",[10,146107,146108],{},"国内网络较慢时可以临时使用镜像：",[86,146110,146112],{"className":23806,"code":146111,"language":23808,"meta":14,"style":14},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[92,146113,146114],{"__ignoreMap":14},[95,146115,146116,146118,146120,146123,146125],{"class":97,"line":98},[95,146117,23815],{"class":1945},[95,146119,23818],{"class":210},[95,146121,146122],{"class":210}," requests",[95,146124,26415],{"class":154},[95,146126,119705],{"class":210},[10,146128,146129],{},"常见第三方库：",[243,146131,146132,146141],{},[246,146133,146134],{},[249,146135,146136,146139],{},[252,146137,146138],{},"库",[252,146140,102673],{},[290,146142,146143,146151,146158,146166,146174,146182,146190],{},[249,146144,146145,146148],{},[295,146146,146147],{},"requests",[295,146149,146150],{},"网络请求",[249,146152,146153,146155],{},[295,146154,100603],{},[295,146156,146157],{},"数值计算",[249,146159,146160,146163],{},[295,146161,146162],{},"pandas",[295,146164,146165],{},"表格数据处理",[249,146167,146168,146171],{},[295,146169,146170],{},"matplotlib",[295,146172,146173],{},"绘图",[249,146175,146176,146179],{},[295,146177,146178],{},"pyecharts",[295,146180,146181],{},"ECharts 图表",[249,146183,146184,146187],{},[295,146185,146186],{},"flask",[295,146188,146189],{},"Web 后端",[249,146191,146192,146195],{},[295,146193,146194],{},"pytest",[295,146196,146197],{},"自动化测试",[37,146199,146201],{"id":146200},"_15-虚拟环境","1.5 虚拟环境",[10,146203,146204,146205,146208],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[92,146206,146207],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[10,146210,146211],{},"创建虚拟环境：",[86,146213,146215],{"className":23806,"code":146214,"language":23808,"meta":14,"style":14},"python -m venv .venv\n",[92,146216,146217],{"__ignoreMap":14},[95,146218,146219,146221,146223,146225],{"class":97,"line":98},[95,146220,30365],{"class":1945},[95,146222,100859],{"class":154},[95,146224,100862],{"class":210},[95,146226,100865],{"class":210},[10,146228,146229],{},"Windows 激活：",[86,146231,146233],{"className":23806,"code":146232,"language":23808,"meta":14,"style":14},".venv\\Scripts\\activate\n",[92,146234,146235],{"__ignoreMap":14},[95,146236,146237],{"class":97,"line":98},[95,146238,146232],{"class":1945},[10,146240,146241],{},"macOS\u002FLinux 激活：",[86,146243,146245],{"className":23806,"code":146244,"language":23808,"meta":14,"style":14},"source .venv\u002Fbin\u002Factivate\n",[92,146246,146247],{"__ignoreMap":14},[95,146248,146249,146251],{"class":97,"line":98},[95,146250,100870],{"class":154},[95,146252,100873],{"class":210},[10,146254,146255],{},"退出虚拟环境：",[86,146257,146259],{"className":23806,"code":146258,"language":23808,"meta":14,"style":14},"deactivate\n",[92,146260,146261],{"__ignoreMap":14},[95,146262,146263],{"class":97,"line":98},[95,146264,146258],{"class":1945},[10,146266,146267],{},"保存依赖：",[86,146269,146271],{"className":23806,"code":146270,"language":23808,"meta":14,"style":14},"pip freeze > requirements.txt\n",[92,146272,146273],{"__ignoreMap":14},[95,146274,146275,146277,146280,146282],{"class":97,"line":98},[95,146276,23815],{"class":1945},[95,146278,146279],{"class":210}," freeze",[95,146281,26207],{"class":101},[95,146283,146284],{"class":210}," requirements.txt\n",[10,146286,146287],{},"安装依赖：",[86,146289,146291],{"className":23806,"code":146290,"language":23808,"meta":14,"style":14},"pip install -r requirements.txt\n",[92,146292,146293],{"__ignoreMap":14},[95,146294,146295,146297,146299,146301],{"class":97,"line":98},[95,146296,23815],{"class":1945},[95,146298,23818],{"class":210},[95,146300,119616],{"class":154},[95,146302,146284],{"class":210},[37,146304,146306],{"id":146305},"_16-开发工具","1.6 开发工具",[66,146308,146310],{"id":146309},"_161-pycharm","1.6.1 PyCharm",[10,146312,146313],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[10,146315,122039],{},[49,146317,146318,146321,146324,146330,146333],{},[52,146319,146320],{},"New Project：创建项目。",[52,146322,146323],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[52,146325,146326,146327,125960],{},"New Python File：创建 ",[92,146328,146329],{},".py",[52,146331,146332],{},"Run：运行当前文件。",[52,146334,146335],{},"Debug：断点调试。",[66,146337,146339],{"id":146338},"_162-vs-code","1.6.2 VS Code",[10,146341,146342],{},"VS Code 轻量，适合后续多语言开发。",[10,146344,146345],{},"建议安装插件：",[49,146347,146348,146351,146354],{},[52,146349,146350],{},"Python。",[52,146352,146353],{},"Pylance。",[52,146355,146356],{},"Jupyter。",[10,146358,146359],{},"选择解释器：",[86,146361,146364],{"className":146362,"code":146363,"language":5170,"meta":14},[5168],"Ctrl + Shift + P -> Python: Select Interpreter\n",[92,146365,146363],{"__ignoreMap":14},[37,146367,146369],{"id":146368},"_17-第一个python程序","1.7 第一个Python程序",[10,146371,146372,146373,24603],{},"创建文件 ",[92,146374,146375],{},"hello.py",[86,146377,146379],{"className":30363,"code":146378,"language":30365,"meta":14,"style":14},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[92,146380,146381,146392],{"__ignoreMap":14},[95,146382,146383,146385,146387,146390],{"class":97,"line":98},[95,146384,30400],{"class":154},[95,146386,106],{"class":105},[95,146388,146389],{"class":210},"\"Hello World\"",[95,146391,112],{"class":105},[95,146393,146394,146396,146398,146401],{"class":97,"line":15},[95,146395,30400],{"class":154},[95,146397,106],{"class":105},[95,146399,146400],{"class":210},"\"你好，Python\"",[95,146402,112],{"class":105},[10,146404,146405],{},"在终端运行：",[86,146407,146409],{"className":23806,"code":146408,"language":23808,"meta":14,"style":14},"python hello.py\n",[92,146410,146411],{"__ignoreMap":14},[95,146412,146413,146415],{"class":97,"line":98},[95,146414,30365],{"class":1945},[95,146416,146417],{"class":210}," hello.py\n",[10,146419,146420],{},"或：",[86,146422,146424],{"className":23806,"code":146423,"language":23808,"meta":14,"style":14},"python3 hello.py\n",[92,146425,146426],{"__ignoreMap":14},[95,146427,146428,146430],{"class":97,"line":98},[95,146429,100856],{"class":1945},[95,146431,146417],{"class":210},[10,146433,146434],{},"输出：",[86,146436,146439],{"className":146437,"code":146438,"language":5170,"meta":14},[5168],"Hello World\n你好，Python\n",[92,146440,146438],{"__ignoreMap":14},[37,146442,146444],{"id":146443},"_18-print函数","1.8 print函数",[10,146446,146447,146450],{},[92,146448,146449],{},"print()"," 用来输出内容。",[86,146452,146454],{"className":30363,"code":146453,"language":30365,"meta":14,"style":14},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[92,146455,146456,146466,146476,146486],{"__ignoreMap":14},[95,146457,146458,146460,146462,146464],{"class":97,"line":98},[95,146459,30400],{"class":154},[95,146461,106],{"class":105},[95,146463,5827],{"class":210},[95,146465,112],{"class":105},[95,146467,146468,146470,146472,146474],{"class":97,"line":15},[95,146469,30400],{"class":154},[95,146471,106],{"class":105},[95,146473,417],{"class":154},[95,146475,112],{"class":105},[95,146477,146478,146480,146482,146484],{"class":97,"line":1161},[95,146479,30400],{"class":154},[95,146481,106],{"class":105},[95,146483,155],{"class":154},[95,146485,112],{"class":105},[95,146487,146488,146490,146492,146495,146497,146499],{"class":97,"line":1176},[95,146489,30400],{"class":154},[95,146491,106],{"class":105},[95,146493,146494],{"class":210},"\"年龄:\"",[95,146496,12418],{"class":105},[95,146498,756],{"class":154},[95,146500,112],{"class":105},[10,146502,146503],{},"多个内容用逗号隔开，默认中间加空格：",[86,146505,146507],{"className":30363,"code":146506,"language":30365,"meta":14,"style":14},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[92,146508,146509,146519,146529],{"__ignoreMap":14},[95,146510,146511,146514,146516],{"class":97,"line":98},[95,146512,146513],{"class":105},"name ",[95,146515,151],{"class":101},[95,146517,146518],{"class":210}," \"张三\"\n",[95,146520,146521,146524,146526],{"class":97,"line":15},[95,146522,146523],{"class":105},"age ",[95,146525,151],{"class":101},[95,146527,146528],{"class":154}," 18\n",[95,146530,146531,146533,146535,146538,146541,146543],{"class":97,"line":1161},[95,146532,30400],{"class":154},[95,146534,106],{"class":105},[95,146536,146537],{"class":210},"\"姓名:\"",[95,146539,146540],{"class":105},", name, ",[95,146542,146494],{"class":210},[95,146544,146545],{"class":105},", age)\n",[10,146547,146548],{},"修改分隔符：",[86,146550,146552],{"className":30363,"code":146551,"language":30365,"meta":14,"style":14},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[92,146553,146554],{"__ignoreMap":14},[95,146555,146556,146558,146560,146563,146565,146567,146569,146571,146573,146576,146578,146580],{"class":97,"line":98},[95,146557,30400],{"class":154},[95,146559,106],{"class":105},[95,146561,146562],{"class":210},"\"2024\"",[95,146564,12418],{"class":105},[95,146566,54293],{"class":210},[95,146568,12418],{"class":105},[95,146570,54293],{"class":210},[95,146572,12418],{"class":105},[95,146574,146575],{"class":5199},"sep",[95,146577,151],{"class":101},[95,146579,32468],{"class":210},[95,146581,112],{"class":105},[10,146583,146584],{},"修改结尾符：",[86,146586,146588],{"className":30363,"code":146587,"language":30365,"meta":14,"style":14},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[92,146589,146590,146608],{"__ignoreMap":14},[95,146591,146592,146594,146596,146598,146600,146602,146604,146606],{"class":97,"line":98},[95,146593,30400],{"class":154},[95,146595,106],{"class":105},[95,146597,5827],{"class":210},[95,146599,12418],{"class":105},[95,146601,45786],{"class":5199},[95,146603,151],{"class":101},[95,146605,4341],{"class":210},[95,146607,112],{"class":105},[95,146609,146610,146612,146614,146617],{"class":97,"line":15},[95,146611,30400],{"class":154},[95,146613,106],{"class":105},[95,146615,146616],{"class":210},"\"python\"",[95,146618,112],{"class":105},[37,146620,146622],{"id":146621},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[10,146624,146625],{},"交互运行适合临时验证：",[86,146627,146629],{"className":30363,"code":146628,"language":30365,"meta":14,"style":14},">>> 10 * 3\n30\n",[92,146630,146631,146641],{"__ignoreMap":14},[95,146632,146633,146635,146637,146639],{"class":97,"line":98},[95,146634,145830],{"class":101},[95,146636,2020],{"class":154},[95,146638,6501],{"class":101},[95,146640,120013],{"class":154},[95,146642,146643],{"class":97,"line":15},[95,146644,146645],{"class":154},"30\n",[10,146647,146648],{},"脚本运行适合保存程序：",[86,146650,146652],{"className":30363,"code":146651,"language":30365,"meta":14,"style":14},"price = 8\ncount = 5\nprint(price * count)\n",[92,146653,146654,146664,146673],{"__ignoreMap":14},[95,146655,146656,146659,146661],{"class":97,"line":98},[95,146657,146658],{"class":105},"price ",[95,146660,151],{"class":101},[95,146662,146663],{"class":154}," 8\n",[95,146665,146666,146669,146671],{"class":97,"line":15},[95,146667,146668],{"class":105},"count ",[95,146670,151],{"class":101},[95,146672,54404],{"class":154},[95,146674,146675,146677,146680,146682],{"class":97,"line":1161},[95,146676,30400],{"class":154},[95,146678,146679],{"class":105},"(price ",[95,146681,561],{"class":101},[95,146683,146684],{"class":105}," count)\n",[10,146686,146687],{},"实际学习中推荐：",[49,146689,146690,146693,146698],{},[52,146691,146692],{},"临时试一个语法，用交互模式。",[52,146694,146695,146696,125960],{},"写完整练习，用 ",[92,146697,146329],{},[52,146699,146700],{},"写项目，用独立目录和虚拟环境。",[37,146702,146704],{"id":146703},"_110-常见错误","1.10 常见错误",[66,146706,146708],{"id":146707},"_1101-命令找不到","1.10.1 命令找不到",[86,146710,146713],{"className":146711,"code":146712,"language":5170,"meta":14},[5168],"python: command not found\n",[92,146714,146712],{"__ignoreMap":14},[10,146716,146717],{},"原因：",[49,146719,146720,146723,146726],{},[52,146721,146722],{},"没安装 Python。",[52,146724,146725],{},"PATH 没配置。",[52,146727,146728,146729,28370],{},"Linux\u002FmacOS 应该使用 ",[92,146730,100856],{},[66,146732,146734],{"id":146733},"_1102-文件名冲突","1.10.2 文件名冲突",[10,146736,146737],{},"不要把文件命名为：",[86,146739,146742],{"className":146740,"code":146741,"language":5170,"meta":14},[5168],"random.py\njson.py\ntime.py\nrequests.py\n",[92,146743,146741],{"__ignoreMap":14},[10,146745,146746],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[66,146748,146750],{"id":146749},"_1103-中文乱码","1.10.3 中文乱码",[10,146752,146753],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[10,146755,146756],{},"如果读写文件出现乱码，要明确指定编码：",[86,146758,146760],{"className":30363,"code":146759,"language":30365,"meta":14,"style":14},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[92,146761,146762,146796],{"__ignoreMap":14},[95,146763,146764,146766,146769,146771,146774,146776,146779,146781,146784,146786,146789,146791,146793],{"class":97,"line":98},[95,146765,107810],{"class":101},[95,146767,146768],{"class":154}," open",[95,146770,106],{"class":105},[95,146772,146773],{"class":210},"\"data.txt\"",[95,146775,12418],{"class":105},[95,146777,146778],{"class":210},"\"r\"",[95,146780,12418],{"class":105},[95,146782,146783],{"class":5199},"encoding",[95,146785,151],{"class":101},[95,146787,146788],{"class":210},"\"utf-8\"",[95,146790,13697],{"class":105},[95,146792,31368],{"class":101},[95,146794,146795],{"class":105}," f:\n",[95,146797,146798,146801,146803],{"class":97,"line":15},[95,146799,146800],{"class":105},"    content ",[95,146802,151],{"class":101},[95,146804,146805],{"class":105}," f.read()\n",[37,146807,146809],{"id":146808},"_111-本章练习","1.11 本章练习",[49,146811,146812,146815,146821],{},[52,146813,146814],{},"安装 Python，并在终端输出版本号。",[52,146816,146817,146818,146820],{},"新建 ",[92,146819,146375],{},"，输出自己的姓名、年龄、学习目标。",[52,146822,104343,146823,146825],{},[92,146824,146449],{}," 输出下面格式：",[86,146827,146830],{"className":146828,"code":146829,"language":5170,"meta":14},[5168],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[92,146831,146829],{"__ignoreMap":14},[49,146833,146834],{"start":1176},[52,146835,104343,146836,146838],{},[92,146837,146575],{}," 输出日期：",[86,146840,146843],{"className":146841,"code":146842,"language":5170,"meta":14},[5168],"2024-10-10\n",[92,146844,146842],{"__ignoreMap":14},[49,146846,146847],{"start":1182},[52,146848,104343,146849,146851,146852,146854],{},[92,146850,45786],{}," 让两次 ",[92,146853,146449],{}," 输出在同一行。",[5109,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":1161,"text":145892},{"id":145946,"depth":1161,"text":145947},{"id":145982,"depth":1161,"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":1161,"text":146310},{"id":146338,"depth":1161,"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":1161,"text":146708},{"id":146733,"depth":1161,"text":146734},{"id":146749,"depth":1161,"text":146750},{"id":146808,"depth":15,"text":146809},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145734,"description":23360},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146888,"title":146889,"body":146890,"description":23360,"extension":18,"meta":149294,"navigation":21,"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],[33,146893,146889],{"id":146894},"_10-json与pyecharts折线图",[37,146896,146898],{"id":146897},"_101-数据可视化","10.1 数据可视化",[10,146900,146901],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[10,146903,146904],{},"常见图表：",[49,146906,146907,146910,146913,146916,146919],{},[52,146908,146909],{},"折线图：看趋势。",[52,146911,146912],{},"柱状图：看分类对比。",[52,146914,146915],{},"饼图：看占比。",[52,146917,146918],{},"地图：看地域分布。",[52,146920,146921],{},"散点图：看两个变量之间的关系。",[10,146923,146924],{},"Python 可视化常用库：",[243,146926,146927,146935],{},[246,146928,146929],{},[249,146930,146931,146933],{},[252,146932,146138],{},[252,146934,23724],{},[290,146936,146937,146944,146952,146959],{},[249,146938,146939,146941],{},[295,146940,146170],{},[295,146942,146943],{},"基础、经典、可定制",[249,146945,146946,146949],{},[295,146947,146948],{},"seaborn",[295,146950,146951],{},"统计图表更美观",[249,146953,146954,146956],{},[295,146955,146178],{},[295,146957,146958],{},"生成交互式网页图表",[249,146960,146961,146964],{},[295,146962,146963],{},"plotly",[295,146965,146966],{},"交互图表能力强",[10,146968,146969],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[37,146971,146973],{"id":146972},"_102-json回顾","10.2 JSON回顾",[10,146975,146976],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[10,146978,146979],{},"Python 字典：",[86,146981,146983],{"className":30363,"code":146982,"language":30365,"meta":14,"style":14},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[92,146984,146985,146993,147004,147013],{"__ignoreMap":14},[95,146986,146987,146989,146991],{"class":97,"line":98},[95,146988,101635],{"class":105},[95,146990,151],{"class":101},[95,146992,15555],{"class":105},[95,146994,146995,146998,147000,147002],{"class":97,"line":15},[95,146996,146997],{"class":210},"    \"name\"",[95,146999,51414],{"class":105},[95,147001,69246],{"class":210},[95,147003,31451],{"class":105},[95,147005,147006,147009,147011],{"class":97,"line":1161},[95,147007,147008],{"class":210},"    \"value\"",[95,147010,51414],{"class":105},[95,147012,97435],{"class":154},[95,147014,147015],{"class":97,"line":1176},[95,147016,1547],{"class":105},[10,147018,147019],{},"JSON 字符串：",[86,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",[92,147025,147026,147030,147041,147050],{"__ignoreMap":14},[95,147027,147028],{"class":97,"line":98},[95,147029,1528],{"class":105},[95,147031,147032,147035,147037,147039],{"class":97,"line":15},[95,147033,147034],{"class":154},"  \"name\"",[95,147036,51414],{"class":105},[95,147038,69246],{"class":210},[95,147040,31451],{"class":105},[95,147042,147043,147046,147048],{"class":97,"line":1161},[95,147044,147045],{"class":154},"  \"value\"",[95,147047,51414],{"class":105},[95,147049,97435],{"class":154},[95,147051,147052],{"class":97,"line":1176},[95,147053,1547],{"class":105},[10,147055,147056],{},"Python 与 JSON 的转换：",[86,147058,147060],{"className":30363,"code":147059,"language":30365,"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",[92,147061,147062,147069,147073,147098,147102,147121,147128,147132,147142],{"__ignoreMap":14},[95,147063,147064,147066],{"class":97,"line":98},[95,147065,30377],{"class":101},[95,147067,147068],{"class":105}," json\n",[95,147070,147071],{"class":97,"line":15},[95,147072,2382],{"emptyLinePlaceholder":21},[95,147074,147075,147077,147079,147081,147083,147085,147087,147089,147092,147094,147096],{"class":97,"line":1161},[95,147076,101635],{"class":105},[95,147078,151],{"class":101},[95,147080,4430],{"class":105},[95,147082,62656],{"class":210},[95,147084,51414],{"class":105},[95,147086,69246],{"class":210},[95,147088,12418],{"class":105},[95,147090,147091],{"class":210},"\"value\"",[95,147093,51414],{"class":105},[95,147095,417],{"class":154},[95,147097,1547],{"class":105},[95,147099,147100],{"class":97,"line":1176},[95,147101,2382],{"emptyLinePlaceholder":21},[95,147103,147104,147107,147109,147112,147115,147117,147119],{"class":97,"line":1182},[95,147105,147106],{"class":105},"json_text ",[95,147108,151],{"class":101},[95,147110,147111],{"class":105}," json.dumps(data, ",[95,147113,147114],{"class":5199},"ensure_ascii",[95,147116,151],{"class":101},[95,147118,33972],{"class":154},[95,147120,112],{"class":105},[95,147122,147123,147125],{"class":97,"line":1196},[95,147124,30400],{"class":154},[95,147126,147127],{"class":105},"(json_text)\n",[95,147129,147130],{"class":97,"line":1202},[95,147131,2382],{"emptyLinePlaceholder":21},[95,147133,147134,147137,147139],{"class":97,"line":1293},[95,147135,147136],{"class":105},"new_data ",[95,147138,151],{"class":101},[95,147140,147141],{"class":105}," json.loads(json_text)\n",[95,147143,147144,147146],{"class":97,"line":1299},[95,147145,30400],{"class":154},[95,147147,147148],{"class":105},"(new_data)\n",[37,147150,147152],{"id":147151},"_103-安装pyecharts","10.3 安装pyecharts",[86,147154,147156],{"className":23806,"code":147155,"language":23808,"meta":14,"style":14},"pip install pyecharts\n",[92,147157,147158],{"__ignoreMap":14},[95,147159,147160,147162,147164],{"class":97,"line":98},[95,147161,23815],{"class":1945},[95,147163,23818],{"class":210},[95,147165,147166],{"class":210}," pyecharts\n",[10,147168,147169],{},"验证：",[86,147171,147173],{"className":30363,"code":147172,"language":30365,"meta":14,"style":14},"import pyecharts\n\nprint(pyecharts.__version__)\n",[92,147174,147175,147181,147185],{"__ignoreMap":14},[95,147176,147177,147179],{"class":97,"line":98},[95,147178,30377],{"class":101},[95,147180,147166],{"class":105},[95,147182,147183],{"class":97,"line":15},[95,147184,2382],{"emptyLinePlaceholder":21},[95,147186,147187,147189,147192,147195],{"class":97,"line":1161},[95,147188,30400],{"class":154},[95,147190,147191],{"class":105},"(pyecharts.",[95,147193,147194],{"class":154},"__version__",[95,147196,112],{"class":105},[10,147198,147199],{},"如果使用虚拟环境，要先激活环境再安装。",[37,147201,147203],{"id":147202},"_104-第一个折线图","10.4 第一个折线图",[86,147205,147207],{"className":30363,"code":147206,"language":30365,"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",[92,147208,147209,147221,147225,147235,147265,147297],{"__ignoreMap":14},[95,147210,147211,147213,147216,147218],{"class":97,"line":98},[95,147212,30722],{"class":101},[95,147214,147215],{"class":105}," pyecharts.charts ",[95,147217,30377],{"class":101},[95,147219,147220],{"class":105}," Line\n",[95,147222,147223],{"class":97,"line":15},[95,147224,2382],{"emptyLinePlaceholder":21},[95,147226,147227,147230,147232],{"class":97,"line":1161},[95,147228,147229],{"class":105},"line ",[95,147231,151],{"class":101},[95,147233,147234],{"class":105}," Line()\n",[95,147236,147237,147240,147243,147245,147248,147250,147253,147255,147258,147260,147263],{"class":97,"line":1176},[95,147238,147239],{"class":105},"line.add_xaxis([",[95,147241,147242],{"class":210},"\"周一\"",[95,147244,12418],{"class":105},[95,147246,147247],{"class":210},"\"周二\"",[95,147249,12418],{"class":105},[95,147251,147252],{"class":210},"\"周三\"",[95,147254,12418],{"class":105},[95,147256,147257],{"class":210},"\"周四\"",[95,147259,12418],{"class":105},[95,147261,147262],{"class":210},"\"周五\"",[95,147264,4639],{"class":105},[95,147266,147267,147270,147273,147275,147277,147279,147281,147283,147285,147287,147290,147292,147295],{"class":97,"line":1182},[95,147268,147269],{"class":105},"line.add_yaxis(",[95,147271,147272],{"class":210},"\"销售额\"",[95,147274,77495],{"class":105},[95,147276,417],{"class":154},[95,147278,12418],{"class":105},[95,147280,923],{"class":154},[95,147282,12418],{"class":105},[95,147284,968],{"class":154},[95,147286,12418],{"class":105},[95,147288,147289],{"class":154},"150",[95,147291,12418],{"class":105},[95,147293,147294],{"class":154},"180",[95,147296,4639],{"class":105},[95,147298,147299,147302,147305],{"class":97,"line":1196},[95,147300,147301],{"class":105},"line.render(",[95,147303,147304],{"class":210},"\"line.html\"",[95,147306,112],{"class":105},[10,147308,147309,147310,147313],{},"运行后会生成 ",[92,147311,147312],{},"line.html","，用浏览器打开即可看到图表。",[10,147315,147316],{},"核心步骤：",[49,147318,147319,147322,147325,147328,147331],{},[52,147320,147321],{},"导入图表类。",[52,147323,147324],{},"创建图表对象。",[52,147326,147327],{},"添加 x 轴数据。",[52,147329,147330],{},"添加 y 轴数据。",[52,147332,147333],{},"渲染为 HTML。",[37,147335,147337],{"id":147336},"_105-全局配置","10.5 全局配置",[10,147339,147340,147341,147344],{},"常用配置在 ",[92,147342,147343],{},"pyecharts.options"," 中。",[86,147346,147348],{"className":30363,"code":147347,"language":30365,"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",[92,147349,147350,147367,147377,147381,147389,147413,147441,147446,147465,147484,147502,147522,147526],{"__ignoreMap":14},[95,147351,147352,147354,147357,147359,147362,147364],{"class":97,"line":98},[95,147353,30722],{"class":101},[95,147355,147356],{"class":105}," pyecharts ",[95,147358,30377],{"class":101},[95,147360,147361],{"class":105}," options ",[95,147363,31368],{"class":101},[95,147365,147366],{"class":105}," opts\n",[95,147368,147369,147371,147373,147375],{"class":97,"line":15},[95,147370,30722],{"class":101},[95,147372,147215],{"class":105},[95,147374,30377],{"class":101},[95,147376,147220],{"class":105},[95,147378,147379],{"class":97,"line":1161},[95,147380,2382],{"emptyLinePlaceholder":21},[95,147382,147383,147385,147387],{"class":97,"line":1176},[95,147384,147229],{"class":105},[95,147386,151],{"class":101},[95,147388,147234],{"class":105},[95,147390,147391,147393,147395,147397,147399,147401,147403,147405,147407,147409,147411],{"class":97,"line":1182},[95,147392,147239],{"class":105},[95,147394,147242],{"class":210},[95,147396,12418],{"class":105},[95,147398,147247],{"class":210},[95,147400,12418],{"class":105},[95,147402,147252],{"class":210},[95,147404,12418],{"class":105},[95,147406,147257],{"class":210},[95,147408,12418],{"class":105},[95,147410,147262],{"class":210},[95,147412,4639],{"class":105},[95,147414,147415,147417,147419,147421,147423,147425,147427,147429,147431,147433,147435,147437,147439],{"class":97,"line":1196},[95,147416,147269],{"class":105},[95,147418,147272],{"class":210},[95,147420,77495],{"class":105},[95,147422,417],{"class":154},[95,147424,12418],{"class":105},[95,147426,923],{"class":154},[95,147428,12418],{"class":105},[95,147430,968],{"class":154},[95,147432,12418],{"class":105},[95,147434,147289],{"class":154},[95,147436,12418],{"class":105},[95,147438,147294],{"class":154},[95,147440,4639],{"class":105},[95,147442,147443],{"class":97,"line":1202},[95,147444,147445],{"class":105},"line.set_global_opts(\n",[95,147447,147448,147451,147453,147456,147458,147460,147463],{"class":97,"line":1293},[95,147449,147450],{"class":5199},"    title_opts",[95,147452,151],{"class":101},[95,147454,147455],{"class":105},"opts.TitleOpts(",[95,147457,51384],{"class":5199},[95,147459,151],{"class":101},[95,147461,147462],{"class":210},"\"一周销售额\"",[95,147464,38032],{"class":105},[95,147466,147467,147470,147472,147475,147477,147479,147482],{"class":97,"line":1299},[95,147468,147469],{"class":5199},"    xaxis_opts",[95,147471,151],{"class":101},[95,147473,147474],{"class":105},"opts.AxisOpts(",[95,147476,79787],{"class":5199},[95,147478,151],{"class":101},[95,147480,147481],{"class":210},"\"日期\"",[95,147483,38032],{"class":105},[95,147485,147486,147489,147491,147493,147495,147497,147500],{"class":97,"line":1311},[95,147487,147488],{"class":5199},"    yaxis_opts",[95,147490,151],{"class":101},[95,147492,147474],{"class":105},[95,147494,79787],{"class":5199},[95,147496,151],{"class":101},[95,147498,147499],{"class":210},"\"金额\"",[95,147501,38032],{"class":105},[95,147503,147504,147507,147509,147512,147515,147517,147520],{"class":97,"line":1594},[95,147505,147506],{"class":5199},"    tooltip_opts",[95,147508,151],{"class":101},[95,147510,147511],{"class":105},"opts.TooltipOpts(",[95,147513,147514],{"class":5199},"trigger",[95,147516,151],{"class":101},[95,147518,147519],{"class":210},"\"axis\"",[95,147521,38032],{"class":105},[95,147523,147524],{"class":97,"line":1599},[95,147525,112],{"class":105},[95,147527,147528,147530,147532],{"class":97,"line":1605},[95,147529,147301],{"class":105},[95,147531,147304],{"class":210},[95,147533,112],{"class":105},[10,147535,147536],{},"常见全局配置：",[243,147538,147539,147548],{},[246,147540,147541],{},[249,147542,147543,147546],{},[252,147544,147545],{},"配置",[252,147547,102673],{},[290,147549,147550,147560,147570,147580,147590,147600],{},[249,147551,147552,147557],{},[295,147553,147554],{},[92,147555,147556],{},"TitleOpts",[295,147558,147559],{},"标题",[249,147561,147562,147567],{},[295,147563,147564],{},[92,147565,147566],{},"LegendOpts",[295,147568,147569],{},"图例",[249,147571,147572,147577],{},[295,147573,147574],{},[92,147575,147576],{},"TooltipOpts",[295,147578,147579],{},"提示框",[249,147581,147582,147587],{},[295,147583,147584],{},[92,147585,147586],{},"AxisOpts",[295,147588,147589],{},"坐标轴",[249,147591,147592,147597],{},[295,147593,147594],{},[92,147595,147596],{},"VisualMapOpts",[295,147598,147599],{},"视觉映射",[249,147601,147602,147607],{},[295,147603,147604],{},[92,147605,147606],{},"DataZoomOpts",[295,147608,147609],{},"区域缩放",[37,147611,147613],{"id":147612},"_106-系列配置","10.6 系列配置",[10,147615,147616],{},"系列配置作用于某一组数据。",[86,147618,147620],{"className":30363,"code":147619,"language":30365,"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",[92,147621,147622,147627,147638,147667,147678,147697],{"__ignoreMap":14},[95,147623,147624],{"class":97,"line":98},[95,147625,147626],{"class":105},"line.add_yaxis(\n",[95,147628,147629,147632,147634,147636],{"class":97,"line":15},[95,147630,147631],{"class":5199},"    series_name",[95,147633,151],{"class":101},[95,147635,147272],{"class":210},[95,147637,31451],{"class":105},[95,147639,147640,147643,147645,147647,147649,147651,147653,147655,147657,147659,147661,147663,147665],{"class":97,"line":1161},[95,147641,147642],{"class":5199},"    y_axis",[95,147644,151],{"class":101},[95,147646,996],{"class":105},[95,147648,417],{"class":154},[95,147650,12418],{"class":105},[95,147652,923],{"class":154},[95,147654,12418],{"class":105},[95,147656,968],{"class":154},[95,147658,12418],{"class":105},[95,147660,147289],{"class":154},[95,147662,12418],{"class":105},[95,147664,147294],{"class":154},[95,147666,87813],{"class":105},[95,147668,147669,147672,147674,147676],{"class":97,"line":1176},[95,147670,147671],{"class":5199},"    is_smooth",[95,147673,151],{"class":101},[95,147675,31461],{"class":154},[95,147677,31451],{"class":105},[95,147679,147680,147683,147685,147688,147691,147693,147695],{"class":97,"line":1182},[95,147681,147682],{"class":5199},"    label_opts",[95,147684,151],{"class":101},[95,147686,147687],{"class":105},"opts.LabelOpts(",[95,147689,147690],{"class":5199},"is_show",[95,147692,151],{"class":101},[95,147694,31461],{"class":154},[95,147696,38032],{"class":105},[95,147698,147699],{"class":97,"line":1196},[95,147700,112],{"class":105},[10,147702,147703],{},"常用参数：",[49,147705,147706,147712,147718,147724,147730],{},[52,147707,147708,147711],{},[92,147709,147710],{},"series_name","：系列名称。",[52,147713,147714,147717],{},[92,147715,147716],{},"y_axis","：y 轴数据。",[52,147719,147720,147723],{},[92,147721,147722],{},"is_smooth","：是否平滑曲线。",[52,147725,147726,147729],{},[92,147727,147728],{},"label_opts","：标签配置。",[52,147731,147732,147735],{},[92,147733,147734],{},"symbol_size","：标记点大小。",[37,147737,147739],{"id":147738},"_107-多条折线","10.7 多条折线",[86,147741,147743],{"className":30363,"code":147742,"language":30365,"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",[92,147744,147745,147759,147769,147773,147802,147806,147814,147819,147857,147894,147898,147915,147931,147935],{"__ignoreMap":14},[95,147746,147747,147749,147751,147753,147755,147757],{"class":97,"line":98},[95,147748,30722],{"class":101},[95,147750,147356],{"class":105},[95,147752,30377],{"class":101},[95,147754,147361],{"class":105},[95,147756,31368],{"class":101},[95,147758,147366],{"class":105},[95,147760,147761,147763,147765,147767],{"class":97,"line":15},[95,147762,30722],{"class":101},[95,147764,147215],{"class":105},[95,147766,30377],{"class":101},[95,147768,147220],{"class":105},[95,147770,147771],{"class":97,"line":1161},[95,147772,2382],{"emptyLinePlaceholder":21},[95,147774,147775,147778,147780,147782,147784,147786,147788,147790,147792,147794,147796,147798,147800],{"class":97,"line":1176},[95,147776,147777],{"class":105},"dates ",[95,147779,151],{"class":101},[95,147781,52203],{"class":105},[95,147783,147242],{"class":210},[95,147785,12418],{"class":105},[95,147787,147247],{"class":210},[95,147789,12418],{"class":105},[95,147791,147252],{"class":210},[95,147793,12418],{"class":105},[95,147795,147257],{"class":210},[95,147797,12418],{"class":105},[95,147799,147262],{"class":210},[95,147801,33231],{"class":105},[95,147803,147804],{"class":97,"line":1182},[95,147805,2382],{"emptyLinePlaceholder":21},[95,147807,147808,147810,147812],{"class":97,"line":1196},[95,147809,147229],{"class":105},[95,147811,151],{"class":101},[95,147813,147234],{"class":105},[95,147815,147816],{"class":97,"line":1202},[95,147817,147818],{"class":105},"line.add_xaxis(dates)\n",[95,147820,147821,147823,147826,147828,147830,147832,147835,147837,147839,147841,147843,147845,147847,147849,147851,147853,147855],{"class":97,"line":1293},[95,147822,147269],{"class":105},[95,147824,147825],{"class":210},"\"线上销售\"",[95,147827,77495],{"class":105},[95,147829,417],{"class":154},[95,147831,12418],{"class":105},[95,147833,147834],{"class":154},"130",[95,147836,12418],{"class":105},[95,147838,923],{"class":154},[95,147840,12418],{"class":105},[95,147842,21031],{"class":154},[95,147844,12418],{"class":105},[95,147846,1704],{"class":154},[95,147848,112179],{"class":105},[95,147850,147722],{"class":5199},[95,147852,151],{"class":101},[95,147854,31461],{"class":154},[95,147856,112],{"class":105},[95,147858,147859,147861,147864,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892],{"class":97,"line":1299},[95,147860,147269],{"class":105},[95,147862,147863],{"class":210},"\"线下销售\"",[95,147865,77495],{"class":105},[95,147867,718],{"class":154},[95,147869,12418],{"class":105},[95,147871,968],{"class":154},[95,147873,12418],{"class":105},[95,147875,417],{"class":154},[95,147877,12418],{"class":105},[95,147879,923],{"class":154},[95,147881,12418],{"class":105},[95,147883,147289],{"class":154},[95,147885,112179],{"class":105},[95,147887,147722],{"class":5199},[95,147889,151],{"class":101},[95,147891,31461],{"class":154},[95,147893,112],{"class":105},[95,147895,147896],{"class":97,"line":1311},[95,147897,147445],{"class":105},[95,147899,147900,147902,147904,147906,147908,147910,147913],{"class":97,"line":1594},[95,147901,147450],{"class":5199},[95,147903,151],{"class":101},[95,147905,147455],{"class":105},[95,147907,51384],{"class":5199},[95,147909,151],{"class":101},[95,147911,147912],{"class":210},"\"线上线下销售趋势\"",[95,147914,38032],{"class":105},[95,147916,147917,147919,147921,147923,147925,147927,147929],{"class":97,"line":1599},[95,147918,147506],{"class":5199},[95,147920,151],{"class":101},[95,147922,147511],{"class":105},[95,147924,147514],{"class":5199},[95,147926,151],{"class":101},[95,147928,147519],{"class":210},[95,147930,38032],{"class":105},[95,147932,147933],{"class":97,"line":1605},[95,147934,112],{"class":105},[95,147936,147937,147939,147942],{"class":97,"line":1610},[95,147938,147301],{"class":105},[95,147940,147941],{"class":210},"\"sales.html\"",[95,147943,112],{"class":105},[10,147945,147946],{},"多条折线适合比较不同指标或不同地区。",[37,147948,147950],{"id":147949},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[10,147952,147953,147954,24603],{},"假设 ",[92,147955,147956],{},"sales.json",[86,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",[92,147961,147962,147967,147999,148027,148055],{"__ignoreMap":14},[95,147963,147964],{"class":97,"line":98},[95,147965,147966],{"class":105},"[\n",[95,147968,147969,147972,147975,147977,147979,147981,147984,147986,147988,147990,147993,147995,147997],{"class":97,"line":15},[95,147970,147971],{"class":105},"  {",[95,147973,147974],{"class":154},"\"date\"",[95,147976,51414],{"class":105},[95,147978,147242],{"class":210},[95,147980,12418],{"class":105},[95,147982,147983],{"class":154},"\"online\"",[95,147985,51414],{"class":105},[95,147987,417],{"class":154},[95,147989,12418],{"class":105},[95,147991,147992],{"class":154},"\"offline\"",[95,147994,51414],{"class":105},[95,147996,718],{"class":154},[95,147998,4912],{"class":105},[95,148000,148001,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023,148025],{"class":97,"line":1161},[95,148002,147971],{"class":105},[95,148004,147974],{"class":154},[95,148006,51414],{"class":105},[95,148008,147247],{"class":210},[95,148010,12418],{"class":105},[95,148012,147983],{"class":154},[95,148014,51414],{"class":105},[95,148016,147834],{"class":154},[95,148018,12418],{"class":105},[95,148020,147992],{"class":154},[95,148022,51414],{"class":105},[95,148024,968],{"class":154},[95,148026,4912],{"class":105},[95,148028,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053],{"class":97,"line":1176},[95,148030,147971],{"class":105},[95,148032,147974],{"class":154},[95,148034,51414],{"class":105},[95,148036,147252],{"class":210},[95,148038,12418],{"class":105},[95,148040,147983],{"class":154},[95,148042,51414],{"class":105},[95,148044,923],{"class":154},[95,148046,12418],{"class":105},[95,148048,147992],{"class":154},[95,148050,51414],{"class":105},[95,148052,417],{"class":154},[95,148054,1547],{"class":105},[95,148056,148057],{"class":97,"line":1182},[95,148058,33231],{"class":105},[10,148060,148061],{},"读取并绘图：",[86,148063,148065],{"className":30363,"code":148064,"language":30365,"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",[92,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},[95,148068,148069,148071],{"class":97,"line":98},[95,148070,30377],{"class":101},[95,148072,147068],{"class":105},[95,148074,148075,148077,148079,148081,148083,148085],{"class":97,"line":15},[95,148076,30722],{"class":101},[95,148078,147356],{"class":105},[95,148080,30377],{"class":101},[95,148082,147361],{"class":105},[95,148084,31368],{"class":101},[95,148086,147366],{"class":105},[95,148088,148089,148091,148093,148095],{"class":97,"line":1161},[95,148090,30722],{"class":101},[95,148092,147215],{"class":105},[95,148094,30377],{"class":101},[95,148096,147220],{"class":105},[95,148098,148099],{"class":97,"line":1176},[95,148100,2382],{"emptyLinePlaceholder":21},[95,148102,148103,148105,148107,148109,148112,148114,148116,148118,148120,148122,148124,148126,148128,148131],{"class":97,"line":1182},[95,148104,107810],{"class":101},[95,148106,146768],{"class":154},[95,148108,106],{"class":105},[95,148110,148111],{"class":210},"\"sales.json\"",[95,148113,12418],{"class":105},[95,148115,146778],{"class":210},[95,148117,12418],{"class":105},[95,148119,146783],{"class":5199},[95,148121,151],{"class":101},[95,148123,146788],{"class":210},[95,148125,13697],{"class":105},[95,148127,31368],{"class":101},[95,148129,148130],{"class":5199}," file",[95,148132,3721],{"class":105},[95,148134,148135,148137,148139,148142,148144],{"class":97,"line":1196},[95,148136,101398],{"class":105},[95,148138,151],{"class":101},[95,148140,148141],{"class":105}," json.load(",[95,148143,45339],{"class":5199},[95,148145,112],{"class":105},[95,148147,148148],{"class":97,"line":1202},[95,148149,2382],{"emptyLinePlaceholder":21},[95,148151,148152,148154,148156],{"class":97,"line":1293},[95,148153,147777],{"class":105},[95,148155,151],{"class":101},[95,148157,51815],{"class":105},[95,148159,148160,148163,148165],{"class":97,"line":1299},[95,148161,148162],{"class":105},"online_sales ",[95,148164,151],{"class":101},[95,148166,51815],{"class":105},[95,148168,148169,148172,148174],{"class":97,"line":1311},[95,148170,148171],{"class":105},"offline_sales ",[95,148173,151],{"class":101},[95,148175,51815],{"class":105},[95,148177,148178],{"class":97,"line":1594},[95,148179,2382],{"emptyLinePlaceholder":21},[95,148181,148182,148184,148187,148189],{"class":97,"line":1599},[95,148183,3007],{"class":101},[95,148185,148186],{"class":105}," item ",[95,148188,26028],{"class":101},[95,148190,148191],{"class":105}," data:\n",[95,148193,148194,148197,148199],{"class":97,"line":1605},[95,148195,148196],{"class":105},"    dates.append(item[",[95,148198,147974],{"class":210},[95,148200,4639],{"class":105},[95,148202,148203,148206,148208],{"class":97,"line":1610},[95,148204,148205],{"class":105},"    online_sales.append(item[",[95,148207,147983],{"class":210},[95,148209,4639],{"class":105},[95,148211,148212,148215,148217],{"class":97,"line":1624},[95,148213,148214],{"class":105},"    offline_sales.append(item[",[95,148216,147992],{"class":210},[95,148218,4639],{"class":105},[95,148220,148221],{"class":97,"line":1629},[95,148222,2382],{"emptyLinePlaceholder":21},[95,148224,148225,148227,148229],{"class":97,"line":1635},[95,148226,147229],{"class":105},[95,148228,151],{"class":101},[95,148230,147234],{"class":105},[95,148232,148233],{"class":97,"line":1656},[95,148234,147818],{"class":105},[95,148236,148237,148239,148241,148244,148246,148248,148250],{"class":97,"line":1661},[95,148238,147269],{"class":105},[95,148240,147825],{"class":210},[95,148242,148243],{"class":105},", online_sales, ",[95,148245,147722],{"class":5199},[95,148247,151],{"class":101},[95,148249,31461],{"class":154},[95,148251,112],{"class":105},[95,148253,148254,148256,148258,148261,148263,148265,148267],{"class":97,"line":1675},[95,148255,147269],{"class":105},[95,148257,147863],{"class":210},[95,148259,148260],{"class":105},", offline_sales, ",[95,148262,147722],{"class":5199},[95,148264,151],{"class":101},[95,148266,31461],{"class":154},[95,148268,112],{"class":105},[95,148270,148271],{"class":97,"line":1680},[95,148272,147445],{"class":105},[95,148274,148275,148277,148279,148281,148283,148285,148288],{"class":97,"line":1709},[95,148276,147450],{"class":5199},[95,148278,151],{"class":101},[95,148280,147455],{"class":105},[95,148282,51384],{"class":5199},[95,148284,151],{"class":101},[95,148286,148287],{"class":210},"\"销售趋势\"",[95,148289,38032],{"class":105},[95,148291,148292,148294,148296,148298,148300,148302,148304],{"class":97,"line":1714},[95,148293,147506],{"class":5199},[95,148295,151],{"class":101},[95,148297,147511],{"class":105},[95,148299,147514],{"class":5199},[95,148301,151],{"class":101},[95,148303,147519],{"class":210},[95,148305,38032],{"class":105},[95,148307,148308],{"class":97,"line":1731},[95,148309,112],{"class":105},[95,148311,148312,148314,148316],{"class":97,"line":1736},[95,148313,147301],{"class":105},[95,148315,147941],{"class":210},[95,148317,112],{"class":105},[37,148319,148321],{"id":148320},"_109-数据清洗","10.9 数据清洗",[10,148323,148324],{},"真实数据经常不整齐，需要清洗。",[10,148326,148327],{},"常见问题：",[49,148329,148330,148333,148336,148339],{},[52,148331,148332],{},"数字是字符串。",[52,148334,148335],{},"字段缺失。",[52,148337,148338],{},"空值。",[52,148340,148341],{},"日期格式不统一。",[10,148343,15118],{},[86,148345,148347],{"className":30363,"code":148346,"language":30365,"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",[92,148348,148349,148358,148381,148401,148422,148426,148430,148438,148447,148451,148462,148476,148485,148490,148494,148502,148512,148516,148523],{"__ignoreMap":14},[95,148350,148351,148354,148356],{"class":97,"line":98},[95,148352,148353],{"class":105},"raw_data ",[95,148355,151],{"class":101},[95,148357,55424],{"class":105},[95,148359,148360,148363,148365,148367,148369,148371,148374,148376,148379],{"class":97,"line":15},[95,148361,148362],{"class":105},"    {",[95,148364,147974],{"class":210},[95,148366,51414],{"class":105},[95,148368,147242],{"class":210},[95,148370,12418],{"class":105},[95,148372,148373],{"class":210},"\"sales\"",[95,148375,51414],{"class":105},[95,148377,148378],{"class":210},"\"100\"",[95,148380,4912],{"class":105},[95,148382,148383,148385,148387,148389,148391,148393,148395,148397,148399],{"class":97,"line":1161},[95,148384,148362],{"class":105},[95,148386,147974],{"class":210},[95,148388,51414],{"class":105},[95,148390,147247],{"class":210},[95,148392,12418],{"class":105},[95,148394,148373],{"class":210},[95,148396,51414],{"class":105},[95,148398,7635],{"class":210},[95,148400,4912],{"class":105},[95,148402,148403,148405,148407,148409,148411,148413,148415,148417,148420],{"class":97,"line":1176},[95,148404,148362],{"class":105},[95,148406,147974],{"class":210},[95,148408,51414],{"class":105},[95,148410,147252],{"class":210},[95,148412,12418],{"class":105},[95,148414,148373],{"class":210},[95,148416,51414],{"class":105},[95,148418,148419],{"class":210},"\"120\"",[95,148421,4912],{"class":105},[95,148423,148424],{"class":97,"line":1182},[95,148425,33231],{"class":105},[95,148427,148428],{"class":97,"line":1196},[95,148429,2382],{"emptyLinePlaceholder":21},[95,148431,148432,148434,148436],{"class":97,"line":1202},[95,148433,147777],{"class":105},[95,148435,151],{"class":101},[95,148437,51815],{"class":105},[95,148439,148440,148443,148445],{"class":97,"line":1293},[95,148441,148442],{"class":105},"sales ",[95,148444,151],{"class":101},[95,148446,51815],{"class":105},[95,148448,148449],{"class":97,"line":1299},[95,148450,2382],{"emptyLinePlaceholder":21},[95,148452,148453,148455,148457,148459],{"class":97,"line":1311},[95,148454,3007],{"class":101},[95,148456,148186],{"class":105},[95,148458,26028],{"class":101},[95,148460,148461],{"class":105}," raw_data:\n",[95,148463,148464,148467,148469,148472,148474],{"class":97,"line":1594},[95,148465,148466],{"class":105},"    value ",[95,148468,151],{"class":101},[95,148470,148471],{"class":105}," item.get(",[95,148473,148373],{"class":210},[95,148475,112],{"class":105},[95,148477,148478,148480,148482],{"class":97,"line":1599},[95,148479,3083],{"class":101},[95,148481,38915],{"class":101},[95,148483,148484],{"class":105}," value:\n",[95,148486,148487],{"class":97,"line":1605},[95,148488,148489],{"class":101},"        continue\n",[95,148491,148492],{"class":97,"line":1610},[95,148493,2382],{"emptyLinePlaceholder":21},[95,148495,148496,148498,148500],{"class":97,"line":1624},[95,148497,148196],{"class":105},[95,148499,147974],{"class":210},[95,148501,4639],{"class":105},[95,148503,148504,148507,148509],{"class":97,"line":1629},[95,148505,148506],{"class":105},"    sales.append(",[95,148508,109],{"class":154},[95,148510,148511],{"class":105},"(value))\n",[95,148513,148514],{"class":97,"line":1635},[95,148515,2382],{"emptyLinePlaceholder":21},[95,148517,148518,148520],{"class":97,"line":1656},[95,148519,30400],{"class":154},[95,148521,148522],{"class":105},"(dates)\n",[95,148524,148525,148527],{"class":97,"line":1661},[95,148526,30400],{"class":154},[95,148528,148529],{"class":105},"(sales)\n",[37,148531,148533],{"id":148532},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[86,148535,148537],{"className":30363,"code":148536,"language":30365,"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",[92,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},[95,148540,148541,148543,148545,148547,148549,148551],{"class":97,"line":98},[95,148542,30722],{"class":101},[95,148544,147356],{"class":105},[95,148546,30377],{"class":101},[95,148548,147361],{"class":105},[95,148550,31368],{"class":101},[95,148552,147366],{"class":105},[95,148554,148555,148557,148559,148561],{"class":97,"line":15},[95,148556,30722],{"class":101},[95,148558,147215],{"class":105},[95,148560,30377],{"class":101},[95,148562,147220],{"class":105},[95,148564,148565],{"class":97,"line":1161},[95,148566,2382],{"emptyLinePlaceholder":21},[95,148568,148569,148571,148573],{"class":97,"line":1176},[95,148570,148442],{"class":105},[95,148572,151],{"class":101},[95,148574,55424],{"class":105},[95,148576,148577,148579,148581,148583,148586,148588,148590,148592,148594],{"class":97,"line":1182},[95,148578,148362],{"class":105},[95,148580,147974],{"class":210},[95,148582,51414],{"class":105},[95,148584,148585],{"class":210},"\"2024-10-01\"",[95,148587,12418],{"class":105},[95,148589,84061],{"class":210},[95,148591,51414],{"class":105},[95,148593,92000],{"class":154},[95,148595,4912],{"class":105},[95,148597,148598,148600,148602,148604,148607,148609,148611,148613,148616],{"class":97,"line":1196},[95,148599,148362],{"class":105},[95,148601,147974],{"class":210},[95,148603,51414],{"class":105},[95,148605,148606],{"class":210},"\"2024-10-02\"",[95,148608,12418],{"class":105},[95,148610,84061],{"class":210},[95,148612,51414],{"class":105},[95,148614,148615],{"class":154},"1800",[95,148617,4912],{"class":105},[95,148619,148620,148622,148624,148626,148629,148631,148633,148635,148638],{"class":97,"line":1202},[95,148621,148362],{"class":105},[95,148623,147974],{"class":210},[95,148625,51414],{"class":105},[95,148627,148628],{"class":210},"\"2024-10-03\"",[95,148630,12418],{"class":105},[95,148632,84061],{"class":210},[95,148634,51414],{"class":105},[95,148636,148637],{"class":154},"1500",[95,148639,4912],{"class":105},[95,148641,148642,148644,148646,148648,148651,148653,148655,148657,148660],{"class":97,"line":1293},[95,148643,148362],{"class":105},[95,148645,147974],{"class":210},[95,148647,51414],{"class":105},[95,148649,148650],{"class":210},"\"2024-10-04\"",[95,148652,12418],{"class":105},[95,148654,84061],{"class":210},[95,148656,51414],{"class":105},[95,148658,148659],{"class":154},"2100",[95,148661,4912],{"class":105},[95,148663,148664,148666,148668,148670,148673,148675,148677,148679,148682],{"class":97,"line":1299},[95,148665,148362],{"class":105},[95,148667,147974],{"class":210},[95,148669,51414],{"class":105},[95,148671,148672],{"class":210},"\"2024-10-05\"",[95,148674,12418],{"class":105},[95,148676,84061],{"class":210},[95,148678,51414],{"class":105},[95,148680,148681],{"class":154},"2600",[95,148683,4912],{"class":105},[95,148685,148686],{"class":97,"line":1311},[95,148687,33231],{"class":105},[95,148689,148690],{"class":97,"line":1594},[95,148691,2382],{"emptyLinePlaceholder":21},[95,148693,148694,148696,148698,148701,148703,148705,148707,148709,148711],{"class":97,"line":1599},[95,148695,147777],{"class":105},[95,148697,151],{"class":101},[95,148699,148700],{"class":105}," [item[",[95,148702,147974],{"class":210},[95,148704,4425],{"class":105},[95,148706,3007],{"class":101},[95,148708,148186],{"class":105},[95,148710,26028],{"class":101},[95,148712,148713],{"class":105}," sales]\n",[95,148715,148716,148719,148721,148723,148725,148727,148729,148731,148733],{"class":97,"line":1605},[95,148717,148718],{"class":105},"amounts ",[95,148720,151],{"class":101},[95,148722,148700],{"class":105},[95,148724,84061],{"class":210},[95,148726,4425],{"class":105},[95,148728,3007],{"class":101},[95,148730,148186],{"class":105},[95,148732,26028],{"class":101},[95,148734,148713],{"class":105},[95,148736,148737],{"class":97,"line":1610},[95,148738,2382],{"emptyLinePlaceholder":21},[95,148740,148741,148743,148745],{"class":97,"line":1624},[95,148742,147229],{"class":105},[95,148744,151],{"class":101},[95,148746,147234],{"class":105},[95,148748,148749],{"class":97,"line":1629},[95,148750,147818],{"class":105},[95,148752,148753],{"class":97,"line":1635},[95,148754,147626],{"class":105},[95,148756,148757,148759,148761,148763],{"class":97,"line":1656},[95,148758,147631],{"class":5199},[95,148760,151],{"class":101},[95,148762,147272],{"class":210},[95,148764,31451],{"class":105},[95,148766,148767,148769,148771],{"class":97,"line":1661},[95,148768,147642],{"class":5199},[95,148770,151],{"class":101},[95,148772,148773],{"class":105},"amounts,\n",[95,148775,148776,148778,148780,148782],{"class":97,"line":1675},[95,148777,147671],{"class":5199},[95,148779,151],{"class":101},[95,148781,31461],{"class":154},[95,148783,31451],{"class":105},[95,148785,148786,148788,148790,148792,148794,148796,148798],{"class":97,"line":1680},[95,148787,147682],{"class":5199},[95,148789,151],{"class":101},[95,148791,147687],{"class":105},[95,148793,147690],{"class":5199},[95,148795,151],{"class":101},[95,148797,31461],{"class":154},[95,148799,38032],{"class":105},[95,148801,148802],{"class":97,"line":1709},[95,148803,112],{"class":105},[95,148805,148806],{"class":97,"line":1714},[95,148807,147445],{"class":105},[95,148809,148810,148812,148814,148816,148818,148820,148823],{"class":97,"line":1731},[95,148811,147450],{"class":5199},[95,148813,151],{"class":101},[95,148815,147455],{"class":105},[95,148817,51384],{"class":5199},[95,148819,151],{"class":101},[95,148821,148822],{"class":210},"\"每日销售额\"",[95,148824,38032],{"class":105},[95,148826,148827,148829,148831,148833,148835,148837,148839],{"class":97,"line":1736},[95,148828,147469],{"class":5199},[95,148830,151],{"class":101},[95,148832,147474],{"class":105},[95,148834,79787],{"class":5199},[95,148836,151],{"class":101},[95,148838,147481],{"class":210},[95,148840,38032],{"class":105},[95,148842,148843,148845,148847,148849,148851,148853,148855],{"class":97,"line":1741},[95,148844,147488],{"class":5199},[95,148846,151],{"class":101},[95,148848,147474],{"class":105},[95,148850,79787],{"class":5199},[95,148852,151],{"class":101},[95,148854,147499],{"class":210},[95,148856,38032],{"class":105},[95,148858,148859,148861,148863,148865,148867,148869,148871],{"class":97,"line":1746},[95,148860,147506],{"class":5199},[95,148862,151],{"class":101},[95,148864,147511],{"class":105},[95,148866,147514],{"class":5199},[95,148868,151],{"class":101},[95,148870,147519],{"class":210},[95,148872,38032],{"class":105},[95,148874,148875,148878,148880],{"class":97,"line":1760},[95,148876,148877],{"class":5199},"    datazoom_opts",[95,148879,151],{"class":101},[95,148881,148882],{"class":105},"[opts.DataZoomOpts()],\n",[95,148884,148885],{"class":97,"line":1765},[95,148886,112],{"class":105},[95,148888,148889,148891,148894],{"class":97,"line":2559},[95,148890,147301],{"class":105},[95,148892,148893],{"class":210},"\"daily_sales.html\"",[95,148895,112],{"class":105},[10,148897,148898,148901],{},[92,148899,148900],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[37,148903,148905],{"id":148904},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[10,148907,148908],{},"如果数据结构如下：",[86,148910,148912],{"className":30363,"code":148911,"language":30365,"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",[92,148913,148914,148922,148930,148952,148973,148978,148985,149005,149025,149029],{"__ignoreMap":14},[95,148915,148916,148918,148920],{"class":97,"line":98},[95,148917,101635],{"class":105},[95,148919,151],{"class":101},[95,148921,15555],{"class":105},[95,148923,148924,148927],{"class":97,"line":15},[95,148925,148926],{"class":210},"    \"北京\"",[95,148928,148929],{"class":105},": [\n",[95,148931,148932,148934,148936,148938,148941,148943,148946,148948,148950],{"class":97,"line":1161},[95,148933,4899],{"class":105},[95,148935,147974],{"class":210},[95,148937,51414],{"class":105},[95,148939,148940],{"class":210},"\"2024-01-01\"",[95,148942,12418],{"class":105},[95,148944,148945],{"class":210},"\"confirm\"",[95,148947,51414],{"class":105},[95,148949,552],{"class":154},[95,148951,4912],{"class":105},[95,148953,148954,148956,148958,148960,148963,148965,148967,148969,148971],{"class":97,"line":1176},[95,148955,4899],{"class":105},[95,148957,147974],{"class":210},[95,148959,51414],{"class":105},[95,148961,148962],{"class":210},"\"2024-01-02\"",[95,148964,12418],{"class":105},[95,148966,148945],{"class":210},[95,148968,51414],{"class":105},[95,148970,604],{"class":154},[95,148972,4912],{"class":105},[95,148974,148975],{"class":97,"line":1182},[95,148976,148977],{"class":105},"    ],\n",[95,148979,148980,148983],{"class":97,"line":1196},[95,148981,148982],{"class":210},"    \"上海\"",[95,148984,148929],{"class":105},[95,148986,148987,148989,148991,148993,148995,148997,148999,149001,149003],{"class":97,"line":1202},[95,148988,4899],{"class":105},[95,148990,147974],{"class":210},[95,148992,51414],{"class":105},[95,148994,148940],{"class":210},[95,148996,12418],{"class":105},[95,148998,148945],{"class":210},[95,149000,51414],{"class":105},[95,149002,501],{"class":154},[95,149004,4912],{"class":105},[95,149006,149007,149009,149011,149013,149015,149017,149019,149021,149023],{"class":97,"line":1293},[95,149008,4899],{"class":105},[95,149010,147974],{"class":210},[95,149012,51414],{"class":105},[95,149014,148962],{"class":210},[95,149016,12418],{"class":105},[95,149018,148945],{"class":210},[95,149020,51414],{"class":105},[95,149022,629],{"class":154},[95,149024,4912],{"class":105},[95,149026,149027],{"class":97,"line":1299},[95,149028,148977],{"class":105},[95,149030,149031],{"class":97,"line":1311},[95,149032,1547],{"class":105},[10,149034,149035],{},"绘制多地区趋势：",[86,149037,149039],{"className":30363,"code":149038,"language":30365,"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",[92,149040,149041,149055,149065,149069,149094,149098,149106,149110,149114,149126,149148,149161,149165,149169,149186,149202,149206],{"__ignoreMap":14},[95,149042,149043,149045,149047,149049,149051,149053],{"class":97,"line":98},[95,149044,30722],{"class":101},[95,149046,147356],{"class":105},[95,149048,30377],{"class":101},[95,149050,147361],{"class":105},[95,149052,31368],{"class":101},[95,149054,147366],{"class":105},[95,149056,149057,149059,149061,149063],{"class":97,"line":15},[95,149058,30722],{"class":101},[95,149060,147215],{"class":105},[95,149062,30377],{"class":101},[95,149064,147220],{"class":105},[95,149066,149067],{"class":97,"line":1161},[95,149068,2382],{"emptyLinePlaceholder":21},[95,149070,149071,149073,149075,149077,149079,149081,149083,149085,149087,149090,149092],{"class":97,"line":1176},[95,149072,147777],{"class":105},[95,149074,151],{"class":101},[95,149076,148700],{"class":105},[95,149078,147974],{"class":210},[95,149080,4425],{"class":105},[95,149082,3007],{"class":101},[95,149084,148186],{"class":105},[95,149086,26028],{"class":101},[95,149088,149089],{"class":105}," data[",[95,149091,69246],{"class":210},[95,149093,77504],{"class":105},[95,149095,149096],{"class":97,"line":1182},[95,149097,2382],{"emptyLinePlaceholder":21},[95,149099,149100,149102,149104],{"class":97,"line":1196},[95,149101,147229],{"class":105},[95,149103,151],{"class":101},[95,149105,147234],{"class":105},[95,149107,149108],{"class":97,"line":1202},[95,149109,147818],{"class":105},[95,149111,149112],{"class":97,"line":1293},[95,149113,2382],{"emptyLinePlaceholder":21},[95,149115,149116,149118,149121,149123],{"class":97,"line":1299},[95,149117,3007],{"class":101},[95,149119,149120],{"class":105}," city, records ",[95,149122,26028],{"class":101},[95,149124,149125],{"class":105}," data.items():\n",[95,149127,149128,149131,149133,149135,149137,149139,149141,149143,149145],{"class":97,"line":1311},[95,149129,149130],{"class":105},"    values ",[95,149132,151],{"class":101},[95,149134,148700],{"class":105},[95,149136,148945],{"class":210},[95,149138,4425],{"class":105},[95,149140,3007],{"class":101},[95,149142,148186],{"class":105},[95,149144,26028],{"class":101},[95,149146,149147],{"class":105}," records]\n",[95,149149,149150,149153,149155,149157,149159],{"class":97,"line":1594},[95,149151,149152],{"class":105},"    line.add_yaxis(city, values, ",[95,149154,147722],{"class":5199},[95,149156,151],{"class":101},[95,149158,31461],{"class":154},[95,149160,112],{"class":105},[95,149162,149163],{"class":97,"line":1599},[95,149164,2382],{"emptyLinePlaceholder":21},[95,149166,149167],{"class":97,"line":1605},[95,149168,147445],{"class":105},[95,149170,149171,149173,149175,149177,149179,149181,149184],{"class":97,"line":1610},[95,149172,147450],{"class":5199},[95,149174,151],{"class":101},[95,149176,147455],{"class":105},[95,149178,51384],{"class":5199},[95,149180,151],{"class":101},[95,149182,149183],{"class":210},"\"多地区趋势图\"",[95,149185,38032],{"class":105},[95,149187,149188,149190,149192,149194,149196,149198,149200],{"class":97,"line":1624},[95,149189,147506],{"class":5199},[95,149191,151],{"class":101},[95,149193,147511],{"class":105},[95,149195,147514],{"class":5199},[95,149197,151],{"class":101},[95,149199,147519],{"class":210},[95,149201,38032],{"class":105},[95,149203,149204],{"class":97,"line":1629},[95,149205,112],{"class":105},[95,149207,149208,149210,149213],{"class":97,"line":1635},[95,149209,147301],{"class":105},[95,149211,149212],{"class":210},"\"trend.html\"",[95,149214,112],{"class":105},[10,149216,149217],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[37,149219,149221],{"id":149220},"_1012-易错点","10.12 易错点",[49,149223,149224,149230,149236,149246,149252],{},[52,149225,149226,149229],{},[92,149227,149228],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[52,149231,149232,149235],{},[92,149233,149234],{},"render()"," 生成的是 HTML，不是图片。",[52,149237,149238,149239,149242,149243,28370],{},"JSON 字符串用 ",[92,149240,149241],{},"json.loads()","，JSON 文件用 ",[92,149244,149245],{},"json.load()",[52,149247,149248,149249,28370],{},"中文 JSON 保存时加 ",[92,149250,149251],{},"ensure_ascii=False",[52,149253,149254],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[37,149256,149258],{"id":149257},"_1013-本章练习","10.13 本章练习",[49,149260,149261,149264,149267,149270,149273],{},[52,149262,149263],{},"安装 pyecharts 并生成第一个折线图。",[52,149265,149266],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[52,149268,149269],{},"绘制两条折线，对比线上和线下销售额。",[52,149271,149272],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[52,149274,149275],{},"对含有空值的销售数据进行清洗后再绘图。",[5109,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":23360},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149300,"title":149301,"body":149302,"description":23360,"extension":18,"meta":151662,"navigation":21,"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],[33,149305,149301],{"id":149306},"_11-面向对象基础",[37,149308,149310],{"id":149309},"_111-什么是面向对象","11.1 什么是面向对象",[10,149312,149313],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[10,149315,149316],{},"面向过程：",[86,149318,149320],{"className":30363,"code":149319,"language":30365,"meta":14,"style":14},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[92,149321,149322,149331,149339,149343,149353,149384,149388],{"__ignoreMap":14},[95,149323,149324,149326,149328],{"class":97,"line":98},[95,149325,146513],{"class":105},[95,149327,151],{"class":101},[95,149329,149330],{"class":210}," \"小明\"\n",[95,149332,149333,149335,149337],{"class":97,"line":15},[95,149334,146523],{"class":105},[95,149336,151],{"class":101},[95,149338,146528],{"class":154},[95,149340,149341],{"class":97,"line":1161},[95,149342,2382],{"emptyLinePlaceholder":21},[95,149344,149345,149347,149350],{"class":97,"line":1176},[95,149346,31932],{"class":101},[95,149348,149349],{"class":1945}," introduce",[95,149351,149352],{"class":105},"(name, age):\n",[95,149354,149355,149357,149359,149361,149364,149366,149368,149370,149373,149375,149377,149379,149382],{"class":97,"line":1182},[95,149356,31284],{"class":154},[95,149358,106],{"class":105},[95,149360,158],{"class":101},[95,149362,149363],{"class":210},"\"我叫",[95,149365,1002],{"class":154},[95,149367,79787],{"class":105},[95,149369,1052],{"class":154},[95,149371,149372],{"class":210},"，今年",[95,149374,1002],{"class":154},[95,149376,70198],{"class":105},[95,149378,1052],{"class":154},[95,149380,149381],{"class":210},"岁\"",[95,149383,112],{"class":105},[95,149385,149386],{"class":97,"line":1196},[95,149387,2382],{"emptyLinePlaceholder":21},[95,149389,149390],{"class":97,"line":1202},[95,149391,149392],{"class":105},"introduce(name, age)\n",[10,149394,149395],{},"面向对象：",[86,149397,149399],{"className":30363,"code":149398,"language":30365,"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",[92,149400,149401,149409,149417,149446,149450,149454,149464,149473,149482],{"__ignoreMap":14},[95,149402,149403,149405,149407],{"class":97,"line":98},[95,149404,14677],{"class":101},[95,149406,7881],{"class":1945},[95,149408,3721],{"class":105},[95,149410,149411,149413,149415],{"class":97,"line":15},[95,149412,30786],{"class":101},[95,149414,149349],{"class":1945},[95,149416,30792],{"class":105},[95,149418,149419,149421,149423,149425,149427,149430,149432,149434,149436,149438,149440,149442,149444],{"class":97,"line":1161},[95,149420,32436],{"class":154},[95,149422,106],{"class":105},[95,149424,158],{"class":101},[95,149426,149363],{"class":210},[95,149428,149429],{"class":154},"{self",[95,149431,80278],{"class":105},[95,149433,1052],{"class":154},[95,149435,149372],{"class":210},[95,149437,149429],{"class":154},[95,149439,80290],{"class":105},[95,149441,1052],{"class":154},[95,149443,149381],{"class":210},[95,149445,112],{"class":105},[95,149447,149448],{"class":97,"line":1176},[95,149449,2382],{"emptyLinePlaceholder":21},[95,149451,149452],{"class":97,"line":1182},[95,149453,2382],{"emptyLinePlaceholder":21},[95,149455,149456,149459,149461],{"class":97,"line":1196},[95,149457,149458],{"class":105},"student ",[95,149460,151],{"class":101},[95,149462,149463],{"class":105}," Student()\n",[95,149465,149466,149469,149471],{"class":97,"line":1202},[95,149467,149468],{"class":105},"student.name ",[95,149470,151],{"class":101},[95,149472,149330],{"class":210},[95,149474,149475,149478,149480],{"class":97,"line":1293},[95,149476,149477],{"class":105},"student.age ",[95,149479,151],{"class":101},[95,149481,146528],{"class":154},[95,149483,149484],{"class":97,"line":1299},[95,149485,149486],{"class":105},"student.introduce()\n",[10,149488,149489],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[37,149491,149493],{"id":149492},"_112-类和对象","11.2 类和对象",[10,149495,149496],{},"类是模板，对象是根据模板创建出来的具体实例。",[86,149498,149500],{"className":30363,"code":149499,"language":30365,"meta":14,"style":14},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[92,149501,149502,149510,149515,149519,149523,149532],{"__ignoreMap":14},[95,149503,149504,149506,149508],{"class":97,"line":98},[95,149505,14677],{"class":101},[95,149507,7881],{"class":1945},[95,149509,3721],{"class":105},[95,149511,149512],{"class":97,"line":15},[95,149513,149514],{"class":101},"    pass\n",[95,149516,149517],{"class":97,"line":1161},[95,149518,2382],{"emptyLinePlaceholder":21},[95,149520,149521],{"class":97,"line":1176},[95,149522,2382],{"emptyLinePlaceholder":21},[95,149524,149525,149528,149530],{"class":97,"line":1182},[95,149526,149527],{"class":105},"student1 ",[95,149529,151],{"class":101},[95,149531,149463],{"class":105},[95,149533,149534,149537,149539],{"class":97,"line":1196},[95,149535,149536],{"class":105},"student2 ",[95,149538,151],{"class":101},[95,149540,149463],{"class":105},[10,149542,149543,149546,149547,100995,149550,149553],{},[92,149544,149545],{},"Student"," 是类，",[92,149548,149549],{},"student1",[92,149551,149552],{},"student2"," 是对象。",[37,149555,149557],{"id":149556},"_113-属性","11.3 属性",[10,149559,149560],{},"属性是对象保存的数据。",[86,149562,149564],{"className":30363,"code":149563,"language":30365,"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",[92,149565,149566,149574,149578,149582,149586,149594,149602,149610,149614,149621],{"__ignoreMap":14},[95,149567,149568,149570,149572],{"class":97,"line":98},[95,149569,14677],{"class":101},[95,149571,7881],{"class":1945},[95,149573,3721],{"class":105},[95,149575,149576],{"class":97,"line":15},[95,149577,149514],{"class":101},[95,149579,149580],{"class":97,"line":1161},[95,149581,2382],{"emptyLinePlaceholder":21},[95,149583,149584],{"class":97,"line":1176},[95,149585,2382],{"emptyLinePlaceholder":21},[95,149587,149588,149590,149592],{"class":97,"line":1182},[95,149589,149458],{"class":105},[95,149591,151],{"class":101},[95,149593,149463],{"class":105},[95,149595,149596,149598,149600],{"class":97,"line":1196},[95,149597,149468],{"class":105},[95,149599,151],{"class":101},[95,149601,149330],{"class":210},[95,149603,149604,149606,149608],{"class":97,"line":1202},[95,149605,149477],{"class":105},[95,149607,151],{"class":101},[95,149609,146528],{"class":154},[95,149611,149612],{"class":97,"line":1293},[95,149613,2382],{"emptyLinePlaceholder":21},[95,149615,149616,149618],{"class":97,"line":1299},[95,149617,30400],{"class":154},[95,149619,149620],{"class":105},"(student.name)\n",[95,149622,149623,149625],{"class":97,"line":1311},[95,149624,30400],{"class":154},[95,149626,149627],{"class":105},"(student.age)\n",[10,149629,149630],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[37,149632,149634],{"id":149633},"_114-方法","11.4 方法",[10,149636,149637],{},"类中的函数叫方法。",[86,149639,149640],{"className":30363,"code":149398,"language":30365,"meta":14,"style":14},[92,149641,149642,149650,149658,149686,149690,149694,149702,149710,149718],{"__ignoreMap":14},[95,149643,149644,149646,149648],{"class":97,"line":98},[95,149645,14677],{"class":101},[95,149647,7881],{"class":1945},[95,149649,3721],{"class":105},[95,149651,149652,149654,149656],{"class":97,"line":15},[95,149653,30786],{"class":101},[95,149655,149349],{"class":1945},[95,149657,30792],{"class":105},[95,149659,149660,149662,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682,149684],{"class":97,"line":1161},[95,149661,32436],{"class":154},[95,149663,106],{"class":105},[95,149665,158],{"class":101},[95,149667,149363],{"class":210},[95,149669,149429],{"class":154},[95,149671,80278],{"class":105},[95,149673,1052],{"class":154},[95,149675,149372],{"class":210},[95,149677,149429],{"class":154},[95,149679,80290],{"class":105},[95,149681,1052],{"class":154},[95,149683,149381],{"class":210},[95,149685,112],{"class":105},[95,149687,149688],{"class":97,"line":1176},[95,149689,2382],{"emptyLinePlaceholder":21},[95,149691,149692],{"class":97,"line":1182},[95,149693,2382],{"emptyLinePlaceholder":21},[95,149695,149696,149698,149700],{"class":97,"line":1196},[95,149697,149458],{"class":105},[95,149699,151],{"class":101},[95,149701,149463],{"class":105},[95,149703,149704,149706,149708],{"class":97,"line":1202},[95,149705,149468],{"class":105},[95,149707,151],{"class":101},[95,149709,149330],{"class":210},[95,149711,149712,149714,149716],{"class":97,"line":1293},[95,149713,149477],{"class":105},[95,149715,151],{"class":101},[95,149717,146528],{"class":154},[95,149719,149720],{"class":97,"line":1299},[95,149721,149486],{"class":105},[10,149723,149724,149726,149727,149729],{},[92,149725,30808],{}," 表示当前对象。调用方法时不需要手动传入 ",[92,149728,30808],{},"，Python 会自动传。",[37,149731,149733],{"id":149732},"_115-构造方法__init__","11.5 构造方法__init__",[10,149735,149736,149738],{},[92,149737,30814],{}," 在对象创建时自动执行，用于初始化属性。",[86,149740,149742],{"className":30363,"code":149741,"language":30365,"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",[92,149743,149744,149752,149761,149773,149785,149796,149800,149808,149846,149850,149854,149876],{"__ignoreMap":14},[95,149745,149746,149748,149750],{"class":97,"line":98},[95,149747,14677],{"class":101},[95,149749,7881],{"class":1945},[95,149751,3721],{"class":105},[95,149753,149754,149756,149758],{"class":97,"line":15},[95,149755,30786],{"class":101},[95,149757,30789],{"class":154},[95,149759,149760],{"class":105},"(self, name, age, score):\n",[95,149762,149763,149765,149768,149770],{"class":97,"line":1161},[95,149764,30830],{"class":154},[95,149766,149767],{"class":105},".name ",[95,149769,151],{"class":101},[95,149771,149772],{"class":105}," name\n",[95,149774,149775,149777,149780,149782],{"class":97,"line":1176},[95,149776,30830],{"class":154},[95,149778,149779],{"class":105},".age ",[95,149781,151],{"class":101},[95,149783,149784],{"class":105}," age\n",[95,149786,149787,149789,149792,149794],{"class":97,"line":1182},[95,149788,30830],{"class":154},[95,149790,149791],{"class":105},".score ",[95,149793,151],{"class":101},[95,149795,1561],{"class":105},[95,149797,149798],{"class":97,"line":1196},[95,149799,2382],{"emptyLinePlaceholder":21},[95,149801,149802,149804,149806],{"class":97,"line":1202},[95,149803,30786],{"class":101},[95,149805,149349],{"class":1945},[95,149807,30792],{"class":105},[95,149809,149810,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830,149832,149835,149837,149840,149842,149844],{"class":97,"line":1293},[95,149811,32436],{"class":154},[95,149813,106],{"class":105},[95,149815,158],{"class":101},[95,149817,149363],{"class":210},[95,149819,149429],{"class":154},[95,149821,80278],{"class":105},[95,149823,1052],{"class":154},[95,149825,149372],{"class":210},[95,149827,149429],{"class":154},[95,149829,80290],{"class":105},[95,149831,1052],{"class":154},[95,149833,149834],{"class":210},"岁，成绩",[95,149836,149429],{"class":154},[95,149838,149839],{"class":105},".score",[95,149841,1052],{"class":154},[95,149843,357],{"class":210},[95,149845,112],{"class":105},[95,149847,149848],{"class":97,"line":1299},[95,149849,2382],{"emptyLinePlaceholder":21},[95,149851,149852],{"class":97,"line":1311},[95,149853,2382],{"emptyLinePlaceholder":21},[95,149855,149856,149858,149860,149863,149866,149868,149870,149872,149874],{"class":97,"line":1594},[95,149857,149458],{"class":105},[95,149859,151],{"class":101},[95,149861,149862],{"class":105}," Student(",[95,149864,149865],{"class":210},"\"小明\"",[95,149867,12418],{"class":105},[95,149869,756],{"class":154},[95,149871,12418],{"class":105},[95,149873,1095],{"class":154},[95,149875,112],{"class":105},[95,149877,149878],{"class":97,"line":1599},[95,149879,149486],{"class":105},[10,149881,149882],{},"构造方法的好处：",[49,149884,149885,149888,149891],{},[52,149886,149887],{},"创建对象时必须提供必要数据。",[52,149889,149890],{},"属性初始化集中，不容易漏。",[52,149892,149893],{},"对象状态更完整。",[37,149895,149897,149898],{"id":149896},"_116-str","11.6 ",[255,149899,1281],{},[10,149901,149902,149903,28370],{},"直接打印对象时，默认输出不直观。可以定义 ",[92,149904,149905],{},"__str__",[86,149907,149909],{"className":30363,"code":149908,"language":30365,"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",[92,149910,149911,149919,149928,149938,149948,149952,149961,149989,149993,149997,150013],{"__ignoreMap":14},[95,149912,149913,149915,149917],{"class":97,"line":98},[95,149914,14677],{"class":101},[95,149916,7881],{"class":1945},[95,149918,3721],{"class":105},[95,149920,149921,149923,149925],{"class":97,"line":15},[95,149922,30786],{"class":101},[95,149924,30789],{"class":154},[95,149926,149927],{"class":105},"(self, name, age):\n",[95,149929,149930,149932,149934,149936],{"class":97,"line":1161},[95,149931,30830],{"class":154},[95,149933,149767],{"class":105},[95,149935,151],{"class":101},[95,149937,149772],{"class":105},[95,149939,149940,149942,149944,149946],{"class":97,"line":1176},[95,149941,30830],{"class":154},[95,149943,149779],{"class":105},[95,149945,151],{"class":101},[95,149947,149784],{"class":105},[95,149949,149950],{"class":97,"line":1182},[95,149951,2382],{"emptyLinePlaceholder":21},[95,149953,149954,149956,149959],{"class":97,"line":1196},[95,149955,30786],{"class":101},[95,149957,149958],{"class":154}," __str__",[95,149960,30792],{"class":105},[95,149962,149963,149965,149968,149971,149973,149975,149977,149980,149982,149984,149986],{"class":97,"line":1202},[95,149964,14735],{"class":101},[95,149966,149967],{"class":101}," f",[95,149969,149970],{"class":210},"\"Student(name=",[95,149972,149429],{"class":154},[95,149974,80278],{"class":105},[95,149976,1052],{"class":154},[95,149978,149979],{"class":210},", age=",[95,149981,149429],{"class":154},[95,149983,80290],{"class":105},[95,149985,1052],{"class":154},[95,149987,149988],{"class":210},")\"\n",[95,149990,149991],{"class":97,"line":1293},[95,149992,2382],{"emptyLinePlaceholder":21},[95,149994,149995],{"class":97,"line":1299},[95,149996,2382],{"emptyLinePlaceholder":21},[95,149998,149999,150001,150003,150005,150007,150009,150011],{"class":97,"line":1311},[95,150000,149458],{"class":105},[95,150002,151],{"class":101},[95,150004,149862],{"class":105},[95,150006,149865],{"class":210},[95,150008,12418],{"class":105},[95,150010,756],{"class":154},[95,150012,112],{"class":105},[95,150014,150015,150017],{"class":97,"line":1594},[95,150016,30400],{"class":154},[95,150018,150019],{"class":105},"(student)\n",[37,150021,150023],{"id":150022},"_117-封装","11.7 封装",[10,150025,150026],{},"封装就是把数据和方法放到类中，并控制访问方式。",[10,150028,150029],{},"Python 中以双下划线开头的属性通常视为私有属性。",[86,150031,150033],{"className":30363,"code":150032,"language":30365,"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",[92,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},[95,150036,150037,150039,150042],{"class":97,"line":98},[95,150038,14677],{"class":101},[95,150040,150041],{"class":1945}," Account",[95,150043,3721],{"class":105},[95,150045,150046,150048,150050],{"class":97,"line":15},[95,150047,30786],{"class":101},[95,150049,30789],{"class":154},[95,150051,150052],{"class":105},"(self, owner, balance):\n",[95,150054,150055,150057,150060,150062],{"class":97,"line":1161},[95,150056,30830],{"class":154},[95,150058,150059],{"class":105},".owner ",[95,150061,151],{"class":101},[95,150063,150064],{"class":105}," owner\n",[95,150066,150067,150069,150072,150074],{"class":97,"line":1176},[95,150068,30830],{"class":154},[95,150070,150071],{"class":105},".__balance ",[95,150073,151],{"class":101},[95,150075,150076],{"class":105}," balance\n",[95,150078,150079],{"class":97,"line":1182},[95,150080,2382],{"emptyLinePlaceholder":21},[95,150082,150083,150085,150088],{"class":97,"line":1196},[95,150084,30786],{"class":101},[95,150086,150087],{"class":1945}," get_balance",[95,150089,30792],{"class":105},[95,150091,150092,150094,150096],{"class":97,"line":1202},[95,150093,14735],{"class":101},[95,150095,38858],{"class":154},[95,150097,150098],{"class":105},".__balance\n",[95,150100,150101],{"class":97,"line":1293},[95,150102,2382],{"emptyLinePlaceholder":21},[95,150104,150105,150107,150110],{"class":97,"line":1299},[95,150106,30786],{"class":101},[95,150108,150109],{"class":1945}," deposit",[95,150111,150112],{"class":105},"(self, money):\n",[95,150114,150115,150117,150120,150122,150124],{"class":97,"line":1311},[95,150116,2479],{"class":101},[95,150118,150119],{"class":105}," money ",[95,150121,1570],{"class":101},[95,150123,4075],{"class":154},[95,150125,3721],{"class":105},[95,150127,150128,150130,150132,150135],{"class":97,"line":1594},[95,150129,34635],{"class":154},[95,150131,106],{"class":105},[95,150133,150134],{"class":210},"\"存款金额必须大于0\"",[95,150136,112],{"class":105},[95,150138,150139],{"class":97,"line":1599},[95,150140,150141],{"class":101},"            return\n",[95,150143,150144,150146,150148,150150],{"class":97,"line":1605},[95,150145,30830],{"class":154},[95,150147,150071],{"class":105},[95,150149,9460],{"class":101},[95,150151,150152],{"class":105}," money\n",[95,150154,150155],{"class":97,"line":1610},[95,150156,2382],{"emptyLinePlaceholder":21},[95,150158,150159,150161,150164],{"class":97,"line":1624},[95,150160,30786],{"class":101},[95,150162,150163],{"class":1945}," withdraw",[95,150165,150112],{"class":105},[95,150167,150168,150170,150172,150174,150176],{"class":97,"line":1629},[95,150169,2479],{"class":101},[95,150171,150119],{"class":105},[95,150173,1570],{"class":101},[95,150175,4075],{"class":154},[95,150177,3721],{"class":105},[95,150179,150180,150182,150184,150187],{"class":97,"line":1635},[95,150181,34635],{"class":154},[95,150183,106],{"class":105},[95,150185,150186],{"class":210},"\"取款金额必须大于0\"",[95,150188,112],{"class":105},[95,150190,150191],{"class":97,"line":1656},[95,150192,150141],{"class":101},[95,150194,150195,150197,150199,150201,150203],{"class":97,"line":1661},[95,150196,2479],{"class":101},[95,150198,150119],{"class":105},[95,150200,1066],{"class":101},[95,150202,38858],{"class":154},[95,150204,150205],{"class":105},".__balance:\n",[95,150207,150208,150210,150212,150215],{"class":97,"line":1675},[95,150209,34635],{"class":154},[95,150211,106],{"class":105},[95,150213,150214],{"class":210},"\"余额不足\"",[95,150216,112],{"class":105},[95,150218,150219],{"class":97,"line":1680},[95,150220,150141],{"class":101},[95,150222,150223,150225,150227,150230],{"class":97,"line":1709},[95,150224,30830],{"class":154},[95,150226,150071],{"class":105},[95,150228,150229],{"class":101},"-=",[95,150231,150152],{"class":105},[95,150233,150234],{"class":97,"line":1714},[95,150235,2382],{"emptyLinePlaceholder":21},[95,150237,150238],{"class":97,"line":1731},[95,150239,2382],{"emptyLinePlaceholder":21},[95,150241,150242,150245,150247,150250,150252,150254,150256],{"class":97,"line":1736},[95,150243,150244],{"class":105},"account ",[95,150246,151],{"class":101},[95,150248,150249],{"class":105}," Account(",[95,150251,149865],{"class":210},[95,150253,12418],{"class":105},[95,150255,6393],{"class":154},[95,150257,112],{"class":105},[95,150259,150260,150263,150265],{"class":97,"line":1741},[95,150261,150262],{"class":105},"account.deposit(",[95,150264,1704],{"class":154},[95,150266,112],{"class":105},[95,150268,150269,150272,150274],{"class":97,"line":1746},[95,150270,150271],{"class":105},"account.withdraw(",[95,150273,417],{"class":154},[95,150275,112],{"class":105},[95,150277,150278,150280],{"class":97,"line":1760},[95,150279,30400],{"class":154},[95,150281,150282],{"class":105},"(account.get_balance())\n",[10,150284,150285],{},"封装的意义是避免外部随意修改内部状态。",[37,150287,150289],{"id":150288},"_118-继承","11.8 继承",[10,150291,150292],{},"继承可以让子类复用父类的属性和方法。",[86,150294,150296],{"className":30363,"code":150295,"language":30365,"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",[92,150297,150298,150307,150316,150327,150331,150335,150349,150358,150369,150373,150377,150387,150392],{"__ignoreMap":14},[95,150299,150300,150302,150305],{"class":97,"line":98},[95,150301,14677],{"class":101},[95,150303,150304],{"class":1945}," Animal",[95,150306,3721],{"class":105},[95,150308,150309,150311,150314],{"class":97,"line":15},[95,150310,30786],{"class":101},[95,150312,150313],{"class":1945}," eat",[95,150315,30792],{"class":105},[95,150317,150318,150320,150322,150325],{"class":97,"line":1161},[95,150319,32436],{"class":154},[95,150321,106],{"class":105},[95,150323,150324],{"class":210},"\"吃东西\"",[95,150326,112],{"class":105},[95,150328,150329],{"class":97,"line":1176},[95,150330,2382],{"emptyLinePlaceholder":21},[95,150332,150333],{"class":97,"line":1182},[95,150334,2382],{"emptyLinePlaceholder":21},[95,150336,150337,150339,150342,150344,150347],{"class":97,"line":1196},[95,150338,14677],{"class":101},[95,150340,150341],{"class":1945}," Dog",[95,150343,106],{"class":105},[95,150345,150346],{"class":1945},"Animal",[95,150348,30771],{"class":105},[95,150350,150351,150353,150356],{"class":97,"line":1202},[95,150352,30786],{"class":101},[95,150354,150355],{"class":1945}," bark",[95,150357,30792],{"class":105},[95,150359,150360,150362,150364,150367],{"class":97,"line":1293},[95,150361,32436],{"class":154},[95,150363,106],{"class":105},[95,150365,150366],{"class":210},"\"汪汪\"",[95,150368,112],{"class":105},[95,150370,150371],{"class":97,"line":1299},[95,150372,2382],{"emptyLinePlaceholder":21},[95,150374,150375],{"class":97,"line":1311},[95,150376,2382],{"emptyLinePlaceholder":21},[95,150378,150379,150382,150384],{"class":97,"line":1594},[95,150380,150381],{"class":105},"dog ",[95,150383,151],{"class":101},[95,150385,150386],{"class":105}," Dog()\n",[95,150388,150389],{"class":97,"line":1599},[95,150390,150391],{"class":105},"dog.eat()\n",[95,150393,150394],{"class":97,"line":1605},[95,150395,150396],{"class":105},"dog.bark()\n",[10,150398,150399],{},"子类可以扩展新方法，也可以重写父类方法。",[37,150401,150403],{"id":150402},"_119-方法重写","11.9 方法重写",[86,150405,150407],{"className":30363,"code":150406,"language":30365,"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",[92,150408,150409,150417,150426,150437,150441,150445,150457,150465,150475,150479,150483,150496,150504,150515,150519,150523,150531,150541,150545,150550],{"__ignoreMap":14},[95,150410,150411,150413,150415],{"class":97,"line":98},[95,150412,14677],{"class":101},[95,150414,150304],{"class":1945},[95,150416,3721],{"class":105},[95,150418,150419,150421,150424],{"class":97,"line":15},[95,150420,30786],{"class":101},[95,150422,150423],{"class":1945}," speak",[95,150425,30792],{"class":105},[95,150427,150428,150430,150432,150435],{"class":97,"line":1161},[95,150429,32436],{"class":154},[95,150431,106],{"class":105},[95,150433,150434],{"class":210},"\"动物叫\"",[95,150436,112],{"class":105},[95,150438,150439],{"class":97,"line":1176},[95,150440,2382],{"emptyLinePlaceholder":21},[95,150442,150443],{"class":97,"line":1182},[95,150444,2382],{"emptyLinePlaceholder":21},[95,150446,150447,150449,150451,150453,150455],{"class":97,"line":1196},[95,150448,14677],{"class":101},[95,150450,150341],{"class":1945},[95,150452,106],{"class":105},[95,150454,150346],{"class":1945},[95,150456,30771],{"class":105},[95,150458,150459,150461,150463],{"class":97,"line":1202},[95,150460,30786],{"class":101},[95,150462,150423],{"class":1945},[95,150464,30792],{"class":105},[95,150466,150467,150469,150471,150473],{"class":97,"line":1293},[95,150468,32436],{"class":154},[95,150470,106],{"class":105},[95,150472,150366],{"class":210},[95,150474,112],{"class":105},[95,150476,150477],{"class":97,"line":1299},[95,150478,2382],{"emptyLinePlaceholder":21},[95,150480,150481],{"class":97,"line":1311},[95,150482,2382],{"emptyLinePlaceholder":21},[95,150484,150485,150487,150490,150492,150494],{"class":97,"line":1594},[95,150486,14677],{"class":101},[95,150488,150489],{"class":1945}," Cat",[95,150491,106],{"class":105},[95,150493,150346],{"class":1945},[95,150495,30771],{"class":105},[95,150497,150498,150500,150502],{"class":97,"line":1599},[95,150499,30786],{"class":101},[95,150501,150423],{"class":1945},[95,150503,30792],{"class":105},[95,150505,150506,150508,150510,150513],{"class":97,"line":1605},[95,150507,32436],{"class":154},[95,150509,106],{"class":105},[95,150511,150512],{"class":210},"\"喵喵\"",[95,150514,112],{"class":105},[95,150516,150517],{"class":97,"line":1610},[95,150518,2382],{"emptyLinePlaceholder":21},[95,150520,150521],{"class":97,"line":1624},[95,150522,2382],{"emptyLinePlaceholder":21},[95,150524,150525,150527,150529],{"class":97,"line":1629},[95,150526,150381],{"class":105},[95,150528,151],{"class":101},[95,150530,150386],{"class":105},[95,150532,150533,150536,150538],{"class":97,"line":1635},[95,150534,150535],{"class":105},"cat ",[95,150537,151],{"class":101},[95,150539,150540],{"class":105}," Cat()\n",[95,150542,150543],{"class":97,"line":1656},[95,150544,2382],{"emptyLinePlaceholder":21},[95,150546,150547],{"class":97,"line":1661},[95,150548,150549],{"class":105},"dog.speak()\n",[95,150551,150552],{"class":97,"line":1675},[95,150553,150554],{"class":105},"cat.speak()\n",[37,150556,150558],{"id":150557},"_1110-super","11.10 super",[10,150560,150561,150562,150565],{},"子类可以通过 ",[92,150563,150564],{},"super()"," 调用父类方法。",[86,150567,150569],{"className":30363,"code":150568,"language":30365,"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",[92,150570,150571,150579,150588,150598,150602,150606,150618,150627,150638,150648,150652,150656,150672],{"__ignoreMap":14},[95,150572,150573,150575,150577],{"class":97,"line":98},[95,150574,14677],{"class":101},[95,150576,15552],{"class":1945},[95,150578,3721],{"class":105},[95,150580,150581,150583,150585],{"class":97,"line":15},[95,150582,30786],{"class":101},[95,150584,30789],{"class":154},[95,150586,150587],{"class":105},"(self, name):\n",[95,150589,150590,150592,150594,150596],{"class":97,"line":1161},[95,150591,30830],{"class":154},[95,150593,149767],{"class":105},[95,150595,151],{"class":101},[95,150597,149772],{"class":105},[95,150599,150600],{"class":97,"line":1176},[95,150601,2382],{"emptyLinePlaceholder":21},[95,150603,150604],{"class":97,"line":1182},[95,150605,2382],{"emptyLinePlaceholder":21},[95,150607,150608,150610,150612,150614,150616],{"class":97,"line":1196},[95,150609,14677],{"class":101},[95,150611,7881],{"class":1945},[95,150613,106],{"class":105},[95,150615,19029],{"class":1945},[95,150617,30771],{"class":105},[95,150619,150620,150622,150624],{"class":97,"line":1202},[95,150621,30786],{"class":101},[95,150623,30789],{"class":154},[95,150625,150626],{"class":105},"(self, name, score):\n",[95,150628,150629,150631,150633,150635],{"class":97,"line":1293},[95,150630,30802],{"class":154},[95,150632,17244],{"class":105},[95,150634,30814],{"class":154},[95,150636,150637],{"class":105},"(name)\n",[95,150639,150640,150642,150644,150646],{"class":97,"line":1299},[95,150641,30830],{"class":154},[95,150643,149791],{"class":105},[95,150645,151],{"class":101},[95,150647,1561],{"class":105},[95,150649,150650],{"class":97,"line":1311},[95,150651,2382],{"emptyLinePlaceholder":21},[95,150653,150654],{"class":97,"line":1594},[95,150655,2382],{"emptyLinePlaceholder":21},[95,150657,150658,150660,150662,150664,150666,150668,150670],{"class":97,"line":1599},[95,150659,149458],{"class":105},[95,150661,151],{"class":101},[95,150663,149862],{"class":105},[95,150665,149865],{"class":210},[95,150667,12418],{"class":105},[95,150669,1095],{"class":154},[95,150671,112],{"class":105},[95,150673,150674,150676],{"class":97,"line":1605},[95,150675,30400],{"class":154},[95,150677,150678],{"class":105},"(student.name, student.score)\n",[37,150680,150682],{"id":150681},"_1111-多态","11.11 多态",[10,150684,150685],{},"多态指不同对象响应同一个方法，表现出不同结果。",[86,150687,150689],{"className":30363,"code":150688,"language":30365,"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",[92,150690,150691,150699,150707,150717,150721,150725,150733,150741,150751,150755,150759,150769,150774,150778,150782,150787],{"__ignoreMap":14},[95,150692,150693,150695,150697],{"class":97,"line":98},[95,150694,14677],{"class":101},[95,150696,150341],{"class":1945},[95,150698,3721],{"class":105},[95,150700,150701,150703,150705],{"class":97,"line":15},[95,150702,30786],{"class":101},[95,150704,150423],{"class":1945},[95,150706,30792],{"class":105},[95,150708,150709,150711,150713,150715],{"class":97,"line":1161},[95,150710,32436],{"class":154},[95,150712,106],{"class":105},[95,150714,150366],{"class":210},[95,150716,112],{"class":105},[95,150718,150719],{"class":97,"line":1176},[95,150720,2382],{"emptyLinePlaceholder":21},[95,150722,150723],{"class":97,"line":1182},[95,150724,2382],{"emptyLinePlaceholder":21},[95,150726,150727,150729,150731],{"class":97,"line":1196},[95,150728,14677],{"class":101},[95,150730,150489],{"class":1945},[95,150732,3721],{"class":105},[95,150734,150735,150737,150739],{"class":97,"line":1202},[95,150736,30786],{"class":101},[95,150738,150423],{"class":1945},[95,150740,30792],{"class":105},[95,150742,150743,150745,150747,150749],{"class":97,"line":1293},[95,150744,32436],{"class":154},[95,150746,106],{"class":105},[95,150748,150512],{"class":210},[95,150750,112],{"class":105},[95,150752,150753],{"class":97,"line":1299},[95,150754,2382],{"emptyLinePlaceholder":21},[95,150756,150757],{"class":97,"line":1311},[95,150758,2382],{"emptyLinePlaceholder":21},[95,150760,150761,150763,150766],{"class":97,"line":1594},[95,150762,31932],{"class":101},[95,150764,150765],{"class":1945}," make_sound",[95,150767,150768],{"class":105},"(animal):\n",[95,150770,150771],{"class":97,"line":1599},[95,150772,150773],{"class":105},"    animal.speak()\n",[95,150775,150776],{"class":97,"line":1605},[95,150777,2382],{"emptyLinePlaceholder":21},[95,150779,150780],{"class":97,"line":1610},[95,150781,2382],{"emptyLinePlaceholder":21},[95,150783,150784],{"class":97,"line":1624},[95,150785,150786],{"class":105},"make_sound(Dog())\n",[95,150788,150789],{"class":97,"line":1629},[95,150790,150791],{"class":105},"make_sound(Cat())\n",[10,150793,150794],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[37,150796,150798],{"id":150797},"_1112-类属性和实例属性","11.12 类属性和实例属性",[10,150800,150801],{},"实例属性属于对象：",[86,150803,150805],{"className":30363,"code":150804,"language":30365,"meta":14,"style":14},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[92,150806,150807,150815,150823],{"__ignoreMap":14},[95,150808,150809,150811,150813],{"class":97,"line":98},[95,150810,14677],{"class":101},[95,150812,7881],{"class":1945},[95,150814,3721],{"class":105},[95,150816,150817,150819,150821],{"class":97,"line":15},[95,150818,30786],{"class":101},[95,150820,30789],{"class":154},[95,150822,150587],{"class":105},[95,150824,150825,150827,150829,150831],{"class":97,"line":1161},[95,150826,30830],{"class":154},[95,150828,149767],{"class":105},[95,150830,151],{"class":101},[95,150832,149772],{"class":105},[10,150834,150835],{},"类属性属于类，所有对象共享：",[86,150837,150839],{"className":30363,"code":150838,"language":30365,"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",[92,150840,150841,150849,150859,150863,150871,150881,150885,150889,150902,150916,150920,150927,150934],{"__ignoreMap":14},[95,150842,150843,150845,150847],{"class":97,"line":98},[95,150844,14677],{"class":101},[95,150846,7881],{"class":1945},[95,150848,3721],{"class":105},[95,150850,150851,150854,150856],{"class":97,"line":15},[95,150852,150853],{"class":105},"    school ",[95,150855,151],{"class":101},[95,150857,150858],{"class":210}," \"黑马学校\"\n",[95,150860,150861],{"class":97,"line":1161},[95,150862,2382],{"emptyLinePlaceholder":21},[95,150864,150865,150867,150869],{"class":97,"line":1176},[95,150866,30786],{"class":101},[95,150868,30789],{"class":154},[95,150870,150587],{"class":105},[95,150872,150873,150875,150877,150879],{"class":97,"line":1182},[95,150874,30830],{"class":154},[95,150876,149767],{"class":105},[95,150878,151],{"class":101},[95,150880,149772],{"class":105},[95,150882,150883],{"class":97,"line":1196},[95,150884,2382],{"emptyLinePlaceholder":21},[95,150886,150887],{"class":97,"line":1202},[95,150888,2382],{"emptyLinePlaceholder":21},[95,150890,150891,150894,150896,150898,150900],{"class":97,"line":1293},[95,150892,150893],{"class":105},"s1 ",[95,150895,151],{"class":101},[95,150897,149862],{"class":105},[95,150899,149865],{"class":210},[95,150901,112],{"class":105},[95,150903,150904,150907,150909,150911,150914],{"class":97,"line":1299},[95,150905,150906],{"class":105},"s2 ",[95,150908,151],{"class":101},[95,150910,149862],{"class":105},[95,150912,150913],{"class":210},"\"小红\"",[95,150915,112],{"class":105},[95,150917,150918],{"class":97,"line":1311},[95,150919,2382],{"emptyLinePlaceholder":21},[95,150921,150922,150924],{"class":97,"line":1594},[95,150923,30400],{"class":154},[95,150925,150926],{"class":105},"(s1.school)\n",[95,150928,150929,150931],{"class":97,"line":1599},[95,150930,30400],{"class":154},[95,150932,150933],{"class":105},"(s2.school)\n",[95,150935,150936,150938],{"class":97,"line":1605},[95,150937,30400],{"class":154},[95,150939,150940],{"class":105},"(Student.school)\n",[10,150942,150943],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[37,150945,150947],{"id":150946},"_1113-类方法和静态方法","11.13 类方法和静态方法",[66,150949,150951],{"id":150950},"_11131-类方法","11.13.1 类方法",[10,150953,150954,150955,150958,150959,28370],{},"类方法使用 ",[92,150956,150957],{},"@classmethod","，第一个参数通常是 ",[92,150960,150961],{},"cls",[86,150963,150965],{"className":30363,"code":150964,"language":30365,"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",[92,150966,150967,150975,150983,150987,150995,151005,151015,151019,151023],{"__ignoreMap":14},[95,150968,150969,150971,150973],{"class":97,"line":98},[95,150970,14677],{"class":101},[95,150972,7881],{"class":1945},[95,150974,3721],{"class":105},[95,150976,150977,150979,150981],{"class":97,"line":15},[95,150978,150853],{"class":105},[95,150980,151],{"class":101},[95,150982,150858],{"class":210},[95,150984,150985],{"class":97,"line":1161},[95,150986,2382],{"emptyLinePlaceholder":21},[95,150988,150989,150992],{"class":97,"line":1176},[95,150990,150991],{"class":1945},"    @",[95,150993,150994],{"class":154},"classmethod\n",[95,150996,150997,150999,151002],{"class":97,"line":1182},[95,150998,30786],{"class":101},[95,151000,151001],{"class":1945}," get_school",[95,151003,151004],{"class":105},"(cls):\n",[95,151006,151007,151009,151012],{"class":97,"line":1196},[95,151008,14735],{"class":101},[95,151010,151011],{"class":154}," cls",[95,151013,151014],{"class":105},".school\n",[95,151016,151017],{"class":97,"line":1202},[95,151018,2382],{"emptyLinePlaceholder":21},[95,151020,151021],{"class":97,"line":1293},[95,151022,2382],{"emptyLinePlaceholder":21},[95,151024,151025,151027],{"class":97,"line":1299},[95,151026,30400],{"class":154},[95,151028,151029],{"class":105},"(Student.get_school())\n",[66,151031,151033],{"id":151032},"_11132-静态方法","11.13.2 静态方法",[10,151035,151036,151037,151040],{},"静态方法使用 ",[92,151038,151039],{},"@staticmethod","，不需要访问实例和类。",[86,151042,151044],{"className":30363,"code":151043,"language":30365,"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",[92,151045,151046,151055,151062,151071,151082,151086,151090],{"__ignoreMap":14},[95,151047,151048,151050,151053],{"class":97,"line":98},[95,151049,14677],{"class":101},[95,151051,151052],{"class":1945}," MathUtils",[95,151054,3721],{"class":105},[95,151056,151057,151059],{"class":97,"line":15},[95,151058,150991],{"class":1945},[95,151060,151061],{"class":154},"staticmethod\n",[95,151063,151064,151066,151068],{"class":97,"line":1161},[95,151065,30786],{"class":101},[95,151067,5192],{"class":1945},[95,151069,151070],{"class":105},"(a, b):\n",[95,151072,151073,151075,151077,151079],{"class":97,"line":1176},[95,151074,14735],{"class":101},[95,151076,10852],{"class":105},[95,151078,587],{"class":101},[95,151080,151081],{"class":105}," b\n",[95,151083,151084],{"class":97,"line":1182},[95,151085,2382],{"emptyLinePlaceholder":21},[95,151087,151088],{"class":97,"line":1196},[95,151089,2382],{"emptyLinePlaceholder":21},[95,151091,151092,151094,151097,151099,151101,151103],{"class":97,"line":1202},[95,151093,30400],{"class":154},[95,151095,151096],{"class":105},"(MathUtils.add(",[95,151098,323],{"class":154},[95,151100,12418],{"class":105},[95,151102,183],{"class":154},[95,151104,30482],{"class":105},[10,151106,151107],{},"静态方法本质上是放在类命名空间里的普通函数。",[37,151109,151111],{"id":151110},"_1114-dataclass","11.14 dataclass",[10,151113,151114,151117],{},[92,151115,151116],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[86,151119,151121],{"className":30363,"code":151120,"language":30365,"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",[92,151122,151123,151135,151139,151143,151148,151156,151164,151172,151180,151184,151188,151208],{"__ignoreMap":14},[95,151124,151125,151127,151130,151132],{"class":97,"line":98},[95,151126,30722],{"class":101},[95,151128,151129],{"class":105}," dataclasses ",[95,151131,30377],{"class":101},[95,151133,151134],{"class":105}," dataclass\n",[95,151136,151137],{"class":97,"line":15},[95,151138,2382],{"emptyLinePlaceholder":21},[95,151140,151141],{"class":97,"line":1161},[95,151142,2382],{"emptyLinePlaceholder":21},[95,151144,151145],{"class":97,"line":1176},[95,151146,151147],{"class":1945},"@dataclass\n",[95,151149,151150,151152,151154],{"class":97,"line":1182},[95,151151,14677],{"class":101},[95,151153,7881],{"class":1945},[95,151155,3721],{"class":105},[95,151157,151158,151161],{"class":97,"line":1196},[95,151159,151160],{"class":105},"    name: ",[95,151162,151163],{"class":154},"str\n",[95,151165,151166,151169],{"class":97,"line":1202},[95,151167,151168],{"class":105},"    age: ",[95,151170,151171],{"class":154},"int\n",[95,151173,151174,151177],{"class":97,"line":1293},[95,151175,151176],{"class":105},"    score: ",[95,151178,151179],{"class":154},"float\n",[95,151181,151182],{"class":97,"line":1299},[95,151183,2382],{"emptyLinePlaceholder":21},[95,151185,151186],{"class":97,"line":1311},[95,151187,2382],{"emptyLinePlaceholder":21},[95,151189,151190,151192,151194,151196,151198,151200,151202,151204,151206],{"class":97,"line":1594},[95,151191,149458],{"class":105},[95,151193,151],{"class":101},[95,151195,149862],{"class":105},[95,151197,149865],{"class":210},[95,151199,12418],{"class":105},[95,151201,756],{"class":154},[95,151203,12418],{"class":105},[95,151205,1095],{"class":154},[95,151207,112],{"class":105},[95,151209,151210,151212],{"class":97,"line":1599},[95,151211,30400],{"class":154},[95,151213,150019],{"class":105},[10,151215,151216,151217,318,151219,151222],{},"它会自动生成 ",[92,151218,30814],{},[92,151220,151221],{},"__repr__"," 等方法。适合数据模型类。",[37,151224,151226],{"id":151225},"_1115-小案例学生类","11.15 小案例：学生类",[86,151228,151230],{"className":30363,"code":151229,"language":30365,"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",[92,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},[95,151233,151234,151236,151238],{"class":97,"line":98},[95,151235,14677],{"class":101},[95,151237,7881],{"class":1945},[95,151239,3721],{"class":105},[95,151241,151242,151244,151246],{"class":97,"line":15},[95,151243,30786],{"class":101},[95,151245,30789],{"class":154},[95,151247,151248],{"class":105},"(self, student_id, name, age, score):\n",[95,151250,151251,151253,151256,151258],{"class":97,"line":1161},[95,151252,30830],{"class":154},[95,151254,151255],{"class":105},".student_id ",[95,151257,151],{"class":101},[95,151259,151260],{"class":105}," student_id\n",[95,151262,151263,151265,151267,151269],{"class":97,"line":1176},[95,151264,30830],{"class":154},[95,151266,149767],{"class":105},[95,151268,151],{"class":101},[95,151270,149772],{"class":105},[95,151272,151273,151275,151277,151279],{"class":97,"line":1182},[95,151274,30830],{"class":154},[95,151276,149779],{"class":105},[95,151278,151],{"class":101},[95,151280,149784],{"class":105},[95,151282,151283,151285,151287,151289],{"class":97,"line":1196},[95,151284,30830],{"class":154},[95,151286,149791],{"class":105},[95,151288,151],{"class":101},[95,151290,1561],{"class":105},[95,151292,151293],{"class":97,"line":1202},[95,151294,2382],{"emptyLinePlaceholder":21},[95,151296,151297,151299,151302],{"class":97,"line":1293},[95,151298,30786],{"class":101},[95,151300,151301],{"class":1945}," is_passed",[95,151303,30792],{"class":105},[95,151305,151306,151308,151310,151312,151314],{"class":97,"line":1299},[95,151307,14735],{"class":101},[95,151309,38858],{"class":154},[95,151311,149791],{"class":105},[95,151313,1692],{"class":101},[95,151315,151316],{"class":154}," 60\n",[95,151318,151319],{"class":97,"line":1311},[95,151320,2382],{"emptyLinePlaceholder":21},[95,151322,151323,151325,151328],{"class":97,"line":1594},[95,151324,30786],{"class":101},[95,151326,151327],{"class":1945}," to_dict",[95,151329,30792],{"class":105},[95,151331,151332,151334],{"class":97,"line":1599},[95,151333,14735],{"class":101},[95,151335,15555],{"class":105},[95,151337,151338,151341,151343,151345],{"class":97,"line":1605},[95,151339,151340],{"class":210},"            \"student_id\"",[95,151342,51414],{"class":105},[95,151344,30808],{"class":154},[95,151346,151347],{"class":105},".student_id,\n",[95,151349,151350,151353,151355,151357],{"class":97,"line":1610},[95,151351,151352],{"class":210},"            \"name\"",[95,151354,51414],{"class":105},[95,151356,30808],{"class":154},[95,151358,151359],{"class":105},".name,\n",[95,151361,151362,151365,151367,151369],{"class":97,"line":1624},[95,151363,151364],{"class":210},"            \"age\"",[95,151366,51414],{"class":105},[95,151368,30808],{"class":154},[95,151370,151371],{"class":105},".age,\n",[95,151373,151374,151377,151379,151381],{"class":97,"line":1629},[95,151375,151376],{"class":210},"            \"score\"",[95,151378,51414],{"class":105},[95,151380,30808],{"class":154},[95,151382,151383],{"class":105},".score,\n",[95,151385,151386],{"class":97,"line":1635},[95,151387,2511],{"class":105},[95,151389,151390],{"class":97,"line":1656},[95,151391,2382],{"emptyLinePlaceholder":21},[95,151393,151394,151396],{"class":97,"line":1661},[95,151395,150991],{"class":1945},[95,151397,150994],{"class":154},[95,151399,151400,151402,151405],{"class":97,"line":1675},[95,151401,30786],{"class":101},[95,151403,151404],{"class":1945}," from_dict",[95,151406,151407],{"class":105},"(cls, data):\n",[95,151409,151410,151412,151414],{"class":97,"line":1680},[95,151411,14735],{"class":101},[95,151413,151011],{"class":154},[95,151415,151416],{"class":105},"(\n",[95,151418,151419,151422,151425],{"class":97,"line":1709},[95,151420,151421],{"class":105},"            data[",[95,151423,151424],{"class":210},"\"student_id\"",[95,151426,87813],{"class":105},[95,151428,151429,151431,151433],{"class":97,"line":1714},[95,151430,151421],{"class":105},[95,151432,62656],{"class":210},[95,151434,87813],{"class":105},[95,151436,151437,151439,151441],{"class":97,"line":1731},[95,151438,151421],{"class":105},[95,151440,69101],{"class":210},[95,151442,87813],{"class":105},[95,151444,151445,151447,151450],{"class":97,"line":1736},[95,151446,151421],{"class":105},[95,151448,151449],{"class":210},"\"score\"",[95,151451,87813],{"class":105},[95,151453,151454],{"class":97,"line":1741},[95,151455,38111],{"class":105},[95,151457,151458],{"class":97,"line":1746},[95,151459,2382],{"emptyLinePlaceholder":21},[95,151461,151462,151464,151466],{"class":97,"line":1760},[95,151463,30786],{"class":101},[95,151465,149958],{"class":154},[95,151467,30792],{"class":105},[95,151469,151470,151472,151474,151476,151478,151481,151483,151486,151488,151490,151492,151494,151496,151498,151500,151502],{"class":97,"line":1765},[95,151471,14735],{"class":101},[95,151473,149967],{"class":101},[95,151475,357],{"class":210},[95,151477,149429],{"class":154},[95,151479,151480],{"class":105},".student_id",[95,151482,1052],{"class":154},[95,151484,151485],{"class":154}," {self",[95,151487,80278],{"class":105},[95,151489,1052],{"class":154},[95,151491,151485],{"class":154},[95,151493,80290],{"class":105},[95,151495,1052],{"class":154},[95,151497,151485],{"class":154},[95,151499,149839],{"class":105},[95,151501,1052],{"class":154},[95,151503,25118],{"class":210},[95,151505,151506],{"class":97,"line":2559},[95,151507,2382],{"emptyLinePlaceholder":21},[95,151509,151510],{"class":97,"line":2573},[95,151511,2382],{"emptyLinePlaceholder":21},[95,151513,151514,151516,151518,151520,151523,151525,151527,151529,151531,151533,151535],{"class":97,"line":2581},[95,151515,149458],{"class":105},[95,151517,151],{"class":101},[95,151519,149862],{"class":105},[95,151521,151522],{"class":210},"\"001\"",[95,151524,12418],{"class":105},[95,151526,149865],{"class":210},[95,151528,12418],{"class":105},[95,151530,756],{"class":154},[95,151532,12418],{"class":105},[95,151534,1095],{"class":154},[95,151536,112],{"class":105},[95,151538,151539,151541],{"class":97,"line":2586},[95,151540,30400],{"class":154},[95,151542,151543],{"class":105},"(student.is_passed())\n",[95,151545,151546,151548],{"class":97,"line":2592},[95,151547,30400],{"class":154},[95,151549,151550],{"class":105},"(student.to_dict())\n",[10,151552,151553,100995,151556,151559],{},[92,151554,151555],{},"to_dict()",[92,151557,151558],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[37,151561,151563],{"id":151562},"_1116-易错点","11.16 易错点",[49,151565,151566,151572,151578,151583,151586,151589],{},[52,151567,151568,151569,28370],{},"类名推荐使用大驼峰，如 ",[92,151570,151571],{},"StudentManager",[52,151573,151574,151575,151577],{},"方法第一个参数必须写 ",[92,151576,30808],{},"，调用时不用传。",[52,151579,151580,151582],{},[92,151581,30814],{}," 不是普通方法，它在创建对象时自动执行。",[52,151584,151585],{},"私有属性不是绝对安全，只是约定和名称改写。",[52,151587,151588],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[52,151590,151591],{},"类中方法太多时，说明职责可能过重。",[37,151593,151595],{"id":151594},"_1117-本章练习","11.17 本章练习",[49,151597,151598,151604,151610,151615,151628],{},[52,151599,151600,151601,151603],{},"定义 ",[92,151602,149545],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[52,151605,151600,151606,151609],{},[92,151607,151608],{},"Account"," 类，实现存款、取款、查询余额。",[52,151611,151600,151612,151614],{},[92,151613,17209],{}," 类，计算圆的周长和面积。",[52,151616,151600,151617,318,151620,151623,151624,151627],{},[92,151618,151619],{},"Dog",[92,151621,151622],{},"Cat"," 类，并用同一个函数调用它们的 ",[92,151625,151626],{},"speak()"," 方法。",[52,151629,104343,151630,151632,151633,28370],{},[92,151631,151116],{}," 定义一个商品类 ",[92,151634,151635],{},"Product",[5109,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":1161,"text":150951},{"id":151032,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151668,"title":151669,"body":151670,"description":23360,"extension":18,"meta":154983,"navigation":21,"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],[33,151673,151669],{"id":151674},"_12-综合案例与复习路线",[37,151676,151678],{"id":151677},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[10,151680,151681],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[10,151683,151684],{},"一个合格的入门综合项目最好覆盖：",[49,151686,151687,151690,151693,151696,151699,151702,151705,151708,151711],{},[52,151688,151689],{},"输入输出。",[52,151691,151692],{},"判断和循环。",[52,151694,151695],{},"函数拆分。",[52,151697,151698],{},"列表、字典等容器。",[52,151700,151701],{},"文件持久化。",[52,151703,151704],{},"异常处理。",[52,151706,151707],{},"模块拆分。",[52,151709,151710],{},"可选：面向对象。",[52,151712,151713],{},"可选：数据可视化。",[10,151715,151716],{},"本章整理两个方向：",[49,151718,151719,151722],{},[52,151720,151721],{},"学生管理系统。",[52,151723,151724],{},"销售数据统计和可视化。",[37,151726,151728],{"id":151727},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[66,151730,151732],{"id":151731},"_1221-需求","12.2.1 需求",[10,151734,151735],{},"实现一个命令行学生管理系统：",[49,151737,151738,151741,151744,151747,151750,151753,151756],{},[52,151739,151740],{},"添加学生。",[52,151742,151743],{},"删除学生。",[52,151745,151746],{},"修改学生。",[52,151748,151749],{},"查询学生。",[52,151751,151752],{},"显示所有学生。",[52,151754,151755],{},"保存到 JSON 文件。",[52,151757,151758],{},"程序启动时自动读取 JSON 文件。",[10,151760,151761],{},"学生字段：",[86,151763,151766],{"className":151764,"code":151765,"language":5170,"meta":14},[5168],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[92,151767,151765],{"__ignoreMap":14},[37,151769,151771],{"id":151770},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[86,151773,151775],{"className":30363,"code":151774,"language":30365,"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",[92,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},[95,151778,151779,151781],{"class":97,"line":98},[95,151780,30377],{"class":101},[95,151782,147068],{"class":105},[95,151784,151785,151787,151789,151791],{"class":97,"line":15},[95,151786,30722],{"class":101},[95,151788,108288],{"class":105},[95,151790,30377],{"class":101},[95,151792,108293],{"class":105},[95,151794,151795],{"class":97,"line":1161},[95,151796,2382],{"emptyLinePlaceholder":21},[95,151798,151799,151802,151804,151806,151809],{"class":97,"line":1176},[95,151800,151801],{"class":154},"DATA_FILE",[95,151803,13547],{"class":101},[95,151805,108522],{"class":105},[95,151807,151808],{"class":210},"\"students.json\"",[95,151810,112],{"class":105},[95,151812,151813],{"class":97,"line":1182},[95,151814,2382],{"emptyLinePlaceholder":21},[95,151816,151817],{"class":97,"line":1196},[95,151818,2382],{"emptyLinePlaceholder":21},[95,151820,151821,151823,151826],{"class":97,"line":1202},[95,151822,31932],{"class":101},[95,151824,151825],{"class":1945}," load_students",[95,151827,31938],{"class":105},[95,151829,151830,151832,151834,151837],{"class":97,"line":1293},[95,151831,3083],{"class":101},[95,151833,38915],{"class":101},[95,151835,151836],{"class":154}," DATA_FILE",[95,151838,151839],{"class":105},".exists():\n",[95,151841,151842,151844],{"class":97,"line":1299},[95,151843,14735],{"class":101},[95,151845,51815],{"class":105},[95,151847,151848],{"class":97,"line":1311},[95,151849,2382],{"emptyLinePlaceholder":21},[95,151851,151852,151854],{"class":97,"line":1594},[95,151853,125761],{"class":101},[95,151855,3721],{"class":105},[95,151857,151858,151861,151863,151865,151867,151869,151871,151873,151875,151877,151879,151881,151883,151885],{"class":97,"line":1599},[95,151859,151860],{"class":101},"        with",[95,151862,146768],{"class":154},[95,151864,106],{"class":105},[95,151866,151801],{"class":154},[95,151868,12418],{"class":105},[95,151870,146778],{"class":210},[95,151872,12418],{"class":105},[95,151874,146783],{"class":5199},[95,151876,151],{"class":101},[95,151878,146788],{"class":210},[95,151880,13697],{"class":105},[95,151882,31368],{"class":101},[95,151884,148130],{"class":5199},[95,151886,3721],{"class":105},[95,151888,151889,151891,151893,151895],{"class":97,"line":1605},[95,151890,15715],{"class":101},[95,151892,148141],{"class":105},[95,151894,45339],{"class":5199},[95,151896,112],{"class":105},[95,151898,151899,151901],{"class":97,"line":1610},[95,151900,125789],{"class":101},[95,151902,151903],{"class":105}," json.JSONDecodeError:\n",[95,151905,151906,151908,151910,151913],{"class":97,"line":1624},[95,151907,32436],{"class":154},[95,151909,106],{"class":105},[95,151911,151912],{"class":210},"\"数据文件格式错误，已使用空数据启动\"",[95,151914,112],{"class":105},[95,151916,151917,151919],{"class":97,"line":1629},[95,151918,14735],{"class":101},[95,151920,51815],{"class":105},[95,151922,151923],{"class":97,"line":1635},[95,151924,2382],{"emptyLinePlaceholder":21},[95,151926,151927],{"class":97,"line":1656},[95,151928,2382],{"emptyLinePlaceholder":21},[95,151930,151931,151933,151936],{"class":97,"line":1661},[95,151932,31932],{"class":101},[95,151934,151935],{"class":1945}," save_students",[95,151937,151938],{"class":105},"(students):\n",[95,151940,151941,151943,151945,151947,151949,151951,151954,151956,151958,151960,151962,151964,151966,151968],{"class":97,"line":1675},[95,151942,34163],{"class":101},[95,151944,146768],{"class":154},[95,151946,106],{"class":105},[95,151948,151801],{"class":154},[95,151950,12418],{"class":105},[95,151952,151953],{"class":210},"\"w\"",[95,151955,12418],{"class":105},[95,151957,146783],{"class":5199},[95,151959,151],{"class":101},[95,151961,146788],{"class":210},[95,151963,13697],{"class":105},[95,151965,31368],{"class":101},[95,151967,148130],{"class":5199},[95,151969,3721],{"class":105},[95,151971,151972,151975,151977,151979,151981,151983,151985,151987,151990,151992,151994],{"class":97,"line":1680},[95,151973,151974],{"class":105},"        json.dump(students, ",[95,151976,45339],{"class":5199},[95,151978,12418],{"class":105},[95,151980,147114],{"class":5199},[95,151982,151],{"class":101},[95,151984,33972],{"class":154},[95,151986,12418],{"class":105},[95,151988,151989],{"class":5199},"indent",[95,151991,151],{"class":101},[95,151993,183],{"class":154},[95,151995,112],{"class":105},[95,151997,151998],{"class":97,"line":1709},[95,151999,2382],{"emptyLinePlaceholder":21},[95,152001,152002],{"class":97,"line":1714},[95,152003,2382],{"emptyLinePlaceholder":21},[95,152005,152006,152008,152011],{"class":97,"line":1731},[95,152007,31932],{"class":101},[95,152009,152010],{"class":1945}," show_menu",[95,152012,31938],{"class":105},[95,152014,152015,152017,152019,152022],{"class":97,"line":1736},[95,152016,31284],{"class":154},[95,152018,106],{"class":105},[95,152020,152021],{"class":210},"\"====== 学生管理系统 ======\"",[95,152023,112],{"class":105},[95,152025,152026,152028,152030,152033],{"class":97,"line":1741},[95,152027,31284],{"class":154},[95,152029,106],{"class":105},[95,152031,152032],{"class":210},"\"1. 添加学生\"",[95,152034,112],{"class":105},[95,152036,152037,152039,152041,152044],{"class":97,"line":1746},[95,152038,31284],{"class":154},[95,152040,106],{"class":105},[95,152042,152043],{"class":210},"\"2. 删除学生\"",[95,152045,112],{"class":105},[95,152047,152048,152050,152052,152055],{"class":97,"line":1760},[95,152049,31284],{"class":154},[95,152051,106],{"class":105},[95,152053,152054],{"class":210},"\"3. 修改学生\"",[95,152056,112],{"class":105},[95,152058,152059,152061,152063,152066],{"class":97,"line":1765},[95,152060,31284],{"class":154},[95,152062,106],{"class":105},[95,152064,152065],{"class":210},"\"4. 查询学生\"",[95,152067,112],{"class":105},[95,152069,152070,152072,152074,152077],{"class":97,"line":2559},[95,152071,31284],{"class":154},[95,152073,106],{"class":105},[95,152075,152076],{"class":210},"\"5. 显示所有学生\"",[95,152078,112],{"class":105},[95,152080,152081,152083,152085,152088],{"class":97,"line":2573},[95,152082,31284],{"class":154},[95,152084,106],{"class":105},[95,152086,152087],{"class":210},"\"0. 退出系统\"",[95,152089,112],{"class":105},[95,152091,152092],{"class":97,"line":2581},[95,152093,2382],{"emptyLinePlaceholder":21},[95,152095,152096],{"class":97,"line":2586},[95,152097,2382],{"emptyLinePlaceholder":21},[95,152099,152100,152102,152105],{"class":97,"line":2592},[95,152101,31932],{"class":101},[95,152103,152104],{"class":1945}," find_student",[95,152106,152107],{"class":105},"(students, student_id):\n",[95,152109,152110,152112,152115,152117],{"class":97,"line":2598},[95,152111,3183],{"class":101},[95,152113,152114],{"class":105}," student ",[95,152116,26028],{"class":101},[95,152118,152119],{"class":105}," students:\n",[95,152121,152122,152124,152127,152129,152131,152133],{"class":97,"line":2603},[95,152123,2479],{"class":101},[95,152125,152126],{"class":105}," student[",[95,152128,151424],{"class":210},[95,152130,4425],{"class":105},[95,152132,2931],{"class":101},[95,152134,152135],{"class":105}," student_id:\n",[95,152137,152138,152140],{"class":97,"line":7931},[95,152139,15715],{"class":101},[95,152141,152142],{"class":105}," student\n",[95,152144,152145,152147],{"class":97,"line":7955},[95,152146,4072],{"class":101},[95,152148,152149],{"class":154}," None\n",[95,152151,152152],{"class":97,"line":7960},[95,152153,2382],{"emptyLinePlaceholder":21},[95,152155,152156],{"class":97,"line":7966},[95,152157,2382],{"emptyLinePlaceholder":21},[95,152159,152160,152162,152165],{"class":97,"line":7993},[95,152161,31932],{"class":101},[95,152163,152164],{"class":1945}," input_int",[95,152166,152167],{"class":105},"(prompt):\n",[95,152169,152170,152172,152174],{"class":97,"line":7998},[95,152171,2233],{"class":101},[95,152173,95269],{"class":154},[95,152175,3721],{"class":105},[95,152177,152178,152181],{"class":97,"line":8004},[95,152179,152180],{"class":101},"        try",[95,152182,3721],{"class":105},[95,152184,152185,152187,152189,152191,152193],{"class":97,"line":8016},[95,152186,15715],{"class":101},[95,152188,2364],{"class":154},[95,152190,106],{"class":105},[95,152192,53798],{"class":154},[95,152194,152195],{"class":105},"(prompt))\n",[95,152197,152198,152201,152204],{"class":97,"line":8028},[95,152199,152200],{"class":101},"        except",[95,152202,152203],{"class":154}," ValueError",[95,152205,3721],{"class":105},[95,152207,152208,152210,152212,152215],{"class":97,"line":8040},[95,152209,34635],{"class":154},[95,152211,106],{"class":105},[95,152213,152214],{"class":210},"\"请输入整数\"",[95,152216,112],{"class":105},[95,152218,152219],{"class":97,"line":9699},[95,152220,2382],{"emptyLinePlaceholder":21},[95,152222,152223],{"class":97,"line":9724},[95,152224,2382],{"emptyLinePlaceholder":21},[95,152226,152227,152229,152232],{"class":97,"line":9747},[95,152228,31932],{"class":101},[95,152230,152231],{"class":1945}," input_float",[95,152233,152167],{"class":105},[95,152235,152236,152238,152240],{"class":97,"line":9771},[95,152237,2233],{"class":101},[95,152239,95269],{"class":154},[95,152241,3721],{"class":105},[95,152243,152244,152246],{"class":97,"line":9776},[95,152245,152180],{"class":101},[95,152247,3721],{"class":105},[95,152249,152250,152252,152254,152256,152258],{"class":97,"line":9781},[95,152251,15715],{"class":101},[95,152253,109774],{"class":154},[95,152255,106],{"class":105},[95,152257,53798],{"class":154},[95,152259,152195],{"class":105},[95,152261,152262,152264,152266],{"class":97,"line":9786},[95,152263,152200],{"class":101},[95,152265,152203],{"class":154},[95,152267,3721],{"class":105},[95,152269,152270,152272,152274,152277],{"class":97,"line":9795},[95,152271,34635],{"class":154},[95,152273,106],{"class":105},[95,152275,152276],{"class":210},"\"请输入数字\"",[95,152278,112],{"class":105},[95,152280,152281],{"class":97,"line":9800},[95,152282,2382],{"emptyLinePlaceholder":21},[95,152284,152285],{"class":97,"line":9806},[95,152286,2382],{"emptyLinePlaceholder":21},[95,152288,152289,152291,152294],{"class":97,"line":9827},[95,152290,31932],{"class":101},[95,152292,152293],{"class":1945}," add_student",[95,152295,151938],{"class":105},[95,152297,152298,152301,152303,152305,152307,152310],{"class":97,"line":9833},[95,152299,152300],{"class":105},"    student_id ",[95,152302,151],{"class":101},[95,152304,60582],{"class":154},[95,152306,106],{"class":105},[95,152308,152309],{"class":210},"\"请输入学号:\"",[95,152311,112],{"class":105},[95,152313,152314],{"class":97,"line":9847},[95,152315,2382],{"emptyLinePlaceholder":21},[95,152317,152318,152320],{"class":97,"line":9853},[95,152319,3083],{"class":101},[95,152321,152322],{"class":105}," find_student(students, student_id):\n",[95,152324,152325,152327,152329,152332],{"class":97,"line":9880},[95,152326,32436],{"class":154},[95,152328,106],{"class":105},[95,152330,152331],{"class":210},"\"学号已存在\"",[95,152333,112],{"class":105},[95,152335,152336],{"class":97,"line":9889},[95,152337,152338],{"class":101},"        return\n",[95,152340,152341],{"class":97,"line":9895},[95,152342,2382],{"emptyLinePlaceholder":21},[95,152344,152345,152348,152350,152352,152354,152357],{"class":97,"line":9903},[95,152346,152347],{"class":105},"    name ",[95,152349,151],{"class":101},[95,152351,60582],{"class":154},[95,152353,106],{"class":105},[95,152355,152356],{"class":210},"\"请输入姓名:\"",[95,152358,112],{"class":105},[95,152360,152361,152364,152366,152369,152372],{"class":97,"line":9908},[95,152362,152363],{"class":105},"    age ",[95,152365,151],{"class":101},[95,152367,152368],{"class":105}," input_int(",[95,152370,152371],{"class":210},"\"请输入年龄:\"",[95,152373,112],{"class":105},[95,152375,152376,152379,152381,152384,152387],{"class":97,"line":16587},[95,152377,152378],{"class":105},"    score ",[95,152380,151],{"class":101},[95,152382,152383],{"class":105}," input_float(",[95,152385,152386],{"class":210},"\"请输入成绩:\"",[95,152388,112],{"class":105},[95,152390,152391],{"class":97,"line":16593},[95,152392,2382],{"emptyLinePlaceholder":21},[95,152394,152395],{"class":97,"line":16616},[95,152396,152397],{"class":105},"    students.append({\n",[95,152399,152400,152403],{"class":97,"line":16622},[95,152401,152402],{"class":210},"        \"student_id\"",[95,152404,152405],{"class":105},": student_id,\n",[95,152407,152408,152411],{"class":97,"line":16645},[95,152409,152410],{"class":210},"        \"name\"",[95,152412,152413],{"class":105},": name,\n",[95,152415,152416,152419],{"class":97,"line":16659},[95,152417,152418],{"class":210},"        \"age\"",[95,152420,152421],{"class":105},": age,\n",[95,152423,152424,152427],{"class":97,"line":16679},[95,152425,152426],{"class":210},"        \"score\"",[95,152428,152429],{"class":105},": score,\n",[95,152431,152432],{"class":97,"line":16685},[95,152433,33446],{"class":105},[95,152435,152436],{"class":97,"line":16696},[95,152437,152438],{"class":105},"    save_students(students)\n",[95,152440,152441,152443,152445,152448],{"class":97,"line":16719},[95,152442,31284],{"class":154},[95,152444,106],{"class":105},[95,152446,152447],{"class":210},"\"添加成功\"",[95,152449,112],{"class":105},[95,152451,152452],{"class":97,"line":16741},[95,152453,2382],{"emptyLinePlaceholder":21},[95,152455,152456],{"class":97,"line":16746},[95,152457,2382],{"emptyLinePlaceholder":21},[95,152459,152460,152462,152465],{"class":97,"line":16752},[95,152461,31932],{"class":101},[95,152463,152464],{"class":1945}," delete_student",[95,152466,151938],{"class":105},[95,152468,152469,152471,152473,152475,152477,152480],{"class":97,"line":16766},[95,152470,152300],{"class":105},[95,152472,151],{"class":101},[95,152474,60582],{"class":154},[95,152476,106],{"class":105},[95,152478,152479],{"class":210},"\"请输入要删除的学号:\"",[95,152481,112],{"class":105},[95,152483,152484,152487,152489],{"class":97,"line":16779},[95,152485,152486],{"class":105},"    student ",[95,152488,151],{"class":101},[95,152490,152491],{"class":105}," find_student(students, student_id)\n",[95,152493,152494],{"class":97,"line":16784},[95,152495,2382],{"emptyLinePlaceholder":21},[95,152497,152498,152500,152502,152504,152506],{"class":97,"line":16798},[95,152499,3083],{"class":101},[95,152501,152114],{"class":105},[95,152503,38912],{"class":101},[95,152505,38918],{"class":154},[95,152507,3721],{"class":105},[95,152509,152510,152512,152514,152517],{"class":97,"line":16803},[95,152511,32436],{"class":154},[95,152513,106],{"class":105},[95,152515,152516],{"class":210},"\"学生不存在\"",[95,152518,112],{"class":105},[95,152520,152521],{"class":97,"line":16809},[95,152522,152338],{"class":101},[95,152524,152525],{"class":97,"line":16814},[95,152526,2382],{"emptyLinePlaceholder":21},[95,152528,152529],{"class":97,"line":16828},[95,152530,152531],{"class":105},"    students.remove(student)\n",[95,152533,152534],{"class":97,"line":16833},[95,152535,152438],{"class":105},[95,152537,152538,152540,152542,152545],{"class":97,"line":16838},[95,152539,31284],{"class":154},[95,152541,106],{"class":105},[95,152543,152544],{"class":210},"\"删除成功\"",[95,152546,112],{"class":105},[95,152548,152549],{"class":97,"line":16852},[95,152550,2382],{"emptyLinePlaceholder":21},[95,152552,152553],{"class":97,"line":16864},[95,152554,2382],{"emptyLinePlaceholder":21},[95,152556,152557,152559,152562],{"class":97,"line":16869},[95,152558,31932],{"class":101},[95,152560,152561],{"class":1945}," update_student",[95,152563,151938],{"class":105},[95,152565,152566,152568,152570,152572,152574,152577],{"class":97,"line":16882},[95,152567,152300],{"class":105},[95,152569,151],{"class":101},[95,152571,60582],{"class":154},[95,152573,106],{"class":105},[95,152575,152576],{"class":210},"\"请输入要修改的学号:\"",[95,152578,112],{"class":105},[95,152580,152581,152583,152585],{"class":97,"line":16887},[95,152582,152486],{"class":105},[95,152584,151],{"class":101},[95,152586,152491],{"class":105},[95,152588,152589],{"class":97,"line":16892},[95,152590,2382],{"emptyLinePlaceholder":21},[95,152592,152593,152595,152597,152599,152601],{"class":97,"line":16897},[95,152594,3083],{"class":101},[95,152596,152114],{"class":105},[95,152598,38912],{"class":101},[95,152600,38918],{"class":154},[95,152602,3721],{"class":105},[95,152604,152605,152607,152609,152611],{"class":97,"line":16910},[95,152606,32436],{"class":154},[95,152608,106],{"class":105},[95,152610,152516],{"class":210},[95,152612,112],{"class":105},[95,152614,152615],{"class":97,"line":16915},[95,152616,152338],{"class":101},[95,152618,152619],{"class":97,"line":32618},[95,152620,2382],{"emptyLinePlaceholder":21},[95,152622,152623,152625,152627,152629,152631,152634],{"class":97,"line":32624},[95,152624,152347],{"class":105},[95,152626,151],{"class":101},[95,152628,60582],{"class":154},[95,152630,106],{"class":105},[95,152632,152633],{"class":210},"\"请输入新姓名:\"",[95,152635,112],{"class":105},[95,152637,152638,152640,152642,152644,152647],{"class":97,"line":32630},[95,152639,152363],{"class":105},[95,152641,151],{"class":101},[95,152643,152368],{"class":105},[95,152645,152646],{"class":210},"\"请输入新年龄:\"",[95,152648,112],{"class":105},[95,152650,152651,152653,152655,152657,152660],{"class":97,"line":32636},[95,152652,152378],{"class":105},[95,152654,151],{"class":101},[95,152656,152383],{"class":105},[95,152658,152659],{"class":210},"\"请输入新成绩:\"",[95,152661,112],{"class":105},[95,152663,152664],{"class":97,"line":32642},[95,152665,2382],{"emptyLinePlaceholder":21},[95,152667,152668,152671,152673,152675,152677],{"class":97,"line":32653},[95,152669,152670],{"class":105},"    student[",[95,152672,62656],{"class":210},[95,152674,4425],{"class":105},[95,152676,151],{"class":101},[95,152678,149772],{"class":105},[95,152680,152681,152683,152685,152687,152689],{"class":97,"line":32659},[95,152682,152670],{"class":105},[95,152684,69101],{"class":210},[95,152686,4425],{"class":105},[95,152688,151],{"class":101},[95,152690,149784],{"class":105},[95,152692,152693,152695,152697,152699,152701],{"class":97,"line":32679},[95,152694,152670],{"class":105},[95,152696,151449],{"class":210},[95,152698,4425],{"class":105},[95,152700,151],{"class":101},[95,152702,1561],{"class":105},[95,152704,152705],{"class":97,"line":32685},[95,152706,2382],{"emptyLinePlaceholder":21},[95,152708,152709],{"class":97,"line":32696},[95,152710,152438],{"class":105},[95,152712,152713,152715,152717,152720],{"class":97,"line":32702},[95,152714,31284],{"class":154},[95,152716,106],{"class":105},[95,152718,152719],{"class":210},"\"修改成功\"",[95,152721,112],{"class":105},[95,152723,152724],{"class":97,"line":32708},[95,152725,2382],{"emptyLinePlaceholder":21},[95,152727,152728],{"class":97,"line":32714},[95,152729,2382],{"emptyLinePlaceholder":21},[95,152731,152732,152734,152737],{"class":97,"line":32720},[95,152733,31932],{"class":101},[95,152735,152736],{"class":1945}," query_student",[95,152738,151938],{"class":105},[95,152740,152741,152743,152745,152747,152749,152752],{"class":97,"line":32726},[95,152742,152300],{"class":105},[95,152744,151],{"class":101},[95,152746,60582],{"class":154},[95,152748,106],{"class":105},[95,152750,152751],{"class":210},"\"请输入要查询的学号:\"",[95,152753,112],{"class":105},[95,152755,152756,152758,152760],{"class":97,"line":32732},[95,152757,152486],{"class":105},[95,152759,151],{"class":101},[95,152761,152491],{"class":105},[95,152763,152764],{"class":97,"line":32738},[95,152765,2382],{"emptyLinePlaceholder":21},[95,152767,152768,152770,152772,152774,152776],{"class":97,"line":32758},[95,152769,3083],{"class":101},[95,152771,152114],{"class":105},[95,152773,38912],{"class":101},[95,152775,38918],{"class":154},[95,152777,3721],{"class":105},[95,152779,152780,152782,152784,152786],{"class":97,"line":32764},[95,152781,32436],{"class":154},[95,152783,106],{"class":105},[95,152785,152516],{"class":210},[95,152787,112],{"class":105},[95,152789,152790],{"class":97,"line":32780},[95,152791,152338],{"class":101},[95,152793,152794],{"class":97,"line":32786},[95,152795,2382],{"emptyLinePlaceholder":21},[95,152797,152798],{"class":97,"line":32800},[95,152799,152800],{"class":105},"    print_student(student)\n",[95,152802,152803],{"class":97,"line":32806},[95,152804,2382],{"emptyLinePlaceholder":21},[95,152806,152807],{"class":97,"line":32821},[95,152808,2382],{"emptyLinePlaceholder":21},[95,152810,152811,152813,152816],{"class":97,"line":32827},[95,152812,31932],{"class":101},[95,152814,152815],{"class":1945}," print_student",[95,152817,152818],{"class":105},"(student):\n",[95,152820,152821,152823],{"class":97,"line":32836},[95,152822,31284],{"class":154},[95,152824,151416],{"class":105},[95,152826,152827,152830,152832,152834,152837,152840,152842,152845],{"class":97,"line":32842},[95,152828,152829],{"class":101},"        f",[95,152831,357],{"class":210},[95,152833,1002],{"class":154},[95,152835,152836],{"class":105},"student[",[95,152838,152839],{"class":210},"'student_id'",[95,152841,1046],{"class":105},[95,152843,152844],{"class":154},"}\\t",[95,152846,25118],{"class":210},[95,152848,152849,152851,152853,152855,152857,152860,152862,152864],{"class":97,"line":32851},[95,152850,152829],{"class":101},[95,152852,357],{"class":210},[95,152854,1002],{"class":154},[95,152856,152836],{"class":105},[95,152858,152859],{"class":210},"'name'",[95,152861,1046],{"class":105},[95,152863,152844],{"class":154},[95,152865,25118],{"class":210},[95,152867,152868,152870,152872,152874,152876,152879,152881,152883],{"class":97,"line":32857},[95,152869,152829],{"class":101},[95,152871,357],{"class":210},[95,152873,1002],{"class":154},[95,152875,152836],{"class":105},[95,152877,152878],{"class":210},"'age'",[95,152880,1046],{"class":105},[95,152882,152844],{"class":154},[95,152884,25118],{"class":210},[95,152886,152887,152889,152891,152893,152895,152898,152900,152902],{"class":97,"line":32863},[95,152888,152829],{"class":101},[95,152890,357],{"class":210},[95,152892,1002],{"class":154},[95,152894,152836],{"class":105},[95,152896,152897],{"class":210},"'score'",[95,152899,1046],{"class":105},[95,152901,1052],{"class":154},[95,152903,25118],{"class":210},[95,152905,152906],{"class":97,"line":32872},[95,152907,152908],{"class":105},"    )\n",[95,152910,152911],{"class":97,"line":32878},[95,152912,2382],{"emptyLinePlaceholder":21},[95,152914,152915],{"class":97,"line":32889},[95,152916,2382],{"emptyLinePlaceholder":21},[95,152918,152919,152921,152924],{"class":97,"line":32895},[95,152920,31932],{"class":101},[95,152922,152923],{"class":1945}," show_all_students",[95,152925,151938],{"class":105},[95,152927,152928,152930,152932],{"class":97,"line":32914},[95,152929,3083],{"class":101},[95,152931,38915],{"class":101},[95,152933,152119],{"class":105},[95,152935,152936,152938,152940,152943],{"class":97,"line":32920},[95,152937,32436],{"class":154},[95,152939,106],{"class":105},[95,152941,152942],{"class":210},"\"暂无学生\"",[95,152944,112],{"class":105},[95,152946,152947],{"class":97,"line":32931},[95,152948,152338],{"class":101},[95,152950,152951],{"class":97,"line":32937},[95,152952,2382],{"emptyLinePlaceholder":21},[95,152954,152955,152957,152959,152962,152964,152967,152969,152972,152974,152977],{"class":97,"line":32957},[95,152956,31284],{"class":154},[95,152958,106],{"class":105},[95,152960,152961],{"class":210},"\"学号",[95,152963,1212],{"class":154},[95,152965,152966],{"class":210},"姓名",[95,152968,1212],{"class":154},[95,152970,152971],{"class":210},"年龄",[95,152973,1212],{"class":154},[95,152975,152976],{"class":210},"成绩\"",[95,152978,112],{"class":105},[95,152980,152981,152983,152985,152987],{"class":97,"line":32973},[95,152982,3183],{"class":101},[95,152984,152114],{"class":105},[95,152986,26028],{"class":101},[95,152988,152119],{"class":105},[95,152990,152991],{"class":97,"line":32979},[95,152992,152993],{"class":105},"        print_student(student)\n",[95,152995,152996],{"class":97,"line":32993},[95,152997,2382],{"emptyLinePlaceholder":21},[95,152999,153000],{"class":97,"line":32999},[95,153001,2382],{"emptyLinePlaceholder":21},[95,153003,153004,153006,153008],{"class":97,"line":33005},[95,153005,31932],{"class":101},[95,153007,1955],{"class":1945},[95,153009,31938],{"class":105},[95,153011,153012,153015,153017],{"class":97,"line":33016},[95,153013,153014],{"class":105},"    students ",[95,153016,151],{"class":101},[95,153018,153019],{"class":105}," load_students()\n",[95,153021,153022],{"class":97,"line":33022},[95,153023,2382],{"emptyLinePlaceholder":21},[95,153025,153026,153028,153030],{"class":97,"line":33028},[95,153027,2233],{"class":101},[95,153029,95269],{"class":154},[95,153031,3721],{"class":105},[95,153033,153034],{"class":97,"line":33038},[95,153035,153036],{"class":105},"        show_menu()\n",[95,153038,153039,153042,153044,153046,153048,153051],{"class":97,"line":33044},[95,153040,153041],{"class":105},"        choice ",[95,153043,151],{"class":101},[95,153045,60582],{"class":154},[95,153047,106],{"class":105},[95,153049,153050],{"class":210},"\"请输入操作:\"",[95,153052,112],{"class":105},[95,153054,153055],{"class":97,"line":33055},[95,153056,2382],{"emptyLinePlaceholder":21},[95,153058,153059,153061,153064,153066,153069],{"class":97,"line":33061},[95,153060,2479],{"class":101},[95,153062,153063],{"class":105}," choice ",[95,153065,2931],{"class":101},[95,153067,153068],{"class":210}," \"1\"",[95,153070,3721],{"class":105},[95,153072,153073],{"class":97,"line":33071},[95,153074,153075],{"class":105},"            add_student(students)\n",[95,153077,153078,153081,153083,153085,153088],{"class":97,"line":33076},[95,153079,153080],{"class":101},"        elif",[95,153082,153063],{"class":105},[95,153084,2931],{"class":101},[95,153086,153087],{"class":210}," \"2\"",[95,153089,3721],{"class":105},[95,153091,153092],{"class":97,"line":33082},[95,153093,153094],{"class":105},"            delete_student(students)\n",[95,153096,153097,153099,153101,153103,153106],{"class":97,"line":33131},[95,153098,153080],{"class":101},[95,153100,153063],{"class":105},[95,153102,2931],{"class":101},[95,153104,153105],{"class":210}," \"3\"",[95,153107,3721],{"class":105},[95,153109,153110],{"class":97,"line":33178},[95,153111,153112],{"class":105},"            update_student(students)\n",[95,153114,153115,153117,153119,153121,153124],{"class":97,"line":33183},[95,153116,153080],{"class":101},[95,153118,153063],{"class":105},[95,153120,2931],{"class":101},[95,153122,153123],{"class":210}," \"4\"",[95,153125,3721],{"class":105},[95,153127,153128],{"class":97,"line":33189},[95,153129,153130],{"class":105},"            query_student(students)\n",[95,153132,153133,153135,153137,153139,153142],{"class":97,"line":33208},[95,153134,153080],{"class":101},[95,153136,153063],{"class":105},[95,153138,2931],{"class":101},[95,153140,153141],{"class":210}," \"5\"",[95,153143,3721],{"class":105},[95,153145,153146],{"class":97,"line":33214},[95,153147,153148],{"class":105},"            show_all_students(students)\n",[95,153150,153151,153153,153155,153157,153160],{"class":97,"line":33234},[95,153152,153080],{"class":101},[95,153154,153063],{"class":105},[95,153156,2931],{"class":101},[95,153158,153159],{"class":210}," \"0\"",[95,153161,3721],{"class":105},[95,153163,153164,153166,153168,153171],{"class":97,"line":33240},[95,153165,34635],{"class":154},[95,153167,106],{"class":105},[95,153169,153170],{"class":210},"\"退出系统\"",[95,153172,112],{"class":105},[95,153174,153175],{"class":97,"line":33246},[95,153176,115075],{"class":101},[95,153178,153179,153181],{"class":97,"line":33256},[95,153180,2516],{"class":101},[95,153182,3721],{"class":105},[95,153184,153185,153187,153189,153192],{"class":97,"line":33261},[95,153186,34635],{"class":154},[95,153188,106],{"class":105},[95,153190,153191],{"class":210},"\"输入错误\"",[95,153193,112],{"class":105},[95,153195,153196],{"class":97,"line":33267},[95,153197,2382],{"emptyLinePlaceholder":21},[95,153199,153200],{"class":97,"line":33283},[95,153201,2382],{"emptyLinePlaceholder":21},[95,153203,153204,153206,153208,153210,153212],{"class":97,"line":33328},[95,153205,1513],{"class":101},[95,153207,31205],{"class":154},[95,153209,101536],{"class":101},[95,153211,101539],{"class":210},[95,153213,3721],{"class":105},[95,153215,153216],{"class":97,"line":33334},[95,153217,101546],{"class":105},[10,153219,153220],{},"这个项目串联了：",[49,153222,153223,153226,153229,153232,153235,153237],{},[52,153224,153225],{},"菜单循环。",[52,153227,153228],{},"函数封装。",[52,153230,153231],{},"列表字典。",[52,153233,153234],{},"JSON 读写。",[52,153236,151704],{},[52,153238,153239,28370],{},[92,153240,153241],{},"if __name__ == \"__main__\"",[37,153243,153245],{"id":153244},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[10,153247,153248],{},"可以进一步拆成两个类：",[49,153250,153251,153256],{},[52,153252,153253,153255],{},[92,153254,149545],{},"：表示单个学生。",[52,153257,153258,153260],{},[92,153259,151571],{},"：负责学生增删改查和文件保存。",[10,153262,153263],{},"示意代码：",[86,153265,153267],{"className":30363,"code":153266,"language":30365,"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",[92,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},[95,153270,153271,153273,153275,153277],{"class":97,"line":98},[95,153272,30722],{"class":101},[95,153274,151129],{"class":105},[95,153276,30377],{"class":101},[95,153278,151134],{"class":105},[95,153280,153281],{"class":97,"line":15},[95,153282,2382],{"emptyLinePlaceholder":21},[95,153284,153285],{"class":97,"line":1161},[95,153286,2382],{"emptyLinePlaceholder":21},[95,153288,153289],{"class":97,"line":1176},[95,153290,151147],{"class":1945},[95,153292,153293,153295,153297],{"class":97,"line":1182},[95,153294,14677],{"class":101},[95,153296,7881],{"class":1945},[95,153298,3721],{"class":105},[95,153300,153301,153304],{"class":97,"line":1196},[95,153302,153303],{"class":105},"    student_id: ",[95,153305,151163],{"class":154},[95,153307,153308,153310],{"class":97,"line":1202},[95,153309,151160],{"class":105},[95,153311,151163],{"class":154},[95,153313,153314,153316],{"class":97,"line":1293},[95,153315,151168],{"class":105},[95,153317,151171],{"class":154},[95,153319,153320,153322],{"class":97,"line":1299},[95,153321,151176],{"class":105},[95,153323,151179],{"class":154},[95,153325,153326],{"class":97,"line":1311},[95,153327,2382],{"emptyLinePlaceholder":21},[95,153329,153330,153332,153334],{"class":97,"line":1594},[95,153331,30786],{"class":101},[95,153333,151327],{"class":1945},[95,153335,30792],{"class":105},[95,153337,153338,153340],{"class":97,"line":1599},[95,153339,14735],{"class":101},[95,153341,15555],{"class":105},[95,153343,153344,153346,153348,153350],{"class":97,"line":1605},[95,153345,151340],{"class":210},[95,153347,51414],{"class":105},[95,153349,30808],{"class":154},[95,153351,151347],{"class":105},[95,153353,153354,153356,153358,153360],{"class":97,"line":1610},[95,153355,151352],{"class":210},[95,153357,51414],{"class":105},[95,153359,30808],{"class":154},[95,153361,151359],{"class":105},[95,153363,153364,153366,153368,153370],{"class":97,"line":1624},[95,153365,151364],{"class":210},[95,153367,51414],{"class":105},[95,153369,30808],{"class":154},[95,153371,151371],{"class":105},[95,153373,153374,153376,153378,153380],{"class":97,"line":1629},[95,153375,151376],{"class":210},[95,153377,51414],{"class":105},[95,153379,30808],{"class":154},[95,153381,151383],{"class":105},[95,153383,153384],{"class":97,"line":1635},[95,153385,2511],{"class":105},[95,153387,153388],{"class":97,"line":1656},[95,153389,2382],{"emptyLinePlaceholder":21},[95,153391,153392,153394],{"class":97,"line":1661},[95,153393,150991],{"class":1945},[95,153395,150994],{"class":154},[95,153397,153398,153400,153402],{"class":97,"line":1675},[95,153399,30786],{"class":101},[95,153401,151404],{"class":1945},[95,153403,151407],{"class":105},[95,153405,153406,153408,153410],{"class":97,"line":1680},[95,153407,14735],{"class":101},[95,153409,151011],{"class":154},[95,153411,151416],{"class":105},[95,153413,153414,153416,153418],{"class":97,"line":1709},[95,153415,151421],{"class":105},[95,153417,151424],{"class":210},[95,153419,87813],{"class":105},[95,153421,153422,153424,153426],{"class":97,"line":1714},[95,153423,151421],{"class":105},[95,153425,62656],{"class":210},[95,153427,87813],{"class":105},[95,153429,153430,153432,153434],{"class":97,"line":1731},[95,153431,151421],{"class":105},[95,153433,69101],{"class":210},[95,153435,87813],{"class":105},[95,153437,153438,153440,153442],{"class":97,"line":1736},[95,153439,151421],{"class":105},[95,153441,151449],{"class":210},[95,153443,87813],{"class":105},[95,153445,153446],{"class":97,"line":1741},[95,153447,38111],{"class":105},[10,153449,153450],{},"管理器示意：",[86,153452,153454],{"className":30363,"code":153453,"language":30365,"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",[92,153455,153456,153465,153473,153484,153488,153498,153511,153522,153529,153535,153539,153548,153557,153563,153570],{"__ignoreMap":14},[95,153457,153458,153460,153463],{"class":97,"line":98},[95,153459,14677],{"class":101},[95,153461,153462],{"class":1945}," StudentManager",[95,153464,3721],{"class":105},[95,153466,153467,153469,153471],{"class":97,"line":15},[95,153468,30786],{"class":101},[95,153470,30789],{"class":154},[95,153472,30792],{"class":105},[95,153474,153475,153477,153480,153482],{"class":97,"line":1161},[95,153476,30830],{"class":154},[95,153478,153479],{"class":105},".students ",[95,153481,151],{"class":101},[95,153483,51815],{"class":105},[95,153485,153486],{"class":97,"line":1176},[95,153487,2382],{"emptyLinePlaceholder":21},[95,153489,153490,153492,153495],{"class":97,"line":1182},[95,153491,30786],{"class":101},[95,153493,153494],{"class":1945}," find_by_id",[95,153496,153497],{"class":105},"(self, student_id):\n",[95,153499,153500,153502,153504,153506,153508],{"class":97,"line":1196},[95,153501,3385],{"class":101},[95,153503,152114],{"class":105},[95,153505,26028],{"class":101},[95,153507,38858],{"class":154},[95,153509,153510],{"class":105},".students:\n",[95,153512,153513,153515,153518,153520],{"class":97,"line":1202},[95,153514,4624],{"class":101},[95,153516,153517],{"class":105}," student.student_id ",[95,153519,2931],{"class":101},[95,153521,152135],{"class":105},[95,153523,153524,153527],{"class":97,"line":1293},[95,153525,153526],{"class":101},"                return",[95,153528,152142],{"class":105},[95,153530,153531,153533],{"class":97,"line":1299},[95,153532,14735],{"class":101},[95,153534,152149],{"class":154},[95,153536,153537],{"class":97,"line":1311},[95,153538,2382],{"emptyLinePlaceholder":21},[95,153540,153541,153543,153545],{"class":97,"line":1594},[95,153542,30786],{"class":101},[95,153544,5192],{"class":1945},[95,153546,153547],{"class":105},"(self, student):\n",[95,153549,153550,153552,153554],{"class":97,"line":1599},[95,153551,2479],{"class":101},[95,153553,38858],{"class":154},[95,153555,153556],{"class":105},".find_by_id(student.student_id):\n",[95,153558,153559,153561],{"class":97,"line":1605},[95,153560,15715],{"class":101},[95,153562,125784],{"class":154},[95,153564,153565,153567],{"class":97,"line":1610},[95,153566,30830],{"class":154},[95,153568,153569],{"class":105},".students.append(student)\n",[95,153571,153572,153574],{"class":97,"line":1624},[95,153573,14735],{"class":101},[95,153575,153576],{"class":154}," True\n",[10,153578,153579],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[37,153581,153583],{"id":153582},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[66,153585,153587],{"id":153586},"_1251-数据结构","12.5.1 数据结构",[86,153589,153591],{"className":30363,"code":153590,"language":30365,"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",[92,153592,153593,153601,153632,153662,153691,153720],{"__ignoreMap":14},[95,153594,153595,153597,153599],{"class":97,"line":98},[95,153596,148442],{"class":105},[95,153598,151],{"class":101},[95,153600,55424],{"class":105},[95,153602,153603,153605,153607,153609,153611,153613,153616,153618,153621,153623,153625,153627,153630],{"class":97,"line":15},[95,153604,148362],{"class":105},[95,153606,147974],{"class":210},[95,153608,51414],{"class":105},[95,153610,148585],{"class":210},[95,153612,12418],{"class":105},[95,153614,153615],{"class":210},"\"category\"",[95,153617,51414],{"class":105},[95,153619,153620],{"class":210},"\"手机\"",[95,153622,12418],{"class":105},[95,153624,84061],{"class":210},[95,153626,51414],{"class":105},[95,153628,153629],{"class":154},"12000",[95,153631,4912],{"class":105},[95,153633,153634,153636,153638,153640,153642,153644,153646,153648,153651,153653,153655,153657,153660],{"class":97,"line":1161},[95,153635,148362],{"class":105},[95,153637,147974],{"class":210},[95,153639,51414],{"class":105},[95,153641,148585],{"class":210},[95,153643,12418],{"class":105},[95,153645,153615],{"class":210},[95,153647,51414],{"class":105},[95,153649,153650],{"class":210},"\"电脑\"",[95,153652,12418],{"class":105},[95,153654,84061],{"class":210},[95,153656,51414],{"class":105},[95,153658,153659],{"class":154},"18000",[95,153661,4912],{"class":105},[95,153663,153664,153666,153668,153670,153672,153674,153676,153678,153680,153682,153684,153686,153689],{"class":97,"line":1176},[95,153665,148362],{"class":105},[95,153667,147974],{"class":210},[95,153669,51414],{"class":105},[95,153671,148606],{"class":210},[95,153673,12418],{"class":105},[95,153675,153615],{"class":210},[95,153677,51414],{"class":105},[95,153679,153620],{"class":210},[95,153681,12418],{"class":105},[95,153683,84061],{"class":210},[95,153685,51414],{"class":105},[95,153687,153688],{"class":154},"15000",[95,153690,4912],{"class":105},[95,153692,153693,153695,153697,153699,153701,153703,153705,153707,153709,153711,153713,153715,153718],{"class":97,"line":1182},[95,153694,148362],{"class":105},[95,153696,147974],{"class":210},[95,153698,51414],{"class":105},[95,153700,148606],{"class":210},[95,153702,12418],{"class":105},[95,153704,153615],{"class":210},[95,153706,51414],{"class":105},[95,153708,153650],{"class":210},[95,153710,12418],{"class":105},[95,153712,84061],{"class":210},[95,153714,51414],{"class":105},[95,153716,153717],{"class":154},"16000",[95,153719,4912],{"class":105},[95,153721,153722],{"class":97,"line":1196},[95,153723,33231],{"class":105},[66,153725,153727],{"id":153726},"_1252-按日期统计","12.5.2 按日期统计",[86,153729,153731],{"className":30363,"code":153730,"language":30365,"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",[92,153732,153733,153742,153746,153757,153771,153784,153803,153807],{"__ignoreMap":14},[95,153734,153735,153738,153740],{"class":97,"line":98},[95,153736,153737],{"class":105},"daily_total ",[95,153739,151],{"class":101},[95,153741,87845],{"class":105},[95,153743,153744],{"class":97,"line":15},[95,153745,2382],{"emptyLinePlaceholder":21},[95,153747,153748,153750,153752,153754],{"class":97,"line":1161},[95,153749,3007],{"class":101},[95,153751,148186],{"class":105},[95,153753,26028],{"class":101},[95,153755,153756],{"class":105}," sales:\n",[95,153758,153759,153762,153764,153767,153769],{"class":97,"line":1176},[95,153760,153761],{"class":105},"    date ",[95,153763,151],{"class":101},[95,153765,153766],{"class":105}," item[",[95,153768,147974],{"class":210},[95,153770,33231],{"class":105},[95,153772,153773,153776,153778,153780,153782],{"class":97,"line":1182},[95,153774,153775],{"class":105},"    amount ",[95,153777,151],{"class":101},[95,153779,153766],{"class":105},[95,153781,84061],{"class":210},[95,153783,33231],{"class":105},[95,153785,153786,153789,153791,153794,153796,153798,153800],{"class":97,"line":1196},[95,153787,153788],{"class":105},"    daily_total[date] ",[95,153790,151],{"class":101},[95,153792,153793],{"class":105}," daily_total.get(date, ",[95,153795,297],{"class":154},[95,153797,13697],{"class":105},[95,153799,587],{"class":101},[95,153801,153802],{"class":105}," amount\n",[95,153804,153805],{"class":97,"line":1202},[95,153806,2382],{"emptyLinePlaceholder":21},[95,153808,153809,153811],{"class":97,"line":1293},[95,153810,30400],{"class":154},[95,153812,153813],{"class":105},"(daily_total)\n",[66,153815,153817],{"id":153816},"_1253-按类别统计","12.5.3 按类别统计",[86,153819,153821],{"className":30363,"code":153820,"language":30365,"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",[92,153822,153823,153832,153836,153846,153859,153871,153889,153893],{"__ignoreMap":14},[95,153824,153825,153828,153830],{"class":97,"line":98},[95,153826,153827],{"class":105},"category_total ",[95,153829,151],{"class":101},[95,153831,87845],{"class":105},[95,153833,153834],{"class":97,"line":15},[95,153835,2382],{"emptyLinePlaceholder":21},[95,153837,153838,153840,153842,153844],{"class":97,"line":1161},[95,153839,3007],{"class":101},[95,153841,148186],{"class":105},[95,153843,26028],{"class":101},[95,153845,153756],{"class":105},[95,153847,153848,153851,153853,153855,153857],{"class":97,"line":1176},[95,153849,153850],{"class":105},"    category ",[95,153852,151],{"class":101},[95,153854,153766],{"class":105},[95,153856,153615],{"class":210},[95,153858,33231],{"class":105},[95,153860,153861,153863,153865,153867,153869],{"class":97,"line":1182},[95,153862,153775],{"class":105},[95,153864,151],{"class":101},[95,153866,153766],{"class":105},[95,153868,84061],{"class":210},[95,153870,33231],{"class":105},[95,153872,153873,153876,153878,153881,153883,153885,153887],{"class":97,"line":1196},[95,153874,153875],{"class":105},"    category_total[category] ",[95,153877,151],{"class":101},[95,153879,153880],{"class":105}," category_total.get(category, ",[95,153882,297],{"class":154},[95,153884,13697],{"class":105},[95,153886,587],{"class":101},[95,153888,153802],{"class":105},[95,153890,153891],{"class":97,"line":1202},[95,153892,2382],{"emptyLinePlaceholder":21},[95,153894,153895,153897],{"class":97,"line":1293},[95,153896,30400],{"class":154},[95,153898,153899],{"class":105},"(category_total)\n",[66,153901,153903],{"id":153902},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[86,153905,153907],{"className":30363,"code":153906,"language":30365,"meta":14,"style":14},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[92,153908,153909,153934],{"__ignoreMap":14},[95,153910,153911,153914,153916,153918,153921,153924,153927,153930,153932],{"class":97,"line":98},[95,153912,153913],{"class":105},"top_date, top_amount ",[95,153915,151],{"class":101},[95,153917,5934],{"class":154},[95,153919,153920],{"class":105},"(daily_total.items(), ",[95,153922,153923],{"class":5199},"key",[95,153925,153926],{"class":101},"=lambda",[95,153928,153929],{"class":105}," item: item[",[95,153931,323],{"class":154},[95,153933,4639],{"class":105},[95,153935,153936,153938],{"class":97,"line":15},[95,153937,30400],{"class":154},[95,153939,153940],{"class":105},"(top_date, top_amount)\n",[37,153942,153944],{"id":153943},"_126-绘制柱状图","12.6 绘制柱状图",[86,153946,153948],{"className":30363,"code":153947,"language":30365,"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",[92,153949,153950,153964,153975,153979,153987,153999,154011,154022,154026,154030,154040,154051,154065,154070,154087,154104,154120,154124],{"__ignoreMap":14},[95,153951,153952,153954,153956,153958,153960,153962],{"class":97,"line":98},[95,153953,30722],{"class":101},[95,153955,147356],{"class":105},[95,153957,30377],{"class":101},[95,153959,147361],{"class":105},[95,153961,31368],{"class":101},[95,153963,147366],{"class":105},[95,153965,153966,153968,153970,153972],{"class":97,"line":15},[95,153967,30722],{"class":101},[95,153969,147215],{"class":105},[95,153971,30377],{"class":101},[95,153973,153974],{"class":105}," Bar\n",[95,153976,153977],{"class":97,"line":1161},[95,153978,2382],{"emptyLinePlaceholder":21},[95,153980,153981,153983,153985],{"class":97,"line":1176},[95,153982,153827],{"class":105},[95,153984,151],{"class":101},[95,153986,15555],{"class":105},[95,153988,153989,153992,153994,153997],{"class":97,"line":1182},[95,153990,153991],{"class":210},"    \"手机\"",[95,153993,51414],{"class":105},[95,153995,153996],{"class":154},"27000",[95,153998,31451],{"class":105},[95,154000,154001,154004,154006,154009],{"class":97,"line":1196},[95,154002,154003],{"class":210},"    \"电脑\"",[95,154005,51414],{"class":105},[95,154007,154008],{"class":154},"34000",[95,154010,31451],{"class":105},[95,154012,154013,154016,154018,154020],{"class":97,"line":1202},[95,154014,154015],{"class":210},"    \"耳机\"",[95,154017,51414],{"class":105},[95,154019,124376],{"class":154},[95,154021,31451],{"class":105},[95,154023,154024],{"class":97,"line":1293},[95,154025,1547],{"class":105},[95,154027,154028],{"class":97,"line":1299},[95,154029,2382],{"emptyLinePlaceholder":21},[95,154031,154032,154035,154037],{"class":97,"line":1311},[95,154033,154034],{"class":105},"bar ",[95,154036,151],{"class":101},[95,154038,154039],{"class":105}," Bar()\n",[95,154041,154042,154045,154048],{"class":97,"line":1594},[95,154043,154044],{"class":105},"bar.add_xaxis(",[95,154046,154047],{"class":154},"list",[95,154049,154050],{"class":105},"(category_total.keys()))\n",[95,154052,154053,154056,154058,154060,154062],{"class":97,"line":1599},[95,154054,154055],{"class":105},"bar.add_yaxis(",[95,154057,147272],{"class":210},[95,154059,12418],{"class":105},[95,154061,154047],{"class":154},[95,154063,154064],{"class":105},"(category_total.values()))\n",[95,154066,154067],{"class":97,"line":1605},[95,154068,154069],{"class":105},"bar.set_global_opts(\n",[95,154071,154072,154074,154076,154078,154080,154082,154085],{"class":97,"line":1610},[95,154073,147450],{"class":5199},[95,154075,151],{"class":101},[95,154077,147455],{"class":105},[95,154079,51384],{"class":5199},[95,154081,151],{"class":101},[95,154083,154084],{"class":210},"\"品类销售额\"",[95,154086,38032],{"class":105},[95,154088,154089,154091,154093,154095,154097,154099,154102],{"class":97,"line":1624},[95,154090,147469],{"class":5199},[95,154092,151],{"class":101},[95,154094,147474],{"class":105},[95,154096,79787],{"class":5199},[95,154098,151],{"class":101},[95,154100,154101],{"class":210},"\"品类\"",[95,154103,38032],{"class":105},[95,154105,154106,154108,154110,154112,154114,154116,154118],{"class":97,"line":1629},[95,154107,147488],{"class":5199},[95,154109,151],{"class":101},[95,154111,147474],{"class":105},[95,154113,79787],{"class":5199},[95,154115,151],{"class":101},[95,154117,147272],{"class":210},[95,154119,38032],{"class":105},[95,154121,154122],{"class":97,"line":1635},[95,154123,112],{"class":105},[95,154125,154126,154129,154132],{"class":97,"line":1656},[95,154127,154128],{"class":105},"bar.render(",[95,154130,154131],{"class":210},"\"category_sales.html\"",[95,154133,112],{"class":105},[37,154135,154137],{"id":154136},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[10,154139,154140],{},"时间线适合展示不同日期、月份、年份的数据变化。",[86,154142,154144],{"className":30363,"code":154143,"language":30365,"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",[92,154145,154146,154160,154171,154175,154183,154207,154230,154255,154259,154263,154273,154277,154288,154297,154307,154321,154352,154357,154361],{"__ignoreMap":14},[95,154147,154148,154150,154152,154154,154156,154158],{"class":97,"line":98},[95,154149,30722],{"class":101},[95,154151,147356],{"class":105},[95,154153,30377],{"class":101},[95,154155,147361],{"class":105},[95,154157,31368],{"class":101},[95,154159,147366],{"class":105},[95,154161,154162,154164,154166,154168],{"class":97,"line":15},[95,154163,30722],{"class":101},[95,154165,147215],{"class":105},[95,154167,30377],{"class":101},[95,154169,154170],{"class":105}," Bar, Timeline\n",[95,154172,154173],{"class":97,"line":1161},[95,154174,2382],{"emptyLinePlaceholder":21},[95,154176,154177,154179,154181],{"class":97,"line":1176},[95,154178,101635],{"class":105},[95,154180,151],{"class":101},[95,154182,15555],{"class":105},[95,154184,154185,154188,154191,154193,154195,154197,154199,154201,154203,154205],{"class":97,"line":1182},[95,154186,154187],{"class":210},"    \"2024-10-01\"",[95,154189,154190],{"class":105},": {",[95,154192,153620],{"class":210},[95,154194,51414],{"class":105},[95,154196,153629],{"class":154},[95,154198,12418],{"class":105},[95,154200,153650],{"class":210},[95,154202,51414],{"class":105},[95,154204,153659],{"class":154},[95,154206,4912],{"class":105},[95,154208,154209,154212,154214,154216,154218,154220,154222,154224,154226,154228],{"class":97,"line":1196},[95,154210,154211],{"class":210},"    \"2024-10-02\"",[95,154213,154190],{"class":105},[95,154215,153620],{"class":210},[95,154217,51414],{"class":105},[95,154219,153688],{"class":154},[95,154221,12418],{"class":105},[95,154223,153650],{"class":210},[95,154225,51414],{"class":105},[95,154227,153717],{"class":154},[95,154229,4912],{"class":105},[95,154231,154232,154235,154237,154239,154241,154244,154246,154248,154250,154253],{"class":97,"line":1202},[95,154233,154234],{"class":210},"    \"2024-10-03\"",[95,154236,154190],{"class":105},[95,154238,153620],{"class":210},[95,154240,51414],{"class":105},[95,154242,154243],{"class":154},"17000",[95,154245,12418],{"class":105},[95,154247,153650],{"class":210},[95,154249,51414],{"class":105},[95,154251,154252],{"class":154},"19000",[95,154254,4912],{"class":105},[95,154256,154257],{"class":97,"line":1293},[95,154258,1547],{"class":105},[95,154260,154261],{"class":97,"line":1299},[95,154262,2382],{"emptyLinePlaceholder":21},[95,154264,154265,154268,154270],{"class":97,"line":1311},[95,154266,154267],{"class":105},"timeline ",[95,154269,151],{"class":101},[95,154271,154272],{"class":105}," Timeline()\n",[95,154274,154275],{"class":97,"line":1594},[95,154276,2382],{"emptyLinePlaceholder":21},[95,154278,154279,154281,154284,154286],{"class":97,"line":1599},[95,154280,3007],{"class":101},[95,154282,154283],{"class":105}," date, category_data ",[95,154285,26028],{"class":101},[95,154287,149125],{"class":105},[95,154289,154290,154293,154295],{"class":97,"line":1605},[95,154291,154292],{"class":105},"    bar ",[95,154294,151],{"class":101},[95,154296,154039],{"class":105},[95,154298,154299,154302,154304],{"class":97,"line":1610},[95,154300,154301],{"class":105},"    bar.add_xaxis(",[95,154303,154047],{"class":154},[95,154305,154306],{"class":105},"(category_data.keys()))\n",[95,154308,154309,154312,154314,154316,154318],{"class":97,"line":1624},[95,154310,154311],{"class":105},"    bar.add_yaxis(",[95,154313,147272],{"class":210},[95,154315,12418],{"class":105},[95,154317,154047],{"class":154},[95,154319,154320],{"class":105},"(category_data.values()))\n",[95,154322,154323,154326,154329,154331,154333,154335,154337,154339,154341,154343,154345,154347,154350],{"class":97,"line":1629},[95,154324,154325],{"class":105},"    bar.set_global_opts(",[95,154327,154328],{"class":5199},"title_opts",[95,154330,151],{"class":101},[95,154332,147455],{"class":105},[95,154334,51384],{"class":5199},[95,154336,151],{"class":101},[95,154338,158],{"class":101},[95,154340,357],{"class":210},[95,154342,1002],{"class":154},[95,154344,73903],{"class":105},[95,154346,1052],{"class":154},[95,154348,154349],{"class":210},"销售额\"",[95,154351,30482],{"class":105},[95,154353,154354],{"class":97,"line":1635},[95,154355,154356],{"class":105},"    timeline.add(bar, date)\n",[95,154358,154359],{"class":97,"line":1656},[95,154360,2382],{"emptyLinePlaceholder":21},[95,154362,154363,154366,154369],{"class":97,"line":1661},[95,154364,154365],{"class":105},"timeline.render(",[95,154367,154368],{"class":210},"\"timeline_sales.html\"",[95,154370,112],{"class":105},[37,154372,154374],{"id":154373},"_128-绘制地图","12.8 绘制地图",[10,154376,154377],{},"地图适合展示地区数据。",[86,154379,154381],{"className":30363,"code":154380,"language":30365,"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",[92,154382,154383,154397,154408,154412,154420,154433,154445,154458,154471,154475,154479,154489,154504,154509,154526,154545,154549],{"__ignoreMap":14},[95,154384,154385,154387,154389,154391,154393,154395],{"class":97,"line":98},[95,154386,30722],{"class":101},[95,154388,147356],{"class":105},[95,154390,30377],{"class":101},[95,154392,147361],{"class":105},[95,154394,31368],{"class":101},[95,154396,147366],{"class":105},[95,154398,154399,154401,154403,154405],{"class":97,"line":15},[95,154400,30722],{"class":101},[95,154402,147215],{"class":105},[95,154404,30377],{"class":101},[95,154406,154407],{"class":105}," Map\n",[95,154409,154410],{"class":97,"line":1161},[95,154411,2382],{"emptyLinePlaceholder":21},[95,154413,154414,154416,154418],{"class":97,"line":1176},[95,154415,101635],{"class":105},[95,154417,151],{"class":101},[95,154419,55424],{"class":105},[95,154421,154422,154425,154427,154429,154431],{"class":97,"line":1182},[95,154423,154424],{"class":105},"    (",[95,154426,69246],{"class":210},[95,154428,12418],{"class":105},[95,154430,923],{"class":154},[95,154432,38032],{"class":105},[95,154434,154435,154437,154439,154441,154443],{"class":97,"line":1196},[95,154436,154424],{"class":105},[95,154438,69266],{"class":210},[95,154440,12418],{"class":105},[95,154442,147289],{"class":154},[95,154444,38032],{"class":105},[95,154446,154447,154449,154452,154454,154456],{"class":97,"line":1202},[95,154448,154424],{"class":105},[95,154450,154451],{"class":210},"\"广东\"",[95,154453,12418],{"class":105},[95,154455,1704],{"class":154},[95,154457,38032],{"class":105},[95,154459,154460,154462,154465,154467,154469],{"class":97,"line":1293},[95,154461,154424],{"class":105},[95,154463,154464],{"class":210},"\"浙江\"",[95,154466,12418],{"class":105},[95,154468,147294],{"class":154},[95,154470,38032],{"class":105},[95,154472,154473],{"class":97,"line":1299},[95,154474,33231],{"class":105},[95,154476,154477],{"class":97,"line":1311},[95,154478,2382],{"emptyLinePlaceholder":21},[95,154480,154481,154484,154486],{"class":97,"line":1594},[95,154482,154483],{"class":105},"map_chart ",[95,154485,151],{"class":101},[95,154487,154488],{"class":105}," Map()\n",[95,154490,154491,154494,154496,154499,154502],{"class":97,"line":1599},[95,154492,154493],{"class":105},"map_chart.add(",[95,154495,147272],{"class":210},[95,154497,154498],{"class":105},", data, ",[95,154500,154501],{"class":210},"\"china\"",[95,154503,112],{"class":105},[95,154505,154506],{"class":97,"line":1605},[95,154507,154508],{"class":105},"map_chart.set_global_opts(\n",[95,154510,154511,154513,154515,154517,154519,154521,154524],{"class":97,"line":1610},[95,154512,147450],{"class":5199},[95,154514,151],{"class":101},[95,154516,147455],{"class":105},[95,154518,51384],{"class":5199},[95,154520,151],{"class":101},[95,154522,154523],{"class":210},"\"地区销售额\"",[95,154525,38032],{"class":105},[95,154527,154528,154531,154533,154536,154539,154541,154543],{"class":97,"line":1624},[95,154529,154530],{"class":5199},"    visualmap_opts",[95,154532,151],{"class":101},[95,154534,154535],{"class":105},"opts.VisualMapOpts(",[95,154537,154538],{"class":5199},"max_",[95,154540,151],{"class":101},[95,154542,1704],{"class":154},[95,154544,38032],{"class":105},[95,154546,154547],{"class":97,"line":1629},[95,154548,112],{"class":105},[95,154550,154551,154554,154557],{"class":97,"line":1635},[95,154552,154553],{"class":105},"map_chart.render(",[95,154555,154556],{"class":210},"\"map_sales.html\"",[95,154558,112],{"class":105},[10,154560,154561],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[37,154563,154565],{"id":154564},"_129-项目拆分建议","12.9 项目拆分建议",[10,154567,154568],{},"当代码超过一个文件时，可以这样组织：",[86,154570,154573],{"className":154571,"code":154572,"language":5170,"meta":14},[5168],"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",[92,154574,154572],{"__ignoreMap":14},[10,154576,154577],{},"职责：",[49,154579,154580,154586,154592,154598],{},[52,154581,154582,154585],{},[92,154583,154584],{},"main.py","：程序入口。",[52,154587,154588,154591],{},[92,154589,154590],{},"file_utils.py","：读写 JSON。",[52,154593,154594,154597],{},[92,154595,154596],{},"sales_service.py","：统计销售数据。",[52,154599,154600,154603],{},[92,154601,154602],{},"chart_builder.py","：生成图表。",[37,154605,154607],{"id":154606},"_1210-python基础复习清单","12.10 Python基础复习清单",[10,154609,154610],{},"语法基础：",[49,154612,154613,154616,154619,154622],{},[52,154614,154615],{},"会写变量、注释、输入输出。",[52,154617,154618],{},"会使用 int、float、str、bool。",[52,154620,154621],{},"会做类型转换。",[52,154623,154624],{},"会使用 f-string 格式化输出。",[10,154626,154627],{},"流程控制：",[49,154629,154630,154636,154642,154650],{},[52,154631,154632,154633,28370],{},"会写 ",[92,154634,154635],{},"if elif else",[52,154637,154632,154638,100995,154640,28370],{},[92,154639,108640],{},[92,154641,3007],{},[52,154643,154644,154645,100995,154647,28370],{},"理解 ",[92,154646,2035],{},[92,154648,154649],{},"continue",[52,154651,154652],{},"能写嵌套循环。",[10,154654,154655],{},"函数：",[49,154657,154658,154661,154664,154667],{},[52,154659,154660],{},"会定义和调用函数。",[52,154662,154663],{},"理解参数和返回值。",[52,154665,154666],{},"知道局部变量和全局变量。",[52,154668,154669],{},"会使用默认参数、关键字参数、不定长参数。",[10,154671,154672],{},"容器：",[49,154674,154675,154678,154681,154684,154687],{},[52,154676,154677],{},"会使用列表增删改查。",[52,154679,154680],{},"会遍历列表、字典。",[52,154682,154683],{},"会使用切片。",[52,154685,154686],{},"会用集合去重。",[52,154688,154689],{},"会处理列表嵌套字典。",[10,154691,154692],{},"文件和模块：",[49,154694,154695,154698,154701,154704,154707],{},[52,154696,154697],{},"会读写文本文件。",[52,154699,154700],{},"会读写 JSON。",[52,154702,154703],{},"会捕获常见异常。",[52,154705,154706],{},"会导入模块和第三方包。",[52,154708,154709],{},"会创建简单包结构。",[10,154711,154712],{},"项目能力：",[49,154714,154715,154718,154721,154724,154727],{},[52,154716,154717],{},"能把代码拆成函数。",[52,154719,154720],{},"能把数据保存到文件。",[52,154722,154723],{},"能处理用户输入错误。",[52,154725,154726],{},"能写一个完整菜单程序。",[52,154728,154729],{},"能用 pyecharts 生成图表。",[37,154731,154733],{"id":154732},"_1211-推荐练习顺序","12.11 推荐练习顺序",[49,154735,154736,154739,154742,154745,154748,154751,154754,154757],{},[52,154737,154738],{},"猜数字游戏。",[52,154740,154741],{},"ATM 菜单程序。",[52,154743,154744],{},"学生成绩统计。",[52,154746,154747],{},"学生管理系统函数版。",[52,154749,154750],{},"学生管理系统文件持久化版。",[52,154752,154753],{},"学生管理系统面向对象版。",[52,154755,154756],{},"销售数据统计。",[52,154758,154759],{},"销售数据可视化。",[37,154761,154763],{"id":154762},"_1212-常见学习误区","12.12 常见学习误区",[49,154765,154766,154769,154772,154775,154778,154781,154784],{},[52,154767,154768],{},"只看视频不敲代码。",[52,154770,154771],{},"一报错就复制错误去搜，不先读报错位置。",[52,154773,154774],{},"变量名随便写，后续自己看不懂。",[52,154776,154777],{},"所有代码都写在一个文件一个函数里。",[52,154779,154780],{},"不保存练习代码，复习时没有材料。",[52,154782,154783],{},"还没掌握列表字典就急着学框架。",[52,154785,154786],{},"不会读官方文档，只依赖教程。",[37,154788,154790],{"id":154789},"_1213-如何读报错","12.13 如何读报错",[10,154792,154793],{},"报错通常从下往上看最后几行。",[10,154795,15118],{},[86,154797,154800],{"className":154798,"code":154799,"language":5170,"meta":14},[5168],"ValueError: invalid literal for int() with base 10: 'abc'\n",[92,154801,154799],{"__ignoreMap":14},[10,154803,24584],{},[49,154805,154806,154812,154822],{},[52,154807,154808,154809,28370],{},"异常类型是 ",[92,154810,154811],{},"ValueError",[52,154813,107322,154814,154817,154818,154821],{},[92,154815,154816],{},"int()"," 无法把 ",[92,154819,154820],{},"'abc'"," 转成整数。",[52,154823,154824],{},"应该检查输入内容或增加异常处理。",[10,154826,154827],{},"再看文件名和行号：",[86,154829,154832],{"className":154830,"code":154831,"language":5170,"meta":14},[5168],"File \"main.py\", line 10, in \u003Cmodule>\n",[92,154833,154831],{"__ignoreMap":14},[10,154835,154836,154837,154839],{},"表示错误发生在 ",[92,154838,154584],{}," 第 10 行。",[37,154841,154843],{"id":154842},"_1214-后续学习方向","12.14 后续学习方向",[10,154845,154846],{},"Python 基础完成后，可以按兴趣选择方向：",[49,154848,154849,154861,154870,154882,154893,154902,154912],{},[52,154850,154851,154852,318,154855,318,154858,28370],{},"自动化办公：",[92,154853,154854],{},"openpyxl",[92,154856,154857],{},"python-docx",[92,154859,154860],{},"pdfplumber",[52,154862,154863,154864,318,154866,318,154868,28370],{},"数据分析：",[92,154865,100603],{},[92,154867,146162],{},[92,154869,146170],{},[52,154871,154872,154873,318,154876,318,154879,28370],{},"Web 后端：",[92,154874,154875],{},"Flask",[92,154877,154878],{},"FastAPI",[92,154880,154881],{},"Django",[52,154883,154884,154885,318,154887,318,154890,28370],{},"爬虫：",[92,154886,146147],{},[92,154888,154889],{},"BeautifulSoup",[92,154891,154892],{},"Scrapy",[52,154894,154895,154896,318,154898,154901],{},"测试开发：",[92,154897,146194],{},[92,154899,154900],{},"selenium","、接口测试。",[52,154903,154904,154905,318,154907,318,154909,28370],{},"人工智能：",[92,154906,100603],{},[92,154908,146162],{},[92,154910,154911],{},"pytorch",[52,154913,154914,154915,318,154917,318,154920,28370],{},"运维脚本：",[92,154916,145763],{},[92,154918,154919],{},"subprocess",[92,154921,154922],{},"paramiko",[10,154924,154925],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[37,154927,154929],{"id":154928},"_1215-结课练习","12.15 结课练习",[49,154931,154932,154935,154938,154941,154944,154947,154950,154953],{},[52,154933,154934],{},"完成函数版学生管理系统。",[52,154936,154937],{},"给学生管理系统增加 JSON 持久化。",[52,154939,154940],{},"给学生管理系统增加异常处理。",[52,154942,154943],{},"把学生管理系统改成面向对象版。",[52,154945,154946],{},"使用 pyecharts 绘制学生成绩柱状图。",[52,154948,154949],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[52,154951,154952],{},"按品类统计销售额并绘制柱状图。",[52,154954,154955],{},"写一份自己的 Python 学习路线图。",[5109,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":1161,"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":1161,"text":153587},{"id":153726,"depth":1161,"text":153727},{"id":153816,"depth":1161,"text":153817},{"id":153902,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154989,"title":154990,"body":154991,"description":23360,"extension":18,"meta":157460,"navigation":21,"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],[33,154994,154990],{"id":154995},"_2-基础语法变量与字符串",[37,154997,154999],{"id":154998},"_21-注释","2.1 注释",[10,155001,155002],{},"注释是给人看的说明文字，不会被 Python 执行。",[10,155004,155005],{},"单行注释：",[86,155007,155009],{"className":30363,"code":155008,"language":30365,"meta":14,"style":14},"# 这是单行注释\nprint(\"hello\")\n",[92,155010,155011,155016],{"__ignoreMap":14},[95,155012,155013],{"class":97,"line":98},[95,155014,155015],{"class":164},"# 这是单行注释\n",[95,155017,155018,155020,155022,155024],{"class":97,"line":15},[95,155019,30400],{"class":154},[95,155021,106],{"class":105},[95,155023,5827],{"class":210},[95,155025,112],{"class":105},[10,155027,155028],{},"多行说明常用三引号：",[86,155030,155032],{"className":30363,"code":155031,"language":30365,"meta":14,"style":14},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[92,155033,155034,155038,155043,155048],{"__ignoreMap":14},[95,155035,155036],{"class":97,"line":98},[95,155037,95675],{"class":210},[95,155039,155040],{"class":97,"line":15},[95,155041,155042],{"class":210},"这是多行说明。\n",[95,155044,155045],{"class":97,"line":1161},[95,155046,155047],{"class":210},"常用于文件顶部说明、函数说明等。\n",[95,155049,155050],{"class":97,"line":1176},[95,155051,95675],{"class":210},[10,155053,155054],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[10,155056,155057],{},"不好：",[86,155059,155061],{"className":30363,"code":155060,"language":30365,"meta":14,"style":14},"# age 加 1\nage = age + 1\n",[92,155062,155063,155068],{"__ignoreMap":14},[95,155064,155065],{"class":97,"line":98},[95,155066,155067],{"class":164},"# age 加 1\n",[95,155069,155070,155072,155074,155076,155078],{"class":97,"line":15},[95,155071,146523],{"class":105},[95,155073,151],{"class":101},[95,155075,15690],{"class":105},[95,155077,587],{"class":101},[95,155079,55676],{"class":154},[10,155081,155082],{},"较好：",[86,155084,155086],{"className":30363,"code":155085,"language":30365,"meta":14,"style":14},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[92,155087,155088,155093],{"__ignoreMap":14},[95,155089,155090],{"class":97,"line":98},[95,155091,155092],{"class":164},"# 用户过完生日后，年龄增加一岁\n",[95,155094,155095,155097,155099,155101,155103],{"class":97,"line":15},[95,155096,146523],{"class":105},[95,155098,151],{"class":101},[95,155100,15690],{"class":105},[95,155102,587],{"class":101},[95,155104,55676],{"class":154},[37,155106,155108],{"id":155107},"_22-字面量","2.2 字面量",[10,155110,155111],{},"字面量就是代码中直接写出来的数据。",[86,155113,155115],{"className":30363,"code":155114,"language":30365,"meta":14,"style":14},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[92,155116,155117,155124,155131,155138,155145],{"__ignoreMap":14},[95,155118,155119,155121],{"class":97,"line":98},[95,155120,417],{"class":154},[95,155122,155123],{"class":164},"          # 整数\n",[95,155125,155126,155128],{"class":97,"line":15},[95,155127,155],{"class":154},[95,155129,155130],{"class":164},"         # 小数\n",[95,155132,155133,155135],{"class":97,"line":1161},[95,155134,5827],{"class":210},[95,155136,155137],{"class":164},"      # 字符串\n",[95,155139,155140,155142],{"class":97,"line":1176},[95,155141,31461],{"class":154},[95,155143,155144],{"class":164},"         # 布尔值\n",[95,155146,155147,155149],{"class":97,"line":1182},[95,155148,95663],{"class":154},[95,155150,155151],{"class":164},"         # 空值\n",[10,155153,155154],{},"常见字面量类型：",[243,155156,155157,155167],{},[246,155158,155159],{},[249,155160,155161,155163,155165],{},[252,155162,23721],{},[252,155164,27477],{},[252,155166,25854],{},[290,155168,155169,155180,155191,155202,155214,155226,155238,155251,155263],{},[249,155170,155171,155173,155177],{},[295,155172,109],{},[295,155174,155175],{},[92,155176,417],{},[295,155178,155179],{},"整数",[249,155181,155182,155184,155188],{},[295,155183,145],{},[295,155185,155186],{},[92,155187,155],{},[295,155189,155190],{},"浮点数",[249,155192,155193,155195,155199],{},[295,155194,1281],{},[295,155196,155197],{},[92,155198,5827],{},[295,155200,155201],{},"字符串",[249,155203,155204,155206,155212],{},[295,155205,1336],{},[295,155207,155208,318,155210],{},[92,155209,31461],{},[92,155211,33972],{},[295,155213,65992],{},[249,155215,155216,155219,155223],{},[295,155217,155218],{},"NoneType",[295,155220,155221],{},[92,155222,95663],{},[295,155224,155225],{},"空值",[249,155227,155228,155230,155235],{},[295,155229,154047],{},[295,155231,155232],{},[92,155233,155234],{},"[1, 2, 3]",[295,155236,155237],{},"列表",[249,155239,155240,155243,155248],{},[295,155241,155242],{},"tuple",[295,155244,155245],{},[92,155246,155247],{},"(1, 2, 3)",[295,155249,155250],{},"元组",[249,155252,155253,155255,155260],{},[295,155254,114523],{},[295,155256,155257],{},[92,155258,155259],{},"{\"name\": \"张三\"}",[295,155261,155262],{},"字典",[249,155264,155265,155268,155273],{},[295,155266,155267],{},"set",[295,155269,155270],{},[92,155271,155272],{},"{1, 2, 3}",[295,155274,155275],{},"集合",[37,155277,155279],{"id":155278},"_23-变量","2.3 变量",[10,155281,155282],{},"变量是保存数据的名字。",[86,155284,155286],{"className":30363,"code":155285,"language":30365,"meta":14,"style":14},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[92,155287,155288,155296,155304,155314],{"__ignoreMap":14},[95,155289,155290,155292,155294],{"class":97,"line":98},[95,155291,146513],{"class":105},[95,155293,151],{"class":101},[95,155295,149330],{"class":210},[95,155297,155298,155300,155302],{"class":97,"line":15},[95,155299,146523],{"class":105},[95,155301,151],{"class":101},[95,155303,146528],{"class":154},[95,155305,155306,155309,155311],{"class":97,"line":1161},[95,155307,155308],{"class":105},"height ",[95,155310,151],{"class":101},[95,155312,155313],{"class":154}," 1.75\n",[95,155315,155316,155319,155321],{"class":97,"line":1176},[95,155317,155318],{"class":105},"is_student ",[95,155320,151],{"class":101},[95,155322,153576],{"class":154},[10,155324,155325],{},"Python 的变量不需要提前声明类型：",[86,155327,155329],{"className":30363,"code":155328,"language":30365,"meta":14,"style":14},"score = 100\nscore = \"满分\"\n",[92,155330,155331,155341],{"__ignoreMap":14},[95,155332,155333,155336,155338],{"class":97,"line":98},[95,155334,155335],{"class":105},"score ",[95,155337,151],{"class":101},[95,155339,155340],{"class":154}," 100\n",[95,155342,155343,155345,155347],{"class":97,"line":15},[95,155344,155335],{"class":105},[95,155346,151],{"class":101},[95,155348,155349],{"class":210}," \"满分\"\n",[10,155351,155352],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[37,155354,155356],{"id":155355},"_24-变量命名规则","2.4 变量命名规则",[10,155358,155359],{},"硬性规则：",[49,155361,155362,155365,155368,155371],{},[52,155363,155364],{},"只能由字母、数字、下划线组成。",[52,155366,155367],{},"不能以数字开头。",[52,155369,155370],{},"不能使用 Python 关键字。",[52,155372,155373],{},"区分大小写。",[86,155375,155377],{"className":30363,"code":155376,"language":30365,"meta":14,"style":14},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[92,155378,155379,155388,155397],{"__ignoreMap":14},[95,155380,155381,155384,155386],{"class":97,"line":98},[95,155382,155383],{"class":105},"user_name ",[95,155385,151],{"class":101},[95,155387,146518],{"class":210},[95,155389,155390,155393,155395],{"class":97,"line":15},[95,155391,155392],{"class":105},"age2 ",[95,155394,151],{"class":101},[95,155396,146528],{"class":154},[95,155398,155399,155402,155404],{"class":97,"line":1161},[95,155400,155401],{"class":105},"_token ",[95,155403,151],{"class":101},[95,155405,155406],{"class":210}," \"abc\"\n",[10,155408,155409],{},"错误写法：",[86,155411,155413],{"className":30363,"code":155412,"language":30365,"meta":14,"style":14},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[92,155414,155415,155424,155436],{"__ignoreMap":14},[95,155416,155417,155420,155422],{"class":97,"line":98},[95,155418,155419],{"class":77380},"2age",[95,155421,13547],{"class":101},[95,155423,146528],{"class":154},[95,155425,155426,155428,155430,155432,155434],{"class":97,"line":15},[95,155427,131561],{"class":105},[95,155429,638],{"class":101},[95,155431,146513],{"class":105},[95,155433,151],{"class":101},[95,155435,146518],{"class":210},[95,155437,155438,155440,155442],{"class":97,"line":1161},[95,155439,14677],{"class":101},[95,155441,13547],{"class":101},[95,155443,155444],{"class":210}," \"一班\"\n",[10,155446,155447],{},"查看关键字：",[86,155449,155451],{"className":30363,"code":155450,"language":30365,"meta":14,"style":14},"import keyword\n\nprint(keyword.kwlist)\n",[92,155452,155453,155460,155464],{"__ignoreMap":14},[95,155454,155455,155457],{"class":97,"line":98},[95,155456,30377],{"class":101},[95,155458,155459],{"class":105}," keyword\n",[95,155461,155462],{"class":97,"line":15},[95,155463,2382],{"emptyLinePlaceholder":21},[95,155465,155466,155468],{"class":97,"line":1161},[95,155467,30400],{"class":154},[95,155469,155470],{"class":105},"(keyword.kwlist)\n",[10,155472,155473],{},"推荐命名风格：",[86,155475,155477],{"className":30363,"code":155476,"language":30365,"meta":14,"style":14},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[92,155478,155479,155488,155498],{"__ignoreMap":14},[95,155480,155481,155484,155486],{"class":97,"line":98},[95,155482,155483],{"class":105},"student_name ",[95,155485,151],{"class":101},[95,155487,149330],{"class":210},[95,155489,155490,155493,155495],{"class":97,"line":15},[95,155491,155492],{"class":105},"total_price ",[95,155494,151],{"class":101},[95,155496,155497],{"class":154}," 99.8\n",[95,155499,155500,155503,155505],{"class":97,"line":1161},[95,155501,155502],{"class":105},"is_finished ",[95,155504,151],{"class":101},[95,155506,125784],{"class":154},[10,155508,155509],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[37,155511,50709],{"id":50708},[10,155513,104343,155514,155517],{},[92,155515,155516],{},"type()"," 查看数据类型：",[86,155519,155521],{"className":30363,"code":155520,"language":30365,"meta":14,"style":14},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[92,155522,155523,155537,155551,155565,155579],{"__ignoreMap":14},[95,155524,155525,155527,155529,155531,155533,155535],{"class":97,"line":98},[95,155526,30400],{"class":154},[95,155528,106],{"class":105},[95,155530,103084],{"class":154},[95,155532,106],{"class":105},[95,155534,417],{"class":154},[95,155536,30482],{"class":105},[95,155538,155539,155541,155543,155545,155547,155549],{"class":97,"line":15},[95,155540,30400],{"class":154},[95,155542,106],{"class":105},[95,155544,103084],{"class":154},[95,155546,106],{"class":105},[95,155548,155],{"class":154},[95,155550,30482],{"class":105},[95,155552,155553,155555,155557,155559,155561,155563],{"class":97,"line":1161},[95,155554,30400],{"class":154},[95,155556,106],{"class":105},[95,155558,103084],{"class":154},[95,155560,106],{"class":105},[95,155562,5827],{"class":210},[95,155564,30482],{"class":105},[95,155566,155567,155569,155571,155573,155575,155577],{"class":97,"line":1176},[95,155568,30400],{"class":154},[95,155570,106],{"class":105},[95,155572,103084],{"class":154},[95,155574,106],{"class":105},[95,155576,31461],{"class":154},[95,155578,30482],{"class":105},[95,155580,155581,155583,155585,155587,155589,155591],{"class":97,"line":1182},[95,155582,30400],{"class":154},[95,155584,106],{"class":105},[95,155586,103084],{"class":154},[95,155588,106],{"class":105},[95,155590,95663],{"class":154},[95,155592,30482],{"class":105},[10,155594,155595],{},"输出类似：",[86,155597,155600],{"className":155598,"code":155599,"language":5170,"meta":14},[5168],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[92,155601,155599],{"__ignoreMap":14},[10,155603,9008,155604,107260,155606,155608,155609,155611,155612,21483,155614,155611,155616,155618],{},[92,155605,1336],{},[92,155607,109],{}," 的子类，",[92,155610,31461],{}," 可以当作 ",[92,155613,323],{},[92,155615,33972],{},[92,155617,297],{},"，但业务代码中不要滥用。",[86,155620,155622],{"className":30363,"code":155621,"language":30365,"meta":14,"style":14},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[92,155623,155624,155642],{"__ignoreMap":14},[95,155625,155626,155628,155630,155632,155634,155636,155639],{"class":97,"line":98},[95,155627,30400],{"class":154},[95,155629,106],{"class":105},[95,155631,31461],{"class":154},[95,155633,45551],{"class":101},[95,155635,25103],{"class":154},[95,155637,155638],{"class":105},")   ",[95,155640,155641],{"class":164},"# 2\n",[95,155643,155644,155646,155648,155650,155652,155654,155656],{"class":97,"line":15},[95,155645,30400],{"class":154},[95,155647,106],{"class":105},[95,155649,33972],{"class":154},[95,155651,45551],{"class":101},[95,155653,25103],{"class":154},[95,155655,45793],{"class":105},[95,155657,155658],{"class":164},"# 1\n",[37,155660,155662],{"id":155661},"_26-类型转换","2.6 类型转换",[10,155664,155665],{},"常用转换函数：",[86,155667,155669],{"className":30363,"code":155668,"language":30365,"meta":14,"style":14},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[92,155670,155671,155681,155692,155702],{"__ignoreMap":14},[95,155672,155673,155675,155677,155679],{"class":97,"line":98},[95,155674,109],{"class":154},[95,155676,106],{"class":105},[95,155678,54293],{"class":210},[95,155680,112],{"class":105},[95,155682,155683,155685,155687,155690],{"class":97,"line":15},[95,155684,145],{"class":154},[95,155686,106],{"class":105},[95,155688,155689],{"class":210},"\"3.14\"",[95,155691,112],{"class":105},[95,155693,155694,155696,155698,155700],{"class":97,"line":1161},[95,155695,1281],{"class":154},[95,155697,106],{"class":105},[95,155699,417],{"class":154},[95,155701,112],{"class":105},[95,155703,155704,155706,155708,155710],{"class":97,"line":1176},[95,155705,1336],{"class":154},[95,155707,106],{"class":105},[95,155709,323],{"class":154},[95,155711,112],{"class":105},[10,155713,15118],{},[86,155715,155717],{"className":30363,"code":155716,"language":30365,"meta":14,"style":14},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[92,155718,155719,155728,155739],{"__ignoreMap":14},[95,155720,155721,155723,155725],{"class":97,"line":98},[95,155722,146523],{"class":105},[95,155724,151],{"class":101},[95,155726,155727],{"class":210}," \"18\"\n",[95,155729,155730,155732,155734,155736],{"class":97,"line":15},[95,155731,146523],{"class":105},[95,155733,151],{"class":101},[95,155735,2364],{"class":154},[95,155737,155738],{"class":105},"(age)\n",[95,155740,155741,155743,155746,155748,155750],{"class":97,"line":1161},[95,155742,30400],{"class":154},[95,155744,155745],{"class":105},"(age ",[95,155747,587],{"class":101},[95,155749,25103],{"class":154},[95,155751,112],{"class":105},[10,155753,155754],{},"输入得到的内容永远是字符串：",[86,155756,155758],{"className":30363,"code":155757,"language":30365,"meta":14,"style":14},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[92,155759,155760,155776],{"__ignoreMap":14},[95,155761,155762,155765,155767,155769,155771,155774],{"class":97,"line":98},[95,155763,155764],{"class":105},"num ",[95,155766,151],{"class":101},[95,155768,60582],{"class":154},[95,155770,106],{"class":105},[95,155772,155773],{"class":210},"\"请输入数字:\"",[95,155775,112],{"class":105},[95,155777,155778,155780,155782,155784,155787],{"class":97,"line":15},[95,155779,30400],{"class":154},[95,155781,106],{"class":105},[95,155783,103084],{"class":154},[95,155785,155786],{"class":105},"(num))  ",[95,155788,155789],{"class":164},"# str\n",[10,155791,155792],{},"如果要做数学运算，必须转换：",[86,155794,155796],{"className":30363,"code":155795,"language":30365,"meta":14,"style":14},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[92,155797,155798,155816],{"__ignoreMap":14},[95,155799,155800,155802,155804,155806,155808,155810,155812,155814],{"class":97,"line":98},[95,155801,155764],{"class":105},[95,155803,151],{"class":101},[95,155805,2364],{"class":154},[95,155807,106],{"class":105},[95,155809,53798],{"class":154},[95,155811,106],{"class":105},[95,155813,155773],{"class":210},[95,155815,30482],{"class":105},[95,155817,155818,155820,155822,155824,155826],{"class":97,"line":15},[95,155819,30400],{"class":154},[95,155821,45604],{"class":105},[95,155823,587],{"class":101},[95,155825,2020],{"class":154},[95,155827,112],{"class":105},[10,155829,155830],{},"常见错误：",[86,155832,155834],{"className":30363,"code":155833,"language":30365,"meta":14,"style":14},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[92,155835,155836,155849],{"__ignoreMap":14},[95,155837,155838,155840,155842,155844,155846],{"class":97,"line":98},[95,155839,109],{"class":154},[95,155841,106],{"class":105},[95,155843,155689],{"class":210},[95,155845,155638],{"class":105},[95,155847,155848],{"class":164},"# 错误\n",[95,155850,155851,155853,155855,155858,155861],{"class":97,"line":15},[95,155852,109],{"class":154},[95,155854,106],{"class":105},[95,155856,155857],{"class":210},"\"abc\"",[95,155859,155860],{"class":105},")    ",[95,155862,155848],{"class":164},[10,155864,155865],{},"正确写法：",[86,155867,155869],{"className":30363,"code":155868,"language":30365,"meta":14,"style":14},"num = float(\"3.14\")\n",[92,155870,155871],{"__ignoreMap":14},[95,155872,155873,155875,155877,155879,155881,155883],{"class":97,"line":98},[95,155874,155764],{"class":105},[95,155876,151],{"class":101},[95,155878,109774],{"class":154},[95,155880,106],{"class":105},[95,155882,155689],{"class":210},[95,155884,112],{"class":105},[37,155886,155888],{"id":155887},"_27-运算符","2.7 运算符",[66,155890,155892],{"id":155891},"_271-算术运算符","2.7.1 算术运算符",[243,155894,155895,155906],{},[246,155896,155897],{},[249,155898,155899,155902,155904],{},[252,155900,155901],{},"运算符",[252,155903,25854],{},[252,155905,27477],{},[290,155907,155908,155922,155936,155950,155964,155978,155992],{},[249,155909,155910,155914,155917],{},[295,155911,155912],{},[92,155913,587],{},[295,155915,155916],{},"加法",[295,155918,155919],{},[92,155920,155921],{},"1 + 2",[249,155923,155924,155928,155931],{},[295,155925,155926],{},[92,155927,638],{},[295,155929,155930],{},"减法",[295,155932,155933],{},[92,155934,155935],{},"5 - 3",[249,155937,155938,155942,155945],{},[295,155939,155940],{},[92,155941,561],{},[295,155943,155944],{},"乘法",[295,155946,155947],{},[92,155948,155949],{},"2 * 3",[249,155951,155952,155956,155959],{},[295,155953,155954],{},[92,155955,690],{},[295,155957,155958],{},"除法，结果是浮点数",[295,155960,155961],{},[92,155962,155963],{},"5 \u002F 2",[249,155965,155966,155970,155973],{},[295,155967,155968],{},[92,155969,33314],{},[295,155971,155972],{},"整除",[295,155974,155975],{},[92,155976,155977],{},"5 \u002F\u002F 2",[249,155979,155980,155984,155987],{},[295,155981,155982],{},[92,155983,434],{},[295,155985,155986],{},"取余",[295,155988,155989],{},[92,155990,155991],{},"5 % 2",[249,155993,155994,155998,156001],{},[295,155995,155996],{},[92,155997,10644],{},[295,155999,156000],{},"幂运算",[295,156002,156003],{},[92,156004,156005],{},"2 ** 3",[10,156007,15118],{},[86,156009,156011],{"className":30363,"code":156010,"language":30365,"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",[92,156012,156013,156031,156048,156065],{"__ignoreMap":14},[95,156014,156015,156017,156019,156021,156024,156026,156028],{"class":97,"line":98},[95,156016,30400],{"class":154},[95,156018,106],{"class":105},[95,156020,425],{"class":154},[95,156022,156023],{"class":101}," \u002F",[95,156025,14738],{"class":154},[95,156027,155638],{"class":105},[95,156029,156030],{"class":164},"# 2.5\n",[95,156032,156033,156035,156037,156039,156042,156044,156046],{"class":97,"line":15},[95,156034,30400],{"class":154},[95,156036,106],{"class":105},[95,156038,425],{"class":154},[95,156040,156041],{"class":101}," \u002F\u002F",[95,156043,14738],{"class":154},[95,156045,45793],{"class":105},[95,156047,155641],{"class":164},[95,156049,156050,156052,156054,156056,156059,156061,156063],{"class":97,"line":1161},[95,156051,30400],{"class":154},[95,156053,106],{"class":105},[95,156055,425],{"class":154},[95,156057,156058],{"class":101}," %",[95,156060,14738],{"class":154},[95,156062,155638],{"class":105},[95,156064,155658],{"class":164},[95,156066,156067,156069,156071,156073,156076,156078,156080],{"class":97,"line":1176},[95,156068,30400],{"class":154},[95,156070,106],{"class":105},[95,156072,183],{"class":154},[95,156074,156075],{"class":101}," **",[95,156077,78047],{"class":154},[95,156079,45793],{"class":105},[95,156081,156082],{"class":164},"# 8\n",[66,156084,156086],{"id":156085},"_272-赋值运算符","2.7.2 赋值运算符",[86,156088,156090],{"className":30363,"code":156089,"language":30365,"meta":14,"style":14},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[92,156091,156092,156100,156108,156116,156124],{"__ignoreMap":14},[95,156093,156094,156096,156098],{"class":97,"line":98},[95,156095,155764],{"class":105},[95,156097,151],{"class":101},[95,156099,58405],{"class":154},[95,156101,156102,156104,156106],{"class":97,"line":15},[95,156103,155764],{"class":105},[95,156105,9460],{"class":101},[95,156107,54404],{"class":154},[95,156109,156110,156112,156114],{"class":97,"line":1161},[95,156111,155764],{"class":105},[95,156113,150229],{"class":101},[95,156115,47708],{"class":154},[95,156117,156118,156120,156122],{"class":97,"line":1176},[95,156119,155764],{"class":105},[95,156121,137125],{"class":101},[95,156123,120013],{"class":154},[95,156125,156126,156128,156131],{"class":97,"line":1182},[95,156127,155764],{"class":105},[95,156129,156130],{"class":101},"\u002F=",[95,156132,47708],{"class":154},[10,156134,156135],{},"等价关系：",[86,156137,156139],{"className":30363,"code":156138,"language":30365,"meta":14,"style":14},"num += 1\nnum = num + 1\n",[92,156140,156141,156149],{"__ignoreMap":14},[95,156142,156143,156145,156147],{"class":97,"line":98},[95,156144,155764],{"class":105},[95,156146,9460],{"class":101},[95,156148,55676],{"class":154},[95,156150,156151,156153,156155,156158,156160],{"class":97,"line":15},[95,156152,155764],{"class":105},[95,156154,151],{"class":101},[95,156156,156157],{"class":105}," num ",[95,156159,587],{"class":101},[95,156161,55676],{"class":154},[10,156163,156164,156165,100995,156168,28370],{},"Python 没有 ",[92,156166,156167],{},"num++",[92,156169,156170],{},"num--",[66,156172,156174],{"id":156173},"_273-比较运算符","2.7.3 比较运算符",[10,156176,156177],{},"比较运算结果是布尔值。",[86,156179,156181],{"className":30363,"code":156180,"language":30365,"meta":14,"style":14},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[92,156182,156183,156197,156212,156226],{"__ignoreMap":14},[95,156184,156185,156187,156189,156191,156193,156195],{"class":97,"line":98},[95,156186,30400],{"class":154},[95,156188,106],{"class":105},[95,156190,552],{"class":154},[95,156192,26207],{"class":101},[95,156194,2130],{"class":154},[95,156196,112],{"class":105},[95,156198,156199,156201,156203,156205,156208,156210],{"class":97,"line":15},[95,156200,30400],{"class":154},[95,156202,106],{"class":105},[95,156204,552],{"class":154},[95,156206,156207],{"class":101}," >=",[95,156209,2020],{"class":154},[95,156211,112],{"class":105},[95,156213,156214,156216,156218,156220,156222,156224],{"class":97,"line":1161},[95,156215,30400],{"class":154},[95,156217,106],{"class":105},[95,156219,552],{"class":154},[95,156221,101536],{"class":101},[95,156223,2065],{"class":154},[95,156225,112],{"class":105},[95,156227,156228,156230,156232,156234,156237,156239],{"class":97,"line":1176},[95,156229,30400],{"class":154},[95,156231,106],{"class":105},[95,156233,552],{"class":154},[95,156235,156236],{"class":101}," !=",[95,156238,2065],{"class":154},[95,156240,112],{"class":105},[10,156242,156243,156244,156246,156247,28370],{},"注意：判断相等用 ",[92,156245,2931],{},"，赋值用 ",[92,156248,151],{},[86,156250,156252],{"className":30363,"code":156251,"language":30365,"meta":14,"style":14},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[92,156253,156254,156266],{"__ignoreMap":14},[95,156255,156256,156258,156260,156263],{"class":97,"line":98},[95,156257,146523],{"class":105},[95,156259,151],{"class":101},[95,156261,156262],{"class":154}," 18",[95,156264,156265],{"class":164},"       # 赋值\n",[95,156267,156268,156270,156272,156274],{"class":97,"line":15},[95,156269,146523],{"class":105},[95,156271,2931],{"class":101},[95,156273,156262],{"class":154},[95,156275,156276],{"class":164},"      # 判断是否相等\n",[66,156278,156280],{"id":156279},"_274-逻辑运算符","2.7.4 逻辑运算符",[243,156282,156283,156291],{},[246,156284,156285],{},[249,156286,156287,156289],{},[252,156288,155901],{},[252,156290,25854],{},[290,156292,156293,156302,156311],{},[249,156294,156295,156299],{},[295,156296,156297],{},[92,156298,30447],{},[295,156300,156301],{},"并且",[249,156303,156304,156308],{},[295,156305,156306],{},[92,156307,115067],{},[295,156309,156310],{},"或者",[249,156312,156313,156318],{},[295,156314,156315],{},[92,156316,156317],{},"not",[295,156319,156320],{},"取反",[86,156322,156324],{"className":30363,"code":156323,"language":30365,"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",[92,156325,156326,156334,156343,156347,156362,156376],{"__ignoreMap":14},[95,156327,156328,156330,156332],{"class":97,"line":98},[95,156329,146523],{"class":105},[95,156331,151],{"class":101},[95,156333,88042],{"class":154},[95,156335,156336,156339,156341],{"class":97,"line":15},[95,156337,156338],{"class":105},"has_ticket ",[95,156340,151],{"class":101},[95,156342,153576],{"class":154},[95,156344,156345],{"class":97,"line":1161},[95,156346,2382],{"emptyLinePlaceholder":21},[95,156348,156349,156351,156353,156355,156357,156359],{"class":97,"line":1176},[95,156350,30400],{"class":154},[95,156352,155745],{"class":105},[95,156354,1692],{"class":101},[95,156356,156262],{"class":154},[95,156358,120406],{"class":101},[95,156360,156361],{"class":105}," has_ticket)\n",[95,156363,156364,156366,156368,156370,156372,156374],{"class":97,"line":1182},[95,156365,30400],{"class":154},[95,156367,155745],{"class":105},[95,156369,1016],{"class":101},[95,156371,156262],{"class":154},[95,156373,114178],{"class":101},[95,156375,156361],{"class":105},[95,156377,156378,156380,156382,156384],{"class":97,"line":1196},[95,156379,30400],{"class":154},[95,156381,106],{"class":105},[95,156383,156317],{"class":101},[95,156385,156361],{"class":105},[37,156387,156389],{"id":156388},"_28-字符串定义","2.8 字符串定义",[10,156391,156392],{},"三种常见写法：",[86,156394,156396],{"className":30363,"code":156395,"language":30365,"meta":14,"style":14},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[92,156397,156398,156408,156417,156427],{"__ignoreMap":14},[95,156399,156400,156403,156405],{"class":97,"line":98},[95,156401,156402],{"class":105},"name1 ",[95,156404,151],{"class":101},[95,156406,156407],{"class":210}," '小明'\n",[95,156409,156410,156413,156415],{"class":97,"line":15},[95,156411,156412],{"class":105},"name2 ",[95,156414,151],{"class":101},[95,156416,149330],{"class":210},[95,156418,156419,156422,156424],{"class":97,"line":1161},[95,156420,156421],{"class":105},"text ",[95,156423,151],{"class":101},[95,156425,156426],{"class":210}," \"\"\"这是多行字符串\n",[95,156428,156429],{"class":97,"line":1176},[95,156430,156431],{"class":210},"可以换行\"\"\"\n",[10,156433,156434],{},"字符串中包含引号：",[86,156436,156438],{"className":30363,"code":156437,"language":30365,"meta":14,"style":14},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[92,156439,156440,156450,156460],{"__ignoreMap":14},[95,156441,156442,156445,156447],{"class":97,"line":98},[95,156443,156444],{"class":105},"msg ",[95,156446,151],{"class":101},[95,156448,156449],{"class":210}," \"他说:'你好'\"\n",[95,156451,156452,156455,156457],{"class":97,"line":15},[95,156453,156454],{"class":105},"msg2 ",[95,156456,151],{"class":101},[95,156458,156459],{"class":210}," '他说:\"你好\"'\n",[95,156461,156462,156465,156467,156470,156473,156476,156478],{"class":97,"line":1161},[95,156463,156464],{"class":105},"msg3 ",[95,156466,151],{"class":101},[95,156468,156469],{"class":210}," \"他说:",[95,156471,156472],{"class":154},"\\\"",[95,156474,156475],{"class":210},"你好",[95,156477,156472],{"class":154},[95,156479,25118],{"class":210},[10,156481,156482],{},"常见转义字符：",[243,156484,156485,156494],{},[246,156486,156487],{},[249,156488,156489,156492],{},[252,156490,156491],{},"写法",[252,156493,100677],{},[290,156495,156496,156506,156515,156525,156534],{},[249,156497,156498,156503],{},[295,156499,156500],{},[92,156501,156502],{},"\\n",[295,156504,156505],{},"换行",[249,156507,156508,156512],{},[295,156509,156510],{},[92,156511,1212],{},[295,156513,156514],{},"制表符",[249,156516,156517,156522],{},[295,156518,156519],{},[92,156520,156521],{},"\\\\",[295,156523,156524],{},"反斜杠",[249,156526,156527,156531],{},[295,156528,156529],{},[92,156530,156472],{},[295,156532,156533],{},"双引号",[249,156535,156536,156541],{},[295,156537,156538],{},[92,156539,156540],{},"\\'",[295,156542,156543],{},"单引号",[37,156545,156547],{"id":156546},"_29-字符串拼接","2.9 字符串拼接",[86,156549,156551],{"className":30363,"code":156550,"language":30365,"meta":14,"style":14},"name = \"小明\"\nprint(\"你好，\" + name)\n",[92,156552,156553,156561],{"__ignoreMap":14},[95,156554,156555,156557,156559],{"class":97,"line":98},[95,156556,146513],{"class":105},[95,156558,151],{"class":101},[95,156560,149330],{"class":210},[95,156562,156563,156565,156567,156570,156572],{"class":97,"line":15},[95,156564,30400],{"class":154},[95,156566,106],{"class":105},[95,156568,156569],{"class":210},"\"你好，\"",[95,156571,45551],{"class":101},[95,156573,156574],{"class":105}," name)\n",[10,156576,156577],{},"字符串只能和字符串拼接：",[86,156579,156581],{"className":30363,"code":156580,"language":30365,"meta":14,"style":14},"age = 18\nprint(\"年龄:\" + str(age))\n",[92,156582,156583,156591],{"__ignoreMap":14},[95,156584,156585,156587,156589],{"class":97,"line":98},[95,156586,146523],{"class":105},[95,156588,151],{"class":101},[95,156590,146528],{"class":154},[95,156592,156593,156595,156597,156599,156601,156603],{"class":97,"line":15},[95,156594,30400],{"class":154},[95,156596,106],{"class":105},[95,156598,146494],{"class":210},[95,156600,45551],{"class":101},[95,156602,73896],{"class":154},[95,156604,156605],{"class":105},"(age))\n",[10,156607,156608],{},"更推荐使用格式化字符串。",[37,156610,156612],{"id":156611},"_210-字符串格式化","2.10 字符串格式化",[66,156614,156616],{"id":156615},"_2101-百分号格式化","2.10.1 百分号格式化",[86,156618,156620],{"className":30363,"code":156619,"language":30365,"meta":14,"style":14},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[92,156621,156622,156630,156638,156647,156651],{"__ignoreMap":14},[95,156623,156624,156626,156628],{"class":97,"line":98},[95,156625,146513],{"class":105},[95,156627,151],{"class":101},[95,156629,149330],{"class":210},[95,156631,156632,156634,156636],{"class":97,"line":15},[95,156633,146523],{"class":105},[95,156635,151],{"class":101},[95,156637,146528],{"class":154},[95,156639,156640,156642,156644],{"class":97,"line":1161},[95,156641,155335],{"class":105},[95,156643,151],{"class":101},[95,156645,156646],{"class":154}," 95.5\n",[95,156648,156649],{"class":97,"line":1176},[95,156650,2382],{"emptyLinePlaceholder":21},[95,156652,156653,156655,156657,156660,156663,156666,156669,156672,156675,156677,156679],{"class":97,"line":1182},[95,156654,30400],{"class":154},[95,156656,106],{"class":105},[95,156658,156659],{"class":210},"\"姓名:",[95,156661,156662],{"class":154},"%s",[95,156664,156665],{"class":210}," 年龄:",[95,156667,156668],{"class":154},"%d",[95,156670,156671],{"class":210}," 分数:",[95,156673,156674],{"class":154},"%.1f",[95,156676,357],{"class":210},[95,156678,156058],{"class":101},[95,156680,156681],{"class":105}," (name, age, score))\n",[10,156683,156684],{},"常用占位符：",[243,156686,156687,156696],{},[246,156688,156689],{},[249,156690,156691,156694],{},[252,156692,156693],{},"占位符",[252,156695,25854],{},[290,156697,156698,156706,156714],{},[249,156699,156700,156704],{},[295,156701,156702],{},[92,156703,156662],{},[295,156705,155201],{},[249,156707,156708,156712],{},[295,156709,156710],{},[92,156711,156668],{},[295,156713,155179],{},[249,156715,156716,156721],{},[295,156717,156718],{},[92,156719,156720],{},"%f",[295,156722,155190],{},[10,156724,156725],{},"精度控制：",[86,156727,156729],{"className":30363,"code":156728,"language":30365,"meta":14,"style":14},"price = 12.3456\nprint(\"%.2f\" % price)\n",[92,156730,156731,156740],{"__ignoreMap":14},[95,156732,156733,156735,156737],{"class":97,"line":98},[95,156734,146658],{"class":105},[95,156736,151],{"class":101},[95,156738,156739],{"class":154}," 12.3456\n",[95,156741,156742,156744,156746,156748,156751,156753,156755],{"class":97,"line":15},[95,156743,30400],{"class":154},[95,156745,106],{"class":105},[95,156747,357],{"class":210},[95,156749,156750],{"class":154},"%.2f",[95,156752,357],{"class":210},[95,156754,156058],{"class":101},[95,156756,156757],{"class":105}," price)\n",[66,156759,156761],{"id":156760},"_2102-format方法","2.10.2 format方法",[86,156763,156765],{"className":30363,"code":156764,"language":30365,"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",[92,156766,156767,156775,156783,156787,156806,156826],{"__ignoreMap":14},[95,156768,156769,156771,156773],{"class":97,"line":98},[95,156770,146513],{"class":105},[95,156772,151],{"class":101},[95,156774,149330],{"class":210},[95,156776,156777,156779,156781],{"class":97,"line":15},[95,156778,146523],{"class":105},[95,156780,151],{"class":101},[95,156782,146528],{"class":154},[95,156784,156785],{"class":97,"line":1161},[95,156786,2382],{"emptyLinePlaceholder":21},[95,156788,156789,156791,156793,156795,156797,156799,156801,156803],{"class":97,"line":1176},[95,156790,30400],{"class":154},[95,156792,106],{"class":105},[95,156794,156659],{"class":210},[95,156796,32444],{"class":154},[95,156798,156665],{"class":210},[95,156800,32444],{"class":154},[95,156802,357],{"class":210},[95,156804,156805],{"class":105},".format(name, age))\n",[95,156807,156808,156810,156812,156814,156817,156819,156822,156824],{"class":97,"line":1182},[95,156809,30400],{"class":154},[95,156811,106],{"class":105},[95,156813,156659],{"class":210},[95,156815,156816],{"class":154},"{0}",[95,156818,156665],{"class":210},[95,156820,156821],{"class":154},"{1}",[95,156823,357],{"class":210},[95,156825,156805],{"class":105},[95,156827,156828,156830,156832,156834,156837,156839,156842,156844,156847,156849,156851,156854,156856,156858],{"class":97,"line":1196},[95,156829,30400],{"class":154},[95,156831,106],{"class":105},[95,156833,156659],{"class":210},[95,156835,156836],{"class":154},"{name}",[95,156838,156665],{"class":210},[95,156840,156841],{"class":154},"{age}",[95,156843,357],{"class":210},[95,156845,156846],{"class":105},".format(",[95,156848,79787],{"class":5199},[95,156850,151],{"class":101},[95,156852,156853],{"class":105},"name, ",[95,156855,70198],{"class":5199},[95,156857,151],{"class":101},[95,156859,156860],{"class":105},"age))\n",[66,156862,156864],{"id":156863},"_2103-f-string","2.10.3 f-string",[10,156866,156867],{},"推荐写法：",[86,156869,156871],{"className":30363,"code":156870,"language":30365,"meta":14,"style":14},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[92,156872,156873,156881,156889,156897,156901],{"__ignoreMap":14},[95,156874,156875,156877,156879],{"class":97,"line":98},[95,156876,146513],{"class":105},[95,156878,151],{"class":101},[95,156880,149330],{"class":210},[95,156882,156883,156885,156887],{"class":97,"line":15},[95,156884,146523],{"class":105},[95,156886,151],{"class":101},[95,156888,146528],{"class":154},[95,156890,156891,156893,156895],{"class":97,"line":1161},[95,156892,155335],{"class":105},[95,156894,151],{"class":101},[95,156896,156646],{"class":154},[95,156898,156899],{"class":97,"line":1176},[95,156900,2382],{"emptyLinePlaceholder":21},[95,156902,156903,156905,156907,156909,156911,156913,156915,156917,156919,156921,156923,156925,156927,156929,156932,156935,156937,156939],{"class":97,"line":1182},[95,156904,30400],{"class":154},[95,156906,106],{"class":105},[95,156908,158],{"class":101},[95,156910,156659],{"class":210},[95,156912,1002],{"class":154},[95,156914,79787],{"class":105},[95,156916,1052],{"class":154},[95,156918,156665],{"class":210},[95,156920,1002],{"class":154},[95,156922,70198],{"class":105},[95,156924,1052],{"class":154},[95,156926,156671],{"class":210},[95,156928,1002],{"class":154},[95,156930,156931],{"class":105},"score",[95,156933,156934],{"class":101},":.1f",[95,156936,1052],{"class":154},[95,156938,357],{"class":210},[95,156940,112],{"class":105},[10,156942,156943],{},"表达式也可以放进去：",[86,156945,156947],{"className":30363,"code":156946,"language":30365,"meta":14,"style":14},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[92,156948,156949,156957,156965],{"__ignoreMap":14},[95,156950,156951,156953,156955],{"class":97,"line":98},[95,156952,146658],{"class":105},[95,156954,151],{"class":101},[95,156956,146663],{"class":154},[95,156958,156959,156961,156963],{"class":97,"line":15},[95,156960,146668],{"class":105},[95,156962,151],{"class":101},[95,156964,54404],{"class":154},[95,156966,156967,156969,156971,156973,156976,156978,156980,156982,156985,156987,156990],{"class":97,"line":1161},[95,156968,30400],{"class":154},[95,156970,106],{"class":105},[95,156972,158],{"class":101},[95,156974,156975],{"class":210},"\"总价:",[95,156977,1002],{"class":154},[95,156979,146658],{"class":105},[95,156981,561],{"class":101},[95,156983,156984],{"class":105}," count",[95,156986,1052],{"class":154},[95,156988,156989],{"class":210},"元\"",[95,156991,112],{"class":105},[37,156993,156995],{"id":156994},"_211-input输入","2.11 input输入",[10,156997,156998,157001],{},[92,156999,157000],{},"input()"," 会暂停程序，等待用户输入。",[86,157003,157005],{"className":30363,"code":157004,"language":30365,"meta":14,"style":14},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[92,157006,157007,157021],{"__ignoreMap":14},[95,157008,157009,157011,157013,157015,157017,157019],{"class":97,"line":98},[95,157010,146513],{"class":105},[95,157012,151],{"class":101},[95,157014,60582],{"class":154},[95,157016,106],{"class":105},[95,157018,152356],{"class":210},[95,157020,112],{"class":105},[95,157022,157023,157025,157027,157029,157032,157034,157036,157038,157040],{"class":97,"line":15},[95,157024,30400],{"class":154},[95,157026,106],{"class":105},[95,157028,158],{"class":101},[95,157030,157031],{"class":210},"\"你好，",[95,157033,1002],{"class":154},[95,157035,79787],{"class":105},[95,157037,1052],{"class":154},[95,157039,357],{"class":210},[95,157041,112],{"class":105},[10,157043,157044],{},"输入整数：",[86,157046,157048],{"className":30363,"code":157047,"language":30365,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[92,157049,157050,157068],{"__ignoreMap":14},[95,157051,157052,157054,157056,157058,157060,157062,157064,157066],{"class":97,"line":98},[95,157053,146523],{"class":105},[95,157055,151],{"class":101},[95,157057,2364],{"class":154},[95,157059,106],{"class":105},[95,157061,53798],{"class":154},[95,157063,106],{"class":105},[95,157065,152371],{"class":210},[95,157067,30482],{"class":105},[95,157069,157070,157072,157074,157076,157079,157081,157083,157085,157088,157090],{"class":97,"line":15},[95,157071,30400],{"class":154},[95,157073,106],{"class":105},[95,157075,158],{"class":101},[95,157077,157078],{"class":210},"\"明年你",[95,157080,1002],{"class":154},[95,157082,146523],{"class":105},[95,157084,587],{"class":101},[95,157086,157087],{"class":154}," 1}",[95,157089,149381],{"class":210},[95,157091,112],{"class":105},[10,157093,157094],{},"输入小数：",[86,157096,157098],{"className":30363,"code":157097,"language":30365,"meta":14,"style":14},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[92,157099,157100,157119],{"__ignoreMap":14},[95,157101,157102,157104,157106,157108,157110,157112,157114,157117],{"class":97,"line":98},[95,157103,155308],{"class":105},[95,157105,151],{"class":101},[95,157107,109774],{"class":154},[95,157109,106],{"class":105},[95,157111,53798],{"class":154},[95,157113,106],{"class":105},[95,157115,157116],{"class":210},"\"请输入身高:\"",[95,157118,30482],{"class":105},[95,157120,157121,157123,157125,157127,157130,157132,157134,157137,157139,157142],{"class":97,"line":15},[95,157122,30400],{"class":154},[95,157124,106],{"class":105},[95,157126,158],{"class":101},[95,157128,157129],{"class":210},"\"身高:",[95,157131,1002],{"class":154},[95,157133,24966],{"class":105},[95,157135,157136],{"class":101},":.2f",[95,157138,1052],{"class":154},[95,157140,157141],{"class":210},"米\"",[95,157143,112],{"class":105},[37,157145,157147],{"id":157146},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[10,157149,123269],{},[49,157151,157152,157155,157158,157161],{},[52,157153,157154],{},"输入商品单价。",[52,157156,157157],{},"输入购买数量。",[52,157159,157160],{},"输入折扣，例如 0.8 表示八折。",[52,157162,157163],{},"输出最终金额，保留两位小数。",[10,157165,10018],{},[86,157167,157169],{"className":30363,"code":157168,"language":30365,"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",[92,157170,157171,157190,157209,157229,157233,157253,157257,157280,157301,157323],{"__ignoreMap":14},[95,157172,157173,157175,157177,157179,157181,157183,157185,157188],{"class":97,"line":98},[95,157174,146658],{"class":105},[95,157176,151],{"class":101},[95,157178,109774],{"class":154},[95,157180,106],{"class":105},[95,157182,53798],{"class":154},[95,157184,106],{"class":105},[95,157186,157187],{"class":210},"\"请输入商品单价:\"",[95,157189,30482],{"class":105},[95,157191,157192,157194,157196,157198,157200,157202,157204,157207],{"class":97,"line":15},[95,157193,146668],{"class":105},[95,157195,151],{"class":101},[95,157197,2364],{"class":154},[95,157199,106],{"class":105},[95,157201,53798],{"class":154},[95,157203,106],{"class":105},[95,157205,157206],{"class":210},"\"请输入购买数量:\"",[95,157208,30482],{"class":105},[95,157210,157211,157214,157216,157218,157220,157222,157224,157227],{"class":97,"line":1161},[95,157212,157213],{"class":105},"discount ",[95,157215,151],{"class":101},[95,157217,109774],{"class":154},[95,157219,106],{"class":105},[95,157221,53798],{"class":154},[95,157223,106],{"class":105},[95,157225,157226],{"class":210},"\"请输入折扣:\"",[95,157228,30482],{"class":105},[95,157230,157231],{"class":97,"line":1176},[95,157232,2382],{"emptyLinePlaceholder":21},[95,157234,157235,157238,157240,157243,157245,157248,157250],{"class":97,"line":1182},[95,157236,157237],{"class":105},"total ",[95,157239,151],{"class":101},[95,157241,157242],{"class":105}," price ",[95,157244,561],{"class":101},[95,157246,157247],{"class":105}," count ",[95,157249,561],{"class":101},[95,157251,157252],{"class":105}," discount\n",[95,157254,157255],{"class":97,"line":1196},[95,157256,2382],{"emptyLinePlaceholder":21},[95,157258,157259,157261,157263,157265,157268,157270,157272,157274,157276,157278],{"class":97,"line":1202},[95,157260,30400],{"class":154},[95,157262,106],{"class":105},[95,157264,158],{"class":101},[95,157266,157267],{"class":210},"\"商品单价:",[95,157269,1002],{"class":154},[95,157271,79792],{"class":105},[95,157273,157136],{"class":101},[95,157275,1052],{"class":154},[95,157277,357],{"class":210},[95,157279,112],{"class":105},[95,157281,157282,157284,157286,157288,157291,157293,157295,157297,157299],{"class":97,"line":1293},[95,157283,30400],{"class":154},[95,157285,106],{"class":105},[95,157287,158],{"class":101},[95,157289,157290],{"class":210},"\"购买数量:",[95,157292,1002],{"class":154},[95,157294,84411],{"class":105},[95,157296,1052],{"class":154},[95,157298,357],{"class":210},[95,157300,112],{"class":105},[95,157302,157303,157305,157307,157309,157312,157314,157317,157319,157321],{"class":97,"line":1299},[95,157304,30400],{"class":154},[95,157306,106],{"class":105},[95,157308,158],{"class":101},[95,157310,157311],{"class":210},"\"折扣:",[95,157313,1002],{"class":154},[95,157315,157316],{"class":105},"discount",[95,157318,1052],{"class":154},[95,157320,357],{"class":210},[95,157322,112],{"class":105},[95,157324,157325,157327,157329,157331,157334,157336,157339,157341,157343,157345],{"class":97,"line":1311},[95,157326,30400],{"class":154},[95,157328,106],{"class":105},[95,157330,158],{"class":101},[95,157332,157333],{"class":210},"\"应付金额:",[95,157335,1002],{"class":154},[95,157337,157338],{"class":105},"total",[95,157340,157136],{"class":101},[95,157342,1052],{"class":154},[95,157344,156989],{"class":210},[95,157346,112],{"class":105},[37,157348,157350],{"id":157349},"_213-易错点","2.13 易错点",[49,157352,157353,157358,157364,157372,157375],{},[52,157354,157355,157357],{},[92,157356,157000],{}," 的结果是字符串，做运算前要转换。",[52,157359,157360,157361,28370],{},"字符串拼接时，数字要先 ",[92,157362,157363],{},"str()",[52,157365,157366,157368,157369,157371],{},[92,157367,151],{}," 是赋值，",[92,157370,2931],{}," 是比较。",[52,157373,157374],{},"Python 没有自增自减运算符。",[52,157376,157377],{},"浮点数计算可能有精度误差：",[86,157379,157381],{"className":30363,"code":157380,"language":30365,"meta":14,"style":14},"print(0.1 + 0.2)\n",[92,157382,157383],{"__ignoreMap":14},[95,157384,157385,157387,157389,157391,157393,157396],{"class":97,"line":98},[95,157386,30400],{"class":154},[95,157388,106],{"class":105},[95,157390,86187],{"class":154},[95,157392,45551],{"class":101},[95,157394,157395],{"class":154}," 0.2",[95,157397,112],{"class":105},[10,157399,157400,157401,157404],{},"金额计算如果要求严格，可以后续学习 ",[92,157402,157403],{},"decimal"," 模块。",[37,157406,157408],{"id":157407},"_214-本章练习","2.14 本章练习",[49,157410,157411,157414,157417,157420,157423],{},[52,157412,157413],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[52,157415,157416],{},"输入圆的半径，计算面积，保留两位小数。",[52,157418,157419],{},"输入工资和奖金，计算总收入。",[52,157421,157422],{},"输入摄氏温度，转换为华氏温度。",[52,157424,157425],{},"写一个 BMI 计算程序：",[86,157427,157430],{"className":157428,"code":157429,"language":5170,"meta":14},[5168],"BMI = 体重kg \u002F 身高m ** 2\n",[92,157431,157429],{"__ignoreMap":14},[5109,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":1161,"text":155892},{"id":156085,"depth":1161,"text":156086},{"id":156173,"depth":1161,"text":156174},{"id":156279,"depth":1161,"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":1161,"text":156616},{"id":156760,"depth":1161,"text":156761},{"id":156863,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157466,"title":157467,"body":157468,"description":23360,"extension":18,"meta":159104,"navigation":21,"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],[33,157471,157467],{"id":157472},"_3-判断语句",[37,157474,157476],{"id":157475},"_31-布尔值","3.1 布尔值",[10,157478,157479],{},"判断语句依赖布尔值：",[86,157481,157483],{"className":30363,"code":157482,"language":30365,"meta":14,"style":14},"True\nFalse\n",[92,157484,157485,157490],{"__ignoreMap":14},[95,157486,157487],{"class":97,"line":98},[95,157488,157489],{"class":154},"True\n",[95,157491,157492],{"class":97,"line":15},[95,157493,157494],{"class":154},"False\n",[10,157496,157497],{},"比较表达式会产生布尔值：",[86,157499,157501],{"className":30363,"code":157500,"language":30365,"meta":14,"style":14},"age = 18\nprint(age >= 18)  # True\n",[92,157502,157503,157511],{"__ignoreMap":14},[95,157504,157505,157507,157509],{"class":97,"line":98},[95,157506,146523],{"class":105},[95,157508,151],{"class":101},[95,157510,146528],{"class":154},[95,157512,157513,157515,157517,157519,157521,157523],{"class":97,"line":15},[95,157514,30400],{"class":154},[95,157516,155745],{"class":105},[95,157518,1692],{"class":101},[95,157520,156262],{"class":154},[95,157522,45793],{"class":105},[95,157524,157525],{"class":164},"# True\n",[37,157527,157529],{"id":157528},"_32-if基础语法","3.2 if基础语法",[86,157531,157533],{"className":30363,"code":157532,"language":30365,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[92,157534,157535,157553,157557,157569],{"__ignoreMap":14},[95,157536,157537,157539,157541,157543,157545,157547,157549,157551],{"class":97,"line":98},[95,157538,146523],{"class":105},[95,157540,151],{"class":101},[95,157542,2364],{"class":154},[95,157544,106],{"class":105},[95,157546,53798],{"class":154},[95,157548,106],{"class":105},[95,157550,152371],{"class":210},[95,157552,30482],{"class":105},[95,157554,157555],{"class":97,"line":15},[95,157556,2382],{"emptyLinePlaceholder":21},[95,157558,157559,157561,157563,157565,157567],{"class":97,"line":1161},[95,157560,1513],{"class":101},[95,157562,15690],{"class":105},[95,157564,1692],{"class":101},[95,157566,156262],{"class":154},[95,157568,3721],{"class":105},[95,157570,157571,157573,157575,157578],{"class":97,"line":1176},[95,157572,31284],{"class":154},[95,157574,106],{"class":105},[95,157576,157577],{"class":210},"\"可以进入网吧\"",[95,157579,112],{"class":105},[10,157581,9008],{},[49,157583,157584,157589,157592,157595],{},[52,157585,157586,157588],{},[92,157587,1513],{}," 后面是条件表达式。",[52,157590,157591],{},"条件后面必须写冒号。",[52,157593,157594],{},"条件成立时执行缩进代码块。",[52,157596,157597],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[10,157599,157600],{},"错误示例：",[86,157602,157604],{"className":30363,"code":157603,"language":30365,"meta":14,"style":14},"if age >= 18\n    print(\"可以进入\")\n",[92,157605,157606,157616],{"__ignoreMap":14},[95,157607,157608,157610,157612,157614],{"class":97,"line":98},[95,157609,1513],{"class":101},[95,157611,15690],{"class":105},[95,157613,1692],{"class":101},[95,157615,146528],{"class":154},[95,157617,157618,157620,157622,157625],{"class":97,"line":15},[95,157619,31284],{"class":154},[95,157621,106],{"class":105},[95,157623,157624],{"class":210},"\"可以进入\"",[95,157626,112],{"class":105},[10,157628,157629],{},"缺少冒号。",[37,157631,157633],{"id":157632},"_33-if-else","3.3 if else",[86,157635,157637],{"className":30363,"code":157636,"language":30365,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[92,157638,157639,157657,157661,157673,157684,157690],{"__ignoreMap":14},[95,157640,157641,157643,157645,157647,157649,157651,157653,157655],{"class":97,"line":98},[95,157642,146523],{"class":105},[95,157644,151],{"class":101},[95,157646,2364],{"class":154},[95,157648,106],{"class":105},[95,157650,53798],{"class":154},[95,157652,106],{"class":105},[95,157654,152371],{"class":210},[95,157656,30482],{"class":105},[95,157658,157659],{"class":97,"line":15},[95,157660,2382],{"emptyLinePlaceholder":21},[95,157662,157663,157665,157667,157669,157671],{"class":97,"line":1161},[95,157664,1513],{"class":101},[95,157666,15690],{"class":105},[95,157668,1692],{"class":101},[95,157670,156262],{"class":154},[95,157672,3721],{"class":105},[95,157674,157675,157677,157679,157682],{"class":97,"line":1176},[95,157676,31284],{"class":154},[95,157678,106],{"class":105},[95,157680,157681],{"class":210},"\"成年人\"",[95,157683,112],{"class":105},[95,157685,157686,157688],{"class":97,"line":1182},[95,157687,1683],{"class":101},[95,157689,3721],{"class":105},[95,157691,157692,157694,157696,157699],{"class":97,"line":1196},[95,157693,31284],{"class":154},[95,157695,106],{"class":105},[95,157697,157698],{"class":210},"\"未成年人\"",[95,157700,112],{"class":105},[10,157702,157703],{},"执行逻辑：",[49,157705,157706,157712,157717],{},[52,157707,157708,157709,157711],{},"条件成立，执行 ",[92,157710,1513],{}," 代码块。",[52,157713,157714,157715,157711],{},"条件不成立，执行 ",[92,157716,1683],{},[52,157718,157719],{},"两个代码块只会执行其中一个。",[37,157721,157723],{"id":157722},"_34-if-elif-else","3.4 if elif else",[10,157725,157726],{},"多条件判断：",[86,157728,157730],{"className":30363,"code":157729,"language":30365,"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",[92,157731,157732,157750,157754,157768,157779,157793,157804,157817,157828,157834],{"__ignoreMap":14},[95,157733,157734,157736,157738,157740,157742,157744,157746,157748],{"class":97,"line":98},[95,157735,155335],{"class":105},[95,157737,151],{"class":101},[95,157739,2364],{"class":154},[95,157741,106],{"class":105},[95,157743,53798],{"class":154},[95,157745,106],{"class":105},[95,157747,152386],{"class":210},[95,157749,30482],{"class":105},[95,157751,157752],{"class":97,"line":15},[95,157753,2382],{"emptyLinePlaceholder":21},[95,157755,157756,157758,157761,157763,157766],{"class":97,"line":1161},[95,157757,1513],{"class":101},[95,157759,157760],{"class":105}," score ",[95,157762,1692],{"class":101},[95,157764,157765],{"class":154}," 90",[95,157767,3721],{"class":105},[95,157769,157770,157772,157774,157777],{"class":97,"line":1176},[95,157771,31284],{"class":154},[95,157773,106],{"class":105},[95,157775,157776],{"class":210},"\"优秀\"",[95,157778,112],{"class":105},[95,157780,157781,157784,157786,157788,157791],{"class":97,"line":1182},[95,157782,157783],{"class":101},"elif",[95,157785,157760],{"class":105},[95,157787,1692],{"class":101},[95,157789,157790],{"class":154}," 80",[95,157792,3721],{"class":105},[95,157794,157795,157797,157799,157802],{"class":97,"line":1196},[95,157796,31284],{"class":154},[95,157798,106],{"class":105},[95,157800,157801],{"class":210},"\"良好\"",[95,157803,112],{"class":105},[95,157805,157806,157808,157810,157812,157815],{"class":97,"line":1202},[95,157807,157783],{"class":101},[95,157809,157760],{"class":105},[95,157811,1692],{"class":101},[95,157813,157814],{"class":154}," 60",[95,157816,3721],{"class":105},[95,157818,157819,157821,157823,157826],{"class":97,"line":1293},[95,157820,31284],{"class":154},[95,157822,106],{"class":105},[95,157824,157825],{"class":210},"\"及格\"",[95,157827,112],{"class":105},[95,157829,157830,157832],{"class":97,"line":1299},[95,157831,1683],{"class":101},[95,157833,3721],{"class":105},[95,157835,157836,157838,157840,157843],{"class":97,"line":1311},[95,157837,31284],{"class":154},[95,157839,106],{"class":105},[95,157841,157842],{"class":210},"\"不及格\"",[95,157844,112],{"class":105},[10,157846,157847],{},"注意判断顺序很重要。",[10,157849,157850,157851,157854],{},"如果把 ",[92,157852,157853],{},"score >= 60"," 放在最前面：",[86,157856,157858],{"className":30363,"code":157857,"language":30365,"meta":14,"style":14},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[92,157859,157860,157872,157882,157894],{"__ignoreMap":14},[95,157861,157862,157864,157866,157868,157870],{"class":97,"line":98},[95,157863,1513],{"class":101},[95,157865,157760],{"class":105},[95,157867,1692],{"class":101},[95,157869,157814],{"class":154},[95,157871,3721],{"class":105},[95,157873,157874,157876,157878,157880],{"class":97,"line":15},[95,157875,31284],{"class":154},[95,157877,106],{"class":105},[95,157879,157825],{"class":210},[95,157881,112],{"class":105},[95,157883,157884,157886,157888,157890,157892],{"class":97,"line":1161},[95,157885,157783],{"class":101},[95,157887,157760],{"class":105},[95,157889,1692],{"class":101},[95,157891,157765],{"class":154},[95,157893,3721],{"class":105},[95,157895,157896,157898,157900,157902],{"class":97,"line":1176},[95,157897,31284],{"class":154},[95,157899,106],{"class":105},[95,157901,157776],{"class":210},[95,157903,112],{"class":105},[10,157905,157906,157907,157909],{},"成绩 95 会先满足 ",[92,157908,157853],{},"，后面的优秀分支就不会执行。",[37,157911,157913],{"id":157912},"_35-判断语句嵌套","3.5 判断语句嵌套",[10,157915,157916],{},"嵌套判断就是在一个判断内部再写判断。",[86,157918,157920],{"className":30363,"code":157919,"language":30365,"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",[92,157921,157922,157940,157955,157959,157971,157985,157995,158002,158013,158019],{"__ignoreMap":14},[95,157923,157924,157926,157928,157930,157932,157934,157936,157938],{"class":97,"line":98},[95,157925,146523],{"class":105},[95,157927,151],{"class":101},[95,157929,2364],{"class":154},[95,157931,106],{"class":105},[95,157933,53798],{"class":154},[95,157935,106],{"class":105},[95,157937,152371],{"class":210},[95,157939,30482],{"class":105},[95,157941,157942,157944,157946,157948,157950,157953],{"class":97,"line":15},[95,157943,156338],{"class":105},[95,157945,151],{"class":101},[95,157947,60582],{"class":154},[95,157949,106],{"class":105},[95,157951,157952],{"class":210},"\"是否有票(y\u002Fn):\"",[95,157954,112],{"class":105},[95,157956,157957],{"class":97,"line":1161},[95,157958,2382],{"emptyLinePlaceholder":21},[95,157960,157961,157963,157965,157967,157969],{"class":97,"line":1176},[95,157962,1513],{"class":101},[95,157964,15690],{"class":105},[95,157966,1692],{"class":101},[95,157968,156262],{"class":154},[95,157970,3721],{"class":105},[95,157972,157973,157975,157978,157980,157983],{"class":97,"line":1182},[95,157974,3083],{"class":101},[95,157976,157977],{"class":105}," has_ticket ",[95,157979,2931],{"class":101},[95,157981,157982],{"class":210}," \"y\"",[95,157984,3721],{"class":105},[95,157986,157987,157989,157991,157993],{"class":97,"line":1196},[95,157988,32436],{"class":154},[95,157990,106],{"class":105},[95,157992,157624],{"class":210},[95,157994,112],{"class":105},[95,157996,157997,158000],{"class":97,"line":1202},[95,157998,157999],{"class":101},"    else",[95,158001,3721],{"class":105},[95,158003,158004,158006,158008,158011],{"class":97,"line":1293},[95,158005,32436],{"class":154},[95,158007,106],{"class":105},[95,158009,158010],{"class":210},"\"请先买票\"",[95,158012,112],{"class":105},[95,158014,158015,158017],{"class":97,"line":1299},[95,158016,1683],{"class":101},[95,158018,3721],{"class":105},[95,158020,158021,158023,158025,158028],{"class":97,"line":1311},[95,158022,31284],{"class":154},[95,158024,106],{"class":105},[95,158026,158027],{"class":210},"\"未成年人禁止进入\"",[95,158029,112],{"class":105},[10,158031,158032],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[37,158034,158036],{"id":158035},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[66,158038,158040],{"id":158039},"_361-and","3.6.1 and",[10,158042,158043],{},"两个条件都成立才成立。",[86,158045,158047],{"className":30363,"code":158046,"language":30365,"meta":14,"style":14},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[92,158048,158049,158057,158065,158069,158084],{"__ignoreMap":14},[95,158050,158051,158053,158055],{"class":97,"line":98},[95,158052,146523],{"class":105},[95,158054,151],{"class":101},[95,158056,88042],{"class":154},[95,158058,158059,158061,158063],{"class":97,"line":15},[95,158060,156338],{"class":105},[95,158062,151],{"class":101},[95,158064,153576],{"class":154},[95,158066,158067],{"class":97,"line":1161},[95,158068,2382],{"emptyLinePlaceholder":21},[95,158070,158071,158073,158075,158077,158079,158081],{"class":97,"line":1176},[95,158072,1513],{"class":101},[95,158074,15690],{"class":105},[95,158076,1692],{"class":101},[95,158078,156262],{"class":154},[95,158080,120406],{"class":101},[95,158082,158083],{"class":105}," has_ticket:\n",[95,158085,158086,158088,158090,158092],{"class":97,"line":1182},[95,158087,31284],{"class":154},[95,158089,106],{"class":105},[95,158091,157624],{"class":210},[95,158093,112],{"class":105},[66,158095,158097],{"id":158096},"_362-or","3.6.2 or",[10,158099,158100],{},"只要一个条件成立就成立。",[86,158102,158104],{"className":30363,"code":158103,"language":30365,"meta":14,"style":14},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[92,158105,158106,158115,158124,158128,158140],{"__ignoreMap":14},[95,158107,158108,158111,158113],{"class":97,"line":98},[95,158109,158110],{"class":105},"is_vip ",[95,158112,151],{"class":101},[95,158114,125784],{"class":154},[95,158116,158117,158120,158122],{"class":97,"line":15},[95,158118,158119],{"class":105},"coupon ",[95,158121,151],{"class":101},[95,158123,153576],{"class":154},[95,158125,158126],{"class":97,"line":1161},[95,158127,2382],{"emptyLinePlaceholder":21},[95,158129,158130,158132,158135,158137],{"class":97,"line":1176},[95,158131,1513],{"class":101},[95,158133,158134],{"class":105}," is_vip ",[95,158136,115067],{"class":101},[95,158138,158139],{"class":105}," coupon:\n",[95,158141,158142,158144,158146,158149],{"class":97,"line":1182},[95,158143,31284],{"class":154},[95,158145,106],{"class":105},[95,158147,158148],{"class":210},"\"可以享受优惠\"",[95,158150,112],{"class":105},[66,158152,158154],{"id":158153},"_363-not","3.6.3 not",[10,158156,158157],{},"取反。",[86,158159,158161],{"className":30363,"code":158160,"language":30365,"meta":14,"style":14},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[92,158162,158163,158172,158176,158185],{"__ignoreMap":14},[95,158164,158165,158168,158170],{"class":97,"line":98},[95,158166,158167],{"class":105},"is_closed ",[95,158169,151],{"class":101},[95,158171,125784],{"class":154},[95,158173,158174],{"class":97,"line":15},[95,158175,2382],{"emptyLinePlaceholder":21},[95,158177,158178,158180,158182],{"class":97,"line":1161},[95,158179,1513],{"class":101},[95,158181,38915],{"class":101},[95,158183,158184],{"class":105}," is_closed:\n",[95,158186,158187,158189,158191,158194],{"class":97,"line":1176},[95,158188,31284],{"class":154},[95,158190,106],{"class":105},[95,158192,158193],{"class":210},"\"店铺营业中\"",[95,158195,112],{"class":105},[37,158197,158199],{"id":158198},"_37-链式比较","3.7 链式比较",[10,158201,158202],{},"Python 支持链式比较：",[86,158204,158206],{"className":30363,"code":158205,"language":30365,"meta":14,"style":14},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[92,158207,158208,158217,158221,158238],{"__ignoreMap":14},[95,158209,158210,158212,158214],{"class":97,"line":98},[95,158211,155335],{"class":105},[95,158213,151],{"class":101},[95,158215,158216],{"class":154}," 85\n",[95,158218,158219],{"class":97,"line":15},[95,158220,2382],{"emptyLinePlaceholder":21},[95,158222,158223,158225,158227,158230,158232,158234,158236],{"class":97,"line":1161},[95,158224,1513],{"class":101},[95,158226,4075],{"class":154},[95,158228,158229],{"class":101}," \u003C=",[95,158231,157760],{"class":105},[95,158233,1570],{"class":101},[95,158235,5737],{"class":154},[95,158237,3721],{"class":105},[95,158239,158240,158242,158244,158247],{"class":97,"line":1176},[95,158241,31284],{"class":154},[95,158243,106],{"class":105},[95,158245,158246],{"class":210},"\"成绩合法\"",[95,158248,112],{"class":105},[10,158250,158251],{},"等价于：",[86,158253,158255],{"className":30363,"code":158254,"language":30365,"meta":14,"style":14},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[92,158256,158257,158277],{"__ignoreMap":14},[95,158258,158259,158261,158263,158265,158267,158269,158271,158273,158275],{"class":97,"line":98},[95,158260,1513],{"class":101},[95,158262,157760],{"class":105},[95,158264,1692],{"class":101},[95,158266,4075],{"class":154},[95,158268,120406],{"class":101},[95,158270,157760],{"class":105},[95,158272,1570],{"class":101},[95,158274,5737],{"class":154},[95,158276,3721],{"class":105},[95,158278,158279,158281,158283,158285],{"class":97,"line":15},[95,158280,31284],{"class":154},[95,158282,106],{"class":105},[95,158284,158246],{"class":210},[95,158286,112],{"class":105},[37,158288,158290],{"id":158289},"_38-真值和假值","3.8 真值和假值",[10,158292,116444,158293,158295],{},[92,158294,1513],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[10,158297,158298],{},"假值：",[86,158300,158302],{"className":30363,"code":158301,"language":30365,"meta":14,"style":14},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[92,158303,158304,158308,158313,158317,158321,158326,158330,158334,158339],{"__ignoreMap":14},[95,158305,158306],{"class":97,"line":98},[95,158307,157494],{"class":154},[95,158309,158310],{"class":97,"line":15},[95,158311,158312],{"class":154},"None\n",[95,158314,158315],{"class":97,"line":1161},[95,158316,3067],{"class":154},[95,158318,158319],{"class":97,"line":1176},[95,158320,32327],{"class":154},[95,158322,158323],{"class":97,"line":1182},[95,158324,158325],{"class":210},"\"\"\n",[95,158327,158328],{"class":97,"line":1196},[95,158329,32342],{"class":105},[95,158331,158332],{"class":97,"line":1202},[95,158333,1958],{"class":105},[95,158335,158336],{"class":97,"line":1293},[95,158337,158338],{"class":105},"{}\n",[95,158340,158341,158343],{"class":97,"line":1299},[95,158342,155267],{"class":154},[95,158344,1958],{"class":105},[10,158346,15118],{},[86,158348,158350],{"className":30363,"code":158349,"language":30365,"meta":14,"style":14},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[92,158351,158352,158366,158370,158377,158397,158403],{"__ignoreMap":14},[95,158353,158354,158356,158358,158360,158362,158364],{"class":97,"line":98},[95,158355,146513],{"class":105},[95,158357,151],{"class":101},[95,158359,60582],{"class":154},[95,158361,106],{"class":105},[95,158363,152356],{"class":210},[95,158365,112],{"class":105},[95,158367,158368],{"class":97,"line":15},[95,158369,2382],{"emptyLinePlaceholder":21},[95,158371,158372,158374],{"class":97,"line":1161},[95,158373,1513],{"class":101},[95,158375,158376],{"class":105}," name:\n",[95,158378,158379,158381,158383,158385,158387,158389,158391,158393,158395],{"class":97,"line":1176},[95,158380,31284],{"class":154},[95,158382,106],{"class":105},[95,158384,158],{"class":101},[95,158386,157031],{"class":210},[95,158388,1002],{"class":154},[95,158390,79787],{"class":105},[95,158392,1052],{"class":154},[95,158394,357],{"class":210},[95,158396,112],{"class":105},[95,158398,158399,158401],{"class":97,"line":1182},[95,158400,1683],{"class":101},[95,158402,3721],{"class":105},[95,158404,158405,158407,158409,158412],{"class":97,"line":1196},[95,158406,31284],{"class":154},[95,158408,106],{"class":105},[95,158410,158411],{"class":210},"\"姓名不能为空\"",[95,158413,112],{"class":105},[37,158415,158417],{"id":158416},"_39-match语句","3.9 match语句",[10,158419,158420,158421,158423],{},"Python 3.10 开始支持 ",[92,158422,71242],{},"。它适合处理固定选项。",[86,158425,158427],{"className":30363,"code":158426,"language":30365,"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",[92,158428,158429,158445,158449,158456,158466,158477,158486,158497,158506,158517,158524],{"__ignoreMap":14},[95,158430,158431,158434,158436,158438,158440,158443],{"class":97,"line":98},[95,158432,158433],{"class":105},"command ",[95,158435,151],{"class":101},[95,158437,60582],{"class":154},[95,158439,106],{"class":105},[95,158441,158442],{"class":210},"\"请输入命令:\"",[95,158444,112],{"class":105},[95,158446,158447],{"class":97,"line":15},[95,158448,2382],{"emptyLinePlaceholder":21},[95,158450,158451,158453],{"class":97,"line":1161},[95,158452,71242],{"class":101},[95,158454,158455],{"class":105}," command:\n",[95,158457,158458,158461,158464],{"class":97,"line":1176},[95,158459,158460],{"class":101},"    case",[95,158462,158463],{"class":210}," \"start\"",[95,158465,3721],{"class":105},[95,158467,158468,158470,158472,158475],{"class":97,"line":1182},[95,158469,32436],{"class":154},[95,158471,106],{"class":105},[95,158473,158474],{"class":210},"\"启动\"",[95,158476,112],{"class":105},[95,158478,158479,158481,158484],{"class":97,"line":1196},[95,158480,158460],{"class":101},[95,158482,158483],{"class":210}," \"stop\"",[95,158485,3721],{"class":105},[95,158487,158488,158490,158492,158495],{"class":97,"line":1202},[95,158489,32436],{"class":154},[95,158491,106],{"class":105},[95,158493,158494],{"class":210},"\"停止\"",[95,158496,112],{"class":105},[95,158498,158499,158501,158504],{"class":97,"line":1293},[95,158500,158460],{"class":101},[95,158502,158503],{"class":210}," \"restart\"",[95,158505,3721],{"class":105},[95,158507,158508,158510,158512,158515],{"class":97,"line":1299},[95,158509,32436],{"class":154},[95,158511,106],{"class":105},[95,158513,158514],{"class":210},"\"重启\"",[95,158516,112],{"class":105},[95,158518,158519,158521],{"class":97,"line":1311},[95,158520,158460],{"class":101},[95,158522,158523],{"class":105}," _:\n",[95,158525,158526,158528,158530,158533],{"class":97,"line":1594},[95,158527,32436],{"class":154},[95,158529,106],{"class":105},[95,158531,158532],{"class":210},"\"未知命令\"",[95,158534,112],{"class":105},[10,158536,158537,158538,158540,158541,158543],{},"入门阶段掌握 ",[92,158539,154635],{}," 更重要，",[92,158542,71242],{}," 可以作为补充。",[37,158545,158547],{"id":158546},"_310-小案例成绩等级","3.10 小案例：成绩等级",[10,158549,123269],{},[49,158551,158552,158555,158558],{},[52,158553,158554],{},"输入成绩。",[52,158556,158557],{},"判断成绩是否合法。",[52,158559,158560],{},"输出等级。",[10,158562,10018],{},[86,158564,158566],{"className":30363,"code":158565,"language":30365,"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",[92,158567,158568,158586,158590,158608,158619,158631,158642,158654,158665,158678,158689,158701,158712,158718],{"__ignoreMap":14},[95,158569,158570,158572,158574,158576,158578,158580,158582,158584],{"class":97,"line":98},[95,158571,155335],{"class":105},[95,158573,151],{"class":101},[95,158575,109774],{"class":154},[95,158577,106],{"class":105},[95,158579,53798],{"class":154},[95,158581,106],{"class":105},[95,158583,152386],{"class":210},[95,158585,30482],{"class":105},[95,158587,158588],{"class":97,"line":15},[95,158589,2382],{"emptyLinePlaceholder":21},[95,158591,158592,158594,158596,158598,158600,158602,158604,158606],{"class":97,"line":1161},[95,158593,1513],{"class":101},[95,158595,38915],{"class":101},[95,158597,4075],{"class":154},[95,158599,158229],{"class":101},[95,158601,157760],{"class":105},[95,158603,1570],{"class":101},[95,158605,5737],{"class":154},[95,158607,3721],{"class":105},[95,158609,158610,158612,158614,158617],{"class":97,"line":1176},[95,158611,31284],{"class":154},[95,158613,106],{"class":105},[95,158615,158616],{"class":210},"\"成绩不合法\"",[95,158618,112],{"class":105},[95,158620,158621,158623,158625,158627,158629],{"class":97,"line":1182},[95,158622,157783],{"class":101},[95,158624,157760],{"class":105},[95,158626,1692],{"class":101},[95,158628,157765],{"class":154},[95,158630,3721],{"class":105},[95,158632,158633,158635,158637,158640],{"class":97,"line":1196},[95,158634,31284],{"class":154},[95,158636,106],{"class":105},[95,158638,158639],{"class":210},"\"等级:A\"",[95,158641,112],{"class":105},[95,158643,158644,158646,158648,158650,158652],{"class":97,"line":1202},[95,158645,157783],{"class":101},[95,158647,157760],{"class":105},[95,158649,1692],{"class":101},[95,158651,157790],{"class":154},[95,158653,3721],{"class":105},[95,158655,158656,158658,158660,158663],{"class":97,"line":1293},[95,158657,31284],{"class":154},[95,158659,106],{"class":105},[95,158661,158662],{"class":210},"\"等级:B\"",[95,158664,112],{"class":105},[95,158666,158667,158669,158671,158673,158676],{"class":97,"line":1299},[95,158668,157783],{"class":101},[95,158670,157760],{"class":105},[95,158672,1692],{"class":101},[95,158674,158675],{"class":154}," 70",[95,158677,3721],{"class":105},[95,158679,158680,158682,158684,158687],{"class":97,"line":1311},[95,158681,31284],{"class":154},[95,158683,106],{"class":105},[95,158685,158686],{"class":210},"\"等级:C\"",[95,158688,112],{"class":105},[95,158690,158691,158693,158695,158697,158699],{"class":97,"line":1594},[95,158692,157783],{"class":101},[95,158694,157760],{"class":105},[95,158696,1692],{"class":101},[95,158698,157814],{"class":154},[95,158700,3721],{"class":105},[95,158702,158703,158705,158707,158710],{"class":97,"line":1599},[95,158704,31284],{"class":154},[95,158706,106],{"class":105},[95,158708,158709],{"class":210},"\"等级:D\"",[95,158711,112],{"class":105},[95,158713,158714,158716],{"class":97,"line":1605},[95,158715,1683],{"class":101},[95,158717,3721],{"class":105},[95,158719,158720,158722,158724,158727],{"class":97,"line":1610},[95,158721,31284],{"class":154},[95,158723,106],{"class":105},[95,158725,158726],{"class":210},"\"等级:E\"",[95,158728,112],{"class":105},[37,158730,158732],{"id":158731},"_311-小案例会员折扣","3.11 小案例：会员折扣",[10,158734,123269],{},[49,158736,158737,158740,158743,158746],{},[52,158738,158739],{},"输入消费金额。",[52,158741,158742],{},"输入会员等级，普通、银卡、金卡。",[52,158744,158745],{},"普通不打折，银卡 9 折，金卡 8 折。",[52,158747,158748],{},"满 500 再减 50。",[10,158750,10018],{},[86,158752,158754],{"className":30363,"code":158753,"language":30365,"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",[92,158755,158756,158776,158792,158796,158804,158808,158822,158832,158845,158854,158867,158875,158881,158892,158896,158910,158914,158928,158938,158942],{"__ignoreMap":14},[95,158757,158758,158761,158763,158765,158767,158769,158771,158774],{"class":97,"line":98},[95,158759,158760],{"class":105},"amount ",[95,158762,151],{"class":101},[95,158764,109774],{"class":154},[95,158766,106],{"class":105},[95,158768,53798],{"class":154},[95,158770,106],{"class":105},[95,158772,158773],{"class":210},"\"请输入消费金额:\"",[95,158775,30482],{"class":105},[95,158777,158778,158781,158783,158785,158787,158790],{"class":97,"line":15},[95,158779,158780],{"class":105},"level ",[95,158782,151],{"class":101},[95,158784,60582],{"class":154},[95,158786,106],{"class":105},[95,158788,158789],{"class":210},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[95,158791,112],{"class":105},[95,158793,158794],{"class":97,"line":1161},[95,158795,2382],{"emptyLinePlaceholder":21},[95,158797,158798,158800,158802],{"class":97,"line":1176},[95,158799,157213],{"class":105},[95,158801,151],{"class":101},[95,158803,55676],{"class":154},[95,158805,158806],{"class":97,"line":1182},[95,158807,2382],{"emptyLinePlaceholder":21},[95,158809,158810,158812,158815,158817,158820],{"class":97,"line":1196},[95,158811,1513],{"class":101},[95,158813,158814],{"class":105}," level ",[95,158816,2931],{"class":101},[95,158818,158819],{"class":210}," \"银卡\"",[95,158821,3721],{"class":105},[95,158823,158824,158827,158829],{"class":97,"line":1202},[95,158825,158826],{"class":105},"    discount ",[95,158828,151],{"class":101},[95,158830,158831],{"class":154}," 0.9\n",[95,158833,158834,158836,158838,158840,158843],{"class":97,"line":1293},[95,158835,157783],{"class":101},[95,158837,158814],{"class":105},[95,158839,2931],{"class":101},[95,158841,158842],{"class":210}," \"金卡\"",[95,158844,3721],{"class":105},[95,158846,158847,158849,158851],{"class":97,"line":1299},[95,158848,158826],{"class":105},[95,158850,151],{"class":101},[95,158852,158853],{"class":154}," 0.8\n",[95,158855,158856,158858,158860,158862,158865],{"class":97,"line":1311},[95,158857,157783],{"class":101},[95,158859,158814],{"class":105},[95,158861,2931],{"class":101},[95,158863,158864],{"class":210}," \"普通\"",[95,158866,3721],{"class":105},[95,158868,158869,158871,158873],{"class":97,"line":1594},[95,158870,158826],{"class":105},[95,158872,151],{"class":101},[95,158874,55676],{"class":154},[95,158876,158877,158879],{"class":97,"line":1599},[95,158878,1683],{"class":101},[95,158880,3721],{"class":105},[95,158882,158883,158885,158887,158890],{"class":97,"line":1605},[95,158884,31284],{"class":154},[95,158886,106],{"class":105},[95,158888,158889],{"class":210},"\"会员等级输入错误，按普通会员计算\"",[95,158891,112],{"class":105},[95,158893,158894],{"class":97,"line":1610},[95,158895,2382],{"emptyLinePlaceholder":21},[95,158897,158898,158901,158903,158906,158908],{"class":97,"line":1624},[95,158899,158900],{"class":105},"pay ",[95,158902,151],{"class":101},[95,158904,158905],{"class":105}," amount ",[95,158907,561],{"class":101},[95,158909,157252],{"class":105},[95,158911,158912],{"class":97,"line":1629},[95,158913,2382],{"emptyLinePlaceholder":21},[95,158915,158916,158918,158921,158923,158926],{"class":97,"line":1635},[95,158917,1513],{"class":101},[95,158919,158920],{"class":105}," pay ",[95,158922,1692],{"class":101},[95,158924,158925],{"class":154}," 500",[95,158927,3721],{"class":105},[95,158929,158930,158933,158935],{"class":97,"line":1656},[95,158931,158932],{"class":105},"    pay ",[95,158934,150229],{"class":101},[95,158936,158937],{"class":154}," 50\n",[95,158939,158940],{"class":97,"line":1661},[95,158941,2382],{"emptyLinePlaceholder":21},[95,158943,158944,158946,158948,158950,158952,158954,158957,158959,158961,158963],{"class":97,"line":1675},[95,158945,30400],{"class":154},[95,158947,106],{"class":105},[95,158949,158],{"class":101},[95,158951,157333],{"class":210},[95,158953,1002],{"class":154},[95,158955,158956],{"class":105},"pay",[95,158958,157136],{"class":101},[95,158960,1052],{"class":154},[95,158962,156989],{"class":210},[95,158964,112],{"class":105},[37,158966,158968],{"id":158967},"_312-易错点","3.12 易错点",[49,158970,158971,158974,158977,158980,158985],{},[52,158972,158973],{},"冒号不能漏。",[52,158975,158976],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[52,158978,158979],{},"多分支判断要注意顺序。",[52,158981,158982,158983,28370],{},"判断相等用 ",[92,158984,2931],{},[52,158986,158987],{},"字符串比较区分大小写：",[86,158989,158991],{"className":30363,"code":158990,"language":30365,"meta":14,"style":14},"\"Y\" == \"y\"  # False\n",[92,158992,158993],{"__ignoreMap":14},[95,158994,158995,158998,159000,159002],{"class":97,"line":98},[95,158996,158997],{"class":210},"\"Y\"",[95,158999,101536],{"class":101},[95,159001,157982],{"class":210},[95,159003,159004],{"class":164},"  # False\n",[10,159006,159007],{},"可转换后再判断：",[86,159009,159011],{"className":30363,"code":159010,"language":30365,"meta":14,"style":14},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[92,159012,159013,159030,159043],{"__ignoreMap":14},[95,159014,159015,159018,159020,159022,159024,159027],{"class":97,"line":98},[95,159016,159017],{"class":105},"answer ",[95,159019,151],{"class":101},[95,159021,60582],{"class":154},[95,159023,106],{"class":105},[95,159025,159026],{"class":210},"\"是否继续(y\u002Fn):\"",[95,159028,159029],{"class":105},").lower()\n",[95,159031,159032,159034,159037,159039,159041],{"class":97,"line":15},[95,159033,1513],{"class":101},[95,159035,159036],{"class":105}," answer ",[95,159038,2931],{"class":101},[95,159040,157982],{"class":210},[95,159042,3721],{"class":105},[95,159044,159045,159047,159049,159052],{"class":97,"line":1161},[95,159046,31284],{"class":154},[95,159048,106],{"class":105},[95,159050,159051],{"class":210},"\"继续\"",[95,159053,112],{"class":105},[37,159055,159057],{"id":159056},"_313-本章练习","3.13 本章练习",[49,159059,159060,159063,159066,159069,159079],{},[52,159061,159062],{},"输入年龄，判断是否成年。",[52,159064,159065],{},"输入年份，判断是否为闰年。",[52,159067,159068],{},"输入三个数字，输出最大值。",[52,159070,159071,159072,159075,159076,159078],{},"写登录判断：用户名是 ",[92,159073,159074],{},"admin"," 且密码是 ",[92,159077,15067],{}," 才登录成功。",[52,159080,159081],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5109,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":1161,"text":158040},{"id":158096,"depth":1161,"text":158097},{"id":158153,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159110,"title":159111,"body":159112,"description":23360,"extension":18,"meta":160881,"navigation":21,"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],[33,159115,159111],{"id":159116},"_4-循环语句",[37,159118,159120],{"id":159119},"_41-为什么需要循环","4.1 为什么需要循环",[10,159122,159123,159124,159126],{},"如果要输出 1 到 100，不应该写 100 行 ",[92,159125,146449],{},"，而应该用循环。",[10,159128,159129],{},"循环适合处理重复任务：",[49,159131,159132,159135,159138,159141,159144],{},[52,159133,159134],{},"重复输出。",[52,159136,159137],{},"重复输入。",[52,159139,159140],{},"遍历数据。",[52,159142,159143],{},"持续执行菜单。",[52,159145,159146],{},"批量处理文件或数据。",[37,159148,159150],{"id":159149},"_42-while循环","4.2 while循环",[10,159152,5164],{},[86,159154,159156],{"className":30363,"code":159155,"language":30365,"meta":14,"style":14},"while 条件:\n    循环体\n",[92,159157,159158,159165],{"__ignoreMap":14},[95,159159,159160,159162],{"class":97,"line":98},[95,159161,108640],{"class":101},[95,159163,159164],{"class":105}," 条件:\n",[95,159166,159167],{"class":97,"line":15},[95,159168,159169],{"class":105},"    循环体\n",[10,159171,15118],{},[86,159173,159175],{"className":30363,"code":159174,"language":30365,"meta":14,"style":14},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[92,159176,159177,159185,159189,159201,159208],{"__ignoreMap":14},[95,159178,159179,159181,159183],{"class":97,"line":98},[95,159180,100125],{"class":105},[95,159182,151],{"class":101},[95,159184,55676],{"class":154},[95,159186,159187],{"class":97,"line":15},[95,159188,2382],{"emptyLinePlaceholder":21},[95,159190,159191,159193,159195,159197,159199],{"class":97,"line":1161},[95,159192,108640],{"class":101},[95,159194,9421],{"class":105},[95,159196,1570],{"class":101},[95,159198,2130],{"class":154},[95,159200,3721],{"class":105},[95,159202,159203,159205],{"class":97,"line":1176},[95,159204,31284],{"class":154},[95,159206,159207],{"class":105},"(i)\n",[95,159209,159210,159213,159215],{"class":97,"line":1182},[95,159211,159212],{"class":105},"    i ",[95,159214,9460],{"class":101},[95,159216,55676],{"class":154},[10,159218,80906],{},[49,159220,159221,159227,159230,159233],{},[52,159222,159223,159224,28370],{},"判断条件 ",[92,159225,159226],{},"i \u003C= 5",[52,159228,159229],{},"条件成立，执行循环体。",[52,159231,159232],{},"执行完后回到条件判断。",[52,159234,159235],{},"条件不成立，退出循环。",[37,159237,159239],{"id":159238},"_43-while累加","4.3 while累加",[10,159241,159242],{},"计算 1 到 100 的和：",[86,159244,159246],{"className":30363,"code":159245,"language":30365,"meta":14,"style":14},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[92,159247,159248,159256,159264,159268,159280,159290,159298,159302],{"__ignoreMap":14},[95,159249,159250,159252,159254],{"class":97,"line":98},[95,159251,100125],{"class":105},[95,159253,151],{"class":101},[95,159255,55676],{"class":154},[95,159257,159258,159260,159262],{"class":97,"line":15},[95,159259,157237],{"class":105},[95,159261,151],{"class":101},[95,159263,47318],{"class":154},[95,159265,159266],{"class":97,"line":1161},[95,159267,2382],{"emptyLinePlaceholder":21},[95,159269,159270,159272,159274,159276,159278],{"class":97,"line":1176},[95,159271,108640],{"class":101},[95,159273,9421],{"class":105},[95,159275,1570],{"class":101},[95,159277,5737],{"class":154},[95,159279,3721],{"class":105},[95,159281,159282,159285,159287],{"class":97,"line":1182},[95,159283,159284],{"class":105},"    total ",[95,159286,9460],{"class":101},[95,159288,159289],{"class":105}," i\n",[95,159291,159292,159294,159296],{"class":97,"line":1196},[95,159293,159212],{"class":105},[95,159295,9460],{"class":101},[95,159297,55676],{"class":154},[95,159299,159300],{"class":97,"line":1202},[95,159301,2382],{"emptyLinePlaceholder":21},[95,159303,159304,159306],{"class":97,"line":1293},[95,159305,30400],{"class":154},[95,159307,159308],{"class":105},"(total)\n",[10,159310,159311],{},"核心思想：",[49,159313,159314,159319,159324],{},[52,159315,159316,159318],{},[92,159317,547],{}," 控制循环次数。",[52,159320,159321,159323],{},[92,159322,157338],{}," 保存累加结果。",[52,159325,159326,159327,159329],{},"每轮循环都要更新 ",[92,159328,547],{},"，否则可能死循环。",[37,159331,159333],{"id":159332},"_44-while猜数字","4.4 while猜数字",[86,159335,159337],{"className":30363,"code":159336,"language":30365,"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",[92,159338,159339,159345,159349,159366,159374,159378,159386,159406,159415,159419,159431,159442,159452,159463,159469,159491],{"__ignoreMap":14},[95,159340,159341,159343],{"class":97,"line":98},[95,159342,30377],{"class":101},[95,159344,45313],{"class":105},[95,159346,159347],{"class":97,"line":15},[95,159348,2382],{"emptyLinePlaceholder":21},[95,159350,159351,159353,159355,159358,159360,159362,159364],{"class":97,"line":1161},[95,159352,159017],{"class":105},[95,159354,151],{"class":101},[95,159356,159357],{"class":105}," random.randint(",[95,159359,323],{"class":154},[95,159361,12418],{"class":105},[95,159363,417],{"class":154},[95,159365,112],{"class":105},[95,159367,159368,159370,159372],{"class":97,"line":1176},[95,159369,146668],{"class":105},[95,159371,151],{"class":101},[95,159373,47318],{"class":154},[95,159375,159376],{"class":97,"line":1182},[95,159377,2382],{"emptyLinePlaceholder":21},[95,159379,159380,159382,159384],{"class":97,"line":1196},[95,159381,108640],{"class":101},[95,159383,95269],{"class":154},[95,159385,3721],{"class":105},[95,159387,159388,159391,159393,159395,159397,159399,159401,159404],{"class":97,"line":1202},[95,159389,159390],{"class":105},"    guess ",[95,159392,151],{"class":101},[95,159394,2364],{"class":154},[95,159396,106],{"class":105},[95,159398,53798],{"class":154},[95,159400,106],{"class":105},[95,159402,159403],{"class":210},"\"请输入1到100之间的数字:\"",[95,159405,30482],{"class":105},[95,159407,159408,159411,159413],{"class":97,"line":1293},[95,159409,159410],{"class":105},"    count ",[95,159412,9460],{"class":101},[95,159414,55676],{"class":154},[95,159416,159417],{"class":97,"line":1299},[95,159418,2382],{"emptyLinePlaceholder":21},[95,159420,159421,159423,159426,159428],{"class":97,"line":1311},[95,159422,3083],{"class":101},[95,159424,159425],{"class":105}," guess ",[95,159427,1066],{"class":101},[95,159429,159430],{"class":105}," answer:\n",[95,159432,159433,159435,159437,159440],{"class":97,"line":1594},[95,159434,32436],{"class":154},[95,159436,106],{"class":105},[95,159438,159439],{"class":210},"\"猜大了\"",[95,159441,112],{"class":105},[95,159443,159444,159446,159448,159450],{"class":97,"line":1599},[95,159445,39278],{"class":101},[95,159447,159425],{"class":105},[95,159449,1016],{"class":101},[95,159451,159430],{"class":105},[95,159453,159454,159456,159458,159461],{"class":97,"line":1605},[95,159455,32436],{"class":154},[95,159457,106],{"class":105},[95,159459,159460],{"class":210},"\"猜小了\"",[95,159462,112],{"class":105},[95,159464,159465,159467],{"class":97,"line":1610},[95,159466,157999],{"class":101},[95,159468,3721],{"class":105},[95,159470,159471,159473,159475,159477,159480,159482,159484,159486,159489],{"class":97,"line":1624},[95,159472,32436],{"class":154},[95,159474,106],{"class":105},[95,159476,158],{"class":101},[95,159478,159479],{"class":210},"\"猜对了，一共猜了",[95,159481,1002],{"class":154},[95,159483,84411],{"class":105},[95,159485,1052],{"class":154},[95,159487,159488],{"class":210},"次\"",[95,159490,112],{"class":105},[95,159492,159493],{"class":97,"line":1629},[95,159494,31612],{"class":101},[10,159496,159497,159500,159501,159503],{},[92,159498,159499],{},"while True"," 表示无限循环，通常配合 ",[92,159502,2035],{}," 使用。",[37,159505,159507],{"id":159506},"_45-break和continue","4.5 break和continue",[66,159509,159511],{"id":159510},"_451-break","4.5.1 break",[10,159513,159514,159516],{},[92,159515,2035],{}," 直接结束整个循环。",[86,159518,159520],{"className":30363,"code":159519,"language":30365,"meta":14,"style":14},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[92,159521,159522,159542,159554,159558],{"__ignoreMap":14},[95,159523,159524,159526,159528,159530,159532,159534,159536,159538,159540],{"class":97,"line":98},[95,159525,3007],{"class":101},[95,159527,9421],{"class":105},[95,159529,26028],{"class":101},[95,159531,32428],{"class":154},[95,159533,106],{"class":105},[95,159535,323],{"class":154},[95,159537,12418],{"class":105},[95,159539,450],{"class":154},[95,159541,30771],{"class":105},[95,159543,159544,159546,159548,159550,159552],{"class":97,"line":15},[95,159545,3083],{"class":101},[95,159547,9421],{"class":105},[95,159549,2931],{"class":101},[95,159551,78047],{"class":154},[95,159553,3721],{"class":105},[95,159555,159556],{"class":97,"line":1161},[95,159557,31612],{"class":101},[95,159559,159560,159562],{"class":97,"line":1176},[95,159561,31284],{"class":154},[95,159563,159207],{"class":105},[10,159565,146434],{},[86,159567,159570],{"className":159568,"code":159569,"language":5170,"meta":14},[5168],"1\n2\n",[92,159571,159569],{"__ignoreMap":14},[66,159573,159575],{"id":159574},"_452-continue","4.5.2 continue",[10,159577,159578,159580],{},[92,159579,154649],{}," 跳过本轮剩余代码，进入下一轮循环。",[86,159582,159584],{"className":30363,"code":159583,"language":30365,"meta":14,"style":14},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[92,159585,159586,159606,159618,159622],{"__ignoreMap":14},[95,159587,159588,159590,159592,159594,159596,159598,159600,159602,159604],{"class":97,"line":98},[95,159589,3007],{"class":101},[95,159591,9421],{"class":105},[95,159593,26028],{"class":101},[95,159595,32428],{"class":154},[95,159597,106],{"class":105},[95,159599,323],{"class":154},[95,159601,12418],{"class":105},[95,159603,450],{"class":154},[95,159605,30771],{"class":105},[95,159607,159608,159610,159612,159614,159616],{"class":97,"line":15},[95,159609,3083],{"class":101},[95,159611,9421],{"class":105},[95,159613,2931],{"class":101},[95,159615,78047],{"class":154},[95,159617,3721],{"class":105},[95,159619,159620],{"class":97,"line":1161},[95,159621,148489],{"class":101},[95,159623,159624,159626],{"class":97,"line":1176},[95,159625,31284],{"class":154},[95,159627,159207],{"class":105},[10,159629,146434],{},[86,159631,159634],{"className":159632,"code":159633,"language":5170,"meta":14},[5168],"1\n2\n4\n5\n",[92,159635,159633],{"__ignoreMap":14},[37,159637,159639],{"id":159638},"_46-for循环","4.6 for循环",[10,159641,159642,159644],{},[92,159643,3007],{}," 常用于遍历序列。",[86,159646,159648],{"className":30363,"code":159647,"language":30365,"meta":14,"style":14},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[92,159649,159650,159659,159663,159674],{"__ignoreMap":14},[95,159651,159652,159654,159656],{"class":97,"line":98},[95,159653,146513],{"class":105},[95,159655,151],{"class":101},[95,159657,159658],{"class":210}," \"python\"\n",[95,159660,159661],{"class":97,"line":15},[95,159662,2382],{"emptyLinePlaceholder":21},[95,159664,159665,159667,159670,159672],{"class":97,"line":1161},[95,159666,3007],{"class":101},[95,159668,159669],{"class":105}," ch ",[95,159671,26028],{"class":101},[95,159673,158376],{"class":105},[95,159675,159676,159678],{"class":97,"line":1176},[95,159677,31284],{"class":154},[95,159679,159680],{"class":105},"(ch)\n",[10,159682,159683],{},"遍历列表：",[86,159685,159687],{"className":30363,"code":159686,"language":30365,"meta":14,"style":14},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[92,159688,159689,159711,159715,159725],{"__ignoreMap":14},[95,159690,159691,159694,159696,159698,159700,159702,159704,159706,159709],{"class":97,"line":98},[95,159692,159693],{"class":105},"students ",[95,159695,151],{"class":101},[95,159697,52203],{"class":105},[95,159699,149865],{"class":210},[95,159701,12418],{"class":105},[95,159703,150913],{"class":210},[95,159705,12418],{"class":105},[95,159707,159708],{"class":210},"\"小刚\"",[95,159710,33231],{"class":105},[95,159712,159713],{"class":97,"line":15},[95,159714,2382],{"emptyLinePlaceholder":21},[95,159716,159717,159719,159721,159723],{"class":97,"line":1161},[95,159718,3007],{"class":101},[95,159720,152114],{"class":105},[95,159722,26028],{"class":101},[95,159724,152119],{"class":105},[95,159726,159727,159729],{"class":97,"line":1176},[95,159728,31284],{"class":154},[95,159730,150019],{"class":105},[37,159732,159734],{"id":159733},"_47-range函数","4.7 range函数",[10,159736,159737,159740],{},[92,159738,159739],{},"range()"," 用于生成整数序列。",[86,159742,159744],{"className":30363,"code":159743,"language":30365,"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",[92,159745,159746,159760,159778],{"__ignoreMap":14},[95,159747,159748,159750,159752,159754,159757],{"class":97,"line":98},[95,159749,33401],{"class":154},[95,159751,106],{"class":105},[95,159753,425],{"class":154},[95,159755,159756],{"class":105},")          ",[95,159758,159759],{"class":164},"# 0,1,2,3,4\n",[95,159761,159762,159764,159766,159768,159770,159772,159775],{"class":97,"line":15},[95,159763,33401],{"class":154},[95,159765,106],{"class":105},[95,159767,323],{"class":154},[95,159769,12418],{"class":105},[95,159771,425],{"class":154},[95,159773,159774],{"class":105},")       ",[95,159776,159777],{"class":164},"# 1,2,3,4\n",[95,159779,159780,159782,159784,159786,159788,159790,159792,159794,159796],{"class":97,"line":1161},[95,159781,33401],{"class":154},[95,159783,106],{"class":105},[95,159785,323],{"class":154},[95,159787,12418],{"class":105},[95,159789,552],{"class":154},[95,159791,12418],{"class":105},[95,159793,183],{"class":154},[95,159795,155638],{"class":105},[95,159797,159798],{"class":164},"# 1,3,5,7,9\n",[10,159800,159801,159802,24603],{},"配合 ",[92,159803,3007],{},[86,159805,159807],{"className":30363,"code":159806,"language":30365,"meta":14,"style":14},"for i in range(1, 6):\n    print(i)\n",[92,159808,159809,159829],{"__ignoreMap":14},[95,159810,159811,159813,159815,159817,159819,159821,159823,159825,159827],{"class":97,"line":98},[95,159812,3007],{"class":101},[95,159814,9421],{"class":105},[95,159816,26028],{"class":101},[95,159818,32428],{"class":154},[95,159820,106],{"class":105},[95,159822,323],{"class":154},[95,159824,12418],{"class":105},[95,159826,450],{"class":154},[95,159828,30771],{"class":105},[95,159830,159831,159833],{"class":97,"line":15},[95,159832,31284],{"class":154},[95,159834,159207],{"class":105},[10,159836,9008,159837,159839],{},[92,159838,33401],{}," 的结束值不包含在内。",[37,159841,159843],{"id":159842},"_48-for循环求和","4.8 for循环求和",[86,159845,159847],{"className":30363,"code":159846,"language":30365,"meta":14,"style":14},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[92,159848,159849,159857,159861,159881,159889,159893],{"__ignoreMap":14},[95,159850,159851,159853,159855],{"class":97,"line":98},[95,159852,157237],{"class":105},[95,159854,151],{"class":101},[95,159856,47318],{"class":154},[95,159858,159859],{"class":97,"line":15},[95,159860,2382],{"emptyLinePlaceholder":21},[95,159862,159863,159865,159867,159869,159871,159873,159875,159877,159879],{"class":97,"line":1161},[95,159864,3007],{"class":101},[95,159866,9421],{"class":105},[95,159868,26028],{"class":101},[95,159870,32428],{"class":154},[95,159872,106],{"class":105},[95,159874,323],{"class":154},[95,159876,12418],{"class":105},[95,159878,443],{"class":154},[95,159880,30771],{"class":105},[95,159882,159883,159885,159887],{"class":97,"line":1176},[95,159884,159284],{"class":105},[95,159886,9460],{"class":101},[95,159888,159289],{"class":105},[95,159890,159891],{"class":97,"line":1182},[95,159892,2382],{"emptyLinePlaceholder":21},[95,159894,159895,159897],{"class":97,"line":1196},[95,159896,30400],{"class":154},[95,159898,159308],{"class":105},[10,159900,159901],{},"求偶数和：",[86,159903,159905],{"className":30363,"code":159904,"language":30365,"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",[92,159906,159907,159915,159919,159939,159955,159964,159968],{"__ignoreMap":14},[95,159908,159909,159911,159913],{"class":97,"line":98},[95,159910,157237],{"class":105},[95,159912,151],{"class":101},[95,159914,47318],{"class":154},[95,159916,159917],{"class":97,"line":15},[95,159918,2382],{"emptyLinePlaceholder":21},[95,159920,159921,159923,159925,159927,159929,159931,159933,159935,159937],{"class":97,"line":1161},[95,159922,3007],{"class":101},[95,159924,9421],{"class":105},[95,159926,26028],{"class":101},[95,159928,32428],{"class":154},[95,159930,106],{"class":105},[95,159932,323],{"class":154},[95,159934,12418],{"class":105},[95,159936,443],{"class":154},[95,159938,30771],{"class":105},[95,159940,159941,159943,159945,159947,159949,159951,159953],{"class":97,"line":1176},[95,159942,3083],{"class":101},[95,159944,9421],{"class":105},[95,159946,434],{"class":101},[95,159948,14738],{"class":154},[95,159950,101536],{"class":101},[95,159952,4075],{"class":154},[95,159954,3721],{"class":105},[95,159956,159957,159960,159962],{"class":97,"line":1182},[95,159958,159959],{"class":105},"        total ",[95,159961,9460],{"class":101},[95,159963,159289],{"class":105},[95,159965,159966],{"class":97,"line":1196},[95,159967,2382],{"emptyLinePlaceholder":21},[95,159969,159970,159972],{"class":97,"line":1202},[95,159971,30400],{"class":154},[95,159973,159308],{"class":105},[10,159975,159976],{},"也可以：",[86,159978,159980],{"className":30363,"code":159979,"language":30365,"meta":14,"style":14},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[92,159981,159982,159990,159994,160018,160026,160030],{"__ignoreMap":14},[95,159983,159984,159986,159988],{"class":97,"line":98},[95,159985,157237],{"class":105},[95,159987,151],{"class":101},[95,159989,47318],{"class":154},[95,159991,159992],{"class":97,"line":15},[95,159993,2382],{"emptyLinePlaceholder":21},[95,159995,159996,159998,160000,160002,160004,160006,160008,160010,160012,160014,160016],{"class":97,"line":1161},[95,159997,3007],{"class":101},[95,159999,9421],{"class":105},[95,160001,26028],{"class":101},[95,160003,32428],{"class":154},[95,160005,106],{"class":105},[95,160007,183],{"class":154},[95,160009,12418],{"class":105},[95,160011,443],{"class":154},[95,160013,12418],{"class":105},[95,160015,183],{"class":154},[95,160017,30771],{"class":105},[95,160019,160020,160022,160024],{"class":97,"line":1176},[95,160021,159284],{"class":105},[95,160023,9460],{"class":101},[95,160025,159289],{"class":105},[95,160027,160028],{"class":97,"line":1182},[95,160029,2382],{"emptyLinePlaceholder":21},[95,160031,160032,160034],{"class":97,"line":1196},[95,160033,30400],{"class":154},[95,160035,159308],{"class":105},[37,160037,160039],{"id":160038},"_49-循环嵌套","4.9 循环嵌套",[10,160041,160042],{},"嵌套循环就是循环里面再写循环。",[86,160044,160046],{"className":30363,"code":160045,"language":30365,"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",[92,160047,160048,160068,160088],{"__ignoreMap":14},[95,160049,160050,160052,160054,160056,160058,160060,160062,160064,160066],{"class":97,"line":98},[95,160051,3007],{"class":101},[95,160053,9421],{"class":105},[95,160055,26028],{"class":101},[95,160057,32428],{"class":154},[95,160059,106],{"class":105},[95,160061,323],{"class":154},[95,160063,12418],{"class":105},[95,160065,399],{"class":154},[95,160067,30771],{"class":105},[95,160069,160070,160072,160074,160076,160078,160080,160082,160084,160086],{"class":97,"line":15},[95,160071,3183],{"class":101},[95,160073,9483],{"class":105},[95,160075,26028],{"class":101},[95,160077,32428],{"class":154},[95,160079,106],{"class":105},[95,160081,323],{"class":154},[95,160083,12418],{"class":105},[95,160085,399],{"class":154},[95,160087,30771],{"class":105},[95,160089,160090,160092,160094,160096,160099,160101,160103,160105,160108,160110,160112,160114,160116],{"class":97,"line":1161},[95,160091,32436],{"class":154},[95,160093,106],{"class":105},[95,160095,158],{"class":101},[95,160097,160098],{"class":210},"\"i=",[95,160100,1002],{"class":154},[95,160102,547],{"class":105},[95,160104,1052],{"class":154},[95,160106,160107],{"class":210},", j=",[95,160109,1002],{"class":154},[95,160111,573],{"class":105},[95,160113,1052],{"class":154},[95,160115,357],{"class":210},[95,160117,112],{"class":105},[10,160119,160120],{},"外层循环执行一次，内层循环执行完整一轮。",[37,160122,160124],{"id":160123},"_410-九九乘法表","4.10 九九乘法表",[86,160126,160128],{"className":30363,"code":160127,"language":30365,"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",[92,160129,160130,160150,160173,160225],{"__ignoreMap":14},[95,160131,160132,160134,160136,160138,160140,160142,160144,160146,160148],{"class":97,"line":98},[95,160133,3007],{"class":101},[95,160135,9421],{"class":105},[95,160137,26028],{"class":101},[95,160139,32428],{"class":154},[95,160141,106],{"class":105},[95,160143,323],{"class":154},[95,160145,12418],{"class":105},[95,160147,552],{"class":154},[95,160149,30771],{"class":105},[95,160151,160152,160154,160156,160158,160160,160162,160164,160167,160169,160171],{"class":97,"line":15},[95,160153,3183],{"class":101},[95,160155,9483],{"class":105},[95,160157,26028],{"class":101},[95,160159,32428],{"class":154},[95,160161,106],{"class":105},[95,160163,323],{"class":154},[95,160165,160166],{"class":105},", i ",[95,160168,587],{"class":101},[95,160170,25103],{"class":154},[95,160172,30771],{"class":105},[95,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":97,"line":1161},[95,160176,32436],{"class":154},[95,160178,106],{"class":105},[95,160180,158],{"class":101},[95,160182,357],{"class":210},[95,160184,1002],{"class":154},[95,160186,573],{"class":105},[95,160188,1052],{"class":154},[95,160190,561],{"class":210},[95,160192,1002],{"class":154},[95,160194,547],{"class":105},[95,160196,1052],{"class":154},[95,160198,151],{"class":210},[95,160200,1002],{"class":154},[95,160202,100125],{"class":105},[95,160204,561],{"class":101},[95,160206,3392],{"class":105},[95,160208,1052],{"class":154},[95,160210,357],{"class":210},[95,160212,12418],{"class":105},[95,160214,45786],{"class":5199},[95,160216,151],{"class":101},[95,160218,357],{"class":210},[95,160220,1212],{"class":154},[95,160222,357],{"class":210},[95,160224,112],{"class":105},[95,160226,160227,160229],{"class":97,"line":1176},[95,160228,31284],{"class":154},[95,160230,1958],{"class":105},[10,160232,160233],{},"关键点：",[49,160235,160236,160242,160248,160254],{},[52,160237,160238,160239,160241],{},"外层 ",[92,160240,547],{}," 控制行。",[52,160243,160244,160245,160247],{},"内层 ",[92,160246,573],{}," 控制列。",[52,160249,160250,160251,160253],{},"每行结束后用 ",[92,160252,146449],{}," 换行。",[52,160255,160256,160259],{},[92,160257,160258],{},"end=\"\\t\""," 让同一行的内容横向排列。",[37,160261,160263],{"id":160262},"_411-循环else","4.11 循环else",[10,160265,160266,160267,160269,160270,160272,160273,160275],{},"Python 的循环可以带 ",[92,160268,1683],{},"。当循环正常结束时执行 ",[92,160271,1683],{},"，如果被 ",[92,160274,2035],{}," 打断，则不执行。",[86,160277,160279],{"className":30363,"code":160278,"language":30365,"meta":14,"style":14},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[92,160280,160281,160301,160313,160324,160328,160334],{"__ignoreMap":14},[95,160282,160283,160285,160287,160289,160291,160293,160295,160297,160299],{"class":97,"line":98},[95,160284,3007],{"class":101},[95,160286,9421],{"class":105},[95,160288,26028],{"class":101},[95,160290,32428],{"class":154},[95,160292,106],{"class":105},[95,160294,323],{"class":154},[95,160296,12418],{"class":105},[95,160298,450],{"class":154},[95,160300,30771],{"class":105},[95,160302,160303,160305,160307,160309,160311],{"class":97,"line":15},[95,160304,3083],{"class":101},[95,160306,9421],{"class":105},[95,160308,2931],{"class":101},[95,160310,2020],{"class":154},[95,160312,3721],{"class":105},[95,160314,160315,160317,160319,160322],{"class":97,"line":1161},[95,160316,32436],{"class":154},[95,160318,106],{"class":105},[95,160320,160321],{"class":210},"\"找到了\"",[95,160323,112],{"class":105},[95,160325,160326],{"class":97,"line":1176},[95,160327,31612],{"class":101},[95,160329,160330,160332],{"class":97,"line":1182},[95,160331,1683],{"class":101},[95,160333,3721],{"class":105},[95,160335,160336,160338,160340,160343],{"class":97,"line":1196},[95,160337,31284],{"class":154},[95,160339,106],{"class":105},[95,160341,160342],{"class":210},"\"没找到\"",[95,160344,112],{"class":105},[10,160346,160347],{},"常用于搜索。",[86,160349,160351],{"className":30363,"code":160350,"language":30365,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[92,160352,160353,160374,160383,160387,160399,160410,160420,160424,160430],{"__ignoreMap":14},[95,160354,160355,160358,160360,160362,160364,160366,160368,160370,160372],{"class":97,"line":98},[95,160356,160357],{"class":105},"names ",[95,160359,151],{"class":101},[95,160361,52203],{"class":105},[95,160363,149865],{"class":210},[95,160365,12418],{"class":105},[95,160367,150913],{"class":210},[95,160369,12418],{"class":105},[95,160371,159708],{"class":210},[95,160373,33231],{"class":105},[95,160375,160376,160378,160380],{"class":97,"line":15},[95,160377,111555],{"class":105},[95,160379,151],{"class":101},[95,160381,160382],{"class":210}," \"小李\"\n",[95,160384,160385],{"class":97,"line":1161},[95,160386,2382],{"emptyLinePlaceholder":21},[95,160388,160389,160391,160394,160396],{"class":97,"line":1176},[95,160390,3007],{"class":101},[95,160392,160393],{"class":105}," name ",[95,160395,26028],{"class":101},[95,160397,160398],{"class":105}," names:\n",[95,160400,160401,160403,160405,160407],{"class":97,"line":1182},[95,160402,3083],{"class":101},[95,160404,160393],{"class":105},[95,160406,2931],{"class":101},[95,160408,160409],{"class":105}," target:\n",[95,160411,160412,160414,160416,160418],{"class":97,"line":1196},[95,160413,32436],{"class":154},[95,160415,106],{"class":105},[95,160417,160321],{"class":210},[95,160419,112],{"class":105},[95,160421,160422],{"class":97,"line":1202},[95,160423,31612],{"class":101},[95,160425,160426,160428],{"class":97,"line":1293},[95,160427,1683],{"class":101},[95,160429,3721],{"class":105},[95,160431,160432,160434,160436,160438],{"class":97,"line":1299},[95,160433,31284],{"class":154},[95,160435,106],{"class":105},[95,160437,160342],{"class":210},[95,160439,112],{"class":105},[37,160441,160443],{"id":160442},"_412-小案例登录重试","4.12 小案例：登录重试",[10,160445,123269],{},[49,160447,160448,160451,160454],{},[52,160449,160450],{},"用户最多输入 3 次密码。",[52,160452,160453],{},"密码正确则登录成功。",[52,160455,160456],{},"3 次都错误则锁定账号。",[10,160458,10018],{},[86,160460,160462],{"className":30363,"code":160461,"language":30365,"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",[92,160463,160464,160474,160478,160494,160510,160514,160526,160537,160541,160547,160572,160578],{"__ignoreMap":14},[95,160465,160466,160469,160471],{"class":97,"line":98},[95,160467,160468],{"class":105},"password ",[95,160470,151],{"class":101},[95,160472,160473],{"class":210}," \"123456\"\n",[95,160475,160476],{"class":97,"line":15},[95,160477,2382],{"emptyLinePlaceholder":21},[95,160479,160480,160482,160484,160486,160488,160490,160492],{"class":97,"line":1161},[95,160481,3007],{"class":101},[95,160483,9421],{"class":105},[95,160485,26028],{"class":101},[95,160487,32428],{"class":154},[95,160489,106],{"class":105},[95,160491,177],{"class":154},[95,160493,30771],{"class":105},[95,160495,160496,160499,160501,160503,160505,160508],{"class":97,"line":1176},[95,160497,160498],{"class":105},"    user_password ",[95,160500,151],{"class":101},[95,160502,60582],{"class":154},[95,160504,106],{"class":105},[95,160506,160507],{"class":210},"\"请输入密码:\"",[95,160509,112],{"class":105},[95,160511,160512],{"class":97,"line":1182},[95,160513,2382],{"emptyLinePlaceholder":21},[95,160515,160516,160518,160521,160523],{"class":97,"line":1196},[95,160517,3083],{"class":101},[95,160519,160520],{"class":105}," user_password ",[95,160522,2931],{"class":101},[95,160524,160525],{"class":105}," password:\n",[95,160527,160528,160530,160532,160535],{"class":97,"line":1202},[95,160529,32436],{"class":154},[95,160531,106],{"class":105},[95,160533,160534],{"class":210},"\"登录成功\"",[95,160536,112],{"class":105},[95,160538,160539],{"class":97,"line":1293},[95,160540,31612],{"class":101},[95,160542,160543,160545],{"class":97,"line":1299},[95,160544,157999],{"class":101},[95,160546,3721],{"class":105},[95,160548,160549,160551,160553,160555,160558,160561,160563,160565,160567,160570],{"class":97,"line":1311},[95,160550,32436],{"class":154},[95,160552,106],{"class":105},[95,160554,158],{"class":101},[95,160556,160557],{"class":210},"\"密码错误，还剩",[95,160559,160560],{"class":154},"{2",[95,160562,52248],{"class":101},[95,160564,3014],{"class":105},[95,160566,1052],{"class":154},[95,160568,160569],{"class":210},"次机会\"",[95,160571,112],{"class":105},[95,160573,160574,160576],{"class":97,"line":1594},[95,160575,1683],{"class":101},[95,160577,3721],{"class":105},[95,160579,160580,160582,160584,160587],{"class":97,"line":1599},[95,160581,31284],{"class":154},[95,160583,106],{"class":105},[95,160585,160586],{"class":210},"\"账号已锁定\"",[95,160588,112],{"class":105},[37,160590,160592],{"id":160591},"_413-小案例菜单程序","4.13 小案例：菜单程序",[86,160594,160596],{"className":30363,"code":160595,"language":30365,"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",[92,160597,160598,160606,160617,160628,160639,160650,160661,160665,160680,160684,160696,160707,160719,160730,160742,160753,160765,160775,160779,160785],{"__ignoreMap":14},[95,160599,160600,160602,160604],{"class":97,"line":98},[95,160601,108640],{"class":101},[95,160603,95269],{"class":154},[95,160605,3721],{"class":105},[95,160607,160608,160610,160612,160615],{"class":97,"line":15},[95,160609,31284],{"class":154},[95,160611,106],{"class":105},[95,160613,160614],{"class":210},"\"====== 菜单 ======\"",[95,160616,112],{"class":105},[95,160618,160619,160621,160623,160626],{"class":97,"line":1161},[95,160620,31284],{"class":154},[95,160622,106],{"class":105},[95,160624,160625],{"class":210},"\"1. 查询余额\"",[95,160627,112],{"class":105},[95,160629,160630,160632,160634,160637],{"class":97,"line":1176},[95,160631,31284],{"class":154},[95,160633,106],{"class":105},[95,160635,160636],{"class":210},"\"2. 存款\"",[95,160638,112],{"class":105},[95,160640,160641,160643,160645,160648],{"class":97,"line":1182},[95,160642,31284],{"class":154},[95,160644,106],{"class":105},[95,160646,160647],{"class":210},"\"3. 取款\"",[95,160649,112],{"class":105},[95,160651,160652,160654,160656,160659],{"class":97,"line":1196},[95,160653,31284],{"class":154},[95,160655,106],{"class":105},[95,160657,160658],{"class":210},"\"0. 退出\"",[95,160660,112],{"class":105},[95,160662,160663],{"class":97,"line":1202},[95,160664,2382],{"emptyLinePlaceholder":21},[95,160666,160667,160670,160672,160674,160676,160678],{"class":97,"line":1293},[95,160668,160669],{"class":105},"    choice ",[95,160671,151],{"class":101},[95,160673,60582],{"class":154},[95,160675,106],{"class":105},[95,160677,153050],{"class":210},[95,160679,112],{"class":105},[95,160681,160682],{"class":97,"line":1299},[95,160683,2382],{"emptyLinePlaceholder":21},[95,160685,160686,160688,160690,160692,160694],{"class":97,"line":1311},[95,160687,3083],{"class":101},[95,160689,153063],{"class":105},[95,160691,2931],{"class":101},[95,160693,153068],{"class":210},[95,160695,3721],{"class":105},[95,160697,160698,160700,160702,160705],{"class":97,"line":1594},[95,160699,32436],{"class":154},[95,160701,106],{"class":105},[95,160703,160704],{"class":210},"\"余额为1000元\"",[95,160706,112],{"class":105},[95,160708,160709,160711,160713,160715,160717],{"class":97,"line":1599},[95,160710,39278],{"class":101},[95,160712,153063],{"class":105},[95,160714,2931],{"class":101},[95,160716,153087],{"class":210},[95,160718,3721],{"class":105},[95,160720,160721,160723,160725,160728],{"class":97,"line":1605},[95,160722,32436],{"class":154},[95,160724,106],{"class":105},[95,160726,160727],{"class":210},"\"存款功能\"",[95,160729,112],{"class":105},[95,160731,160732,160734,160736,160738,160740],{"class":97,"line":1610},[95,160733,39278],{"class":101},[95,160735,153063],{"class":105},[95,160737,2931],{"class":101},[95,160739,153105],{"class":210},[95,160741,3721],{"class":105},[95,160743,160744,160746,160748,160751],{"class":97,"line":1624},[95,160745,32436],{"class":154},[95,160747,106],{"class":105},[95,160749,160750],{"class":210},"\"取款功能\"",[95,160752,112],{"class":105},[95,160754,160755,160757,160759,160761,160763],{"class":97,"line":1629},[95,160756,39278],{"class":101},[95,160758,153063],{"class":105},[95,160760,2931],{"class":101},[95,160762,153159],{"class":210},[95,160764,3721],{"class":105},[95,160766,160767,160769,160771,160773],{"class":97,"line":1635},[95,160768,32436],{"class":154},[95,160770,106],{"class":105},[95,160772,153170],{"class":210},[95,160774,112],{"class":105},[95,160776,160777],{"class":97,"line":1656},[95,160778,31612],{"class":101},[95,160780,160781,160783],{"class":97,"line":1661},[95,160782,157999],{"class":101},[95,160784,3721],{"class":105},[95,160786,160787,160789,160791,160793],{"class":97,"line":1675},[95,160788,32436],{"class":154},[95,160790,106],{"class":105},[95,160792,153191],{"class":210},[95,160794,112],{"class":105},[10,160796,160797,160798,160800,160801,28370],{},"菜单类程序通常使用 ",[92,160799,159499],{},"，用户选择退出时 ",[92,160802,2035],{},[37,160804,160806],{"id":160805},"_414-易错点","4.14 易错点",[49,160808,160809,160814,160820,160828,160834],{},[52,160810,160811,160813],{},[92,160812,108640],{}," 循环必须更新控制变量。",[52,160815,160816,160819],{},[92,160817,160818],{},"range(1, 10)"," 不包含 10。",[52,160821,160822,160824,160825,160827],{},[92,160823,2035],{}," 结束整个循环，",[92,160826,154649],{}," 只跳过本轮。",[52,160829,160830,160831,160833],{},"嵌套循环中，",[92,160832,2035],{}," 只跳出当前所在的一层循环。",[52,160835,160836],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[37,160838,160840],{"id":160839},"_415-本章练习","4.15 本章练习",[49,160842,160843,160846,160849,160852,160855],{},[52,160844,160845],{},"输出 1 到 100。",[52,160847,160848],{},"计算 1 到 100 的偶数和。",[52,160850,160851],{},"输出 100 以内能被 3 和 5 同时整除的数。",[52,160853,160854],{},"编写猜数字游戏，限制最多猜 7 次。",[52,160856,160857],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5109,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":1161,"text":159511},{"id":159574,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160887,"title":160888,"body":160889,"description":23360,"extension":18,"meta":162894,"navigation":21,"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],[33,160892,160888],{"id":160893},"_5-函数基础",[37,160895,160897],{"id":160896},"_51-为什么需要函数","5.1 为什么需要函数",[10,160899,160900],{},"函数用于封装一段可以重复使用的代码。",[10,160902,160903],{},"不使用函数的问题：",[49,160905,160906,160909,160912,160915],{},[52,160907,160908],{},"重复代码多。",[52,160910,160911],{},"修改逻辑时容易漏改。",[52,160913,160914],{},"主流程不清晰。",[52,160916,160917],{},"程序越写越长，难以维护。",[10,160919,160920],{},"使用函数后的好处：",[49,160922,160923,160926,160929,160932],{},[52,160924,160925],{},"提高复用性。",[52,160927,160928],{},"提高可读性。",[52,160930,160931],{},"便于调试。",[52,160933,160934],{},"便于分工。",[37,160936,160938],{"id":160937},"_52-函数定义","5.2 函数定义",[10,160940,5164],{},[86,160942,160944],{"className":30363,"code":160943,"language":30365,"meta":14,"style":14},"def 函数名():\n    函数体\n",[92,160945,160946,160955],{"__ignoreMap":14},[95,160947,160948,160950,160953],{"class":97,"line":98},[95,160949,31932],{"class":101},[95,160951,160952],{"class":1945}," 函数名",[95,160954,31938],{"class":105},[95,160956,160957],{"class":97,"line":15},[95,160958,160959],{"class":105},"    函数体\n",[10,160961,15118],{},[86,160963,160965],{"className":30363,"code":160964,"language":30365,"meta":14,"style":14},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[92,160966,160967,160976,160986,160996,161000,161004],{"__ignoreMap":14},[95,160968,160969,160971,160974],{"class":97,"line":98},[95,160970,31932],{"class":101},[95,160972,160973],{"class":1945}," say_hello",[95,160975,31938],{"class":105},[95,160977,160978,160980,160982,160984],{"class":97,"line":15},[95,160979,31284],{"class":154},[95,160981,106],{"class":105},[95,160983,5827],{"class":210},[95,160985,112],{"class":105},[95,160987,160988,160990,160992,160994],{"class":97,"line":1161},[95,160989,31284],{"class":154},[95,160991,106],{"class":105},[95,160993,146616],{"class":210},[95,160995,112],{"class":105},[95,160997,160998],{"class":97,"line":1176},[95,160999,2382],{"emptyLinePlaceholder":21},[95,161001,161002],{"class":97,"line":1182},[95,161003,2382],{"emptyLinePlaceholder":21},[95,161005,161006],{"class":97,"line":1196},[95,161007,161008],{"class":105},"say_hello()\n",[10,161010,9008],{},[49,161012,161013,161016,161019,161022],{},[52,161014,161015],{},"函数必须先定义，再调用。",[52,161017,161018],{},"函数名遵循变量命名规则。",[52,161020,161021],{},"函数体需要缩进。",[52,161023,161024],{},"函数不调用就不会执行。",[37,161026,161028],{"id":161027},"_53-函数调用","5.3 函数调用",[86,161030,161032],{"className":30363,"code":161031,"language":30365,"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",[92,161033,161034,161043,161054,161065,161076,161086,161090,161094,161099],{"__ignoreMap":14},[95,161035,161036,161038,161041],{"class":97,"line":98},[95,161037,31932],{"class":101},[95,161039,161040],{"class":1945}," print_menu",[95,161042,31938],{"class":105},[95,161044,161045,161047,161049,161052],{"class":97,"line":15},[95,161046,31284],{"class":154},[95,161048,106],{"class":105},[95,161050,161051],{"class":210},"\"1. 查询\"",[95,161053,112],{"class":105},[95,161055,161056,161058,161060,161063],{"class":97,"line":1161},[95,161057,31284],{"class":154},[95,161059,106],{"class":105},[95,161061,161062],{"class":210},"\"2. 添加\"",[95,161064,112],{"class":105},[95,161066,161067,161069,161071,161074],{"class":97,"line":1176},[95,161068,31284],{"class":154},[95,161070,106],{"class":105},[95,161072,161073],{"class":210},"\"3. 删除\"",[95,161075,112],{"class":105},[95,161077,161078,161080,161082,161084],{"class":97,"line":1182},[95,161079,31284],{"class":154},[95,161081,106],{"class":105},[95,161083,160658],{"class":210},[95,161085,112],{"class":105},[95,161087,161088],{"class":97,"line":1196},[95,161089,2382],{"emptyLinePlaceholder":21},[95,161091,161092],{"class":97,"line":1202},[95,161093,2382],{"emptyLinePlaceholder":21},[95,161095,161096],{"class":97,"line":1293},[95,161097,161098],{"class":105},"print_menu()\n",[95,161100,161101],{"class":97,"line":1299},[95,161102,161098],{"class":105},[10,161104,161105],{},"函数可以多次调用，每次调用都会执行函数体。",[37,161107,161109],{"id":161108},"_54-参数","5.4 参数",[10,161111,161112],{},"参数用于向函数传递数据。",[86,161114,161116],{"className":30363,"code":161115,"language":30365,"meta":14,"style":14},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[92,161117,161118,161127,161147,161151,161155,161164],{"__ignoreMap":14},[95,161119,161120,161122,161124],{"class":97,"line":98},[95,161121,31932],{"class":101},[95,161123,160973],{"class":1945},[95,161125,161126],{"class":105},"(name):\n",[95,161128,161129,161131,161133,161135,161137,161139,161141,161143,161145],{"class":97,"line":15},[95,161130,31284],{"class":154},[95,161132,106],{"class":105},[95,161134,158],{"class":101},[95,161136,157031],{"class":210},[95,161138,1002],{"class":154},[95,161140,79787],{"class":105},[95,161142,1052],{"class":154},[95,161144,357],{"class":210},[95,161146,112],{"class":105},[95,161148,161149],{"class":97,"line":1161},[95,161150,2382],{"emptyLinePlaceholder":21},[95,161152,161153],{"class":97,"line":1176},[95,161154,2382],{"emptyLinePlaceholder":21},[95,161156,161157,161160,161162],{"class":97,"line":1182},[95,161158,161159],{"class":105},"say_hello(",[95,161161,149865],{"class":210},[95,161163,112],{"class":105},[95,161165,161166,161168,161170],{"class":97,"line":1196},[95,161167,161159],{"class":105},[95,161169,150913],{"class":210},[95,161171,112],{"class":105},[10,161173,161174,161176,161177,161179],{},[92,161175,79787],{}," 是形参，",[92,161178,149865],{}," 是实参。",[10,161181,161182],{},"多个参数：",[86,161184,161186],{"className":30363,"code":161185,"language":30365,"meta":14,"style":14},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[92,161187,161188,161196,161209,161215,161219,161223],{"__ignoreMap":14},[95,161189,161190,161192,161194],{"class":97,"line":98},[95,161191,31932],{"class":101},[95,161193,5192],{"class":1945},[95,161195,151070],{"class":105},[95,161197,161198,161201,161203,161205,161207],{"class":97,"line":15},[95,161199,161200],{"class":105},"    result ",[95,161202,151],{"class":101},[95,161204,10852],{"class":105},[95,161206,587],{"class":101},[95,161208,151081],{"class":105},[95,161210,161211,161213],{"class":97,"line":1161},[95,161212,31284],{"class":154},[95,161214,76562],{"class":105},[95,161216,161217],{"class":97,"line":1176},[95,161218,2382],{"emptyLinePlaceholder":21},[95,161220,161221],{"class":97,"line":1182},[95,161222,2382],{"emptyLinePlaceholder":21},[95,161224,161225,161228,161230,161232,161234],{"class":97,"line":1196},[95,161226,161227],{"class":105},"add(",[95,161229,552],{"class":154},[95,161231,12418],{"class":105},[95,161233,806],{"class":154},[95,161235,112],{"class":105},[10,161237,161238],{},"调用时参数数量必须匹配。",[37,161240,161242],{"id":161241},"_55-返回值","5.5 返回值",[10,161244,161245,161247],{},[92,161246,17029],{}," 用于把函数内部的结果返回给调用者。",[86,161249,161251],{"className":30363,"code":161250,"language":30365,"meta":14,"style":14},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[92,161252,161253,161261,161271,161275,161279,161297],{"__ignoreMap":14},[95,161254,161255,161257,161259],{"class":97,"line":98},[95,161256,31932],{"class":101},[95,161258,5192],{"class":1945},[95,161260,151070],{"class":105},[95,161262,161263,161265,161267,161269],{"class":97,"line":15},[95,161264,4072],{"class":101},[95,161266,10852],{"class":105},[95,161268,587],{"class":101},[95,161270,151081],{"class":105},[95,161272,161273],{"class":97,"line":1161},[95,161274,2382],{"emptyLinePlaceholder":21},[95,161276,161277],{"class":97,"line":1176},[95,161278,2382],{"emptyLinePlaceholder":21},[95,161280,161281,161284,161286,161289,161291,161293,161295],{"class":97,"line":1182},[95,161282,161283],{"class":105},"result ",[95,161285,151],{"class":101},[95,161287,161288],{"class":105}," add(",[95,161290,552],{"class":154},[95,161292,12418],{"class":105},[95,161294,806],{"class":154},[95,161296,112],{"class":105},[95,161298,161299,161301],{"class":97,"line":1196},[95,161300,30400],{"class":154},[95,161302,76562],{"class":105},[10,161304,161305,161306,161308,161309,28370],{},"如果函数没有写 ",[92,161307,17029],{},"，默认返回 ",[92,161310,95663],{},[86,161312,161314],{"className":30363,"code":161313,"language":30365,"meta":14,"style":14},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[92,161315,161316,161324,161334,161338,161342,161351],{"__ignoreMap":14},[95,161317,161318,161320,161322],{"class":97,"line":98},[95,161319,31932],{"class":101},[95,161321,160973],{"class":1945},[95,161323,31938],{"class":105},[95,161325,161326,161328,161330,161332],{"class":97,"line":15},[95,161327,31284],{"class":154},[95,161329,106],{"class":105},[95,161331,5827],{"class":210},[95,161333,112],{"class":105},[95,161335,161336],{"class":97,"line":1161},[95,161337,2382],{"emptyLinePlaceholder":21},[95,161339,161340],{"class":97,"line":1176},[95,161341,2382],{"emptyLinePlaceholder":21},[95,161343,161344,161346,161348],{"class":97,"line":1182},[95,161345,161283],{"class":105},[95,161347,151],{"class":101},[95,161349,161350],{"class":105}," say_hello()\n",[95,161352,161353,161355,161358],{"class":97,"line":1196},[95,161354,30400],{"class":154},[95,161356,161357],{"class":105},"(result)  ",[95,161359,161360],{"class":164},"# None\n",[37,161362,161364],{"id":161363},"_56-return的作用","5.6 return的作用",[10,161366,161367,161369],{},[92,161368,17029],{}," 有两个作用：",[49,161371,161372,161375],{},[52,161373,161374],{},"返回结果。",[52,161376,161377],{},"结束函数。",[86,161379,161381],{"className":30363,"code":161380,"language":30365,"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",[92,161382,161383,161393,161405,161412,161416,161428,161435,161439,161446,161450,161454,161465],{"__ignoreMap":14},[95,161384,161385,161387,161390],{"class":97,"line":98},[95,161386,31932],{"class":101},[95,161388,161389],{"class":1945}," check_age",[95,161391,161392],{"class":105},"(age):\n",[95,161394,161395,161397,161399,161401,161403],{"class":97,"line":15},[95,161396,3083],{"class":101},[95,161398,15690],{"class":105},[95,161400,1016],{"class":101},[95,161402,4075],{"class":154},[95,161404,3721],{"class":105},[95,161406,161407,161409],{"class":97,"line":1161},[95,161408,14735],{"class":101},[95,161410,161411],{"class":210}," \"年龄不合法\"\n",[95,161413,161414],{"class":97,"line":1176},[95,161415,2382],{"emptyLinePlaceholder":21},[95,161417,161418,161420,161422,161424,161426],{"class":97,"line":1182},[95,161419,3083],{"class":101},[95,161421,15690],{"class":105},[95,161423,1692],{"class":101},[95,161425,156262],{"class":154},[95,161427,3721],{"class":105},[95,161429,161430,161432],{"class":97,"line":1196},[95,161431,14735],{"class":101},[95,161433,161434],{"class":210}," \"成年人\"\n",[95,161436,161437],{"class":97,"line":1202},[95,161438,2382],{"emptyLinePlaceholder":21},[95,161440,161441,161443],{"class":97,"line":1293},[95,161442,4072],{"class":101},[95,161444,161445],{"class":210}," \"未成年人\"\n",[95,161447,161448],{"class":97,"line":1299},[95,161449,2382],{"emptyLinePlaceholder":21},[95,161451,161452],{"class":97,"line":1311},[95,161453,2382],{"emptyLinePlaceholder":21},[95,161455,161456,161458,161461,161463],{"class":97,"line":1594},[95,161457,30400],{"class":154},[95,161459,161460],{"class":105},"(check_age(",[95,161462,806],{"class":154},[95,161464,30482],{"class":105},[95,161466,161467,161469,161471,161473,161475],{"class":97,"line":1599},[95,161468,30400],{"class":154},[95,161470,161460],{"class":105},[95,161472,638],{"class":101},[95,161474,323],{"class":154},[95,161476,30482],{"class":105},[10,161478,161479,161480,161482],{},"函数执行到 ",[92,161481,17029],{}," 后，后面的代码不会继续执行。",[37,161484,161486],{"id":161485},"_57-none","5.7 None",[10,161488,161489,161491],{},[92,161490,95663],{}," 表示空值或没有结果。",[10,161493,161494],{},"常见使用场景：",[49,161496,161497,161500,161503],{},[52,161498,161499],{},"函数没有返回值。",[52,161501,161502],{},"变量暂时没有具体值。",[52,161504,161505],{},"表示查询不到结果。",[86,161507,161509],{"className":30363,"code":161508,"language":30365,"meta":14,"style":14},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[92,161510,161511,161519,161523,161536],{"__ignoreMap":14},[95,161512,161513,161515,161517],{"class":97,"line":98},[95,161514,161283],{"class":105},[95,161516,151],{"class":101},[95,161518,152149],{"class":154},[95,161520,161521],{"class":97,"line":15},[95,161522,2382],{"emptyLinePlaceholder":21},[95,161524,161525,161527,161530,161532,161534],{"class":97,"line":1161},[95,161526,1513],{"class":101},[95,161528,161529],{"class":105}," result ",[95,161531,38912],{"class":101},[95,161533,38918],{"class":154},[95,161535,3721],{"class":105},[95,161537,161538,161540,161542,161545],{"class":97,"line":1176},[95,161539,31284],{"class":154},[95,161541,106],{"class":105},[95,161543,161544],{"class":210},"\"没有数据\"",[95,161546,112],{"class":105},[10,161548,161549,161550,161552,161553,161556,161557,28370],{},"判断 ",[92,161551,95663],{}," 推荐使用 ",[92,161554,161555],{},"is None","，不要写成 ",[92,161558,161559],{},"== None",[37,161561,161563],{"id":161562},"_58-函数文档字符串","5.8 函数文档字符串",[10,161565,161566],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[86,161568,161570],{"className":30363,"code":161569,"language":30365,"meta":14,"style":14},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[92,161571,161572,161582,161587],{"__ignoreMap":14},[95,161573,161574,161576,161579],{"class":97,"line":98},[95,161575,31932],{"class":101},[95,161577,161578],{"class":1945}," calculate_bmi",[95,161580,161581],{"class":105},"(weight, height):\n",[95,161583,161584],{"class":97,"line":15},[95,161585,161586],{"class":210},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[95,161588,161589,161591,161594,161596,161599,161601],{"class":97,"line":1161},[95,161590,4072],{"class":101},[95,161592,161593],{"class":105}," weight ",[95,161595,690],{"class":101},[95,161597,161598],{"class":105}," height ",[95,161600,10644],{"class":101},[95,161602,47708],{"class":154},[10,161604,161605],{},"查看说明：",[86,161607,161609],{"className":30363,"code":161608,"language":30365,"meta":14,"style":14},"help(calculate_bmi)\n",[92,161610,161611],{"__ignoreMap":14},[95,161612,161613,161616],{"class":97,"line":98},[95,161614,161615],{"class":154},"help",[95,161617,161618],{"class":105},"(calculate_bmi)\n",[10,161620,161621],{},"较完整的写法：",[86,161623,161625],{"className":30363,"code":161624,"language":30365,"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",[92,161626,161627,161635,161640,161645,161649,161654,161659,161664,161668],{"__ignoreMap":14},[95,161628,161629,161631,161633],{"class":97,"line":98},[95,161630,31932],{"class":101},[95,161632,161578],{"class":1945},[95,161634,161581],{"class":105},[95,161636,161637],{"class":97,"line":15},[95,161638,161639],{"class":210},"    \"\"\"\n",[95,161641,161642],{"class":97,"line":1161},[95,161643,161644],{"class":210},"    计算BMI。\n",[95,161646,161647],{"class":97,"line":1176},[95,161648,2382],{"emptyLinePlaceholder":21},[95,161650,161651],{"class":97,"line":1182},[95,161652,161653],{"class":210},"    :param weight: 体重，单位kg\n",[95,161655,161656],{"class":97,"line":1196},[95,161657,161658],{"class":210},"    :param height: 身高，单位m\n",[95,161660,161661],{"class":97,"line":1202},[95,161662,161663],{"class":210},"    :return: BMI数值\n",[95,161665,161666],{"class":97,"line":1293},[95,161667,161639],{"class":210},[95,161669,161670,161672,161674,161676,161678,161680],{"class":97,"line":1299},[95,161671,4072],{"class":101},[95,161673,161593],{"class":105},[95,161675,690],{"class":101},[95,161677,161598],{"class":105},[95,161679,10644],{"class":101},[95,161681,47708],{"class":154},[37,161683,161685],{"id":161684},"_59-变量作用域","5.9 变量作用域",[66,161687,161689],{"id":161688},"_591-局部变量","5.9.1 局部变量",[10,161691,161692],{},"在函数内部定义的变量，只能在函数内部使用。",[86,161694,161696],{"className":30363,"code":161695,"language":30365,"meta":14,"style":14},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[92,161697,161698,161707,161715,161721,161725,161729,161734],{"__ignoreMap":14},[95,161699,161700,161702,161705],{"class":97,"line":98},[95,161701,31932],{"class":101},[95,161703,161704],{"class":1945}," test",[95,161706,31938],{"class":105},[95,161708,161709,161711,161713],{"class":97,"line":15},[95,161710,45578],{"class":105},[95,161712,151],{"class":101},[95,161714,58405],{"class":154},[95,161716,161717,161719],{"class":97,"line":1161},[95,161718,31284],{"class":154},[95,161720,119],{"class":105},[95,161722,161723],{"class":97,"line":1176},[95,161724,2382],{"emptyLinePlaceholder":21},[95,161726,161727],{"class":97,"line":1182},[95,161728,2382],{"emptyLinePlaceholder":21},[95,161730,161731],{"class":97,"line":1196},[95,161732,161733],{"class":105},"test()\n",[95,161735,161736,161738,161741],{"class":97,"line":1202},[95,161737,30400],{"class":154},[95,161739,161740],{"class":105},"(num)  ",[95,161742,161743],{"class":164},"# 报错\n",[66,161745,161747],{"id":161746},"_592-全局变量","5.9.2 全局变量",[10,161749,161750],{},"在函数外部定义的变量，可以在函数内部读取。",[86,161752,161754],{"className":30363,"code":161753,"language":30365,"meta":14,"style":14},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[92,161755,161756,161764,161768,161772,161780,161786,161790,161794],{"__ignoreMap":14},[95,161757,161758,161760,161762],{"class":97,"line":98},[95,161759,146513],{"class":105},[95,161761,151],{"class":101},[95,161763,149330],{"class":210},[95,161765,161766],{"class":97,"line":15},[95,161767,2382],{"emptyLinePlaceholder":21},[95,161769,161770],{"class":97,"line":1161},[95,161771,2382],{"emptyLinePlaceholder":21},[95,161773,161774,161776,161778],{"class":97,"line":1176},[95,161775,31932],{"class":101},[95,161777,160973],{"class":1945},[95,161779,31938],{"class":105},[95,161781,161782,161784],{"class":97,"line":1182},[95,161783,31284],{"class":154},[95,161785,150637],{"class":105},[95,161787,161788],{"class":97,"line":1196},[95,161789,2382],{"emptyLinePlaceholder":21},[95,161791,161792],{"class":97,"line":1202},[95,161793,2382],{"emptyLinePlaceholder":21},[95,161795,161796],{"class":97,"line":1293},[95,161797,161008],{"class":105},[10,161799,161800,161801,28370],{},"如果要在函数内部修改全局变量，需要 ",[92,161802,161803],{},"global",[86,161805,161807],{"className":30363,"code":161806,"language":30365,"meta":14,"style":14},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[92,161808,161809,161817,161821,161825,161834,161842,161850,161854,161858,161863],{"__ignoreMap":14},[95,161810,161811,161813,161815],{"class":97,"line":98},[95,161812,146668],{"class":105},[95,161814,151],{"class":101},[95,161816,47318],{"class":154},[95,161818,161819],{"class":97,"line":15},[95,161820,2382],{"emptyLinePlaceholder":21},[95,161822,161823],{"class":97,"line":1161},[95,161824,2382],{"emptyLinePlaceholder":21},[95,161826,161827,161829,161832],{"class":97,"line":1176},[95,161828,31932],{"class":101},[95,161830,161831],{"class":1945}," add_count",[95,161833,31938],{"class":105},[95,161835,161836,161839],{"class":97,"line":1182},[95,161837,161838],{"class":101},"    global",[95,161840,161841],{"class":105}," count\n",[95,161843,161844,161846,161848],{"class":97,"line":1196},[95,161845,159410],{"class":105},[95,161847,9460],{"class":101},[95,161849,55676],{"class":154},[95,161851,161852],{"class":97,"line":1202},[95,161853,2382],{"emptyLinePlaceholder":21},[95,161855,161856],{"class":97,"line":1293},[95,161857,2382],{"emptyLinePlaceholder":21},[95,161859,161860],{"class":97,"line":1299},[95,161861,161862],{"class":105},"add_count()\n",[95,161864,161865,161867],{"class":97,"line":1311},[95,161866,30400],{"class":154},[95,161868,161869],{"class":105},"(count)\n",[10,161871,161872],{},"不建议大量使用全局变量，项目变大后很难维护。",[37,161874,161876],{"id":161875},"_510-函数嵌套调用","5.10 函数嵌套调用",[10,161878,161879],{},"一个函数中可以调用另一个函数。",[86,161881,161883],{"className":30363,"code":161882,"language":30365,"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",[92,161884,161885,161894,161908,161912,161916,161925,161930,161950,161971,161975,161979,161983],{"__ignoreMap":14},[95,161886,161887,161889,161892],{"class":97,"line":98},[95,161888,31932],{"class":101},[95,161890,161891],{"class":1945}," print_line",[95,161893,31938],{"class":105},[95,161895,161896,161898,161900,161902,161904,161906],{"class":97,"line":15},[95,161897,31284],{"class":154},[95,161899,106],{"class":105},[95,161901,32468],{"class":210},[95,161903,6501],{"class":101},[95,161905,78642],{"class":154},[95,161907,112],{"class":105},[95,161909,161910],{"class":97,"line":1161},[95,161911,2382],{"emptyLinePlaceholder":21},[95,161913,161914],{"class":97,"line":1176},[95,161915,2382],{"emptyLinePlaceholder":21},[95,161917,161918,161920,161923],{"class":97,"line":1182},[95,161919,31932],{"class":101},[95,161921,161922],{"class":1945}," print_info",[95,161924,149352],{"class":105},[95,161926,161927],{"class":97,"line":1196},[95,161928,161929],{"class":105},"    print_line()\n",[95,161931,161932,161934,161936,161938,161940,161942,161944,161946,161948],{"class":97,"line":1202},[95,161933,31284],{"class":154},[95,161935,106],{"class":105},[95,161937,158],{"class":101},[95,161939,156659],{"class":210},[95,161941,1002],{"class":154},[95,161943,79787],{"class":105},[95,161945,1052],{"class":154},[95,161947,357],{"class":210},[95,161949,112],{"class":105},[95,161951,161952,161954,161956,161958,161961,161963,161965,161967,161969],{"class":97,"line":1293},[95,161953,31284],{"class":154},[95,161955,106],{"class":105},[95,161957,158],{"class":101},[95,161959,161960],{"class":210},"\"年龄:",[95,161962,1002],{"class":154},[95,161964,70198],{"class":105},[95,161966,1052],{"class":154},[95,161968,357],{"class":210},[95,161970,112],{"class":105},[95,161972,161973],{"class":97,"line":1299},[95,161974,161929],{"class":105},[95,161976,161977],{"class":97,"line":1311},[95,161978,2382],{"emptyLinePlaceholder":21},[95,161980,161981],{"class":97,"line":1594},[95,161982,2382],{"emptyLinePlaceholder":21},[95,161984,161985,161988,161990,161992,161994],{"class":97,"line":1599},[95,161986,161987],{"class":105},"print_info(",[95,161989,149865],{"class":210},[95,161991,12418],{"class":105},[95,161993,756],{"class":154},[95,161995,112],{"class":105},[10,161997,161998],{},"这种方式可以把小功能组合成大功能。",[37,162000,162002],{"id":162001},"_511-参数检查","5.11 参数检查",[10,162004,162005],{},"函数内部可以检查参数是否合法。",[86,162007,162009],{"className":30363,"code":162008,"language":30365,"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",[92,162010,162011,162020,162032,162038,162048,162052,162056,162073,162077,162089,162100,162106],{"__ignoreMap":14},[95,162012,162013,162015,162018],{"class":97,"line":98},[95,162014,31932],{"class":101},[95,162016,162017],{"class":1945}," divide",[95,162019,151070],{"class":105},[95,162021,162022,162024,162026,162028,162030],{"class":97,"line":15},[95,162023,3083],{"class":101},[95,162025,10865],{"class":105},[95,162027,2931],{"class":101},[95,162029,4075],{"class":154},[95,162031,3721],{"class":105},[95,162033,162034,162036],{"class":97,"line":1161},[95,162035,14735],{"class":101},[95,162037,152149],{"class":154},[95,162039,162040,162042,162044,162046],{"class":97,"line":1176},[95,162041,4072],{"class":101},[95,162043,10852],{"class":105},[95,162045,690],{"class":101},[95,162047,151081],{"class":105},[95,162049,162050],{"class":97,"line":1182},[95,162051,2382],{"emptyLinePlaceholder":21},[95,162053,162054],{"class":97,"line":1196},[95,162055,2382],{"emptyLinePlaceholder":21},[95,162057,162058,162060,162062,162065,162067,162069,162071],{"class":97,"line":1202},[95,162059,161283],{"class":105},[95,162061,151],{"class":101},[95,162063,162064],{"class":105}," divide(",[95,162066,552],{"class":154},[95,162068,12418],{"class":105},[95,162070,297],{"class":154},[95,162072,112],{"class":105},[95,162074,162075],{"class":97,"line":1293},[95,162076,2382],{"emptyLinePlaceholder":21},[95,162078,162079,162081,162083,162085,162087],{"class":97,"line":1299},[95,162080,1513],{"class":101},[95,162082,161529],{"class":105},[95,162084,38912],{"class":101},[95,162086,38918],{"class":154},[95,162088,3721],{"class":105},[95,162090,162091,162093,162095,162098],{"class":97,"line":1311},[95,162092,31284],{"class":154},[95,162094,106],{"class":105},[95,162096,162097],{"class":210},"\"除数不能为0\"",[95,162099,112],{"class":105},[95,162101,162102,162104],{"class":97,"line":1594},[95,162103,1683],{"class":101},[95,162105,3721],{"class":105},[95,162107,162108,162110],{"class":97,"line":1599},[95,162109,31284],{"class":154},[95,162111,76562],{"class":105},[37,162113,162115],{"id":162114},"_512-类型提示","5.12 类型提示",[10,162117,162118],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[86,162120,162122],{"className":30363,"code":162121,"language":30365,"meta":14,"style":14},"def add(a: int, b: int) -> int:\n    return a + b\n",[92,162123,162124,162147],{"__ignoreMap":14},[95,162125,162126,162128,162130,162133,162135,162138,162140,162143,162145],{"class":97,"line":98},[95,162127,31932],{"class":101},[95,162129,5192],{"class":1945},[95,162131,162132],{"class":105},"(a: ",[95,162134,109],{"class":154},[95,162136,162137],{"class":105},", b: ",[95,162139,109],{"class":154},[95,162141,162142],{"class":105},") -> ",[95,162144,109],{"class":154},[95,162146,3721],{"class":105},[95,162148,162149,162151,162153,162155],{"class":97,"line":15},[95,162150,4072],{"class":101},[95,162152,10852],{"class":105},[95,162154,587],{"class":101},[95,162156,151081],{"class":105},[10,162158,162159],{},"字符串参数：",[86,162161,162163],{"className":30363,"code":162162,"language":30365,"meta":14,"style":14},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[92,162164,162165,162182],{"__ignoreMap":14},[95,162166,162167,162169,162171,162174,162176,162178,162180],{"class":97,"line":98},[95,162168,31932],{"class":101},[95,162170,160973],{"class":1945},[95,162172,162173],{"class":105},"(name: ",[95,162175,1281],{"class":154},[95,162177,162142],{"class":105},[95,162179,95663],{"class":154},[95,162181,3721],{"class":105},[95,162183,162184,162186,162188,162190,162192,162194,162196,162198,162200],{"class":97,"line":15},[95,162185,31284],{"class":154},[95,162187,106],{"class":105},[95,162189,158],{"class":101},[95,162191,157031],{"class":210},[95,162193,1002],{"class":154},[95,162195,79787],{"class":105},[95,162197,1052],{"class":154},[95,162199,357],{"class":210},[95,162201,112],{"class":105},[10,162203,162204],{},"列表参数：",[86,162206,162208],{"className":30363,"code":162207,"language":30365,"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",[92,162209,162210,162229,162237,162249,162258],{"__ignoreMap":14},[95,162211,162212,162214,162217,162220,162222,162225,162227],{"class":97,"line":98},[95,162213,31932],{"class":101},[95,162215,162216],{"class":1945}," get_total",[95,162218,162219],{"class":105},"(numbers: list[",[95,162221,109],{"class":154},[95,162223,162224],{"class":105},"]) -> ",[95,162226,109],{"class":154},[95,162228,3721],{"class":105},[95,162230,162231,162233,162235],{"class":97,"line":15},[95,162232,159284],{"class":105},[95,162234,151],{"class":101},[95,162236,47318],{"class":154},[95,162238,162239,162241,162244,162246],{"class":97,"line":1161},[95,162240,3183],{"class":101},[95,162242,162243],{"class":105}," number ",[95,162245,26028],{"class":101},[95,162247,162248],{"class":105}," numbers:\n",[95,162250,162251,162253,162255],{"class":97,"line":1176},[95,162252,159959],{"class":105},[95,162254,9460],{"class":101},[95,162256,162257],{"class":105}," number\n",[95,162259,162260,162262],{"class":97,"line":1182},[95,162261,4072],{"class":101},[95,162263,162264],{"class":105}," total\n",[10,162266,162267],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[37,162269,162271],{"id":162270},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[86,162273,162275],{"className":30363,"code":162274,"language":30365,"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",[92,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},[95,162278,162279,162282,162284],{"class":97,"line":98},[95,162280,162281],{"class":105},"balance ",[95,162283,151],{"class":101},[95,162285,162286],{"class":154}," 1000\n",[95,162288,162289],{"class":97,"line":15},[95,162290,2382],{"emptyLinePlaceholder":21},[95,162292,162293],{"class":97,"line":1161},[95,162294,2382],{"emptyLinePlaceholder":21},[95,162296,162297,162299,162301],{"class":97,"line":1176},[95,162298,31932],{"class":101},[95,162300,152010],{"class":1945},[95,162302,31938],{"class":105},[95,162304,162305,162307,162309,162312],{"class":97,"line":1182},[95,162306,31284],{"class":154},[95,162308,106],{"class":105},[95,162310,162311],{"class":210},"\"====== ATM ======\"",[95,162313,112],{"class":105},[95,162315,162316,162318,162320,162322],{"class":97,"line":1196},[95,162317,31284],{"class":154},[95,162319,106],{"class":105},[95,162321,160625],{"class":210},[95,162323,112],{"class":105},[95,162325,162326,162328,162330,162332],{"class":97,"line":1202},[95,162327,31284],{"class":154},[95,162329,106],{"class":105},[95,162331,160636],{"class":210},[95,162333,112],{"class":105},[95,162335,162336,162338,162340,162342],{"class":97,"line":1293},[95,162337,31284],{"class":154},[95,162339,106],{"class":105},[95,162341,160647],{"class":210},[95,162343,112],{"class":105},[95,162345,162346,162348,162350,162352],{"class":97,"line":1299},[95,162347,31284],{"class":154},[95,162349,106],{"class":105},[95,162351,160658],{"class":210},[95,162353,112],{"class":105},[95,162355,162356],{"class":97,"line":1311},[95,162357,2382],{"emptyLinePlaceholder":21},[95,162359,162360],{"class":97,"line":1594},[95,162361,2382],{"emptyLinePlaceholder":21},[95,162363,162364,162366,162369],{"class":97,"line":1599},[95,162365,31932],{"class":101},[95,162367,162368],{"class":1945}," show_balance",[95,162370,31938],{"class":105},[95,162372,162373,162375,162377,162379,162382,162384,162387,162389,162391],{"class":97,"line":1605},[95,162374,31284],{"class":154},[95,162376,106],{"class":105},[95,162378,158],{"class":101},[95,162380,162381],{"class":210},"\"当前余额:",[95,162383,1002],{"class":154},[95,162385,162386],{"class":105},"balance",[95,162388,1052],{"class":154},[95,162390,156989],{"class":210},[95,162392,112],{"class":105},[95,162394,162395],{"class":97,"line":1610},[95,162396,2382],{"emptyLinePlaceholder":21},[95,162398,162399],{"class":97,"line":1624},[95,162400,2382],{"emptyLinePlaceholder":21},[95,162402,162403,162405,162408],{"class":97,"line":1629},[95,162404,31932],{"class":101},[95,162406,162407],{"class":1945}," save_money",[95,162409,31938],{"class":105},[95,162411,162412,162414],{"class":97,"line":1635},[95,162413,161838],{"class":101},[95,162415,150076],{"class":105},[95,162417,162418,162421,162423,162425,162427,162429,162431,162434],{"class":97,"line":1656},[95,162419,162420],{"class":105},"    money ",[95,162422,151],{"class":101},[95,162424,109774],{"class":154},[95,162426,106],{"class":105},[95,162428,53798],{"class":154},[95,162430,106],{"class":105},[95,162432,162433],{"class":210},"\"请输入存款金额:\"",[95,162435,30482],{"class":105},[95,162437,162438,162440,162442,162444,162446],{"class":97,"line":1661},[95,162439,3083],{"class":101},[95,162441,150119],{"class":105},[95,162443,1570],{"class":101},[95,162445,4075],{"class":154},[95,162447,3721],{"class":105},[95,162449,162450,162452,162454,162457],{"class":97,"line":1675},[95,162451,32436],{"class":154},[95,162453,106],{"class":105},[95,162455,162456],{"class":210},"\"金额必须大于0\"",[95,162458,112],{"class":105},[95,162460,162461],{"class":97,"line":1680},[95,162462,152338],{"class":101},[95,162464,162465,162468,162470],{"class":97,"line":1709},[95,162466,162467],{"class":105},"    balance ",[95,162469,9460],{"class":101},[95,162471,150152],{"class":105},[95,162473,162474,162476,162478,162481],{"class":97,"line":1714},[95,162475,31284],{"class":154},[95,162477,106],{"class":105},[95,162479,162480],{"class":210},"\"存款成功\"",[95,162482,112],{"class":105},[95,162484,162485],{"class":97,"line":1731},[95,162486,162487],{"class":105},"    show_balance()\n",[95,162489,162490],{"class":97,"line":1736},[95,162491,2382],{"emptyLinePlaceholder":21},[95,162493,162494],{"class":97,"line":1741},[95,162495,2382],{"emptyLinePlaceholder":21},[95,162497,162498,162500,162503],{"class":97,"line":1746},[95,162499,31932],{"class":101},[95,162501,162502],{"class":1945}," withdraw_money",[95,162504,31938],{"class":105},[95,162506,162507,162509],{"class":97,"line":1760},[95,162508,161838],{"class":101},[95,162510,150076],{"class":105},[95,162512,162513,162515,162517,162519,162521,162523,162525,162528],{"class":97,"line":1765},[95,162514,162420],{"class":105},[95,162516,151],{"class":101},[95,162518,109774],{"class":154},[95,162520,106],{"class":105},[95,162522,53798],{"class":154},[95,162524,106],{"class":105},[95,162526,162527],{"class":210},"\"请输入取款金额:\"",[95,162529,30482],{"class":105},[95,162531,162532,162534,162536,162538,162540],{"class":97,"line":2559},[95,162533,3083],{"class":101},[95,162535,150119],{"class":105},[95,162537,1570],{"class":101},[95,162539,4075],{"class":154},[95,162541,3721],{"class":105},[95,162543,162544,162546,162548,162550],{"class":97,"line":2573},[95,162545,32436],{"class":154},[95,162547,106],{"class":105},[95,162549,162456],{"class":210},[95,162551,112],{"class":105},[95,162553,162554],{"class":97,"line":2581},[95,162555,152338],{"class":101},[95,162557,162558,162560,162562,162564],{"class":97,"line":2586},[95,162559,3083],{"class":101},[95,162561,150119],{"class":105},[95,162563,1066],{"class":101},[95,162565,162566],{"class":105}," balance:\n",[95,162568,162569,162571,162573,162575],{"class":97,"line":2592},[95,162570,32436],{"class":154},[95,162572,106],{"class":105},[95,162574,150214],{"class":210},[95,162576,112],{"class":105},[95,162578,162579],{"class":97,"line":2598},[95,162580,152338],{"class":101},[95,162582,162583,162585,162587],{"class":97,"line":2603},[95,162584,162467],{"class":105},[95,162586,150229],{"class":101},[95,162588,150152],{"class":105},[95,162590,162591,162593,162595,162598],{"class":97,"line":7931},[95,162592,31284],{"class":154},[95,162594,106],{"class":105},[95,162596,162597],{"class":210},"\"取款成功\"",[95,162599,112],{"class":105},[95,162601,162602],{"class":97,"line":7955},[95,162603,162487],{"class":105},[95,162605,162606],{"class":97,"line":7960},[95,162607,2382],{"emptyLinePlaceholder":21},[95,162609,162610],{"class":97,"line":7966},[95,162611,2382],{"emptyLinePlaceholder":21},[95,162613,162614,162616,162618],{"class":97,"line":7993},[95,162615,108640],{"class":101},[95,162617,95269],{"class":154},[95,162619,3721],{"class":105},[95,162621,162622],{"class":97,"line":7998},[95,162623,162624],{"class":105},"    show_menu()\n",[95,162626,162627,162629,162631,162633,162635,162637],{"class":97,"line":8004},[95,162628,160669],{"class":105},[95,162630,151],{"class":101},[95,162632,60582],{"class":154},[95,162634,106],{"class":105},[95,162636,153050],{"class":210},[95,162638,112],{"class":105},[95,162640,162641],{"class":97,"line":8016},[95,162642,2382],{"emptyLinePlaceholder":21},[95,162644,162645,162647,162649,162651,162653],{"class":97,"line":8028},[95,162646,3083],{"class":101},[95,162648,153063],{"class":105},[95,162650,2931],{"class":101},[95,162652,153068],{"class":210},[95,162654,3721],{"class":105},[95,162656,162657],{"class":97,"line":8040},[95,162658,162659],{"class":105},"        show_balance()\n",[95,162661,162662,162664,162666,162668,162670],{"class":97,"line":9699},[95,162663,39278],{"class":101},[95,162665,153063],{"class":105},[95,162667,2931],{"class":101},[95,162669,153087],{"class":210},[95,162671,3721],{"class":105},[95,162673,162674],{"class":97,"line":9724},[95,162675,162676],{"class":105},"        save_money()\n",[95,162678,162679,162681,162683,162685,162687],{"class":97,"line":9747},[95,162680,39278],{"class":101},[95,162682,153063],{"class":105},[95,162684,2931],{"class":101},[95,162686,153105],{"class":210},[95,162688,3721],{"class":105},[95,162690,162691],{"class":97,"line":9771},[95,162692,162693],{"class":105},"        withdraw_money()\n",[95,162695,162696,162698,162700,162702,162704],{"class":97,"line":9776},[95,162697,39278],{"class":101},[95,162699,153063],{"class":105},[95,162701,2931],{"class":101},[95,162703,153159],{"class":210},[95,162705,3721],{"class":105},[95,162707,162708,162710,162712,162714],{"class":97,"line":9781},[95,162709,32436],{"class":154},[95,162711,106],{"class":105},[95,162713,153170],{"class":210},[95,162715,112],{"class":105},[95,162717,162718],{"class":97,"line":9786},[95,162719,31612],{"class":101},[95,162721,162722,162724],{"class":97,"line":9795},[95,162723,157999],{"class":101},[95,162725,3721],{"class":105},[95,162727,162728,162730,162732,162734],{"class":97,"line":9800},[95,162729,32436],{"class":154},[95,162731,106],{"class":105},[95,162733,153191],{"class":210},[95,162735,112],{"class":105},[10,162737,162738],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[37,162740,162742],{"id":162741},"_514-易错点","5.14 易错点",[49,162744,162745,162748,162751,162756,162761,162764],{},[52,162746,162747],{},"函数定义后必须调用才会执行。",[52,162749,162750],{},"函数名后面有括号才是调用。",[52,162752,162753,162755],{},[92,162754,17029],{}," 后面的代码不会执行。",[52,162757,162758,162759,28370],{},"没有返回值的函数默认返回 ",[92,162760,95663],{},[52,162762,162763],{},"局部变量不能在函数外部访问。",[52,162765,162766,162767,162769],{},"不要滥用 ",[92,162768,161803],{},"，更好的方式是让函数返回新值。",[10,162771,162772,162773,162775],{},"例如不用 ",[92,162774,161803],{}," 改写存款：",[86,162777,162779],{"className":30363,"code":162778,"language":30365,"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",[92,162780,162781,162790,162801,162805,162809,162817,162830],{"__ignoreMap":14},[95,162782,162783,162785,162787],{"class":97,"line":98},[95,162784,31932],{"class":101},[95,162786,162407],{"class":1945},[95,162788,162789],{"class":105},"(balance, money):\n",[95,162791,162792,162794,162797,162799],{"class":97,"line":15},[95,162793,4072],{"class":101},[95,162795,162796],{"class":105}," balance ",[95,162798,587],{"class":101},[95,162800,150152],{"class":105},[95,162802,162803],{"class":97,"line":1161},[95,162804,2382],{"emptyLinePlaceholder":21},[95,162806,162807],{"class":97,"line":1176},[95,162808,2382],{"emptyLinePlaceholder":21},[95,162810,162811,162813,162815],{"class":97,"line":1182},[95,162812,162281],{"class":105},[95,162814,151],{"class":101},[95,162816,162286],{"class":154},[95,162818,162819,162821,162823,162826,162828],{"class":97,"line":1196},[95,162820,162281],{"class":105},[95,162822,151],{"class":101},[95,162824,162825],{"class":105}," save_money(balance, ",[95,162827,1704],{"class":154},[95,162829,112],{"class":105},[95,162831,162832,162834],{"class":97,"line":1202},[95,162833,30400],{"class":154},[95,162835,162836],{"class":105},"(balance)\n",[37,162838,162840],{"id":162839},"_515-本章练习","5.15 本章练习",[49,162842,162843,162850,162856,162862,162868],{},[52,162844,162845,162846,162849],{},"定义函数 ",[92,162847,162848],{},"print_student(name, age)","，输出学生信息。",[52,162851,162845,162852,162855],{},[92,162853,162854],{},"get_max(a, b, c)","，返回三个数中的最大值。",[52,162857,162845,162858,162861],{},[92,162859,162860],{},"is_even(num)","，判断一个数是否为偶数。",[52,162863,162845,162864,162867],{},[92,162865,162866],{},"calculate_bmi(weight, height)","，返回 BMI。",[52,162869,162870],{},"把第 4 章的菜单程序拆分成多个函数。",[5109,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":1161,"text":161689},{"id":161746,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162900,"title":162901,"body":162902,"description":23360,"extension":18,"meta":165946,"navigation":21,"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],[33,162905,162901],{"id":162906},"_6-数据容器",[37,162908,162910],{"id":162909},"_61-什么是数据容器","6.1 什么是数据容器",[10,162912,162913],{},"数据容器用于一次保存多个数据。",[10,162915,162916],{},"常见容器：",[243,162918,162919,162936],{},[246,162920,162921],{},[249,162922,162923,162925,162928,162931,162934],{},[252,162924,25756],{},[252,162926,162927],{},"是否有序",[252,162929,162930],{},"是否可变",[252,162932,162933],{},"是否允许重复",[252,162935,27477],{},[290,162937,162938,162956,162972,162987,163004],{},[249,162939,162940,162943,162946,162949,162952],{},[295,162941,162942],{},"list列表",[295,162944,162945],{},"有序",[295,162947,162948],{},"可变",[295,162950,162951],{},"允许",[295,162953,162954],{},[92,162955,155234],{},[249,162957,162958,162961,162963,162966,162968],{},[295,162959,162960],{},"tuple元组",[295,162962,162945],{},[295,162964,162965],{},"不可变",[295,162967,162951],{},[295,162969,162970],{},[92,162971,155247],{},[249,162973,162974,162977,162979,162981,162983],{},[295,162975,162976],{},"str字符串",[295,162978,162945],{},[295,162980,162965],{},[295,162982,162951],{},[295,162984,162985],{},[92,162986,155857],{},[249,162988,162989,162992,162995,162997,163000],{},[295,162990,162991],{},"set集合",[295,162993,162994],{},"无序",[295,162996,162948],{},[295,162998,162999],{},"不允许",[295,163001,163002],{},[92,163003,155272],{},[249,163005,163006,163009,163011,163013,163016],{},[295,163007,163008],{},"dict字典",[295,163010,162945],{},[295,163012,162948],{},[295,163014,163015],{},"key不允许重复",[295,163017,163018],{},[92,163019,163020],{},"{\"name\": \"小明\"}",[10,163022,163023],{},"Python 3.7 之后，字典保持插入顺序。",[37,163025,163027],{"id":163026},"_62-列表list","6.2 列表list",[10,163029,163030],{},"列表用于保存一组有顺序的数据。",[86,163032,163034],{"className":30363,"code":163033,"language":30365,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[92,163035,163036,163056,163081,163102],{"__ignoreMap":14},[95,163037,163038,163040,163042,163044,163046,163048,163050,163052,163054],{"class":97,"line":98},[95,163039,160357],{"class":105},[95,163041,151],{"class":101},[95,163043,52203],{"class":105},[95,163045,149865],{"class":210},[95,163047,12418],{"class":105},[95,163049,150913],{"class":210},[95,163051,12418],{"class":105},[95,163053,159708],{"class":210},[95,163055,33231],{"class":105},[95,163057,163058,163061,163063,163065,163067,163069,163071,163073,163075,163077,163079],{"class":97,"line":15},[95,163059,163060],{"class":105},"numbers ",[95,163062,151],{"class":101},[95,163064,52203],{"class":105},[95,163066,323],{"class":154},[95,163068,12418],{"class":105},[95,163070,183],{"class":154},[95,163072,12418],{"class":105},[95,163074,177],{"class":154},[95,163076,12418],{"class":105},[95,163078,399],{"class":154},[95,163080,33231],{"class":105},[95,163082,163083,163086,163088,163090,163092,163094,163096,163098,163100],{"class":97,"line":1161},[95,163084,163085],{"class":105},"mixed ",[95,163087,151],{"class":101},[95,163089,52203],{"class":105},[95,163091,149865],{"class":210},[95,163093,12418],{"class":105},[95,163095,756],{"class":154},[95,163097,12418],{"class":105},[95,163099,31461],{"class":154},[95,163101,33231],{"class":105},[95,163103,163104,163107,163109],{"class":97,"line":1176},[95,163105,163106],{"class":105},"empty ",[95,163108,151],{"class":101},[95,163110,51815],{"class":105},[10,163112,163113],{},"推荐一个列表中保存同类数据，代码更清晰。",[37,163115,163117],{"id":163116},"_63-列表索引","6.3 列表索引",[10,163119,163120],{},"正向索引从 0 开始：",[86,163122,163124],{"className":30363,"code":163123,"language":30365,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[92,163125,163126,163146,163150,163161,163171],{"__ignoreMap":14},[95,163127,163128,163130,163132,163134,163136,163138,163140,163142,163144],{"class":97,"line":98},[95,163129,160357],{"class":105},[95,163131,151],{"class":101},[95,163133,52203],{"class":105},[95,163135,149865],{"class":210},[95,163137,12418],{"class":105},[95,163139,150913],{"class":210},[95,163141,12418],{"class":105},[95,163143,159708],{"class":210},[95,163145,33231],{"class":105},[95,163147,163148],{"class":97,"line":15},[95,163149,2382],{"emptyLinePlaceholder":21},[95,163151,163152,163154,163157,163159],{"class":97,"line":1161},[95,163153,30400],{"class":154},[95,163155,163156],{"class":105},"(names[",[95,163158,297],{"class":154},[95,163160,4639],{"class":105},[95,163162,163163,163165,163167,163169],{"class":97,"line":1176},[95,163164,30400],{"class":154},[95,163166,163156],{"class":105},[95,163168,323],{"class":154},[95,163170,4639],{"class":105},[95,163172,163173,163175,163177,163179],{"class":97,"line":1182},[95,163174,30400],{"class":154},[95,163176,163156],{"class":105},[95,163178,183],{"class":154},[95,163180,4639],{"class":105},[10,163182,163183],{},"反向索引从 -1 开始：",[86,163185,163187],{"className":30363,"code":163186,"language":30365,"meta":14,"style":14},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[92,163188,163189,163205],{"__ignoreMap":14},[95,163190,163191,163193,163195,163197,163199,163202],{"class":97,"line":98},[95,163192,30400],{"class":154},[95,163194,163156],{"class":105},[95,163196,638],{"class":101},[95,163198,323],{"class":154},[95,163200,163201],{"class":105},"])  ",[95,163203,163204],{"class":164},"# 小刚\n",[95,163206,163207,163209,163211,163213,163215,163217],{"class":97,"line":15},[95,163208,30400],{"class":154},[95,163210,163156],{"class":105},[95,163212,638],{"class":101},[95,163214,183],{"class":154},[95,163216,163201],{"class":105},[95,163218,163219],{"class":164},"# 小红\n",[10,163221,163222],{},"索引越界会报错：",[86,163224,163226],{"className":30363,"code":163225,"language":30365,"meta":14,"style":14},"print(names[3])\n",[92,163227,163228],{"__ignoreMap":14},[95,163229,163230,163232,163234,163236],{"class":97,"line":98},[95,163231,30400],{"class":154},[95,163233,163156],{"class":105},[95,163235,177],{"class":154},[95,163237,4639],{"class":105},[37,163239,163241],{"id":163240},"_64-列表常用方法","6.4 列表常用方法",[86,163243,163245],{"className":30363,"code":163244,"language":30365,"meta":14,"style":14},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[92,163246,163247,163263,163267,163276,163290,163304,163308],{"__ignoreMap":14},[95,163248,163249,163251,163253,163255,163257,163259,163261],{"class":97,"line":98},[95,163250,160357],{"class":105},[95,163252,151],{"class":101},[95,163254,52203],{"class":105},[95,163256,149865],{"class":210},[95,163258,12418],{"class":105},[95,163260,150913],{"class":210},[95,163262,33231],{"class":105},[95,163264,163265],{"class":97,"line":15},[95,163266,2382],{"emptyLinePlaceholder":21},[95,163268,163269,163272,163274],{"class":97,"line":1161},[95,163270,163271],{"class":105},"names.append(",[95,163273,159708],{"class":210},[95,163275,112],{"class":105},[95,163277,163278,163281,163283,163285,163288],{"class":97,"line":1176},[95,163279,163280],{"class":105},"names.insert(",[95,163282,323],{"class":154},[95,163284,12418],{"class":105},[95,163286,163287],{"class":210},"\"小李\"",[95,163289,112],{"class":105},[95,163291,163292,163295,163297,163299,163302],{"class":97,"line":1182},[95,163293,163294],{"class":105},"names.extend([",[95,163296,8666],{"class":210},[95,163298,12418],{"class":105},[95,163300,163301],{"class":210},"\"小赵\"",[95,163303,4639],{"class":105},[95,163305,163306],{"class":97,"line":1196},[95,163307,2382],{"emptyLinePlaceholder":21},[95,163309,163310,163312],{"class":97,"line":1202},[95,163311,30400],{"class":154},[95,163313,163314],{"class":105},"(names)\n",[10,163316,163317],{},"删除元素：",[86,163319,163321],{"className":30363,"code":163320,"language":30365,"meta":14,"style":14},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[92,163322,163323,163332,163342,163356,163368],{"__ignoreMap":14},[95,163324,163325,163328,163330],{"class":97,"line":98},[95,163326,163327],{"class":105},"names.remove(",[95,163329,150913],{"class":210},[95,163331,112],{"class":105},[95,163333,163334,163337,163339],{"class":97,"line":15},[95,163335,163336],{"class":105},"last ",[95,163338,151],{"class":101},[95,163340,163341],{"class":105}," names.pop()\n",[95,163343,163344,163347,163349,163352,163354],{"class":97,"line":1161},[95,163345,163346],{"class":105},"first ",[95,163348,151],{"class":101},[95,163350,163351],{"class":105}," names.pop(",[95,163353,297],{"class":154},[95,163355,112],{"class":105},[95,163357,163358,163361,163364,163366],{"class":97,"line":1176},[95,163359,163360],{"class":101},"del",[95,163362,163363],{"class":105}," names[",[95,163365,297],{"class":154},[95,163367,33231],{"class":105},[95,163369,163370],{"class":97,"line":1182},[95,163371,163372],{"class":105},"names.clear()\n",[10,163374,163375],{},"查询和统计：",[86,163377,163379],{"className":30363,"code":163378,"language":30365,"meta":14,"style":14},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[92,163380,163381,163409,163413,163424,163435],{"__ignoreMap":14},[95,163382,163383,163385,163387,163389,163391,163393,163395,163397,163399,163401,163403,163405,163407],{"class":97,"line":98},[95,163384,163060],{"class":105},[95,163386,151],{"class":101},[95,163388,52203],{"class":105},[95,163390,323],{"class":154},[95,163392,12418],{"class":105},[95,163394,183],{"class":154},[95,163396,12418],{"class":105},[95,163398,177],{"class":154},[95,163400,12418],{"class":105},[95,163402,183],{"class":154},[95,163404,12418],{"class":105},[95,163406,399],{"class":154},[95,163408,33231],{"class":105},[95,163410,163411],{"class":97,"line":15},[95,163412,2382],{"emptyLinePlaceholder":21},[95,163414,163415,163417,163420,163422],{"class":97,"line":1161},[95,163416,30400],{"class":154},[95,163418,163419],{"class":105},"(numbers.index(",[95,163421,177],{"class":154},[95,163423,30482],{"class":105},[95,163425,163426,163428,163431,163433],{"class":97,"line":1176},[95,163427,30400],{"class":154},[95,163429,163430],{"class":105},"(numbers.count(",[95,163432,183],{"class":154},[95,163434,30482],{"class":105},[95,163436,163437,163439,163441,163443],{"class":97,"line":1182},[95,163438,30400],{"class":154},[95,163440,106],{"class":105},[95,163442,7341],{"class":154},[95,163444,163445],{"class":105},"(numbers))\n",[10,163447,163448],{},"排序：",[86,163450,163452],{"className":30363,"code":163451,"language":30365,"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",[92,163453,163454,163478,163482,163487,163494,163498,163512,163518,163522,163527],{"__ignoreMap":14},[95,163455,163456,163458,163460,163462,163464,163466,163468,163470,163472,163474,163476],{"class":97,"line":98},[95,163457,163060],{"class":105},[95,163459,151],{"class":101},[95,163461,52203],{"class":105},[95,163463,177],{"class":154},[95,163465,12418],{"class":105},[95,163467,323],{"class":154},[95,163469,12418],{"class":105},[95,163471,425],{"class":154},[95,163473,12418],{"class":105},[95,163475,183],{"class":154},[95,163477,33231],{"class":105},[95,163479,163480],{"class":97,"line":15},[95,163481,2382],{"emptyLinePlaceholder":21},[95,163483,163484],{"class":97,"line":1161},[95,163485,163486],{"class":105},"numbers.sort()\n",[95,163488,163489,163491],{"class":97,"line":1176},[95,163490,30400],{"class":154},[95,163492,163493],{"class":105},"(numbers)\n",[95,163495,163496],{"class":97,"line":1182},[95,163497,2382],{"emptyLinePlaceholder":21},[95,163499,163500,163503,163506,163508,163510],{"class":97,"line":1196},[95,163501,163502],{"class":105},"numbers.sort(",[95,163504,163505],{"class":5199},"reverse",[95,163507,151],{"class":101},[95,163509,31461],{"class":154},[95,163511,112],{"class":105},[95,163513,163514,163516],{"class":97,"line":1202},[95,163515,30400],{"class":154},[95,163517,163493],{"class":105},[95,163519,163520],{"class":97,"line":1293},[95,163521,2382],{"emptyLinePlaceholder":21},[95,163523,163524],{"class":97,"line":1299},[95,163525,163526],{"class":105},"numbers.reverse()\n",[95,163528,163529,163531],{"class":97,"line":1311},[95,163530,30400],{"class":154},[95,163532,163493],{"class":105},[10,163534,163535,163538,163539,163542],{},[92,163536,163537],{},"sort()"," 会修改原列表，",[92,163540,163541],{},"sorted()"," 返回新列表。",[86,163544,163546],{"className":30363,"code":163545,"language":30365,"meta":14,"style":14},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[92,163547,163548,163572,163584,163588,163594],{"__ignoreMap":14},[95,163549,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568,163570],{"class":97,"line":98},[95,163551,163060],{"class":105},[95,163553,151],{"class":101},[95,163555,52203],{"class":105},[95,163557,177],{"class":154},[95,163559,12418],{"class":105},[95,163561,323],{"class":154},[95,163563,12418],{"class":105},[95,163565,425],{"class":154},[95,163567,12418],{"class":105},[95,163569,183],{"class":154},[95,163571,33231],{"class":105},[95,163573,163574,163577,163579,163582],{"class":97,"line":15},[95,163575,163576],{"class":105},"new_numbers ",[95,163578,151],{"class":101},[95,163580,163581],{"class":154}," sorted",[95,163583,163493],{"class":105},[95,163585,163586],{"class":97,"line":1161},[95,163587,2382],{"emptyLinePlaceholder":21},[95,163589,163590,163592],{"class":97,"line":1176},[95,163591,30400],{"class":154},[95,163593,163493],{"class":105},[95,163595,163596,163598],{"class":97,"line":1182},[95,163597,30400],{"class":154},[95,163599,163600],{"class":105},"(new_numbers)\n",[37,163602,163604],{"id":163603},"_65-列表遍历","6.5 列表遍历",[86,163606,163608],{"className":30363,"code":163607,"language":30365,"meta":14,"style":14},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[92,163609,163610,163630,163634,163644],{"__ignoreMap":14},[95,163611,163612,163614,163616,163618,163620,163622,163624,163626,163628],{"class":97,"line":98},[95,163613,160357],{"class":105},[95,163615,151],{"class":101},[95,163617,52203],{"class":105},[95,163619,149865],{"class":210},[95,163621,12418],{"class":105},[95,163623,150913],{"class":210},[95,163625,12418],{"class":105},[95,163627,159708],{"class":210},[95,163629,33231],{"class":105},[95,163631,163632],{"class":97,"line":15},[95,163633,2382],{"emptyLinePlaceholder":21},[95,163635,163636,163638,163640,163642],{"class":97,"line":1161},[95,163637,3007],{"class":101},[95,163639,160393],{"class":105},[95,163641,26028],{"class":101},[95,163643,160398],{"class":105},[95,163645,163646,163648],{"class":97,"line":1176},[95,163647,31284],{"class":154},[95,163649,150637],{"class":105},[10,163651,163652],{},"需要索引时：",[86,163654,163656],{"className":30363,"code":163655,"language":30365,"meta":14,"style":14},"for index, name in enumerate(names):\n    print(index, name)\n",[92,163657,163658,163672],{"__ignoreMap":14},[95,163659,163660,163662,163665,163667,163669],{"class":97,"line":98},[95,163661,3007],{"class":101},[95,163663,163664],{"class":105}," index, name ",[95,163666,26028],{"class":101},[95,163668,31591],{"class":154},[95,163670,163671],{"class":105},"(names):\n",[95,163673,163674,163676],{"class":97,"line":15},[95,163675,31284],{"class":154},[95,163677,163678],{"class":105},"(index, name)\n",[10,163680,163681],{},"统计总分：",[86,163683,163685],{"className":30363,"code":163684,"language":30365,"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",[92,163686,163687,163712,163720,163724,163735,163743,163747,163764],{"__ignoreMap":14},[95,163688,163689,163692,163694,163696,163698,163700,163702,163704,163706,163708,163710],{"class":97,"line":98},[95,163690,163691],{"class":105},"scores ",[95,163693,151],{"class":101},[95,163695,52203],{"class":105},[95,163697,968],{"class":154},[95,163699,12418],{"class":105},[95,163701,842],{"class":154},[95,163703,12418],{"class":105},[95,163705,360],{"class":154},[95,163707,12418],{"class":105},[95,163709,667],{"class":154},[95,163711,33231],{"class":105},[95,163713,163714,163716,163718],{"class":97,"line":15},[95,163715,157237],{"class":105},[95,163717,151],{"class":101},[95,163719,47318],{"class":154},[95,163721,163722],{"class":97,"line":1161},[95,163723,2382],{"emptyLinePlaceholder":21},[95,163725,163726,163728,163730,163732],{"class":97,"line":1176},[95,163727,3007],{"class":101},[95,163729,157760],{"class":105},[95,163731,26028],{"class":101},[95,163733,163734],{"class":105}," scores:\n",[95,163736,163737,163739,163741],{"class":97,"line":1182},[95,163738,159284],{"class":105},[95,163740,9460],{"class":101},[95,163742,1561],{"class":105},[95,163744,163745],{"class":97,"line":1196},[95,163746,2382],{"emptyLinePlaceholder":21},[95,163748,163749,163752,163754,163757,163759,163761],{"class":97,"line":1202},[95,163750,163751],{"class":105},"avg ",[95,163753,151],{"class":101},[95,163755,163756],{"class":105}," total ",[95,163758,690],{"class":101},[95,163760,7314],{"class":154},[95,163762,163763],{"class":105},"(scores)\n",[95,163765,163766,163768,163770,163772,163775,163777,163780,163782,163784,163786],{"class":97,"line":1293},[95,163767,30400],{"class":154},[95,163769,106],{"class":105},[95,163771,158],{"class":101},[95,163773,163774],{"class":210},"\"平均分:",[95,163776,1002],{"class":154},[95,163778,163779],{"class":105},"avg",[95,163781,157136],{"class":101},[95,163783,1052],{"class":154},[95,163785,357],{"class":210},[95,163787,112],{"class":105},[37,163789,163791],{"id":163790},"_66-元组tuple","6.6 元组tuple",[10,163793,163794],{},"元组和列表类似，但不可修改。",[86,163796,163798],{"className":30363,"code":163797,"language":30365,"meta":14,"style":14},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[92,163799,163800,163817],{"__ignoreMap":14},[95,163801,163802,163805,163807,163809,163811,163813,163815],{"class":97,"line":98},[95,163803,163804],{"class":105},"point ",[95,163806,151],{"class":101},[95,163808,1640],{"class":105},[95,163810,552],{"class":154},[95,163812,12418],{"class":105},[95,163814,806],{"class":154},[95,163816,112],{"class":105},[95,163818,163819,163821,163823,163825,163827,163829,163831,163833,163835],{"class":97,"line":15},[95,163820,116291],{"class":105},[95,163822,151],{"class":101},[95,163824,1640],{"class":105},[95,163826,149865],{"class":210},[95,163828,12418],{"class":105},[95,163830,756],{"class":154},[95,163832,12418],{"class":105},[95,163834,69246],{"class":210},[95,163836,112],{"class":105},[10,163838,163839],{},"单元素元组必须加逗号：",[86,163841,163843],{"className":30363,"code":163842,"language":30365,"meta":14,"style":14},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[92,163844,163845,163859,163872,163876,163890],{"__ignoreMap":14},[95,163846,163847,163850,163852,163854,163856],{"class":97,"line":98},[95,163848,163849],{"class":105},"t1 ",[95,163851,151],{"class":101},[95,163853,1640],{"class":105},[95,163855,552],{"class":154},[95,163857,163858],{"class":105},",)\n",[95,163860,163861,163864,163866,163868,163870],{"class":97,"line":15},[95,163862,163863],{"class":105},"t2 ",[95,163865,151],{"class":101},[95,163867,1640],{"class":105},[95,163869,552],{"class":154},[95,163871,112],{"class":105},[95,163873,163874],{"class":97,"line":1161},[95,163875,2382],{"emptyLinePlaceholder":21},[95,163877,163878,163880,163882,163884,163887],{"class":97,"line":1176},[95,163879,30400],{"class":154},[95,163881,106],{"class":105},[95,163883,103084],{"class":154},[95,163885,163886],{"class":105},"(t1))  ",[95,163888,163889],{"class":164},"# tuple\n",[95,163891,163892,163894,163896,163898,163901],{"class":97,"line":1182},[95,163893,30400],{"class":154},[95,163895,106],{"class":105},[95,163897,103084],{"class":154},[95,163899,163900],{"class":105},"(t2))  ",[95,163902,163903],{"class":164},"# int\n",[10,163905,163906],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[37,163908,163910],{"id":163909},"_67-字符串str","6.7 字符串str",[10,163912,163913],{},"字符串也是序列，可以索引、切片和遍历。",[86,163915,163917],{"className":30363,"code":163916,"language":30365,"meta":14,"style":14},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[92,163918,163919,163927,163931,163942,163954,163958,163969],{"__ignoreMap":14},[95,163920,163921,163923,163925],{"class":97,"line":98},[95,163922,156421],{"class":105},[95,163924,151],{"class":101},[95,163926,159658],{"class":210},[95,163928,163929],{"class":97,"line":15},[95,163930,2382],{"emptyLinePlaceholder":21},[95,163932,163933,163935,163938,163940],{"class":97,"line":1161},[95,163934,30400],{"class":154},[95,163936,163937],{"class":105},"(text[",[95,163939,297],{"class":154},[95,163941,4639],{"class":105},[95,163943,163944,163946,163948,163950,163952],{"class":97,"line":1176},[95,163945,30400],{"class":154},[95,163947,163937],{"class":105},[95,163949,638],{"class":101},[95,163951,323],{"class":154},[95,163953,4639],{"class":105},[95,163955,163956],{"class":97,"line":1182},[95,163957,2382],{"emptyLinePlaceholder":21},[95,163959,163960,163962,163964,163966],{"class":97,"line":1196},[95,163961,3007],{"class":101},[95,163963,159669],{"class":105},[95,163965,26028],{"class":101},[95,163967,163968],{"class":105}," text:\n",[95,163970,163971,163973],{"class":97,"line":1202},[95,163972,31284],{"class":154},[95,163974,159680],{"class":105},[10,163976,163977],{},"字符串不可变：",[86,163979,163981],{"className":30363,"code":163980,"language":30365,"meta":14,"style":14},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[92,163982,163983,163991],{"__ignoreMap":14},[95,163984,163985,163987,163989],{"class":97,"line":98},[95,163986,156421],{"class":105},[95,163988,151],{"class":101},[95,163990,159658],{"class":210},[95,163992,163993,163996,163998,164000,164002,164005],{"class":97,"line":15},[95,163994,163995],{"class":105},"text[",[95,163997,297],{"class":154},[95,163999,4425],{"class":105},[95,164001,151],{"class":101},[95,164003,164004],{"class":210}," \"P\"",[95,164006,164007],{"class":164},"  # 报错\n",[10,164009,164010],{},"如果要得到新字符串：",[86,164012,164014],{"className":30363,"code":164013,"language":30365,"meta":14,"style":14},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[92,164015,164016,164024,164042],{"__ignoreMap":14},[95,164017,164018,164020,164022],{"class":97,"line":98},[95,164019,156421],{"class":105},[95,164021,151],{"class":101},[95,164023,159658],{"class":210},[95,164025,164026,164028,164030,164032,164034,164037,164039],{"class":97,"line":15},[95,164027,156421],{"class":105},[95,164029,151],{"class":101},[95,164031,164004],{"class":210},[95,164033,45551],{"class":101},[95,164035,164036],{"class":105}," text[",[95,164038,323],{"class":154},[95,164040,164041],{"class":105},":]\n",[95,164043,164044,164046],{"class":97,"line":1161},[95,164045,30400],{"class":154},[95,164047,164048],{"class":105},"(text)\n",[37,164050,164052],{"id":164051},"_68-切片","6.8 切片",[10,164054,164055],{},"切片用于从序列中取一部分。",[86,164057,164059],{"className":30363,"code":164058,"language":30365,"meta":14,"style":14},"序列[开始:结束:步长]\n",[92,164060,164061],{"__ignoreMap":14},[95,164062,164063],{"class":97,"line":98},[95,164064,164058],{"class":105},[10,164066,164067],{},"结束位置不包含。",[86,164069,164071],{"className":30363,"code":164070,"language":30365,"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",[92,164072,164073,164110,164114,164133,164148,164162,164176],{"__ignoreMap":14},[95,164074,164075,164078,164080,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106,164108],{"class":97,"line":98},[95,164076,164077],{"class":105},"nums ",[95,164079,151],{"class":101},[95,164081,52203],{"class":105},[95,164083,297],{"class":154},[95,164085,12418],{"class":105},[95,164087,323],{"class":154},[95,164089,12418],{"class":105},[95,164091,183],{"class":154},[95,164093,12418],{"class":105},[95,164095,177],{"class":154},[95,164097,12418],{"class":105},[95,164099,399],{"class":154},[95,164101,12418],{"class":105},[95,164103,425],{"class":154},[95,164105,12418],{"class":105},[95,164107,450],{"class":154},[95,164109,33231],{"class":105},[95,164111,164112],{"class":97,"line":15},[95,164113,2382],{"emptyLinePlaceholder":21},[95,164115,164116,164118,164121,164123,164125,164127,164130],{"class":97,"line":1161},[95,164117,30400],{"class":154},[95,164119,164120],{"class":105},"(nums[",[95,164122,323],{"class":154},[95,164124,965],{"class":105},[95,164126,399],{"class":154},[95,164128,164129],{"class":105},"])    ",[95,164131,164132],{"class":164},"# [1, 2, 3]\n",[95,164134,164135,164137,164140,164142,164145],{"class":97,"line":1176},[95,164136,30400],{"class":154},[95,164138,164139],{"class":105},"(nums[:",[95,164141,177],{"class":154},[95,164143,164144],{"class":105},"])     ",[95,164146,164147],{"class":164},"# [0, 1, 2]\n",[95,164149,164150,164152,164154,164156,164159],{"class":97,"line":1182},[95,164151,30400],{"class":154},[95,164153,164120],{"class":105},[95,164155,177],{"class":154},[95,164157,164158],{"class":105},":])     ",[95,164160,164161],{"class":164},"# [3, 4, 5, 6]\n",[95,164163,164164,164166,164169,164171,164173],{"class":97,"line":1196},[95,164165,30400],{"class":154},[95,164167,164168],{"class":105},"(nums[::",[95,164170,183],{"class":154},[95,164172,164129],{"class":105},[95,164174,164175],{"class":164},"# [0, 2, 4, 6]\n",[95,164177,164178,164180,164182,164184,164186,164189],{"class":97,"line":1202},[95,164179,30400],{"class":154},[95,164181,164168],{"class":105},[95,164183,638],{"class":101},[95,164185,323],{"class":154},[95,164187,164188],{"class":105},"])   ",[95,164190,164191],{"class":164},"# 反转\n",[10,164193,164194],{},"字符串切片：",[86,164196,164198],{"className":30363,"code":164197,"language":30365,"meta":14,"style":14},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[92,164199,164200,164209,164223],{"__ignoreMap":14},[95,164201,164202,164204,164206],{"class":97,"line":98},[95,164203,156421],{"class":105},[95,164205,151],{"class":101},[95,164207,164208],{"class":210}," \"abcdef\"\n",[95,164210,164211,164213,164215,164217,164219,164221],{"class":97,"line":15},[95,164212,30400],{"class":154},[95,164214,163937],{"class":105},[95,164216,323],{"class":154},[95,164218,965],{"class":105},[95,164220,399],{"class":154},[95,164222,4639],{"class":105},[95,164224,164225,164227,164230,164232,164234],{"class":97,"line":1161},[95,164226,30400],{"class":154},[95,164228,164229],{"class":105},"(text[::",[95,164231,638],{"class":101},[95,164233,323],{"class":154},[95,164235,4639],{"class":105},[37,164237,164239],{"id":164238},"_69-集合set","6.9 集合set",[10,164241,164242],{},"集合特点：",[49,164244,164245,164248,164251],{},[52,164246,164247],{},"无序。",[52,164249,164250],{},"元素不重复。",[52,164252,164253],{},"可以做交集、并集、差集。",[86,164255,164257],{"className":30363,"code":164256,"language":30365,"meta":14,"style":14},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[92,164258,164259,164287],{"__ignoreMap":14},[95,164260,164261,164263,164265,164267,164269,164271,164273,164275,164277,164279,164281,164283,164285],{"class":97,"line":98},[95,164262,164077],{"class":105},[95,164264,151],{"class":101},[95,164266,4430],{"class":105},[95,164268,323],{"class":154},[95,164270,12418],{"class":105},[95,164272,183],{"class":154},[95,164274,12418],{"class":105},[95,164276,177],{"class":154},[95,164278,12418],{"class":105},[95,164280,177],{"class":154},[95,164282,12418],{"class":105},[95,164284,399],{"class":154},[95,164286,1547],{"class":105},[95,164288,164289,164291],{"class":97,"line":15},[95,164290,30400],{"class":154},[95,164292,164293],{"class":105},"(nums)\n",[10,164295,164296],{},"创建空集合：",[86,164298,164300],{"className":30363,"code":164299,"language":30365,"meta":14,"style":14},"s = set()\n",[92,164301,164302],{"__ignoreMap":14},[95,164303,164304,164306,164308,164310],{"class":97,"line":98},[95,164305,10562],{"class":105},[95,164307,151],{"class":101},[95,164309,119699],{"class":154},[95,164311,1958],{"class":105},[10,164313,9008,164314,164316],{},[92,164315,32444],{}," 是空字典，不是空集合。",[10,164318,164319],{},"集合常用操作：",[86,164321,164323],{"className":30363,"code":164322,"language":30365,"meta":14,"style":14},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[92,164324,164325,164345,164349,164358,164367,164376],{"__ignoreMap":14},[95,164326,164327,164329,164331,164333,164335,164337,164339,164341,164343],{"class":97,"line":98},[95,164328,10562],{"class":105},[95,164330,151],{"class":101},[95,164332,4430],{"class":105},[95,164334,323],{"class":154},[95,164336,12418],{"class":105},[95,164338,183],{"class":154},[95,164340,12418],{"class":105},[95,164342,177],{"class":154},[95,164344,1547],{"class":105},[95,164346,164347],{"class":97,"line":15},[95,164348,2382],{"emptyLinePlaceholder":21},[95,164350,164351,164354,164356],{"class":97,"line":1161},[95,164352,164353],{"class":105},"s.add(",[95,164355,399],{"class":154},[95,164357,112],{"class":105},[95,164359,164360,164363,164365],{"class":97,"line":1176},[95,164361,164362],{"class":105},"s.remove(",[95,164364,183],{"class":154},[95,164366,112],{"class":105},[95,164368,164369,164372,164374],{"class":97,"line":1182},[95,164370,164371],{"class":105},"s.discard(",[95,164373,552],{"class":154},[95,164375,112],{"class":105},[95,164377,164378,164380,164382,164384],{"class":97,"line":1196},[95,164379,30400],{"class":154},[95,164381,106],{"class":105},[95,164383,7341],{"class":154},[95,164385,164386],{"class":105},"(s))\n",[10,164388,164389],{},"交并差：",[86,164391,164393],{"className":30363,"code":164392,"language":30365,"meta":14,"style":14},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[92,164394,164395,164415,164435,164439,164454,164467],{"__ignoreMap":14},[95,164396,164397,164399,164401,164403,164405,164407,164409,164411,164413],{"class":97,"line":98},[95,164398,10902],{"class":105},[95,164400,151],{"class":101},[95,164402,4430],{"class":105},[95,164404,323],{"class":154},[95,164406,12418],{"class":105},[95,164408,183],{"class":154},[95,164410,12418],{"class":105},[95,164412,177],{"class":154},[95,164414,1547],{"class":105},[95,164416,164417,164419,164421,164423,164425,164427,164429,164431,164433],{"class":97,"line":15},[95,164418,10928],{"class":105},[95,164420,151],{"class":101},[95,164422,4430],{"class":105},[95,164424,177],{"class":154},[95,164426,12418],{"class":105},[95,164428,399],{"class":154},[95,164430,12418],{"class":105},[95,164432,425],{"class":154},[95,164434,1547],{"class":105},[95,164436,164437],{"class":97,"line":1161},[95,164438,2382],{"emptyLinePlaceholder":21},[95,164440,164441,164443,164446,164448,164451],{"class":97,"line":1176},[95,164442,30400],{"class":154},[95,164444,164445],{"class":105},"(a ",[95,164447,459],{"class":101},[95,164449,164450],{"class":105}," b)  ",[95,164452,164453],{"class":164},"# 交集\n",[95,164455,164456,164458,164460,164462,164464],{"class":97,"line":1182},[95,164457,30400],{"class":154},[95,164459,164445],{"class":105},[95,164461,1027],{"class":101},[95,164463,164450],{"class":105},[95,164465,164466],{"class":164},"# 并集\n",[95,164468,164469,164471,164473,164475,164477],{"class":97,"line":1196},[95,164470,30400],{"class":154},[95,164472,164445],{"class":105},[95,164474,638],{"class":101},[95,164476,164450],{"class":105},[95,164478,164479],{"class":164},"# 差集\n",[37,164481,164483],{"id":164482},"_610-字典dict","6.10 字典dict",[10,164485,164486],{},"字典通过 key-value 保存数据。",[86,164488,164490],{"className":30363,"code":164489,"language":30365,"meta":14,"style":14},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[92,164491,164492,164500,164510,164521,164531],{"__ignoreMap":14},[95,164493,164494,164496,164498],{"class":97,"line":98},[95,164495,149458],{"class":105},[95,164497,151],{"class":101},[95,164499,15555],{"class":105},[95,164501,164502,164504,164506,164508],{"class":97,"line":15},[95,164503,146997],{"class":210},[95,164505,51414],{"class":105},[95,164507,149865],{"class":210},[95,164509,31451],{"class":105},[95,164511,164512,164515,164517,164519],{"class":97,"line":1161},[95,164513,164514],{"class":210},"    \"age\"",[95,164516,51414],{"class":105},[95,164518,756],{"class":154},[95,164520,31451],{"class":105},[95,164522,164523,164526,164528],{"class":97,"line":1176},[95,164524,164525],{"class":210},"    \"score\"",[95,164527,51414],{"class":105},[95,164529,164530],{"class":154},"95\n",[95,164532,164533],{"class":97,"line":1182},[95,164534,1547],{"class":105},[10,164536,164537],{},"获取值：",[86,164539,164541],{"className":30363,"code":164540,"language":30365,"meta":14,"style":14},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[92,164542,164543,164554],{"__ignoreMap":14},[95,164544,164545,164547,164550,164552],{"class":97,"line":98},[95,164546,30400],{"class":154},[95,164548,164549],{"class":105},"(student[",[95,164551,62656],{"class":210},[95,164553,4639],{"class":105},[95,164555,164556,164558,164561,164563],{"class":97,"line":15},[95,164557,30400],{"class":154},[95,164559,164560],{"class":105},"(student.get(",[95,164562,62656],{"class":210},[95,164564,30482],{"class":105},[10,164566,15371],{},[86,164568,164570],{"className":30363,"code":164569,"language":30365,"meta":14,"style":14},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[92,164571,164572,164585],{"__ignoreMap":14},[95,164573,164574,164576,164579,164582],{"class":97,"line":98},[95,164575,152836],{"class":105},[95,164577,164578],{"class":210},"\"address\"",[95,164580,164581],{"class":105},"]     ",[95,164583,164584],{"class":164},"# key不存在会报错\n",[95,164586,164587,164590,164592,164594],{"class":97,"line":15},[95,164588,164589],{"class":105},"student.get(",[95,164591,164578],{"class":210},[95,164593,13697],{"class":105},[95,164595,164596],{"class":164},"# key不存在返回None\n",[10,164598,164599],{},"设置默认值：",[86,164601,164603],{"className":30363,"code":164602,"language":30365,"meta":14,"style":14},"print(student.get(\"address\", \"未知\"))\n",[92,164604,164605],{"__ignoreMap":14},[95,164606,164607,164609,164611,164613,164615,164618],{"class":97,"line":98},[95,164608,30400],{"class":154},[95,164610,164560],{"class":105},[95,164612,164578],{"class":210},[95,164614,12418],{"class":105},[95,164616,164617],{"class":210},"\"未知\"",[95,164619,30482],{"class":105},[10,164621,164622],{},"新增和修改：",[86,164624,164626],{"className":30363,"code":164625,"language":30365,"meta":14,"style":14},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[92,164627,164628,164641],{"__ignoreMap":14},[95,164629,164630,164632,164634,164636,164638],{"class":97,"line":98},[95,164631,152836],{"class":105},[95,164633,69101],{"class":210},[95,164635,4425],{"class":105},[95,164637,151],{"class":101},[95,164639,164640],{"class":154}," 19\n",[95,164642,164643,164645,164647,164649,164651],{"class":97,"line":15},[95,164644,152836],{"class":105},[95,164646,164578],{"class":210},[95,164648,4425],{"class":105},[95,164650,151],{"class":101},[95,164652,164653],{"class":210}," \"北京\"\n",[10,164655,164656],{},"删除：",[86,164658,164660],{"className":30363,"code":164659,"language":30365,"meta":14,"style":14},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[92,164661,164662,164675,164685],{"__ignoreMap":14},[95,164663,164664,164666,164668,164671,164673],{"class":97,"line":98},[95,164665,155335],{"class":105},[95,164667,151],{"class":101},[95,164669,164670],{"class":105}," student.pop(",[95,164672,151449],{"class":210},[95,164674,112],{"class":105},[95,164676,164677,164679,164681,164683],{"class":97,"line":15},[95,164678,163360],{"class":101},[95,164680,152126],{"class":105},[95,164682,69101],{"class":210},[95,164684,33231],{"class":105},[95,164686,164687],{"class":97,"line":1161},[95,164688,164689],{"class":105},"student.clear()\n",[37,164691,164693],{"id":164692},"_611-字典遍历","6.11 字典遍历",[10,164695,164696],{},"遍历 key：",[86,164698,164700],{"className":30363,"code":164699,"language":30365,"meta":14,"style":14},"for key in student:\n    print(key, student[key])\n",[92,164701,164702,164714],{"__ignoreMap":14},[95,164703,164704,164706,164709,164711],{"class":97,"line":98},[95,164705,3007],{"class":101},[95,164707,164708],{"class":105}," key ",[95,164710,26028],{"class":101},[95,164712,164713],{"class":105}," student:\n",[95,164715,164716,164718],{"class":97,"line":15},[95,164717,31284],{"class":154},[95,164719,164720],{"class":105},"(key, student[key])\n",[10,164722,164723],{},"遍历 value：",[86,164725,164727],{"className":30363,"code":164726,"language":30365,"meta":14,"style":14},"for value in student.values():\n    print(value)\n",[92,164728,164729,164741],{"__ignoreMap":14},[95,164730,164731,164733,164736,164738],{"class":97,"line":98},[95,164732,3007],{"class":101},[95,164734,164735],{"class":105}," value ",[95,164737,26028],{"class":101},[95,164739,164740],{"class":105}," student.values():\n",[95,164742,164743,164745],{"class":97,"line":15},[95,164744,31284],{"class":154},[95,164746,164747],{"class":105},"(value)\n",[10,164749,164750],{},"遍历 key 和 value：",[86,164752,164754],{"className":30363,"code":164753,"language":30365,"meta":14,"style":14},"for key, value in student.items():\n    print(key, value)\n",[92,164755,164756,164768],{"__ignoreMap":14},[95,164757,164758,164760,164763,164765],{"class":97,"line":98},[95,164759,3007],{"class":101},[95,164761,164762],{"class":105}," key, value ",[95,164764,26028],{"class":101},[95,164766,164767],{"class":105}," student.items():\n",[95,164769,164770,164772],{"class":97,"line":15},[95,164771,31284],{"class":154},[95,164773,164774],{"class":105},"(key, value)\n",[37,164776,164778],{"id":164777},"_612-嵌套容器","6.12 嵌套容器",[10,164780,164781],{},"列表中保存字典，是项目中最常见的结构之一。",[86,164783,164785],{"className":30363,"code":164784,"language":30365,"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",[92,164786,164787,164795,164823,164851,164879,164883,164887,164897],{"__ignoreMap":14},[95,164788,164789,164791,164793],{"class":97,"line":98},[95,164790,159693],{"class":105},[95,164792,151],{"class":101},[95,164794,55424],{"class":105},[95,164796,164797,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819,164821],{"class":97,"line":15},[95,164798,148362],{"class":105},[95,164800,62656],{"class":210},[95,164802,51414],{"class":105},[95,164804,149865],{"class":210},[95,164806,12418],{"class":105},[95,164808,69101],{"class":210},[95,164810,51414],{"class":105},[95,164812,756],{"class":154},[95,164814,12418],{"class":105},[95,164816,151449],{"class":210},[95,164818,51414],{"class":105},[95,164820,1095],{"class":154},[95,164822,4912],{"class":105},[95,164824,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847,164849],{"class":97,"line":1161},[95,164826,148362],{"class":105},[95,164828,62656],{"class":210},[95,164830,51414],{"class":105},[95,164832,150913],{"class":210},[95,164834,12418],{"class":105},[95,164836,69101],{"class":210},[95,164838,51414],{"class":105},[95,164840,731],{"class":154},[95,164842,12418],{"class":105},[95,164844,151449],{"class":210},[95,164846,51414],{"class":105},[95,164848,917],{"class":154},[95,164850,4912],{"class":105},[95,164852,164853,164855,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875,164877],{"class":97,"line":1176},[95,164854,148362],{"class":105},[95,164856,62656],{"class":210},[95,164858,51414],{"class":105},[95,164860,159708],{"class":210},[95,164862,12418],{"class":105},[95,164864,69101],{"class":210},[95,164866,51414],{"class":105},[95,164868,781],{"class":154},[95,164870,12418],{"class":105},[95,164872,151449],{"class":210},[95,164874,51414],{"class":105},[95,164876,512],{"class":154},[95,164878,4912],{"class":105},[95,164880,164881],{"class":97,"line":1182},[95,164882,33231],{"class":105},[95,164884,164885],{"class":97,"line":1196},[95,164886,2382],{"emptyLinePlaceholder":21},[95,164888,164889,164891,164893,164895],{"class":97,"line":1202},[95,164890,3007],{"class":101},[95,164892,152114],{"class":105},[95,164894,26028],{"class":101},[95,164896,152119],{"class":105},[95,164898,164899,164901,164903,164905,164908,164910],{"class":97,"line":1293},[95,164900,31284],{"class":154},[95,164902,164549],{"class":105},[95,164904,62656],{"class":210},[95,164906,164907],{"class":105},"], student[",[95,164909,151449],{"class":210},[95,164911,4639],{"class":105},[10,164913,164914],{},"统计平均分：",[86,164916,164918],{"className":30363,"code":164917,"language":30365,"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",[92,164919,164920,164928,164932,164942,164954,164958,164973],{"__ignoreMap":14},[95,164921,164922,164924,164926],{"class":97,"line":98},[95,164923,157237],{"class":105},[95,164925,151],{"class":101},[95,164927,47318],{"class":154},[95,164929,164930],{"class":97,"line":15},[95,164931,2382],{"emptyLinePlaceholder":21},[95,164933,164934,164936,164938,164940],{"class":97,"line":1161},[95,164935,3007],{"class":101},[95,164937,152114],{"class":105},[95,164939,26028],{"class":101},[95,164941,152119],{"class":105},[95,164943,164944,164946,164948,164950,164952],{"class":97,"line":1176},[95,164945,159284],{"class":105},[95,164947,9460],{"class":101},[95,164949,152126],{"class":105},[95,164951,151449],{"class":210},[95,164953,33231],{"class":105},[95,164955,164956],{"class":97,"line":1182},[95,164957,2382],{"emptyLinePlaceholder":21},[95,164959,164960,164962,164964,164966,164968,164970],{"class":97,"line":1196},[95,164961,163751],{"class":105},[95,164963,151],{"class":101},[95,164965,163756],{"class":105},[95,164967,690],{"class":101},[95,164969,7314],{"class":154},[95,164971,164972],{"class":105},"(students)\n",[95,164974,164975,164977,164979,164981,164983,164985,164987,164989,164991,164993],{"class":97,"line":1202},[95,164976,30400],{"class":154},[95,164978,106],{"class":105},[95,164980,158],{"class":101},[95,164982,163774],{"class":210},[95,164984,1002],{"class":154},[95,164986,163779],{"class":105},[95,164988,157136],{"class":101},[95,164990,1052],{"class":154},[95,164992,357],{"class":210},[95,164994,112],{"class":105},[10,164996,164997],{},"查找学生：",[86,164999,165001],{"className":30363,"code":165000,"language":30365,"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",[92,165002,165003,165018,165022,165032,165046,165052,165056,165062],{"__ignoreMap":14},[95,165004,165005,165007,165009,165011,165013,165016],{"class":97,"line":98},[95,165006,111555],{"class":105},[95,165008,151],{"class":101},[95,165010,60582],{"class":154},[95,165012,106],{"class":105},[95,165014,165015],{"class":210},"\"请输入学生姓名:\"",[95,165017,112],{"class":105},[95,165019,165020],{"class":97,"line":15},[95,165021,2382],{"emptyLinePlaceholder":21},[95,165023,165024,165026,165028,165030],{"class":97,"line":1161},[95,165025,3007],{"class":101},[95,165027,152114],{"class":105},[95,165029,26028],{"class":101},[95,165031,152119],{"class":105},[95,165033,165034,165036,165038,165040,165042,165044],{"class":97,"line":1176},[95,165035,3083],{"class":101},[95,165037,152126],{"class":105},[95,165039,62656],{"class":210},[95,165041,4425],{"class":105},[95,165043,2931],{"class":101},[95,165045,160409],{"class":105},[95,165047,165048,165050],{"class":97,"line":1182},[95,165049,32436],{"class":154},[95,165051,150019],{"class":105},[95,165053,165054],{"class":97,"line":1196},[95,165055,31612],{"class":101},[95,165057,165058,165060],{"class":97,"line":1202},[95,165059,1683],{"class":101},[95,165061,3721],{"class":105},[95,165063,165064,165066,165068,165071],{"class":97,"line":1293},[95,165065,31284],{"class":154},[95,165067,106],{"class":105},[95,165069,165070],{"class":210},"\"没有找到\"",[95,165072,112],{"class":105},[37,165074,165076],{"id":165075},"_613-容器通用操作","6.13 容器通用操作",[10,165078,165079],{},"长度：",[86,165081,165083],{"className":30363,"code":165082,"language":30365,"meta":14,"style":14},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[92,165084,165085,165104,165114],{"__ignoreMap":14},[95,165086,165087,165089,165092,165094,165096,165098,165100,165102],{"class":97,"line":98},[95,165088,7341],{"class":154},[95,165090,165091],{"class":105},"([",[95,165093,323],{"class":154},[95,165095,12418],{"class":105},[95,165097,183],{"class":154},[95,165099,12418],{"class":105},[95,165101,177],{"class":154},[95,165103,4639],{"class":105},[95,165105,165106,165108,165110,165112],{"class":97,"line":15},[95,165107,7341],{"class":154},[95,165109,106],{"class":105},[95,165111,155857],{"class":210},[95,165113,112],{"class":105},[95,165115,165116,165118,165121,165123,165125,165127],{"class":97,"line":1161},[95,165117,7341],{"class":154},[95,165119,165120],{"class":105},"({",[95,165122,62656],{"class":210},[95,165124,51414],{"class":105},[95,165126,149865],{"class":210},[95,165128,165129],{"class":105},"})\n",[10,165131,165132],{},"最大最小：",[86,165134,165136],{"className":30363,"code":165135,"language":30365,"meta":14,"style":14},"max([1, 2, 3])\nmin([1, 2, 3])\n",[92,165137,165138,165156],{"__ignoreMap":14},[95,165139,165140,165142,165144,165146,165148,165150,165152,165154],{"class":97,"line":98},[95,165141,5998],{"class":154},[95,165143,165091],{"class":105},[95,165145,323],{"class":154},[95,165147,12418],{"class":105},[95,165149,183],{"class":154},[95,165151,12418],{"class":105},[95,165153,177],{"class":154},[95,165155,4639],{"class":105},[95,165157,165158,165161,165163,165165,165167,165169,165171,165173],{"class":97,"line":15},[95,165159,165160],{"class":154},"min",[95,165162,165091],{"class":105},[95,165164,323],{"class":154},[95,165166,12418],{"class":105},[95,165168,183],{"class":154},[95,165170,12418],{"class":105},[95,165172,177],{"class":154},[95,165174,4639],{"class":105},[10,165176,165177],{},"求和：",[86,165179,165181],{"className":30363,"code":165180,"language":30365,"meta":14,"style":14},"sum([1, 2, 3])\n",[92,165182,165183],{"__ignoreMap":14},[95,165184,165185,165188,165190,165192,165194,165196,165198,165200],{"class":97,"line":98},[95,165186,165187],{"class":154},"sum",[95,165189,165091],{"class":105},[95,165191,323],{"class":154},[95,165193,12418],{"class":105},[95,165195,183],{"class":154},[95,165197,12418],{"class":105},[95,165199,177],{"class":154},[95,165201,4639],{"class":105},[10,165203,163448],{},[86,165205,165207],{"className":30363,"code":165206,"language":30365,"meta":14,"style":14},"sorted([3, 1, 2])\n",[92,165208,165209],{"__ignoreMap":14},[95,165210,165211,165214,165216,165218,165220,165222,165224,165226],{"class":97,"line":98},[95,165212,165213],{"class":154},"sorted",[95,165215,165091],{"class":105},[95,165217,177],{"class":154},[95,165219,12418],{"class":105},[95,165221,323],{"class":154},[95,165223,12418],{"class":105},[95,165225,183],{"class":154},[95,165227,4639],{"class":105},[10,165229,165230],{},"类型转换：",[86,165232,165234],{"className":30363,"code":165233,"language":30365,"meta":14,"style":14},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[92,165235,165236,165246,165264],{"__ignoreMap":14},[95,165237,165238,165240,165242,165244],{"class":97,"line":98},[95,165239,154047],{"class":154},[95,165241,106],{"class":105},[95,165243,155857],{"class":210},[95,165245,112],{"class":105},[95,165247,165248,165250,165252,165254,165256,165258,165260,165262],{"class":97,"line":15},[95,165249,155242],{"class":154},[95,165251,165091],{"class":105},[95,165253,323],{"class":154},[95,165255,12418],{"class":105},[95,165257,183],{"class":154},[95,165259,12418],{"class":105},[95,165261,177],{"class":154},[95,165263,4639],{"class":105},[95,165265,165266,165268,165270,165272,165274,165276,165278,165280,165282,165284],{"class":97,"line":1161},[95,165267,155267],{"class":154},[95,165269,165091],{"class":105},[95,165271,323],{"class":154},[95,165273,12418],{"class":105},[95,165275,323],{"class":154},[95,165277,12418],{"class":105},[95,165279,183],{"class":154},[95,165281,12418],{"class":105},[95,165283,177],{"class":154},[95,165285,4639],{"class":105},[10,165287,165288],{},"成员判断：",[86,165290,165292],{"className":30363,"code":165291,"language":30365,"meta":14,"style":14},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[92,165293,165294,165311,165335],{"__ignoreMap":14},[95,165295,165296,165298,165300,165303,165306,165309],{"class":97,"line":98},[95,165297,30400],{"class":154},[95,165299,106],{"class":105},[95,165301,165302],{"class":210},"\"a\"",[95,165304,165305],{"class":101}," in",[95,165307,165308],{"class":210}," \"abc\"",[95,165310,112],{"class":105},[95,165312,165313,165315,165317,165319,165321,165323,165325,165327,165329,165331,165333],{"class":97,"line":15},[95,165314,30400],{"class":154},[95,165316,106],{"class":105},[95,165318,323],{"class":154},[95,165320,165305],{"class":101},[95,165322,52203],{"class":105},[95,165324,323],{"class":154},[95,165326,12418],{"class":105},[95,165328,183],{"class":154},[95,165330,12418],{"class":105},[95,165332,177],{"class":154},[95,165334,4639],{"class":105},[95,165336,165337,165339,165341,165343,165345,165347,165349,165351,165353],{"class":97,"line":1161},[95,165338,30400],{"class":154},[95,165340,106],{"class":105},[95,165342,62656],{"class":210},[95,165344,165305],{"class":101},[95,165346,4430],{"class":105},[95,165348,62656],{"class":210},[95,165350,51414],{"class":105},[95,165352,149865],{"class":210},[95,165354,165129],{"class":105},[37,165356,165358],{"id":165357},"_614-推导式","6.14 推导式",[10,165360,165361],{},"推导式用于快速生成容器。",[10,165363,165364],{},"列表推导式：",[86,165366,165368],{"className":30363,"code":165367,"language":30365,"meta":14,"style":14},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[92,165369,165370,165397],{"__ignoreMap":14},[95,165371,165372,165374,165376,165379,165381,165383,165385,165387,165389,165391,165393,165395],{"class":97,"line":98},[95,165373,164077],{"class":105},[95,165375,151],{"class":101},[95,165377,165378],{"class":105}," [i ",[95,165380,3007],{"class":101},[95,165382,9421],{"class":105},[95,165384,26028],{"class":101},[95,165386,32428],{"class":154},[95,165388,106],{"class":105},[95,165390,323],{"class":154},[95,165392,12418],{"class":105},[95,165394,450],{"class":154},[95,165396,97277],{"class":105},[95,165398,165399,165401],{"class":97,"line":15},[95,165400,30400],{"class":154},[95,165402,164293],{"class":105},[10,165404,165405],{},"带条件：",[86,165407,165409],{"className":30363,"code":165408,"language":30365,"meta":14,"style":14},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[92,165410,165411,165452],{"__ignoreMap":14},[95,165412,165413,165416,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450],{"class":97,"line":98},[95,165414,165415],{"class":105},"even_nums ",[95,165417,151],{"class":101},[95,165419,165378],{"class":105},[95,165421,3007],{"class":101},[95,165423,9421],{"class":105},[95,165425,26028],{"class":101},[95,165427,32428],{"class":154},[95,165429,106],{"class":105},[95,165431,323],{"class":154},[95,165433,12418],{"class":105},[95,165435,443],{"class":154},[95,165437,13697],{"class":105},[95,165439,1513],{"class":101},[95,165441,9421],{"class":105},[95,165443,434],{"class":101},[95,165445,14738],{"class":154},[95,165447,101536],{"class":101},[95,165449,4075],{"class":154},[95,165451,33231],{"class":105},[95,165453,165454,165456],{"class":97,"line":15},[95,165455,30400],{"class":154},[95,165457,165458],{"class":105},"(even_nums)\n",[10,165460,165461],{},"字典推导式：",[86,165463,165465],{"className":30363,"code":165464,"language":30365,"meta":14,"style":14},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[92,165466,165467,165501],{"__ignoreMap":14},[95,165468,165469,165472,165474,165477,165479,165481,165484,165486,165488,165490,165492,165494,165496,165498],{"class":97,"line":98},[95,165470,165471],{"class":105},"squares ",[95,165473,151],{"class":101},[95,165475,165476],{"class":105}," {i: i ",[95,165478,10644],{"class":101},[95,165480,14738],{"class":154},[95,165482,165483],{"class":101}," for",[95,165485,9421],{"class":105},[95,165487,26028],{"class":101},[95,165489,32428],{"class":154},[95,165491,106],{"class":105},[95,165493,323],{"class":154},[95,165495,12418],{"class":105},[95,165497,450],{"class":154},[95,165499,165500],{"class":105},")}\n",[95,165502,165503,165505],{"class":97,"line":15},[95,165504,30400],{"class":154},[95,165506,165507],{"class":105},"(squares)\n",[10,165509,165510],{},"集合推导式：",[86,165512,165514],{"className":30363,"code":165513,"language":30365,"meta":14,"style":14},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[92,165515,165516,165537],{"__ignoreMap":14},[95,165517,165518,165521,165523,165526,165528,165530,165532,165535],{"class":97,"line":98},[95,165519,165520],{"class":105},"chars ",[95,165522,151],{"class":101},[95,165524,165525],{"class":105}," {ch ",[95,165527,3007],{"class":101},[95,165529,159669],{"class":105},[95,165531,26028],{"class":101},[95,165533,165534],{"class":210}," \"hello\"",[95,165536,1547],{"class":105},[95,165538,165539,165541],{"class":97,"line":15},[95,165540,30400],{"class":154},[95,165542,165543],{"class":105},"(chars)\n",[10,165545,165546],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[37,165548,165550],{"id":165549},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[86,165552,165554],{"className":30363,"code":165553,"language":30365,"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",[92,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},[95,165557,165558,165560,165562],{"class":97,"line":98},[95,165559,159693],{"class":105},[95,165561,151],{"class":101},[95,165563,55424],{"class":105},[95,165565,165566,165568,165570,165572,165574,165576,165578,165580,165582],{"class":97,"line":15},[95,165567,148362],{"class":105},[95,165569,62656],{"class":210},[95,165571,51414],{"class":105},[95,165573,149865],{"class":210},[95,165575,12418],{"class":105},[95,165577,151449],{"class":210},[95,165579,51414],{"class":105},[95,165581,1095],{"class":154},[95,165583,4912],{"class":105},[95,165585,165586,165588,165590,165592,165594,165596,165598,165600,165602],{"class":97,"line":1161},[95,165587,148362],{"class":105},[95,165589,62656],{"class":210},[95,165591,51414],{"class":105},[95,165593,150913],{"class":210},[95,165595,12418],{"class":105},[95,165597,151449],{"class":210},[95,165599,51414],{"class":105},[95,165601,917],{"class":154},[95,165603,4912],{"class":105},[95,165605,165606,165608,165610,165612,165614,165616,165618,165620,165622],{"class":97,"line":1176},[95,165607,148362],{"class":105},[95,165609,62656],{"class":210},[95,165611,51414],{"class":105},[95,165613,159708],{"class":210},[95,165615,12418],{"class":105},[95,165617,151449],{"class":210},[95,165619,51414],{"class":105},[95,165621,512],{"class":154},[95,165623,4912],{"class":105},[95,165625,165626,165628,165630,165632,165634,165636,165638,165640,165642],{"class":97,"line":1182},[95,165627,148362],{"class":105},[95,165629,62656],{"class":210},[95,165631,51414],{"class":105},[95,165633,163287],{"class":210},[95,165635,12418],{"class":105},[95,165637,151449],{"class":210},[95,165639,51414],{"class":105},[95,165641,988],{"class":154},[95,165643,4912],{"class":105},[95,165645,165646],{"class":97,"line":1196},[95,165647,33231],{"class":105},[95,165649,165650],{"class":97,"line":1202},[95,165651,2382],{"emptyLinePlaceholder":21},[95,165653,165654,165656,165658],{"class":97,"line":1293},[95,165655,157237],{"class":105},[95,165657,151],{"class":101},[95,165659,47318],{"class":154},[95,165661,165662,165665,165667,165670,165672],{"class":97,"line":1299},[95,165663,165664],{"class":105},"max_student ",[95,165666,151],{"class":101},[95,165668,165669],{"class":105}," students[",[95,165671,297],{"class":154},[95,165673,33231],{"class":105},[95,165675,165676,165679,165681],{"class":97,"line":1311},[95,165677,165678],{"class":105},"passed ",[95,165680,151],{"class":101},[95,165682,51815],{"class":105},[95,165684,165685],{"class":97,"line":1594},[95,165686,2382],{"emptyLinePlaceholder":21},[95,165688,165689,165691,165693,165695],{"class":97,"line":1599},[95,165690,3007],{"class":101},[95,165692,152114],{"class":105},[95,165694,26028],{"class":101},[95,165696,152119],{"class":105},[95,165698,165699,165701,165703,165705,165707],{"class":97,"line":1605},[95,165700,159284],{"class":105},[95,165702,9460],{"class":101},[95,165704,152126],{"class":105},[95,165706,151449],{"class":210},[95,165708,33231],{"class":105},[95,165710,165711],{"class":97,"line":1610},[95,165712,2382],{"emptyLinePlaceholder":21},[95,165714,165715,165717,165719,165721,165723,165725,165728,165730],{"class":97,"line":1624},[95,165716,3083],{"class":101},[95,165718,152126],{"class":105},[95,165720,151449],{"class":210},[95,165722,4425],{"class":105},[95,165724,1066],{"class":101},[95,165726,165727],{"class":105}," max_student[",[95,165729,151449],{"class":210},[95,165731,165732],{"class":105},"]:\n",[95,165734,165735,165738,165740],{"class":97,"line":1629},[95,165736,165737],{"class":105},"        max_student ",[95,165739,151],{"class":101},[95,165741,152142],{"class":105},[95,165743,165744],{"class":97,"line":1635},[95,165745,2382],{"emptyLinePlaceholder":21},[95,165747,165748,165750,165752,165754,165756,165758,165760],{"class":97,"line":1656},[95,165749,3083],{"class":101},[95,165751,152126],{"class":105},[95,165753,151449],{"class":210},[95,165755,4425],{"class":105},[95,165757,1692],{"class":101},[95,165759,157814],{"class":154},[95,165761,3721],{"class":105},[95,165763,165764],{"class":97,"line":1661},[95,165765,165766],{"class":105},"        passed.append(student)\n",[95,165768,165769],{"class":97,"line":1675},[95,165770,2382],{"emptyLinePlaceholder":21},[95,165772,165773,165775,165777,165779,165781,165783],{"class":97,"line":1680},[95,165774,163751],{"class":105},[95,165776,151],{"class":101},[95,165778,163756],{"class":105},[95,165780,690],{"class":101},[95,165782,7314],{"class":154},[95,165784,164972],{"class":105},[95,165786,165787],{"class":97,"line":1709},[95,165788,2382],{"emptyLinePlaceholder":21},[95,165790,165791,165793,165795,165797,165799,165801,165803,165805,165807,165809],{"class":97,"line":1714},[95,165792,30400],{"class":154},[95,165794,106],{"class":105},[95,165796,158],{"class":101},[95,165798,163774],{"class":210},[95,165800,1002],{"class":154},[95,165802,163779],{"class":105},[95,165804,157136],{"class":101},[95,165806,1052],{"class":154},[95,165808,357],{"class":210},[95,165810,112],{"class":105},[95,165812,165813,165815,165817,165819,165822,165824,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845],{"class":97,"line":1731},[95,165814,30400],{"class":154},[95,165816,106],{"class":105},[95,165818,158],{"class":101},[95,165820,165821],{"class":210},"\"最高分学生:",[95,165823,1002],{"class":154},[95,165825,165826],{"class":105},"max_student[",[95,165828,152859],{"class":210},[95,165830,1046],{"class":105},[95,165832,1052],{"class":154},[95,165834,4430],{"class":154},[95,165836,165826],{"class":105},[95,165838,152897],{"class":210},[95,165840,1046],{"class":105},[95,165842,1052],{"class":154},[95,165844,357],{"class":210},[95,165846,112],{"class":105},[95,165848,165849,165851,165853,165855,165858,165861,165864,165866,165868],{"class":97,"line":1736},[95,165850,30400],{"class":154},[95,165852,106],{"class":105},[95,165854,158],{"class":101},[95,165856,165857],{"class":210},"\"及格人数:",[95,165859,165860],{"class":154},"{len",[95,165862,165863],{"class":105},"(passed)",[95,165865,1052],{"class":154},[95,165867,357],{"class":210},[95,165869,112],{"class":105},[37,165871,165873],{"id":165872},"_616-易错点","6.16 易错点",[49,165875,165876,165879,165882,165885,165891,165900],{},[52,165877,165878],{},"列表可变，元组和字符串不可变。",[52,165880,165881],{},"切片结束位置不包含。",[52,165883,165884],{},"字典通过 key 取值，不是通过索引。",[52,165886,165887,165888,28370],{},"空集合要用 ",[92,165889,165890],{},"set()",[52,165892,104343,165893,165896,165897,28370],{},[92,165894,165895],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[92,165898,165899],{},"get()",[52,165901,165902],{},"嵌套容器要先看清楚每一层是什么类型。",[37,165904,165906],{"id":165905},"_617-本章练习","6.17 本章练习",[49,165908,165909,165912,165915,165918,165921],{},[52,165910,165911],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[52,165913,165914],{},"输入一句话，统计每个字符出现次数。",[52,165916,165917],{},"使用集合去除列表中的重复元素。",[52,165919,165920],{},"使用字典保存一个学生的信息，并实现修改成绩。",[52,165922,165923],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5109,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":23360},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165952,"title":165953,"body":165954,"description":23360,"extension":18,"meta":168126,"navigation":21,"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],[33,165957,165953],{"id":165958},"_7-函数进阶",[37,165960,165962],{"id":165961},"_71-多返回值","7.1 多返回值",[10,165964,165965],{},"Python 函数可以返回多个值，本质上返回的是元组。",[86,165967,165969],{"className":30363,"code":165968,"language":30365,"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",[92,165970,165971,165980,165988,165996,166005,166012,166016,166020,166029,166035],{"__ignoreMap":14},[95,165972,165973,165975,165978],{"class":97,"line":98},[95,165974,31932],{"class":101},[95,165976,165977],{"class":1945}," get_info",[95,165979,31938],{"class":105},[95,165981,165982,165984,165986],{"class":97,"line":15},[95,165983,152347],{"class":105},[95,165985,151],{"class":101},[95,165987,149330],{"class":210},[95,165989,165990,165992,165994],{"class":97,"line":1161},[95,165991,152363],{"class":105},[95,165993,151],{"class":101},[95,165995,146528],{"class":154},[95,165997,165998,166000,166002],{"class":97,"line":1176},[95,165999,152378],{"class":105},[95,166001,151],{"class":101},[95,166003,166004],{"class":154}," 95\n",[95,166006,166007,166009],{"class":97,"line":1182},[95,166008,4072],{"class":101},[95,166010,166011],{"class":105}," name, age, score\n",[95,166013,166014],{"class":97,"line":1196},[95,166015,2382],{"emptyLinePlaceholder":21},[95,166017,166018],{"class":97,"line":1202},[95,166019,2382],{"emptyLinePlaceholder":21},[95,166021,166022,166024,166026],{"class":97,"line":1293},[95,166023,161283],{"class":105},[95,166025,151],{"class":101},[95,166027,166028],{"class":105}," get_info()\n",[95,166030,166031,166033],{"class":97,"line":1299},[95,166032,30400],{"class":154},[95,166034,76562],{"class":105},[95,166036,166037,166039,166041,166043],{"class":97,"line":1311},[95,166038,30400],{"class":154},[95,166040,106],{"class":105},[95,166042,103084],{"class":154},[95,166044,166045],{"class":105},"(result))\n",[10,166047,166048],{},"可以直接解包：",[86,166050,166052],{"className":30363,"code":166051,"language":30365,"meta":14,"style":14},"name, age, score = get_info()\nprint(name, age, score)\n",[92,166053,166054,166063],{"__ignoreMap":14},[95,166055,166056,166059,166061],{"class":97,"line":98},[95,166057,166058],{"class":105},"name, age, score ",[95,166060,151],{"class":101},[95,166062,166028],{"class":105},[95,166064,166065,166067],{"class":97,"line":15},[95,166066,30400],{"class":154},[95,166068,166069],{"class":105},"(name, age, score)\n",[10,166071,166072],{},"返回多个值适合函数需要同时给出多个结果时使用。",[37,166074,166076],{"id":166075},"_72-位置参数","7.2 位置参数",[10,166078,166079],{},"位置参数按顺序传递。",[86,166081,166083],{"className":30363,"code":166082,"language":30365,"meta":14,"style":14},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[92,166084,166085,166093,166121,166125,166129],{"__ignoreMap":14},[95,166086,166087,166089,166091],{"class":97,"line":98},[95,166088,31932],{"class":101},[95,166090,149349],{"class":1945},[95,166092,149352],{"class":105},[95,166094,166095,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119],{"class":97,"line":15},[95,166096,31284],{"class":154},[95,166098,106],{"class":105},[95,166100,158],{"class":101},[95,166102,149363],{"class":210},[95,166104,1002],{"class":154},[95,166106,79787],{"class":105},[95,166108,1052],{"class":154},[95,166110,149372],{"class":210},[95,166112,1002],{"class":154},[95,166114,70198],{"class":105},[95,166116,1052],{"class":154},[95,166118,149381],{"class":210},[95,166120,112],{"class":105},[95,166122,166123],{"class":97,"line":1161},[95,166124,2382],{"emptyLinePlaceholder":21},[95,166126,166127],{"class":97,"line":1176},[95,166128,2382],{"emptyLinePlaceholder":21},[95,166130,166131,166134,166136,166138,166140],{"class":97,"line":1182},[95,166132,166133],{"class":105},"introduce(",[95,166135,149865],{"class":210},[95,166137,12418],{"class":105},[95,166139,756],{"class":154},[95,166141,112],{"class":105},[10,166143,166144],{},"顺序错了就会得到错误含义：",[86,166146,166148],{"className":30363,"code":166147,"language":30365,"meta":14,"style":14},"introduce(18, \"小明\")\n",[92,166149,166150],{"__ignoreMap":14},[95,166151,166152,166154,166156,166158,166160],{"class":97,"line":98},[95,166153,166133],{"class":105},[95,166155,756],{"class":154},[95,166157,12418],{"class":105},[95,166159,149865],{"class":210},[95,166161,112],{"class":105},[37,166163,166165],{"id":166164},"_73-关键字参数","7.3 关键字参数",[10,166167,166168],{},"关键字参数按参数名传递。",[86,166170,166172],{"className":30363,"code":166171,"language":30365,"meta":14,"style":14},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[92,166173,166174,166194],{"__ignoreMap":14},[95,166175,166176,166178,166180,166182,166184,166186,166188,166190,166192],{"class":97,"line":98},[95,166177,166133],{"class":105},[95,166179,79787],{"class":5199},[95,166181,151],{"class":101},[95,166183,149865],{"class":210},[95,166185,12418],{"class":105},[95,166187,70198],{"class":5199},[95,166189,151],{"class":101},[95,166191,756],{"class":154},[95,166193,112],{"class":105},[95,166195,166196,166198,166200,166202,166204,166206,166208,166210,166212],{"class":97,"line":15},[95,166197,166133],{"class":105},[95,166199,70198],{"class":5199},[95,166201,151],{"class":101},[95,166203,756],{"class":154},[95,166205,12418],{"class":105},[95,166207,79787],{"class":5199},[95,166209,151],{"class":101},[95,166211,149865],{"class":210},[95,166213,112],{"class":105},[10,166215,117911],{},[49,166217,166218,166221],{},[52,166219,166220],{},"顺序不容易错。",[52,166222,166223],{},"调用时可读性更强。",[37,166225,166227],{"id":166226},"_74-默认参数","7.4 默认参数",[10,166229,166230],{},"默认参数给参数设置默认值。",[86,166232,166234],{"className":30363,"code":166233,"language":30365,"meta":14,"style":14},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[92,166235,166236,166252,166282,166286,166290,166300],{"__ignoreMap":14},[95,166237,166238,166240,166242,166245,166247,166250],{"class":97,"line":98},[95,166239,31932],{"class":101},[95,166241,122070],{"class":1945},[95,166243,166244],{"class":105},"(host, port",[95,166246,151],{"class":101},[95,166248,166249],{"class":154},"3306",[95,166251,30771],{"class":105},[95,166253,166254,166256,166258,166260,166263,166265,166267,166269,166271,166273,166276,166278,166280],{"class":97,"line":15},[95,166255,31284],{"class":154},[95,166257,106],{"class":105},[95,166259,158],{"class":101},[95,166261,166262],{"class":210},"\"连接",[95,166264,1002],{"class":154},[95,166266,27380],{"class":105},[95,166268,1052],{"class":154},[95,166270,965],{"class":210},[95,166272,1002],{"class":154},[95,166274,166275],{"class":105},"port",[95,166277,1052],{"class":154},[95,166279,357],{"class":210},[95,166281,112],{"class":105},[95,166283,166284],{"class":97,"line":1161},[95,166285,2382],{"emptyLinePlaceholder":21},[95,166287,166288],{"class":97,"line":1176},[95,166289,2382],{"emptyLinePlaceholder":21},[95,166291,166292,166295,166298],{"class":97,"line":1182},[95,166293,166294],{"class":105},"connect(",[95,166296,166297],{"class":210},"\"localhost\"",[95,166299,112],{"class":105},[95,166301,166302,166304,166306,166308,166311],{"class":97,"line":1196},[95,166303,166294],{"class":105},[95,166305,166297],{"class":210},[95,166307,12418],{"class":105},[95,166309,166310],{"class":154},"6379",[95,166312,112],{"class":105},[10,166314,166315],{},"注意：默认参数必须放在非默认参数后面。",[10,166317,166318],{},"错误：",[86,166320,166322],{"className":30363,"code":166321,"language":30365,"meta":14,"style":14},"def connect(port=3306, host):\n    pass\n",[92,166323,166324,166340],{"__ignoreMap":14},[95,166325,166326,166328,166330,166333,166335,166337],{"class":97,"line":98},[95,166327,31932],{"class":101},[95,166329,122070],{"class":1945},[95,166331,166332],{"class":105},"(port",[95,166334,151],{"class":101},[95,166336,166249],{"class":154},[95,166338,166339],{"class":105},", host):\n",[95,166341,166342],{"class":97,"line":15},[95,166343,149514],{"class":101},[10,166345,166346],{},"正确：",[86,166348,166350],{"className":30363,"code":166349,"language":30365,"meta":14,"style":14},"def connect(host, port=3306):\n    pass\n",[92,166351,166352,166366],{"__ignoreMap":14},[95,166353,166354,166356,166358,166360,166362,166364],{"class":97,"line":98},[95,166355,31932],{"class":101},[95,166357,122070],{"class":1945},[95,166359,166244],{"class":105},[95,166361,151],{"class":101},[95,166363,166249],{"class":154},[95,166365,30771],{"class":105},[95,166367,166368],{"class":97,"line":15},[95,166369,149514],{"class":101},[37,166371,166373],{"id":166372},"_75-默认参数的坑","7.5 默认参数的坑",[10,166375,166376],{},"不要使用可变对象作为默认参数。",[10,166378,157600],{},[86,166380,166382],{"className":30363,"code":166381,"language":30365,"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",[92,166383,166384,166399,166404,166411,166415,166419,166430],{"__ignoreMap":14},[95,166385,166386,166388,166391,166394,166396],{"class":97,"line":98},[95,166387,31932],{"class":101},[95,166389,166390],{"class":1945}," add_item",[95,166392,166393],{"class":105},"(item, items",[95,166395,151],{"class":101},[95,166397,166398],{"class":105},"[]):\n",[95,166400,166401],{"class":97,"line":15},[95,166402,166403],{"class":105},"    items.append(item)\n",[95,166405,166406,166408],{"class":97,"line":1161},[95,166407,4072],{"class":101},[95,166409,166410],{"class":105}," items\n",[95,166412,166413],{"class":97,"line":1176},[95,166414,2382],{"emptyLinePlaceholder":21},[95,166416,166417],{"class":97,"line":1182},[95,166418,2382],{"emptyLinePlaceholder":21},[95,166420,166421,166423,166426,166428],{"class":97,"line":1196},[95,166422,30400],{"class":154},[95,166424,166425],{"class":105},"(add_item(",[95,166427,165302],{"class":210},[95,166429,30482],{"class":105},[95,166431,166432,166434,166436,166439],{"class":97,"line":1202},[95,166433,30400],{"class":154},[95,166435,166425],{"class":105},[95,166437,166438],{"class":210},"\"b\"",[95,166440,30482],{"class":105},[10,166442,166443],{},"第二次调用会复用第一次的列表。",[10,166445,155865],{},[86,166447,166449],{"className":30363,"code":166448,"language":30365,"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",[92,166450,166451,166465,166478,166487,166491],{"__ignoreMap":14},[95,166452,166453,166455,166457,166459,166461,166463],{"class":97,"line":98},[95,166454,31932],{"class":101},[95,166456,166390],{"class":1945},[95,166458,166393],{"class":105},[95,166460,151],{"class":101},[95,166462,95663],{"class":154},[95,166464,30771],{"class":105},[95,166466,166467,166469,166472,166474,166476],{"class":97,"line":15},[95,166468,3083],{"class":101},[95,166470,166471],{"class":105}," items ",[95,166473,38912],{"class":101},[95,166475,38918],{"class":154},[95,166477,3721],{"class":105},[95,166479,166480,166483,166485],{"class":97,"line":1161},[95,166481,166482],{"class":105},"        items ",[95,166484,151],{"class":101},[95,166486,51815],{"class":105},[95,166488,166489],{"class":97,"line":1176},[95,166490,166403],{"class":105},[95,166492,166493,166495],{"class":97,"line":1182},[95,166494,4072],{"class":101},[95,166496,166410],{"class":105},[37,166498,166500],{"id":166499},"_76-不定长参数","7.6 不定长参数",[66,166502,166504],{"id":166503},"_761-args","7.6.1 *args",[10,166506,166507,166510],{},[92,166508,166509],{},"*args"," 接收任意数量的位置参数，得到元组。",[86,166512,166514],{"className":30363,"code":166513,"language":30365,"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",[92,166515,166516,166529,166537,166548,166557,166563,166567,166571,166590],{"__ignoreMap":14},[95,166517,166518,166520,166522,166524,166526],{"class":97,"line":98},[95,166519,31932],{"class":101},[95,166521,5192],{"class":1945},[95,166523,106],{"class":105},[95,166525,561],{"class":101},[95,166527,166528],{"class":105},"args):\n",[95,166530,166531,166533,166535],{"class":97,"line":15},[95,166532,159284],{"class":105},[95,166534,151],{"class":101},[95,166536,47318],{"class":154},[95,166538,166539,166541,166543,166545],{"class":97,"line":1161},[95,166540,3183],{"class":101},[95,166542,156157],{"class":105},[95,166544,26028],{"class":101},[95,166546,166547],{"class":105}," args:\n",[95,166549,166550,166552,166554],{"class":97,"line":1176},[95,166551,159959],{"class":105},[95,166553,9460],{"class":101},[95,166555,166556],{"class":105}," num\n",[95,166558,166559,166561],{"class":97,"line":1182},[95,166560,4072],{"class":101},[95,166562,162264],{"class":105},[95,166564,166565],{"class":97,"line":1196},[95,166566,2382],{"emptyLinePlaceholder":21},[95,166568,166569],{"class":97,"line":1202},[95,166570,2382],{"emptyLinePlaceholder":21},[95,166572,166573,166575,166578,166580,166582,166584,166586,166588],{"class":97,"line":1293},[95,166574,30400],{"class":154},[95,166576,166577],{"class":105},"(add(",[95,166579,323],{"class":154},[95,166581,12418],{"class":105},[95,166583,183],{"class":154},[95,166585,12418],{"class":105},[95,166587,177],{"class":154},[95,166589,30482],{"class":105},[95,166591,166592,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612,166614],{"class":97,"line":1299},[95,166593,30400],{"class":154},[95,166595,166577],{"class":105},[95,166597,323],{"class":154},[95,166599,12418],{"class":105},[95,166601,183],{"class":154},[95,166603,12418],{"class":105},[95,166605,177],{"class":154},[95,166607,12418],{"class":105},[95,166609,399],{"class":154},[95,166611,12418],{"class":105},[95,166613,425],{"class":154},[95,166615,30482],{"class":105},[66,166617,166619],{"id":166618},"_762-kwargs","7.6.2 **kwargs",[10,166621,166622,166625],{},[92,166623,166624],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[86,166627,166629],{"className":30363,"code":166628,"language":30365,"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",[92,166630,166631,166644,166655,166661,166665,166669],{"__ignoreMap":14},[95,166632,166633,166635,166637,166639,166641],{"class":97,"line":98},[95,166634,31932],{"class":101},[95,166636,161922],{"class":1945},[95,166638,106],{"class":105},[95,166640,10644],{"class":101},[95,166642,166643],{"class":105},"kwargs):\n",[95,166645,166646,166648,166650,166652],{"class":97,"line":15},[95,166647,3183],{"class":101},[95,166649,164762],{"class":105},[95,166651,26028],{"class":101},[95,166653,166654],{"class":105}," kwargs.items():\n",[95,166656,166657,166659],{"class":97,"line":1161},[95,166658,32436],{"class":154},[95,166660,164774],{"class":105},[95,166662,166663],{"class":97,"line":1176},[95,166664,2382],{"emptyLinePlaceholder":21},[95,166666,166667],{"class":97,"line":1182},[95,166668,2382],{"emptyLinePlaceholder":21},[95,166670,166671,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693,166695],{"class":97,"line":1196},[95,166672,161987],{"class":105},[95,166674,79787],{"class":5199},[95,166676,151],{"class":101},[95,166678,149865],{"class":210},[95,166680,12418],{"class":105},[95,166682,70198],{"class":5199},[95,166684,151],{"class":101},[95,166686,756],{"class":154},[95,166688,12418],{"class":105},[95,166690,70249],{"class":5199},[95,166692,151],{"class":101},[95,166694,69246],{"class":210},[95,166696,112],{"class":105},[37,166698,166700],{"id":166699},"_77-参数解包","7.7 参数解包",[10,166702,166703],{},"列表或元组解包为位置参数：",[86,166705,166707],{"className":30363,"code":166706,"language":30365,"meta":14,"style":14},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[92,166708,166709,166718,166733,166737,166741,166761],{"__ignoreMap":14},[95,166710,166711,166713,166715],{"class":97,"line":98},[95,166712,31932],{"class":101},[95,166714,5192],{"class":1945},[95,166716,166717],{"class":105},"(a, b, c):\n",[95,166719,166720,166722,166724,166726,166728,166730],{"class":97,"line":15},[95,166721,4072],{"class":101},[95,166723,10852],{"class":105},[95,166725,587],{"class":101},[95,166727,10865],{"class":105},[95,166729,587],{"class":101},[95,166731,166732],{"class":105}," c\n",[95,166734,166735],{"class":97,"line":1161},[95,166736,2382],{"emptyLinePlaceholder":21},[95,166738,166739],{"class":97,"line":1176},[95,166740,2382],{"emptyLinePlaceholder":21},[95,166742,166743,166745,166747,166749,166751,166753,166755,166757,166759],{"class":97,"line":1182},[95,166744,164077],{"class":105},[95,166746,151],{"class":101},[95,166748,52203],{"class":105},[95,166750,323],{"class":154},[95,166752,12418],{"class":105},[95,166754,183],{"class":154},[95,166756,12418],{"class":105},[95,166758,177],{"class":154},[95,166760,33231],{"class":105},[95,166762,166763,166765,166767,166769],{"class":97,"line":1196},[95,166764,30400],{"class":154},[95,166766,166577],{"class":105},[95,166768,561],{"class":101},[95,166770,166771],{"class":105},"nums))\n",[10,166773,166774],{},"字典解包为关键字参数：",[86,166776,166778],{"className":30363,"code":166777,"language":30365,"meta":14,"style":14},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[92,166779,166780,166788,166814,166818,166822,166846],{"__ignoreMap":14},[95,166781,166782,166784,166786],{"class":97,"line":98},[95,166783,31932],{"class":101},[95,166785,149349],{"class":1945},[95,166787,149352],{"class":105},[95,166789,166790,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810,166812],{"class":97,"line":15},[95,166791,31284],{"class":154},[95,166793,106],{"class":105},[95,166795,158],{"class":101},[95,166797,357],{"class":210},[95,166799,1002],{"class":154},[95,166801,79787],{"class":105},[95,166803,1052],{"class":154},[95,166805,4430],{"class":154},[95,166807,70198],{"class":105},[95,166809,1052],{"class":154},[95,166811,357],{"class":210},[95,166813,112],{"class":105},[95,166815,166816],{"class":97,"line":1161},[95,166817,2382],{"emptyLinePlaceholder":21},[95,166819,166820],{"class":97,"line":1176},[95,166821,2382],{"emptyLinePlaceholder":21},[95,166823,166824,166826,166828,166830,166832,166834,166836,166838,166840,166842,166844],{"class":97,"line":1182},[95,166825,116291],{"class":105},[95,166827,151],{"class":101},[95,166829,4430],{"class":105},[95,166831,62656],{"class":210},[95,166833,51414],{"class":105},[95,166835,149865],{"class":210},[95,166837,12418],{"class":105},[95,166839,69101],{"class":210},[95,166841,51414],{"class":105},[95,166843,756],{"class":154},[95,166845,1547],{"class":105},[95,166847,166848,166850,166852],{"class":97,"line":1196},[95,166849,166133],{"class":105},[95,166851,10644],{"class":101},[95,166853,166854],{"class":105},"info)\n",[37,166856,166858],{"id":166857},"_78-匿名函数lambda","7.8 匿名函数lambda",[10,166860,166861,166864],{},[92,166862,166863],{},"lambda"," 用于定义简单匿名函数。",[86,166866,166868],{"className":30363,"code":166867,"language":30365,"meta":14,"style":14},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[92,166869,166870,166887],{"__ignoreMap":14},[95,166871,166872,166875,166877,166880,166883,166885],{"class":97,"line":98},[95,166873,166874],{"class":105},"add ",[95,166876,151],{"class":101},[95,166878,166879],{"class":101}," lambda",[95,166881,166882],{"class":105}," a, b: a ",[95,166884,587],{"class":101},[95,166886,151081],{"class":105},[95,166888,166889,166891,166893,166895,166897,166899],{"class":97,"line":15},[95,166890,30400],{"class":154},[95,166892,166577],{"class":105},[95,166894,323],{"class":154},[95,166896,12418],{"class":105},[95,166898,183],{"class":154},[95,166900,30482],{"class":105},[10,166902,166903],{},"常和排序、过滤等函数一起使用。",[10,166905,166906],{},"按分数排序：",[86,166908,166910],{"className":30363,"code":166909,"language":30365,"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",[92,166911,166912,166920,166940,166960,166980,166984,166988,167011],{"__ignoreMap":14},[95,166913,166914,166916,166918],{"class":97,"line":98},[95,166915,159693],{"class":105},[95,166917,151],{"class":101},[95,166919,55424],{"class":105},[95,166921,166922,166924,166926,166928,166930,166932,166934,166936,166938],{"class":97,"line":15},[95,166923,148362],{"class":105},[95,166925,62656],{"class":210},[95,166927,51414],{"class":105},[95,166929,149865],{"class":210},[95,166931,12418],{"class":105},[95,166933,151449],{"class":210},[95,166935,51414],{"class":105},[95,166937,1095],{"class":154},[95,166939,4912],{"class":105},[95,166941,166942,166944,166946,166948,166950,166952,166954,166956,166958],{"class":97,"line":1161},[95,166943,148362],{"class":105},[95,166945,62656],{"class":210},[95,166947,51414],{"class":105},[95,166949,150913],{"class":210},[95,166951,12418],{"class":105},[95,166953,151449],{"class":210},[95,166955,51414],{"class":105},[95,166957,917],{"class":154},[95,166959,4912],{"class":105},[95,166961,166962,166964,166966,166968,166970,166972,166974,166976,166978],{"class":97,"line":1176},[95,166963,148362],{"class":105},[95,166965,62656],{"class":210},[95,166967,51414],{"class":105},[95,166969,159708],{"class":210},[95,166971,12418],{"class":105},[95,166973,151449],{"class":210},[95,166975,51414],{"class":105},[95,166977,512],{"class":154},[95,166979,4912],{"class":105},[95,166981,166982],{"class":97,"line":1182},[95,166983,33231],{"class":105},[95,166985,166986],{"class":97,"line":1196},[95,166987,2382],{"emptyLinePlaceholder":21},[95,166989,166990,166993,166995,166997,166999,167001,167003,167005,167007,167009],{"class":97,"line":1202},[95,166991,166992],{"class":105},"students.sort(",[95,166994,153923],{"class":5199},[95,166996,153926],{"class":101},[95,166998,153929],{"class":105},[95,167000,151449],{"class":210},[95,167002,112179],{"class":105},[95,167004,163505],{"class":5199},[95,167006,151],{"class":101},[95,167008,31461],{"class":154},[95,167010,112],{"class":105},[95,167012,167013,167015],{"class":97,"line":1293},[95,167014,30400],{"class":154},[95,167016,164972],{"class":105},[10,167018,167019,167020,167022],{},"如果逻辑复杂，不要硬写 ",[92,167021,166863],{},"，定义普通函数更清晰。",[37,167024,167026],{"id":167025},"_79-函数作为参数","7.9 函数作为参数",[10,167028,167029],{},"函数可以作为参数传给另一个函数。",[86,167031,167033],{"className":30363,"code":167032,"language":30365,"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",[92,167034,167035,167043,167053,167057,167061,167071,167078,167082,167086],{"__ignoreMap":14},[95,167036,167037,167039,167041],{"class":97,"line":98},[95,167038,31932],{"class":101},[95,167040,5192],{"class":1945},[95,167042,151070],{"class":105},[95,167044,167045,167047,167049,167051],{"class":97,"line":15},[95,167046,4072],{"class":101},[95,167048,10852],{"class":105},[95,167050,587],{"class":101},[95,167052,151081],{"class":105},[95,167054,167055],{"class":97,"line":1161},[95,167056,2382],{"emptyLinePlaceholder":21},[95,167058,167059],{"class":97,"line":1176},[95,167060,2382],{"emptyLinePlaceholder":21},[95,167062,167063,167065,167068],{"class":97,"line":1182},[95,167064,31932],{"class":101},[95,167066,167067],{"class":1945}," calculate",[95,167069,167070],{"class":105},"(a, b, func):\n",[95,167072,167073,167075],{"class":97,"line":1196},[95,167074,4072],{"class":101},[95,167076,167077],{"class":105}," func(a, b)\n",[95,167079,167080],{"class":97,"line":1202},[95,167081,2382],{"emptyLinePlaceholder":21},[95,167083,167084],{"class":97,"line":1293},[95,167085,2382],{"emptyLinePlaceholder":21},[95,167087,167088,167090,167093,167095,167097,167099],{"class":97,"line":1299},[95,167089,30400],{"class":154},[95,167091,167092],{"class":105},"(calculate(",[95,167094,552],{"class":154},[95,167096,12418],{"class":105},[95,167098,806],{"class":154},[95,167100,167101],{"class":105},", add))\n",[10,167103,167104],{},"这种思想在排序、回调、框架中经常出现。",[37,167106,167108],{"id":167107},"_710-mapfiltersorted","7.10 map、filter、sorted",[66,167110,167112],{"id":167111},"_7101-map","7.10.1 map",[10,167114,167115,167117],{},[92,167116,74021],{}," 对每个元素执行函数。",[86,167119,167121],{"className":30363,"code":167120,"language":30365,"meta":14,"style":14},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[92,167122,167123,167147,167170],{"__ignoreMap":14},[95,167124,167125,167127,167129,167131,167133,167135,167137,167139,167141,167143,167145],{"class":97,"line":98},[95,167126,164077],{"class":105},[95,167128,151],{"class":101},[95,167130,52203],{"class":105},[95,167132,323],{"class":154},[95,167134,12418],{"class":105},[95,167136,183],{"class":154},[95,167138,12418],{"class":105},[95,167140,177],{"class":154},[95,167142,12418],{"class":105},[95,167144,399],{"class":154},[95,167146,33231],{"class":105},[95,167148,167149,167151,167153,167156,167158,167160,167163,167165,167167],{"class":97,"line":15},[95,167150,161283],{"class":105},[95,167152,151],{"class":101},[95,167154,167155],{"class":154}," map",[95,167157,106],{"class":105},[95,167159,166863],{"class":101},[95,167161,167162],{"class":105}," x: x ",[95,167164,561],{"class":101},[95,167166,14738],{"class":154},[95,167168,167169],{"class":105},", nums)\n",[95,167171,167172,167174,167176,167178],{"class":97,"line":1161},[95,167173,30400],{"class":154},[95,167175,106],{"class":105},[95,167177,154047],{"class":154},[95,167179,166045],{"class":105},[66,167181,167183],{"id":167182},"_7102-filter","7.10.2 filter",[10,167185,167186,167188],{},[92,167187,80028],{}," 保留满足条件的元素。",[86,167190,167192],{"className":30363,"code":167191,"language":30365,"meta":14,"style":14},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[92,167193,167194,167222,167247],{"__ignoreMap":14},[95,167195,167196,167198,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220],{"class":97,"line":98},[95,167197,164077],{"class":105},[95,167199,151],{"class":101},[95,167201,52203],{"class":105},[95,167203,323],{"class":154},[95,167205,12418],{"class":105},[95,167207,183],{"class":154},[95,167209,12418],{"class":105},[95,167211,177],{"class":154},[95,167213,12418],{"class":105},[95,167215,399],{"class":154},[95,167217,12418],{"class":105},[95,167219,425],{"class":154},[95,167221,33231],{"class":105},[95,167223,167224,167226,167228,167231,167233,167235,167237,167239,167241,167243,167245],{"class":97,"line":15},[95,167225,161283],{"class":105},[95,167227,151],{"class":101},[95,167229,167230],{"class":154}," filter",[95,167232,106],{"class":105},[95,167234,166863],{"class":101},[95,167236,167162],{"class":105},[95,167238,434],{"class":101},[95,167240,14738],{"class":154},[95,167242,101536],{"class":101},[95,167244,4075],{"class":154},[95,167246,167169],{"class":105},[95,167248,167249,167251,167253,167255],{"class":97,"line":1161},[95,167250,30400],{"class":154},[95,167252,106],{"class":105},[95,167254,154047],{"class":154},[95,167256,166045],{"class":105},[66,167258,167260],{"id":167259},"_7103-sorted","7.10.3 sorted",[10,167262,167263,167265],{},[92,167264,165213],{}," 返回排序后的新列表。",[86,167267,167269],{"className":30363,"code":167268,"language":30365,"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",[92,167270,167271,167279,167299,167319,167339,167343,167347,167376],{"__ignoreMap":14},[95,167272,167273,167275,167277],{"class":97,"line":98},[95,167274,159693],{"class":105},[95,167276,151],{"class":101},[95,167278,55424],{"class":105},[95,167280,167281,167283,167285,167287,167289,167291,167293,167295,167297],{"class":97,"line":15},[95,167282,148362],{"class":105},[95,167284,62656],{"class":210},[95,167286,51414],{"class":105},[95,167288,149865],{"class":210},[95,167290,12418],{"class":105},[95,167292,151449],{"class":210},[95,167294,51414],{"class":105},[95,167296,1095],{"class":154},[95,167298,4912],{"class":105},[95,167300,167301,167303,167305,167307,167309,167311,167313,167315,167317],{"class":97,"line":1161},[95,167302,148362],{"class":105},[95,167304,62656],{"class":210},[95,167306,51414],{"class":105},[95,167308,150913],{"class":210},[95,167310,12418],{"class":105},[95,167312,151449],{"class":210},[95,167314,51414],{"class":105},[95,167316,917],{"class":154},[95,167318,4912],{"class":105},[95,167320,167321,167323,167325,167327,167329,167331,167333,167335,167337],{"class":97,"line":1176},[95,167322,148362],{"class":105},[95,167324,62656],{"class":210},[95,167326,51414],{"class":105},[95,167328,159708],{"class":210},[95,167330,12418],{"class":105},[95,167332,151449],{"class":210},[95,167334,51414],{"class":105},[95,167336,512],{"class":154},[95,167338,4912],{"class":105},[95,167340,167341],{"class":97,"line":1182},[95,167342,33231],{"class":105},[95,167344,167345],{"class":97,"line":1196},[95,167346,2382],{"emptyLinePlaceholder":21},[95,167348,167349,167351,167353,167355,167358,167360,167362,167364,167366,167368,167370,167372,167374],{"class":97,"line":1202},[95,167350,161283],{"class":105},[95,167352,151],{"class":101},[95,167354,163581],{"class":154},[95,167356,167357],{"class":105},"(students, ",[95,167359,153923],{"class":5199},[95,167361,153926],{"class":101},[95,167363,153929],{"class":105},[95,167365,151449],{"class":210},[95,167367,112179],{"class":105},[95,167369,163505],{"class":5199},[95,167371,151],{"class":101},[95,167373,31461],{"class":154},[95,167375,112],{"class":105},[95,167377,167378,167380],{"class":97,"line":1293},[95,167379,30400],{"class":154},[95,167381,76562],{"class":105},[37,167383,167385],{"id":167384},"_711-闭包入门","7.11 闭包入门",[10,167387,167388],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[86,167390,167392],{"className":30363,"code":167391,"language":30365,"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",[92,167393,167394,167404,167414,167425,167429,167436,167440,167444,167458],{"__ignoreMap":14},[95,167395,167396,167398,167401],{"class":97,"line":98},[95,167397,31932],{"class":101},[95,167399,167400],{"class":1945}," outer",[95,167402,167403],{"class":105},"(base):\n",[95,167405,167406,167408,167411],{"class":97,"line":15},[95,167407,30786],{"class":101},[95,167409,167410],{"class":1945}," inner",[95,167412,167413],{"class":105},"(num):\n",[95,167415,167416,167418,167421,167423],{"class":97,"line":1161},[95,167417,14735],{"class":101},[95,167419,167420],{"class":105}," base ",[95,167422,587],{"class":101},[95,167424,166556],{"class":105},[95,167426,167427],{"class":97,"line":1176},[95,167428,2382],{"emptyLinePlaceholder":21},[95,167430,167431,167433],{"class":97,"line":1182},[95,167432,4072],{"class":101},[95,167434,167435],{"class":105}," inner\n",[95,167437,167438],{"class":97,"line":1196},[95,167439,2382],{"emptyLinePlaceholder":21},[95,167441,167442],{"class":97,"line":1202},[95,167443,2382],{"emptyLinePlaceholder":21},[95,167445,167446,167449,167451,167454,167456],{"class":97,"line":1293},[95,167447,167448],{"class":105},"add_10 ",[95,167450,151],{"class":101},[95,167452,167453],{"class":105}," outer(",[95,167455,552],{"class":154},[95,167457,112],{"class":105},[95,167459,167460,167462,167465,167467],{"class":97,"line":1299},[95,167461,30400],{"class":154},[95,167463,167464],{"class":105},"(add_10(",[95,167466,425],{"class":154},[95,167468,30482],{"class":105},[10,167470,167471],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[37,167473,167475],{"id":167474},"_712-装饰器入门","7.12 装饰器入门",[10,167477,167478],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[86,167480,167482],{"className":30363,"code":167481,"language":30365,"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",[92,167483,167484,167493,167502,167513,167518,167529,167533,167540,167544,167548,167553,167561,167571,167575,167579],{"__ignoreMap":14},[95,167485,167486,167488,167490],{"class":97,"line":98},[95,167487,31932],{"class":101},[95,167489,87168],{"class":1945},[95,167491,167492],{"class":105},"(func):\n",[95,167494,167495,167497,167500],{"class":97,"line":15},[95,167496,30786],{"class":101},[95,167498,167499],{"class":1945}," wrapper",[95,167501,31938],{"class":105},[95,167503,167504,167506,167508,167511],{"class":97,"line":1161},[95,167505,32436],{"class":154},[95,167507,106],{"class":105},[95,167509,167510],{"class":210},"\"函数开始执行\"",[95,167512,112],{"class":105},[95,167514,167515],{"class":97,"line":1176},[95,167516,167517],{"class":105},"        func()\n",[95,167519,167520,167522,167524,167527],{"class":97,"line":1182},[95,167521,32436],{"class":154},[95,167523,106],{"class":105},[95,167525,167526],{"class":210},"\"函数执行结束\"",[95,167528,112],{"class":105},[95,167530,167531],{"class":97,"line":1196},[95,167532,2382],{"emptyLinePlaceholder":21},[95,167534,167535,167537],{"class":97,"line":1202},[95,167536,4072],{"class":101},[95,167538,167539],{"class":105}," wrapper\n",[95,167541,167542],{"class":97,"line":1293},[95,167543,2382],{"emptyLinePlaceholder":21},[95,167545,167546],{"class":97,"line":1299},[95,167547,2382],{"emptyLinePlaceholder":21},[95,167549,167550],{"class":97,"line":1311},[95,167551,167552],{"class":1945},"@log\n",[95,167554,167555,167557,167559],{"class":97,"line":1594},[95,167556,31932],{"class":101},[95,167558,160973],{"class":1945},[95,167560,31938],{"class":105},[95,167562,167563,167565,167567,167569],{"class":97,"line":1599},[95,167564,31284],{"class":154},[95,167566,106],{"class":105},[95,167568,5827],{"class":210},[95,167570,112],{"class":105},[95,167572,167573],{"class":97,"line":1605},[95,167574,2382],{"emptyLinePlaceholder":21},[95,167576,167577],{"class":97,"line":1610},[95,167578,2382],{"emptyLinePlaceholder":21},[95,167580,167581],{"class":97,"line":1624},[95,167582,161008],{"class":105},[10,167584,158251],{},[86,167586,167588],{"className":30363,"code":167587,"language":30365,"meta":14,"style":14},"say_hello = log(say_hello)\n",[92,167589,167590],{"__ignoreMap":14},[95,167591,167592,167595,167597],{"class":97,"line":98},[95,167593,167594],{"class":105},"say_hello ",[95,167596,151],{"class":101},[95,167598,167599],{"class":105}," log(say_hello)\n",[10,167601,167602],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[37,167604,167606],{"id":167605},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[86,167608,167610],{"className":30363,"code":167609,"language":30365,"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",[92,167611,167612,167620,167637,167647,167666,167676,167683,167687,167693,167697,167701,167705,167713,167723,167727,167731],{"__ignoreMap":14},[95,167613,167614,167616,167618],{"class":97,"line":98},[95,167615,31932],{"class":101},[95,167617,87168],{"class":1945},[95,167619,167492],{"class":105},[95,167621,167622,167624,167626,167628,167630,167633,167635],{"class":97,"line":15},[95,167623,30786],{"class":101},[95,167625,167499],{"class":1945},[95,167627,106],{"class":105},[95,167629,561],{"class":101},[95,167631,167632],{"class":105},"args, ",[95,167634,10644],{"class":101},[95,167636,166643],{"class":105},[95,167638,167639,167641,167643,167645],{"class":97,"line":1161},[95,167640,32436],{"class":154},[95,167642,106],{"class":105},[95,167644,167510],{"class":210},[95,167646,112],{"class":105},[95,167648,167649,167652,167654,167657,167659,167661,167663],{"class":97,"line":1176},[95,167650,167651],{"class":105},"        result ",[95,167653,151],{"class":101},[95,167655,167656],{"class":105}," func(",[95,167658,561],{"class":101},[95,167660,167632],{"class":105},[95,167662,10644],{"class":101},[95,167664,167665],{"class":105},"kwargs)\n",[95,167667,167668,167670,167672,167674],{"class":97,"line":1182},[95,167669,32436],{"class":154},[95,167671,106],{"class":105},[95,167673,167526],{"class":210},[95,167675,112],{"class":105},[95,167677,167678,167680],{"class":97,"line":1196},[95,167679,14735],{"class":101},[95,167681,167682],{"class":105}," result\n",[95,167684,167685],{"class":97,"line":1202},[95,167686,2382],{"emptyLinePlaceholder":21},[95,167688,167689,167691],{"class":97,"line":1293},[95,167690,4072],{"class":101},[95,167692,167539],{"class":105},[95,167694,167695],{"class":97,"line":1299},[95,167696,2382],{"emptyLinePlaceholder":21},[95,167698,167699],{"class":97,"line":1311},[95,167700,2382],{"emptyLinePlaceholder":21},[95,167702,167703],{"class":97,"line":1594},[95,167704,167552],{"class":1945},[95,167706,167707,167709,167711],{"class":97,"line":1599},[95,167708,31932],{"class":101},[95,167710,5192],{"class":1945},[95,167712,151070],{"class":105},[95,167714,167715,167717,167719,167721],{"class":97,"line":1605},[95,167716,4072],{"class":101},[95,167718,10852],{"class":105},[95,167720,587],{"class":101},[95,167722,151081],{"class":105},[95,167724,167725],{"class":97,"line":1610},[95,167726,2382],{"emptyLinePlaceholder":21},[95,167728,167729],{"class":97,"line":1624},[95,167730,2382],{"emptyLinePlaceholder":21},[95,167732,167733,167735,167737,167739,167741,167743],{"class":97,"line":1629},[95,167734,30400],{"class":154},[95,167736,166577],{"class":105},[95,167738,552],{"class":154},[95,167740,12418],{"class":105},[95,167742,806],{"class":154},[95,167744,30482],{"class":105},[10,167746,167747,167748,100995,167750,167752],{},"这个写法使用 ",[92,167749,166509],{},[92,167751,166624],{}," 接收原函数的所有参数。",[37,167754,167756],{"id":167755},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[10,167758,123269],{},[49,167760,167761,167764,167767],{},[52,167762,167763],{},"给定一组学生数据。",[52,167765,167766],{},"封装函数，根据传入规则筛选学生。",[52,167768,167769],{},"筛选及格、优秀、未成年学生。",[10,167771,10018],{},[86,167773,167775],{"className":30363,"code":167774,"language":30365,"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",[92,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},[95,167778,167779,167781,167783],{"class":97,"line":98},[95,167780,159693],{"class":105},[95,167782,151],{"class":101},[95,167784,55424],{"class":105},[95,167786,167787,167789,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809,167811],{"class":97,"line":15},[95,167788,148362],{"class":105},[95,167790,62656],{"class":210},[95,167792,51414],{"class":105},[95,167794,149865],{"class":210},[95,167796,12418],{"class":105},[95,167798,69101],{"class":210},[95,167800,51414],{"class":105},[95,167802,756],{"class":154},[95,167804,12418],{"class":105},[95,167806,151449],{"class":210},[95,167808,51414],{"class":105},[95,167810,1095],{"class":154},[95,167812,4912],{"class":105},[95,167814,167815,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837,167839],{"class":97,"line":1161},[95,167816,148362],{"class":105},[95,167818,62656],{"class":210},[95,167820,51414],{"class":105},[95,167822,150913],{"class":210},[95,167824,12418],{"class":105},[95,167826,69101],{"class":210},[95,167828,51414],{"class":105},[95,167830,731],{"class":154},[95,167832,12418],{"class":105},[95,167834,151449],{"class":210},[95,167836,51414],{"class":105},[95,167838,917],{"class":154},[95,167840,4912],{"class":105},[95,167842,167843,167845,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865,167867],{"class":97,"line":1176},[95,167844,148362],{"class":105},[95,167846,62656],{"class":210},[95,167848,51414],{"class":105},[95,167850,159708],{"class":210},[95,167852,12418],{"class":105},[95,167854,69101],{"class":210},[95,167856,51414],{"class":105},[95,167858,781],{"class":154},[95,167860,12418],{"class":105},[95,167862,151449],{"class":210},[95,167864,51414],{"class":105},[95,167866,988],{"class":154},[95,167868,4912],{"class":105},[95,167870,167871],{"class":97,"line":1182},[95,167872,33231],{"class":105},[95,167874,167875],{"class":97,"line":1196},[95,167876,2382],{"emptyLinePlaceholder":21},[95,167878,167879],{"class":97,"line":1202},[95,167880,2382],{"emptyLinePlaceholder":21},[95,167882,167883,167885,167888],{"class":97,"line":1293},[95,167884,31932],{"class":101},[95,167886,167887],{"class":1945}," filter_students",[95,167889,167890],{"class":105},"(students, condition):\n",[95,167892,167893,167895,167897],{"class":97,"line":1299},[95,167894,161200],{"class":105},[95,167896,151],{"class":101},[95,167898,51815],{"class":105},[95,167900,167901,167903,167905,167907],{"class":97,"line":1311},[95,167902,3183],{"class":101},[95,167904,152114],{"class":105},[95,167906,26028],{"class":101},[95,167908,152119],{"class":105},[95,167910,167911,167913],{"class":97,"line":1594},[95,167912,2479],{"class":101},[95,167914,167915],{"class":105}," condition(student):\n",[95,167917,167918],{"class":97,"line":1599},[95,167919,167920],{"class":105},"            result.append(student)\n",[95,167922,167923,167925],{"class":97,"line":1605},[95,167924,4072],{"class":101},[95,167926,167682],{"class":105},[95,167928,167929],{"class":97,"line":1610},[95,167930,2382],{"emptyLinePlaceholder":21},[95,167932,167933],{"class":97,"line":1624},[95,167934,2382],{"emptyLinePlaceholder":21},[95,167936,167937,167939,167941,167944,167946,167949,167951,167953,167955,167957],{"class":97,"line":1629},[95,167938,165678],{"class":105},[95,167940,151],{"class":101},[95,167942,167943],{"class":105}," filter_students(students, ",[95,167945,166863],{"class":101},[95,167947,167948],{"class":105}," s: s[",[95,167950,151449],{"class":210},[95,167952,4425],{"class":105},[95,167954,1692],{"class":101},[95,167956,157814],{"class":154},[95,167958,112],{"class":105},[95,167960,167961,167964,167966,167968,167970,167972,167974,167976,167978,167980],{"class":97,"line":1635},[95,167962,167963],{"class":105},"excellent ",[95,167965,151],{"class":101},[95,167967,167943],{"class":105},[95,167969,166863],{"class":101},[95,167971,167948],{"class":105},[95,167973,151449],{"class":210},[95,167975,4425],{"class":105},[95,167977,1692],{"class":101},[95,167979,157765],{"class":154},[95,167981,112],{"class":105},[95,167983,167984,167987,167989,167991,167993,167995,167997,167999,168001,168003],{"class":97,"line":1656},[95,167985,167986],{"class":105},"under_age ",[95,167988,151],{"class":101},[95,167990,167943],{"class":105},[95,167992,166863],{"class":101},[95,167994,167948],{"class":105},[95,167996,69101],{"class":210},[95,167998,4425],{"class":105},[95,168000,1016],{"class":101},[95,168002,156262],{"class":154},[95,168004,112],{"class":105},[95,168006,168007],{"class":97,"line":1661},[95,168008,2382],{"emptyLinePlaceholder":21},[95,168010,168011,168013],{"class":97,"line":1675},[95,168012,30400],{"class":154},[95,168014,168015],{"class":105},"(passed)\n",[95,168017,168018,168020],{"class":97,"line":1680},[95,168019,30400],{"class":154},[95,168021,168022],{"class":105},"(excellent)\n",[95,168024,168025,168027],{"class":97,"line":1709},[95,168026,30400],{"class":154},[95,168028,168029],{"class":105},"(under_age)\n",[37,168031,168033],{"id":168032},"_715-易错点","7.15 易错点",[49,168035,168036,168039,168047,168052,168063],{},[52,168037,168038],{},"默认参数不要写可变对象。",[52,168040,168041,168043,168044,168046],{},[92,168042,166509],{}," 是元组，",[92,168045,166624],{}," 是字典。",[52,168048,168049,168051],{},[92,168050,166863],{}," 只适合简单表达式。",[52,168053,168054,100995,168056,168058,168059,168062],{},[92,168055,74021],{},[92,168057,80028],{}," 的结果是迭代器，常用 ",[92,168060,168061],{},"list()"," 转换查看。",[52,168064,168065],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[37,168067,168069],{"id":168068},"_716-本章练习","7.16 本章练习",[49,168071,168072,168079,168085,168090,168095],{},[52,168073,168074,168075,168078],{},"写函数 ",[92,168076,168077],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[52,168080,168074,168081,168084],{},[92,168082,168083],{},"print_user(**kwargs)","，输出用户所有字段。",[52,168086,104343,168087,168089],{},[92,168088,166863],{}," 对学生列表按年龄排序。",[52,168091,104343,168092,168094],{},[92,168093,80028],{}," 找出成绩不及格的学生。",[52,168096,168097],{},"写一个装饰器，统计函数执行前后的提示信息。",[5109,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":1161,"text":166504},{"id":166618,"depth":1161,"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":1161,"text":167112},{"id":167182,"depth":1161,"text":167183},{"id":167259,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168132,"title":168133,"body":168134,"description":23360,"extension":18,"meta":170653,"navigation":21,"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],[33,168137,168133],{"id":168138},"_8-文件操作",[37,168140,168142],{"id":168141},"_81-文件操作的意义","8.1 文件操作的意义",[10,168144,168145],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[10,168147,168148],{},"常见文件类型：",[49,168150,168151,168157,168163,168169,168175],{},[52,168152,168153,168156],{},[92,168154,168155],{},".txt","：普通文本。",[52,168158,168159,168162],{},[92,168160,168161],{},".csv","：表格文本。",[52,168164,168165,168168],{},[92,168166,168167],{},".json","：结构化数据。",[52,168170,168171,168174],{},[92,168172,168173],{},".log","：日志文件。",[52,168176,168177,168179],{},[92,168178,146329],{},"：Python 源代码。",[37,168181,168183],{"id":168182},"_82-路径","8.2 路径",[66,168185,168187],{"id":168186},"_821-相对路径","8.2.1 相对路径",[10,168189,168190],{},"相对当前运行目录：",[86,168192,168194],{"className":30363,"code":168193,"language":30365,"meta":14,"style":14},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[92,168195,168196],{"__ignoreMap":14},[95,168197,168198,168200,168202,168204,168206,168208,168210,168212,168214,168216],{"class":97,"line":98},[95,168199,86892],{"class":154},[95,168201,106],{"class":105},[95,168203,146773],{"class":210},[95,168205,12418],{"class":105},[95,168207,146778],{"class":210},[95,168209,12418],{"class":105},[95,168211,146783],{"class":5199},[95,168213,151],{"class":101},[95,168215,146788],{"class":210},[95,168217,112],{"class":105},[66,168219,168221],{"id":168220},"_822-绝对路径","8.2.2 绝对路径",[10,168223,168224],{},"从根目录或盘符开始：",[86,168226,168228],{"className":30363,"code":168227,"language":30365,"meta":14,"style":14},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[92,168229,168230,168253],{"__ignoreMap":14},[95,168231,168232,168234,168236,168239,168241,168243,168245,168247,168249,168251],{"class":97,"line":98},[95,168233,86892],{"class":154},[95,168235,106],{"class":105},[95,168237,168238],{"class":210},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[95,168240,12418],{"class":105},[95,168242,146778],{"class":210},[95,168244,12418],{"class":105},[95,168246,146783],{"class":5199},[95,168248,151],{"class":101},[95,168250,146788],{"class":210},[95,168252,112],{"class":105},[95,168254,168255,168257,168259,168262,168264,168266,168268,168270,168272,168274],{"class":97,"line":15},[95,168256,86892],{"class":154},[95,168258,106],{"class":105},[95,168260,168261],{"class":210},"\"D:\u002Fdata\u002Fdata.txt\"",[95,168263,12418],{"class":105},[95,168265,146778],{"class":210},[95,168267,12418],{"class":105},[95,168269,146783],{"class":5199},[95,168271,151],{"class":101},[95,168273,146788],{"class":210},[95,168275,112],{"class":105},[10,168277,168278],{},"Windows 路径建议写成：",[86,168280,168282],{"className":30363,"code":168281,"language":30365,"meta":14,"style":14},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[92,168283,168284],{"__ignoreMap":14},[95,168285,168286,168289,168291],{"class":97,"line":98},[95,168287,168288],{"class":105},"path ",[95,168290,151],{"class":101},[95,168292,168293],{"class":210}," \"D:\u002Fdata\u002Fdata.txt\"\n",[10,168295,168296],{},"或原始字符串：",[86,168298,168300],{"className":30363,"code":168299,"language":30365,"meta":14,"style":14},"path = r\"D:\\data\\data.txt\"\n",[92,168301,168302],{"__ignoreMap":14},[95,168303,168304,168306,168308,168310,168312,168315,168318,168321,168323,168325,168327,168330],{"class":97,"line":98},[95,168305,168288],{"class":105},[95,168307,151],{"class":101},[95,168309,17104],{"class":101},[95,168311,357],{"class":210},[95,168313,168314],{"class":47962},"D:",[95,168316,168317],{"class":154},"\\d",[95,168319,168320],{"class":47962},"ata",[95,168322,168317],{"class":154},[95,168324,168320],{"class":47962},[95,168326,664],{"class":154},[95,168328,168329],{"class":47962},"txt",[95,168331,25118],{"class":210},[37,168333,168335],{"id":168334},"_83-open函数","8.3 open函数",[10,168337,5164],{},[86,168339,168341],{"className":30363,"code":168340,"language":30365,"meta":14,"style":14},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[92,168342,168343],{"__ignoreMap":14},[95,168344,168345,168347,168349,168351,168354,168356,168358,168360],{"class":97,"line":98},[95,168346,45339],{"class":5199},[95,168348,13547],{"class":101},[95,168350,146768],{"class":154},[95,168352,168353],{"class":105},"(文件路径, 打开模式, ",[95,168355,146783],{"class":5199},[95,168357,151],{"class":101},[95,168359,146788],{"class":210},[95,168361,112],{"class":105},[10,168363,168364],{},"常见模式：",[243,168366,168367,168376],{},[246,168368,168369],{},[249,168370,168371,168374],{},[252,168372,168373],{},"模式",[252,168375,25854],{},[290,168377,168378,168387,168396,168405,168415],{},[249,168379,168380,168384],{},[295,168381,168382],{},[92,168383,776],{},[295,168385,168386],{},"只读，文件不存在会报错",[249,168388,168389,168393],{},[295,168390,168391],{},[92,168392,901],{},[295,168394,168395],{},"只写，文件不存在会创建，存在会清空",[249,168397,168398,168402],{},[295,168399,168400],{},[92,168401,344],{},[295,168403,168404],{},"追加，文件不存在会创建",[249,168406,168407,168412],{},[295,168408,168409],{},[92,168410,168411],{},"rb",[295,168413,168414],{},"二进制只读",[249,168416,168417,168422],{},[295,168418,168419],{},[92,168420,168421],{},"wb",[295,168423,168424],{},"二进制只写",[37,168426,168428],{"id":168427},"_84-读取文件","8.4 读取文件",[66,168430,168432],{"id":168431},"_841-read","8.4.1 read",[10,168434,168435],{},"一次读取全部内容：",[86,168437,168439],{"className":30363,"code":168438,"language":30365,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[92,168440,168441,168467,168479,168486],{"__ignoreMap":14},[95,168442,168443,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463,168465],{"class":97,"line":98},[95,168444,45339],{"class":5199},[95,168446,13547],{"class":101},[95,168448,146768],{"class":154},[95,168450,106],{"class":105},[95,168452,146773],{"class":210},[95,168454,12418],{"class":105},[95,168456,146778],{"class":210},[95,168458,12418],{"class":105},[95,168460,146783],{"class":5199},[95,168462,151],{"class":101},[95,168464,146788],{"class":210},[95,168466,112],{"class":105},[95,168468,168469,168472,168474,168476],{"class":97,"line":15},[95,168470,168471],{"class":105},"content ",[95,168473,151],{"class":101},[95,168475,148130],{"class":5199},[95,168477,168478],{"class":105},".read()\n",[95,168480,168481,168483],{"class":97,"line":1161},[95,168482,30400],{"class":154},[95,168484,168485],{"class":105},"(content)\n",[95,168487,168488,168490],{"class":97,"line":1176},[95,168489,45339],{"class":5199},[95,168491,168492],{"class":105},".close()\n",[10,168494,168495],{},"可以指定读取字符数：",[86,168497,168499],{"className":30363,"code":168498,"language":30365,"meta":14,"style":14},"content = file.read(10)\n",[92,168500,168501],{"__ignoreMap":14},[95,168502,168503,168505,168507,168509,168512,168514],{"class":97,"line":98},[95,168504,168471],{"class":105},[95,168506,151],{"class":101},[95,168508,148130],{"class":5199},[95,168510,168511],{"class":105},".read(",[95,168513,552],{"class":154},[95,168515,112],{"class":105},[66,168517,168519],{"id":168518},"_842-readline","8.4.2 readline",[10,168521,168522],{},"一次读取一行：",[86,168524,168526],{"className":30363,"code":168525,"language":30365,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[92,168527,168528,168554,168558,168569,168576,168580],{"__ignoreMap":14},[95,168529,168530,168532,168534,168536,168538,168540,168542,168544,168546,168548,168550,168552],{"class":97,"line":98},[95,168531,45339],{"class":5199},[95,168533,13547],{"class":101},[95,168535,146768],{"class":154},[95,168537,106],{"class":105},[95,168539,146773],{"class":210},[95,168541,12418],{"class":105},[95,168543,146778],{"class":210},[95,168545,12418],{"class":105},[95,168547,146783],{"class":5199},[95,168549,151],{"class":101},[95,168551,146788],{"class":210},[95,168553,112],{"class":105},[95,168555,168556],{"class":97,"line":15},[95,168557,2382],{"emptyLinePlaceholder":21},[95,168559,168560,168562,168564,168566],{"class":97,"line":1161},[95,168561,147229],{"class":105},[95,168563,151],{"class":101},[95,168565,148130],{"class":5199},[95,168567,168568],{"class":105},".readline()\n",[95,168570,168571,168573],{"class":97,"line":1176},[95,168572,30400],{"class":154},[95,168574,168575],{"class":105},"(line)\n",[95,168577,168578],{"class":97,"line":1182},[95,168579,2382],{"emptyLinePlaceholder":21},[95,168581,168582,168584],{"class":97,"line":1196},[95,168583,45339],{"class":5199},[95,168585,168492],{"class":105},[66,168587,168589],{"id":168588},"_843-readlines","8.4.3 readlines",[10,168591,168592],{},"读取所有行，返回列表：",[86,168594,168596],{"className":30363,"code":168595,"language":30365,"meta":14,"style":14},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[92,168597,168598,168624,168636,168643],{"__ignoreMap":14},[95,168599,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622],{"class":97,"line":98},[95,168601,45339],{"class":5199},[95,168603,13547],{"class":101},[95,168605,146768],{"class":154},[95,168607,106],{"class":105},[95,168609,146773],{"class":210},[95,168611,12418],{"class":105},[95,168613,146778],{"class":210},[95,168615,12418],{"class":105},[95,168617,146783],{"class":5199},[95,168619,151],{"class":101},[95,168621,146788],{"class":210},[95,168623,112],{"class":105},[95,168625,168626,168629,168631,168633],{"class":97,"line":15},[95,168627,168628],{"class":105},"lines ",[95,168630,151],{"class":101},[95,168632,148130],{"class":5199},[95,168634,168635],{"class":105},".readlines()\n",[95,168637,168638,168640],{"class":97,"line":1161},[95,168639,30400],{"class":154},[95,168641,168642],{"class":105},"(lines)\n",[95,168644,168645,168647],{"class":97,"line":1176},[95,168646,45339],{"class":5199},[95,168648,168492],{"class":105},[10,168650,168651,168652,168655],{},"每一行通常带有换行符，可以用 ",[92,168653,168654],{},"strip()"," 去掉：",[86,168657,168659],{"className":30363,"code":168658,"language":30365,"meta":14,"style":14},"for line in lines:\n    print(line.strip())\n",[92,168660,168661,168673],{"__ignoreMap":14},[95,168662,168663,168665,168668,168670],{"class":97,"line":98},[95,168664,3007],{"class":101},[95,168666,168667],{"class":105}," line ",[95,168669,26028],{"class":101},[95,168671,168672],{"class":105}," lines:\n",[95,168674,168675,168677],{"class":97,"line":15},[95,168676,31284],{"class":154},[95,168678,168679],{"class":105},"(line.strip())\n",[66,168681,168683],{"id":168682},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[10,168685,168686],{},"推荐读取大文件时使用：",[86,168688,168690],{"className":30363,"code":168689,"language":30365,"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",[92,168691,168692,168718,168722,168734,168740,168744],{"__ignoreMap":14},[95,168693,168694,168696,168698,168700,168702,168704,168706,168708,168710,168712,168714,168716],{"class":97,"line":98},[95,168695,45339],{"class":5199},[95,168697,13547],{"class":101},[95,168699,146768],{"class":154},[95,168701,106],{"class":105},[95,168703,146773],{"class":210},[95,168705,12418],{"class":105},[95,168707,146778],{"class":210},[95,168709,12418],{"class":105},[95,168711,146783],{"class":5199},[95,168713,151],{"class":101},[95,168715,146788],{"class":210},[95,168717,112],{"class":105},[95,168719,168720],{"class":97,"line":15},[95,168721,2382],{"emptyLinePlaceholder":21},[95,168723,168724,168726,168728,168730,168732],{"class":97,"line":1161},[95,168725,3007],{"class":101},[95,168727,168667],{"class":105},[95,168729,26028],{"class":101},[95,168731,148130],{"class":5199},[95,168733,3721],{"class":105},[95,168735,168736,168738],{"class":97,"line":1176},[95,168737,31284],{"class":154},[95,168739,168679],{"class":105},[95,168741,168742],{"class":97,"line":1182},[95,168743,2382],{"emptyLinePlaceholder":21},[95,168745,168746,168748],{"class":97,"line":1196},[95,168747,45339],{"class":5199},[95,168749,168492],{"class":105},[37,168751,168753],{"id":168752},"_85-with语句","8.5 with语句",[10,168755,168756,168758],{},[92,168757,107810],{}," 会自动关闭文件，推荐使用。",[86,168760,168762],{"className":30363,"code":168761,"language":30365,"meta":14,"style":14},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[92,168763,168764,168794,168804],{"__ignoreMap":14},[95,168765,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792],{"class":97,"line":98},[95,168767,107810],{"class":101},[95,168769,146768],{"class":154},[95,168771,106],{"class":105},[95,168773,146773],{"class":210},[95,168775,12418],{"class":105},[95,168777,146778],{"class":210},[95,168779,12418],{"class":105},[95,168781,146783],{"class":5199},[95,168783,151],{"class":101},[95,168785,146788],{"class":210},[95,168787,13697],{"class":105},[95,168789,31368],{"class":101},[95,168791,148130],{"class":5199},[95,168793,3721],{"class":105},[95,168795,168796,168798,168800,168802],{"class":97,"line":15},[95,168797,146800],{"class":105},[95,168799,151],{"class":101},[95,168801,148130],{"class":5199},[95,168803,168478],{"class":105},[95,168805,168806,168808],{"class":97,"line":1161},[95,168807,31284],{"class":154},[95,168809,168485],{"class":105},[10,168811,168812],{},"等价于打开文件、读取、最后关闭，但更安全。",[37,168814,168816],{"id":168815},"_86-写入文件","8.6 写入文件",[10,168818,168819,168821],{},[92,168820,901],{}," 模式会清空原文件。",[86,168823,168825],{"className":30363,"code":168824,"language":30365,"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",[92,168826,168827,168857,168874],{"__ignoreMap":14},[95,168828,168829,168831,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855],{"class":97,"line":98},[95,168830,107810],{"class":101},[95,168832,146768],{"class":154},[95,168834,106],{"class":105},[95,168836,146773],{"class":210},[95,168838,12418],{"class":105},[95,168840,151953],{"class":210},[95,168842,12418],{"class":105},[95,168844,146783],{"class":5199},[95,168846,151],{"class":101},[95,168848,146788],{"class":210},[95,168850,13697],{"class":105},[95,168852,31368],{"class":101},[95,168854,148130],{"class":5199},[95,168856,3721],{"class":105},[95,168858,168859,168862,168865,168868,168870,168872],{"class":97,"line":15},[95,168860,168861],{"class":5199},"    file",[95,168863,168864],{"class":105},".write(",[95,168866,168867],{"class":210},"\"hello",[95,168869,156502],{"class":154},[95,168871,357],{"class":210},[95,168873,112],{"class":105},[95,168875,168876,168878,168880,168883,168885,168887],{"class":97,"line":1161},[95,168877,168861],{"class":5199},[95,168879,168864],{"class":105},[95,168881,168882],{"class":210},"\"python",[95,168884,156502],{"class":154},[95,168886,357],{"class":210},[95,168888,112],{"class":105},[10,168890,168891],{},"写入多行：",[86,168893,168895],{"className":30363,"code":168894,"language":30365,"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",[92,168896,168897,168932,168936,168967],{"__ignoreMap":14},[95,168898,168899,168901,168903,168905,168908,168910,168912,168914,168917,168919,168921,168923,168926,168928,168930],{"class":97,"line":98},[95,168900,168628],{"class":105},[95,168902,151],{"class":101},[95,168904,52203],{"class":105},[95,168906,168907],{"class":210},"\"小明,18",[95,168909,156502],{"class":154},[95,168911,357],{"class":210},[95,168913,12418],{"class":105},[95,168915,168916],{"class":210},"\"小红,17",[95,168918,156502],{"class":154},[95,168920,357],{"class":210},[95,168922,12418],{"class":105},[95,168924,168925],{"class":210},"\"小刚,19",[95,168927,156502],{"class":154},[95,168929,357],{"class":210},[95,168931,33231],{"class":105},[95,168933,168934],{"class":97,"line":15},[95,168935,2382],{"emptyLinePlaceholder":21},[95,168937,168938,168940,168942,168944,168947,168949,168951,168953,168955,168957,168959,168961,168963,168965],{"class":97,"line":1161},[95,168939,107810],{"class":101},[95,168941,146768],{"class":154},[95,168943,106],{"class":105},[95,168945,168946],{"class":210},"\"students.txt\"",[95,168948,12418],{"class":105},[95,168950,151953],{"class":210},[95,168952,12418],{"class":105},[95,168954,146783],{"class":5199},[95,168956,151],{"class":101},[95,168958,146788],{"class":210},[95,168960,13697],{"class":105},[95,168962,31368],{"class":101},[95,168964,148130],{"class":5199},[95,168966,3721],{"class":105},[95,168968,168969,168971],{"class":97,"line":1176},[95,168970,168861],{"class":5199},[95,168972,168973],{"class":105},".writelines(lines)\n",[37,168975,168977],{"id":168976},"_87-追加文件","8.7 追加文件",[10,168979,168980,168982],{},[92,168981,344],{}," 模式不会清空原内容，而是在末尾追加。",[86,168984,168986],{"className":30363,"code":168985,"language":30365,"meta":14,"style":14},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[92,168987,168988,169019],{"__ignoreMap":14},[95,168989,168990,168992,168994,168996,168999,169001,169003,169005,169007,169009,169011,169013,169015,169017],{"class":97,"line":98},[95,168991,107810],{"class":101},[95,168993,146768],{"class":154},[95,168995,106],{"class":105},[95,168997,168998],{"class":210},"\"log.txt\"",[95,169000,12418],{"class":105},[95,169002,165302],{"class":210},[95,169004,12418],{"class":105},[95,169006,146783],{"class":5199},[95,169008,151],{"class":101},[95,169010,146788],{"class":210},[95,169012,13697],{"class":105},[95,169014,31368],{"class":101},[95,169016,148130],{"class":5199},[95,169018,3721],{"class":105},[95,169020,169021,169023,169025,169028,169030,169032],{"class":97,"line":15},[95,169022,168861],{"class":5199},[95,169024,168864],{"class":105},[95,169026,169027],{"class":210},"\"程序启动",[95,169029,156502],{"class":154},[95,169031,357],{"class":210},[95,169033,112],{"class":105},[10,169035,169036],{},"日志类文件常用追加模式。",[37,169038,169040],{"id":169039},"_88-文件编码","8.8 文件编码",[10,169042,169043],{},"编码决定文字如何保存为字节。",[10,169045,169046],{},"常见编码：",[49,169048,169049,169052],{},[52,169050,169051],{},"UTF-8：推荐。",[52,169053,169054],{},"GBK：部分 Windows 中文文件常见。",[10,169056,169057],{},"读取文件乱码时，可以尝试：",[86,169059,169061],{"className":30363,"code":169060,"language":30365,"meta":14,"style":14},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[92,169062,169063,169094],{"__ignoreMap":14},[95,169064,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169086,169088,169090,169092],{"class":97,"line":98},[95,169066,107810],{"class":101},[95,169068,146768],{"class":154},[95,169070,106],{"class":105},[95,169072,146773],{"class":210},[95,169074,12418],{"class":105},[95,169076,146778],{"class":210},[95,169078,12418],{"class":105},[95,169080,146783],{"class":5199},[95,169082,151],{"class":101},[95,169084,169085],{"class":210},"\"gbk\"",[95,169087,13697],{"class":105},[95,169089,31368],{"class":101},[95,169091,148130],{"class":5199},[95,169093,3721],{"class":105},[95,169095,169096,169098,169100,169102],{"class":97,"line":15},[95,169097,146800],{"class":105},[95,169099,151],{"class":101},[95,169101,148130],{"class":5199},[95,169103,168478],{"class":105},[10,169105,169106],{},"写文件时建议统一 UTF-8：",[86,169108,169110],{"className":30363,"code":169109,"language":30365,"meta":14,"style":14},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[92,169111,169112,169142],{"__ignoreMap":14},[95,169113,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140],{"class":97,"line":98},[95,169115,107810],{"class":101},[95,169117,146768],{"class":154},[95,169119,106],{"class":105},[95,169121,146773],{"class":210},[95,169123,12418],{"class":105},[95,169125,151953],{"class":210},[95,169127,12418],{"class":105},[95,169129,146783],{"class":5199},[95,169131,151],{"class":101},[95,169133,146788],{"class":210},[95,169135,13697],{"class":105},[95,169137,31368],{"class":101},[95,169139,148130],{"class":5199},[95,169141,3721],{"class":105},[95,169143,169144,169146,169148,169151],{"class":97,"line":15},[95,169145,168861],{"class":5199},[95,169147,168864],{"class":105},[95,169149,169150],{"class":210},"\"中文内容\"",[95,169152,112],{"class":105},[37,169154,169156],{"id":169155},"_89-pathlib","8.9 pathlib",[10,169158,169159,169162],{},[92,169160,169161],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[86,169164,169166],{"className":30363,"code":169165,"language":30365,"meta":14,"style":14},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[92,169167,169168,169178,169182,169200],{"__ignoreMap":14},[95,169169,169170,169172,169174,169176],{"class":97,"line":98},[95,169171,30722],{"class":101},[95,169173,108288],{"class":105},[95,169175,30377],{"class":101},[95,169177,108293],{"class":105},[95,169179,169180],{"class":97,"line":15},[95,169181,2382],{"emptyLinePlaceholder":21},[95,169183,169184,169186,169188,169190,169193,169195,169197],{"class":97,"line":1161},[95,169185,168288],{"class":105},[95,169187,151],{"class":101},[95,169189,108522],{"class":105},[95,169191,169192],{"class":210},"\"data\"",[95,169194,13697],{"class":105},[95,169196,690],{"class":101},[95,169198,169199],{"class":210}," \"students.txt\"\n",[95,169201,169202,169204],{"class":97,"line":1176},[95,169203,30400],{"class":154},[95,169205,169206],{"class":105},"(path)\n",[10,169208,169209],{},"创建目录：",[86,169211,169213],{"className":30363,"code":169212,"language":30365,"meta":14,"style":14},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[92,169214,169215,169225,169229,169242],{"__ignoreMap":14},[95,169216,169217,169219,169221,169223],{"class":97,"line":98},[95,169218,30722],{"class":101},[95,169220,108288],{"class":105},[95,169222,30377],{"class":101},[95,169224,108293],{"class":105},[95,169226,169227],{"class":97,"line":15},[95,169228,2382],{"emptyLinePlaceholder":21},[95,169230,169231,169234,169236,169238,169240],{"class":97,"line":1161},[95,169232,169233],{"class":105},"data_dir ",[95,169235,151],{"class":101},[95,169237,108522],{"class":105},[95,169239,169192],{"class":210},[95,169241,112],{"class":105},[95,169243,169244,169247,169250,169252,169254],{"class":97,"line":1176},[95,169245,169246],{"class":105},"data_dir.mkdir(",[95,169248,169249],{"class":5199},"exist_ok",[95,169251,151],{"class":101},[95,169253,31461],{"class":154},[95,169255,112],{"class":105},[10,169257,169258],{},"判断文件是否存在：",[86,169260,169262],{"className":30363,"code":169261,"language":30365,"meta":14,"style":14},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[92,169263,169264,169277,169281,169288],{"__ignoreMap":14},[95,169265,169266,169268,169270,169272,169275],{"class":97,"line":98},[95,169267,168288],{"class":105},[95,169269,151],{"class":101},[95,169271,108522],{"class":105},[95,169273,169274],{"class":210},"\"data\u002Fstudents.txt\"",[95,169276,112],{"class":105},[95,169278,169279],{"class":97,"line":15},[95,169280,2382],{"emptyLinePlaceholder":21},[95,169282,169283,169285],{"class":97,"line":1161},[95,169284,1513],{"class":101},[95,169286,169287],{"class":105}," path.exists():\n",[95,169289,169290,169292,169294,169297],{"class":97,"line":1176},[95,169291,31284],{"class":154},[95,169293,106],{"class":105},[95,169295,169296],{"class":210},"\"文件存在\"",[95,169298,112],{"class":105},[10,169300,169301],{},"读写文本：",[86,169303,169305],{"className":30363,"code":169304,"language":30365,"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",[92,169306,169307,169319,169323,169340,169357],{"__ignoreMap":14},[95,169308,169309,169311,169313,169315,169317],{"class":97,"line":98},[95,169310,168288],{"class":105},[95,169312,151],{"class":101},[95,169314,108522],{"class":105},[95,169316,146773],{"class":210},[95,169318,112],{"class":105},[95,169320,169321],{"class":97,"line":15},[95,169322,2382],{"emptyLinePlaceholder":21},[95,169324,169325,169328,169330,169332,169334,169336,169338],{"class":97,"line":1161},[95,169326,169327],{"class":105},"path.write_text(",[95,169329,145853],{"class":210},[95,169331,12418],{"class":105},[95,169333,146783],{"class":5199},[95,169335,151],{"class":101},[95,169337,146788],{"class":210},[95,169339,112],{"class":105},[95,169341,169342,169344,169346,169349,169351,169353,169355],{"class":97,"line":1176},[95,169343,168471],{"class":105},[95,169345,151],{"class":101},[95,169347,169348],{"class":105}," path.read_text(",[95,169350,146783],{"class":5199},[95,169352,151],{"class":101},[95,169354,146788],{"class":210},[95,169356,112],{"class":105},[95,169358,169359,169361],{"class":97,"line":1182},[95,169360,30400],{"class":154},[95,169362,168485],{"class":105},[37,169364,169366],{"id":169365},"_810-json文件","8.10 JSON文件",[10,169368,169369],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[86,169371,169373],{"className":30363,"code":169372,"language":30365,"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",[92,169374,169375,169381,169385,169393,169403,169413,169421,169425,169429,169454],{"__ignoreMap":14},[95,169376,169377,169379],{"class":97,"line":98},[95,169378,30377],{"class":101},[95,169380,147068],{"class":105},[95,169382,169383],{"class":97,"line":15},[95,169384,2382],{"emptyLinePlaceholder":21},[95,169386,169387,169389,169391],{"class":97,"line":1161},[95,169388,149458],{"class":105},[95,169390,151],{"class":101},[95,169392,15555],{"class":105},[95,169394,169395,169397,169399,169401],{"class":97,"line":1176},[95,169396,146997],{"class":210},[95,169398,51414],{"class":105},[95,169400,149865],{"class":210},[95,169402,31451],{"class":105},[95,169404,169405,169407,169409,169411],{"class":97,"line":1182},[95,169406,164514],{"class":210},[95,169408,51414],{"class":105},[95,169410,756],{"class":154},[95,169412,31451],{"class":105},[95,169414,169415,169417,169419],{"class":97,"line":1196},[95,169416,164525],{"class":210},[95,169418,51414],{"class":105},[95,169420,164530],{"class":154},[95,169422,169423],{"class":97,"line":1202},[95,169424,1547],{"class":105},[95,169426,169427],{"class":97,"line":1293},[95,169428,2382],{"emptyLinePlaceholder":21},[95,169430,169431,169433,169435,169438,169440,169442,169444,169446,169448,169450,169452],{"class":97,"line":1299},[95,169432,156421],{"class":105},[95,169434,151],{"class":101},[95,169436,169437],{"class":105}," json.dumps(student, ",[95,169439,147114],{"class":5199},[95,169441,151],{"class":101},[95,169443,33972],{"class":154},[95,169445,12418],{"class":105},[95,169447,151989],{"class":5199},[95,169449,151],{"class":101},[95,169451,183],{"class":154},[95,169453,112],{"class":105},[95,169455,169456,169458],{"class":97,"line":1311},[95,169457,30400],{"class":154},[95,169459,164048],{"class":105},[10,169461,169462],{},"写入 JSON 文件：",[86,169464,169466],{"className":30363,"code":169465,"language":30365,"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",[92,169467,169468,169474,169478,169486,169514,169542,169546,169550,169580],{"__ignoreMap":14},[95,169469,169470,169472],{"class":97,"line":98},[95,169471,30377],{"class":101},[95,169473,147068],{"class":105},[95,169475,169476],{"class":97,"line":15},[95,169477,2382],{"emptyLinePlaceholder":21},[95,169479,169480,169482,169484],{"class":97,"line":1161},[95,169481,159693],{"class":105},[95,169483,151],{"class":101},[95,169485,55424],{"class":105},[95,169487,169488,169490,169492,169494,169496,169498,169500,169502,169504,169506,169508,169510,169512],{"class":97,"line":1176},[95,169489,148362],{"class":105},[95,169491,62656],{"class":210},[95,169493,51414],{"class":105},[95,169495,149865],{"class":210},[95,169497,12418],{"class":105},[95,169499,69101],{"class":210},[95,169501,51414],{"class":105},[95,169503,756],{"class":154},[95,169505,12418],{"class":105},[95,169507,151449],{"class":210},[95,169509,51414],{"class":105},[95,169511,1095],{"class":154},[95,169513,4912],{"class":105},[95,169515,169516,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538,169540],{"class":97,"line":1182},[95,169517,148362],{"class":105},[95,169519,62656],{"class":210},[95,169521,51414],{"class":105},[95,169523,150913],{"class":210},[95,169525,12418],{"class":105},[95,169527,69101],{"class":210},[95,169529,51414],{"class":105},[95,169531,731],{"class":154},[95,169533,12418],{"class":105},[95,169535,151449],{"class":210},[95,169537,51414],{"class":105},[95,169539,917],{"class":154},[95,169541,4912],{"class":105},[95,169543,169544],{"class":97,"line":1196},[95,169545,33231],{"class":105},[95,169547,169548],{"class":97,"line":1202},[95,169549,2382],{"emptyLinePlaceholder":21},[95,169551,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578],{"class":97,"line":1293},[95,169553,107810],{"class":101},[95,169555,146768],{"class":154},[95,169557,106],{"class":105},[95,169559,151808],{"class":210},[95,169561,12418],{"class":105},[95,169563,151953],{"class":210},[95,169565,12418],{"class":105},[95,169567,146783],{"class":5199},[95,169569,151],{"class":101},[95,169571,146788],{"class":210},[95,169573,13697],{"class":105},[95,169575,31368],{"class":101},[95,169577,148130],{"class":5199},[95,169579,3721],{"class":105},[95,169581,169582,169585,169587,169589,169591,169593,169595,169597,169599,169601,169603],{"class":97,"line":1299},[95,169583,169584],{"class":105},"    json.dump(students, ",[95,169586,45339],{"class":5199},[95,169588,12418],{"class":105},[95,169590,147114],{"class":5199},[95,169592,151],{"class":101},[95,169594,33972],{"class":154},[95,169596,12418],{"class":105},[95,169598,151989],{"class":5199},[95,169600,151],{"class":101},[95,169602,183],{"class":154},[95,169604,112],{"class":105},[10,169606,169607],{},"读取 JSON 文件：",[86,169609,169611],{"className":30363,"code":169610,"language":30365,"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",[92,169612,169613,169619,169623,169653,169665,169669],{"__ignoreMap":14},[95,169614,169615,169617],{"class":97,"line":98},[95,169616,30377],{"class":101},[95,169618,147068],{"class":105},[95,169620,169621],{"class":97,"line":15},[95,169622,2382],{"emptyLinePlaceholder":21},[95,169624,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651],{"class":97,"line":1161},[95,169626,107810],{"class":101},[95,169628,146768],{"class":154},[95,169630,106],{"class":105},[95,169632,151808],{"class":210},[95,169634,12418],{"class":105},[95,169636,146778],{"class":210},[95,169638,12418],{"class":105},[95,169640,146783],{"class":5199},[95,169642,151],{"class":101},[95,169644,146788],{"class":210},[95,169646,13697],{"class":105},[95,169648,31368],{"class":101},[95,169650,148130],{"class":5199},[95,169652,3721],{"class":105},[95,169654,169655,169657,169659,169661,169663],{"class":97,"line":1176},[95,169656,153014],{"class":105},[95,169658,151],{"class":101},[95,169660,148141],{"class":105},[95,169662,45339],{"class":5199},[95,169664,112],{"class":105},[95,169666,169667],{"class":97,"line":1182},[95,169668,2382],{"emptyLinePlaceholder":21},[95,169670,169671,169673],{"class":97,"line":1196},[95,169672,30400],{"class":154},[95,169674,164972],{"class":105},[37,169676,169678],{"id":169677},"_811-csv文件","8.11 CSV文件",[10,169680,169681],{},"CSV 是逗号分隔值，常用于表格数据。",[10,169683,169684],{},"写入 CSV：",[86,169686,169688],{"className":30363,"code":169687,"language":30365,"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",[92,169689,169690,169697,169701,169709,169727,169743,169759,169763,169767,169807,169821],{"__ignoreMap":14},[95,169691,169692,169694],{"class":97,"line":98},[95,169693,30377],{"class":101},[95,169695,169696],{"class":105}," csv\n",[95,169698,169699],{"class":97,"line":15},[95,169700,2382],{"emptyLinePlaceholder":21},[95,169702,169703,169705,169707],{"class":97,"line":1161},[95,169704,159693],{"class":105},[95,169706,151],{"class":101},[95,169708,55424],{"class":105},[95,169710,169711,169714,169716,169718,169720,169722,169725],{"class":97,"line":1176},[95,169712,169713],{"class":105},"    [",[95,169715,73076],{"class":210},[95,169717,12418],{"class":105},[95,169719,73109],{"class":210},[95,169721,12418],{"class":105},[95,169723,169724],{"class":210},"\"成绩\"",[95,169726,87813],{"class":105},[95,169728,169729,169731,169733,169735,169737,169739,169741],{"class":97,"line":1182},[95,169730,169713],{"class":105},[95,169732,149865],{"class":210},[95,169734,12418],{"class":105},[95,169736,756],{"class":154},[95,169738,12418],{"class":105},[95,169740,1095],{"class":154},[95,169742,87813],{"class":105},[95,169744,169745,169747,169749,169751,169753,169755,169757],{"class":97,"line":1196},[95,169746,169713],{"class":105},[95,169748,150913],{"class":210},[95,169750,12418],{"class":105},[95,169752,731],{"class":154},[95,169754,12418],{"class":105},[95,169756,917],{"class":154},[95,169758,87813],{"class":105},[95,169760,169761],{"class":97,"line":1202},[95,169762,33231],{"class":105},[95,169764,169765],{"class":97,"line":1293},[95,169766,2382],{"emptyLinePlaceholder":21},[95,169768,169769,169771,169773,169775,169778,169780,169782,169784,169786,169788,169790,169792,169795,169797,169799,169801,169803,169805],{"class":97,"line":1299},[95,169770,107810],{"class":101},[95,169772,146768],{"class":154},[95,169774,106],{"class":105},[95,169776,169777],{"class":210},"\"students.csv\"",[95,169779,12418],{"class":105},[95,169781,151953],{"class":210},[95,169783,12418],{"class":105},[95,169785,146783],{"class":5199},[95,169787,151],{"class":101},[95,169789,146788],{"class":210},[95,169791,12418],{"class":105},[95,169793,169794],{"class":5199},"newline",[95,169796,151],{"class":101},[95,169798,7635],{"class":210},[95,169800,13697],{"class":105},[95,169802,31368],{"class":101},[95,169804,148130],{"class":5199},[95,169806,3721],{"class":105},[95,169808,169809,169812,169814,169817,169819],{"class":97,"line":1311},[95,169810,169811],{"class":105},"    writer ",[95,169813,151],{"class":101},[95,169815,169816],{"class":105}," csv.writer(",[95,169818,45339],{"class":5199},[95,169820,112],{"class":105},[95,169822,169823],{"class":97,"line":1594},[95,169824,169825],{"class":105},"    writer.writerows(students)\n",[10,169827,169828],{},"读取 CSV：",[86,169830,169832],{"className":30363,"code":169831,"language":30365,"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",[92,169833,169834,169840,169844,169874,169888,169900],{"__ignoreMap":14},[95,169835,169836,169838],{"class":97,"line":98},[95,169837,30377],{"class":101},[95,169839,169696],{"class":105},[95,169841,169842],{"class":97,"line":15},[95,169843,2382],{"emptyLinePlaceholder":21},[95,169845,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872],{"class":97,"line":1161},[95,169847,107810],{"class":101},[95,169849,146768],{"class":154},[95,169851,106],{"class":105},[95,169853,169777],{"class":210},[95,169855,12418],{"class":105},[95,169857,146778],{"class":210},[95,169859,12418],{"class":105},[95,169861,146783],{"class":5199},[95,169863,151],{"class":101},[95,169865,146788],{"class":210},[95,169867,13697],{"class":105},[95,169869,31368],{"class":101},[95,169871,148130],{"class":5199},[95,169873,3721],{"class":105},[95,169875,169876,169879,169881,169884,169886],{"class":97,"line":1176},[95,169877,169878],{"class":105},"    reader ",[95,169880,151],{"class":101},[95,169882,169883],{"class":105}," csv.reader(",[95,169885,45339],{"class":5199},[95,169887,112],{"class":105},[95,169889,169890,169892,169895,169897],{"class":97,"line":1182},[95,169891,3183],{"class":101},[95,169893,169894],{"class":105}," row ",[95,169896,26028],{"class":101},[95,169898,169899],{"class":105}," reader:\n",[95,169901,169902,169904],{"class":97,"line":1196},[95,169903,32436],{"class":154},[95,169905,169906],{"class":105},"(row)\n",[10,169908,169909],{},"使用字典写入：",[86,169911,169913],{"className":30363,"code":169912,"language":30365,"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",[92,169914,169915,169921,169925,169933,169961,169989,169993,169997,170035,170056,170077,170082],{"__ignoreMap":14},[95,169916,169917,169919],{"class":97,"line":98},[95,169918,30377],{"class":101},[95,169920,169696],{"class":105},[95,169922,169923],{"class":97,"line":15},[95,169924,2382],{"emptyLinePlaceholder":21},[95,169926,169927,169929,169931],{"class":97,"line":1161},[95,169928,159693],{"class":105},[95,169930,151],{"class":101},[95,169932,55424],{"class":105},[95,169934,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957,169959],{"class":97,"line":1176},[95,169936,148362],{"class":105},[95,169938,62656],{"class":210},[95,169940,51414],{"class":105},[95,169942,149865],{"class":210},[95,169944,12418],{"class":105},[95,169946,69101],{"class":210},[95,169948,51414],{"class":105},[95,169950,756],{"class":154},[95,169952,12418],{"class":105},[95,169954,151449],{"class":210},[95,169956,51414],{"class":105},[95,169958,1095],{"class":154},[95,169960,4912],{"class":105},[95,169962,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987],{"class":97,"line":1182},[95,169964,148362],{"class":105},[95,169966,62656],{"class":210},[95,169968,51414],{"class":105},[95,169970,150913],{"class":210},[95,169972,12418],{"class":105},[95,169974,69101],{"class":210},[95,169976,51414],{"class":105},[95,169978,731],{"class":154},[95,169980,12418],{"class":105},[95,169982,151449],{"class":210},[95,169984,51414],{"class":105},[95,169986,917],{"class":154},[95,169988,4912],{"class":105},[95,169990,169991],{"class":97,"line":1196},[95,169992,33231],{"class":105},[95,169994,169995],{"class":97,"line":1202},[95,169996,2382],{"emptyLinePlaceholder":21},[95,169998,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033],{"class":97,"line":1293},[95,170000,107810],{"class":101},[95,170002,146768],{"class":154},[95,170004,106],{"class":105},[95,170006,169777],{"class":210},[95,170008,12418],{"class":105},[95,170010,151953],{"class":210},[95,170012,12418],{"class":105},[95,170014,146783],{"class":5199},[95,170016,151],{"class":101},[95,170018,146788],{"class":210},[95,170020,12418],{"class":105},[95,170022,169794],{"class":5199},[95,170024,151],{"class":101},[95,170026,7635],{"class":210},[95,170028,13697],{"class":105},[95,170030,31368],{"class":101},[95,170032,148130],{"class":5199},[95,170034,3721],{"class":105},[95,170036,170037,170040,170042,170044,170046,170048,170050,170052,170054],{"class":97,"line":1299},[95,170038,170039],{"class":105},"    fieldnames ",[95,170041,151],{"class":101},[95,170043,52203],{"class":105},[95,170045,62656],{"class":210},[95,170047,12418],{"class":105},[95,170049,69101],{"class":210},[95,170051,12418],{"class":105},[95,170053,151449],{"class":210},[95,170055,33231],{"class":105},[95,170057,170058,170060,170062,170065,170067,170069,170072,170074],{"class":97,"line":1311},[95,170059,169811],{"class":105},[95,170061,151],{"class":101},[95,170063,170064],{"class":105}," csv.DictWriter(",[95,170066,45339],{"class":5199},[95,170068,12418],{"class":105},[95,170070,170071],{"class":5199},"fieldnames",[95,170073,151],{"class":101},[95,170075,170076],{"class":105},"fieldnames)\n",[95,170078,170079],{"class":97,"line":1594},[95,170080,170081],{"class":105},"    writer.writeheader()\n",[95,170083,170084],{"class":97,"line":1599},[95,170085,169825],{"class":105},[37,170087,170089],{"id":170088},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[10,170091,123269],{},[49,170093,170094,170097,170100],{},[52,170095,170096],{},"读取文本文件。",[52,170098,170099],{},"统计每个单词出现次数。",[52,170101,170102],{},"输出出现次数最多的前 10 个单词。",[10,170104,10018],{},[86,170106,170108],{"className":30363,"code":170107,"language":30365,"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",[92,170109,170110,170120,170124,170137,170153,170157,170167,170176,170180,170192,170212,170221,170225,170243,170247,170277,170281,170297],{"__ignoreMap":14},[95,170111,170112,170114,170116,170118],{"class":97,"line":98},[95,170113,30722],{"class":101},[95,170115,108288],{"class":105},[95,170117,30377],{"class":101},[95,170119,108293],{"class":105},[95,170121,170122],{"class":97,"line":15},[95,170123,2382],{"emptyLinePlaceholder":21},[95,170125,170126,170128,170130,170132,170135],{"class":97,"line":1161},[95,170127,168288],{"class":105},[95,170129,151],{"class":101},[95,170131,108522],{"class":105},[95,170133,170134],{"class":210},"\"article.txt\"",[95,170136,112],{"class":105},[95,170138,170139,170141,170143,170145,170147,170149,170151],{"class":97,"line":1176},[95,170140,168471],{"class":105},[95,170142,151],{"class":101},[95,170144,169348],{"class":105},[95,170146,146783],{"class":5199},[95,170148,151],{"class":101},[95,170150,146788],{"class":210},[95,170152,112],{"class":105},[95,170154,170155],{"class":97,"line":1182},[95,170156,2382],{"emptyLinePlaceholder":21},[95,170158,170159,170162,170164],{"class":97,"line":1196},[95,170160,170161],{"class":105},"words ",[95,170163,151],{"class":101},[95,170165,170166],{"class":105}," content.lower().split()\n",[95,170168,170169,170172,170174],{"class":97,"line":1202},[95,170170,170171],{"class":105},"counter ",[95,170173,151],{"class":101},[95,170175,87845],{"class":105},[95,170177,170178],{"class":97,"line":1293},[95,170179,2382],{"emptyLinePlaceholder":21},[95,170181,170182,170184,170187,170189],{"class":97,"line":1299},[95,170183,3007],{"class":101},[95,170185,170186],{"class":105}," word ",[95,170188,26028],{"class":101},[95,170190,170191],{"class":105}," words:\n",[95,170193,170194,170197,170199,170202,170205,170207,170210],{"class":97,"line":1311},[95,170195,170196],{"class":105},"    word ",[95,170198,151],{"class":101},[95,170200,170201],{"class":105}," word.strip(",[95,170203,170204],{"class":210},"\".,!?;:",[95,170206,156472],{"class":154},[95,170208,170209],{"class":210},"'()[]\"",[95,170211,112],{"class":105},[95,170213,170214,170216,170218],{"class":97,"line":1594},[95,170215,3083],{"class":101},[95,170217,38915],{"class":101},[95,170219,170220],{"class":105}," word:\n",[95,170222,170223],{"class":97,"line":1599},[95,170224,148489],{"class":101},[95,170226,170227,170230,170232,170235,170237,170239,170241],{"class":97,"line":1605},[95,170228,170229],{"class":105},"    counter[word] ",[95,170231,151],{"class":101},[95,170233,170234],{"class":105}," counter.get(word, ",[95,170236,297],{"class":154},[95,170238,13697],{"class":105},[95,170240,587],{"class":101},[95,170242,55676],{"class":154},[95,170244,170245],{"class":97,"line":1610},[95,170246,2382],{"emptyLinePlaceholder":21},[95,170248,170249,170252,170254,170256,170259,170261,170263,170265,170267,170269,170271,170273,170275],{"class":97,"line":1624},[95,170250,170251],{"class":105},"items ",[95,170253,151],{"class":101},[95,170255,163581],{"class":154},[95,170257,170258],{"class":105},"(counter.items(), ",[95,170260,153923],{"class":5199},[95,170262,153926],{"class":101},[95,170264,153929],{"class":105},[95,170266,323],{"class":154},[95,170268,112179],{"class":105},[95,170270,163505],{"class":5199},[95,170272,151],{"class":101},[95,170274,31461],{"class":154},[95,170276,112],{"class":105},[95,170278,170279],{"class":97,"line":1629},[95,170280,2382],{"emptyLinePlaceholder":21},[95,170282,170283,170285,170288,170290,170293,170295],{"class":97,"line":1635},[95,170284,3007],{"class":101},[95,170286,170287],{"class":105}," word, count ",[95,170289,26028],{"class":101},[95,170291,170292],{"class":105}," items[:",[95,170294,552],{"class":154},[95,170296,165732],{"class":105},[95,170298,170299,170301],{"class":97,"line":1656},[95,170300,31284],{"class":154},[95,170302,170303],{"class":105},"(word, count)\n",[37,170305,170307],{"id":170306},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[86,170309,170311],{"className":30363,"code":170310,"language":30365,"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",[92,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},[95,170314,170315,170317],{"class":97,"line":98},[95,170316,30377],{"class":101},[95,170318,147068],{"class":105},[95,170320,170321,170323,170325,170327],{"class":97,"line":15},[95,170322,30722],{"class":101},[95,170324,108288],{"class":105},[95,170326,30377],{"class":101},[95,170328,108293],{"class":105},[95,170330,170331],{"class":97,"line":1161},[95,170332,2382],{"emptyLinePlaceholder":21},[95,170334,170335,170337,170339,170341,170343],{"class":97,"line":1176},[95,170336,151801],{"class":154},[95,170338,13547],{"class":101},[95,170340,108522],{"class":105},[95,170342,151808],{"class":210},[95,170344,112],{"class":105},[95,170346,170347],{"class":97,"line":1182},[95,170348,2382],{"emptyLinePlaceholder":21},[95,170350,170351],{"class":97,"line":1196},[95,170352,2382],{"emptyLinePlaceholder":21},[95,170354,170355,170357,170359],{"class":97,"line":1202},[95,170356,31932],{"class":101},[95,170358,151825],{"class":1945},[95,170360,31938],{"class":105},[95,170362,170363,170365,170367,170369],{"class":97,"line":1293},[95,170364,3083],{"class":101},[95,170366,38915],{"class":101},[95,170368,151836],{"class":154},[95,170370,151839],{"class":105},[95,170372,170373,170375],{"class":97,"line":1299},[95,170374,14735],{"class":101},[95,170376,51815],{"class":105},[95,170378,170379],{"class":97,"line":1311},[95,170380,2382],{"emptyLinePlaceholder":21},[95,170382,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409],{"class":97,"line":1594},[95,170384,34163],{"class":101},[95,170386,146768],{"class":154},[95,170388,106],{"class":105},[95,170390,151801],{"class":154},[95,170392,12418],{"class":105},[95,170394,146778],{"class":210},[95,170396,12418],{"class":105},[95,170398,146783],{"class":5199},[95,170400,151],{"class":101},[95,170402,146788],{"class":210},[95,170404,13697],{"class":105},[95,170406,31368],{"class":101},[95,170408,148130],{"class":5199},[95,170410,3721],{"class":105},[95,170412,170413,170415,170417,170419],{"class":97,"line":1599},[95,170414,14735],{"class":101},[95,170416,148141],{"class":105},[95,170418,45339],{"class":5199},[95,170420,112],{"class":105},[95,170422,170423],{"class":97,"line":1605},[95,170424,2382],{"emptyLinePlaceholder":21},[95,170426,170427],{"class":97,"line":1610},[95,170428,2382],{"emptyLinePlaceholder":21},[95,170430,170431,170433,170435],{"class":97,"line":1624},[95,170432,31932],{"class":101},[95,170434,151935],{"class":1945},[95,170436,151938],{"class":105},[95,170438,170439,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465],{"class":97,"line":1629},[95,170440,34163],{"class":101},[95,170442,146768],{"class":154},[95,170444,106],{"class":105},[95,170446,151801],{"class":154},[95,170448,12418],{"class":105},[95,170450,151953],{"class":210},[95,170452,12418],{"class":105},[95,170454,146783],{"class":5199},[95,170456,151],{"class":101},[95,170458,146788],{"class":210},[95,170460,13697],{"class":105},[95,170462,31368],{"class":101},[95,170464,148130],{"class":5199},[95,170466,3721],{"class":105},[95,170468,170469,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489],{"class":97,"line":1635},[95,170470,151974],{"class":105},[95,170472,45339],{"class":5199},[95,170474,12418],{"class":105},[95,170476,147114],{"class":5199},[95,170478,151],{"class":101},[95,170480,33972],{"class":154},[95,170482,12418],{"class":105},[95,170484,151989],{"class":5199},[95,170486,151],{"class":101},[95,170488,183],{"class":154},[95,170490,112],{"class":105},[95,170492,170493],{"class":97,"line":1656},[95,170494,2382],{"emptyLinePlaceholder":21},[95,170496,170497],{"class":97,"line":1661},[95,170498,2382],{"emptyLinePlaceholder":21},[95,170500,170501,170503,170505],{"class":97,"line":1675},[95,170502,159693],{"class":105},[95,170504,151],{"class":101},[95,170506,153019],{"class":105},[95,170508,170509,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534],{"class":97,"line":1680},[95,170510,170511],{"class":105},"students.append({",[95,170513,62656],{"class":210},[95,170515,51414],{"class":105},[95,170517,149865],{"class":210},[95,170519,12418],{"class":105},[95,170521,69101],{"class":210},[95,170523,51414],{"class":105},[95,170525,756],{"class":154},[95,170527,12418],{"class":105},[95,170529,151449],{"class":210},[95,170531,51414],{"class":105},[95,170533,1095],{"class":154},[95,170535,165129],{"class":105},[95,170537,170538],{"class":97,"line":1709},[95,170539,170540],{"class":105},"save_students(students)\n",[95,170542,170543,170545,170547,170550],{"class":97,"line":1714},[95,170544,30400],{"class":154},[95,170546,106],{"class":105},[95,170548,170549],{"class":210},"\"保存成功\"",[95,170551,112],{"class":105},[37,170553,170555],{"id":170554},"_814-易错点","8.14 易错点",[49,170557,170558,170562,170568,170573,170580,170587],{},[52,170559,170560,168821],{},[92,170561,901],{},[52,170563,170564,170565,28370],{},"读写中文要指定 ",[92,170566,170567],{},"encoding=\"utf-8\"",[52,170569,170570,170571,28370],{},"打开文件后要关闭，推荐使用 ",[92,170572,107810],{},[52,170574,170575,170576,170579],{},"读取大文件不要直接 ",[92,170577,170578],{},"read()"," 全部内容。",[52,170581,170582,170583,170586],{},"Windows 写 CSV 时建议加 ",[92,170584,170585],{},"newline=\"\"","，避免空行。",[52,170588,170589],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[37,170591,170593],{"id":170592},"_815-本章练习","8.15 本章练习",[49,170595,170596,170603,170608,170611,170614],{},[52,170597,170598,170599,170602],{},"写入一个 ",[92,170600,170601],{},"students.txt","，每行保存一个学生姓名。",[52,170604,104332,170605,170607],{},[92,170606,170601],{}," 并输出所有学生。",[52,170609,170610],{},"把学生列表保存为 JSON 文件。",[52,170612,170613],{},"从 JSON 文件读取学生数据，计算平均分。",[52,170615,170616,170617,170620,170621,170624],{},"写一个日志函数 ",[92,170618,170619],{},"write_log(message)","，每次调用向 ",[92,170622,170623],{},"app.log"," 追加一行。",[5109,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":1161,"text":168187},{"id":168220,"depth":1161,"text":168221},{"id":168334,"depth":15,"text":168335},{"id":168427,"depth":15,"text":168428,"children":170637},[170638,170639,170640,170641],{"id":168431,"depth":1161,"text":168432},{"id":168518,"depth":1161,"text":168519},{"id":168588,"depth":1161,"text":168589},{"id":168682,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170659,"title":170660,"body":170661,"description":23360,"extension":18,"meta":172847,"navigation":21,"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],[33,170664,170660],{"id":170665},"_9-异常模块与包",[37,170667,170669],{"id":170668},"_91-什么是异常","9.1 什么是异常",[10,170671,170672],{},"异常是程序运行过程中出现的错误。",[10,170674,170675],{},"常见异常：",[243,170677,170678,170687],{},[246,170679,170680],{},[249,170681,170682,170685],{},[252,170683,170684],{},"异常",[252,170686,25854],{},[290,170688,170689,170699,170709,170718,170728,170738,170748,170758],{},[249,170690,170691,170696],{},[295,170692,170693],{},[92,170694,170695],{},"NameError",[295,170697,170698],{},"使用了未定义变量",[249,170700,170701,170706],{},[295,170702,170703],{},[92,170704,170705],{},"TypeError",[295,170707,170708],{},"类型不匹配",[249,170710,170711,170715],{},[295,170712,170713],{},[92,170714,154811],{},[295,170716,170717],{},"值不合法",[249,170719,170720,170725],{},[295,170721,170722],{},[92,170723,170724],{},"IndexError",[295,170726,170727],{},"列表索引越界",[249,170729,170730,170735],{},[295,170731,170732],{},[92,170733,170734],{},"KeyError",[295,170736,170737],{},"字典 key 不存在",[249,170739,170740,170745],{},[295,170741,170742],{},[92,170743,170744],{},"FileNotFoundError",[295,170746,170747],{},"文件不存在",[249,170749,170750,170755],{},[295,170751,170752],{},[92,170753,170754],{},"ZeroDivisionError",[295,170756,170757],{},"除数为 0",[249,170759,170760,170765],{},[295,170761,170762],{},[92,170763,170764],{},"ImportError",[295,170766,170767],{},"导入失败",[10,170769,15118],{},[86,170771,170773],{"className":30363,"code":170772,"language":30365,"meta":14,"style":14},"num = int(\"abc\")\n",[92,170774,170775],{"__ignoreMap":14},[95,170776,170777,170779,170781,170783,170785,170787],{"class":97,"line":98},[95,170778,155764],{"class":105},[95,170780,151],{"class":101},[95,170782,2364],{"class":154},[95,170784,106],{"class":105},[95,170786,155857],{"class":210},[95,170788,112],{"class":105},[10,170790,170791,170792,28370],{},"会触发 ",[92,170793,154811],{},[37,170795,170797],{"id":170796},"_92-为什么要处理异常","9.2 为什么要处理异常",[10,170799,170800],{},"如果不处理异常，程序会直接终止。",[10,170802,170803],{},"例如用户输入年龄：",[86,170805,170807],{"className":30363,"code":170806,"language":30365,"meta":14,"style":14},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[92,170808,170809,170827],{"__ignoreMap":14},[95,170810,170811,170813,170815,170817,170819,170821,170823,170825],{"class":97,"line":98},[95,170812,146523],{"class":105},[95,170814,151],{"class":101},[95,170816,2364],{"class":154},[95,170818,106],{"class":105},[95,170820,53798],{"class":154},[95,170822,106],{"class":105},[95,170824,152371],{"class":210},[95,170826,30482],{"class":105},[95,170828,170829,170831],{"class":97,"line":15},[95,170830,30400],{"class":154},[95,170832,155738],{"class":105},[10,170834,170835,170836,170839],{},"用户输入 ",[92,170837,170838],{},"abc","，程序就会报错退出。",[10,170841,170842],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[37,170844,170846],{"id":170845},"_93-try-except","9.3 try except",[10,170848,170849],{},"基础语法：",[86,170851,170853],{"className":30363,"code":170852,"language":30365,"meta":14,"style":14},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[92,170854,170855,170862,170867,170874],{"__ignoreMap":14},[95,170856,170857,170860],{"class":97,"line":98},[95,170858,170859],{"class":101},"try",[95,170861,3721],{"class":105},[95,170863,170864],{"class":97,"line":15},[95,170865,170866],{"class":105},"    可能出错的代码\n",[95,170868,170869,170872],{"class":97,"line":1161},[95,170870,170871],{"class":101},"except",[95,170873,3721],{"class":105},[95,170875,170876],{"class":97,"line":1176},[95,170877,170878],{"class":105},"    出错后的处理代码\n",[10,170880,15118],{},[86,170882,170884],{"className":30363,"code":170883,"language":30365,"meta":14,"style":14},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[92,170885,170886,170892,170910,170916,170922],{"__ignoreMap":14},[95,170887,170888,170890],{"class":97,"line":98},[95,170889,170859],{"class":101},[95,170891,3721],{"class":105},[95,170893,170894,170896,170898,170900,170902,170904,170906,170908],{"class":97,"line":15},[95,170895,152363],{"class":105},[95,170897,151],{"class":101},[95,170899,2364],{"class":154},[95,170901,106],{"class":105},[95,170903,53798],{"class":154},[95,170905,106],{"class":105},[95,170907,152371],{"class":210},[95,170909,30482],{"class":105},[95,170911,170912,170914],{"class":97,"line":1161},[95,170913,31284],{"class":154},[95,170915,155738],{"class":105},[95,170917,170918,170920],{"class":97,"line":1176},[95,170919,170871],{"class":101},[95,170921,3721],{"class":105},[95,170923,170924,170926,170928,170931],{"class":97,"line":1182},[95,170925,31284],{"class":154},[95,170927,106],{"class":105},[95,170929,170930],{"class":210},"\"年龄必须是数字\"",[95,170932,112],{"class":105},[10,170934,170935,170936,170938],{},"不建议裸写 ",[92,170937,170871],{},"，最好指定异常类型。",[86,170940,170942],{"className":30363,"code":170941,"language":30365,"meta":14,"style":14},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[92,170943,170944,170950,170968,170974,170982],{"__ignoreMap":14},[95,170945,170946,170948],{"class":97,"line":98},[95,170947,170859],{"class":101},[95,170949,3721],{"class":105},[95,170951,170952,170954,170956,170958,170960,170962,170964,170966],{"class":97,"line":15},[95,170953,152363],{"class":105},[95,170955,151],{"class":101},[95,170957,2364],{"class":154},[95,170959,106],{"class":105},[95,170961,53798],{"class":154},[95,170963,106],{"class":105},[95,170965,152371],{"class":210},[95,170967,30482],{"class":105},[95,170969,170970,170972],{"class":97,"line":1161},[95,170971,31284],{"class":154},[95,170973,155738],{"class":105},[95,170975,170976,170978,170980],{"class":97,"line":1176},[95,170977,170871],{"class":101},[95,170979,152203],{"class":154},[95,170981,3721],{"class":105},[95,170983,170984,170986,170988,170990],{"class":97,"line":1182},[95,170985,31284],{"class":154},[95,170987,106],{"class":105},[95,170989,170930],{"class":210},[95,170991,112],{"class":105},[37,170993,170995],{"id":170994},"_94-捕获多个异常","9.4 捕获多个异常",[86,170997,170999],{"className":30363,"code":170998,"language":30365,"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",[92,171000,171001,171007,171028,171048,171055,171063,171074,171083],{"__ignoreMap":14},[95,171002,171003,171005],{"class":97,"line":98},[95,171004,170859],{"class":101},[95,171006,3721],{"class":105},[95,171008,171009,171012,171014,171016,171018,171020,171022,171024,171026],{"class":97,"line":15},[95,171010,171011],{"class":105},"    nums ",[95,171013,151],{"class":101},[95,171015,52203],{"class":105},[95,171017,323],{"class":154},[95,171019,12418],{"class":105},[95,171021,183],{"class":154},[95,171023,12418],{"class":105},[95,171025,177],{"class":154},[95,171027,33231],{"class":105},[95,171029,171030,171033,171035,171037,171039,171041,171043,171046],{"class":97,"line":1161},[95,171031,171032],{"class":105},"    index ",[95,171034,151],{"class":101},[95,171036,2364],{"class":154},[95,171038,106],{"class":105},[95,171040,53798],{"class":154},[95,171042,106],{"class":105},[95,171044,171045],{"class":210},"\"请输入索引:\"",[95,171047,30482],{"class":105},[95,171049,171050,171052],{"class":97,"line":1176},[95,171051,31284],{"class":154},[95,171053,171054],{"class":105},"(nums[index])\n",[95,171056,171057,171059,171061],{"class":97,"line":1182},[95,171058,170871],{"class":101},[95,171060,152203],{"class":154},[95,171062,3721],{"class":105},[95,171064,171065,171067,171069,171072],{"class":97,"line":1196},[95,171066,31284],{"class":154},[95,171068,106],{"class":105},[95,171070,171071],{"class":210},"\"索引必须是整数\"",[95,171073,112],{"class":105},[95,171075,171076,171078,171081],{"class":97,"line":1202},[95,171077,170871],{"class":101},[95,171079,171080],{"class":154}," IndexError",[95,171082,3721],{"class":105},[95,171084,171085,171087,171089,171092],{"class":97,"line":1293},[95,171086,31284],{"class":154},[95,171088,106],{"class":105},[95,171090,171091],{"class":210},"\"索引越界\"",[95,171093,112],{"class":105},[10,171095,171096],{},"多个异常使用相同处理逻辑：",[86,171098,171100],{"className":30363,"code":171099,"language":30365,"meta":14,"style":14},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[92,171101,171102,171108,171126,171139,171153],{"__ignoreMap":14},[95,171103,171104,171106],{"class":97,"line":98},[95,171105,170859],{"class":101},[95,171107,3721],{"class":105},[95,171109,171110,171112,171114,171116,171118,171120,171122,171124],{"class":97,"line":15},[95,171111,45578],{"class":105},[95,171113,151],{"class":101},[95,171115,2364],{"class":154},[95,171117,106],{"class":105},[95,171119,53798],{"class":154},[95,171121,106],{"class":105},[95,171123,155773],{"class":210},[95,171125,30482],{"class":105},[95,171127,171128,171130,171132,171134,171136],{"class":97,"line":1161},[95,171129,31284],{"class":154},[95,171131,106],{"class":105},[95,171133,552],{"class":154},[95,171135,156023],{"class":101},[95,171137,171138],{"class":105}," num)\n",[95,171140,171141,171143,171145,171147,171149,171151],{"class":97,"line":1176},[95,171142,170871],{"class":101},[95,171144,1640],{"class":105},[95,171146,154811],{"class":154},[95,171148,12418],{"class":105},[95,171150,170754],{"class":154},[95,171152,30771],{"class":105},[95,171154,171155,171157,171159,171162],{"class":97,"line":1182},[95,171156,31284],{"class":154},[95,171158,106],{"class":105},[95,171160,171161],{"class":210},"\"输入不合法\"",[95,171163,112],{"class":105},[37,171165,171167],{"id":171166},"_95-获取异常信息","9.5 获取异常信息",[86,171169,171171],{"className":30363,"code":171170,"language":30365,"meta":14,"style":14},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[92,171172,171173,171179,171193,171204],{"__ignoreMap":14},[95,171174,171175,171177],{"class":97,"line":98},[95,171176,170859],{"class":101},[95,171178,3721],{"class":105},[95,171180,171181,171183,171185,171187,171189,171191],{"class":97,"line":15},[95,171182,45578],{"class":105},[95,171184,151],{"class":101},[95,171186,2364],{"class":154},[95,171188,106],{"class":105},[95,171190,155857],{"class":210},[95,171192,112],{"class":105},[95,171194,171195,171197,171199,171201],{"class":97,"line":1161},[95,171196,170871],{"class":101},[95,171198,152203],{"class":154},[95,171200,64581],{"class":101},[95,171202,171203],{"class":105}," e:\n",[95,171205,171206,171208,171210,171212,171215,171217,171219,171221,171223],{"class":97,"line":1176},[95,171207,31284],{"class":154},[95,171209,106],{"class":105},[95,171211,158],{"class":101},[95,171213,171214],{"class":210},"\"出错了:",[95,171216,1002],{"class":154},[95,171218,180],{"class":105},[95,171220,1052],{"class":154},[95,171222,357],{"class":210},[95,171224,112],{"class":105},[10,171226,146434],{},[86,171228,171231],{"className":171229,"code":171230,"language":5170,"meta":14},[5168],"出错了:invalid literal for int() with base 10: 'abc'\n",[92,171232,171230],{"__ignoreMap":14},[37,171234,171236],{"id":171235},"_96-else和finally","9.6 else和finally",[10,171238,171239,171241],{},[92,171240,1683],{},"：没有异常时执行。",[10,171243,171244,171247],{},[92,171245,171246],{},"finally","：无论是否异常都会执行。",[86,171249,171251],{"className":30363,"code":171250,"language":30365,"meta":14,"style":14},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[92,171252,171253,171259,171277,171285,171295,171301,171322,171328],{"__ignoreMap":14},[95,171254,171255,171257],{"class":97,"line":98},[95,171256,170859],{"class":101},[95,171258,3721],{"class":105},[95,171260,171261,171263,171265,171267,171269,171271,171273,171275],{"class":97,"line":15},[95,171262,45578],{"class":105},[95,171264,151],{"class":101},[95,171266,2364],{"class":154},[95,171268,106],{"class":105},[95,171270,53798],{"class":154},[95,171272,106],{"class":105},[95,171274,155773],{"class":210},[95,171276,30482],{"class":105},[95,171278,171279,171281,171283],{"class":97,"line":1161},[95,171280,170871],{"class":101},[95,171282,152203],{"class":154},[95,171284,3721],{"class":105},[95,171286,171287,171289,171291,171293],{"class":97,"line":1176},[95,171288,31284],{"class":154},[95,171290,106],{"class":105},[95,171292,153191],{"class":210},[95,171294,112],{"class":105},[95,171296,171297,171299],{"class":97,"line":1182},[95,171298,1683],{"class":101},[95,171300,3721],{"class":105},[95,171302,171303,171305,171307,171309,171312,171314,171316,171318,171320],{"class":97,"line":1196},[95,171304,31284],{"class":154},[95,171306,106],{"class":105},[95,171308,158],{"class":101},[95,171310,171311],{"class":210},"\"输入正确:",[95,171313,1002],{"class":154},[95,171315,1647],{"class":105},[95,171317,1052],{"class":154},[95,171319,357],{"class":210},[95,171321,112],{"class":105},[95,171323,171324,171326],{"class":97,"line":1202},[95,171325,171246],{"class":101},[95,171327,3721],{"class":105},[95,171329,171330,171332,171334,171337],{"class":97,"line":1293},[95,171331,31284],{"class":154},[95,171333,106],{"class":105},[95,171335,171336],{"class":210},"\"程序结束\"",[95,171338,112],{"class":105},[10,171340,171341,171343],{},[92,171342,171246],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[37,171345,171347],{"id":171346},"_97-抛出异常","9.7 抛出异常",[10,171349,171350],{},"程序可以主动抛出异常。",[86,171352,171354],{"className":30363,"code":171353,"language":30365,"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",[92,171355,171356,171365,171377,171390,171410,171414,171418],{"__ignoreMap":14},[95,171357,171358,171360,171363],{"class":97,"line":98},[95,171359,31932],{"class":101},[95,171361,171362],{"class":1945}," set_age",[95,171364,161392],{"class":105},[95,171366,171367,171369,171371,171373,171375],{"class":97,"line":15},[95,171368,3083],{"class":101},[95,171370,15690],{"class":105},[95,171372,1016],{"class":101},[95,171374,4075],{"class":154},[95,171376,3721],{"class":105},[95,171378,171379,171381,171383,171385,171388],{"class":97,"line":1161},[95,171380,103409],{"class":101},[95,171382,152203],{"class":154},[95,171384,106],{"class":105},[95,171386,171387],{"class":210},"\"年龄不能为负数\"",[95,171389,112],{"class":105},[95,171391,171392,171394,171396,171398,171400,171402,171404,171406,171408],{"class":97,"line":1176},[95,171393,31284],{"class":154},[95,171395,106],{"class":105},[95,171397,158],{"class":101},[95,171399,161960],{"class":210},[95,171401,1002],{"class":154},[95,171403,70198],{"class":105},[95,171405,1052],{"class":154},[95,171407,357],{"class":210},[95,171409,112],{"class":105},[95,171411,171412],{"class":97,"line":1182},[95,171413,2382],{"emptyLinePlaceholder":21},[95,171415,171416],{"class":97,"line":1196},[95,171417,2382],{"emptyLinePlaceholder":21},[95,171419,171420,171423,171425,171427],{"class":97,"line":1202},[95,171421,171422],{"class":105},"set_age(",[95,171424,638],{"class":101},[95,171426,323],{"class":154},[95,171428,112],{"class":105},[10,171430,171431],{},"调用者可以捕获：",[86,171433,171435],{"className":30363,"code":171434,"language":30365,"meta":14,"style":14},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[92,171436,171437,171443,171454,171464],{"__ignoreMap":14},[95,171438,171439,171441],{"class":97,"line":98},[95,171440,170859],{"class":101},[95,171442,3721],{"class":105},[95,171444,171445,171448,171450,171452],{"class":97,"line":15},[95,171446,171447],{"class":105},"    set_age(",[95,171449,638],{"class":101},[95,171451,323],{"class":154},[95,171453,112],{"class":105},[95,171455,171456,171458,171460,171462],{"class":97,"line":1161},[95,171457,170871],{"class":101},[95,171459,152203],{"class":154},[95,171461,64581],{"class":101},[95,171463,171203],{"class":105},[95,171465,171466,171468],{"class":97,"line":1176},[95,171467,31284],{"class":154},[95,171469,66976],{"class":105},[37,171471,171473],{"id":171472},"_98-自定义异常","9.8 自定义异常",[86,171475,171477],{"className":30363,"code":171476,"language":30365,"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",[92,171478,171479,171493,171497,171501,171505,171513,171523,171534,171544,171548,171552,171558,171575,171586],{"__ignoreMap":14},[95,171480,171481,171483,171486,171488,171491],{"class":97,"line":98},[95,171482,14677],{"class":101},[95,171484,171485],{"class":1945}," BalanceNotEnoughError",[95,171487,106],{"class":105},[95,171489,171490],{"class":154},"Exception",[95,171492,30771],{"class":105},[95,171494,171495],{"class":97,"line":15},[95,171496,149514],{"class":101},[95,171498,171499],{"class":97,"line":1161},[95,171500,2382],{"emptyLinePlaceholder":21},[95,171502,171503],{"class":97,"line":1176},[95,171504,2382],{"emptyLinePlaceholder":21},[95,171506,171507,171509,171511],{"class":97,"line":1182},[95,171508,31932],{"class":101},[95,171510,150163],{"class":1945},[95,171512,162789],{"class":105},[95,171514,171515,171517,171519,171521],{"class":97,"line":1196},[95,171516,3083],{"class":101},[95,171518,150119],{"class":105},[95,171520,1066],{"class":101},[95,171522,162566],{"class":105},[95,171524,171525,171527,171530,171532],{"class":97,"line":1202},[95,171526,103409],{"class":101},[95,171528,171529],{"class":105}," BalanceNotEnoughError(",[95,171531,150214],{"class":210},[95,171533,112],{"class":105},[95,171535,171536,171538,171540,171542],{"class":97,"line":1293},[95,171537,4072],{"class":101},[95,171539,162796],{"class":105},[95,171541,638],{"class":101},[95,171543,150152],{"class":105},[95,171545,171546],{"class":97,"line":1299},[95,171547,2382],{"emptyLinePlaceholder":21},[95,171549,171550],{"class":97,"line":1311},[95,171551,2382],{"emptyLinePlaceholder":21},[95,171553,171554,171556],{"class":97,"line":1594},[95,171555,170859],{"class":101},[95,171557,3721],{"class":105},[95,171559,171560,171562,171564,171567,171569,171571,171573],{"class":97,"line":1599},[95,171561,162467],{"class":105},[95,171563,151],{"class":101},[95,171565,171566],{"class":105}," withdraw(",[95,171568,417],{"class":154},[95,171570,12418],{"class":105},[95,171572,1704],{"class":154},[95,171574,112],{"class":105},[95,171576,171577,171579,171582,171584],{"class":97,"line":1605},[95,171578,170871],{"class":101},[95,171580,171581],{"class":105}," BalanceNotEnoughError ",[95,171583,31368],{"class":101},[95,171585,171203],{"class":105},[95,171587,171588,171590],{"class":97,"line":1610},[95,171589,31284],{"class":154},[95,171591,66976],{"class":105},[10,171593,171594],{},"入门阶段大多数情况使用内置异常即可。",[37,171596,171598],{"id":171597},"_99-traceback","9.9 traceback",[10,171600,171601],{},"调试时可以输出完整异常堆栈。",[86,171603,171605],{"className":30363,"code":171604,"language":30365,"meta":14,"style":14},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[92,171606,171607,171614,171618,171624,171634,171642],{"__ignoreMap":14},[95,171608,171609,171611],{"class":97,"line":98},[95,171610,30377],{"class":101},[95,171612,171613],{"class":105}," traceback\n",[95,171615,171616],{"class":97,"line":15},[95,171617,2382],{"emptyLinePlaceholder":21},[95,171619,171620,171622],{"class":97,"line":1161},[95,171621,170859],{"class":101},[95,171623,3721],{"class":105},[95,171625,171626,171628,171630,171632],{"class":97,"line":1176},[95,171627,1967],{"class":154},[95,171629,106],{"class":105},[95,171631,155857],{"class":210},[95,171633,112],{"class":105},[95,171635,171636,171638,171640],{"class":97,"line":1182},[95,171637,170871],{"class":101},[95,171639,152203],{"class":154},[95,171641,3721],{"class":105},[95,171643,171644],{"class":97,"line":1196},[95,171645,171646],{"class":105},"    traceback.print_exc()\n",[10,171648,171649],{},"日志系统中常把异常堆栈记录到文件。",[37,171651,171653],{"id":171652},"_910-什么是模块","9.10 什么是模块",[10,171655,171656,171657,125960],{},"模块就是一个 ",[92,171658,146329],{},[10,171660,171661,171662,24603],{},"例如创建 ",[92,171663,171664],{},"my_math.py",[86,171666,171668],{"className":30363,"code":171667,"language":30365,"meta":14,"style":14},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[92,171669,171670,171678,171688,171692,171696,171705],{"__ignoreMap":14},[95,171671,171672,171674,171676],{"class":97,"line":98},[95,171673,31932],{"class":101},[95,171675,5192],{"class":1945},[95,171677,151070],{"class":105},[95,171679,171680,171682,171684,171686],{"class":97,"line":15},[95,171681,4072],{"class":101},[95,171683,10852],{"class":105},[95,171685,587],{"class":101},[95,171687,151081],{"class":105},[95,171689,171690],{"class":97,"line":1161},[95,171691,2382],{"emptyLinePlaceholder":21},[95,171693,171694],{"class":97,"line":1176},[95,171695,2382],{"emptyLinePlaceholder":21},[95,171697,171698,171700,171703],{"class":97,"line":1182},[95,171699,31932],{"class":101},[95,171701,171702],{"class":1945}," sub",[95,171704,151070],{"class":105},[95,171706,171707,171709,171711,171713],{"class":97,"line":1196},[95,171708,4072],{"class":101},[95,171710,10852],{"class":105},[95,171712,638],{"class":101},[95,171714,151081],{"class":105},[10,171716,171717],{},"在另一个文件中导入：",[86,171719,171721],{"className":30363,"code":171720,"language":30365,"meta":14,"style":14},"import my_math\n\nprint(my_math.add(1, 2))\n",[92,171722,171723,171730,171734],{"__ignoreMap":14},[95,171724,171725,171727],{"class":97,"line":98},[95,171726,30377],{"class":101},[95,171728,171729],{"class":105}," my_math\n",[95,171731,171732],{"class":97,"line":15},[95,171733,2382],{"emptyLinePlaceholder":21},[95,171735,171736,171738,171741,171743,171745,171747],{"class":97,"line":1161},[95,171737,30400],{"class":154},[95,171739,171740],{"class":105},"(my_math.add(",[95,171742,323],{"class":154},[95,171744,12418],{"class":105},[95,171746,183],{"class":154},[95,171748,30482],{"class":105},[37,171750,171752],{"id":171751},"_911-import导入","9.11 import导入",[66,171754,171756],{"id":171755},"_9111-导入模块","9.11.1 导入模块",[86,171758,171760],{"className":30363,"code":171759,"language":30365,"meta":14,"style":14},"import random\n\nprint(random.randint(1, 10))\n",[92,171761,171762,171768,171772],{"__ignoreMap":14},[95,171763,171764,171766],{"class":97,"line":98},[95,171765,30377],{"class":101},[95,171767,45313],{"class":105},[95,171769,171770],{"class":97,"line":15},[95,171771,2382],{"emptyLinePlaceholder":21},[95,171773,171774,171776,171779,171781,171783,171785],{"class":97,"line":1161},[95,171775,30400],{"class":154},[95,171777,171778],{"class":105},"(random.randint(",[95,171780,323],{"class":154},[95,171782,12418],{"class":105},[95,171784,552],{"class":154},[95,171786,30482],{"class":105},[66,171788,171790],{"id":171789},"_9112-导入指定内容","9.11.2 导入指定内容",[86,171792,171794],{"className":30363,"code":171793,"language":30365,"meta":14,"style":14},"from random import randint\n\nprint(randint(1, 10))\n",[92,171795,171796,171807,171811],{"__ignoreMap":14},[95,171797,171798,171800,171802,171804],{"class":97,"line":98},[95,171799,30722],{"class":101},[95,171801,57773],{"class":105},[95,171803,30377],{"class":101},[95,171805,171806],{"class":105}," randint\n",[95,171808,171809],{"class":97,"line":15},[95,171810,2382],{"emptyLinePlaceholder":21},[95,171812,171813,171815,171818,171820,171822,171824],{"class":97,"line":1161},[95,171814,30400],{"class":154},[95,171816,171817],{"class":105},"(randint(",[95,171819,323],{"class":154},[95,171821,12418],{"class":105},[95,171823,552],{"class":154},[95,171825,30482],{"class":105},[66,171827,171829],{"id":171828},"_9113-起别名","9.11.3 起别名",[86,171831,171833],{"className":30363,"code":171832,"language":30365,"meta":14,"style":14},"import random as rd\n\nprint(rd.randint(1, 10))\n",[92,171834,171835,171846,171850],{"__ignoreMap":14},[95,171836,171837,171839,171841,171843],{"class":97,"line":98},[95,171838,30377],{"class":101},[95,171840,57773],{"class":105},[95,171842,31368],{"class":101},[95,171844,171845],{"class":105}," rd\n",[95,171847,171848],{"class":97,"line":15},[95,171849,2382],{"emptyLinePlaceholder":21},[95,171851,171852,171854,171857,171859,171861,171863],{"class":97,"line":1161},[95,171853,30400],{"class":154},[95,171855,171856],{"class":105},"(rd.randint(",[95,171858,323],{"class":154},[95,171860,12418],{"class":105},[95,171862,552],{"class":154},[95,171864,30482],{"class":105},[86,171866,171868],{"className":30363,"code":171867,"language":30365,"meta":14,"style":14},"from random import randint as rint\n\nprint(rint(1, 10))\n",[92,171869,171870,171886,171890],{"__ignoreMap":14},[95,171871,171872,171874,171876,171878,171881,171883],{"class":97,"line":98},[95,171873,30722],{"class":101},[95,171875,57773],{"class":105},[95,171877,30377],{"class":101},[95,171879,171880],{"class":105}," randint ",[95,171882,31368],{"class":101},[95,171884,171885],{"class":105}," rint\n",[95,171887,171888],{"class":97,"line":15},[95,171889,2382],{"emptyLinePlaceholder":21},[95,171891,171892,171894,171897,171899,171901,171903],{"class":97,"line":1161},[95,171893,30400],{"class":154},[95,171895,171896],{"class":105},"(rint(",[95,171898,323],{"class":154},[95,171900,12418],{"class":105},[95,171902,552],{"class":154},[95,171904,30482],{"class":105},[66,171906,171908],{"id":171907},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[86,171910,171912],{"className":30363,"code":171911,"language":30365,"meta":14,"style":14},"from random import *\n",[92,171913,171914],{"__ignoreMap":14},[95,171915,171916,171918,171920,171922],{"class":97,"line":98},[95,171917,30722],{"class":101},[95,171919,57773],{"class":105},[95,171921,30377],{"class":101},[95,171923,171924],{"class":101}," *\n",[10,171926,171927],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[37,171929,171931],{"id":171930},"_912-常用内置模块","9.12 常用内置模块",[66,171933,171935],{"id":171934},"_9121-random","9.12.1 random",[86,171937,171939],{"className":30363,"code":171938,"language":30365,"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",[92,171940,171941,171947,171951,171965,171984],{"__ignoreMap":14},[95,171942,171943,171945],{"class":97,"line":98},[95,171944,30377],{"class":101},[95,171946,45313],{"class":105},[95,171948,171949],{"class":97,"line":15},[95,171950,2382],{"emptyLinePlaceholder":21},[95,171952,171953,171955,171957,171959,171961,171963],{"class":97,"line":1161},[95,171954,30400],{"class":154},[95,171956,171778],{"class":105},[95,171958,323],{"class":154},[95,171960,12418],{"class":105},[95,171962,552],{"class":154},[95,171964,30482],{"class":105},[95,171966,171967,171969,171972,171974,171976,171978,171980,171982],{"class":97,"line":1176},[95,171968,30400],{"class":154},[95,171970,171971],{"class":105},"(random.choice([",[95,171973,149865],{"class":210},[95,171975,12418],{"class":105},[95,171977,150913],{"class":210},[95,171979,12418],{"class":105},[95,171981,159708],{"class":210},[95,171983,33128],{"class":105},[95,171985,171986,171988,171991,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011,172013],{"class":97,"line":1182},[95,171987,30400],{"class":154},[95,171989,171990],{"class":105},"(random.sample([",[95,171992,323],{"class":154},[95,171994,12418],{"class":105},[95,171996,183],{"class":154},[95,171998,12418],{"class":105},[95,172000,177],{"class":154},[95,172002,12418],{"class":105},[95,172004,399],{"class":154},[95,172006,12418],{"class":105},[95,172008,425],{"class":154},[95,172010,112179],{"class":105},[95,172012,183],{"class":154},[95,172014,30482],{"class":105},[66,172016,172018],{"id":172017},"_9122-time","9.12.2 time",[86,172020,172022],{"className":30363,"code":172021,"language":30365,"meta":14,"style":14},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[92,172023,172024,172030,172034,172041,172049],{"__ignoreMap":14},[95,172025,172026,172028],{"class":97,"line":98},[95,172027,30377],{"class":101},[95,172029,31814],{"class":105},[95,172031,172032],{"class":97,"line":15},[95,172033,2382],{"emptyLinePlaceholder":21},[95,172035,172036,172038],{"class":97,"line":1161},[95,172037,30400],{"class":154},[95,172039,172040],{"class":105},"(time.time())\n",[95,172042,172043,172045,172047],{"class":97,"line":1176},[95,172044,95048],{"class":105},[95,172046,323],{"class":154},[95,172048,112],{"class":105},[95,172050,172051,172053,172055,172058],{"class":97,"line":1182},[95,172052,30400],{"class":154},[95,172054,106],{"class":105},[95,172056,172057],{"class":210},"\"1秒后执行\"",[95,172059,112],{"class":105},[66,172061,172063],{"id":172062},"_9123-datetime","9.12.3 datetime",[86,172065,172067],{"className":30363,"code":172066,"language":30365,"meta":14,"style":14},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[92,172068,172069,172081,172085,172095,172102],{"__ignoreMap":14},[95,172070,172071,172073,172076,172078],{"class":97,"line":98},[95,172072,30722],{"class":101},[95,172074,172075],{"class":105}," datetime ",[95,172077,30377],{"class":101},[95,172079,172080],{"class":105}," datetime\n",[95,172082,172083],{"class":97,"line":15},[95,172084,2382],{"emptyLinePlaceholder":21},[95,172086,172087,172090,172092],{"class":97,"line":1161},[95,172088,172089],{"class":105},"now ",[95,172091,151],{"class":101},[95,172093,172094],{"class":105}," datetime.now()\n",[95,172096,172097,172099],{"class":97,"line":1176},[95,172098,30400],{"class":154},[95,172100,172101],{"class":105},"(now)\n",[95,172103,172104,172106,172109,172112,172114,172117],{"class":97,"line":1182},[95,172105,30400],{"class":154},[95,172107,172108],{"class":105},"(now.strftime(",[95,172110,172111],{"class":210},"\"%Y-%m-",[95,172113,156668],{"class":154},[95,172115,172116],{"class":210}," %H:%M:%S\"",[95,172118,30482],{"class":105},[66,172120,172122],{"id":172121},"_9124-os","9.12.4 os",[86,172124,172126],{"className":30363,"code":172125,"language":30365,"meta":14,"style":14},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[92,172127,172128,172134,172138,172145],{"__ignoreMap":14},[95,172129,172130,172132],{"class":97,"line":98},[95,172131,30377],{"class":101},[95,172133,45290],{"class":105},[95,172135,172136],{"class":97,"line":15},[95,172137,2382],{"emptyLinePlaceholder":21},[95,172139,172140,172142],{"class":97,"line":1161},[95,172141,30400],{"class":154},[95,172143,172144],{"class":105},"(os.getcwd())\n",[95,172146,172147,172149,172152,172155],{"class":97,"line":1176},[95,172148,30400],{"class":154},[95,172150,172151],{"class":105},"(os.listdir(",[95,172153,172154],{"class":210},"\".\"",[95,172156,30482],{"class":105},[66,172158,172160],{"id":172159},"_9125-sys","9.12.5 sys",[86,172162,172164],{"className":30363,"code":172163,"language":30365,"meta":14,"style":14},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[92,172165,172166,172173,172177,172184],{"__ignoreMap":14},[95,172167,172168,172170],{"class":97,"line":98},[95,172169,30377],{"class":101},[95,172171,172172],{"class":105}," sys\n",[95,172174,172175],{"class":97,"line":15},[95,172176,2382],{"emptyLinePlaceholder":21},[95,172178,172179,172181],{"class":97,"line":1161},[95,172180,30400],{"class":154},[95,172182,172183],{"class":105},"(sys.version)\n",[95,172185,172186,172188],{"class":97,"line":1176},[95,172187,30400],{"class":154},[95,172189,172190],{"class":105},"(sys.path)\n",[37,172192,172194,172195,172197,172198,357],{"id":172193},"_913-if-name-main","9.13 if ",[255,172196,79787],{}," == \"",[255,172199,102035],{},[10,172201,172202,172203,172206],{},"模块被直接运行和被导入时，",[92,172204,172205],{},"__name__"," 的值不同。",[10,172208,172209,172210,24603],{},"创建 ",[92,172211,172212],{},"my_module.py",[86,172214,172216],{"className":30363,"code":172215,"language":30365,"meta":14,"style":14},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[92,172217,172218,172226,172236,172240,172244,172256],{"__ignoreMap":14},[95,172219,172220,172222,172224],{"class":97,"line":98},[95,172221,31932],{"class":101},[95,172223,5192],{"class":1945},[95,172225,151070],{"class":105},[95,172227,172228,172230,172232,172234],{"class":97,"line":15},[95,172229,4072],{"class":101},[95,172231,10852],{"class":105},[95,172233,587],{"class":101},[95,172235,151081],{"class":105},[95,172237,172238],{"class":97,"line":1161},[95,172239,2382],{"emptyLinePlaceholder":21},[95,172241,172242],{"class":97,"line":1176},[95,172243,2382],{"emptyLinePlaceholder":21},[95,172245,172246,172248,172250,172252,172254],{"class":97,"line":1182},[95,172247,1513],{"class":101},[95,172249,31205],{"class":154},[95,172251,101536],{"class":101},[95,172253,101539],{"class":210},[95,172255,3721],{"class":105},[95,172257,172258,172260,172262,172264,172266,172268],{"class":97,"line":1196},[95,172259,31284],{"class":154},[95,172261,166577],{"class":105},[95,172263,323],{"class":154},[95,172265,12418],{"class":105},[95,172267,183],{"class":154},[95,172269,30482],{"class":105},[10,172271,172272],{},"作用：",[49,172274,172275,172278],{},[52,172276,172277],{},"直接运行该文件时，执行测试代码。",[52,172279,172280],{},"被其他文件导入时，不执行测试代码。",[10,172282,172283],{},"这是写模块时很常用的习惯。",[37,172285,172287],{"id":172286},"_914-包","9.14 包",[10,172289,172290,172291,172294],{},"包是包含 ",[92,172292,172293],{},"__init__.py"," 的目录，用于组织多个模块。",[10,172296,172297],{},"目录结构：",[86,172299,172302],{"className":172300,"code":172301,"language":5170,"meta":14},[5168],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[92,172303,172301],{"__ignoreMap":14},[10,172305,172306],{},"导入：",[86,172308,172310],{"className":30363,"code":172309,"language":30365,"meta":14,"style":14},"from utils.file_utils import read_file\n",[92,172311,172312],{"__ignoreMap":14},[95,172313,172314,172316,172319,172321],{"class":97,"line":98},[95,172315,30722],{"class":101},[95,172317,172318],{"class":105}," utils.file_utils ",[95,172320,30377],{"class":101},[95,172322,172323],{"class":105}," read_file\n",[10,172325,172326,172328],{},[92,172327,172293],{}," 可以为空，也可以写包初始化逻辑。",[37,172330,172332],{"id":172331},"_915-第三方包","9.15 第三方包",[10,172334,172335,172336,172338],{},"第三方包通过 ",[92,172337,23815],{}," 安装。",[86,172340,172342],{"className":23806,"code":172341,"language":23808,"meta":14,"style":14},"pip install requests\n",[92,172343,172344],{"__ignoreMap":14},[95,172345,172346,172348,172350],{"class":97,"line":98},[95,172347,23815],{"class":1945},[95,172349,23818],{"class":210},[95,172351,146075],{"class":210},[10,172353,172354],{},"使用：",[86,172356,172358],{"className":30363,"code":172357,"language":30365,"meta":14,"style":14},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[92,172359,172360,172366,172370,172385],{"__ignoreMap":14},[95,172361,172362,172364],{"class":97,"line":98},[95,172363,30377],{"class":101},[95,172365,146075],{"class":105},[95,172367,172368],{"class":97,"line":15},[95,172369,2382],{"emptyLinePlaceholder":21},[95,172371,172372,172375,172377,172380,172383],{"class":97,"line":1161},[95,172373,172374],{"class":105},"response ",[95,172376,151],{"class":101},[95,172378,172379],{"class":105}," requests.get(",[95,172381,172382],{"class":210},"\"https:\u002F\u002Fwww.example.com\"",[95,172384,112],{"class":105},[95,172386,172387,172389],{"class":97,"line":1176},[95,172388,30400],{"class":154},[95,172390,172391],{"class":105},"(response.status_code)\n",[10,172393,172394],{},"查看已安装包：",[86,172396,172398],{"className":23806,"code":172397,"language":23808,"meta":14,"style":14},"pip list\n",[92,172399,172400],{"__ignoreMap":14},[95,172401,172402,172404],{"class":97,"line":98},[95,172403,23815],{"class":1945},[95,172405,118932],{"class":210},[10,172407,172408],{},"导出项目依赖：",[86,172410,172411],{"className":23806,"code":146270,"language":23808,"meta":14,"style":14},[92,172412,172413],{"__ignoreMap":14},[95,172414,172415,172417,172419,172421],{"class":97,"line":98},[95,172416,23815],{"class":1945},[95,172418,146279],{"class":210},[95,172420,26207],{"class":101},[95,172422,146284],{"class":210},[10,172424,172425],{},"安装项目依赖：",[86,172427,172428],{"className":23806,"code":146290,"language":23808,"meta":14,"style":14},[92,172429,172430],{"__ignoreMap":14},[95,172431,172432,172434,172436,172438],{"class":97,"line":98},[95,172433,23815],{"class":1945},[95,172435,23818],{"class":210},[95,172437,119616],{"class":154},[95,172439,146284],{"class":210},[37,172441,172443],{"id":172442},"_916-模块搜索路径","9.16 模块搜索路径",[10,172445,172446,172447,172450],{},"Python 导入模块时会在 ",[92,172448,172449],{},"sys.path"," 中查找。",[86,172452,172454],{"className":30363,"code":172453,"language":30365,"meta":14,"style":14},"import sys\n\nfor path in sys.path:\n    print(path)\n",[92,172455,172456,172462,172466,172478],{"__ignoreMap":14},[95,172457,172458,172460],{"class":97,"line":98},[95,172459,30377],{"class":101},[95,172461,172172],{"class":105},[95,172463,172464],{"class":97,"line":15},[95,172465,2382],{"emptyLinePlaceholder":21},[95,172467,172468,172470,172473,172475],{"class":97,"line":1161},[95,172469,3007],{"class":101},[95,172471,172472],{"class":105}," path ",[95,172474,26028],{"class":101},[95,172476,172477],{"class":105}," sys.path:\n",[95,172479,172480,172482],{"class":97,"line":1176},[95,172481,31284],{"class":154},[95,172483,169206],{"class":105},[10,172485,172486],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[10,172488,157600],{},[86,172490,172493],{"className":172491,"code":172492,"language":5170,"meta":14},[5168],"random.py\njson.py\ntime.py\n",[92,172494,172492],{"__ignoreMap":14},[10,172496,172497],{},"这些文件名可能导致导入异常。",[37,172499,172501],{"id":172500},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[10,172503,172297],{},[86,172505,172508],{"className":172506,"code":172507,"language":5170,"meta":14},[5168],"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",[92,172509,172507],{"__ignoreMap":14},[10,172511,172512,24603],{},[92,172513,172514],{},"utils\u002Ffile_utils.py",[86,172516,172518],{"className":30363,"code":172517,"language":30365,"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",[92,172519,172520,172526,172536,172540,172544,172554,172564,172572,172578,172582,172609,172619,172623,172627,172637,172663],{"__ignoreMap":14},[95,172521,172522,172524],{"class":97,"line":98},[95,172523,30377],{"class":101},[95,172525,147068],{"class":105},[95,172527,172528,172530,172532,172534],{"class":97,"line":15},[95,172529,30722],{"class":101},[95,172531,108288],{"class":105},[95,172533,30377],{"class":101},[95,172535,108293],{"class":105},[95,172537,172538],{"class":97,"line":1161},[95,172539,2382],{"emptyLinePlaceholder":21},[95,172541,172542],{"class":97,"line":1176},[95,172543,2382],{"emptyLinePlaceholder":21},[95,172545,172546,172548,172551],{"class":97,"line":1182},[95,172547,31932],{"class":101},[95,172549,172550],{"class":1945}," read_json",[95,172552,172553],{"class":105},"(path):\n",[95,172555,172556,172559,172561],{"class":97,"line":1196},[95,172557,172558],{"class":105},"    path ",[95,172560,151],{"class":101},[95,172562,172563],{"class":105}," Path(path)\n",[95,172565,172566,172568,172570],{"class":97,"line":1202},[95,172567,3083],{"class":101},[95,172569,38915],{"class":101},[95,172571,169287],{"class":105},[95,172573,172574,172576],{"class":97,"line":1293},[95,172575,14735],{"class":101},[95,172577,51815],{"class":105},[95,172579,172580],{"class":97,"line":1299},[95,172581,2382],{"emptyLinePlaceholder":21},[95,172583,172584,172586,172588,172591,172593,172595,172597,172599,172601,172603,172605,172607],{"class":97,"line":1311},[95,172585,34163],{"class":101},[95,172587,146768],{"class":154},[95,172589,172590],{"class":105},"(path, ",[95,172592,146778],{"class":210},[95,172594,12418],{"class":105},[95,172596,146783],{"class":5199},[95,172598,151],{"class":101},[95,172600,146788],{"class":210},[95,172602,13697],{"class":105},[95,172604,31368],{"class":101},[95,172606,148130],{"class":5199},[95,172608,3721],{"class":105},[95,172610,172611,172613,172615,172617],{"class":97,"line":1594},[95,172612,14735],{"class":101},[95,172614,148141],{"class":105},[95,172616,45339],{"class":5199},[95,172618,112],{"class":105},[95,172620,172621],{"class":97,"line":1599},[95,172622,2382],{"emptyLinePlaceholder":21},[95,172624,172625],{"class":97,"line":1605},[95,172626,2382],{"emptyLinePlaceholder":21},[95,172628,172629,172631,172634],{"class":97,"line":1610},[95,172630,31932],{"class":101},[95,172632,172633],{"class":1945}," write_json",[95,172635,172636],{"class":105},"(path, data):\n",[95,172638,172639,172641,172643,172645,172647,172649,172651,172653,172655,172657,172659,172661],{"class":97,"line":1624},[95,172640,34163],{"class":101},[95,172642,146768],{"class":154},[95,172644,172590],{"class":105},[95,172646,151953],{"class":210},[95,172648,12418],{"class":105},[95,172650,146783],{"class":5199},[95,172652,151],{"class":101},[95,172654,146788],{"class":210},[95,172656,13697],{"class":105},[95,172658,31368],{"class":101},[95,172660,148130],{"class":5199},[95,172662,3721],{"class":105},[95,172664,172665,172668,172670,172672,172674,172676,172678,172680,172682,172684,172686],{"class":97,"line":1629},[95,172666,172667],{"class":105},"        json.dump(data, ",[95,172669,45339],{"class":5199},[95,172671,12418],{"class":105},[95,172673,147114],{"class":5199},[95,172675,151],{"class":101},[95,172677,33972],{"class":154},[95,172679,12418],{"class":105},[95,172681,151989],{"class":5199},[95,172683,151],{"class":101},[95,172685,183],{"class":154},[95,172687,112],{"class":105},[10,172689,172690,24603],{},[92,172691,154584],{},[86,172693,172695],{"className":30363,"code":172694,"language":30365,"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",[92,172696,172697,172708,172712,172725,172745],{"__ignoreMap":14},[95,172698,172699,172701,172703,172705],{"class":97,"line":98},[95,172700,30722],{"class":101},[95,172702,172318],{"class":105},[95,172704,30377],{"class":101},[95,172706,172707],{"class":105}," read_json, write_json\n",[95,172709,172710],{"class":97,"line":15},[95,172711,2382],{"emptyLinePlaceholder":21},[95,172713,172714,172716,172718,172721,172723],{"class":97,"line":1161},[95,172715,159693],{"class":105},[95,172717,151],{"class":101},[95,172719,172720],{"class":105}," read_json(",[95,172722,151808],{"class":210},[95,172724,112],{"class":105},[95,172726,172727,172729,172731,172733,172735,172737,172739,172741,172743],{"class":97,"line":1176},[95,172728,170511],{"class":105},[95,172730,62656],{"class":210},[95,172732,51414],{"class":105},[95,172734,149865],{"class":210},[95,172736,12418],{"class":105},[95,172738,151449],{"class":210},[95,172740,51414],{"class":105},[95,172742,1095],{"class":154},[95,172744,165129],{"class":105},[95,172746,172747,172750,172752],{"class":97,"line":1182},[95,172748,172749],{"class":105},"write_json(",[95,172751,151808],{"class":210},[95,172753,172754],{"class":105},", students)\n",[37,172756,172758],{"id":172757},"_918-易错点","9.18 易错点",[49,172760,172761,172764,172769,172774,172777,172780],{},[52,172762,172763],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[52,172765,172766,172767,28370],{},"能指定异常类型就不要裸写 ",[92,172768,170871],{},[52,172770,172771,172773],{},[92,172772,171246],{}," 无论是否出错都会执行。",[52,172775,172776],{},"模块文件名不要和标准库重名。",[52,172778,172779],{},"导入自己写的模块时，要注意运行目录。",[52,172781,172782],{},"第三方包要安装到当前解释器或虚拟环境中。",[37,172784,172786],{"id":172785},"_919-本章练习","9.19 本章练习",[49,172788,172789,172792,172795,172801,172808],{},[52,172790,172791],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[52,172793,172794],{},"写函数读取文件，如果文件不存在则返回空字符串。",[52,172796,172209,172797,172800],{},[92,172798,172799],{},"math_utils.py","，实现加减乘除函数并导入使用。",[52,172802,172803,172804,172807],{},"创建一个 ",[92,172805,172806],{},"utils"," 包，把 JSON 读写函数放进去。",[52,172809,172810],{},"写一个程序，捕获除零异常和输入格式异常。",[5109,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":1161,"text":171756},{"id":171789,"depth":1161,"text":171790},{"id":171828,"depth":1161,"text":171829},{"id":171907,"depth":1161,"text":171908},{"id":171930,"depth":15,"text":171931,"children":172833},[172834,172835,172836,172837,172838],{"id":171934,"depth":1161,"text":171935},{"id":172017,"depth":1161,"text":172018},{"id":172062,"depth":1161,"text":172063},{"id":172121,"depth":1161,"text":172122},{"id":172159,"depth":1161,"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":23360},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172853,"title":172854,"body":172855,"description":173018,"extension":18,"meta":173019,"navigation":21,"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],[33,172858,172854],{"id":172859},"python教程",[10,172861,172862],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[10,172864,172865],{},"建议学习环境：",[49,172867,172868,172871,172874],{},[52,172869,172870],{},"Python 版本：Python 3.10 及以上。",[52,172872,172873],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[52,172875,172876],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[37,172878,117055],{"id":117055},[49,172880,172881,172887,172893,172899,172905,172911,172917,172923,172929,172935,172941,172947],{},[52,172882,172883],{},[344,172884,172886],{"href":172885},".\u002Fch1-Python","Python环境与第一个程序",[52,172888,172889],{},[344,172890,172892],{"href":172891},".\u002Fch2","基础语法、变量与字符串",[52,172894,172895],{},[344,172896,172898],{"href":172897},".\u002Fch3","判断语句",[52,172900,172901],{},[344,172902,172904],{"href":172903},".\u002Fch4","循环语句",[52,172906,172907],{},[344,172908,172910],{"href":172909},".\u002Fch5","函数基础",[52,172912,172913],{},[344,172914,172916],{"href":172915},".\u002Fch6","数据容器",[52,172918,172919],{},[344,172920,172922],{"href":172921},".\u002Fch7","函数进阶",[52,172924,172925],{},[344,172926,172928],{"href":172927},".\u002Fch8","文件操作",[52,172930,172931],{},[344,172932,172934],{"href":172933},".\u002Fch9","异常、模块与包",[52,172936,172937],{},[344,172938,172940],{"href":172939},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[52,172942,172943],{},[344,172944,172946],{"href":172945},".\u002Fch11","面向对象基础",[52,172948,172949],{},[344,172950,172952],{"href":172951},".\u002Fch12","综合案例与复习路线",[37,172954,172955],{"id":172955},"学习路线",[10,172957,172958],{},"第一阶段：能运行程序。",[10,172960,172961],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[10,172963,172964],{},"第二阶段：能组织数据。",[10,172966,172967],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[10,172969,172970],{},"第三阶段：能封装逻辑。",[10,172972,172973],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[10,172975,172976],{},"第四阶段：能做小项目。",[10,172978,172979],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[37,172981,172982],{"id":172982},"参考资料",[49,172984,172985,172992,172999,173006],{},[52,172986,172987,172988],{},"黑马程序员 Python 入门教程推荐：",[344,172989,172990],{"href":172990,"rel":172991},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23849],[52,172993,172994,172995],{},"Python 官方中文教程：",[344,172996,172997],{"href":172997,"rel":172998},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23849],[52,173000,173001,173002],{},"Python 标准库文档：",[344,173003,173004],{"href":173004,"rel":173005},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23849],[52,173007,173008,173009],{},"pyecharts 文档：",[344,173010,173011],{"href":173011,"rel":173012},"https:\u002F\u002Fpyecharts.org\u002F",[23849],{"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":23362},"\u002Fwiki\u002F2024-10-10-python",{"title":172854,"description":173018},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331373253]