[{"data":1,"prerenderedAt":173028},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub-huan-yuan":3,"wiki-doc-nav":31},{"id":4,"title":5,"body":6,"description":16,"extension":24,"meta":25,"navigation":26,"path":27,"seo":28,"stem":29,"__hash__":30},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":8,"toc":20},"minimark",[9,13,17],[10,11,5],"h1",{"id":12},"_4dockerhub换源",[14,15,16],"p",{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,18,19],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":21,"searchDepth":22,"depth":22,"links":23},"",2,[],"md",{},true,"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":5,"description":16},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",[32,5149,6257,7677,10666,12017,13506,14595,23358,23371,23970,23996,24120,24361,24426,24444,24457,24504,24628,24797,24996,25176,25381,25517,25612,25649,25662,25972,26713,27421,27434,28454,30085,30236,30249,30261,30562,50374,50389,50406,50439,53311,76659,92804,92825,92938,93059,93829,94492,94853,94891,94997,95097,95140,95166,95227,96881,96982,97007,97498,97998,99078,99361,100103,100605,100617,102633,104297,105800,107498,109415,111334,113356,116826,117258,117721,118470,121414,121762,121784,122140,125447,125459,125862,125885,126032,126199,126404,126705,127262,127919,129850,131448,132097,133591,135022,136257,137951,139703,142113,142229,143164,143375,144260,145495,145723,145736,146891,149303,151671,154992,157469,159113,160890,162903,165955,168135,170662,172856],{"id":33,"title":34,"body":35,"description":21,"extension":24,"meta":5144,"navigation":26,"path":5145,"seo":5146,"stem":5147,"__hash__":5148},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":36,"toc":5116},[37,40,45,48,52,65,69,74,77,80,83,86,89,124,128,131,134,137,140,193,197,216,218,232,235,243,246,1109,1116,1133,1137,1228,1232,1238,1327,1331,1369,1373,1437,1441,1445,1452,1463,1467,1472,1476,1481,1485,1490,1494,1498,1503,1773,1778,1916,1921,2178,2181,2189,2193,2198,2301,2304,2610,2619,2720,2723,2726,2729,2732,2992,2997,3137,3140,3319,3322,3450,3453,3605,3609,3614,3617,3628,3636,3639,3746,3750,3754,3759,3809,3814,3819,3843,3848,3901,3904,3909,4086,4091,4376,4381,4778,4782,4787,4844,4849,4857,4860,5000,5003,5112],[10,38,34],{"id":39},"_1基础入门",[41,42,44],"h2",{"id":43},"_11注释","1.1注释",[14,46,47],{},"\u002F\u002F或者\u002F* *\u002F",[41,49,51],{"id":50},"_12命名","1.2命名",[53,54,55,59,62],"ol",{},[56,57,58],"li",{},"字母数字下划线",[56,60,61],{},"开头必须是字母或_",[56,63,64],{},"不能使用关键词",[41,66,68],{"id":67},"_13数据类型","1.3数据类型",[70,71,73],"h3",{"id":72},"_131整形","1.3.1整形",[14,75,76],{},"short 短整形 2",[14,78,79],{},"int 整形 4",[14,81,82],{},"long 长整形 win4 linux32位4 linux64位8",[14,84,85],{},"long long 长长整形 8",[14,87,88],{},"利用sizeof可以求数据类型占用的内存空间大小",[90,91,95],"pre",{"className":92,"code":93,"language":94,"meta":21,"style":21},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[96,97,98,117],"code",{"__ignoreMap":21},[99,100,103,107,111,114],"span",{"class":101,"line":102},"line",1,[99,104,106],{"class":105},"szBVR","sizeof",[99,108,110],{"class":109},"sVt8B","(",[99,112,113],{"class":105},"int",[99,115,116],{"class":109},")\n",[99,118,119,121],{"class":101,"line":22},[99,120,106],{"class":105},[99,122,123],{"class":109},"(num)\n",[70,125,127],{"id":126},"_132浮点型","1.3.2浮点型",[14,129,130],{},"float 单精度 4节 7位有效数字",[14,132,133],{},"double 双精度 8节 15-16有效数字",[14,135,136],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,138,139],{},"注意点：",[90,141,143],{"className":92,"code":142,"language":94,"meta":21,"style":21},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[96,144,145,170],{"__ignoreMap":21},[99,146,147,150,153,156,160,163,166],{"class":101,"line":102},[99,148,149],{"class":105},"float",[99,151,152],{"class":109}," f1",[99,154,155],{"class":105},"=",[99,157,159],{"class":158},"sj4cs","3.14",[99,161,162],{"class":105},"f",[99,164,165],{"class":109},";",[99,167,169],{"class":168},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[99,171,172,174,177,179,182,185,188,190],{"class":101,"line":22},[99,173,149],{"class":105},[99,175,176],{"class":109}," f2",[99,178,155],{"class":105},[99,180,181],{"class":158},"3",[99,183,184],{"class":105},"e",[99,186,187],{"class":158},"2",[99,189,165],{"class":109},[99,191,192],{"class":168}," \u002F\u002F科学记数法\n",[70,194,196],{"id":195},"_133字符型","1.3.3字符型",[90,198,200],{"className":92,"code":199,"language":94,"meta":21,"style":21},"char ch='a'\n",[96,201,202],{"__ignoreMap":21},[99,203,204,207,210,212],{"class":101,"line":102},[99,205,206],{"class":105},"char",[99,208,209],{"class":109}," ch",[99,211,155],{"class":105},[99,213,215],{"class":214},"sZZnC","'a'\n",[14,217,139],{},[53,219,220,223,226,229],{},[56,221,222],{},"在显示字符型变量时，只能单引号，双引号x",[56,224,225],{},"单引号内只能一个字符，不能字符串",[56,227,228],{},"c和c++字符型变量只占用一个字符",[56,230,231],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,233,234],{},"ASCII码大致由以下两部分组成：",[53,236,237,240],{},[56,238,239],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[56,241,242],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,244,245],{},"ASCII码表格：",[247,248,249,293],"table",{},[250,251,252],"thead",{},[253,254,255,263,268,272,277,281,285,289],"tr",{},[256,257,258,262],"th",{},[259,260,261],"strong",{},"ASCII","值",[256,264,265],{},[259,266,267],{},"控制字符",[256,269,270,262],{},[259,271,261],{},[256,273,274],{},[259,275,276],{},"字符",[256,278,279,262],{},[259,280,261],{},[256,282,283],{},[259,284,276],{},[256,286,287,262],{},[259,288,261],{},[256,290,291],{},[259,292,276],{},[294,295,296,323,349,374,399,425,450,475,501,526,552,578,604,629,655,681,707,731,756,781,806,831,856,881,906,931,956,982,1007,1032,1057,1083],"tbody",{},[253,297,298,302,305,308,311,314,317,320],{},[299,300,301],"td",{},"0",[299,303,304],{},"NUT",[299,306,307],{},"32",[299,309,310],{},"(space)",[299,312,313],{},"64",[299,315,316],{},"@",[299,318,319],{},"96",[299,321,322],{},"、",[253,324,325,328,331,334,337,340,343,346],{},[299,326,327],{},"1",[299,329,330],{},"SOH",[299,332,333],{},"33",[299,335,336],{},"!",[299,338,339],{},"65",[299,341,342],{},"A",[299,344,345],{},"97",[299,347,348],{},"a",[253,350,351,353,356,359,362,365,368,371],{},[299,352,187],{},[299,354,355],{},"STX",[299,357,358],{},"34",[299,360,361],{},"\"",[299,363,364],{},"66",[299,366,367],{},"B",[299,369,370],{},"98",[299,372,373],{},"b",[253,375,376,378,381,384,387,390,393,396],{},[299,377,181],{},[299,379,380],{},"ETX",[299,382,383],{},"35",[299,385,386],{},"#",[299,388,389],{},"67",[299,391,392],{},"C",[299,394,395],{},"99",[299,397,398],{},"c",[253,400,401,404,407,410,413,416,419,422],{},[299,402,403],{},"4",[299,405,406],{},"EOT",[299,408,409],{},"36",[299,411,412],{},"$",[299,414,415],{},"68",[299,417,418],{},"D",[299,420,421],{},"100",[299,423,424],{},"d",[253,426,427,430,433,436,439,442,445,448],{},[299,428,429],{},"5",[299,431,432],{},"ENQ",[299,434,435],{},"37",[299,437,438],{},"%",[299,440,441],{},"69",[299,443,444],{},"E",[299,446,447],{},"101",[299,449,184],{},[253,451,452,455,458,461,464,467,470,473],{},[299,453,454],{},"6",[299,456,457],{},"ACK",[299,459,460],{},"38",[299,462,463],{},"&",[299,465,466],{},"70",[299,468,469],{},"F",[299,471,472],{},"102",[299,474,162],{},[253,476,477,480,483,486,489,492,495,498],{},[299,478,479],{},"7",[299,481,482],{},"BEL",[299,484,485],{},"39",[299,487,488],{},",",[299,490,491],{},"71",[299,493,494],{},"G",[299,496,497],{},"103",[299,499,500],{},"g",[253,502,503,506,509,512,514,517,520,523],{},[299,504,505],{},"8",[299,507,508],{},"BS",[299,510,511],{},"40",[299,513,110],{},[299,515,516],{},"72",[299,518,519],{},"H",[299,521,522],{},"104",[299,524,525],{},"h",[253,527,528,531,534,537,540,543,546,549],{},[299,529,530],{},"9",[299,532,533],{},"HT",[299,535,536],{},"41",[299,538,539],{},")",[299,541,542],{},"73",[299,544,545],{},"I",[299,547,548],{},"105",[299,550,551],{},"i",[253,553,554,557,560,563,566,569,572,575],{},[299,555,556],{},"10",[299,558,559],{},"LF",[299,561,562],{},"42",[299,564,565],{},"*",[299,567,568],{},"74",[299,570,571],{},"J",[299,573,574],{},"106",[299,576,577],{},"j",[253,579,580,583,586,589,592,595,598,601],{},[299,581,582],{},"11",[299,584,585],{},"VT",[299,587,588],{},"43",[299,590,591],{},"+",[299,593,594],{},"75",[299,596,597],{},"K",[299,599,600],{},"107",[299,602,603],{},"k",[253,605,606,609,612,615,617,620,623,626],{},[299,607,608],{},"12",[299,610,611],{},"FF",[299,613,614],{},"44",[299,616,488],{},[299,618,619],{},"76",[299,621,622],{},"L",[299,624,625],{},"108",[299,627,628],{},"l",[253,630,631,634,637,640,643,646,649,652],{},[299,632,633],{},"13",[299,635,636],{},"CR",[299,638,639],{},"45",[299,641,642],{},"-",[299,644,645],{},"77",[299,647,648],{},"M",[299,650,651],{},"109",[299,653,654],{},"m",[253,656,657,660,663,666,669,672,675,678],{},[299,658,659],{},"14",[299,661,662],{},"SO",[299,664,665],{},"46",[299,667,668],{},".",[299,670,671],{},"78",[299,673,674],{},"N",[299,676,677],{},"110",[299,679,680],{},"n",[253,682,683,686,689,692,695,698,701,704],{},[299,684,685],{},"15",[299,687,688],{},"SI",[299,690,691],{},"47",[299,693,694],{},"\u002F",[299,696,697],{},"79",[299,699,700],{},"O",[299,702,703],{},"111",[299,705,706],{},"o",[253,708,709,712,715,718,720,723,726,729],{},[299,710,711],{},"16",[299,713,714],{},"DLE",[299,716,717],{},"48",[299,719,301],{},[299,721,722],{},"80",[299,724,725],{},"P",[299,727,728],{},"112",[299,730,14],{},[253,732,733,736,739,742,744,747,750,753],{},[299,734,735],{},"17",[299,737,738],{},"DCI",[299,740,741],{},"49",[299,743,327],{},[299,745,746],{},"81",[299,748,749],{},"Q",[299,751,752],{},"113",[299,754,755],{},"q",[253,757,758,761,764,767,769,772,775,778],{},[299,759,760],{},"18",[299,762,763],{},"DC2",[299,765,766],{},"50",[299,768,187],{},[299,770,771],{},"82",[299,773,774],{},"R",[299,776,777],{},"114",[299,779,780],{},"r",[253,782,783,786,789,792,794,797,800,803],{},[299,784,785],{},"19",[299,787,788],{},"DC3",[299,790,791],{},"51",[299,793,181],{},[299,795,796],{},"83",[299,798,799],{},"S",[299,801,802],{},"115",[299,804,805],{},"s",[253,807,808,811,814,817,819,822,825,828],{},[299,809,810],{},"20",[299,812,813],{},"DC4",[299,815,816],{},"52",[299,818,403],{},[299,820,821],{},"84",[299,823,824],{},"T",[299,826,827],{},"116",[299,829,830],{},"t",[253,832,833,836,839,842,844,847,850,853],{},[299,834,835],{},"21",[299,837,838],{},"NAK",[299,840,841],{},"53",[299,843,429],{},[299,845,846],{},"85",[299,848,849],{},"U",[299,851,852],{},"117",[299,854,855],{},"u",[253,857,858,861,864,867,869,872,875,878],{},[299,859,860],{},"22",[299,862,863],{},"SYN",[299,865,866],{},"54",[299,868,454],{},[299,870,871],{},"86",[299,873,874],{},"V",[299,876,877],{},"118",[299,879,880],{},"v",[253,882,883,886,889,892,894,897,900,903],{},[299,884,885],{},"23",[299,887,888],{},"TB",[299,890,891],{},"55",[299,893,479],{},[299,895,896],{},"87",[299,898,899],{},"W",[299,901,902],{},"119",[299,904,905],{},"w",[253,907,908,911,914,917,919,922,925,928],{},[299,909,910],{},"24",[299,912,913],{},"CAN",[299,915,916],{},"56",[299,918,505],{},[299,920,921],{},"88",[299,923,924],{},"X",[299,926,927],{},"120",[299,929,930],{},"x",[253,932,933,936,939,942,944,947,950,953],{},[299,934,935],{},"25",[299,937,938],{},"EM",[299,940,941],{},"57",[299,943,530],{},[299,945,946],{},"89",[299,948,949],{},"Y",[299,951,952],{},"121",[299,954,955],{},"y",[253,957,958,961,964,967,970,973,976,979],{},[299,959,960],{},"26",[299,962,963],{},"SUB",[299,965,966],{},"58",[299,968,969],{},":",[299,971,972],{},"90",[299,974,975],{},"Z",[299,977,978],{},"122",[299,980,981],{},"z",[253,983,984,987,990,993,995,998,1001,1004],{},[299,985,986],{},"27",[299,988,989],{},"ESC",[299,991,992],{},"59",[299,994,165],{},[299,996,997],{},"91",[299,999,1000],{},"[",[299,1002,1003],{},"123",[299,1005,1006],{},"{",[253,1008,1009,1012,1015,1018,1021,1024,1026,1029],{},[299,1010,1011],{},"28",[299,1013,1014],{},"FS",[299,1016,1017],{},"60",[299,1019,1020],{},"\u003C",[299,1022,1023],{},"92",[299,1025,694],{},[299,1027,1028],{},"124",[299,1030,1031],{},"|",[253,1033,1034,1037,1040,1043,1045,1048,1051,1054],{},[299,1035,1036],{},"29",[299,1038,1039],{},"GS",[299,1041,1042],{},"61",[299,1044,155],{},[299,1046,1047],{},"93",[299,1049,1050],{},"]",[299,1052,1053],{},"125",[299,1055,1056],{},"}",[253,1058,1059,1062,1065,1068,1071,1074,1077,1080],{},[299,1060,1061],{},"30",[299,1063,1064],{},"RS",[299,1066,1067],{},"62",[299,1069,1070],{},">",[299,1072,1073],{},"94",[299,1075,1076],{},"^",[299,1078,1079],{},"126",[299,1081,1082],{},"`",[253,1084,1085,1088,1091,1094,1097,1100,1103,1106],{},[299,1086,1087],{},"31",[299,1089,1090],{},"US",[299,1092,1093],{},"63",[299,1095,1096],{},"?",[299,1098,1099],{},"95",[299,1101,1102],{},"_",[299,1104,1105],{},"127",[299,1107,1108],{},"DEL",[14,1110,1111,1112,1115],{},"ASCII 码大致由以下",[259,1113,1114],{},"两部分组","成：",[1117,1118,1119,1126],"ul",{},[56,1120,1121,1122,1125],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[259,1123,1124],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[56,1127,1128,1129,1132],{},"ASCII 打印字符：数字 ",[259,1130,1131],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[70,1134,1136],{"id":1135},"_134转义字符","1.3.4转义字符",[90,1138,1140],{"className":92,"code":1139,"language":94,"meta":21,"style":21},"\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",[96,1141,1142,1147,1163,1178,1184,1198,1204],{"__ignoreMap":21},[99,1143,1144],{"class":101,"line":102},[99,1145,1146],{"class":168},"\u002F\u002F换行符\n",[99,1148,1149,1152,1155,1158,1160],{"class":101,"line":22},[99,1150,1151],{"class":109},"cout ",[99,1153,1154],{"class":105},"\u003C\u003C",[99,1156,1157],{"class":214},"\"hello world\u002Fn\"",[99,1159,165],{"class":109},[99,1161,1162],{"class":168}," \u002F\u002F就等同于如下：\n",[99,1164,1166,1168,1170,1173,1175],{"class":101,"line":1165},3,[99,1167,1151],{"class":109},[99,1169,1154],{"class":105},[99,1171,1172],{"class":214},"\"hello world\"",[99,1174,1154],{"class":105},[99,1176,1177],{"class":109},"endl;\n",[99,1179,1181],{"class":101,"line":1180},4,[99,1182,1183],{"class":168},"\u002F\u002F反斜杠\n",[99,1185,1187,1189,1191,1194,1196],{"class":101,"line":1186},5,[99,1188,1151],{"class":109},[99,1190,1154],{"class":105},[99,1192,1193],{"class":214},"\"\u002F\u002F\"",[99,1195,1154],{"class":105},[99,1197,1177],{"class":109},[99,1199,1201],{"class":101,"line":1200},6,[99,1202,1203],{"class":168},"\u002F\u002F水平制表符\n",[99,1205,1207,1209,1211,1214,1217,1220,1222,1225],{"class":101,"line":1206},7,[99,1208,1151],{"class":109},[99,1210,1154],{"class":105},[99,1212,1213],{"class":214},"\"aaaa",[99,1215,1216],{"class":158},"\\t",[99,1218,1219],{"class":214},"helloworld\"",[99,1221,1154],{"class":105},[99,1223,1224],{"class":109},"endl;",[99,1226,1227],{"class":168}," \u002F\u002F输出窗口时有对齐效果\n",[70,1229,1231],{"id":1230},"_135字符串型","1.3.5字符串型",[14,1233,1234,1235,1237],{},"char 变量名",[99,1236],{},"=\"字符串值\"",[90,1239,1241],{"className":92,"code":1240,"language":94,"meta":21,"style":21},"\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",[96,1242,1243,1248,1253,1258,1263,1277,1290,1295,1301,1313],{"__ignoreMap":21},[99,1244,1245],{"class":101,"line":102},[99,1246,1247],{"class":168},"\u002F\u002Fc风格字符串\n",[99,1249,1250],{"class":101,"line":22},[99,1251,1252],{"class":168},"\u002F\u002F注意事项：\n",[99,1254,1255],{"class":101,"line":1165},[99,1256,1257],{"class":168},"\u002F\u002F1.char字符串名[]\n",[99,1259,1260],{"class":101,"line":1180},[99,1261,1262],{"class":168},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[99,1264,1265,1267,1270,1272,1274],{"class":101,"line":1186},[99,1266,206],{"class":105},[99,1268,1269],{"class":109}," str[]",[99,1271,155],{"class":105},[99,1273,1172],{"class":214},[99,1275,1276],{"class":109},";\n",[99,1278,1279,1281,1283,1286,1288],{"class":101,"line":1200},[99,1280,1151],{"class":109},[99,1282,1154],{"class":105},[99,1284,1285],{"class":109},"str",[99,1287,1154],{"class":105},[99,1289,1177],{"class":109},[99,1291,1292],{"class":101,"line":1206},[99,1293,1294],{"class":168},"\u002F\u002Fc++风格字符串\n",[99,1296,1298],{"class":101,"line":1297},8,[99,1299,1300],{"class":168},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[99,1302,1304,1307,1309,1311],{"class":101,"line":1303},9,[99,1305,1306],{"class":109},"string str2",[99,1308,155],{"class":105},[99,1310,1172],{"class":214},[99,1312,1276],{"class":109},[99,1314,1316,1318,1320,1323,1325],{"class":101,"line":1315},10,[99,1317,1151],{"class":109},[99,1319,1154],{"class":105},[99,1321,1322],{"class":109},"str2",[99,1324,1154],{"class":105},[99,1326,1177],{"class":109},[70,1328,1330],{"id":1329},"_136布尔类型bool","1.3.6布尔类型bool",[90,1332,1334],{"className":92,"code":1333,"language":94,"meta":21,"style":21},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[96,1335,1336,1351],{"__ignoreMap":21},[99,1337,1338,1341,1344,1346,1349],{"class":101,"line":102},[99,1339,1340],{"class":105},"bool",[99,1342,1343],{"class":109}," flag",[99,1345,155],{"class":105},[99,1347,1348],{"class":158},"true",[99,1350,1276],{"class":109},[99,1352,1353,1356,1359,1362,1364,1366],{"class":101,"line":22},[99,1354,1355],{"class":109},"cout",[99,1357,1358],{"class":105},"\u003C\u003Csizeof",[99,1360,1361],{"class":109},"(flag)",[99,1363,1154],{"class":105},[99,1365,1224],{"class":109},[99,1367,1368],{"class":168}," \u002F\u002F查看布尔占内存空间\n",[41,1370,1372],{"id":1371},"_14键盘输入cin","1.4键盘输入cin",[90,1374,1376],{"className":92,"code":1375,"language":94,"meta":21,"style":21},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[96,1377,1378,1391,1408,1419],{"__ignoreMap":21},[99,1379,1380,1382,1385,1387,1389],{"class":101,"line":102},[99,1381,113],{"class":105},[99,1383,1384],{"class":109}," a",[99,1386,155],{"class":105},[99,1388,301],{"class":158},[99,1390,1276],{"class":109},[99,1392,1393,1395,1397,1400,1402,1404,1406],{"class":101,"line":22},[99,1394,1355],{"class":109},[99,1396,1154],{"class":105},[99,1398,1399],{"class":214},"\"请给整型变量a赋值\"",[99,1401,1154],{"class":105},[99,1403,348],{"class":109},[99,1405,1154],{"class":105},[99,1407,1177],{"class":109},[99,1409,1410,1413,1416],{"class":101,"line":1165},[99,1411,1412],{"class":109},"cin ",[99,1414,1415],{"class":105},">>",[99,1417,1418],{"class":109}," a;\n",[99,1420,1421,1423,1425,1428,1431,1433,1435],{"class":101,"line":1180},[99,1422,1151],{"class":109},[99,1424,1154],{"class":105},[99,1426,1427],{"class":214}," \"整型变量a=\"",[99,1429,1430],{"class":105}," \u003C\u003C",[99,1432,348],{"class":109},[99,1434,1154],{"class":105},[99,1436,1177],{"class":109},[41,1438,1440],{"id":1439},"_15运算符","1.5运算符",[70,1442,1444],{"id":1443},"_151算术运算符","1.5.1算术运算符",[14,1446,1447,1451],{},[1448,1449],"img",{"alt":21,"src":1450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[53,1453,1454,1457,1460],{},[56,1455,1456],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[56,1458,1459],{},"两个小数不可以做取模运算",[56,1461,1462],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[70,1464,1466],{"id":1465},"_152赋值运算符","1.5.2赋值运算符",[14,1468,1469],{},[1448,1470],{"alt":21,"src":1471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[70,1473,1475],{"id":1474},"_153比较运算符","1.5.3比较运算符",[14,1477,1478],{},[1448,1479],{"alt":21,"src":1480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[70,1482,1484],{"id":1483},"_154逻辑运算符","1.5.4逻辑运算符",[14,1486,1487],{},[1448,1488],{"alt":21,"src":1489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[41,1491,1493],{"id":1492},"_16程序流程结构","1.6程序流程结构",[70,1495,1497],{"id":1496},"_161选择结构","1.6.1选择结构",[53,1499,1500],{},[56,1501,1502],{},"if语句\n单行、多行、多条件if语句",[90,1504,1506],{"className":92,"code":1505,"language":94,"meta":21,"style":21},"\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",[96,1507,1508,1513,1528,1533,1547,1552,1557,1566,1579,1583,1596,1601,1607,1612,1626,1631,1637,1658,1663,1677,1682,1711,1716,1733,1738,1743,1748,1762,1767],{"__ignoreMap":21},[99,1509,1510],{"class":101,"line":102},[99,1511,1512],{"class":168},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[99,1514,1515,1518,1521,1523,1526],{"class":101,"line":22},[99,1516,1517],{"class":105},"if",[99,1519,1520],{"class":109},"(score",[99,1522,1070],{"class":105},[99,1524,1525],{"class":158},"600",[99,1527,116],{"class":109},[99,1529,1530],{"class":101,"line":1165},[99,1531,1532],{"class":109},"{\n",[99,1534,1535,1538,1540,1543,1545],{"class":101,"line":1180},[99,1536,1537],{"class":109},"    cout",[99,1539,1154],{"class":105},[99,1541,1542],{"class":214},"'这是单行if语句'",[99,1544,1154],{"class":105},[99,1546,1177],{"class":109},[99,1548,1549],{"class":101,"line":1186},[99,1550,1551],{"class":109},"}\n",[99,1553,1554],{"class":101,"line":1200},[99,1555,1556],{"class":168},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[99,1558,1559,1561,1563],{"class":101,"line":1206},[99,1560,1412],{"class":109},[99,1562,1415],{"class":105},[99,1564,1565],{"class":109}," score\n",[99,1567,1568,1570,1572,1575,1577],{"class":101,"line":1297},[99,1569,1517],{"class":105},[99,1571,1520],{"class":109},[99,1573,1574],{"class":105},"\u003C=",[99,1576,1525],{"class":158},[99,1578,116],{"class":109},[99,1580,1581],{"class":101,"line":1303},[99,1582,1532],{"class":109},[99,1584,1585,1587,1589,1592,1594],{"class":101,"line":1315},[99,1586,1537],{"class":109},[99,1588,1415],{"class":105},[99,1590,1591],{"class":214},"\"小于等于600\"",[99,1593,1154],{"class":105},[99,1595,1177],{"class":109},[99,1597,1599],{"class":101,"line":1598},11,[99,1600,1551],{"class":109},[99,1602,1604],{"class":101,"line":1603},12,[99,1605,1606],{"class":105},"else\n",[99,1608,1610],{"class":101,"line":1609},13,[99,1611,1532],{"class":109},[99,1613,1615,1617,1619,1622,1624],{"class":101,"line":1614},14,[99,1616,1537],{"class":109},[99,1618,1415],{"class":105},[99,1620,1621],{"class":214},"\"大于600\"",[99,1623,1415],{"class":105},[99,1625,1177],{"class":109},[99,1627,1629],{"class":101,"line":1628},15,[99,1630,1551],{"class":109},[99,1632,1634],{"class":101,"line":1633},16,[99,1635,1636],{"class":168},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[99,1638,1640,1642,1645,1647,1649,1652,1654,1656],{"class":101,"line":1639},17,[99,1641,1517],{"class":105},[99,1643,1644],{"class":109}," (",[99,1646,301],{"class":158},[99,1648,1020],{"class":105},[99,1650,1651],{"class":109},"num",[99,1653,1020],{"class":105},[99,1655,421],{"class":158},[99,1657,116],{"class":109},[99,1659,1661],{"class":101,"line":1660},18,[99,1662,1532],{"class":109},[99,1664,1666,1668,1670,1673,1675],{"class":101,"line":1665},19,[99,1667,1537],{"class":109},[99,1669,1154],{"class":105},[99,1671,1672],{"class":214},"\"小于100\"",[99,1674,1154],{"class":105},[99,1676,1177],{"class":109},[99,1678,1680],{"class":101,"line":1679},20,[99,1681,1551],{"class":109},[99,1683,1685,1688,1691,1694,1697,1699,1702,1704,1706,1709],{"class":101,"line":1684},21,[99,1686,1687],{"class":105},"else",[99,1689,1690],{"class":105}," if",[99,1692,1693],{"class":109}," (nmu",[99,1695,1696],{"class":105},">=",[99,1698,421],{"class":158},[99,1700,1701],{"class":105},"&&",[99,1703,1651],{"class":109},[99,1705,1020],{"class":105},[99,1707,1708],{"class":158},"200",[99,1710,116],{"class":109},[99,1712,1714],{"class":101,"line":1713},22,[99,1715,1532],{"class":109},[99,1717,1719,1721,1723,1726,1728,1730],{"class":101,"line":1718},23,[99,1720,1537],{"class":109},[99,1722,1154],{"class":105},[99,1724,1725],{"class":214},"\"不小于100且小于200\"",[99,1727,1154],{"class":105},[99,1729,1224],{"class":109},[99,1731,1732],{"class":168}," \u002F\u002F可以无限else if,python中是elif：\n",[99,1734,1736],{"class":101,"line":1735},24,[99,1737,1551],{"class":109},[99,1739,1741],{"class":101,"line":1740},25,[99,1742,1606],{"class":105},[99,1744,1746],{"class":101,"line":1745},26,[99,1747,1532],{"class":109},[99,1749,1751,1753,1755,1758,1760],{"class":101,"line":1750},27,[99,1752,1537],{"class":109},[99,1754,1154],{"class":105},[99,1756,1757],{"class":214},"\"不小于200\"",[99,1759,1154],{"class":105},[99,1761,1177],{"class":109},[99,1763,1765],{"class":101,"line":1764},28,[99,1766,1551],{"class":109},[99,1768,1770],{"class":101,"line":1769},29,[99,1771,1772],{"class":168},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[53,1774,1775],{"start":22},[56,1776,1777],{},"三目运算符",[90,1779,1781],{"className":92,"code":1780,"language":94,"meta":21,"style":21},"\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",[96,1782,1783,1788,1793,1819,1841,1858,1863,1886,1901],{"__ignoreMap":21},[99,1784,1785],{"class":101,"line":102},[99,1786,1787],{"class":168},"\u002F\u002F创建三个变量a,b,c\n",[99,1789,1790],{"class":101,"line":22},[99,1791,1792],{"class":168},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[99,1794,1795,1797,1799,1801,1803,1806,1808,1810,1813,1815,1817],{"class":101,"line":1165},[99,1796,113],{"class":105},[99,1798,1384],{"class":109},[99,1800,155],{"class":105},[99,1802,810],{"class":158},[99,1804,1805],{"class":109},",b",[99,1807,155],{"class":105},[99,1809,556],{"class":158},[99,1811,1812],{"class":109},",c",[99,1814,155],{"class":105},[99,1816,301],{"class":158},[99,1818,1276],{"class":109},[99,1820,1821,1823,1825,1828,1830,1832,1834,1836,1838],{"class":101,"line":1180},[99,1822,398],{"class":109},[99,1824,155],{"class":105},[99,1826,1827],{"class":109},"(a",[99,1829,1070],{"class":105},[99,1831,373],{"class":109},[99,1833,1096],{"class":105},[99,1835,348],{"class":109},[99,1837,969],{"class":105},[99,1839,1840],{"class":109},"b)\n",[99,1842,1843,1845,1847,1850,1852,1854,1856],{"class":101,"line":1186},[99,1844,1355],{"class":109},[99,1846,1154],{"class":105},[99,1848,1849],{"class":214},"\"c=\"",[99,1851,1154],{"class":105},[99,1853,398],{"class":109},[99,1855,1154],{"class":105},[99,1857,1177],{"class":109},[99,1859,1860],{"class":101,"line":1200},[99,1861,1862],{"class":168},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[99,1864,1865,1867,1869,1871,1873,1875,1877,1880,1882,1884],{"class":101,"line":1206},[99,1866,1827],{"class":109},[99,1868,1070],{"class":105},[99,1870,373],{"class":109},[99,1872,1096],{"class":105},[99,1874,348],{"class":109},[99,1876,969],{"class":105},[99,1878,1879],{"class":109},"b)",[99,1881,155],{"class":105},[99,1883,421],{"class":158},[99,1885,1276],{"class":109},[99,1887,1888,1890,1892,1894,1896,1898],{"class":101,"line":1297},[99,1889,1355],{"class":109},[99,1891,1154],{"class":105},[99,1893,348],{"class":109},[99,1895,1154],{"class":105},[99,1897,1224],{"class":109},[99,1899,1900],{"class":168}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[99,1902,1903,1905,1907,1909,1911,1913],{"class":101,"line":1303},[99,1904,1355],{"class":109},[99,1906,1154],{"class":105},[99,1908,373],{"class":109},[99,1910,1154],{"class":105},[99,1912,1224],{"class":109},[99,1914,1915],{"class":168}," \u002F\u002F10   a>b,b还是原值\n",[53,1917,1918],{"start":1165},[56,1919,1920],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[90,1922,1924],{"className":92,"code":1923,"language":94,"meta":21,"style":21},"\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",[96,1925,1926,1931,1939,1953,1963,1967,1981,1994,2004,2012,2017,2042,2063,2085,2106,2128,2149,2169,2174],{"__ignoreMap":21},[99,1927,1928],{"class":101,"line":102},[99,1929,1930],{"class":168},"\u002F\u002F案例-电影打分\n",[99,1932,1933,1936],{"class":101,"line":22},[99,1934,1935],{"class":105},"#include",[99,1937,1938],{"class":214},"\u003Ciostream>\n",[99,1940,1941,1944,1947,1951],{"class":101,"line":1165},[99,1942,1943],{"class":105},"using",[99,1945,1946],{"class":105}," namespace",[99,1948,1950],{"class":1949},"sScJk"," std",[99,1952,1276],{"class":109},[99,1954,1955,1957,1960],{"class":101,"line":1180},[99,1956,113],{"class":105},[99,1958,1959],{"class":1949}," main",[99,1961,1962],{"class":109},"()\n",[99,1964,1965],{"class":101,"line":1186},[99,1966,1532],{"class":109},[99,1968,1969,1972,1975,1977,1979],{"class":101,"line":1200},[99,1970,1971],{"class":105},"    int",[99,1973,1974],{"class":109}," score",[99,1976,155],{"class":105},[99,1978,301],{"class":158},[99,1980,1276],{"class":109},[99,1982,1983,1985,1987,1990,1992],{"class":101,"line":1206},[99,1984,1537],{"class":109},[99,1986,1154],{"class":105},[99,1988,1989],{"class":214},"\"电影打分：\"",[99,1991,1154],{"class":105},[99,1993,1177],{"class":109},[99,1995,1996,1999,2001],{"class":101,"line":1297},[99,1997,1998],{"class":109},"    cin",[99,2000,1415],{"class":105},[99,2002,2003],{"class":109},"score;\n",[99,2005,2006,2009],{"class":101,"line":1303},[99,2007,2008],{"class":105},"    switch",[99,2010,2011],{"class":109},"(score)\n",[99,2013,2014],{"class":101,"line":1315},[99,2015,2016],{"class":109},"    {\n",[99,2018,2019,2022,2025,2028,2030,2033,2035,2037,2040],{"class":101,"line":1598},[99,2020,2021],{"class":105},"        case",[99,2023,2024],{"class":158}," 10",[99,2026,2027],{"class":109},":cout",[99,2029,1154],{"class":105},[99,2031,2032],{"class":214},"\"经典\"",[99,2034,1154],{"class":105},[99,2036,1224],{"class":109},[99,2038,2039],{"class":105},"break",[99,2041,1276],{"class":109},[99,2043,2044,2046,2049,2051,2053,2055,2057,2059,2061],{"class":101,"line":1603},[99,2045,2021],{"class":105},[99,2047,2048],{"class":158}," 9",[99,2050,2027],{"class":109},[99,2052,1154],{"class":105},[99,2054,2032],{"class":214},[99,2056,1154],{"class":105},[99,2058,1224],{"class":109},[99,2060,2039],{"class":105},[99,2062,1276],{"class":109},[99,2064,2065,2067,2070,2072,2074,2077,2079,2081,2083],{"class":101,"line":1609},[99,2066,2021],{"class":105},[99,2068,2069],{"class":158}," 8",[99,2071,2027],{"class":109},[99,2073,1154],{"class":105},[99,2075,2076],{"class":214},"\"非常好\"",[99,2078,1154],{"class":105},[99,2080,1224],{"class":109},[99,2082,2039],{"class":105},[99,2084,1276],{"class":109},[99,2086,2087,2089,2092,2094,2096,2098,2100,2102,2104],{"class":101,"line":1614},[99,2088,2021],{"class":105},[99,2090,2091],{"class":158}," 7",[99,2093,2027],{"class":109},[99,2095,1154],{"class":105},[99,2097,2076],{"class":214},[99,2099,1154],{"class":105},[99,2101,1224],{"class":109},[99,2103,2039],{"class":105},[99,2105,1276],{"class":109},[99,2107,2108,2110,2113,2115,2117,2120,2122,2124,2126],{"class":101,"line":1628},[99,2109,2021],{"class":105},[99,2111,2112],{"class":158}," 6",[99,2114,2027],{"class":109},[99,2116,1154],{"class":105},[99,2118,2119],{"class":214},"\"一般\"",[99,2121,1154],{"class":105},[99,2123,1224],{"class":109},[99,2125,2039],{"class":105},[99,2127,1276],{"class":109},[99,2129,2130,2132,2135,2137,2139,2141,2143,2145,2147],{"class":101,"line":1633},[99,2131,2021],{"class":105},[99,2133,2134],{"class":158}," 5",[99,2136,2027],{"class":109},[99,2138,1154],{"class":105},[99,2140,2119],{"class":214},[99,2142,1154],{"class":105},[99,2144,1224],{"class":109},[99,2146,2039],{"class":105},[99,2148,1276],{"class":109},[99,2150,2151,2154,2156,2158,2161,2163,2165,2167],{"class":101,"line":1639},[99,2152,2153],{"class":105},"        default",[99,2155,2027],{"class":109},[99,2157,1154],{"class":105},[99,2159,2160],{"class":214},"\"烂片\"",[99,2162,1154],{"class":105},[99,2164,1224],{"class":109},[99,2166,2039],{"class":105},[99,2168,1276],{"class":109},[99,2170,2171],{"class":101,"line":1660},[99,2172,2173],{"class":109},"    }\n",[99,2175,2176],{"class":101,"line":1665},[99,2177,1551],{"class":109},[14,2179,2180],{},"if和switch区别：",[1117,2182,2183,2186],{},[56,2184,2185],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[56,2187,2188],{},"switch优点：结构清晰，执行效率高",[70,2190,2192],{"id":2191},"_162循环结构","1.6.2循环结构",[53,2194,2195],{},[56,2196,2197],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[90,2199,2201],{"className":92,"code":2200,"language":94,"meta":21,"style":21},"\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",[96,2202,2203,2208,2216,2220,2233,2247,2251,2271,2281,2285,2297],{"__ignoreMap":21},[99,2204,2205],{"class":101,"line":102},[99,2206,2207],{"class":168},"\u002F\u002F打印0-9数字\n",[99,2209,2210,2212,2214],{"class":101,"line":22},[99,2211,113],{"class":105},[99,2213,1959],{"class":1949},[99,2215,1962],{"class":109},[99,2217,2218],{"class":101,"line":1165},[99,2219,1532],{"class":109},[99,2221,2222,2224,2227,2229,2231],{"class":101,"line":1180},[99,2223,1971],{"class":105},[99,2225,2226],{"class":109}," num",[99,2228,155],{"class":105},[99,2230,301],{"class":158},[99,2232,1276],{"class":109},[99,2234,2235,2238,2241,2243,2245],{"class":101,"line":1186},[99,2236,2237],{"class":105},"    while",[99,2239,2240],{"class":109},"(num",[99,2242,1020],{"class":105},[99,2244,556],{"class":158},[99,2246,116],{"class":109},[99,2248,2249],{"class":101,"line":1200},[99,2250,2016],{"class":109},[99,2252,2253,2256,2259,2261,2263,2265,2268],{"class":101,"line":1206},[99,2254,2255],{"class":1949},"       std",[99,2257,2258],{"class":109},"::cout",[99,2260,1154],{"class":105},[99,2262,1651],{"class":109},[99,2264,1154],{"class":105},[99,2266,2267],{"class":1949},"std",[99,2269,2270],{"class":109},"::endl;\n",[99,2272,2273,2276,2279],{"class":101,"line":1297},[99,2274,2275],{"class":109},"        num",[99,2277,2278],{"class":105},"++",[99,2280,1276],{"class":109},[99,2282,2283],{"class":101,"line":1303},[99,2284,2173],{"class":109},[99,2286,2287,2290,2292,2295],{"class":101,"line":1315},[99,2288,2289],{"class":1949},"    system",[99,2291,110],{"class":109},[99,2293,2294],{"class":214},"\"pause\"",[99,2296,116],{"class":109},[99,2298,2299],{"class":101,"line":1598},[99,2300,1551],{"class":109},[14,2302,2303],{},"注意：写好循环条件，避免死循环情况",[90,2305,2307],{"className":92,"code":2306,"language":94,"meta":21,"style":21},"\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",[96,2308,2309,2314,2321,2328,2338,2346,2350,2355,2382,2387,2392,2400,2427,2432,2437,2450,2460,2464,2474,2479,2492,2497,2511,2516,2531,2535,2548,2552,2557,2561,2575,2583,2588,2594,2600,2605],{"__ignoreMap":21},[99,2310,2311],{"class":101,"line":102},[99,2312,2313],{"class":168},"\u002F\u002F循环结构-猜数字\n",[99,2315,2316,2318],{"class":101,"line":22},[99,2317,1935],{"class":105},[99,2319,2320],{"class":214}," \u003Ciostream>\n",[99,2322,2323,2325],{"class":101,"line":1165},[99,2324,1935],{"class":105},[99,2326,2327],{"class":214}," \u003Cctime>\n",[99,2329,2330,2332,2334,2336],{"class":101,"line":1180},[99,2331,1943],{"class":105},[99,2333,1946],{"class":105},[99,2335,1950],{"class":1949},[99,2337,1276],{"class":109},[99,2339,2340,2342,2344],{"class":101,"line":1186},[99,2341,113],{"class":105},[99,2343,1959],{"class":1949},[99,2345,1962],{"class":109},[99,2347,2348],{"class":101,"line":1200},[99,2349,1532],{"class":109},[99,2351,2352],{"class":101,"line":1206},[99,2353,2354],{"class":168},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[99,2356,2357,2360,2363,2366,2369,2371,2374,2376,2379],{"class":101,"line":1297},[99,2358,2359],{"class":1949},"    srand",[99,2361,2362],{"class":109},"((",[99,2364,2365],{"class":105},"unsigned",[99,2367,2368],{"class":105}," int",[99,2370,539],{"class":109},[99,2372,2373],{"class":1949},"time",[99,2375,110],{"class":109},[99,2377,2378],{"class":158},"NULL",[99,2380,2381],{"class":109},"));\n",[99,2383,2384],{"class":101,"line":1303},[99,2385,2386],{"emptyLinePlaceholder":26},"\n",[99,2388,2389],{"class":101,"line":1315},[99,2390,2391],{"class":168},"    \u002F\u002F1.系统生成随机数\n",[99,2393,2394,2397],{"class":101,"line":1598},[99,2395,2396],{"class":168},"    \u002F\u002Frand()%100",[99,2398,2399],{"class":168}," \u002F\u002F生成0-99的随机数\n",[99,2401,2402,2404,2406,2408,2411,2414,2416,2418,2420,2422,2424],{"class":101,"line":1603},[99,2403,1971],{"class":105},[99,2405,2226],{"class":109},[99,2407,155],{"class":105},[99,2409,2410],{"class":1949},"rand",[99,2412,2413],{"class":109},"()",[99,2415,438],{"class":105},[99,2417,421],{"class":158},[99,2419,591],{"class":105},[99,2421,327],{"class":158},[99,2423,165],{"class":109},[99,2425,2426],{"class":168}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[99,2428,2429],{"class":101,"line":1609},[99,2430,2431],{"class":168},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[99,2433,2434],{"class":101,"line":1614},[99,2435,2436],{"class":168},"    \u002F\u002F2.玩家猜测\n",[99,2438,2439,2441,2444,2446,2448],{"class":101,"line":1628},[99,2440,1971],{"class":105},[99,2442,2443],{"class":109}," val",[99,2445,155],{"class":105},[99,2447,301],{"class":158},[99,2449,1276],{"class":109},[99,2451,2452,2454,2456,2458],{"class":101,"line":1633},[99,2453,2237],{"class":105},[99,2455,1644],{"class":109},[99,2457,327],{"class":158},[99,2459,116],{"class":109},[99,2461,2462],{"class":101,"line":1639},[99,2463,2016],{"class":109},[99,2465,2466,2469,2471],{"class":101,"line":1660},[99,2467,2468],{"class":109},"        cin",[99,2470,1415],{"class":105},[99,2472,2473],{"class":109},"val;\n",[99,2475,2476],{"class":101,"line":1665},[99,2477,2478],{"class":168},"        \u002F\u002F3.判断玩家猜测\n",[99,2480,2481,2484,2487,2489],{"class":101,"line":1679},[99,2482,2483],{"class":105},"        if",[99,2485,2486],{"class":109},"(val",[99,2488,1020],{"class":105},[99,2490,2491],{"class":109},"num) \n",[99,2493,2494],{"class":101,"line":1684},[99,2495,2496],{"class":109},"        {\n",[99,2498,2499,2502,2504,2507,2509],{"class":101,"line":1713},[99,2500,2501],{"class":109},"            cout",[99,2503,1154],{"class":105},[99,2505,2506],{"class":214},"\"猜小了！\"",[99,2508,1154],{"class":105},[99,2510,1177],{"class":109},[99,2512,2513],{"class":101,"line":1718},[99,2514,2515],{"class":109},"        }\n",[99,2517,2518,2521,2523,2526,2528],{"class":101,"line":1735},[99,2519,2520],{"class":105},"        else",[99,2522,1690],{"class":105},[99,2524,2525],{"class":109}," (val",[99,2527,1070],{"class":105},[99,2529,2530],{"class":109},"num)\n",[99,2532,2533],{"class":101,"line":1740},[99,2534,2496],{"class":109},[99,2536,2537,2539,2541,2544,2546],{"class":101,"line":1745},[99,2538,2501],{"class":109},[99,2540,1154],{"class":105},[99,2542,2543],{"class":214},"\"猜大了！\"",[99,2545,1154],{"class":105},[99,2547,1177],{"class":109},[99,2549,2550],{"class":101,"line":1750},[99,2551,2515],{"class":109},[99,2553,2554],{"class":101,"line":1764},[99,2555,2556],{"class":105},"        else\n",[99,2558,2559],{"class":101,"line":1769},[99,2560,2496],{"class":109},[99,2562,2564,2566,2568,2571,2573],{"class":101,"line":2563},30,[99,2565,2501],{"class":109},[99,2567,1154],{"class":105},[99,2569,2570],{"class":214},"\"猜对了！\"",[99,2572,1154],{"class":105},[99,2574,1177],{"class":109},[99,2576,2578,2581],{"class":101,"line":2577},31,[99,2579,2580],{"class":105},"            break",[99,2582,1276],{"class":109},[99,2584,2586],{"class":101,"line":2585},32,[99,2587,2515],{"class":109},[99,2589,2591],{"class":101,"line":2590},33,[99,2592,2593],{"class":168},"        \u002F\u002F猜对 退出游戏\n",[99,2595,2597],{"class":101,"line":2596},34,[99,2598,2599],{"class":168},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[99,2601,2603],{"class":101,"line":2602},35,[99,2604,2173],{"class":109},[99,2606,2608],{"class":101,"line":2607},36,[99,2609,1551],{"class":109},[53,2611,2612],{"start":22},[56,2613,2614,2615,2618],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[259,2616,2617],{},"do...while会先执行一次循环语句","，在判断循环语句",[90,2620,2622],{"className":92,"code":2621,"language":94,"meta":21,"style":21},"\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",[96,2623,2624,2629,2637,2641,2653,2661,2665,2682,2689,2693,2706,2716],{"__ignoreMap":21},[99,2625,2626],{"class":101,"line":102},[99,2627,2628],{"class":168},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[99,2630,2631,2633,2635],{"class":101,"line":22},[99,2632,113],{"class":105},[99,2634,1959],{"class":1949},[99,2636,1962],{"class":109},[99,2638,2639],{"class":101,"line":1165},[99,2640,1532],{"class":109},[99,2642,2643,2645,2647,2649,2651],{"class":101,"line":1180},[99,2644,1971],{"class":105},[99,2646,2226],{"class":109},[99,2648,155],{"class":105},[99,2650,301],{"class":158},[99,2652,1276],{"class":109},[99,2654,2655,2658],{"class":101,"line":1186},[99,2656,2657],{"class":105},"    do",[99,2659,2660],{"class":109}," \n",[99,2662,2663],{"class":101,"line":1200},[99,2664,2016],{"class":109},[99,2666,2667,2670,2672,2674,2676,2678,2680],{"class":101,"line":1206},[99,2668,2669],{"class":1949},"        std",[99,2671,2258],{"class":109},[99,2673,1154],{"class":105},[99,2675,1651],{"class":109},[99,2677,1154],{"class":105},[99,2679,2267],{"class":1949},[99,2681,2270],{"class":109},[99,2683,2684,2686],{"class":101,"line":1297},[99,2685,2275],{"class":109},[99,2687,2688],{"class":105},"++\n",[99,2690,2691],{"class":101,"line":1303},[99,2692,2173],{"class":109},[99,2694,2695,2697,2699,2701,2703],{"class":101,"line":1315},[99,2696,2237],{"class":105},[99,2698,2240],{"class":109},[99,2700,1020],{"class":105},[99,2702,556],{"class":158},[99,2704,2705],{"class":109},");\n",[99,2707,2708,2710,2712,2714],{"class":101,"line":1598},[99,2709,2289],{"class":1949},[99,2711,110],{"class":109},[99,2713,2294],{"class":214},[99,2715,2705],{"class":109},[99,2717,2718],{"class":101,"line":1603},[99,2719,1551],{"class":109},[14,2721,2722],{},"案例-水仙花数",[14,2724,2725],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2727,2728],{},"例如：1^3+5^3+3^3=153",[14,2730,2731],{},"请用do...while语句，求出所有3位数的水仙花数",[90,2733,2735],{"className":92,"code":2734,"language":94,"meta":21,"style":21},"#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",[96,2736,2737,2743,2753,2761,2765,2770,2782,2788,2792,2797,2813,2829,2845,2860,2879,2894,2942,2946,2958,2962,2970,2974,2988],{"__ignoreMap":21},[99,2738,2739,2741],{"class":101,"line":102},[99,2740,1935],{"class":105},[99,2742,2320],{"class":214},[99,2744,2745,2747,2749,2751],{"class":101,"line":22},[99,2746,1943],{"class":105},[99,2748,1946],{"class":105},[99,2750,1950],{"class":1949},[99,2752,1276],{"class":109},[99,2754,2755,2757,2759],{"class":101,"line":1165},[99,2756,113],{"class":105},[99,2758,1959],{"class":1949},[99,2760,1962],{"class":109},[99,2762,2763],{"class":101,"line":1180},[99,2764,1532],{"class":109},[99,2766,2767],{"class":101,"line":1186},[99,2768,2769],{"class":168},"    \u002F\u002F1.先打印所有三位数字\n",[99,2771,2772,2774,2776,2778,2780],{"class":101,"line":1200},[99,2773,1971],{"class":105},[99,2775,2226],{"class":109},[99,2777,155],{"class":105},[99,2779,421],{"class":158},[99,2781,1276],{"class":109},[99,2783,2784,2786],{"class":101,"line":1206},[99,2785,2657],{"class":105},[99,2787,2660],{"class":109},[99,2789,2790],{"class":101,"line":1297},[99,2791,2016],{"class":109},[99,2793,2794],{"class":101,"line":1303},[99,2795,2796],{"class":168},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[99,2798,2799,2802,2804,2806,2808,2810],{"class":101,"line":1315},[99,2800,2801],{"class":105},"        int",[99,2803,1384],{"class":109},[99,2805,155],{"class":105},[99,2807,301],{"class":158},[99,2809,165],{"class":109},[99,2811,2812],{"class":168}," \u002F\u002F个位\n",[99,2814,2815,2817,2820,2822,2824,2826],{"class":101,"line":1598},[99,2816,2801],{"class":105},[99,2818,2819],{"class":109}," b",[99,2821,155],{"class":105},[99,2823,301],{"class":158},[99,2825,165],{"class":109},[99,2827,2828],{"class":168}," \u002F\u002F十位\n",[99,2830,2831,2833,2836,2838,2840,2842],{"class":101,"line":1603},[99,2832,2801],{"class":105},[99,2834,2835],{"class":109}," c",[99,2837,155],{"class":105},[99,2839,301],{"class":158},[99,2841,165],{"class":109},[99,2843,2844],{"class":168}," \u002F\u002F百位\n",[99,2846,2847,2850,2852,2854,2856,2858],{"class":101,"line":1609},[99,2848,2849],{"class":109},"        a",[99,2851,155],{"class":105},[99,2853,1651],{"class":109},[99,2855,438],{"class":105},[99,2857,556],{"class":158},[99,2859,1276],{"class":109},[99,2861,2862,2865,2867,2869,2871,2873,2875,2877],{"class":101,"line":1614},[99,2863,2864],{"class":109},"        b",[99,2866,155],{"class":105},[99,2868,1651],{"class":109},[99,2870,694],{"class":105},[99,2872,556],{"class":158},[99,2874,438],{"class":105},[99,2876,556],{"class":158},[99,2878,1276],{"class":109},[99,2880,2881,2884,2886,2888,2890,2892],{"class":101,"line":1628},[99,2882,2883],{"class":109},"        c",[99,2885,155],{"class":105},[99,2887,1651],{"class":109},[99,2889,694],{"class":105},[99,2891,421],{"class":158},[99,2893,1276],{"class":109},[99,2895,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2933,2936,2939],{"class":101,"line":1633},[99,2897,2483],{"class":105},[99,2899,1827],{"class":109},[99,2901,565],{"class":105},[99,2903,348],{"class":109},[99,2905,565],{"class":105},[99,2907,348],{"class":109},[99,2909,591],{"class":105},[99,2911,373],{"class":109},[99,2913,565],{"class":105},[99,2915,373],{"class":109},[99,2917,565],{"class":105},[99,2919,373],{"class":109},[99,2921,591],{"class":105},[99,2923,398],{"class":109},[99,2925,565],{"class":105},[99,2927,398],{"class":109},[99,2929,565],{"class":105},[99,2931,2932],{"class":109},"c ",[99,2934,2935],{"class":105},"==",[99,2937,2938],{"class":109}," num)",[99,2940,2941],{"class":168}," \u002F\u002F如果是水仙花数，才打印\n",[99,2943,2944],{"class":101,"line":1639},[99,2945,2496],{"class":109},[99,2947,2948,2950,2952,2954,2956],{"class":101,"line":1660},[99,2949,2501],{"class":109},[99,2951,1154],{"class":105},[99,2953,1651],{"class":109},[99,2955,1154],{"class":105},[99,2957,1177],{"class":109},[99,2959,2960],{"class":101,"line":1665},[99,2961,2515],{"class":109},[99,2963,2964,2966,2968],{"class":101,"line":1679},[99,2965,2275],{"class":109},[99,2967,2278],{"class":105},[99,2969,1276],{"class":109},[99,2971,2972],{"class":101,"line":1684},[99,2973,2173],{"class":109},[99,2975,2976,2978,2981,2983,2986],{"class":101,"line":1713},[99,2977,2237],{"class":105},[99,2979,2980],{"class":109}," (num ",[99,2982,1020],{"class":105},[99,2984,2985],{"class":158}," 1000",[99,2987,2705],{"class":109},[99,2989,2990],{"class":101,"line":1718},[99,2991,1551],{"class":109},[53,2993,2994],{"start":1165},[56,2995,2996],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[90,2998,3000],{"className":92,"code":2999,"language":94,"meta":21,"style":21},"\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",[96,3001,3002,3007,3036,3040,3052,3056,3061,3072,3079,3083,3097,3101,3108,3112,3124,3133],{"__ignoreMap":21},[99,3003,3004],{"class":101,"line":102},[99,3005,3006],{"class":168},"\u002F\u002F从数字0-9打印\n",[99,3008,3009,3012,3014,3016,3019,3021,3023,3026,3028,3030,3032,3034],{"class":101,"line":22},[99,3010,3011],{"class":105},"for",[99,3013,110],{"class":109},[99,3015,113],{"class":105},[99,3017,3018],{"class":109}," i",[99,3020,155],{"class":105},[99,3022,301],{"class":158},[99,3024,3025],{"class":109},";i",[99,3027,1020],{"class":105},[99,3029,556],{"class":158},[99,3031,3025],{"class":109},[99,3033,2278],{"class":105},[99,3035,116],{"class":109},[99,3037,3038],{"class":101,"line":1165},[99,3039,1532],{"class":109},[99,3041,3042,3044,3046,3048,3050],{"class":101,"line":1180},[99,3043,1537],{"class":109},[99,3045,1154],{"class":105},[99,3047,551],{"class":109},[99,3049,1154],{"class":105},[99,3051,1177],{"class":109},[99,3053,3054],{"class":101,"line":1186},[99,3055,1551],{"class":109},[99,3057,3058],{"class":101,"line":1200},[99,3059,3060],{"class":168},"\u002F\u002F上式可以进行拆分\n",[99,3062,3063,3065,3067,3069],{"class":101,"line":1206},[99,3064,113],{"class":105},[99,3066,3018],{"class":109},[99,3068,155],{"class":105},[99,3070,3071],{"class":158},"0\n",[99,3073,3074,3076],{"class":101,"line":1297},[99,3075,3011],{"class":105},[99,3077,3078],{"class":109},"(;;;)\n",[99,3080,3081],{"class":101,"line":1303},[99,3082,1532],{"class":109},[99,3084,3085,3088,3091,3093,3095],{"class":101,"line":1315},[99,3086,3087],{"class":105},"    if",[99,3089,3090],{"class":109},"(i",[99,3092,1696],{"class":105},[99,3094,556],{"class":158},[99,3096,116],{"class":109},[99,3098,3099],{"class":101,"line":1598},[99,3100,2016],{"class":109},[99,3102,3103,3106],{"class":101,"line":1603},[99,3104,3105],{"class":105},"        break",[99,3107,1276],{"class":109},[99,3109,3110],{"class":101,"line":1609},[99,3111,2173],{"class":109},[99,3113,3114,3116,3118,3120,3122],{"class":101,"line":1614},[99,3115,1537],{"class":109},[99,3117,1154],{"class":105},[99,3119,551],{"class":109},[99,3121,1154],{"class":105},[99,3123,1177],{"class":109},[99,3125,3126,3129,3131],{"class":101,"line":1628},[99,3127,3128],{"class":109},"    i",[99,3130,2278],{"class":105},[99,3132,1276],{"class":109},[99,3134,3135],{"class":101,"line":1633},[99,3136,1551],{"class":109},[14,3138,3139],{},"小练习",[90,3141,3143],{"className":92,"code":3142,"language":94,"meta":21,"style":21},"#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",[96,3144,3145,3151,3161,3169,3173,3178,3183,3211,3215,3220,3225,3266,3270,3283,3287,3291,3295,3307,3311,3315],{"__ignoreMap":21},[99,3146,3147,3149],{"class":101,"line":102},[99,3148,1935],{"class":105},[99,3150,1938],{"class":214},[99,3152,3153,3155,3157,3159],{"class":101,"line":22},[99,3154,1943],{"class":105},[99,3156,1946],{"class":105},[99,3158,1950],{"class":1949},[99,3160,1276],{"class":109},[99,3162,3163,3165,3167],{"class":101,"line":1165},[99,3164,113],{"class":105},[99,3166,1959],{"class":1949},[99,3168,1962],{"class":109},[99,3170,3171],{"class":101,"line":1180},[99,3172,1532],{"class":109},[99,3174,3175],{"class":101,"line":1186},[99,3176,3177],{"class":168},"    \u002F\u002F敲桌子案例\n",[99,3179,3180],{"class":101,"line":1200},[99,3181,3182],{"class":168},"    \u002F\u002F1.先输出1-100的数字\n",[99,3184,3185,3188,3190,3192,3194,3196,3198,3201,3203,3205,3207,3209],{"class":101,"line":1206},[99,3186,3187],{"class":105},"    for",[99,3189,110],{"class":109},[99,3191,113],{"class":105},[99,3193,3018],{"class":109},[99,3195,155],{"class":105},[99,3197,327],{"class":158},[99,3199,3200],{"class":109},"; i",[99,3202,1574],{"class":105},[99,3204,421],{"class":158},[99,3206,3200],{"class":109},[99,3208,2278],{"class":105},[99,3210,116],{"class":109},[99,3212,3213],{"class":101,"line":1297},[99,3214,2016],{"class":109},[99,3216,3217],{"class":101,"line":1303},[99,3218,3219],{"class":168},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[99,3221,3222],{"class":101,"line":1315},[99,3223,3224],{"class":168},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[99,3226,3227,3229,3231,3233,3235,3237,3239,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264],{"class":101,"line":1598},[99,3228,2483],{"class":105},[99,3230,3090],{"class":109},[99,3232,438],{"class":105},[99,3234,479],{"class":158},[99,3236,2935],{"class":105},[99,3238,301],{"class":158},[99,3240,3241],{"class":105}," ||",[99,3243,3018],{"class":109},[99,3245,438],{"class":105},[99,3247,556],{"class":158},[99,3249,2935],{"class":105},[99,3251,479],{"class":158},[99,3253,3241],{"class":105},[99,3255,3018],{"class":109},[99,3257,694],{"class":105},[99,3259,556],{"class":158},[99,3261,2935],{"class":105},[99,3263,479],{"class":158},[99,3265,116],{"class":109},[99,3267,3268],{"class":101,"line":1603},[99,3269,2496],{"class":109},[99,3271,3272,3274,3276,3279,3281],{"class":101,"line":1609},[99,3273,2501],{"class":109},[99,3275,1154],{"class":105},[99,3277,3278],{"class":214},"\"敲桌子\"",[99,3280,1154],{"class":105},[99,3282,1177],{"class":109},[99,3284,3285],{"class":101,"line":1614},[99,3286,2515],{"class":109},[99,3288,3289],{"class":101,"line":1628},[99,3290,2556],{"class":105},[99,3292,3293],{"class":101,"line":1633},[99,3294,2496],{"class":109},[99,3296,3297,3299,3301,3303,3305],{"class":101,"line":1639},[99,3298,2501],{"class":109},[99,3300,1154],{"class":105},[99,3302,551],{"class":109},[99,3304,1154],{"class":105},[99,3306,1177],{"class":109},[99,3308,3309],{"class":101,"line":1660},[99,3310,2515],{"class":109},[99,3312,3313],{"class":101,"line":1665},[99,3314,2173],{"class":109},[99,3316,3317],{"class":101,"line":1679},[99,3318,1551],{"class":109},[14,3320,3321],{},"嵌套实现星图",[90,3323,3325],{"className":92,"code":3324,"language":94,"meta":21,"style":21},"#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",[96,3326,3327,3333,3343,3351,3355,3381,3385,3414,3418,3429,3433,3442,3446],{"__ignoreMap":21},[99,3328,3329,3331],{"class":101,"line":102},[99,3330,1935],{"class":105},[99,3332,1938],{"class":214},[99,3334,3335,3337,3339,3341],{"class":101,"line":22},[99,3336,1943],{"class":105},[99,3338,1946],{"class":105},[99,3340,1950],{"class":1949},[99,3342,1276],{"class":109},[99,3344,3345,3347,3349],{"class":101,"line":1165},[99,3346,113],{"class":105},[99,3348,1959],{"class":1949},[99,3350,1962],{"class":109},[99,3352,3353],{"class":101,"line":1180},[99,3354,1532],{"class":109},[99,3356,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379],{"class":101,"line":1186},[99,3358,3187],{"class":105},[99,3360,1644],{"class":109},[99,3362,113],{"class":105},[99,3364,3018],{"class":109},[99,3366,155],{"class":105},[99,3368,301],{"class":158},[99,3370,3025],{"class":109},[99,3372,1020],{"class":105},[99,3374,556],{"class":158},[99,3376,3025],{"class":109},[99,3378,2278],{"class":105},[99,3380,116],{"class":109},[99,3382,3383],{"class":101,"line":1200},[99,3384,2016],{"class":109},[99,3386,3387,3390,3392,3394,3397,3399,3401,3404,3406,3408,3410,3412],{"class":101,"line":1206},[99,3388,3389],{"class":105},"        for",[99,3391,1644],{"class":109},[99,3393,113],{"class":105},[99,3395,3396],{"class":109}," j",[99,3398,155],{"class":105},[99,3400,301],{"class":158},[99,3402,3403],{"class":109},";j",[99,3405,1020],{"class":105},[99,3407,556],{"class":158},[99,3409,3403],{"class":109},[99,3411,2278],{"class":105},[99,3413,116],{"class":109},[99,3415,3416],{"class":101,"line":1297},[99,3417,2496],{"class":109},[99,3419,3420,3422,3424,3427],{"class":101,"line":1303},[99,3421,2501],{"class":109},[99,3423,1154],{"class":105},[99,3425,3426],{"class":214},"\"*\"",[99,3428,1276],{"class":109},[99,3430,3431],{"class":101,"line":1315},[99,3432,2515],{"class":109},[99,3434,3435,3438,3440],{"class":101,"line":1598},[99,3436,3437],{"class":109},"        cout",[99,3439,1154],{"class":105},[99,3441,1177],{"class":109},[99,3443,3444],{"class":101,"line":1603},[99,3445,2173],{"class":109},[99,3447,3448],{"class":101,"line":1609},[99,3449,1551],{"class":109},[14,3451,3452],{},"乘法口诀表",[90,3454,3456],{"className":92,"code":3455,"language":94,"meta":21,"style":21},"#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",[96,3457,3458,3464,3474,3482,3486,3512,3516,3541,3545,3585,3589,3597,3601],{"__ignoreMap":21},[99,3459,3460,3462],{"class":101,"line":102},[99,3461,1935],{"class":105},[99,3463,2320],{"class":214},[99,3465,3466,3468,3470,3472],{"class":101,"line":22},[99,3467,1943],{"class":105},[99,3469,1946],{"class":105},[99,3471,1950],{"class":1949},[99,3473,1276],{"class":109},[99,3475,3476,3478,3480],{"class":101,"line":1165},[99,3477,113],{"class":105},[99,3479,1959],{"class":1949},[99,3481,1962],{"class":109},[99,3483,3484],{"class":101,"line":1180},[99,3485,1532],{"class":109},[99,3487,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510],{"class":101,"line":1186},[99,3489,3187],{"class":105},[99,3491,110],{"class":109},[99,3493,113],{"class":105},[99,3495,3018],{"class":109},[99,3497,155],{"class":105},[99,3499,327],{"class":158},[99,3501,3025],{"class":109},[99,3503,1020],{"class":105},[99,3505,556],{"class":158},[99,3507,3025],{"class":109},[99,3509,2278],{"class":105},[99,3511,116],{"class":109},[99,3513,3514],{"class":101,"line":1200},[99,3515,2016],{"class":109},[99,3517,3518,3520,3522,3524,3526,3528,3530,3532,3534,3537,3539],{"class":101,"line":1206},[99,3519,3389],{"class":105},[99,3521,110],{"class":109},[99,3523,113],{"class":105},[99,3525,3396],{"class":109},[99,3527,155],{"class":105},[99,3529,327],{"class":158},[99,3531,3403],{"class":109},[99,3533,1574],{"class":105},[99,3535,3536],{"class":109},"i;j",[99,3538,2278],{"class":105},[99,3540,116],{"class":109},[99,3542,3543],{"class":101,"line":1297},[99,3544,2496],{"class":109},[99,3546,3547,3549,3551,3553,3555,3557,3559,3561,3563,3566,3568,3570,3572,3574,3576,3579,3581,3583],{"class":101,"line":1303},[99,3548,2501],{"class":109},[99,3550,1154],{"class":105},[99,3552,577],{"class":109},[99,3554,1154],{"class":105},[99,3556,3426],{"class":214},[99,3558,1154],{"class":105},[99,3560,551],{"class":109},[99,3562,1154],{"class":105},[99,3564,3565],{"class":214},"\"=\"",[99,3567,1154],{"class":105},[99,3569,551],{"class":109},[99,3571,565],{"class":105},[99,3573,577],{"class":109},[99,3575,1154],{"class":105},[99,3577,3578],{"class":214},"'",[99,3580,1216],{"class":158},[99,3582,3578],{"class":214},[99,3584,1276],{"class":109},[99,3586,3587],{"class":101,"line":1315},[99,3588,2515],{"class":109},[99,3590,3591,3593,3595],{"class":101,"line":1598},[99,3592,3437],{"class":109},[99,3594,1154],{"class":105},[99,3596,1177],{"class":109},[99,3598,3599],{"class":101,"line":1603},[99,3600,2173],{"class":109},[99,3602,3603],{"class":101,"line":1609},[99,3604,1551],{"class":109},[70,3606,3608],{"id":3607},"_163跳出语句","1.6.3跳出语句",[53,3610,3611],{},[56,3612,3613],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3615,3616],{},"break使用时机：",[1117,3618,3619,3622,3625],{},[56,3620,3621],{},"出现在switch条件语句中，作用是终止case并跳出switch",[56,3623,3624],{},"出现在循环结构中，作用是跳出当前的循环结构",[56,3626,3627],{},"出现在嵌套循环中，跳出最近的内层循环语句",[53,3629,3630,3633],{"start":22},[56,3631,3632],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[56,3634,3635],{},"goto语句\n语法：goto 标记;",[14,3637,3638],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[90,3640,3642],{"className":92,"code":3641,"language":94,"meta":21,"style":21},"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",[96,3643,3644,3652,3656,3669,3679,3692,3705,3718,3726,3742],{"__ignoreMap":21},[99,3645,3646,3648,3650],{"class":101,"line":102},[99,3647,113],{"class":105},[99,3649,1959],{"class":1949},[99,3651,1962],{"class":109},[99,3653,3654],{"class":101,"line":22},[99,3655,1532],{"class":109},[99,3657,3658,3660,3662,3665,3667],{"class":101,"line":1165},[99,3659,1537],{"class":109},[99,3661,1154],{"class":105},[99,3663,3664],{"class":214},"\"1\"",[99,3666,1154],{"class":105},[99,3668,1177],{"class":109},[99,3670,3671,3674,3677],{"class":101,"line":1180},[99,3672,3673],{"class":105},"    goto",[99,3675,3676],{"class":1949}," FLAG",[99,3678,1276],{"class":109},[99,3680,3681,3683,3685,3688,3690],{"class":101,"line":1186},[99,3682,1537],{"class":109},[99,3684,1154],{"class":105},[99,3686,3687],{"class":214},"\"2\"",[99,3689,1154],{"class":105},[99,3691,1177],{"class":109},[99,3693,3694,3696,3698,3701,3703],{"class":101,"line":1200},[99,3695,1537],{"class":109},[99,3697,1154],{"class":105},[99,3699,3700],{"class":214},"\"3\"",[99,3702,1154],{"class":105},[99,3704,1177],{"class":109},[99,3706,3707,3709,3711,3714,3716],{"class":101,"line":1206},[99,3708,1537],{"class":109},[99,3710,1154],{"class":105},[99,3712,3713],{"class":214},"\"4\"",[99,3715,1154],{"class":105},[99,3717,1177],{"class":109},[99,3719,3720,3723],{"class":101,"line":1297},[99,3721,3722],{"class":1949},"    FLAG",[99,3724,3725],{"class":109},":\n",[99,3727,3728,3730,3732,3735,3737,3739],{"class":101,"line":1303},[99,3729,1537],{"class":109},[99,3731,1154],{"class":105},[99,3733,3734],{"class":214},"\"5\"",[99,3736,1154],{"class":105},[99,3738,1224],{"class":109},[99,3740,3741],{"class":168},"\u002F\u002F跳过了2,3,4,直接到5\n",[99,3743,3744],{"class":101,"line":1315},[99,3745,1551],{"class":109},[41,3747,3749],{"id":3748},"_17数组","1.7数组",[70,3751,3753],{"id":3752},"_171一维数组","1.7.1一维数组",[53,3755,3756],{},[56,3757,3758],{},"一维数组定义方式",[247,3760,3761,3771],{},[250,3762,3763],{},[253,3764,3765,3768],{},[256,3766,3767],{},"方式",[256,3769,3770],{},"注意事项",[294,3772,3773,3787,3797],{},[253,3774,3775,3781],{},[299,3776,3777,3778,165],{},"数据类型 数组名",[99,3779,3780],{},"数组长度",[299,3782,3783,3784,3786],{},"这种方式是先定义再arr",[99,3785,551],{},"赋值",[253,3788,3789,3794],{},[299,3790,3777,3791,3793],{},[99,3792,3780],{},"={值1,值2....};",[299,3795,3796],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[253,3798,3799,3803],{},[299,3800,3777,3801,3793],{},[99,3802],{},[299,3804,3805,3806,3808],{},"int arr",[99,3807],{},";这是不正确的，按照这样的方式定义必须有初始长度",[53,3810,3811],{"start":22},[56,3812,3813],{},"一维数组数组名\n用途：",[1117,3815,3816],{},[56,3817,3818],{},"1.可以统计整个数组在内存中的长度：",[90,3820,3822],{"className":92,"code":3821,"language":94,"meta":21,"style":21},"sizeof(arr);\nsizeof(arr[0]);\n",[96,3823,3824,3831],{"__ignoreMap":21},[99,3825,3826,3828],{"class":101,"line":102},[99,3827,106],{"class":105},[99,3829,3830],{"class":109},"(arr);\n",[99,3832,3833,3835,3838,3840],{"class":101,"line":22},[99,3834,106],{"class":105},[99,3836,3837],{"class":109},"(arr[",[99,3839,301],{"class":158},[99,3841,3842],{"class":109},"]);\n",[1117,3844,3845],{},[56,3846,3847],{},"2.可以获取数组在内存中的首地址:",[90,3849,3851],{"className":92,"code":3850,"language":94,"meta":21,"style":21},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[96,3852,3853,3858,3871,3876],{"__ignoreMap":21},[99,3854,3855],{"class":101,"line":102},[99,3856,3857],{"class":168},"\u002F\u002F查看16进制的首地址\n",[99,3859,3860,3862,3864,3867,3869],{"class":101,"line":22},[99,3861,1355],{"class":109},[99,3863,1154],{"class":105},[99,3865,3866],{"class":109},"arr",[99,3868,1154],{"class":105},[99,3870,1177],{"class":109},[99,3872,3873],{"class":101,"line":1165},[99,3874,3875],{"class":168},"\u002F\u002F看10进制数\n",[99,3877,3878,3880,3882,3884,3886,3888,3890,3893,3895,3897,3899],{"class":101,"line":1180},[99,3879,1355],{"class":109},[99,3881,1154],{"class":105},[99,3883,110],{"class":109},[99,3885,113],{"class":105},[99,3887,539],{"class":109},[99,3889,463],{"class":105},[99,3891,3892],{"class":109},"arr[",[99,3894,301],{"class":158},[99,3896,1050],{"class":109},[99,3898,1154],{"class":105},[99,3900,1177],{"class":109},[14,3902,3903],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1117,3905,3906],{},[56,3907,3908],{},"1️⃣五只小猪称体重",[90,3910,3912],{"className":92,"code":3911,"language":94,"meta":21,"style":21},"#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",[96,3913,3914,3920,3930,3938,3942,3982,3995,4021,4025,4037,4041,4051,4055,4059,4072,4082],{"__ignoreMap":21},[99,3915,3916,3918],{"class":101,"line":102},[99,3917,1935],{"class":105},[99,3919,1938],{"class":214},[99,3921,3922,3924,3926,3928],{"class":101,"line":22},[99,3923,1943],{"class":105},[99,3925,1946],{"class":105},[99,3927,1950],{"class":1949},[99,3929,1276],{"class":109},[99,3931,3932,3934,3936],{"class":101,"line":1165},[99,3933,113],{"class":105},[99,3935,1959],{"class":1949},[99,3937,1962],{"class":109},[99,3939,3940],{"class":101,"line":1180},[99,3941,1532],{"class":109},[99,3943,3944,3946,3949,3951,3953,3955,3957,3960,3962,3965,3967,3969,3971,3974,3976,3979],{"class":101,"line":1186},[99,3945,1971],{"class":105},[99,3947,3948],{"class":109}," arr[",[99,3950,429],{"class":158},[99,3952,1050],{"class":109},[99,3954,155],{"class":105},[99,3956,1006],{"class":109},[99,3958,3959],{"class":158},"300",[99,3961,488],{"class":109},[99,3963,3964],{"class":158},"350",[99,3966,488],{"class":109},[99,3968,1708],{"class":158},[99,3970,488],{"class":109},[99,3972,3973],{"class":158},"400",[99,3975,488],{"class":109},[99,3977,3978],{"class":158},"250",[99,3980,3981],{"class":109},"};\n",[99,3983,3984,3986,3989,3991,3993],{"class":101,"line":1200},[99,3985,1971],{"class":105},[99,3987,3988],{"class":109}," tmp",[99,3990,155],{"class":105},[99,3992,301],{"class":158},[99,3994,1276],{"class":109},[99,3996,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019],{"class":101,"line":1206},[99,3998,3187],{"class":105},[99,4000,1644],{"class":109},[99,4002,113],{"class":105},[99,4004,3018],{"class":109},[99,4006,155],{"class":105},[99,4008,301],{"class":158},[99,4010,3025],{"class":109},[99,4012,1020],{"class":105},[99,4014,429],{"class":158},[99,4016,3025],{"class":109},[99,4018,2278],{"class":105},[99,4020,116],{"class":109},[99,4022,4023],{"class":101,"line":1297},[99,4024,2016],{"class":109},[99,4026,4027,4029,4032,4034],{"class":101,"line":1303},[99,4028,2483],{"class":105},[99,4030,4031],{"class":109},"(tmp",[99,4033,1020],{"class":105},[99,4035,4036],{"class":109},"arr[i])\n",[99,4038,4039],{"class":101,"line":1315},[99,4040,2496],{"class":109},[99,4042,4043,4046,4048],{"class":101,"line":1598},[99,4044,4045],{"class":109},"            tmp",[99,4047,155],{"class":105},[99,4049,4050],{"class":109},"arr[i];\n",[99,4052,4053],{"class":101,"line":1603},[99,4054,2515],{"class":109},[99,4056,4057],{"class":101,"line":1609},[99,4058,2173],{"class":109},[99,4060,4061,4063,4065,4068,4070],{"class":101,"line":1614},[99,4062,1537],{"class":109},[99,4064,1154],{"class":105},[99,4066,4067],{"class":109},"tmp",[99,4069,1154],{"class":105},[99,4071,1177],{"class":109},[99,4073,4074,4077,4080],{"class":101,"line":1628},[99,4075,4076],{"class":105},"    return",[99,4078,4079],{"class":158}," 0",[99,4081,1276],{"class":109},[99,4083,4084],{"class":101,"line":1633},[99,4085,1551],{"class":109},[1117,4087,4088],{},[56,4089,4090],{},"2️⃣数组元素逆置",[90,4092,4094],{"className":92,"code":4093,"language":94,"meta":21,"style":21},"\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",[96,4095,4096,4101,4107,4117,4125,4129,4164,4180,4212,4225,4230,4235,4247,4257,4267,4272,4281,4291,4296,4301,4328,4332,4348,4352,4363,4372],{"__ignoreMap":21},[99,4097,4098],{"class":101,"line":102},[99,4099,4100],{"class":168},"\u002F\u002F元素逆置\n",[99,4102,4103,4105],{"class":101,"line":22},[99,4104,1935],{"class":105},[99,4106,1938],{"class":214},[99,4108,4109,4111,4113,4115],{"class":101,"line":1165},[99,4110,1943],{"class":105},[99,4112,1946],{"class":105},[99,4114,1950],{"class":1949},[99,4116,1276],{"class":109},[99,4118,4119,4121,4123],{"class":101,"line":1180},[99,4120,113],{"class":105},[99,4122,1959],{"class":1949},[99,4124,1962],{"class":109},[99,4126,4127],{"class":101,"line":1186},[99,4128,1532],{"class":109},[99,4130,4131,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162],{"class":101,"line":1200},[99,4132,4133],{"class":105},"   int",[99,4135,3948],{"class":109},[99,4137,429],{"class":158},[99,4139,1050],{"class":109},[99,4141,155],{"class":105},[99,4143,1006],{"class":109},[99,4145,327],{"class":158},[99,4147,488],{"class":109},[99,4149,187],{"class":158},[99,4151,488],{"class":109},[99,4153,181],{"class":158},[99,4155,488],{"class":109},[99,4157,403],{"class":158},[99,4159,488],{"class":109},[99,4161,429],{"class":158},[99,4163,3981],{"class":109},[99,4165,4166,4168,4171,4173,4175,4177],{"class":101,"line":1206},[99,4167,4133],{"class":105},[99,4169,4170],{"class":109}," start",[99,4172,155],{"class":105},[99,4174,301],{"class":158},[99,4176,165],{"class":109},[99,4178,4179],{"class":168},"\u002F\u002F起始下标\n",[99,4181,4182,4184,4187,4190,4193,4196,4198,4200,4203,4205,4207,4209],{"class":101,"line":1297},[99,4183,4133],{"class":105},[99,4185,4186],{"class":109}," end",[99,4188,4189],{"class":105},"=sizeof",[99,4191,4192],{"class":109},"(arr)",[99,4194,4195],{"class":105},"\u002Fsizeof",[99,4197,3837],{"class":109},[99,4199,301],{"class":158},[99,4201,4202],{"class":109},"])",[99,4204,642],{"class":105},[99,4206,327],{"class":158},[99,4208,165],{"class":109},[99,4210,4211],{"class":168},"\u002F\u002F结束下标\n",[99,4213,4214,4217,4220,4222],{"class":101,"line":1303},[99,4215,4216],{"class":105},"   while",[99,4218,4219],{"class":109}," (start",[99,4221,1020],{"class":105},[99,4223,4224],{"class":109},"end)\n",[99,4226,4227],{"class":101,"line":1315},[99,4228,4229],{"class":109},"   {\n",[99,4231,4232],{"class":101,"line":1598},[99,4233,4234],{"class":168},"    \u002F\u002F实现元素互换代码\n",[99,4236,4237,4239,4242,4244],{"class":101,"line":1603},[99,4238,1971],{"class":105},[99,4240,4241],{"class":109}," temp",[99,4243,155],{"class":105},[99,4245,4246],{"class":109},"arr[start];\n",[99,4248,4249,4252,4254],{"class":101,"line":1609},[99,4250,4251],{"class":109},"    arr[start]",[99,4253,155],{"class":105},[99,4255,4256],{"class":109},"arr[end];\n",[99,4258,4259,4262,4264],{"class":101,"line":1614},[99,4260,4261],{"class":109},"    arr[end]",[99,4263,155],{"class":105},[99,4265,4266],{"class":109},"temp;\n",[99,4268,4269],{"class":101,"line":1628},[99,4270,4271],{"class":168},"    \u002F\u002F下标更新\n",[99,4273,4274,4277,4279],{"class":101,"line":1633},[99,4275,4276],{"class":109},"    start",[99,4278,2278],{"class":105},[99,4280,1276],{"class":109},[99,4282,4283,4286,4289],{"class":101,"line":1639},[99,4284,4285],{"class":109},"    end",[99,4287,4288],{"class":105},"--",[99,4290,1276],{"class":109},[99,4292,4293],{"class":101,"line":1660},[99,4294,4295],{"class":109},"   }\n",[99,4297,4298],{"class":101,"line":1665},[99,4299,4300],{"class":168},"   \u002F\u002F输出逆置后的数组\n",[99,4302,4303,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326],{"class":101,"line":1679},[99,4304,4305],{"class":105},"   for",[99,4307,1644],{"class":109},[99,4309,113],{"class":105},[99,4311,3018],{"class":109},[99,4313,155],{"class":105},[99,4315,301],{"class":158},[99,4317,3025],{"class":109},[99,4319,1020],{"class":105},[99,4321,429],{"class":158},[99,4323,3025],{"class":109},[99,4325,2278],{"class":105},[99,4327,116],{"class":109},[99,4329,4330],{"class":101,"line":1684},[99,4331,4229],{"class":109},[99,4333,4334,4336,4338,4341,4343,4346],{"class":101,"line":1713},[99,4335,1537],{"class":109},[99,4337,1154],{"class":105},[99,4339,4340],{"class":109},"arr[i]",[99,4342,1154],{"class":105},[99,4344,4345],{"class":214},"\" \"",[99,4347,1276],{"class":109},[99,4349,4350],{"class":101,"line":1718},[99,4351,4295],{"class":109},[99,4353,4354,4357,4359,4361],{"class":101,"line":1735},[99,4355,4356],{"class":1949},"   system",[99,4358,110],{"class":109},[99,4360,2294],{"class":214},[99,4362,2705],{"class":109},[99,4364,4365,4368,4370],{"class":101,"line":1740},[99,4366,4367],{"class":105},"   return",[99,4369,4079],{"class":158},[99,4371,1276],{"class":109},[99,4373,4374],{"class":101,"line":1745},[99,4375,1551],{"class":109},[1117,4377,4378],{},[56,4379,4380],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[90,4382,4384],{"className":92,"code":4383,"language":94,"meta":21,"style":21},"\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",[96,4385,4386,4391,4397,4407,4415,4419,4471,4484,4510,4514,4528,4532,4537,4542,4572,4576,4581,4615,4619,4624,4644,4649,4661,4677,4692,4697,4701,4705,4718,4744,4748,4762,4766,4774],{"__ignoreMap":21},[99,4387,4388],{"class":101,"line":102},[99,4389,4390],{"class":168},"\u002F\u002F冒泡排序,升序\n",[99,4392,4393,4395],{"class":101,"line":22},[99,4394,1935],{"class":105},[99,4396,1938],{"class":214},[99,4398,4399,4401,4403,4405],{"class":101,"line":1165},[99,4400,1943],{"class":105},[99,4402,1946],{"class":105},[99,4404,1950],{"class":1949},[99,4406,1276],{"class":109},[99,4408,4409,4411,4413],{"class":101,"line":1180},[99,4410,113],{"class":105},[99,4412,1959],{"class":1949},[99,4414,1962],{"class":109},[99,4416,4417],{"class":101,"line":1186},[99,4418,1532],{"class":109},[99,4420,4421,4423,4425,4427,4430,4432,4435,4437,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469],{"class":101,"line":1200},[99,4422,1971],{"class":105},[99,4424,3948],{"class":109},[99,4426,530],{"class":158},[99,4428,4429],{"class":109},"] ",[99,4431,155],{"class":105},[99,4433,4434],{"class":109}," {",[99,4436,403],{"class":158},[99,4438,488],{"class":109},[99,4440,187],{"class":158},[99,4442,488],{"class":109},[99,4444,505],{"class":158},[99,4446,488],{"class":109},[99,4448,301],{"class":158},[99,4450,488],{"class":109},[99,4452,429],{"class":158},[99,4454,488],{"class":109},[99,4456,479],{"class":158},[99,4458,488],{"class":109},[99,4460,327],{"class":158},[99,4462,488],{"class":109},[99,4464,181],{"class":158},[99,4466,488],{"class":109},[99,4468,530],{"class":158},[99,4470,3981],{"class":109},[99,4472,4473,4475,4477,4480,4482],{"class":101,"line":1206},[99,4474,1537],{"class":109},[99,4476,1154],{"class":105},[99,4478,4479],{"class":214},"\"排序前：\"",[99,4481,1154],{"class":105},[99,4483,1177],{"class":109},[99,4485,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508],{"class":101,"line":1297},[99,4487,3187],{"class":105},[99,4489,1644],{"class":109},[99,4491,113],{"class":105},[99,4493,3018],{"class":109},[99,4495,155],{"class":105},[99,4497,301],{"class":158},[99,4499,3025],{"class":109},[99,4501,1020],{"class":105},[99,4503,530],{"class":158},[99,4505,3025],{"class":109},[99,4507,2278],{"class":105},[99,4509,116],{"class":109},[99,4511,4512],{"class":101,"line":1303},[99,4513,2016],{"class":109},[99,4515,4516,4518,4520,4522,4524,4526],{"class":101,"line":1315},[99,4517,3437],{"class":109},[99,4519,1154],{"class":105},[99,4521,4340],{"class":109},[99,4523,1154],{"class":105},[99,4525,4345],{"class":214},[99,4527,1276],{"class":109},[99,4529,4530],{"class":101,"line":1598},[99,4531,2173],{"class":109},[99,4533,4534],{"class":101,"line":1603},[99,4535,4536],{"class":168},"    \u002F\u002F开始冒泡排序\n",[99,4538,4539],{"class":101,"line":1609},[99,4540,4541],{"class":168},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[99,4543,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570],{"class":101,"line":1614},[99,4545,3187],{"class":105},[99,4547,1644],{"class":109},[99,4549,113],{"class":105},[99,4551,3018],{"class":109},[99,4553,155],{"class":105},[99,4555,301],{"class":158},[99,4557,3025],{"class":109},[99,4559,1020],{"class":105},[99,4561,530],{"class":158},[99,4563,642],{"class":105},[99,4565,327],{"class":158},[99,4567,3025],{"class":109},[99,4569,2278],{"class":105},[99,4571,116],{"class":109},[99,4573,4574],{"class":101,"line":1628},[99,4575,2016],{"class":109},[99,4577,4578],{"class":101,"line":1633},[99,4579,4580],{"class":168},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[99,4582,4583,4585,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613],{"class":101,"line":1639},[99,4584,3389],{"class":105},[99,4586,1644],{"class":109},[99,4588,113],{"class":105},[99,4590,3396],{"class":109},[99,4592,155],{"class":105},[99,4594,301],{"class":158},[99,4596,3403],{"class":109},[99,4598,1020],{"class":105},[99,4600,530],{"class":158},[99,4602,642],{"class":105},[99,4604,551],{"class":109},[99,4606,642],{"class":105},[99,4608,327],{"class":158},[99,4610,3403],{"class":109},[99,4612,2278],{"class":105},[99,4614,116],{"class":109},[99,4616,4617],{"class":101,"line":1660},[99,4618,2496],{"class":109},[99,4620,4621],{"class":101,"line":1665},[99,4622,4623],{"class":168},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[99,4625,4626,4629,4632,4634,4637,4639,4641],{"class":101,"line":1679},[99,4627,4628],{"class":105},"            if",[99,4630,4631],{"class":109},"(arr[j]",[99,4633,1070],{"class":105},[99,4635,4636],{"class":109},"arr[j",[99,4638,591],{"class":105},[99,4640,327],{"class":158},[99,4642,4643],{"class":109},"])\n",[99,4645,4646],{"class":101,"line":1684},[99,4647,4648],{"class":109},"            {\n",[99,4650,4651,4654,4656,4658],{"class":101,"line":1713},[99,4652,4653],{"class":105},"                int",[99,4655,4241],{"class":109},[99,4657,155],{"class":105},[99,4659,4660],{"class":109},"arr[j];\n",[99,4662,4663,4666,4668,4670,4672,4674],{"class":101,"line":1718},[99,4664,4665],{"class":109},"                arr[j]",[99,4667,155],{"class":105},[99,4669,4636],{"class":109},[99,4671,591],{"class":105},[99,4673,327],{"class":158},[99,4675,4676],{"class":109},"];\n",[99,4678,4679,4682,4684,4686,4688,4690],{"class":101,"line":1735},[99,4680,4681],{"class":109},"                arr[j",[99,4683,591],{"class":105},[99,4685,327],{"class":158},[99,4687,1050],{"class":109},[99,4689,155],{"class":105},[99,4691,4266],{"class":109},[99,4693,4694],{"class":101,"line":1740},[99,4695,4696],{"class":109},"            }\n",[99,4698,4699],{"class":101,"line":1745},[99,4700,2515],{"class":109},[99,4702,4703],{"class":101,"line":1750},[99,4704,2173],{"class":109},[99,4706,4707,4709,4711,4714,4716],{"class":101,"line":1764},[99,4708,1537],{"class":109},[99,4710,1154],{"class":105},[99,4712,4713],{"class":214},"\"排序后：\"",[99,4715,1154],{"class":105},[99,4717,1177],{"class":109},[99,4719,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742],{"class":101,"line":1769},[99,4721,3187],{"class":105},[99,4723,1644],{"class":109},[99,4725,113],{"class":105},[99,4727,3018],{"class":109},[99,4729,155],{"class":105},[99,4731,301],{"class":158},[99,4733,3025],{"class":109},[99,4735,1020],{"class":105},[99,4737,530],{"class":158},[99,4739,3025],{"class":109},[99,4741,2278],{"class":105},[99,4743,116],{"class":109},[99,4745,4746],{"class":101,"line":2563},[99,4747,2016],{"class":109},[99,4749,4750,4752,4754,4756,4758,4760],{"class":101,"line":2577},[99,4751,3437],{"class":109},[99,4753,1154],{"class":105},[99,4755,4340],{"class":109},[99,4757,1154],{"class":105},[99,4759,4345],{"class":214},[99,4761,1276],{"class":109},[99,4763,4764],{"class":101,"line":2585},[99,4765,2173],{"class":109},[99,4767,4768,4770,4772],{"class":101,"line":2590},[99,4769,4076],{"class":105},[99,4771,4079],{"class":158},[99,4773,1276],{"class":109},[99,4775,4776],{"class":101,"line":2596},[99,4777,1551],{"class":109},[70,4779,4781],{"id":4780},"_172二维数组","1.7.2二维数组",[53,4783,4784],{},[56,4785,4786],{},"二维数组的四种定义方式",[247,4788,4789,4798],{},[250,4790,4791],{},[253,4792,4793,4796],{},[256,4794,4795],{},"序号",[256,4797,3767],{},[294,4799,4800,4810,4819,4828,4837],{},[253,4801,4802,4804],{},[299,4803,327],{},[299,4805,4806,4807,165],{},"数据类型 数组名[行数]",[99,4808,4809],{},"列数",[253,4811,4812,4814],{},[299,4813,187],{},[299,4815,4806,4816,4818],{},[99,4817,4809],{},"={ {数据1,数据2}，{数据3，数据4}... }",[253,4820,4821,4823],{},[299,4822,181],{},[299,4824,4806,4825,4827],{},[99,4826,4809],{},"={数据1,数据2,数据3...}",[253,4829,4830,4832],{},[299,4831,403],{},[299,4833,4834,4835,4827],{},"数据类型 数组名[]",[99,4836,4809],{},[253,4838,4839,4842],{},[299,4840,4841],{},"注意：不能只省略列数",[299,4843],{},[53,4845,4846],{"start":22},[56,4847,4848],{},"二维数组数组名",[1117,4850,4851,4854],{},[56,4852,4853],{},"1.查看二维数组所占内存空间",[56,4855,4856],{},"2.获取二维数组首地址",[14,4858,4859],{},"已知二维数组，求二维数组的行数与列数",[90,4861,4863],{"className":92,"code":4862,"language":94,"meta":21,"style":21},"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",[96,4864,4865,4873,4877,4895,4899,4917,4933,4938,4963,4996],{"__ignoreMap":21},[99,4866,4867,4869,4871],{"class":101,"line":102},[99,4868,113],{"class":105},[99,4870,1959],{"class":1949},[99,4872,1962],{"class":109},[99,4874,4875],{"class":101,"line":22},[99,4876,1532],{"class":109},[99,4878,4879,4881,4883,4885,4888,4890,4892],{"class":101,"line":1165},[99,4880,1971],{"class":105},[99,4882,3948],{"class":109},[99,4884,187],{"class":158},[99,4886,4887],{"class":109},"][",[99,4889,181],{"class":158},[99,4891,1050],{"class":109},[99,4893,4894],{"class":105},"=\n",[99,4896,4897],{"class":101,"line":1180},[99,4898,2016],{"class":109},[99,4900,4901,4904,4906,4908,4910,4912,4914],{"class":101,"line":1186},[99,4902,4903],{"class":109},"        {",[99,4905,327],{"class":158},[99,4907,488],{"class":109},[99,4909,187],{"class":158},[99,4911,488],{"class":109},[99,4913,181],{"class":158},[99,4915,4916],{"class":109},"},\n",[99,4918,4919,4921,4923,4925,4927,4929,4931],{"class":101,"line":1200},[99,4920,4903],{"class":109},[99,4922,403],{"class":158},[99,4924,488],{"class":109},[99,4926,429],{"class":158},[99,4928,488],{"class":109},[99,4930,454],{"class":158},[99,4932,1551],{"class":109},[99,4934,4935],{"class":101,"line":1206},[99,4936,4937],{"class":109},"    };\n",[99,4939,4940,4942,4944,4947,4949,4951,4953,4955,4957,4959,4961],{"class":101,"line":1297},[99,4941,1537],{"class":109},[99,4943,1154],{"class":105},[99,4945,4946],{"class":214},"\"二维数组的行数\"",[99,4948,1358],{"class":105},[99,4950,4192],{"class":109},[99,4952,4195],{"class":105},[99,4954,3837],{"class":109},[99,4956,301],{"class":158},[99,4958,4202],{"class":109},[99,4960,1154],{"class":105},[99,4962,1177],{"class":109},[99,4964,4965,4967,4969,4972,4974,4976,4978,4980,4982,4984,4986,4988,4990,4992,4994],{"class":101,"line":1303},[99,4966,1537],{"class":109},[99,4968,1154],{"class":105},[99,4970,4971],{"class":214},"\"二维数组的列数\"",[99,4973,1358],{"class":105},[99,4975,3837],{"class":109},[99,4977,301],{"class":158},[99,4979,4202],{"class":109},[99,4981,4195],{"class":105},[99,4983,3837],{"class":109},[99,4985,301],{"class":158},[99,4987,4887],{"class":109},[99,4989,301],{"class":158},[99,4991,4202],{"class":109},[99,4993,1154],{"class":105},[99,4995,1177],{"class":109},[99,4997,4998],{"class":101,"line":1315},[99,4999,1551],{"class":109},[14,5001,5002],{},"查看二维数组首地址",[90,5004,5006],{"className":92,"code":5005,"language":94,"meta":21,"style":21},"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",[96,5007,5008,5025,5051,5076],{"__ignoreMap":21},[99,5009,5010,5012,5014,5017,5019,5021,5023],{"class":101,"line":102},[99,5011,1355],{"class":109},[99,5013,1154],{"class":105},[99,5015,5016],{"class":214},"\"二维数组首地址：\"",[99,5018,1154],{"class":105},[99,5020,3866],{"class":109},[99,5022,1154],{"class":105},[99,5024,1177],{"class":109},[99,5026,5027,5029,5031,5034,5036,5038,5040,5043,5045,5047,5049],{"class":101,"line":22},[99,5028,1355],{"class":109},[99,5030,1154],{"class":105},[99,5032,5033],{"class":214},"\"二维数组第一行的首地址：\"",[99,5035,1154],{"class":105},[99,5037,110],{"class":109},[99,5039,113],{"class":105},[99,5041,5042],{"class":109},")arr[",[99,5044,301],{"class":158},[99,5046,1050],{"class":109},[99,5048,1154],{"class":105},[99,5050,1177],{"class":109},[99,5052,5053,5055,5057,5060,5062,5064,5066,5068,5070,5072,5074],{"class":101,"line":1165},[99,5054,1355],{"class":109},[99,5056,1154],{"class":105},[99,5058,5059],{"class":214},"\"二维数组第二行的首地址：\"",[99,5061,1154],{"class":105},[99,5063,110],{"class":109},[99,5065,113],{"class":105},[99,5067,5042],{"class":109},[99,5069,327],{"class":158},[99,5071,1050],{"class":109},[99,5073,1154],{"class":105},[99,5075,1177],{"class":109},[99,5077,5078,5080,5082,5085,5087,5089,5091,5093,5095,5097,5099,5101,5103,5105,5107,5109],{"class":101,"line":1180},[99,5079,1355],{"class":109},[99,5081,1154],{"class":105},[99,5083,5084],{"class":214},"\"二维数组第一个元素的首地址:\"",[99,5086,1154],{"class":105},[99,5088,110],{"class":109},[99,5090,113],{"class":105},[99,5092,539],{"class":109},[99,5094,463],{"class":105},[99,5096,3892],{"class":109},[99,5098,301],{"class":158},[99,5100,4887],{"class":109},[99,5102,301],{"class":158},[99,5104,1050],{"class":109},[99,5106,1154],{"class":105},[99,5108,1224],{"class":109},[99,5110,5111],{"class":168},"\u002F\u002F对于数，要加取址符\n",[5113,5114,5115],"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":21,"searchDepth":22,"depth":22,"links":5117},[5118,5119,5120,5128,5129,5135,5140],{"id":43,"depth":22,"text":44},{"id":50,"depth":22,"text":51},{"id":67,"depth":22,"text":68,"children":5121},[5122,5123,5124,5125,5126,5127],{"id":72,"depth":1165,"text":73},{"id":126,"depth":1165,"text":127},{"id":195,"depth":1165,"text":196},{"id":1135,"depth":1165,"text":1136},{"id":1230,"depth":1165,"text":1231},{"id":1329,"depth":1165,"text":1330},{"id":1371,"depth":22,"text":1372},{"id":1439,"depth":22,"text":1440,"children":5130},[5131,5132,5133,5134],{"id":1443,"depth":1165,"text":1444},{"id":1465,"depth":1165,"text":1466},{"id":1474,"depth":1165,"text":1475},{"id":1483,"depth":1165,"text":1484},{"id":1492,"depth":22,"text":1493,"children":5136},[5137,5138,5139],{"id":1496,"depth":1165,"text":1497},{"id":2191,"depth":1165,"text":2192},{"id":3607,"depth":1165,"text":3608},{"id":3748,"depth":22,"text":3749,"children":5141},[5142,5143],{"id":3752,"depth":1165,"text":3753},{"id":4780,"depth":1165,"text":4781},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":34,"description":21},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5150,"title":5151,"body":5152,"description":21,"extension":24,"meta":6252,"navigation":26,"path":6253,"seo":6254,"stem":6255,"__hash__":6256},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5153,"toc":6244},[5154,5157,5161,5169,5177,5180,5246,5250,5253,5329,5333,5336,5339,5342,5555,5559,5564,5628,5633,5700,5705,5796,5799,5904,5908,5911,5917,6061,6065,6068,6082,6085,6130,6133,6241],[10,5155,5151],{"id":5156},"_2函数",[41,5158,5160],{"id":5159},"_21函数概述","2.1函数概述",[53,5162,5163,5166],{},[56,5164,5165],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[56,5167,5168],{},"语法：",[90,5170,5175],{"className":5171,"code":5173,"language":5174,"meta":21},[5172],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[96,5176,5173],{"__ignoreMap":21},[14,5178,5179],{},"小案例",[90,5181,5183],{"className":92,"code":5182,"language":94,"meta":21,"style":21},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[96,5184,5185,5190,5214,5218,5235,5242],{"__ignoreMap":21},[99,5186,5187],{"class":101,"line":102},[99,5188,5189],{"class":168},"\u002F\u002Fnum1,num2形参\n",[99,5191,5192,5194,5197,5199,5201,5205,5207,5209,5212],{"class":101,"line":22},[99,5193,113],{"class":105},[99,5195,5196],{"class":1949}," add",[99,5198,110],{"class":109},[99,5200,113],{"class":105},[99,5202,5204],{"class":5203},"s4XuR"," num1",[99,5206,488],{"class":109},[99,5208,113],{"class":105},[99,5210,5211],{"class":5203}," num2",[99,5213,116],{"class":109},[99,5215,5216],{"class":101,"line":1165},[99,5217,1532],{"class":109},[99,5219,5220,5222,5225,5227,5230,5232],{"class":101,"line":1180},[99,5221,1971],{"class":105},[99,5223,5224],{"class":109}," sum",[99,5226,155],{"class":105},[99,5228,5229],{"class":109},"num1",[99,5231,591],{"class":105},[99,5233,5234],{"class":109},"num2;\n",[99,5236,5237,5239],{"class":101,"line":1186},[99,5238,4076],{"class":105},[99,5240,5241],{"class":109}," sum;\n",[99,5243,5244],{"class":101,"line":1200},[99,5245,1551],{"class":109},[41,5247,5249],{"id":5248},"_22函数调用","2.2函数调用",[14,5251,5252],{},"调用刚刚写的求和函数",[90,5254,5256],{"className":92,"code":5255,"language":94,"meta":21,"style":21},"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",[96,5257,5258,5266,5270,5275,5287,5299,5308,5313,5325],{"__ignoreMap":21},[99,5259,5260,5262,5264],{"class":101,"line":102},[99,5261,113],{"class":105},[99,5263,1959],{"class":1949},[99,5265,1962],{"class":109},[99,5267,5268],{"class":101,"line":22},[99,5269,1532],{"class":109},[99,5271,5272],{"class":101,"line":1165},[99,5273,5274],{"class":168},"    \u002F\u002Fa,b实参\n",[99,5276,5277,5279,5281,5283,5285],{"class":101,"line":1180},[99,5278,1971],{"class":105},[99,5280,1384],{"class":109},[99,5282,155],{"class":105},[99,5284,301],{"class":158},[99,5286,1276],{"class":109},[99,5288,5289,5291,5293,5295,5297],{"class":101,"line":1186},[99,5290,1971],{"class":105},[99,5292,2819],{"class":109},[99,5294,155],{"class":105},[99,5296,301],{"class":158},[99,5298,1276],{"class":109},[99,5300,5301,5303,5305],{"class":101,"line":1200},[99,5302,1998],{"class":109},[99,5304,1415],{"class":105},[99,5306,5307],{"class":109},"a,b;\n",[99,5309,5310],{"class":101,"line":1206},[99,5311,5312],{"class":168},"    \u002F\u002F调用函数时，实参值传给了形参\n",[99,5314,5315,5317,5319,5322],{"class":101,"line":1297},[99,5316,1537],{"class":109},[99,5318,1154],{"class":105},[99,5320,5321],{"class":1949},"add",[99,5323,5324],{"class":109},"(a,b);\n",[99,5326,5327],{"class":101,"line":1303},[99,5328,1551],{"class":109},[41,5330,5332],{"id":5331},"_23值传递","2.3值传递",[14,5334,5335],{},"值传递就是函数调用时实参将数值传给形参",[14,5337,5338],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5340,5341],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[90,5343,5345],{"className":92,"code":5344,"language":94,"meta":21,"style":21},"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",[96,5346,5347,5369,5373,5386,5403,5421,5432,5441,5450,5463,5479,5495,5504,5508,5516,5520,5532,5544,5551],{"__ignoreMap":21},[99,5348,5349,5352,5355,5357,5359,5361,5363,5365,5367],{"class":101,"line":102},[99,5350,5351],{"class":105},"void",[99,5353,5354],{"class":1949}," swap",[99,5356,110],{"class":109},[99,5358,113],{"class":105},[99,5360,5204],{"class":5203},[99,5362,488],{"class":109},[99,5364,113],{"class":105},[99,5366,5211],{"class":5203},[99,5368,116],{"class":109},[99,5370,5371],{"class":101,"line":22},[99,5372,1532],{"class":109},[99,5374,5375,5377,5379,5382,5384],{"class":101,"line":1165},[99,5376,1537],{"class":109},[99,5378,1154],{"class":105},[99,5380,5381],{"class":214},"\"交换前：\"",[99,5383,1154],{"class":105},[99,5385,1177],{"class":109},[99,5387,5388,5390,5392,5395,5397,5399,5401],{"class":101,"line":1180},[99,5389,1537],{"class":109},[99,5391,1154],{"class":105},[99,5393,5394],{"class":214},"\"num1=\"",[99,5396,1154],{"class":105},[99,5398,5229],{"class":109},[99,5400,1154],{"class":105},[99,5402,1177],{"class":109},[99,5404,5405,5407,5409,5412,5414,5417,5419],{"class":101,"line":1186},[99,5406,1537],{"class":109},[99,5408,1154],{"class":105},[99,5410,5411],{"class":214},"\"num2=\"",[99,5413,1154],{"class":105},[99,5415,5416],{"class":109},"num2",[99,5418,1154],{"class":105},[99,5420,1177],{"class":109},[99,5422,5423,5425,5427,5429],{"class":101,"line":1200},[99,5424,1971],{"class":105},[99,5426,4241],{"class":109},[99,5428,155],{"class":105},[99,5430,5431],{"class":109},"num1;\n",[99,5433,5434,5437,5439],{"class":101,"line":1206},[99,5435,5436],{"class":109},"    num1",[99,5438,155],{"class":105},[99,5440,5234],{"class":109},[99,5442,5443,5446,5448],{"class":101,"line":1297},[99,5444,5445],{"class":109},"    num2",[99,5447,155],{"class":105},[99,5449,4266],{"class":109},[99,5451,5452,5454,5456,5459,5461],{"class":101,"line":1303},[99,5453,1537],{"class":109},[99,5455,1154],{"class":105},[99,5457,5458],{"class":214},"\"交换后：\"",[99,5460,1154],{"class":105},[99,5462,1177],{"class":109},[99,5464,5465,5467,5469,5471,5473,5475,5477],{"class":101,"line":1315},[99,5466,1537],{"class":109},[99,5468,1154],{"class":105},[99,5470,5394],{"class":214},[99,5472,1154],{"class":105},[99,5474,5229],{"class":109},[99,5476,1154],{"class":105},[99,5478,1177],{"class":109},[99,5480,5481,5483,5485,5487,5489,5491,5493],{"class":101,"line":1598},[99,5482,1537],{"class":109},[99,5484,1154],{"class":105},[99,5486,5411],{"class":214},[99,5488,1154],{"class":105},[99,5490,5416],{"class":109},[99,5492,1154],{"class":105},[99,5494,1177],{"class":109},[99,5496,5497,5499,5501],{"class":101,"line":1603},[99,5498,4076],{"class":105},[99,5500,165],{"class":109},[99,5502,5503],{"class":168},"\u002F\u002F或者不写\n",[99,5505,5506],{"class":101,"line":1609},[99,5507,1551],{"class":109},[99,5509,5510,5512,5514],{"class":101,"line":1614},[99,5511,113],{"class":105},[99,5513,1959],{"class":1949},[99,5515,1962],{"class":109},[99,5517,5518],{"class":101,"line":1628},[99,5519,1532],{"class":109},[99,5521,5522,5524,5526,5528,5530],{"class":101,"line":1633},[99,5523,1971],{"class":105},[99,5525,1384],{"class":109},[99,5527,155],{"class":105},[99,5529,556],{"class":158},[99,5531,1276],{"class":109},[99,5533,5534,5536,5538,5540,5542],{"class":101,"line":1639},[99,5535,1971],{"class":105},[99,5537,2819],{"class":109},[99,5539,155],{"class":105},[99,5541,810],{"class":158},[99,5543,1276],{"class":109},[99,5545,5546,5549],{"class":101,"line":1660},[99,5547,5548],{"class":1949},"    swap",[99,5550,5324],{"class":109},[99,5552,5553],{"class":101,"line":1665},[99,5554,1551],{"class":109},[41,5556,5558],{"id":5557},"_24函数的常见形式","2.4函数的常见形式",[53,5560,5561],{},[56,5562,5563],{},"无参无返",[90,5565,5567],{"className":92,"code":5566,"language":94,"meta":21,"style":21},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[96,5568,5569,5578,5582,5595,5599,5607,5611,5616,5624],{"__ignoreMap":21},[99,5570,5571,5573,5576],{"class":101,"line":102},[99,5572,5351],{"class":105},[99,5574,5575],{"class":1949}," test01",[99,5577,1962],{"class":109},[99,5579,5580],{"class":101,"line":22},[99,5581,1532],{"class":109},[99,5583,5584,5586,5588,5591,5593],{"class":101,"line":1165},[99,5585,1537],{"class":109},[99,5587,1154],{"class":105},[99,5589,5590],{"class":214},"\"你好\"",[99,5592,1154],{"class":105},[99,5594,1177],{"class":109},[99,5596,5597],{"class":101,"line":1180},[99,5598,1551],{"class":109},[99,5600,5601,5603,5605],{"class":101,"line":1186},[99,5602,113],{"class":105},[99,5604,1959],{"class":1949},[99,5606,1962],{"class":109},[99,5608,5609],{"class":101,"line":1200},[99,5610,1532],{"class":109},[99,5612,5613],{"class":101,"line":1206},[99,5614,5615],{"class":168},"    \u002F\u002F函数调用\n",[99,5617,5618,5621],{"class":101,"line":1297},[99,5619,5620],{"class":1949},"    test01",[99,5622,5623],{"class":109},"();\n",[99,5625,5626],{"class":101,"line":1303},[99,5627,1551],{"class":109},[53,5629,5630],{"start":22},[56,5631,5632],{},"有参无返",[90,5634,5636],{"className":92,"code":5635,"language":94,"meta":21,"style":21},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[96,5637,5638,5653,5657,5669,5673,5681,5685,5696],{"__ignoreMap":21},[99,5639,5640,5642,5645,5647,5649,5651],{"class":101,"line":102},[99,5641,5351],{"class":105},[99,5643,5644],{"class":1949}," test02",[99,5646,110],{"class":109},[99,5648,113],{"class":105},[99,5650,1384],{"class":5203},[99,5652,116],{"class":109},[99,5654,5655],{"class":101,"line":22},[99,5656,1532],{"class":109},[99,5658,5659,5661,5663,5665,5667],{"class":101,"line":1165},[99,5660,1537],{"class":109},[99,5662,1154],{"class":105},[99,5664,5590],{"class":214},[99,5666,1154],{"class":105},[99,5668,1177],{"class":109},[99,5670,5671],{"class":101,"line":1180},[99,5672,1551],{"class":109},[99,5674,5675,5677,5679],{"class":101,"line":1186},[99,5676,113],{"class":105},[99,5678,1959],{"class":1949},[99,5680,1962],{"class":109},[99,5682,5683],{"class":101,"line":1200},[99,5684,1532],{"class":109},[99,5686,5687,5690,5692,5694],{"class":101,"line":1206},[99,5688,5689],{"class":1949},"    test02",[99,5691,110],{"class":109},[99,5693,421],{"class":158},[99,5695,2705],{"class":109},[99,5697,5698],{"class":101,"line":1297},[99,5699,1551],{"class":109},[53,5701,5702],{"start":1165},[56,5703,5704],{},"无参有返",[90,5706,5708],{"className":92,"code":5707,"language":94,"meta":21,"style":21},"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",[96,5709,5710,5719,5723,5735,5744,5748,5756,5760,5773,5792],{"__ignoreMap":21},[99,5711,5712,5714,5717],{"class":101,"line":102},[99,5713,113],{"class":105},[99,5715,5716],{"class":1949}," test03",[99,5718,1962],{"class":109},[99,5720,5721],{"class":101,"line":22},[99,5722,1532],{"class":109},[99,5724,5725,5727,5729,5731,5733],{"class":101,"line":1165},[99,5726,1537],{"class":109},[99,5728,1154],{"class":105},[99,5730,5590],{"class":214},[99,5732,1154],{"class":105},[99,5734,1177],{"class":109},[99,5736,5737,5739,5742],{"class":101,"line":1180},[99,5738,4076],{"class":105},[99,5740,5741],{"class":158}," 100",[99,5743,1276],{"class":109},[99,5745,5746],{"class":101,"line":1186},[99,5747,1551],{"class":109},[99,5749,5750,5752,5754],{"class":101,"line":1200},[99,5751,113],{"class":105},[99,5753,1959],{"class":1949},[99,5755,1962],{"class":109},[99,5757,5758],{"class":101,"line":1206},[99,5759,1532],{"class":109},[99,5761,5762,5764,5766,5768,5771],{"class":101,"line":1297},[99,5763,1971],{"class":105},[99,5765,5204],{"class":109},[99,5767,155],{"class":105},[99,5769,5770],{"class":1949},"test03",[99,5772,5623],{"class":109},[99,5774,5775,5777,5779,5781,5783,5785,5787,5789],{"class":101,"line":1303},[99,5776,1537],{"class":109},[99,5778,1154],{"class":105},[99,5780,5394],{"class":214},[99,5782,1154],{"class":105},[99,5784,5229],{"class":109},[99,5786,1154],{"class":105},[99,5788,1224],{"class":109},[99,5790,5791],{"class":168}," \u002F\u002F100\n",[99,5793,5794],{"class":101,"line":1315},[99,5795,1551],{"class":109},[14,5797,5798],{},"4.有参有返",[90,5800,5802],{"className":92,"code":5801,"language":94,"meta":21,"style":21},"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",[96,5803,5804,5819,5823,5836,5842,5846,5855,5859,5871,5885,5900],{"__ignoreMap":21},[99,5805,5806,5808,5811,5813,5815,5817],{"class":101,"line":102},[99,5807,113],{"class":105},[99,5809,5810],{"class":1949}," test04",[99,5812,110],{"class":109},[99,5814,113],{"class":105},[99,5816,1384],{"class":5203},[99,5818,116],{"class":109},[99,5820,5821],{"class":101,"line":22},[99,5822,1532],{"class":109},[99,5824,5825,5827,5829,5832,5834],{"class":101,"line":1165},[99,5826,1537],{"class":109},[99,5828,1154],{"class":105},[99,5830,5831],{"class":214},"\"hello\"",[99,5833,1154],{"class":105},[99,5835,1177],{"class":109},[99,5837,5838,5840],{"class":101,"line":1180},[99,5839,4076],{"class":105},[99,5841,1418],{"class":109},[99,5843,5844],{"class":101,"line":1186},[99,5845,1551],{"class":109},[99,5847,5848,5850,5853],{"class":101,"line":1200},[99,5849,113],{"class":105},[99,5851,5852],{"class":1949}," mian",[99,5854,1962],{"class":109},[99,5856,5857],{"class":101,"line":1206},[99,5858,1532],{"class":109},[99,5860,5861,5863,5865,5867,5869],{"class":101,"line":1297},[99,5862,1971],{"class":105},[99,5864,2819],{"class":109},[99,5866,155],{"class":105},[99,5868,327],{"class":158},[99,5870,1276],{"class":109},[99,5872,5873,5875,5877,5879,5882],{"class":101,"line":1303},[99,5874,1971],{"class":105},[99,5876,2835],{"class":109},[99,5878,155],{"class":105},[99,5880,5881],{"class":1949},"test04",[99,5883,5884],{"class":109},"(b);\n",[99,5886,5887,5889,5891,5893,5895,5897],{"class":101,"line":1315},[99,5888,1537],{"class":109},[99,5890,1154],{"class":105},[99,5892,398],{"class":109},[99,5894,1154],{"class":105},[99,5896,1224],{"class":109},[99,5898,5899],{"class":168}," \u002F\u002F1\n",[99,5901,5902],{"class":101,"line":1598},[99,5903,1551],{"class":109},[41,5905,5907],{"id":5906},"_25函数的声明","2.5函数的声明",[14,5909,5910],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5912,5913,5914],{},"函数的",[259,5915,5916],{},"声明可以多次，但是函数的定义只能有一次",[90,5918,5920],{"className":92,"code":5919,"language":94,"meta":21,"style":21},"\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",[96,5921,5922,5927,5932,5957,5966,5970,5982,5994,6010,6014,6034,6038,6057],{"__ignoreMap":21},[99,5923,5924],{"class":101,"line":102},[99,5925,5926],{"class":168},"\u002F\u002F函数声明\n",[99,5928,5929],{"class":101,"line":22},[99,5930,5931],{"class":168},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[99,5933,5934,5936,5939,5941,5943,5945,5947,5949,5951,5954],{"class":101,"line":1165},[99,5935,113],{"class":105},[99,5937,5938],{"class":1949}," max",[99,5940,110],{"class":109},[99,5942,113],{"class":105},[99,5944,1384],{"class":5203},[99,5946,488],{"class":109},[99,5948,113],{"class":105},[99,5950,2819],{"class":5203},[99,5952,5953],{"class":109},");",[99,5955,5956],{"class":168},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[99,5958,5959,5961,5963],{"class":101,"line":1180},[99,5960,113],{"class":105},[99,5962,1959],{"class":1949},[99,5964,5965],{"class":109},"() \n",[99,5967,5968],{"class":101,"line":1186},[99,5969,1532],{"class":109},[99,5971,5972,5974,5976,5978,5980],{"class":101,"line":1200},[99,5973,1971],{"class":105},[99,5975,1384],{"class":109},[99,5977,155],{"class":105},[99,5979,556],{"class":158},[99,5981,1276],{"class":109},[99,5983,5984,5986,5988,5990,5992],{"class":101,"line":1206},[99,5985,1971],{"class":105},[99,5987,2819],{"class":109},[99,5989,155],{"class":105},[99,5991,810],{"class":158},[99,5993,1276],{"class":109},[99,5995,5996,5998,6000,6003,6006,6008],{"class":101,"line":1297},[99,5997,1537],{"class":109},[99,5999,1154],{"class":105},[99,6001,6002],{"class":1949},"max",[99,6004,6005],{"class":109},"(a,b)",[99,6007,1154],{"class":105},[99,6009,1177],{"class":109},[99,6011,6012],{"class":101,"line":1303},[99,6013,1551],{"class":109},[99,6015,6016,6018,6020,6022,6024,6026,6028,6030,6032],{"class":101,"line":1315},[99,6017,113],{"class":105},[99,6019,5938],{"class":1949},[99,6021,110],{"class":109},[99,6023,113],{"class":105},[99,6025,1384],{"class":5203},[99,6027,488],{"class":109},[99,6029,113],{"class":105},[99,6031,2819],{"class":5203},[99,6033,116],{"class":109},[99,6035,6036],{"class":101,"line":1598},[99,6037,1532],{"class":109},[99,6039,6040,6042,6044,6046,6048,6050,6052,6054],{"class":101,"line":1603},[99,6041,4076],{"class":105},[99,6043,1384],{"class":109},[99,6045,1070],{"class":105},[99,6047,373],{"class":109},[99,6049,1096],{"class":105},[99,6051,348],{"class":109},[99,6053,969],{"class":105},[99,6055,6056],{"class":109},"b;\n",[99,6058,6059],{"class":101,"line":1609},[99,6060,1551],{"class":109},[41,6062,6064],{"id":6063},"_26函数的分文件编写","2.6函数的分文件编写",[14,6066,6067],{},"4个步骤：",[1117,6069,6070,6073,6076,6079],{},[56,6071,6072],{},"1.创建后缀名为.h的头文件",[56,6074,6075],{},"2.创建后缀名为.cpp的源文件",[56,6077,6078],{},"3.在头文件中写函数的定义",[56,6080,6081],{},"4.在源文件中写函数的定义\n示例：",[14,6083,6084],{},"头文件：swap.h",[90,6086,6088],{"className":92,"code":6087,"language":94,"meta":21,"style":21},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[96,6089,6090,6096,6106,6110],{"__ignoreMap":21},[99,6091,6092,6094],{"class":101,"line":102},[99,6093,1935],{"class":105},[99,6095,1938],{"class":214},[99,6097,6098,6100,6102,6104],{"class":101,"line":22},[99,6099,1943],{"class":105},[99,6101,1946],{"class":105},[99,6103,1950],{"class":1949},[99,6105,1276],{"class":109},[99,6107,6108],{"class":101,"line":1165},[99,6109,5926],{"class":168},[99,6111,6112,6114,6116,6118,6120,6122,6124,6126,6128],{"class":101,"line":1180},[99,6113,5351],{"class":105},[99,6115,5354],{"class":1949},[99,6117,110],{"class":109},[99,6119,113],{"class":105},[99,6121,1384],{"class":5203},[99,6123,488],{"class":109},[99,6125,113],{"class":105},[99,6127,2819],{"class":5203},[99,6129,2705],{"class":109},[14,6131,6132],{},"源文件：swap.cpp",[90,6134,6136],{"className":92,"code":6135,"language":94,"meta":21,"style":21},"#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",[96,6137,6138,6145,6150,6170,6174,6185,6194,6203,6220,6237],{"__ignoreMap":21},[99,6139,6140,6142],{"class":101,"line":102},[99,6141,1935],{"class":105},[99,6143,6144],{"class":214}," \"swap.h\"\n",[99,6146,6147],{"class":101,"line":22},[99,6148,6149],{"class":168},"\u002F\u002F函数的定义\n",[99,6151,6152,6154,6156,6158,6160,6162,6164,6166,6168],{"class":101,"line":1165},[99,6153,5351],{"class":105},[99,6155,5354],{"class":1949},[99,6157,110],{"class":109},[99,6159,113],{"class":105},[99,6161,1384],{"class":5203},[99,6163,488],{"class":109},[99,6165,113],{"class":105},[99,6167,2819],{"class":5203},[99,6169,116],{"class":109},[99,6171,6172],{"class":101,"line":1180},[99,6173,1532],{"class":109},[99,6175,6176,6178,6180,6182],{"class":101,"line":1186},[99,6177,1971],{"class":105},[99,6179,4241],{"class":109},[99,6181,155],{"class":105},[99,6183,6184],{"class":109},"a;\n",[99,6186,6187,6190,6192],{"class":101,"line":1200},[99,6188,6189],{"class":109},"    a",[99,6191,155],{"class":105},[99,6193,6056],{"class":109},[99,6195,6196,6199,6201],{"class":101,"line":1206},[99,6197,6198],{"class":109},"    b",[99,6200,155],{"class":105},[99,6202,4266],{"class":109},[99,6204,6205,6207,6209,6212,6214,6216,6218],{"class":101,"line":1297},[99,6206,1537],{"class":109},[99,6208,1154],{"class":105},[99,6210,6211],{"class":214},"\"a=\"",[99,6213,1154],{"class":105},[99,6215,348],{"class":109},[99,6217,1154],{"class":105},[99,6219,1177],{"class":109},[99,6221,6222,6224,6226,6229,6231,6233,6235],{"class":101,"line":1303},[99,6223,1537],{"class":109},[99,6225,1154],{"class":105},[99,6227,6228],{"class":214},"\"b=\"",[99,6230,1154],{"class":105},[99,6232,373],{"class":109},[99,6234,1154],{"class":105},[99,6236,1177],{"class":109},[99,6238,6239],{"class":101,"line":1315},[99,6240,1551],{"class":109},[5113,6242,6243],{},"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":21,"searchDepth":22,"depth":22,"links":6245},[6246,6247,6248,6249,6250,6251],{"id":5159,"depth":22,"text":5160},{"id":5248,"depth":22,"text":5249},{"id":5331,"depth":22,"text":5332},{"id":5557,"depth":22,"text":5558},{"id":5906,"depth":22,"text":5907},{"id":6063,"depth":22,"text":6064},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5151,"description":21},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6258,"title":6259,"body":6260,"description":6267,"extension":24,"meta":7672,"navigation":26,"path":7673,"seo":7674,"stem":7675,"__hash__":7676},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6261,"toc":7662},[6262,6265,6268,6272,6434,6438,6441,6444,6447,6450,6590,6594,6597,6600,6603,6668,6672,6677,6744,6747,6751,6754,6765,6770,6790,6793,6798,6817,6820,6824,6843,6846,6850,7085,7089,7092,7095,7098,7260,7263,7267,7270,7276,7659],[10,6263,6259],{"id":6264},"_3指针",[14,6266,6267],{},"通过指针保存一个地址，指针就是个地址",[41,6269,6271],{"id":6270},"_31定义指针","3.1定义指针",[90,6273,6275],{"className":92,"code":6274,"language":94,"meta":21,"style":21},"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",[96,6276,6277,6285,6289,6294,6306,6311,6319,6329,6347,6367,6371,6376,6381,6386,6400,6416,6430],{"__ignoreMap":21},[99,6278,6279,6281,6283],{"class":101,"line":102},[99,6280,113],{"class":105},[99,6282,1959],{"class":1949},[99,6284,1962],{"class":109},[99,6286,6287],{"class":101,"line":22},[99,6288,1532],{"class":109},[99,6290,6291],{"class":101,"line":1165},[99,6292,6293],{"class":168},"    \u002F\u002F1.定义指针\n",[99,6295,6296,6298,6300,6302,6304],{"class":101,"line":1180},[99,6297,1971],{"class":105},[99,6299,1384],{"class":109},[99,6301,155],{"class":105},[99,6303,556],{"class":158},[99,6305,1276],{"class":109},[99,6307,6308],{"class":101,"line":1186},[99,6309,6310],{"class":168},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[99,6312,6313,6316],{"class":101,"line":1200},[99,6314,6315],{"class":105},"    int*",[99,6317,6318],{"class":109},"p;\n",[99,6320,6321,6324,6327],{"class":101,"line":1206},[99,6322,6323],{"class":109},"    p",[99,6325,6326],{"class":105},"=&",[99,6328,6184],{"class":109},[99,6330,6331,6333,6335,6338,6341,6343,6345],{"class":101,"line":1297},[99,6332,1537],{"class":109},[99,6334,1154],{"class":105},[99,6336,6337],{"class":214},"\"a的地址为：\"",[99,6339,6340],{"class":105},"\u003C\u003C&",[99,6342,348],{"class":109},[99,6344,1154],{"class":105},[99,6346,1177],{"class":109},[99,6348,6349,6351,6353,6356,6358,6360,6362,6364],{"class":101,"line":1303},[99,6350,1537],{"class":109},[99,6352,1154],{"class":105},[99,6354,6355],{"class":214},"\"指针p为：\"",[99,6357,1154],{"class":105},[99,6359,14],{"class":109},[99,6361,1154],{"class":105},[99,6363,1224],{"class":109},[99,6365,6366],{"class":168},"\u002F\u002F指针p表示的就是a的地址\n",[99,6368,6369],{"class":101,"line":1315},[99,6370,2386],{"emptyLinePlaceholder":26},[99,6372,6373],{"class":101,"line":1598},[99,6374,6375],{"class":168},"    \u002F\u002F2.使用指针\n",[99,6377,6378],{"class":101,"line":1603},[99,6379,6380],{"class":168},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[99,6382,6383],{"class":101,"line":1609},[99,6384,6385],{"class":168},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[99,6387,6388,6391,6393,6395,6398],{"class":101,"line":1614},[99,6389,6390],{"class":105},"    *",[99,6392,14],{"class":109},[99,6394,155],{"class":105},[99,6396,6397],{"class":158},"1000",[99,6399,1276],{"class":109},[99,6401,6402,6404,6407,6409,6411,6413],{"class":101,"line":1628},[99,6403,1537],{"class":109},[99,6405,6406],{"class":105},"\u003C\u003C*",[99,6408,14],{"class":109},[99,6410,1154],{"class":105},[99,6412,1224],{"class":109},[99,6414,6415],{"class":168},"\u002F\u002F1000\n",[99,6417,6418,6420,6422,6424,6426,6428],{"class":101,"line":1633},[99,6419,1537],{"class":109},[99,6421,1154],{"class":105},[99,6423,348],{"class":109},[99,6425,1154],{"class":105},[99,6427,1224],{"class":109},[99,6429,6415],{"class":168},[99,6431,6432],{"class":101,"line":1639},[99,6433,1551],{"class":109},[41,6435,6437],{"id":6436},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6439,6440],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6442,6443],{},"在32位操作系统下：占用4个字节空间",[14,6445,6446],{},"在64位操作系统下：占用8个字节空间",[14,6448,6449],{},"上方是不管啥数据类型的",[90,6451,6453],{"className":92,"code":6452,"language":94,"meta":21,"style":21},"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",[96,6454,6455,6463,6467,6472,6484,6489,6494,6499,6512,6534,6560,6586],{"__ignoreMap":21},[99,6456,6457,6459,6461],{"class":101,"line":102},[99,6458,113],{"class":105},[99,6460,1959],{"class":1949},[99,6462,1962],{"class":109},[99,6464,6465],{"class":101,"line":22},[99,6466,1532],{"class":109},[99,6468,6469],{"class":101,"line":1165},[99,6470,6471],{"class":168},"    \u002F\u002F指针所占内存空间\n",[99,6473,6474,6476,6478,6480,6482],{"class":101,"line":1180},[99,6475,1971],{"class":105},[99,6477,1384],{"class":109},[99,6479,155],{"class":105},[99,6481,556],{"class":158},[99,6483,1276],{"class":109},[99,6485,6486],{"class":101,"line":1186},[99,6487,6488],{"class":168},"    \u002F\u002Fint *p;\n",[99,6490,6491],{"class":101,"line":1200},[99,6492,6493],{"class":168},"    \u002F\u002Fp=&a;\n",[99,6495,6496],{"class":101,"line":1206},[99,6497,6498],{"class":168},"    \u002F\u002F上述可以写为以下：\n",[99,6500,6501,6503,6506,6508,6510],{"class":101,"line":1297},[99,6502,1971],{"class":105},[99,6504,6505],{"class":105}," *",[99,6507,14],{"class":109},[99,6509,6326],{"class":105},[99,6511,6184],{"class":109},[99,6513,6514,6517,6519,6522,6524,6527,6529,6531],{"class":101,"line":1303},[99,6515,6516],{"class":109},"    cout ",[99,6518,1154],{"class":105},[99,6520,6521],{"class":214},"\"sizeof(int *)\"",[99,6523,1358],{"class":105},[99,6525,6526],{"class":109},"(p)",[99,6528,1154],{"class":105},[99,6530,1224],{"class":109},[99,6532,6533],{"class":168},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[99,6535,6536,6538,6540,6542,6544,6546,6548,6550,6552,6554,6557],{"class":101,"line":1315},[99,6537,6516],{"class":109},[99,6539,1154],{"class":105},[99,6541,6521],{"class":214},[99,6543,1358],{"class":105},[99,6545,110],{"class":109},[99,6547,113],{"class":105},[99,6549,6505],{"class":105},[99,6551,539],{"class":109},[99,6553,1154],{"class":105},[99,6555,6556],{"class":109},"endl",[99,6558,6559],{"class":168},"  \u002F\u002F4字节(32位的话)\n",[99,6561,6562,6564,6566,6569,6571,6573,6575,6577,6579,6581,6583],{"class":101,"line":1598},[99,6563,6516],{"class":109},[99,6565,1154],{"class":105},[99,6567,6568],{"class":214},"\"sizeof(char *)\"",[99,6570,1358],{"class":105},[99,6572,110],{"class":109},[99,6574,206],{"class":105},[99,6576,6505],{"class":105},[99,6578,539],{"class":109},[99,6580,1154],{"class":105},[99,6582,1224],{"class":109},[99,6584,6585],{"class":168}," \u002F\u002F4字节(32位的话)\n",[99,6587,6588],{"class":101,"line":1603},[99,6589,1551],{"class":109},[41,6591,6593],{"id":6592},"_33空指针","3.3空指针",[14,6595,6596],{},"空指针：指针变量指向内存中编号为0的空间",[14,6598,6599],{},"用途：初始化指针变量",[14,6601,6602],{},"注意：空指针指向的内存是不可以访问的",[90,6604,6606],{"className":92,"code":6605,"language":94,"meta":21,"style":21},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[96,6607,6608,6616,6620,6625,6639,6644,6659,6664],{"__ignoreMap":21},[99,6609,6610,6612,6614],{"class":101,"line":102},[99,6611,113],{"class":105},[99,6613,1959],{"class":1949},[99,6615,1962],{"class":109},[99,6617,6618],{"class":101,"line":22},[99,6619,1532],{"class":109},[99,6621,6622],{"class":101,"line":1165},[99,6623,6624],{"class":168},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[99,6626,6627,6629,6631,6633,6635,6637],{"class":101,"line":1180},[99,6628,1971],{"class":105},[99,6630,6505],{"class":105},[99,6632,14],{"class":109},[99,6634,155],{"class":105},[99,6636,2378],{"class":158},[99,6638,1276],{"class":109},[99,6640,6641],{"class":101,"line":1186},[99,6642,6643],{"class":168},"    \u002F\u002F2.空指针不能进行访问\n",[99,6645,6646,6648,6650,6652,6654,6656],{"class":101,"line":1200},[99,6647,6390],{"class":105},[99,6649,14],{"class":109},[99,6651,155],{"class":105},[99,6653,421],{"class":158},[99,6655,165],{"class":109},[99,6657,6658],{"class":168},"\u002F\u002F直接报错，压根不能访问\n",[99,6660,6661],{"class":101,"line":1206},[99,6662,6663],{"class":168},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[99,6665,6666],{"class":101,"line":1297},[99,6667,1551],{"class":109},[41,6669,6671],{"id":6670},"_34野指针","3.4野指针",[14,6673,6674],{},[259,6675,6676],{},"指针变量指向非法的内存空间",[90,6678,6680],{"className":92,"code":6679,"language":94,"meta":21,"style":21},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[96,6681,6682,6690,6694,6723,6728,6740],{"__ignoreMap":21},[99,6683,6684,6686,6688],{"class":101,"line":102},[99,6685,113],{"class":105},[99,6687,1959],{"class":1949},[99,6689,1962],{"class":109},[99,6691,6692],{"class":101,"line":22},[99,6693,1532],{"class":109},[99,6695,6696,6698,6700,6702,6704,6706,6708,6710,6712,6715,6718,6720],{"class":101,"line":1165},[99,6697,1971],{"class":105},[99,6699,6505],{"class":105},[99,6701,14],{"class":109},[99,6703,155],{"class":105},[99,6705,110],{"class":109},[99,6707,113],{"class":105},[99,6709,6505],{"class":105},[99,6711,539],{"class":109},[99,6713,6714],{"class":105},"0x",[99,6716,6717],{"class":158},"1100",[99,6719,165],{"class":109},[99,6721,6722],{"class":168}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[99,6724,6725],{"class":101,"line":1180},[99,6726,6727],{"class":168},"    \u002F\u002F访问野指针报错\n",[99,6729,6730,6732,6734,6736,6738],{"class":101,"line":1186},[99,6731,1537],{"class":109},[99,6733,6406],{"class":105},[99,6735,14],{"class":109},[99,6737,1154],{"class":105},[99,6739,1177],{"class":109},[99,6741,6742],{"class":101,"line":1200},[99,6743,1551],{"class":109},[14,6745,6746],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[41,6748,6750],{"id":6749},"_35const修饰指针","3.5const修饰指针",[14,6752,6753],{},"三种情况：",[1117,6755,6756,6759,6762],{},[56,6757,6758],{},"const修饰指针 常量指针",[56,6760,6761],{},"const修饰常量 指针常量",[56,6763,6764],{},"const即修饰指针，又修饰常量",[53,6766,6767],{},[56,6768,6769],{},"常量指针",[90,6771,6773],{"className":92,"code":6772,"language":94,"meta":21,"style":21},"const int *p=&a;\n",[96,6774,6775],{"__ignoreMap":21},[99,6776,6777,6780,6782,6784,6786,6788],{"class":101,"line":102},[99,6778,6779],{"class":105},"const",[99,6781,2368],{"class":105},[99,6783,6505],{"class":105},[99,6785,14],{"class":109},[99,6787,6326],{"class":105},[99,6789,6184],{"class":109},[14,6791,6792],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[53,6794,6795],{"start":22},[56,6796,6797],{},"指针常量",[90,6799,6801],{"className":92,"code":6800,"language":94,"meta":21,"style":21},"int *const p=&a;\n",[96,6802,6803],{"__ignoreMap":21},[99,6804,6805,6807,6810,6813,6815],{"class":101,"line":102},[99,6806,113],{"class":105},[99,6808,6809],{"class":105}," *const",[99,6811,6812],{"class":109}," p",[99,6814,6326],{"class":105},[99,6816,6184],{"class":109},[14,6818,6819],{},"指针的指向不可以改，指针指向的值可以改",[53,6821,6822],{"start":1165},[56,6823,6764],{},[90,6825,6827],{"className":92,"code":6826,"language":94,"meta":21,"style":21},"const int *const p=&a;\n",[96,6828,6829],{"__ignoreMap":21},[99,6830,6831,6833,6835,6837,6839,6841],{"class":101,"line":102},[99,6832,6779],{"class":105},[99,6834,2368],{"class":105},[99,6836,6809],{"class":105},[99,6838,6812],{"class":109},[99,6840,6326],{"class":105},[99,6842,6184],{"class":109},[14,6844,6845],{},"指针的指向和指针指向的值都不可以改变",[41,6847,6849],{"id":6848},"_36指针和数组","3.6指针和数组",[90,6851,6853],{"className":92,"code":6852,"language":94,"meta":21,"style":21},"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",[96,6854,6855,6863,6867,6872,6926,6947,6963,6979,6990,7007,7012,7026,7052,7056,7068,7077,7081],{"__ignoreMap":21},[99,6856,6857,6859,6861],{"class":101,"line":102},[99,6858,113],{"class":105},[99,6860,1959],{"class":1949},[99,6862,1962],{"class":109},[99,6864,6865],{"class":101,"line":22},[99,6866,1532],{"class":109},[99,6868,6869],{"class":101,"line":1165},[99,6870,6871],{"class":168},"    \u002F\u002F利用指针访问数组中的元素\n",[99,6873,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924],{"class":101,"line":1180},[99,6875,1971],{"class":105},[99,6877,3948],{"class":109},[99,6879,556],{"class":158},[99,6881,1050],{"class":109},[99,6883,155],{"class":105},[99,6885,1006],{"class":109},[99,6887,327],{"class":158},[99,6889,488],{"class":109},[99,6891,187],{"class":158},[99,6893,488],{"class":109},[99,6895,181],{"class":158},[99,6897,488],{"class":109},[99,6899,403],{"class":158},[99,6901,488],{"class":109},[99,6903,429],{"class":158},[99,6905,488],{"class":109},[99,6907,454],{"class":158},[99,6909,488],{"class":109},[99,6911,479],{"class":158},[99,6913,488],{"class":109},[99,6915,505],{"class":158},[99,6917,488],{"class":109},[99,6919,530],{"class":158},[99,6921,488],{"class":109},[99,6923,556],{"class":158},[99,6925,3981],{"class":109},[99,6927,6928,6930,6932,6935,6937,6939,6941,6943,6945],{"class":101,"line":1186},[99,6929,1537],{"class":109},[99,6931,1154],{"class":105},[99,6933,6934],{"class":214},"\"数组的第一个元素为：\"",[99,6936,1154],{"class":105},[99,6938,3892],{"class":109},[99,6940,301],{"class":158},[99,6942,1050],{"class":109},[99,6944,1154],{"class":105},[99,6946,1177],{"class":109},[99,6948,6949,6951,6953,6955,6957,6960],{"class":101,"line":1200},[99,6950,1971],{"class":105},[99,6952,6505],{"class":105},[99,6954,14],{"class":109},[99,6956,155],{"class":105},[99,6958,6959],{"class":109},"arr;",[99,6961,6962],{"class":168},"\u002F\u002F注意数才要加取地址符号&\n",[99,6964,6965,6967,6969,6971,6973,6975,6977],{"class":101,"line":1206},[99,6966,1537],{"class":109},[99,6968,1154],{"class":105},[99,6970,6934],{"class":214},[99,6972,6406],{"class":105},[99,6974,14],{"class":109},[99,6976,1154],{"class":105},[99,6978,1177],{"class":109},[99,6980,6981,6983,6985,6987],{"class":101,"line":1297},[99,6982,6323],{"class":109},[99,6984,2278],{"class":105},[99,6986,165],{"class":109},[99,6988,6989],{"class":168}," \u002F\u002F让指针向后偏移4个字节\n",[99,6991,6992,6994,6996,6999,7001,7003,7005],{"class":101,"line":1303},[99,6993,1537],{"class":109},[99,6995,1154],{"class":105},[99,6997,6998],{"class":214},"\"数组的第二个元素为：\"",[99,7000,6406],{"class":105},[99,7002,14],{"class":109},[99,7004,1154],{"class":105},[99,7006,1177],{"class":109},[99,7008,7009],{"class":101,"line":1315},[99,7010,7011],{"class":168},"    \u002F\u002F利用指针遍历数组\n",[99,7013,7014,7016,7018,7021,7023],{"class":101,"line":1598},[99,7015,1971],{"class":105},[99,7017,6505],{"class":105},[99,7019,7020],{"class":109},"p2",[99,7022,155],{"class":105},[99,7024,7025],{"class":109},"arr;\n",[99,7027,7028,7030,7032,7034,7036,7038,7040,7042,7044,7046,7048,7050],{"class":101,"line":1603},[99,7029,3187],{"class":105},[99,7031,1644],{"class":109},[99,7033,113],{"class":105},[99,7035,3018],{"class":109},[99,7037,155],{"class":105},[99,7039,301],{"class":158},[99,7041,3025],{"class":109},[99,7043,1020],{"class":105},[99,7045,556],{"class":158},[99,7047,3025],{"class":109},[99,7049,2278],{"class":105},[99,7051,116],{"class":109},[99,7053,7054],{"class":101,"line":1609},[99,7055,2016],{"class":109},[99,7057,7058,7060,7062,7064,7066],{"class":101,"line":1614},[99,7059,3437],{"class":109},[99,7061,6406],{"class":105},[99,7063,7020],{"class":109},[99,7065,1154],{"class":105},[99,7067,1177],{"class":109},[99,7069,7070,7073,7075],{"class":101,"line":1628},[99,7071,7072],{"class":109},"        p2",[99,7074,2278],{"class":105},[99,7076,1276],{"class":109},[99,7078,7079],{"class":101,"line":1633},[99,7080,2173],{"class":109},[99,7082,7083],{"class":101,"line":1639},[99,7084,1551],{"class":109},[41,7086,7088],{"id":7087},"_37指针和函数","3.7指针和函数",[14,7090,7091],{},"利用指针做函数参数，可以修改实参的值",[14,7093,7094],{},"值传递：只改变形参，不改变实参",[14,7096,7097],{},"地址传递：",[90,7099,7101],{"className":92,"code":7100,"language":94,"meta":21,"style":21},"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",[96,7102,7103,7128,7132,7144,7155,7165,7169,7177,7181,7193,7205,7210,7226,7241,7256],{"__ignoreMap":21},[99,7104,7105,7107,7109,7111,7113,7115,7118,7120,7122,7124,7126],{"class":101,"line":102},[99,7106,5351],{"class":105},[99,7108,5354],{"class":1949},[99,7110,110],{"class":109},[99,7112,113],{"class":105},[99,7114,6505],{"class":105},[99,7116,7117],{"class":5203},"p1",[99,7119,488],{"class":109},[99,7121,113],{"class":105},[99,7123,6505],{"class":105},[99,7125,7020],{"class":5203},[99,7127,116],{"class":109},[99,7129,7130],{"class":101,"line":22},[99,7131,1532],{"class":109},[99,7133,7134,7136,7138,7141],{"class":101,"line":1165},[99,7135,1971],{"class":105},[99,7137,4241],{"class":109},[99,7139,7140],{"class":105},"=*",[99,7142,7143],{"class":109},"p1;\n",[99,7145,7146,7148,7150,7152],{"class":101,"line":1180},[99,7147,6390],{"class":105},[99,7149,7117],{"class":109},[99,7151,7140],{"class":105},[99,7153,7154],{"class":109},"p2;\n",[99,7156,7157,7159,7161,7163],{"class":101,"line":1186},[99,7158,6390],{"class":105},[99,7160,7020],{"class":109},[99,7162,155],{"class":105},[99,7164,4266],{"class":109},[99,7166,7167],{"class":101,"line":1200},[99,7168,1551],{"class":109},[99,7170,7171,7173,7175],{"class":101,"line":1206},[99,7172,113],{"class":105},[99,7174,1959],{"class":1949},[99,7176,1962],{"class":109},[99,7178,7179],{"class":101,"line":1297},[99,7180,1532],{"class":109},[99,7182,7183,7185,7187,7189,7191],{"class":101,"line":1303},[99,7184,1971],{"class":105},[99,7186,1384],{"class":109},[99,7188,155],{"class":105},[99,7190,556],{"class":158},[99,7192,1276],{"class":109},[99,7194,7195,7197,7199,7201,7203],{"class":101,"line":1315},[99,7196,1971],{"class":105},[99,7198,2819],{"class":109},[99,7200,155],{"class":105},[99,7202,810],{"class":158},[99,7204,1276],{"class":109},[99,7206,7207],{"class":101,"line":1598},[99,7208,7209],{"class":168},"    \u002F\u002F地址传递\n",[99,7211,7212,7214,7216,7218,7221,7223],{"class":101,"line":1603},[99,7213,5548],{"class":1949},[99,7215,110],{"class":109},[99,7217,463],{"class":105},[99,7219,7220],{"class":109},"a,",[99,7222,463],{"class":105},[99,7224,7225],{"class":109},"b);\n",[99,7227,7228,7230,7232,7234,7236,7238],{"class":101,"line":1609},[99,7229,1537],{"class":109},[99,7231,1154],{"class":105},[99,7233,348],{"class":109},[99,7235,1154],{"class":105},[99,7237,1224],{"class":109},[99,7239,7240],{"class":168},"\u002F\u002F20\n",[99,7242,7243,7245,7247,7249,7251,7253],{"class":101,"line":1614},[99,7244,1537],{"class":109},[99,7246,1154],{"class":105},[99,7248,373],{"class":109},[99,7250,1154],{"class":105},[99,7252,1224],{"class":109},[99,7254,7255],{"class":168},"\u002F\u002F10\n",[99,7257,7258],{"class":101,"line":1628},[99,7259,1551],{"class":109},[14,7261,7262],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[41,7264,7266],{"id":7265},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7268,7269],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7271,7272,7273,7275],{},"例如数组：int arr",[99,7274,556],{},"={4,3,6,9,1,2,10,8,7,5}",[90,7277,7279],{"className":92,"code":7278,"language":94,"meta":21,"style":21},"#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",[96,7280,7281,7287,7297,7321,7325,7356,7360,7394,7398,7416,7420,7431,7446,7461,7465,7469,7473,7477,7481,7489,7493,7498,7552,7564,7576,7581,7589,7593,7598,7623,7627,7642,7651,7655],{"__ignoreMap":21},[99,7282,7283,7285],{"class":101,"line":102},[99,7284,1935],{"class":105},[99,7286,1938],{"class":214},[99,7288,7289,7291,7293,7295],{"class":101,"line":22},[99,7290,1943],{"class":105},[99,7292,1946],{"class":105},[99,7294,1950],{"class":1949},[99,7296,1276],{"class":109},[99,7298,7299,7301,7304,7306,7308,7310,7312,7314,7316,7319],{"class":101,"line":1165},[99,7300,5351],{"class":105},[99,7302,7303],{"class":1949}," bubbleSort",[99,7305,110],{"class":109},[99,7307,113],{"class":105},[99,7309,6505],{"class":105},[99,7311,14],{"class":5203},[99,7313,488],{"class":109},[99,7315,113],{"class":105},[99,7317,7318],{"class":5203}," len",[99,7320,116],{"class":109},[99,7322,7323],{"class":101,"line":1180},[99,7324,1532],{"class":109},[99,7326,7327,7329,7331,7333,7335,7337,7339,7341,7343,7346,7348,7350,7352,7354],{"class":101,"line":1186},[99,7328,3187],{"class":105},[99,7330,110],{"class":109},[99,7332,113],{"class":105},[99,7334,3018],{"class":109},[99,7336,155],{"class":105},[99,7338,301],{"class":158},[99,7340,3025],{"class":109},[99,7342,1020],{"class":105},[99,7344,7345],{"class":109},"len",[99,7347,642],{"class":105},[99,7349,327],{"class":158},[99,7351,3025],{"class":109},[99,7353,2278],{"class":105},[99,7355,116],{"class":109},[99,7357,7358],{"class":101,"line":1200},[99,7359,2016],{"class":109},[99,7361,7362,7364,7366,7368,7370,7372,7374,7376,7378,7380,7382,7384,7386,7388,7390,7392],{"class":101,"line":1206},[99,7363,3389],{"class":105},[99,7365,110],{"class":109},[99,7367,113],{"class":105},[99,7369,3396],{"class":109},[99,7371,155],{"class":105},[99,7373,301],{"class":158},[99,7375,3403],{"class":109},[99,7377,1020],{"class":105},[99,7379,7345],{"class":109},[99,7381,642],{"class":105},[99,7383,551],{"class":109},[99,7385,642],{"class":105},[99,7387,327],{"class":158},[99,7389,3403],{"class":109},[99,7391,2278],{"class":105},[99,7393,116],{"class":109},[99,7395,7396],{"class":101,"line":1297},[99,7397,2496],{"class":109},[99,7399,7400,7402,7405,7407,7410,7412,7414],{"class":101,"line":1303},[99,7401,4628],{"class":105},[99,7403,7404],{"class":109},"(p[j]",[99,7406,1070],{"class":105},[99,7408,7409],{"class":109},"p[j",[99,7411,591],{"class":105},[99,7413,327],{"class":158},[99,7415,4643],{"class":109},[99,7417,7418],{"class":101,"line":1315},[99,7419,4648],{"class":109},[99,7421,7422,7424,7426,7428],{"class":101,"line":1598},[99,7423,4653],{"class":105},[99,7425,4241],{"class":109},[99,7427,155],{"class":105},[99,7429,7430],{"class":109},"p[j];\n",[99,7432,7433,7436,7438,7440,7442,7444],{"class":101,"line":1603},[99,7434,7435],{"class":109},"                p[j]",[99,7437,155],{"class":105},[99,7439,7409],{"class":109},[99,7441,591],{"class":105},[99,7443,327],{"class":158},[99,7445,4676],{"class":109},[99,7447,7448,7451,7453,7455,7457,7459],{"class":101,"line":1609},[99,7449,7450],{"class":109},"                p[j",[99,7452,591],{"class":105},[99,7454,327],{"class":158},[99,7456,1050],{"class":109},[99,7458,155],{"class":105},[99,7460,4266],{"class":109},[99,7462,7463],{"class":101,"line":1614},[99,7464,4696],{"class":109},[99,7466,7467],{"class":101,"line":1628},[99,7468,2515],{"class":109},[99,7470,7471],{"class":101,"line":1633},[99,7472,2173],{"class":109},[99,7474,7475],{"class":101,"line":1639},[99,7476,1551],{"class":109},[99,7478,7479],{"class":101,"line":1660},[99,7480,2386],{"emptyLinePlaceholder":26},[99,7482,7483,7485,7487],{"class":101,"line":1665},[99,7484,113],{"class":105},[99,7486,1959],{"class":1949},[99,7488,1962],{"class":109},[99,7490,7491],{"class":101,"line":1679},[99,7492,1532],{"class":109},[99,7494,7495],{"class":101,"line":1684},[99,7496,7497],{"class":168},"    \u002F\u002F 1.创建数组\n",[99,7499,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550],{"class":101,"line":1713},[99,7501,1971],{"class":105},[99,7503,3948],{"class":109},[99,7505,556],{"class":158},[99,7507,1050],{"class":109},[99,7509,155],{"class":105},[99,7511,1006],{"class":109},[99,7513,403],{"class":158},[99,7515,488],{"class":109},[99,7517,181],{"class":158},[99,7519,488],{"class":109},[99,7521,454],{"class":158},[99,7523,488],{"class":109},[99,7525,530],{"class":158},[99,7527,488],{"class":109},[99,7529,327],{"class":158},[99,7531,488],{"class":109},[99,7533,187],{"class":158},[99,7535,488],{"class":109},[99,7537,556],{"class":158},[99,7539,488],{"class":109},[99,7541,505],{"class":158},[99,7543,488],{"class":109},[99,7545,479],{"class":158},[99,7547,488],{"class":109},[99,7549,429],{"class":158},[99,7551,3981],{"class":109},[99,7553,7554,7556,7558,7560,7562],{"class":101,"line":1718},[99,7555,1971],{"class":105},[99,7557,7318],{"class":109},[99,7559,155],{"class":105},[99,7561,556],{"class":158},[99,7563,1276],{"class":109},[99,7565,7566,7568,7570,7572,7574],{"class":101,"line":1735},[99,7567,1971],{"class":105},[99,7569,6505],{"class":105},[99,7571,14],{"class":109},[99,7573,155],{"class":105},[99,7575,7025],{"class":109},[99,7577,7578],{"class":101,"line":1740},[99,7579,7580],{"class":168},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[99,7582,7583,7586],{"class":101,"line":1745},[99,7584,7585],{"class":1949},"    bubbleSort",[99,7587,7588],{"class":109},"(p,len);\n",[99,7590,7591],{"class":101,"line":1750},[99,7592,2386],{"emptyLinePlaceholder":26},[99,7594,7595],{"class":101,"line":1764},[99,7596,7597],{"class":168},"    \u002F\u002F 3.打印排序后的数组\n",[99,7599,7600,7602,7604,7606,7608,7610,7612,7614,7616,7619,7621],{"class":101,"line":1769},[99,7601,3187],{"class":105},[99,7603,1644],{"class":109},[99,7605,113],{"class":105},[99,7607,3018],{"class":109},[99,7609,155],{"class":105},[99,7611,301],{"class":158},[99,7613,3200],{"class":109},[99,7615,1020],{"class":105},[99,7617,7618],{"class":109},"len; i",[99,7620,2278],{"class":105},[99,7622,116],{"class":109},[99,7624,7625],{"class":101,"line":2563},[99,7626,2016],{"class":109},[99,7628,7629,7631,7633,7635,7637,7640],{"class":101,"line":2577},[99,7630,3437],{"class":109},[99,7632,6406],{"class":105},[99,7634,14],{"class":109},[99,7636,1154],{"class":105},[99,7638,7639],{"class":214},"\"\"",[99,7641,1276],{"class":109},[99,7643,7644,7647,7649],{"class":101,"line":2585},[99,7645,7646],{"class":109},"        p",[99,7648,2278],{"class":105},[99,7650,1276],{"class":109},[99,7652,7653],{"class":101,"line":2590},[99,7654,2173],{"class":109},[99,7656,7657],{"class":101,"line":2596},[99,7658,1551],{"class":109},[5113,7660,7661],{},"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":21,"searchDepth":22,"depth":22,"links":7663},[7664,7665,7666,7667,7668,7669,7670,7671],{"id":6270,"depth":22,"text":6271},{"id":6436,"depth":22,"text":6437},{"id":6592,"depth":22,"text":6593},{"id":6670,"depth":22,"text":6671},{"id":6749,"depth":22,"text":6750},{"id":6848,"depth":22,"text":6849},{"id":7087,"depth":22,"text":7088},{"id":7265,"depth":22,"text":7266},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6259,"description":6267},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7678,"title":7679,"body":7680,"description":7687,"extension":24,"meta":10661,"navigation":26,"path":10662,"seo":10663,"stem":10664,"__hash__":10665},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7681,"toc":10652},[7682,7685,7688,7692,7695,7698,7709,8047,8050,8054,8057,8064,8319,8323,8326,8329,8484,8488,8491,8494,8700,8704,8707,9010,9013,9021,9025,9028,9179,9181,9192,9249,9253,9258,9915,9923,9926,10020,10023,10643,10649],[10,7683,7679],{"id":7684},"_4结构体",[14,7686,7687],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[41,7689,7691],{"id":7690},"_41结构体定义与使用","4.1结构体定义与使用",[14,7693,7694],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7696,7697],{},"通过结构体创建变量的方式：",[1117,7699,7700,7703,7706],{},[56,7701,7702],{},"struct 结构体名 变量名",[56,7704,7705],{},"struct 结构体名 变量名={成员1值，成员2值...}",[56,7707,7708],{},"定义结构体时顺便创建变量",[90,7710,7712],{"className":92,"code":7711,"language":94,"meta":21,"style":21},"#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",[96,7713,7714,7720,7730,7737,7742,7750,7754,7759,7763,7768,7773,7778,7785,7790,7797,7801,7808,7812,7816,7820,7824,7828,7832,7838,7842,7848,7856,7864,7868,7873,7878,7889,7894,7906,7917,7928,7933,7957,7962,7968,7995,8000,8006,8018,8030,8042],{"__ignoreMap":21},[99,7715,7716,7718],{"class":101,"line":102},[99,7717,1935],{"class":105},[99,7719,1938],{"class":214},[99,7721,7722,7724,7726,7728],{"class":101,"line":22},[99,7723,1943],{"class":105},[99,7725,1946],{"class":105},[99,7727,1950],{"class":1949},[99,7729,1276],{"class":109},[99,7731,7732,7734],{"class":101,"line":1165},[99,7733,1935],{"class":105},[99,7735,7736],{"class":214},"\u003Cstring>\n",[99,7738,7739],{"class":101,"line":1180},[99,7740,7741],{"class":168},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[99,7743,7744,7747],{"class":101,"line":1186},[99,7745,7746],{"class":105},"struct",[99,7748,7749],{"class":1949}," Student\n",[99,7751,7752],{"class":101,"line":1200},[99,7753,1532],{"class":109},[99,7755,7756],{"class":101,"line":1206},[99,7757,7758],{"class":168},"    \u002F\u002F成员列表\n",[99,7760,7761],{"class":101,"line":1297},[99,7762,2386],{"emptyLinePlaceholder":26},[99,7764,7765],{"class":101,"line":1303},[99,7766,7767],{"class":168},"    \u002F\u002F姓名\n",[99,7769,7770],{"class":101,"line":1315},[99,7771,7772],{"class":109},"    string name;\n",[99,7774,7775],{"class":101,"line":1598},[99,7776,7777],{"class":168},"    \u002F\u002F年龄\n",[99,7779,7780,7782],{"class":101,"line":1603},[99,7781,1971],{"class":105},[99,7783,7784],{"class":109}," age;\n",[99,7786,7787],{"class":101,"line":1609},[99,7788,7789],{"class":168},"    \u002F\u002F分数\n",[99,7791,7792,7794],{"class":101,"line":1614},[99,7793,1971],{"class":105},[99,7795,7796],{"class":109}," score;\n",[99,7798,7799],{"class":101,"line":1628},[99,7800,3981],{"class":109},[99,7802,7803,7805],{"class":101,"line":1633},[99,7804,7746],{"class":105},[99,7806,7807],{"class":1949}," School\n",[99,7809,7810],{"class":101,"line":1639},[99,7811,1532],{"class":109},[99,7813,7814],{"class":101,"line":1660},[99,7815,7758],{"class":168},[99,7817,7818],{"class":101,"line":1665},[99,7819,2386],{"emptyLinePlaceholder":26},[99,7821,7822],{"class":101,"line":1679},[99,7823,7767],{"class":168},[99,7825,7826],{"class":101,"line":1684},[99,7827,7772],{"class":109},[99,7829,7830],{"class":101,"line":1713},[99,7831,7777],{"class":168},[99,7833,7834,7836],{"class":101,"line":1718},[99,7835,1971],{"class":105},[99,7837,7784],{"class":109},[99,7839,7840],{"class":101,"line":1735},[99,7841,7789],{"class":168},[99,7843,7844,7846],{"class":101,"line":1740},[99,7845,1971],{"class":105},[99,7847,7796],{"class":109},[99,7849,7850,7853],{"class":101,"line":1745},[99,7851,7852],{"class":109},"} s3;",[99,7854,7855],{"class":168}," \u002F\u002F创建结构体时就创建了变量\n",[99,7857,7858,7860,7862],{"class":101,"line":1750},[99,7859,113],{"class":105},[99,7861,1959],{"class":1949},[99,7863,1962],{"class":109},[99,7865,7866],{"class":101,"line":1764},[99,7867,1532],{"class":109},[99,7869,7870],{"class":101,"line":1769},[99,7871,7872],{"class":168},"    \u002F\u002F2.通过学生类型创建具体学生\n",[99,7874,7875],{"class":101,"line":2563},[99,7876,7877],{"class":168},"    \u002F\u002F2.1 struct Student s1;\n",[99,7879,7880,7883,7886],{"class":101,"line":2577},[99,7881,7882],{"class":105},"    struct",[99,7884,7885],{"class":1949}," Student",[99,7887,7888],{"class":109}," s1;\n",[99,7890,7891],{"class":101,"line":2585},[99,7892,7893],{"class":168},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[99,7895,7896,7899,7901,7904],{"class":101,"line":2590},[99,7897,7898],{"class":109},"    s1.name",[99,7900,155],{"class":105},[99,7902,7903],{"class":214},"\"张三\"",[99,7905,1276],{"class":109},[99,7907,7908,7911,7913,7915],{"class":101,"line":2596},[99,7909,7910],{"class":109},"    s1.age",[99,7912,155],{"class":105},[99,7914,760],{"class":158},[99,7916,1276],{"class":109},[99,7918,7919,7922,7924,7926],{"class":101,"line":2602},[99,7920,7921],{"class":109},"    s1.score",[99,7923,155],{"class":105},[99,7925,364],{"class":158},[99,7927,1276],{"class":109},[99,7929,7930],{"class":101,"line":2607},[99,7931,7932],{"class":168},"    \u002F\u002F输出结果\n",[99,7934,7936,7938,7940,7943,7945,7948,7950,7953,7955],{"class":101,"line":7935},37,[99,7937,1537],{"class":109},[99,7939,1154],{"class":105},[99,7941,7942],{"class":109},"s1.name",[99,7944,1154],{"class":105},[99,7946,7947],{"class":109},"s1.age",[99,7949,1154],{"class":105},[99,7951,7952],{"class":109},"s1.score",[99,7954,1154],{"class":105},[99,7956,1177],{"class":109},[99,7958,7960],{"class":101,"line":7959},38,[99,7961,2386],{"emptyLinePlaceholder":26},[99,7963,7965],{"class":101,"line":7964},39,[99,7966,7967],{"class":168},"    \u002F\u002F2.2 struct Student s2={...}\n",[99,7969,7971,7973,7975,7978,7980,7982,7985,7987,7989,7991,7993],{"class":101,"line":7970},40,[99,7972,7882],{"class":105},[99,7974,7885],{"class":1949},[99,7976,7977],{"class":109}," s2",[99,7979,155],{"class":105},[99,7981,1006],{"class":109},[99,7983,7984],{"class":214},"\"王五\"",[99,7986,488],{"class":109},[99,7988,760],{"class":158},[99,7990,488],{"class":109},[99,7992,364],{"class":158},[99,7994,3981],{"class":109},[99,7996,7998],{"class":101,"line":7997},41,[99,7999,2386],{"emptyLinePlaceholder":26},[99,8001,8003],{"class":101,"line":8002},42,[99,8004,8005],{"class":168},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[99,8007,8009,8012,8014,8016],{"class":101,"line":8008},43,[99,8010,8011],{"class":109},"    s3.name",[99,8013,155],{"class":105},[99,8015,3664],{"class":214},[99,8017,1276],{"class":109},[99,8019,8021,8024,8026,8028],{"class":101,"line":8020},44,[99,8022,8023],{"class":109},"    s3.age",[99,8025,155],{"class":105},[99,8027,760],{"class":158},[99,8029,1276],{"class":109},[99,8031,8033,8036,8038,8040],{"class":101,"line":8032},45,[99,8034,8035],{"class":109},"    s3.score",[99,8037,155],{"class":105},[99,8039,810],{"class":158},[99,8041,1276],{"class":109},[99,8043,8045],{"class":101,"line":8044},46,[99,8046,1551],{"class":109},[14,8048,8049],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[41,8051,8053],{"id":8052},"_42结构体数组","4.2结构体数组",[14,8055,8056],{},"将自定义的结构体放入到数组中方便维护",[14,8058,8059,8060,8063],{},"语法：struct 结构体名 数组名",[99,8061,8062],{},"元素个数","={ {}，{},...{} };",[90,8065,8067],{"className":92,"code":8066,"language":94,"meta":21,"style":21},"#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",[96,8068,8069,8075,8085,8091,8096,8102,8106,8110,8116,8122,8126,8130,8138,8142,8147,8162,8166,8182,8198,8202,8207,8223,8238,8253,8258,8284,8288,8311,8315],{"__ignoreMap":21},[99,8070,8071,8073],{"class":101,"line":102},[99,8072,1935],{"class":105},[99,8074,1938],{"class":214},[99,8076,8077,8079,8081,8083],{"class":101,"line":22},[99,8078,1943],{"class":105},[99,8080,1946],{"class":105},[99,8082,1950],{"class":1949},[99,8084,1276],{"class":109},[99,8086,8087,8089],{"class":101,"line":1165},[99,8088,1935],{"class":105},[99,8090,7736],{"class":214},[99,8092,8093],{"class":101,"line":1180},[99,8094,8095],{"class":168},"\u002F\u002F1.定义结构体\n",[99,8097,8098,8100],{"class":101,"line":1186},[99,8099,7746],{"class":105},[99,8101,7749],{"class":1949},[99,8103,8104],{"class":101,"line":1200},[99,8105,1532],{"class":109},[99,8107,8108],{"class":101,"line":1206},[99,8109,7772],{"class":109},[99,8111,8112,8114],{"class":101,"line":1297},[99,8113,1971],{"class":105},[99,8115,7784],{"class":109},[99,8117,8118,8120],{"class":101,"line":1303},[99,8119,1971],{"class":105},[99,8121,7796],{"class":109},[99,8123,8124],{"class":101,"line":1315},[99,8125,2386],{"emptyLinePlaceholder":26},[99,8127,8128],{"class":101,"line":1598},[99,8129,3981],{"class":109},[99,8131,8132,8134,8136],{"class":101,"line":1603},[99,8133,113],{"class":105},[99,8135,1959],{"class":1949},[99,8137,1962],{"class":109},[99,8139,8140],{"class":101,"line":1609},[99,8141,1532],{"class":109},[99,8143,8144],{"class":101,"line":1614},[99,8145,8146],{"class":168},"    \u002F\u002F2.创建结构体数组\n",[99,8148,8149,8151,8153,8156,8158,8160],{"class":101,"line":1628},[99,8150,7882],{"class":105},[99,8152,7885],{"class":1949},[99,8154,8155],{"class":109}," stuArray[",[99,8157,187],{"class":158},[99,8159,1050],{"class":109},[99,8161,4894],{"class":105},[99,8163,8164],{"class":101,"line":1633},[99,8165,2016],{"class":109},[99,8167,8168,8170,8172,8174,8176,8178,8180],{"class":101,"line":1639},[99,8169,4903],{"class":109},[99,8171,7903],{"class":214},[99,8173,488],{"class":109},[99,8175,760],{"class":158},[99,8177,488],{"class":109},[99,8179,421],{"class":158},[99,8181,4916],{"class":109},[99,8183,8184,8186,8188,8190,8192,8194,8196],{"class":101,"line":1660},[99,8185,4903],{"class":109},[99,8187,3664],{"class":214},[99,8189,488],{"class":109},[99,8191,685],{"class":158},[99,8193,488],{"class":109},[99,8195,685],{"class":158},[99,8197,1551],{"class":109},[99,8199,8200],{"class":101,"line":1665},[99,8201,2173],{"class":109},[99,8203,8204],{"class":101,"line":1679},[99,8205,8206],{"class":168},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[99,8208,8209,8212,8214,8217,8219,8221],{"class":101,"line":1684},[99,8210,8211],{"class":109},"    stuArray[",[99,8213,327],{"class":158},[99,8215,8216],{"class":109},"].name",[99,8218,155],{"class":105},[99,8220,3687],{"class":214},[99,8222,1276],{"class":109},[99,8224,8225,8227,8229,8232,8234,8236],{"class":101,"line":1713},[99,8226,8211],{"class":109},[99,8228,327],{"class":158},[99,8230,8231],{"class":109},"].age",[99,8233,155],{"class":105},[99,8235,187],{"class":158},[99,8237,1276],{"class":109},[99,8239,8240,8242,8244,8247,8249,8251],{"class":101,"line":1718},[99,8241,8211],{"class":109},[99,8243,327],{"class":158},[99,8245,8246],{"class":109},"].score",[99,8248,155],{"class":105},[99,8250,187],{"class":158},[99,8252,1276],{"class":109},[99,8254,8255],{"class":101,"line":1735},[99,8256,8257],{"class":168},"    \u002F\u002F4.遍历结构体数组\n",[99,8259,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280,8282],{"class":101,"line":1740},[99,8261,3187],{"class":105},[99,8263,1644],{"class":109},[99,8265,113],{"class":105},[99,8267,3018],{"class":109},[99,8269,155],{"class":105},[99,8271,301],{"class":158},[99,8273,3025],{"class":109},[99,8275,1020],{"class":105},[99,8277,187],{"class":158},[99,8279,3025],{"class":109},[99,8281,2278],{"class":105},[99,8283,116],{"class":109},[99,8285,8286],{"class":101,"line":1745},[99,8287,2016],{"class":109},[99,8289,8290,8292,8294,8297,8299,8302,8304,8307,8309],{"class":101,"line":1750},[99,8291,3437],{"class":109},[99,8293,1154],{"class":105},[99,8295,8296],{"class":109},"stuArray[i].name",[99,8298,1154],{"class":105},[99,8300,8301],{"class":109},"stuArray[i].age",[99,8303,1154],{"class":105},[99,8305,8306],{"class":109},"stuArray[i].score",[99,8308,1154],{"class":105},[99,8310,1177],{"class":109},[99,8312,8313],{"class":101,"line":1764},[99,8314,2173],{"class":109},[99,8316,8317],{"class":101,"line":1769},[99,8318,1551],{"class":109},[41,8320,8322],{"id":8321},"_43结构体指针","4.3结构体指针",[14,8324,8325],{},"作用：通过指针访问结构体中的成员",[14,8327,8328],{},"利用操作符->可以通过结构体指针访问结构体属性",[90,8330,8332],{"className":92,"code":8331,"language":94,"meta":21,"style":21},"#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",[96,8333,8334,8340,8350,8356,8360,8366,8370,8374,8380,8386,8390,8398,8402,8407,8432,8437,8452,8457,8480],{"__ignoreMap":21},[99,8335,8336,8338],{"class":101,"line":102},[99,8337,1935],{"class":105},[99,8339,1938],{"class":214},[99,8341,8342,8344,8346,8348],{"class":101,"line":22},[99,8343,1943],{"class":105},[99,8345,1946],{"class":105},[99,8347,1950],{"class":1949},[99,8349,1276],{"class":109},[99,8351,8352,8354],{"class":101,"line":1165},[99,8353,1935],{"class":105},[99,8355,7736],{"class":214},[99,8357,8358],{"class":101,"line":1180},[99,8359,8095],{"class":168},[99,8361,8362,8364],{"class":101,"line":1186},[99,8363,7746],{"class":105},[99,8365,7749],{"class":1949},[99,8367,8368],{"class":101,"line":1200},[99,8369,1532],{"class":109},[99,8371,8372],{"class":101,"line":1206},[99,8373,7772],{"class":109},[99,8375,8376,8378],{"class":101,"line":1297},[99,8377,1971],{"class":105},[99,8379,7784],{"class":109},[99,8381,8382,8384],{"class":101,"line":1303},[99,8383,1971],{"class":105},[99,8385,7796],{"class":109},[99,8387,8388],{"class":101,"line":1315},[99,8389,3981],{"class":109},[99,8391,8392,8394,8396],{"class":101,"line":1598},[99,8393,113],{"class":105},[99,8395,1959],{"class":1949},[99,8397,1962],{"class":109},[99,8399,8400],{"class":101,"line":1603},[99,8401,1532],{"class":109},[99,8403,8404],{"class":101,"line":1609},[99,8405,8406],{"class":168},"    \u002F\u002F创建学生结构体变量\n",[99,8408,8409,8411,8413,8416,8418,8420,8422,8424,8426,8428,8430],{"class":101,"line":1614},[99,8410,7882],{"class":105},[99,8412,7885],{"class":1949},[99,8414,8415],{"class":109}," s",[99,8417,155],{"class":105},[99,8419,1006],{"class":109},[99,8421,7903],{"class":214},[99,8423,488],{"class":109},[99,8425,760],{"class":158},[99,8427,488],{"class":109},[99,8429,1708],{"class":158},[99,8431,3981],{"class":109},[99,8433,8434],{"class":101,"line":1628},[99,8435,8436],{"class":168},"    \u002F\u002F通过指针指向结构体变量\n",[99,8438,8439,8441,8443,8445,8447,8449],{"class":101,"line":1633},[99,8440,7882],{"class":105},[99,8442,7885],{"class":1949},[99,8444,6505],{"class":105},[99,8446,14],{"class":109},[99,8448,6326],{"class":105},[99,8450,8451],{"class":109},"s\n",[99,8453,8454],{"class":101,"line":1639},[99,8455,8456],{"class":168},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[99,8458,8459,8461,8463,8466,8468,8471,8473,8476,8478],{"class":101,"line":1660},[99,8460,1537],{"class":109},[99,8462,1154],{"class":105},[99,8464,8465],{"class":109},"p->name",[99,8467,1154],{"class":105},[99,8469,8470],{"class":109},"p->age",[99,8472,1154],{"class":105},[99,8474,8475],{"class":109},"p->score",[99,8477,1154],{"class":105},[99,8479,1177],{"class":109},[99,8481,8482],{"class":101,"line":1665},[99,8483,1551],{"class":109},[41,8485,8487],{"id":8486},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8489,8490],{},"作用：结构体中的成员可以是另一个结构体",[14,8492,8493],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[90,8495,8497],{"className":92,"code":8496,"language":94,"meta":21,"style":21},"#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",[96,8498,8499,8505,8515,8521,8526,8534,8538,8542,8548,8554,8558,8563,8570,8574,8581,8585,8591,8596,8600,8608,8612,8617,8622,8627,8638,8650,8661,8674,8685,8696],{"__ignoreMap":21},[99,8500,8501,8503],{"class":101,"line":102},[99,8502,1935],{"class":105},[99,8504,1938],{"class":214},[99,8506,8507,8509,8511,8513],{"class":101,"line":22},[99,8508,1943],{"class":105},[99,8510,1946],{"class":105},[99,8512,1950],{"class":1949},[99,8514,1276],{"class":109},[99,8516,8517,8519],{"class":101,"line":1165},[99,8518,1935],{"class":105},[99,8520,7736],{"class":214},[99,8522,8523],{"class":101,"line":1180},[99,8524,8525],{"class":168},"\u002F\u002F定义学生结构体\n",[99,8527,8528,8530,8532],{"class":101,"line":1186},[99,8529,7746],{"class":105},[99,8531,7885],{"class":1949},[99,8533,2660],{"class":109},[99,8535,8536],{"class":101,"line":1200},[99,8537,1532],{"class":109},[99,8539,8540],{"class":101,"line":1206},[99,8541,7772],{"class":109},[99,8543,8544,8546],{"class":101,"line":1297},[99,8545,1971],{"class":105},[99,8547,7784],{"class":109},[99,8549,8550,8552],{"class":101,"line":1303},[99,8551,1971],{"class":105},[99,8553,7796],{"class":109},[99,8555,8556],{"class":101,"line":1315},[99,8557,1551],{"class":109},[99,8559,8560],{"class":101,"line":1598},[99,8561,8562],{"class":168},"\u002F\u002F定义老师结构体\n",[99,8564,8565,8567],{"class":101,"line":1603},[99,8566,7746],{"class":105},[99,8568,8569],{"class":1949}," Teacher\n",[99,8571,8572],{"class":101,"line":1609},[99,8573,1532],{"class":109},[99,8575,8576,8578],{"class":101,"line":1614},[99,8577,1971],{"class":105},[99,8579,8580],{"class":109}," id;\n",[99,8582,8583],{"class":101,"line":1628},[99,8584,7772],{"class":109},[99,8586,8587,8589],{"class":101,"line":1633},[99,8588,1971],{"class":105},[99,8590,7784],{"class":109},[99,8592,8593],{"class":101,"line":1639},[99,8594,8595],{"class":109},"    Student stu;\n",[99,8597,8598],{"class":101,"line":1660},[99,8599,1551],{"class":109},[99,8601,8602,8604,8606],{"class":101,"line":1665},[99,8603,113],{"class":105},[99,8605,1959],{"class":1949},[99,8607,5965],{"class":109},[99,8609,8610],{"class":101,"line":1679},[99,8611,1532],{"class":109},[99,8613,8614],{"class":101,"line":1684},[99,8615,8616],{"class":168},"    \u002F\u002F结构体嵌套结构体\n",[99,8618,8619],{"class":101,"line":1713},[99,8620,8621],{"class":168},"    \u002F\u002F创建老师\n",[99,8623,8624],{"class":101,"line":1718},[99,8625,8626],{"class":109},"    Teacher t;\n",[99,8628,8629,8632,8634,8636],{"class":101,"line":1735},[99,8630,8631],{"class":109},"    t.id",[99,8633,155],{"class":105},[99,8635,421],{"class":158},[99,8637,1276],{"class":109},[99,8639,8640,8643,8645,8648],{"class":101,"line":1740},[99,8641,8642],{"class":109},"    t.name",[99,8644,155],{"class":105},[99,8646,8647],{"class":214},"\"老王\"",[99,8649,1276],{"class":109},[99,8651,8652,8655,8657,8659],{"class":101,"line":1745},[99,8653,8654],{"class":109},"    t.age",[99,8656,155],{"class":105},[99,8658,760],{"class":158},[99,8660,1276],{"class":109},[99,8662,8663,8666,8668,8671],{"class":101,"line":1750},[99,8664,8665],{"class":109},"    t.stu.name",[99,8667,155],{"class":105},[99,8669,8670],{"class":214},"\"小王\"",[99,8672,8673],{"class":109},"；\n",[99,8675,8676,8679,8681,8683],{"class":101,"line":1764},[99,8677,8678],{"class":109},"    t.stu.age",[99,8680,155],{"class":105},[99,8682,810],{"class":158},[99,8684,1276],{"class":109},[99,8686,8687,8690,8692,8694],{"class":101,"line":1769},[99,8688,8689],{"class":109},"    t.stu.score",[99,8691,155],{"class":105},[99,8693,454],{"class":158},[99,8695,1276],{"class":109},[99,8697,8698],{"class":101,"line":2563},[99,8699,1551],{"class":109},[41,8701,8703],{"id":8702},"_45结构体做函数参数","4.5结构体做函数参数",[14,8705,8706],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[90,8708,8710],{"className":92,"code":8709,"language":94,"meta":21,"style":21},"#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",[96,8711,8712,8718,8728,8734,8740,8744,8748,8754,8760,8764,8769,8774,8791,8795,8828,8832,8837,8856,8860,8891,8895,8903,8907,8916,8928,8940,8952,8965,8973,8986,8998,9006],{"__ignoreMap":21},[99,8713,8714,8716],{"class":101,"line":102},[99,8715,1935],{"class":105},[99,8717,1938],{"class":214},[99,8719,8720,8722,8724,8726],{"class":101,"line":22},[99,8721,1943],{"class":105},[99,8723,1946],{"class":105},[99,8725,1950],{"class":1949},[99,8727,1276],{"class":109},[99,8729,8730,8732],{"class":101,"line":1165},[99,8731,1935],{"class":105},[99,8733,7736],{"class":214},[99,8735,8736,8738],{"class":101,"line":1180},[99,8737,7746],{"class":105},[99,8739,7749],{"class":1949},[99,8741,8742],{"class":101,"line":1186},[99,8743,1532],{"class":109},[99,8745,8746],{"class":101,"line":1200},[99,8747,7772],{"class":109},[99,8749,8750,8752],{"class":101,"line":1206},[99,8751,1971],{"class":105},[99,8753,7784],{"class":109},[99,8755,8756,8758],{"class":101,"line":1297},[99,8757,1971],{"class":105},[99,8759,7796],{"class":109},[99,8761,8762],{"class":101,"line":1303},[99,8763,3981],{"class":109},[99,8765,8766],{"class":101,"line":1315},[99,8767,8768],{"class":168},"\u002F\u002F打印学生信息的函数\n",[99,8770,8771],{"class":101,"line":1598},[99,8772,8773],{"class":168},"\u002F\u002F值传递\n",[99,8775,8776,8778,8781,8783,8785,8787,8789],{"class":101,"line":1603},[99,8777,5351],{"class":105},[99,8779,8780],{"class":1949}," printStudent1",[99,8782,110],{"class":109},[99,8784,7746],{"class":105},[99,8786,7885],{"class":1949},[99,8788,8415],{"class":5203},[99,8790,116],{"class":109},[99,8792,8793],{"class":101,"line":1609},[99,8794,1532],{"class":109},[99,8796,8797,8799,8801,8804,8806,8809,8811,8814,8816,8818,8820,8823,8825],{"class":101,"line":1614},[99,8798,6516],{"class":109},[99,8800,1154],{"class":105},[99,8802,8803],{"class":109}," s.name ",[99,8805,1154],{"class":105},[99,8807,8808],{"class":214}," \" \"",[99,8810,1430],{"class":105},[99,8812,8813],{"class":109}," s.age ",[99,8815,1154],{"class":105},[99,8817,8808],{"class":214},[99,8819,1430],{"class":105},[99,8821,8822],{"class":109}," s.score ",[99,8824,1154],{"class":105},[99,8826,8827],{"class":109}," endl;\n",[99,8829,8830],{"class":101,"line":1628},[99,8831,1551],{"class":109},[99,8833,8834],{"class":101,"line":1633},[99,8835,8836],{"class":168},"\u002F\u002F地址传递\n",[99,8838,8839,8841,8844,8846,8848,8850,8852,8854],{"class":101,"line":1639},[99,8840,5351],{"class":105},[99,8842,8843],{"class":1949}," printStudent2",[99,8845,110],{"class":109},[99,8847,7746],{"class":105},[99,8849,7885],{"class":1949},[99,8851,6505],{"class":105},[99,8853,805],{"class":5203},[99,8855,116],{"class":109},[99,8857,8858],{"class":101,"line":1660},[99,8859,1532],{"class":109},[99,8861,8862,8864,8866,8869,8871,8873,8875,8878,8880,8882,8884,8887,8889],{"class":101,"line":1665},[99,8863,6516],{"class":109},[99,8865,1154],{"class":105},[99,8867,8868],{"class":109}," s->name ",[99,8870,1154],{"class":105},[99,8872,8808],{"class":214},[99,8874,1430],{"class":105},[99,8876,8877],{"class":109}," s->age ",[99,8879,1154],{"class":105},[99,8881,8808],{"class":214},[99,8883,1430],{"class":105},[99,8885,8886],{"class":109}," s->score ",[99,8888,1154],{"class":105},[99,8890,8827],{"class":109},[99,8892,8893],{"class":101,"line":1679},[99,8894,1551],{"class":109},[99,8896,8897,8899,8901],{"class":101,"line":1684},[99,8898,113],{"class":105},[99,8900,1959],{"class":1949},[99,8902,1962],{"class":109},[99,8904,8905],{"class":101,"line":1713},[99,8906,1532],{"class":109},[99,8908,8909,8911,8913],{"class":101,"line":1718},[99,8910,7882],{"class":105},[99,8912,7885],{"class":1949},[99,8914,8915],{"class":109}," s;\n",[99,8917,8918,8921,8923,8926],{"class":101,"line":1735},[99,8919,8920],{"class":109},"    s.name ",[99,8922,155],{"class":105},[99,8924,8925],{"class":214}," \"张三\"",[99,8927,1276],{"class":109},[99,8929,8930,8933,8935,8938],{"class":101,"line":1740},[99,8931,8932],{"class":109},"    s.age ",[99,8934,155],{"class":105},[99,8936,8937],{"class":158}," 20",[99,8939,1276],{"class":109},[99,8941,8942,8945,8947,8950],{"class":101,"line":1745},[99,8943,8944],{"class":109},"    s.score ",[99,8946,155],{"class":105},[99,8948,8949],{"class":158}," 85",[99,8951,1276],{"class":109},[99,8953,8954,8956,8958,8961,8963],{"class":101,"line":1750},[99,8955,1537],{"class":109},[99,8957,1154],{"class":105},[99,8959,8960],{"class":214},"\"值传递:\"",[99,8962,1154],{"class":105},[99,8964,1177],{"class":109},[99,8966,8967,8970],{"class":101,"line":1764},[99,8968,8969],{"class":1949},"    printStudent1",[99,8971,8972],{"class":109},"(s);\n",[99,8974,8975,8977,8979,8982,8984],{"class":101,"line":1769},[99,8976,1537],{"class":109},[99,8978,1154],{"class":105},[99,8980,8981],{"class":214},"\"地址传递:\"",[99,8983,1154],{"class":105},[99,8985,1177],{"class":109},[99,8987,8988,8991,8993,8995],{"class":101,"line":2563},[99,8989,8990],{"class":1949},"    printStudent2",[99,8992,110],{"class":109},[99,8994,463],{"class":105},[99,8996,8997],{"class":109},"s); \n",[99,8999,9000,9002,9004],{"class":101,"line":2577},[99,9001,4076],{"class":105},[99,9003,4079],{"class":158},[99,9005,1276],{"class":109},[99,9007,9008],{"class":101,"line":2585},[99,9009,1551],{"class":109},[14,9011,9012],{},"注意：",[1117,9014,9015,9018],{},[56,9016,9017],{},"1.先定义结构体，不要在函数中写结构体的定义",[56,9019,9020],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[41,9022,9024],{"id":9023},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9026,9027],{},"用const防止误操作",[90,9029,9031],{"className":92,"code":9030,"language":94,"meta":21,"style":21},"#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",[96,9032,9033,9039,9049,9055,9060,9064,9068,9074,9080,9084,9100,9104,9127,9131,9139,9143,9164,9171,9175],{"__ignoreMap":21},[99,9034,9035,9037],{"class":101,"line":102},[99,9036,1935],{"class":105},[99,9038,1938],{"class":214},[99,9040,9041,9043,9045,9047],{"class":101,"line":22},[99,9042,1943],{"class":105},[99,9044,1946],{"class":105},[99,9046,1950],{"class":1949},[99,9048,1276],{"class":109},[99,9050,9051,9053],{"class":101,"line":1165},[99,9052,1935],{"class":105},[99,9054,7736],{"class":214},[99,9056,9057],{"class":101,"line":1180},[99,9058,9059],{"class":109},"sctuct Student\n",[99,9061,9062],{"class":101,"line":1186},[99,9063,1532],{"class":109},[99,9065,9066],{"class":101,"line":1200},[99,9067,7772],{"class":109},[99,9069,9070,9072],{"class":101,"line":1206},[99,9071,1971],{"class":105},[99,9073,7784],{"class":109},[99,9075,9076,9078],{"class":101,"line":1297},[99,9077,1971],{"class":105},[99,9079,7796],{"class":109},[99,9081,9082],{"class":101,"line":1303},[99,9083,3981],{"class":109},[99,9085,9086,9088,9091,9093,9096,9098],{"class":101,"line":1315},[99,9087,5351],{"class":105},[99,9089,9090],{"class":1949}," printStudents",[99,9092,110],{"class":109},[99,9094,9095],{"class":1949},"student",[99,9097,8415],{"class":5203},[99,9099,116],{"class":109},[99,9101,9102],{"class":101,"line":1598},[99,9103,1532],{"class":109},[99,9105,9106,9108,9110,9113,9115,9118,9120,9123,9125],{"class":101,"line":1603},[99,9107,1537],{"class":109},[99,9109,1154],{"class":105},[99,9111,9112],{"class":109},"s.name",[99,9114,1154],{"class":105},[99,9116,9117],{"class":109},"s.age",[99,9119,1154],{"class":105},[99,9121,9122],{"class":109},"s.score",[99,9124,1154],{"class":105},[99,9126,1177],{"class":109},[99,9128,9129],{"class":101,"line":1609},[99,9130,1551],{"class":109},[99,9132,9133,9135,9137],{"class":101,"line":1614},[99,9134,113],{"class":105},[99,9136,1959],{"class":1949},[99,9138,5965],{"class":109},[99,9140,9141],{"class":101,"line":1628},[99,9142,1532],{"class":109},[99,9144,9145,9148,9150,9152,9154,9156,9158,9160,9162],{"class":101,"line":1633},[99,9146,9147],{"class":109},"    Student s",[99,9149,155],{"class":105},[99,9151,1006],{"class":109},[99,9153,7903],{"class":214},[99,9155,488],{"class":109},[99,9157,760],{"class":158},[99,9159,488],{"class":109},[99,9161,760],{"class":158},[99,9163,3981],{"class":109},[99,9165,9166,9169],{"class":101,"line":1639},[99,9167,9168],{"class":1949},"    printStudent",[99,9170,8972],{"class":109},[99,9172,9173],{"class":101,"line":1660},[99,9174,2386],{"emptyLinePlaceholder":26},[99,9176,9177],{"class":101,"line":1665},[99,9178,1551],{"class":109},[14,9180,9012],{},[1117,9182,9183,9186,9189],{},[56,9184,9185],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[56,9187,9188],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[56,9190,9191],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[90,9193,9195],{"className":92,"code":9194,"language":94,"meta":21,"style":21},"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",[96,9196,9197,9216,9220,9225,9245],{"__ignoreMap":21},[99,9198,9199,9201,9203,9205,9207,9210,9212,9214],{"class":101,"line":102},[99,9200,5351],{"class":105},[99,9202,9090],{"class":1949},[99,9204,110],{"class":109},[99,9206,6779],{"class":105},[99,9208,9209],{"class":1949}," student",[99,9211,6505],{"class":105},[99,9213,805],{"class":5203},[99,9215,116],{"class":109},[99,9217,9218],{"class":101,"line":22},[99,9219,1532],{"class":109},[99,9221,9222],{"class":101,"line":1165},[99,9223,9224],{"class":168},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[99,9226,9227,9229,9231,9233,9235,9237,9239,9241,9243],{"class":101,"line":1180},[99,9228,1537],{"class":109},[99,9230,1154],{"class":105},[99,9232,9112],{"class":109},[99,9234,1154],{"class":105},[99,9236,9117],{"class":109},[99,9238,1154],{"class":105},[99,9240,9122],{"class":109},[99,9242,1154],{"class":105},[99,9244,1177],{"class":109},[99,9246,9247],{"class":101,"line":1186},[99,9248,1551],{"class":109},[41,9250,9252],{"id":9251},"_47案例","4.7案例",[53,9254,9255],{},[56,9256,9257],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[90,9259,9261],{"className":92,"code":9260,"language":94,"meta":21,"style":21},"#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",[96,9262,9263,9269,9279,9285,9292,9296,9302,9306,9311,9317,9323,9327,9331,9337,9341,9346,9351,9364,9368,9373,9399,9403,9415,9442,9446,9458,9468,9472,9477,9506,9510,9522,9531,9558,9569,9579,9583,9587,9591,9596,9620,9624,9648,9652,9671,9697,9701,9726,9749,9773,9778,9783,9788,9797,9802,9808,9829,9835,9849,9855,9882,9891,9897,9905,9910],{"__ignoreMap":21},[99,9264,9265,9267],{"class":101,"line":102},[99,9266,1935],{"class":105},[99,9268,1938],{"class":214},[99,9270,9271,9273,9275,9277],{"class":101,"line":22},[99,9272,1943],{"class":105},[99,9274,1946],{"class":105},[99,9276,1950],{"class":1949},[99,9278,1276],{"class":109},[99,9280,9281,9283],{"class":101,"line":1165},[99,9282,1935],{"class":105},[99,9284,7736],{"class":214},[99,9286,9287,9289],{"class":101,"line":1180},[99,9288,1935],{"class":105},[99,9290,9291],{"class":214},"\u003Cctime>\n",[99,9293,9294],{"class":101,"line":1186},[99,9295,8525],{"class":168},[99,9297,9298,9300],{"class":101,"line":1200},[99,9299,7746],{"class":105},[99,9301,7749],{"class":1949},[99,9303,9304],{"class":101,"line":1206},[99,9305,1532],{"class":109},[99,9307,9308],{"class":101,"line":1297},[99,9309,9310],{"class":109},"    string sName;\n",[99,9312,9313,9315],{"class":101,"line":1303},[99,9314,1971],{"class":105},[99,9316,7784],{"class":109},[99,9318,9319,9321],{"class":101,"line":1315},[99,9320,1971],{"class":105},[99,9322,7796],{"class":109},[99,9324,9325],{"class":101,"line":1598},[99,9326,3981],{"class":109},[99,9328,9329],{"class":101,"line":1603},[99,9330,8562],{"class":168},[99,9332,9333,9335],{"class":101,"line":1609},[99,9334,7746],{"class":105},[99,9336,8569],{"class":1949},[99,9338,9339],{"class":101,"line":1614},[99,9340,1532],{"class":109},[99,9342,9343],{"class":101,"line":1628},[99,9344,9345],{"class":109},"    string tName;\n",[99,9347,9348],{"class":101,"line":1633},[99,9349,9350],{"class":168},"    \u002F\u002F学生数组\n",[99,9352,9353,9355,9357,9360,9362],{"class":101,"line":1639},[99,9354,7882],{"class":105},[99,9356,7885],{"class":1949},[99,9358,9359],{"class":109}," sArray[",[99,9361,429],{"class":158},[99,9363,4676],{"class":109},[99,9365,9366],{"class":101,"line":1660},[99,9367,3981],{"class":109},[99,9369,9370],{"class":101,"line":1665},[99,9371,9372],{"class":168},"\u002F\u002F给老师和学生赋值的函数\n",[99,9374,9375,9377,9380,9382,9384,9387,9390,9393,9395,9397],{"class":101,"line":1679},[99,9376,5351],{"class":105},[99,9378,9379],{"class":1949}," allocateSpace",[99,9381,110],{"class":109},[99,9383,7746],{"class":105},[99,9385,9386],{"class":1949}," Teacher",[99,9388,9389],{"class":5203}," tArray",[99,9391,9392],{"class":109},"[],",[99,9394,113],{"class":105},[99,9396,7318],{"class":5203},[99,9398,116],{"class":109},[99,9400,9401],{"class":101,"line":1684},[99,9402,1532],{"class":109},[99,9404,9405,9408,9410,9413],{"class":101,"line":1713},[99,9406,9407],{"class":109},"    string nameSeed",[99,9409,155],{"class":105},[99,9411,9412],{"class":214},"\"ABCDE\"",[99,9414,1276],{"class":109},[99,9416,9417,9419,9421,9423,9426,9428,9430,9433,9435,9438,9440],{"class":101,"line":1718},[99,9418,3187],{"class":105},[99,9420,1644],{"class":109},[99,9422,113],{"class":105},[99,9424,9425],{"class":109}," i ",[99,9427,155],{"class":105},[99,9429,4079],{"class":158},[99,9431,9432],{"class":109},"; i ",[99,9434,1020],{"class":105},[99,9436,9437],{"class":109}," len; i",[99,9439,2278],{"class":105},[99,9441,116],{"class":109},[99,9443,9444],{"class":101,"line":1735},[99,9445,2016],{"class":109},[99,9447,9448,9451,9453,9456],{"class":101,"line":1740},[99,9449,9450],{"class":109},"        tArray[i].tName ",[99,9452,155],{"class":105},[99,9454,9455],{"class":214}," \"Teacher_\"",[99,9457,1276],{"class":109},[99,9459,9460,9462,9465],{"class":101,"line":1745},[99,9461,9450],{"class":109},[99,9463,9464],{"class":105},"+=",[99,9466,9467],{"class":109},"nameSeed[i];\n",[99,9469,9470],{"class":101,"line":1750},[99,9471,2386],{"emptyLinePlaceholder":26},[99,9473,9474],{"class":101,"line":1764},[99,9475,9476],{"class":168},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[99,9478,9479,9481,9483,9485,9488,9490,9492,9495,9497,9499,9502,9504],{"class":101,"line":1769},[99,9480,3389],{"class":105},[99,9482,1644],{"class":109},[99,9484,113],{"class":105},[99,9486,9487],{"class":109}," j ",[99,9489,155],{"class":105},[99,9491,4079],{"class":158},[99,9493,9494],{"class":109},"; j ",[99,9496,1020],{"class":105},[99,9498,2134],{"class":158},[99,9500,9501],{"class":109},"; j",[99,9503,2278],{"class":105},[99,9505,116],{"class":109},[99,9507,9508],{"class":101,"line":2563},[99,9509,2496],{"class":109},[99,9511,9512,9515,9517,9520],{"class":101,"line":2577},[99,9513,9514],{"class":109},"            tArray[i].sArray[j].sName ",[99,9516,155],{"class":105},[99,9518,9519],{"class":214}," \"Student_\"",[99,9521,1276],{"class":109},[99,9523,9524,9526,9528],{"class":101,"line":2585},[99,9525,9514],{"class":109},[99,9527,9464],{"class":105},[99,9529,9530],{"class":109}," nameSeed[j];\n",[99,9532,9533,9536,9539,9541,9543,9545,9547,9549,9551,9553,9555],{"class":101,"line":2590},[99,9534,9535],{"class":105},"            int",[99,9537,9538],{"class":109}," random",[99,9540,155],{"class":105},[99,9542,2410],{"class":1949},[99,9544,2413],{"class":109},[99,9546,438],{"class":105},[99,9548,1017],{"class":158},[99,9550,591],{"class":105},[99,9552,511],{"class":158},[99,9554,165],{"class":109},[99,9556,9557],{"class":168},"\u002F\u002F40~99\n",[99,9559,9560,9563,9565,9567],{"class":101,"line":2596},[99,9561,9562],{"class":109},"            tArray[i].sArray[j].age ",[99,9564,155],{"class":105},[99,9566,8937],{"class":158},[99,9568,1276],{"class":109},[99,9570,9571,9574,9576],{"class":101,"line":2602},[99,9572,9573],{"class":109},"            tArray[i].sArray[j].score ",[99,9575,155],{"class":105},[99,9577,9578],{"class":109}," random;\n",[99,9580,9581],{"class":101,"line":2607},[99,9582,2515],{"class":109},[99,9584,9585],{"class":101,"line":7935},[99,9586,2173],{"class":109},[99,9588,9589],{"class":101,"line":7959},[99,9590,1551],{"class":109},[99,9592,9593],{"class":101,"line":7964},[99,9594,9595],{"class":168},"\u002F\u002F打印所有信息的函数\n",[99,9597,9598,9600,9603,9605,9607,9609,9611,9614,9616,9618],{"class":101,"line":7970},[99,9599,5351],{"class":105},[99,9601,9602],{"class":1949}," printInfo",[99,9604,110],{"class":109},[99,9606,7746],{"class":105},[99,9608,9386],{"class":1949},[99,9610,9389],{"class":5203},[99,9612,9613],{"class":109},"[], ",[99,9615,113],{"class":105},[99,9617,7318],{"class":5203},[99,9619,116],{"class":109},[99,9621,9622],{"class":101,"line":7997},[99,9623,1532],{"class":109},[99,9625,9626,9628,9630,9632,9634,9636,9638,9640,9642,9644,9646],{"class":101,"line":8002},[99,9627,3187],{"class":105},[99,9629,1644],{"class":109},[99,9631,113],{"class":105},[99,9633,9425],{"class":109},[99,9635,155],{"class":105},[99,9637,4079],{"class":158},[99,9639,9432],{"class":109},[99,9641,1020],{"class":105},[99,9643,9437],{"class":109},[99,9645,2278],{"class":105},[99,9647,116],{"class":109},[99,9649,9650],{"class":101,"line":8008},[99,9651,2016],{"class":109},[99,9653,9654,9657,9659,9662,9664,9667,9669],{"class":101,"line":8020},[99,9655,9656],{"class":109},"        cout ",[99,9658,1154],{"class":105},[99,9660,9661],{"class":214}," \"Teacher: \"",[99,9663,1430],{"class":105},[99,9665,9666],{"class":109}," tArray[i].tName ",[99,9668,1154],{"class":105},[99,9670,8827],{"class":109},[99,9672,9673,9675,9677,9679,9681,9683,9685,9687,9689,9691,9693,9695],{"class":101,"line":8032},[99,9674,3389],{"class":105},[99,9676,1644],{"class":109},[99,9678,113],{"class":105},[99,9680,9487],{"class":109},[99,9682,155],{"class":105},[99,9684,4079],{"class":158},[99,9686,9494],{"class":109},[99,9688,1020],{"class":105},[99,9690,2134],{"class":158},[99,9692,9501],{"class":109},[99,9694,2278],{"class":105},[99,9696,116],{"class":109},[99,9698,9699],{"class":101,"line":8044},[99,9700,2496],{"class":109},[99,9702,9704,9707,9709,9712,9714,9717,9719,9722,9724],{"class":101,"line":9703},47,[99,9705,9706],{"class":109},"            cout ",[99,9708,1154],{"class":105},[99,9710,9711],{"class":214}," \"",[99,9713,1216],{"class":158},[99,9715,9716],{"class":214},"Student: \"",[99,9718,1430],{"class":105},[99,9720,9721],{"class":109}," tArray[i].sArray[j].sName",[99,9723,1154],{"class":105},[99,9725,1177],{"class":109},[99,9727,9729,9731,9733,9735,9737,9740,9742,9745,9747],{"class":101,"line":9728},48,[99,9730,9706],{"class":109},[99,9732,1154],{"class":105},[99,9734,9711],{"class":214},[99,9736,1216],{"class":158},[99,9738,9739],{"class":214},"Age: \"",[99,9741,1430],{"class":105},[99,9743,9744],{"class":109}," tArray[i].sArray[j].age ",[99,9746,1154],{"class":105},[99,9748,8827],{"class":109},[99,9750,9752,9754,9756,9758,9760,9763,9765,9768,9770],{"class":101,"line":9751},49,[99,9753,9706],{"class":109},[99,9755,1154],{"class":105},[99,9757,9711],{"class":214},[99,9759,1216],{"class":158},[99,9761,9762],{"class":214},"Score: \"",[99,9764,1430],{"class":105},[99,9766,9767],{"class":109}," tArray[i].sArray[j].score ",[99,9769,1154],{"class":105},[99,9771,9772],{"class":109}," endl;   \n",[99,9774,9776],{"class":101,"line":9775},50,[99,9777,2515],{"class":109},[99,9779,9781],{"class":101,"line":9780},51,[99,9782,2173],{"class":109},[99,9784,9786],{"class":101,"line":9785},52,[99,9787,1551],{"class":109},[99,9789,9791,9793,9795],{"class":101,"line":9790},53,[99,9792,113],{"class":105},[99,9794,1959],{"class":1949},[99,9796,1962],{"class":109},[99,9798,9800],{"class":101,"line":9799},54,[99,9801,1532],{"class":109},[99,9803,9805],{"class":101,"line":9804},55,[99,9806,9807],{"class":168},"    \u002F\u002F随机数种子\n",[99,9809,9811,9813,9815,9817,9819,9821,9823,9825,9827],{"class":101,"line":9810},56,[99,9812,2359],{"class":1949},[99,9814,2362],{"class":109},[99,9816,2365],{"class":105},[99,9818,2368],{"class":105},[99,9820,539],{"class":109},[99,9822,2373],{"class":1949},[99,9824,110],{"class":109},[99,9826,2378],{"class":158},[99,9828,2381],{"class":109},[99,9830,9832],{"class":101,"line":9831},57,[99,9833,9834],{"class":168},"    \u002F\u002F1.创建3名老师的数组\n",[99,9836,9838,9840,9842,9845,9847],{"class":101,"line":9837},58,[99,9839,7882],{"class":105},[99,9841,9386],{"class":1949},[99,9843,9844],{"class":109}," tArray[",[99,9846,181],{"class":158},[99,9848,4676],{"class":109},[99,9850,9852],{"class":101,"line":9851},59,[99,9853,9854],{"class":168},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[99,9856,9858,9860,9863,9865,9868,9871,9873,9875,9878,9880],{"class":101,"line":9857},60,[99,9859,1971],{"class":105},[99,9861,9862],{"class":109}," len ",[99,9864,155],{"class":105},[99,9866,9867],{"class":105}," sizeof",[99,9869,9870],{"class":109},"(tArray) ",[99,9872,694],{"class":105},[99,9874,9867],{"class":105},[99,9876,9877],{"class":109},"(tArray[",[99,9879,301],{"class":158},[99,9881,3842],{"class":109},[99,9883,9885,9888],{"class":101,"line":9884},61,[99,9886,9887],{"class":1949},"    allocateSpace",[99,9889,9890],{"class":109},"(tArray, len);\n",[99,9892,9894],{"class":101,"line":9893},62,[99,9895,9896],{"class":168},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[99,9898,9900,9903],{"class":101,"line":9899},63,[99,9901,9902],{"class":1949},"    printInfo",[99,9904,9890],{"class":109},[99,9906,9908],{"class":101,"line":9907},64,[99,9909,2386],{"emptyLinePlaceholder":26},[99,9911,9913],{"class":101,"line":9912},65,[99,9914,1551],{"class":109},[53,9916,9917],{"start":22},[56,9918,9919,9922],{},[259,9920,9921],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9924,9925],{},"五名英雄信息如下：",[90,9927,9931],{"className":9928,"code":9929,"language":9930,"meta":21,"style":21},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[96,9932,9933,9951,9968,9985,10002],{"__ignoreMap":21},[99,9934,9935,9937,9940,9942,9944,9946,9949],{"class":101,"line":102},[99,9936,4903],{"class":109},[99,9938,9939],{"class":214},"\"刘备\"",[99,9941,488],{"class":109},[99,9943,885],{"class":158},[99,9945,488],{"class":109},[99,9947,9948],{"class":214},"\"男\"",[99,9950,4916],{"class":109},[99,9952,9953,9955,9958,9960,9962,9964,9966],{"class":101,"line":22},[99,9954,4903],{"class":109},[99,9956,9957],{"class":214},"\"关羽\"",[99,9959,488],{"class":109},[99,9961,860],{"class":158},[99,9963,488],{"class":109},[99,9965,9948],{"class":214},[99,9967,4916],{"class":109},[99,9969,9970,9972,9975,9977,9979,9981,9983],{"class":101,"line":1165},[99,9971,4903],{"class":109},[99,9973,9974],{"class":214},"\"张飞\"",[99,9976,488],{"class":109},[99,9978,810],{"class":158},[99,9980,488],{"class":109},[99,9982,9948],{"class":214},[99,9984,4916],{"class":109},[99,9986,9987,9989,9992,9994,9996,9998,10000],{"class":101,"line":1180},[99,9988,4903],{"class":109},[99,9990,9991],{"class":214},"\"赵云\"",[99,9993,488],{"class":109},[99,9995,835],{"class":158},[99,9997,488],{"class":109},[99,9999,9948],{"class":214},[99,10001,4916],{"class":109},[99,10003,10004,10006,10009,10011,10013,10015,10018],{"class":101,"line":1186},[99,10005,4903],{"class":109},[99,10007,10008],{"class":214},"\"貂蝉\"",[99,10010,488],{"class":109},[99,10012,785],{"class":158},[99,10014,488],{"class":109},[99,10016,10017],{"class":214},"\"女\"",[99,10019,4916],{"class":109},[14,10021,10022],{},"代码：",[90,10024,10026],{"className":92,"code":10025,"language":94,"meta":21,"style":21},"#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",[96,10027,10028,10034,10044,10050,10057,10061,10065,10071,10076,10080,10085,10108,10112,10137,10141,10174,10179,10208,10213,10228,10254,10274,10279,10284,10288,10292,10297,10319,10323,10347,10351,10413,10417,10421,10429,10433,10438,10449,10453,10469,10485,10501,10517,10533,10537,10557,10579,10584,10597,10604,10609,10615,10620,10633,10639],{"__ignoreMap":21},[99,10029,10030,10032],{"class":101,"line":102},[99,10031,1935],{"class":105},[99,10033,1938],{"class":214},[99,10035,10036,10038,10040,10042],{"class":101,"line":22},[99,10037,1943],{"class":105},[99,10039,1946],{"class":105},[99,10041,1950],{"class":1949},[99,10043,1276],{"class":109},[99,10045,10046,10048],{"class":101,"line":1165},[99,10047,1935],{"class":105},[99,10049,7736],{"class":214},[99,10051,10052,10054],{"class":101,"line":1180},[99,10053,7746],{"class":105},[99,10055,10056],{"class":1949}," Sanguo\n",[99,10058,10059],{"class":101,"line":1186},[99,10060,1532],{"class":109},[99,10062,10063],{"class":101,"line":1200},[99,10064,7772],{"class":109},[99,10066,10067,10069],{"class":101,"line":1206},[99,10068,1971],{"class":105},[99,10070,7784],{"class":109},[99,10072,10073],{"class":101,"line":1297},[99,10074,10075],{"class":109},"    string gender;\n",[99,10077,10078],{"class":101,"line":1303},[99,10079,3981],{"class":109},[99,10081,10082],{"class":101,"line":1315},[99,10083,10084],{"class":168},"\u002F\u002F定义排序函数\n",[99,10086,10087,10089,10091,10093,10096,10098,10100,10102,10104,10106],{"class":101,"line":1598},[99,10088,5351],{"class":105},[99,10090,7303],{"class":1949},[99,10092,110],{"class":109},[99,10094,10095],{"class":1949},"Sanguo",[99,10097,6505],{"class":105},[99,10099,805],{"class":5203},[99,10101,488],{"class":109},[99,10103,113],{"class":105},[99,10105,7318],{"class":5203},[99,10107,116],{"class":109},[99,10109,10110],{"class":101,"line":1603},[99,10111,1532],{"class":109},[99,10113,10114,10116,10118,10120,10122,10124,10126,10128,10130,10133,10135],{"class":101,"line":1609},[99,10115,3187],{"class":105},[99,10117,110],{"class":109},[99,10119,113],{"class":105},[99,10121,3018],{"class":109},[99,10123,155],{"class":105},[99,10125,301],{"class":158},[99,10127,3025],{"class":109},[99,10129,1020],{"class":105},[99,10131,10132],{"class":109},"len;i",[99,10134,2278],{"class":105},[99,10136,116],{"class":109},[99,10138,10139],{"class":101,"line":1614},[99,10140,2016],{"class":109},[99,10142,10143,10146,10148,10150,10152,10154,10156,10158,10160,10162,10164,10166,10168,10170,10172],{"class":101,"line":1628},[99,10144,10145],{"class":105},"     for",[99,10147,1644],{"class":109},[99,10149,113],{"class":105},[99,10151,3396],{"class":109},[99,10153,155],{"class":105},[99,10155,301],{"class":158},[99,10157,3403],{"class":109},[99,10159,1020],{"class":105},[99,10161,7345],{"class":109},[99,10163,642],{"class":105},[99,10165,327],{"class":158},[99,10167,642],{"class":105},[99,10169,3536],{"class":109},[99,10171,2278],{"class":105},[99,10173,116],{"class":109},[99,10175,10176],{"class":101,"line":1633},[99,10177,10178],{"class":109},"     {\n",[99,10180,10181,10184,10187,10189,10192,10194,10197,10199,10201,10203,10205],{"class":101,"line":1639},[99,10182,10183],{"class":105},"         if",[99,10185,10186],{"class":109}," ((s",[99,10188,591],{"class":105},[99,10190,10191],{"class":109},"j)->age ",[99,10193,1070],{"class":105},[99,10195,10196],{"class":109}," (s",[99,10198,591],{"class":105},[99,10200,577],{"class":109},[99,10202,591],{"class":105},[99,10204,327],{"class":158},[99,10206,10207],{"class":109},")->age)\n",[99,10209,10210],{"class":101,"line":1660},[99,10211,10212],{"class":109},"         {\n",[99,10214,10215,10218,10220,10223,10225],{"class":101,"line":1665},[99,10216,10217],{"class":109},"             Sanguo temp",[99,10219,7140],{"class":105},[99,10221,10222],{"class":109},"(s",[99,10224,591],{"class":105},[99,10226,10227],{"class":109},"j);\n",[99,10229,10230,10233,10235,10237,10240,10242,10244,10246,10248,10250,10252],{"class":101,"line":1679},[99,10231,10232],{"class":105},"             *",[99,10234,10222],{"class":109},[99,10236,591],{"class":105},[99,10238,10239],{"class":109},"j)",[99,10241,7140],{"class":105},[99,10243,10222],{"class":109},[99,10245,591],{"class":105},[99,10247,577],{"class":109},[99,10249,591],{"class":105},[99,10251,327],{"class":158},[99,10253,2705],{"class":109},[99,10255,10256,10258,10260,10262,10264,10266,10268,10270,10272],{"class":101,"line":1684},[99,10257,10232],{"class":105},[99,10259,10222],{"class":109},[99,10261,591],{"class":105},[99,10263,577],{"class":109},[99,10265,591],{"class":105},[99,10267,327],{"class":158},[99,10269,539],{"class":109},[99,10271,155],{"class":105},[99,10273,4266],{"class":109},[99,10275,10276],{"class":101,"line":1713},[99,10277,10278],{"class":109},"         }\n",[99,10280,10281],{"class":101,"line":1718},[99,10282,10283],{"class":109},"     }\n",[99,10285,10286],{"class":101,"line":1735},[99,10287,2173],{"class":109},[99,10289,10290],{"class":101,"line":1740},[99,10291,1551],{"class":109},[99,10293,10294],{"class":101,"line":1745},[99,10295,10296],{"class":168},"\u002F\u002F定义打印函数\n",[99,10298,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317],{"class":101,"line":1750},[99,10300,5351],{"class":105},[99,10302,9602],{"class":1949},[99,10304,110],{"class":109},[99,10306,10095],{"class":1949},[99,10308,6505],{"class":105},[99,10310,805],{"class":5203},[99,10312,488],{"class":109},[99,10314,113],{"class":105},[99,10316,7318],{"class":5203},[99,10318,116],{"class":109},[99,10320,10321],{"class":101,"line":1764},[99,10322,1532],{"class":109},[99,10324,10325,10327,10329,10331,10333,10335,10337,10339,10341,10343,10345],{"class":101,"line":1769},[99,10326,3187],{"class":105},[99,10328,1644],{"class":109},[99,10330,113],{"class":105},[99,10332,3018],{"class":109},[99,10334,155],{"class":105},[99,10336,301],{"class":158},[99,10338,3025],{"class":109},[99,10340,1020],{"class":105},[99,10342,10132],{"class":109},[99,10344,2278],{"class":105},[99,10346,116],{"class":109},[99,10348,10349],{"class":101,"line":2563},[99,10350,2016],{"class":109},[99,10352,10353,10355,10357,10359,10361,10364,10366,10368,10370,10373,10375,10377,10379,10382,10384,10386,10388,10391,10393,10395,10397,10400,10402,10404,10406,10409,10411],{"class":101,"line":2577},[99,10354,3437],{"class":109},[99,10356,1154],{"class":105},[99,10358,361],{"class":214},[99,10360,1216],{"class":158},[99,10362,10363],{"class":214},"姓名：\"",[99,10365,1154],{"class":105},[99,10367,10222],{"class":109},[99,10369,591],{"class":105},[99,10371,10372],{"class":109},"i)->name",[99,10374,1154],{"class":105},[99,10376,361],{"class":214},[99,10378,1216],{"class":158},[99,10380,10381],{"class":214},"年龄：\"",[99,10383,1154],{"class":105},[99,10385,10222],{"class":109},[99,10387,591],{"class":105},[99,10389,10390],{"class":109},"i)->age",[99,10392,1154],{"class":105},[99,10394,361],{"class":214},[99,10396,1216],{"class":158},[99,10398,10399],{"class":214},"性别：\"",[99,10401,1154],{"class":105},[99,10403,10222],{"class":109},[99,10405,591],{"class":105},[99,10407,10408],{"class":109},"i)->gender",[99,10410,1154],{"class":105},[99,10412,1177],{"class":109},[99,10414,10415],{"class":101,"line":2585},[99,10416,2173],{"class":109},[99,10418,10419],{"class":101,"line":2590},[99,10420,1551],{"class":109},[99,10422,10423,10425,10427],{"class":101,"line":2596},[99,10424,113],{"class":105},[99,10426,1959],{"class":1949},[99,10428,1962],{"class":109},[99,10430,10431],{"class":101,"line":2602},[99,10432,1532],{"class":109},[99,10434,10435],{"class":101,"line":2607},[99,10436,10437],{"class":168},"    \u002F\u002F定义结构体变量\n",[99,10439,10440,10443,10445,10447],{"class":101,"line":7935},[99,10441,10442],{"class":109},"    Sanguo s1[",[99,10444,429],{"class":158},[99,10446,1050],{"class":109},[99,10448,4894],{"class":105},[99,10450,10451],{"class":101,"line":7959},[99,10452,2016],{"class":109},[99,10454,10455,10457,10459,10461,10463,10465,10467],{"class":101,"line":7964},[99,10456,4903],{"class":109},[99,10458,9939],{"class":214},[99,10460,488],{"class":109},[99,10462,885],{"class":158},[99,10464,488],{"class":109},[99,10466,9948],{"class":214},[99,10468,4916],{"class":109},[99,10470,10471,10473,10475,10477,10479,10481,10483],{"class":101,"line":7970},[99,10472,4903],{"class":109},[99,10474,9957],{"class":214},[99,10476,488],{"class":109},[99,10478,860],{"class":158},[99,10480,488],{"class":109},[99,10482,9948],{"class":214},[99,10484,4916],{"class":109},[99,10486,10487,10489,10491,10493,10495,10497,10499],{"class":101,"line":7997},[99,10488,4903],{"class":109},[99,10490,9974],{"class":214},[99,10492,488],{"class":109},[99,10494,810],{"class":158},[99,10496,488],{"class":109},[99,10498,9948],{"class":214},[99,10500,4916],{"class":109},[99,10502,10503,10505,10507,10509,10511,10513,10515],{"class":101,"line":8002},[99,10504,4903],{"class":109},[99,10506,9991],{"class":214},[99,10508,488],{"class":109},[99,10510,835],{"class":158},[99,10512,488],{"class":109},[99,10514,9948],{"class":214},[99,10516,4916],{"class":109},[99,10518,10519,10521,10523,10525,10527,10529,10531],{"class":101,"line":8008},[99,10520,4903],{"class":109},[99,10522,10008],{"class":214},[99,10524,488],{"class":109},[99,10526,785],{"class":158},[99,10528,488],{"class":109},[99,10530,10017],{"class":214},[99,10532,4916],{"class":109},[99,10534,10535],{"class":101,"line":8020},[99,10536,4937],{"class":109},[99,10538,10539,10541,10543,10545,10548,10550,10553,10555],{"class":101,"line":8032},[99,10540,1971],{"class":105},[99,10542,7318],{"class":109},[99,10544,4189],{"class":105},[99,10546,10547],{"class":109},"(s1)",[99,10549,4195],{"class":105},[99,10551,10552],{"class":109},"(s1[",[99,10554,301],{"class":158},[99,10556,3842],{"class":109},[99,10558,10559,10562,10564,10567,10569,10572,10575,10577],{"class":101,"line":8044},[99,10560,10561],{"class":109},"    Sanguo ",[99,10563,565],{"class":105},[99,10565,10566],{"class":109},"s ",[99,10568,155],{"class":105},[99,10570,10571],{"class":105}," &",[99,10573,10574],{"class":109},"s1[",[99,10576,301],{"class":158},[99,10578,4676],{"class":109},[99,10580,10581],{"class":101,"line":9703},[99,10582,10583],{"class":168},"    \u002F\u002F排序前：\n",[99,10585,10586,10588,10590,10593,10595],{"class":101,"line":9728},[99,10587,6516],{"class":109},[99,10589,1154],{"class":105},[99,10591,10592],{"class":214}," \"排序前：\"",[99,10594,1430],{"class":105},[99,10596,8827],{"class":109},[99,10598,10599,10601],{"class":101,"line":9751},[99,10600,9902],{"class":1949},[99,10602,10603],{"class":109},"(s,len);\n",[99,10605,10606],{"class":101,"line":9775},[99,10607,10608],{"class":168},"    \u002F\u002F调用排序函数\n",[99,10610,10611,10613],{"class":101,"line":9780},[99,10612,7585],{"class":1949},[99,10614,10603],{"class":109},[99,10616,10617],{"class":101,"line":9785},[99,10618,10619],{"class":168},"    \u002F\u002F排序后\n",[99,10621,10622,10624,10626,10629,10631],{"class":101,"line":9790},[99,10623,6516],{"class":109},[99,10625,1154],{"class":105},[99,10627,10628],{"class":214}," \"排序后：\"",[99,10630,1430],{"class":105},[99,10632,8827],{"class":109},[99,10634,10635,10637],{"class":101,"line":9799},[99,10636,9902],{"class":1949},[99,10638,10603],{"class":109},[99,10640,10641],{"class":101,"line":9804},[99,10642,1551],{"class":109},[14,10644,10645,10646,10648],{},"注意：使用指针时直接用传首地址**&s",[99,10647,301],{},"**",[5113,10650,10651],{},"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":21,"searchDepth":22,"depth":22,"links":10653},[10654,10655,10656,10657,10658,10659,10660],{"id":7690,"depth":22,"text":7691},{"id":8052,"depth":22,"text":8053},{"id":8321,"depth":22,"text":8322},{"id":8486,"depth":22,"text":8487},{"id":8702,"depth":22,"text":8703},{"id":9023,"depth":22,"text":9024},{"id":9251,"depth":22,"text":9252},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7679,"description":7687},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10667,"title":10668,"body":10669,"description":21,"extension":24,"meta":12012,"navigation":26,"path":12013,"seo":12014,"stem":12015,"__hash__":12016},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10670,"toc":12006},[10671,10674,10678,10684,10698,10703,10706,10710,10717,10723,10726,10733,10739,10744,10747,10750,10753,11317,11320,11334,11338,11343,11359,11499,11502,11508,11511,11516,11524,11632,11635,11640,11643,11648,11651,11657,11660,12003],[10,10672,10668],{"id":10673},"_5程序内存模型",[41,10675,10677],{"id":10676},"_51内存分区模型","5.1内存分区模型",[14,10679,10680,10681],{},"C++程序在执行时，将内存大方向划分为",[259,10682,10683],{},"4个区域",[1117,10685,10686,10689,10692,10695],{},[56,10687,10688],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[56,10690,10691],{},"全局区：存放全局变量和静态变量以及常量",[56,10693,10694],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[56,10696,10697],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10699,10700],{},[259,10701,10702],{},"内存四区意义：",[14,10704,10705],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[70,10707,10709],{"id":10708},"_511程序运行前","5.1.1程序运行前",[14,10711,10712,10713,10716],{},"​\t在程序编译后，生成了exe可执行程序，",[259,10714,10715],{},"未执行该程序前","分为两个区域",[14,10718,10719,10720],{},"​\t",[259,10721,10722],{},"代码区：",[14,10724,10725],{},"​\t\t存放 CPU 执行的机器指令",[14,10727,10728,10729,10732],{},"​\t\t代码区是",[259,10730,10731],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10734,10728,10735,10738],{},[259,10736,10737],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10740,10719,10741],{},[259,10742,10743],{},"全局区：",[14,10745,10746],{},"​\t\t全局变量和静态变量存放在此.",[14,10748,10749],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10751,10752],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[90,10754,10756],{"className":92,"code":10755,"language":94,"meta":21,"style":21},"\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",[96,10757,10758,10763,10776,10789,10793,10798,10813,10828,10832,10841,10845,10850,10863,10876,10880,10885,10911,10937,10941,10968,10994,10998,11003,11019,11034,11038,11064,11090,11094,11119,11144,11148,11174,11200,11204,11220,11235,11261,11287,11291,11301,11305,11313],{"__ignoreMap":21},[99,10759,10760],{"class":101,"line":102},[99,10761,10762],{"class":168},"\u002F\u002F全局变量\n",[99,10764,10765,10767,10770,10772,10774],{"class":101,"line":22},[99,10766,113],{"class":105},[99,10768,10769],{"class":109}," g_a ",[99,10771,155],{"class":105},[99,10773,2024],{"class":158},[99,10775,1276],{"class":109},[99,10777,10778,10780,10783,10785,10787],{"class":101,"line":1165},[99,10779,113],{"class":105},[99,10781,10782],{"class":109}," g_b ",[99,10784,155],{"class":105},[99,10786,2024],{"class":158},[99,10788,1276],{"class":109},[99,10790,10791],{"class":101,"line":1180},[99,10792,2386],{"emptyLinePlaceholder":26},[99,10794,10795],{"class":101,"line":1186},[99,10796,10797],{"class":168},"\u002F\u002F全局常量\n",[99,10799,10800,10802,10804,10807,10809,10811],{"class":101,"line":1200},[99,10801,6779],{"class":105},[99,10803,2368],{"class":105},[99,10805,10806],{"class":109}," c_g_a ",[99,10808,155],{"class":105},[99,10810,2024],{"class":158},[99,10812,1276],{"class":109},[99,10814,10815,10817,10819,10822,10824,10826],{"class":101,"line":1206},[99,10816,6779],{"class":105},[99,10818,2368],{"class":105},[99,10820,10821],{"class":109}," c_g_b ",[99,10823,155],{"class":105},[99,10825,2024],{"class":158},[99,10827,1276],{"class":109},[99,10829,10830],{"class":101,"line":1297},[99,10831,2386],{"emptyLinePlaceholder":26},[99,10833,10834,10836,10838],{"class":101,"line":1303},[99,10835,113],{"class":105},[99,10837,1959],{"class":1949},[99,10839,10840],{"class":109},"() {\n",[99,10842,10843],{"class":101,"line":1315},[99,10844,2386],{"emptyLinePlaceholder":26},[99,10846,10847],{"class":101,"line":1598},[99,10848,10849],{"class":168},"    \u002F\u002F局部变量\n",[99,10851,10852,10854,10857,10859,10861],{"class":101,"line":1603},[99,10853,1971],{"class":105},[99,10855,10856],{"class":109}," a ",[99,10858,155],{"class":105},[99,10860,2024],{"class":158},[99,10862,1276],{"class":109},[99,10864,10865,10867,10870,10872,10874],{"class":101,"line":1609},[99,10866,1971],{"class":105},[99,10868,10869],{"class":109}," b ",[99,10871,155],{"class":105},[99,10873,2024],{"class":158},[99,10875,1276],{"class":109},[99,10877,10878],{"class":101,"line":1614},[99,10879,2386],{"emptyLinePlaceholder":26},[99,10881,10882],{"class":101,"line":1628},[99,10883,10884],{"class":168},"    \u002F\u002F打印地址\n",[99,10886,10887,10889,10891,10894,10896,10898,10900,10902,10904,10907,10909],{"class":101,"line":1633},[99,10888,6516],{"class":109},[99,10890,1154],{"class":105},[99,10892,10893],{"class":214}," \"局部变量a地址为： \"",[99,10895,1430],{"class":105},[99,10897,1644],{"class":109},[99,10899,113],{"class":105},[99,10901,539],{"class":109},[99,10903,463],{"class":105},[99,10905,10906],{"class":109},"a ",[99,10908,1154],{"class":105},[99,10910,8827],{"class":109},[99,10912,10913,10915,10917,10920,10922,10924,10926,10928,10930,10933,10935],{"class":101,"line":1639},[99,10914,6516],{"class":109},[99,10916,1154],{"class":105},[99,10918,10919],{"class":214}," \"局部变量b地址为： \"",[99,10921,1430],{"class":105},[99,10923,1644],{"class":109},[99,10925,113],{"class":105},[99,10927,539],{"class":109},[99,10929,463],{"class":105},[99,10931,10932],{"class":109},"b ",[99,10934,1154],{"class":105},[99,10936,8827],{"class":109},[99,10938,10939],{"class":101,"line":1660},[99,10940,2386],{"emptyLinePlaceholder":26},[99,10942,10943,10945,10947,10950,10952,10955,10957,10959,10961,10964,10966],{"class":101,"line":1665},[99,10944,6516],{"class":109},[99,10946,1154],{"class":105},[99,10948,10949],{"class":214}," \"全局变量g_a地址为： \"",[99,10951,1430],{"class":105},[99,10953,10954],{"class":109},"  (",[99,10956,113],{"class":105},[99,10958,539],{"class":109},[99,10960,463],{"class":105},[99,10962,10963],{"class":109},"g_a ",[99,10965,1154],{"class":105},[99,10967,8827],{"class":109},[99,10969,10970,10972,10974,10977,10979,10981,10983,10985,10987,10990,10992],{"class":101,"line":1679},[99,10971,6516],{"class":109},[99,10973,1154],{"class":105},[99,10975,10976],{"class":214}," \"全局变量g_b地址为： \"",[99,10978,1430],{"class":105},[99,10980,10954],{"class":109},[99,10982,113],{"class":105},[99,10984,539],{"class":109},[99,10986,463],{"class":105},[99,10988,10989],{"class":109},"g_b ",[99,10991,1154],{"class":105},[99,10993,8827],{"class":109},[99,10995,10996],{"class":101,"line":1684},[99,10997,2386],{"emptyLinePlaceholder":26},[99,10999,11000],{"class":101,"line":1713},[99,11001,11002],{"class":168},"    \u002F\u002F静态变量\n",[99,11004,11005,11008,11010,11013,11015,11017],{"class":101,"line":1718},[99,11006,11007],{"class":105},"    static",[99,11009,2368],{"class":105},[99,11011,11012],{"class":109}," s_a ",[99,11014,155],{"class":105},[99,11016,2024],{"class":158},[99,11018,1276],{"class":109},[99,11020,11021,11023,11025,11028,11030,11032],{"class":101,"line":1735},[99,11022,11007],{"class":105},[99,11024,2368],{"class":105},[99,11026,11027],{"class":109}," s_b ",[99,11029,155],{"class":105},[99,11031,2024],{"class":158},[99,11033,1276],{"class":109},[99,11035,11036],{"class":101,"line":1740},[99,11037,2386],{"emptyLinePlaceholder":26},[99,11039,11040,11042,11044,11047,11049,11051,11053,11055,11057,11060,11062],{"class":101,"line":1745},[99,11041,6516],{"class":109},[99,11043,1154],{"class":105},[99,11045,11046],{"class":214}," \"静态变量s_a地址为： \"",[99,11048,1430],{"class":105},[99,11050,1644],{"class":109},[99,11052,113],{"class":105},[99,11054,539],{"class":109},[99,11056,463],{"class":105},[99,11058,11059],{"class":109},"s_a ",[99,11061,1154],{"class":105},[99,11063,8827],{"class":109},[99,11065,11066,11068,11070,11073,11075,11077,11079,11081,11083,11086,11088],{"class":101,"line":1750},[99,11067,6516],{"class":109},[99,11069,1154],{"class":105},[99,11071,11072],{"class":214}," \"静态变量s_b地址为： \"",[99,11074,1430],{"class":105},[99,11076,1644],{"class":109},[99,11078,113],{"class":105},[99,11080,539],{"class":109},[99,11082,463],{"class":105},[99,11084,11085],{"class":109},"s_b ",[99,11087,1154],{"class":105},[99,11089,8827],{"class":109},[99,11091,11092],{"class":101,"line":1764},[99,11093,2386],{"emptyLinePlaceholder":26},[99,11095,11096,11098,11100,11103,11105,11107,11109,11111,11113,11115,11117],{"class":101,"line":1769},[99,11097,6516],{"class":109},[99,11099,1154],{"class":105},[99,11101,11102],{"class":214}," \"字符串常量地址为： \"",[99,11104,1430],{"class":105},[99,11106,1644],{"class":109},[99,11108,113],{"class":105},[99,11110,539],{"class":109},[99,11112,463],{"class":105},[99,11114,1172],{"class":214},[99,11116,1430],{"class":105},[99,11118,8827],{"class":109},[99,11120,11121,11123,11125,11127,11129,11131,11133,11135,11137,11140,11142],{"class":101,"line":2563},[99,11122,6516],{"class":109},[99,11124,1154],{"class":105},[99,11126,11102],{"class":214},[99,11128,1430],{"class":105},[99,11130,1644],{"class":109},[99,11132,113],{"class":105},[99,11134,539],{"class":109},[99,11136,463],{"class":105},[99,11138,11139],{"class":214},"\"hello world1\"",[99,11141,1430],{"class":105},[99,11143,8827],{"class":109},[99,11145,11146],{"class":101,"line":2577},[99,11147,2386],{"emptyLinePlaceholder":26},[99,11149,11150,11152,11154,11157,11159,11161,11163,11165,11167,11170,11172],{"class":101,"line":2585},[99,11151,6516],{"class":109},[99,11153,1154],{"class":105},[99,11155,11156],{"class":214}," \"全局常量c_g_a地址为： \"",[99,11158,1430],{"class":105},[99,11160,1644],{"class":109},[99,11162,113],{"class":105},[99,11164,539],{"class":109},[99,11166,463],{"class":105},[99,11168,11169],{"class":109},"c_g_a ",[99,11171,1154],{"class":105},[99,11173,8827],{"class":109},[99,11175,11176,11178,11180,11183,11185,11187,11189,11191,11193,11196,11198],{"class":101,"line":2590},[99,11177,6516],{"class":109},[99,11179,1154],{"class":105},[99,11181,11182],{"class":214}," \"全局常量c_g_b地址为： \"",[99,11184,1430],{"class":105},[99,11186,1644],{"class":109},[99,11188,113],{"class":105},[99,11190,539],{"class":109},[99,11192,463],{"class":105},[99,11194,11195],{"class":109},"c_g_b ",[99,11197,1154],{"class":105},[99,11199,8827],{"class":109},[99,11201,11202],{"class":101,"line":2596},[99,11203,2386],{"emptyLinePlaceholder":26},[99,11205,11206,11209,11211,11214,11216,11218],{"class":101,"line":2602},[99,11207,11208],{"class":105},"    const",[99,11210,2368],{"class":105},[99,11212,11213],{"class":109}," c_l_a ",[99,11215,155],{"class":105},[99,11217,2024],{"class":158},[99,11219,1276],{"class":109},[99,11221,11222,11224,11226,11229,11231,11233],{"class":101,"line":2607},[99,11223,11208],{"class":105},[99,11225,2368],{"class":105},[99,11227,11228],{"class":109}," c_l_b ",[99,11230,155],{"class":105},[99,11232,2024],{"class":158},[99,11234,1276],{"class":109},[99,11236,11237,11239,11241,11244,11246,11248,11250,11252,11254,11257,11259],{"class":101,"line":7935},[99,11238,6516],{"class":109},[99,11240,1154],{"class":105},[99,11242,11243],{"class":214}," \"局部常量c_l_a地址为： \"",[99,11245,1430],{"class":105},[99,11247,1644],{"class":109},[99,11249,113],{"class":105},[99,11251,539],{"class":109},[99,11253,463],{"class":105},[99,11255,11256],{"class":109},"c_l_a ",[99,11258,1154],{"class":105},[99,11260,8827],{"class":109},[99,11262,11263,11265,11267,11270,11272,11274,11276,11278,11280,11283,11285],{"class":101,"line":7959},[99,11264,6516],{"class":109},[99,11266,1154],{"class":105},[99,11268,11269],{"class":214}," \"局部常量c_l_b地址为： \"",[99,11271,1430],{"class":105},[99,11273,1644],{"class":109},[99,11275,113],{"class":105},[99,11277,539],{"class":109},[99,11279,463],{"class":105},[99,11281,11282],{"class":109},"c_l_b ",[99,11284,1154],{"class":105},[99,11286,8827],{"class":109},[99,11288,11289],{"class":101,"line":7964},[99,11290,2386],{"emptyLinePlaceholder":26},[99,11292,11293,11295,11297,11299],{"class":101,"line":7970},[99,11294,2289],{"class":1949},[99,11296,110],{"class":109},[99,11298,2294],{"class":214},[99,11300,2705],{"class":109},[99,11302,11303],{"class":101,"line":7997},[99,11304,2386],{"emptyLinePlaceholder":26},[99,11306,11307,11309,11311],{"class":101,"line":8002},[99,11308,4076],{"class":105},[99,11310,4079],{"class":158},[99,11312,1276],{"class":109},[99,11314,11315],{"class":101,"line":8008},[99,11316,1551],{"class":109},[14,11318,11319],{},"总结：",[1117,11321,11322,11325,11328,11331],{},[56,11323,11324],{},"c++中程序运行前分为全局区和代码区",[56,11326,11327],{},"代码区特点是共享和只读",[56,11329,11330],{},"全局区中存放全局变量、静态变量、常量",[56,11332,11333],{},"常量区中存放const修饰的全局常量和字符串常量",[70,11335,11337],{"id":11336},"_512程序运行后","5.1.2程序运行后",[53,11339,11340],{},[56,11341,11342],{},"栈区：",[1117,11344,11345,11352],{},[56,11346,11347,11348,11351],{},"由编译器自动分配释放, 存放",[259,11349,11350],{},"函数的参数值,局部变量","等",[56,11353,11354,11355,11358],{},"注意事项：",[259,11356,11357],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[90,11360,11362],{"className":92,"code":11361,"language":94,"meta":21,"style":21},"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",[96,11363,11364,11375,11379,11394,11406,11410,11414,11422,11427,11442,11460,11477,11487,11495],{"__ignoreMap":21},[99,11365,11366,11368,11370,11373],{"class":101,"line":102},[99,11367,113],{"class":105},[99,11369,6505],{"class":105},[99,11371,11372],{"class":1949}," func",[99,11374,1962],{"class":109},[99,11376,11377],{"class":101,"line":22},[99,11378,1532],{"class":109},[99,11380,11381,11383,11385,11387,11389,11391],{"class":101,"line":1165},[99,11382,1971],{"class":105},[99,11384,10856],{"class":109},[99,11386,155],{"class":105},[99,11388,2024],{"class":158},[99,11390,165],{"class":109},[99,11392,11393],{"class":168}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[99,11395,11396,11398,11400,11403],{"class":101,"line":1180},[99,11397,4076],{"class":105},[99,11399,10571],{"class":105},[99,11401,11402],{"class":109},"a;",[99,11404,11405],{"class":168}," \u002F\u002F放回局部变量的地址\n",[99,11407,11408],{"class":101,"line":1186},[99,11409,1551],{"class":109},[99,11411,11412],{"class":101,"line":1200},[99,11413,2386],{"emptyLinePlaceholder":26},[99,11415,11416,11418,11420],{"class":101,"line":1206},[99,11417,113],{"class":105},[99,11419,1959],{"class":1949},[99,11421,10840],{"class":109},[99,11423,11424],{"class":101,"line":1297},[99,11425,11426],{"class":168},"    \u002F\u002F接受func的返回值\n",[99,11428,11429,11431,11433,11436,11438,11440],{"class":101,"line":1303},[99,11430,1971],{"class":105},[99,11432,6505],{"class":105},[99,11434,11435],{"class":109},"p ",[99,11437,155],{"class":105},[99,11439,11372],{"class":1949},[99,11441,5623],{"class":109},[99,11443,11444,11446,11448,11450,11452,11454,11457],{"class":101,"line":1315},[99,11445,6516],{"class":109},[99,11447,1154],{"class":105},[99,11449,6505],{"class":105},[99,11451,11435],{"class":109},[99,11453,1154],{"class":105},[99,11455,11456],{"class":109}," endl;",[99,11458,11459],{"class":168}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[99,11461,11462,11464,11466,11468,11470,11472,11474],{"class":101,"line":1598},[99,11463,6516],{"class":109},[99,11465,1154],{"class":105},[99,11467,6505],{"class":105},[99,11469,11435],{"class":109},[99,11471,1154],{"class":105},[99,11473,11456],{"class":109},[99,11475,11476],{"class":168}," \u002F\u002F第二次这个数据不再保留\n",[99,11478,11479,11481,11483,11485],{"class":101,"line":1603},[99,11480,2289],{"class":1949},[99,11482,110],{"class":109},[99,11484,2294],{"class":214},[99,11486,2705],{"class":109},[99,11488,11489,11491,11493],{"class":101,"line":1609},[99,11490,4076],{"class":105},[99,11492,4079],{"class":158},[99,11494,1276],{"class":109},[99,11496,11497],{"class":101,"line":1614},[99,11498,1551],{"class":109},[14,11500,11501],{},"输出结果：",[14,11503,11504],{},[1448,11505],{"alt":11506,"src":11507},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11509,11510],{},"总结：不要返回局部变量的地址",[53,11512,11513],{"start":22},[56,11514,11515],{},"堆区",[1117,11517,11518,11521],{},[56,11519,11520],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[56,11522,11523],{},"在c++中主要利用new在堆区开辟内存",[90,11525,11527],{"className":92,"code":11526,"language":94,"meta":21,"style":21},"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",[96,11528,11529,11544,11548,11553,11574,11581,11585,11593,11597,11602,11616,11628],{"__ignoreMap":21},[99,11530,11531,11533,11536,11539,11541],{"class":101,"line":102},[99,11532,113],{"class":105},[99,11534,11535],{"class":105},"  *",[99,11537,11538],{"class":1949},"func",[99,11540,2413],{"class":109},[99,11542,11543],{"class":168},"  \u002F\u002F函数返回指针\n",[99,11545,11546],{"class":101,"line":22},[99,11547,1532],{"class":109},[99,11549,11550],{"class":101,"line":1165},[99,11551,11552],{"class":168},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[99,11554,11555,11557,11559,11561,11563,11566,11568,11570,11572],{"class":101,"line":1180},[99,11556,4133],{"class":105},[99,11558,6505],{"class":105},[99,11560,14],{"class":109},[99,11562,155],{"class":105},[99,11564,11565],{"class":105}," new",[99,11567,2368],{"class":105},[99,11569,110],{"class":109},[99,11571,556],{"class":158},[99,11573,2705],{"class":109},[99,11575,11576,11578],{"class":101,"line":1186},[99,11577,4367],{"class":105},[99,11579,11580],{"class":109}," p;\n",[99,11582,11583],{"class":101,"line":1200},[99,11584,1551],{"class":109},[99,11586,11587,11589,11591],{"class":101,"line":1206},[99,11588,113],{"class":105},[99,11590,1959],{"class":1949},[99,11592,1962],{"class":109},[99,11594,11595],{"class":101,"line":1297},[99,11596,1532],{"class":109},[99,11598,11599],{"class":101,"line":1303},[99,11600,11601],{"class":168},"    \u002F\u002F在堆区开辟数据\n",[99,11603,11604,11606,11608,11610,11612,11614],{"class":101,"line":1315},[99,11605,1971],{"class":105},[99,11607,6505],{"class":105},[99,11609,14],{"class":109},[99,11611,155],{"class":105},[99,11613,11538],{"class":1949},[99,11615,5623],{"class":109},[99,11617,11618,11620,11622,11624,11626],{"class":101,"line":1598},[99,11619,1537],{"class":109},[99,11621,6406],{"class":105},[99,11623,14],{"class":109},[99,11625,1154],{"class":105},[99,11627,1177],{"class":109},[99,11629,11630],{"class":101,"line":1603},[99,11631,1551],{"class":109},[14,11633,11634],{},"图片展示：",[14,11636,11637],{},[1448,11638],{"alt":11506,"src":11639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11641,11642],{},"堆区内存由程序员管生死！！！",[53,11644,11645],{"start":1165},[56,11646,11647],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11649,11650],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11652,11653,11654],{},"​语法：",[96,11655,11656],{}," new 数据类型",[14,11658,11659],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[90,11661,11663],{"className":92,"code":11662,"language":94,"meta":21,"style":21},"\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",[96,11664,11665,11670,11680,11684,11689,11694,11716,11720,11728,11732,11746,11758,11770,11782,11787,11792,11803,11807,11812,11820,11824,11829,11851,11877,11881,11899,11903,11929,11933,11945,11949,11954,11959,11967,11971,11975,11983,11987,11993,11999],{"__ignoreMap":21},[99,11666,11667],{"class":101,"line":102},[99,11668,11669],{"class":168},"\u002F\u002F1.new的基本语法\n",[99,11671,11672,11674,11676,11678],{"class":101,"line":22},[99,11673,113],{"class":105},[99,11675,6505],{"class":105},[99,11677,11538],{"class":1949},[99,11679,1962],{"class":109},[99,11681,11682],{"class":101,"line":1165},[99,11683,1532],{"class":109},[99,11685,11686],{"class":101,"line":1180},[99,11687,11688],{"class":168},"    \u002F\u002F在堆区创建整型数据\n",[99,11690,11691],{"class":101,"line":1186},[99,11692,11693],{"class":168},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[99,11695,11696,11698,11700,11702,11705,11707,11709,11711,11713],{"class":101,"line":1200},[99,11697,1971],{"class":105},[99,11699,6505],{"class":105},[99,11701,14],{"class":109},[99,11703,11704],{"class":105},"=new",[99,11706,2368],{"class":105},[99,11708,110],{"class":109},[99,11710,556],{"class":158},[99,11712,5953],{"class":109},[99,11714,11715],{"class":168},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[99,11717,11718],{"class":101,"line":1206},[99,11719,1551],{"class":109},[99,11721,11722,11724,11726],{"class":101,"line":1297},[99,11723,5351],{"class":105},[99,11725,5575],{"class":1949},[99,11727,1962],{"class":109},[99,11729,11730],{"class":101,"line":1303},[99,11731,1532],{"class":109},[99,11733,11734,11736,11738,11740,11742,11744],{"class":101,"line":1315},[99,11735,1971],{"class":105},[99,11737,6505],{"class":105},[99,11739,14],{"class":109},[99,11741,155],{"class":105},[99,11743,11538],{"class":1949},[99,11745,5623],{"class":109},[99,11747,11748,11750,11752,11754,11756],{"class":101,"line":1598},[99,11749,1537],{"class":109},[99,11751,6406],{"class":105},[99,11753,14],{"class":109},[99,11755,1154],{"class":105},[99,11757,1177],{"class":109},[99,11759,11760,11762,11764,11766,11768],{"class":101,"line":1603},[99,11761,1537],{"class":109},[99,11763,6406],{"class":105},[99,11765,14],{"class":109},[99,11767,1154],{"class":105},[99,11769,1177],{"class":109},[99,11771,11772,11774,11776,11778,11780],{"class":101,"line":1609},[99,11773,1537],{"class":109},[99,11775,6406],{"class":105},[99,11777,14],{"class":109},[99,11779,1154],{"class":105},[99,11781,1177],{"class":109},[99,11783,11784],{"class":101,"line":1614},[99,11785,11786],{"class":168},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[99,11788,11789],{"class":101,"line":1628},[99,11790,11791],{"class":168},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[99,11793,11794,11797,11800],{"class":101,"line":1633},[99,11795,11796],{"class":105},"    delete",[99,11798,11799],{"class":109}," p;",[99,11801,11802],{"class":168},"\u002F\u002F删除这块地址\n",[99,11804,11805],{"class":101,"line":1639},[99,11806,1551],{"class":109},[99,11808,11809],{"class":101,"line":1660},[99,11810,11811],{"class":168},"\u002F\u002F2.在堆区利用new开辟数组\n",[99,11813,11814,11816,11818],{"class":101,"line":1665},[99,11815,5351],{"class":105},[99,11817,5644],{"class":1949},[99,11819,1962],{"class":109},[99,11821,11822],{"class":101,"line":1679},[99,11823,1532],{"class":109},[99,11825,11826],{"class":101,"line":1684},[99,11827,11828],{"class":168},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[99,11830,11831,11833,11835,11837,11839,11841,11843,11845,11848],{"class":101,"line":1713},[99,11832,1971],{"class":105},[99,11834,6505],{"class":105},[99,11836,3866],{"class":109},[99,11838,11704],{"class":105},[99,11840,2368],{"class":105},[99,11842,1000],{"class":109},[99,11844,556],{"class":158},[99,11846,11847],{"class":109},"];",[99,11849,11850],{"class":168},"\u002F\u002F10代表数组有10个元素\n",[99,11852,11853,11855,11857,11859,11861,11863,11865,11867,11869,11871,11873,11875],{"class":101,"line":1718},[99,11854,3187],{"class":105},[99,11856,1644],{"class":109},[99,11858,113],{"class":105},[99,11860,3018],{"class":109},[99,11862,155],{"class":105},[99,11864,301],{"class":158},[99,11866,3025],{"class":109},[99,11868,1020],{"class":105},[99,11870,556],{"class":158},[99,11872,3025],{"class":109},[99,11874,2278],{"class":105},[99,11876,116],{"class":109},[99,11878,11879],{"class":101,"line":1735},[99,11880,2016],{"class":109},[99,11882,11883,11886,11888,11890,11892,11894,11896],{"class":101,"line":1740},[99,11884,11885],{"class":109},"        arr[i]",[99,11887,155],{"class":105},[99,11889,551],{"class":109},[99,11891,591],{"class":105},[99,11893,421],{"class":158},[99,11895,165],{"class":109},[99,11897,11898],{"class":168},"\u002F\u002F给10个元素赋值100～109\n",[99,11900,11901],{"class":101,"line":1745},[99,11902,2173],{"class":109},[99,11904,11905,11907,11909,11911,11913,11915,11917,11919,11921,11923,11925,11927],{"class":101,"line":1750},[99,11906,3187],{"class":105},[99,11908,1644],{"class":109},[99,11910,113],{"class":105},[99,11912,3018],{"class":109},[99,11914,155],{"class":105},[99,11916,301],{"class":158},[99,11918,3025],{"class":109},[99,11920,1020],{"class":105},[99,11922,556],{"class":158},[99,11924,3025],{"class":109},[99,11926,2278],{"class":105},[99,11928,116],{"class":109},[99,11930,11931],{"class":101,"line":1764},[99,11932,2016],{"class":109},[99,11934,11935,11937,11939,11941,11943],{"class":101,"line":1769},[99,11936,3437],{"class":109},[99,11938,1154],{"class":105},[99,11940,4340],{"class":109},[99,11942,1154],{"class":105},[99,11944,1177],{"class":109},[99,11946,11947],{"class":101,"line":2563},[99,11948,2173],{"class":109},[99,11950,11951],{"class":101,"line":2577},[99,11952,11953],{"class":168},"    \u002F\u002F释放堆区数组\n",[99,11955,11956],{"class":101,"line":2585},[99,11957,11958],{"class":168},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[99,11960,11961,11964],{"class":101,"line":2590},[99,11962,11963],{"class":105},"    delete[]",[99,11965,11966],{"class":109}," arr;\n",[99,11968,11969],{"class":101,"line":2596},[99,11970,1551],{"class":109},[99,11972,11973],{"class":101,"line":2602},[99,11974,2386],{"emptyLinePlaceholder":26},[99,11976,11977,11979,11981],{"class":101,"line":2607},[99,11978,113],{"class":105},[99,11980,1959],{"class":1949},[99,11982,1962],{"class":109},[99,11984,11985],{"class":101,"line":7935},[99,11986,1532],{"class":109},[99,11988,11989,11991],{"class":101,"line":7959},[99,11990,5620],{"class":1949},[99,11992,5623],{"class":109},[99,11994,11995,11997],{"class":101,"line":7964},[99,11996,5689],{"class":1949},[99,11998,5623],{"class":109},[99,12000,12001],{"class":101,"line":7970},[99,12002,1551],{"class":109},[5113,12004,12005],{},"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":21,"searchDepth":22,"depth":22,"links":12007},[12008],{"id":10676,"depth":22,"text":10677,"children":12009},[12010,12011],{"id":10708,"depth":1165,"text":10709},{"id":11336,"depth":1165,"text":11337},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10668,"description":21},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12018,"title":12019,"body":12020,"description":21,"extension":24,"meta":13501,"navigation":26,"path":13502,"seo":13503,"stem":13504,"__hash__":13505},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12021,"toc":13493},[12022,12025,12029,12032,12035,12204,12208,12213,12230,12235,12387,12391,12394,12397,12791,12795,12798,12803,12806,13118,13122,13128,13288,13290,13298,13302,13305,13312,13490],[10,12023,12019],{"id":12024},"_6引用",[41,12026,12028],{"id":12027},"_61引用基本用法","6.1引用基本用法",[14,12030,12031],{},"引用的本质：给变量起别名",[14,12033,12034],{},"语法：数据类型 &别名=原名",[90,12036,12038],{"className":92,"code":12037,"language":94,"meta":21,"style":21},"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",[96,12039,12040,12048,12052,12064,12076,12080,12099,12118,12122,12133,12137,12156,12174,12178,12188,12192,12200],{"__ignoreMap":21},[99,12041,12042,12044,12046],{"class":101,"line":102},[99,12043,113],{"class":105},[99,12045,1959],{"class":1949},[99,12047,10840],{"class":109},[99,12049,12050],{"class":101,"line":22},[99,12051,2386],{"emptyLinePlaceholder":26},[99,12053,12054,12056,12058,12060,12062],{"class":101,"line":1165},[99,12055,1971],{"class":105},[99,12057,10856],{"class":109},[99,12059,155],{"class":105},[99,12061,2024],{"class":158},[99,12063,1276],{"class":109},[99,12065,12066,12068,12070,12072,12074],{"class":101,"line":1180},[99,12067,1971],{"class":105},[99,12069,10571],{"class":105},[99,12071,10932],{"class":109},[99,12073,155],{"class":105},[99,12075,1418],{"class":109},[99,12077,12078],{"class":101,"line":1186},[99,12079,2386],{"emptyLinePlaceholder":26},[99,12081,12082,12084,12086,12089,12091,12093,12095,12097],{"class":101,"line":1200},[99,12083,6516],{"class":109},[99,12085,1154],{"class":105},[99,12087,12088],{"class":214}," \"a = \"",[99,12090,1430],{"class":105},[99,12092,10856],{"class":109},[99,12094,1154],{"class":105},[99,12096,11456],{"class":109},[99,12098,7255],{"class":168},[99,12100,12101,12103,12105,12108,12110,12112,12114,12116],{"class":101,"line":1206},[99,12102,6516],{"class":109},[99,12104,1154],{"class":105},[99,12106,12107],{"class":214}," \"b = \"",[99,12109,1430],{"class":105},[99,12111,10869],{"class":109},[99,12113,1154],{"class":105},[99,12115,11456],{"class":109},[99,12117,7255],{"class":168},[99,12119,12120],{"class":101,"line":1297},[99,12121,2386],{"emptyLinePlaceholder":26},[99,12123,12124,12127,12129,12131],{"class":101,"line":1303},[99,12125,12126],{"class":109},"    b ",[99,12128,155],{"class":105},[99,12130,5741],{"class":158},[99,12132,1276],{"class":109},[99,12134,12135],{"class":101,"line":1315},[99,12136,2386],{"emptyLinePlaceholder":26},[99,12138,12139,12141,12143,12145,12147,12149,12151,12153],{"class":101,"line":1598},[99,12140,6516],{"class":109},[99,12142,1154],{"class":105},[99,12144,12088],{"class":214},[99,12146,1430],{"class":105},[99,12148,10856],{"class":109},[99,12150,1154],{"class":105},[99,12152,11456],{"class":109},[99,12154,12155],{"class":168},"\u002F\u002F100\n",[99,12157,12158,12160,12162,12164,12166,12168,12170,12172],{"class":101,"line":1603},[99,12159,6516],{"class":109},[99,12161,1154],{"class":105},[99,12163,12107],{"class":214},[99,12165,1430],{"class":105},[99,12167,10869],{"class":109},[99,12169,1154],{"class":105},[99,12171,11456],{"class":109},[99,12173,12155],{"class":168},[99,12175,12176],{"class":101,"line":1609},[99,12177,2386],{"emptyLinePlaceholder":26},[99,12179,12180,12182,12184,12186],{"class":101,"line":1614},[99,12181,2289],{"class":1949},[99,12183,110],{"class":109},[99,12185,2294],{"class":214},[99,12187,2705],{"class":109},[99,12189,12190],{"class":101,"line":1628},[99,12191,2386],{"emptyLinePlaceholder":26},[99,12193,12194,12196,12198],{"class":101,"line":1633},[99,12195,4076],{"class":105},[99,12197,4079],{"class":158},[99,12199,1276],{"class":109},[99,12201,12202],{"class":101,"line":1639},[99,12203,1551],{"class":109},[41,12205,12207],{"id":12206},"_62引用的注意事项","6.2引用的注意事项",[53,12209,12210],{},[56,12211,12212],{},"引用必须要初始化",[90,12214,12216],{"className":92,"code":12215,"language":94,"meta":21,"style":21},"int &b;\u002F\u002F非常错误！\n",[96,12217,12218],{"__ignoreMap":21},[99,12219,12220,12222,12224,12227],{"class":101,"line":102},[99,12221,113],{"class":105},[99,12223,10571],{"class":105},[99,12225,12226],{"class":109},"b;",[99,12228,12229],{"class":168},"\u002F\u002F非常错误！\n",[53,12231,12232],{"start":22},[56,12233,12234],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[90,12236,12238],{"className":92,"code":12237,"language":94,"meta":21,"style":21},"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",[96,12239,12240,12248,12260,12272,12280,12296,12309,12327,12345,12365,12375,12383],{"__ignoreMap":21},[99,12241,12242,12244,12246],{"class":101,"line":102},[99,12243,113],{"class":105},[99,12245,1959],{"class":1949},[99,12247,10840],{"class":109},[99,12249,12250,12252,12254,12256,12258],{"class":101,"line":22},[99,12251,1971],{"class":105},[99,12253,10856],{"class":109},[99,12255,155],{"class":105},[99,12257,2024],{"class":158},[99,12259,1276],{"class":109},[99,12261,12262,12264,12266,12268,12270],{"class":101,"line":1165},[99,12263,1971],{"class":105},[99,12265,10869],{"class":109},[99,12267,155],{"class":105},[99,12269,8937],{"class":158},[99,12271,1276],{"class":109},[99,12273,12274,12277],{"class":101,"line":1180},[99,12275,12276],{"class":168},"    \u002F\u002Fint &c;",[99,12278,12279],{"class":168}," \u002F\u002F错误，引用必须初始化\n",[99,12281,12282,12284,12286,12288,12290,12293],{"class":101,"line":1186},[99,12283,1971],{"class":105},[99,12285,10571],{"class":105},[99,12287,2932],{"class":109},[99,12289,155],{"class":105},[99,12291,12292],{"class":109}," a;",[99,12294,12295],{"class":168}," \u002F\u002F一旦初始化后，就不可以更改\n",[99,12297,12298,12301,12303,12306],{"class":101,"line":1200},[99,12299,12300],{"class":109},"    c ",[99,12302,155],{"class":105},[99,12304,12305],{"class":109}," b;",[99,12307,12308],{"class":168}," \u002F\u002F这是赋值操作，不是更改引用\n",[99,12310,12311,12313,12315,12317,12319,12321,12323,12325],{"class":101,"line":1206},[99,12312,6516],{"class":109},[99,12314,1154],{"class":105},[99,12316,12088],{"class":214},[99,12318,1430],{"class":105},[99,12320,10856],{"class":109},[99,12322,1154],{"class":105},[99,12324,11456],{"class":109},[99,12326,7240],{"class":168},[99,12328,12329,12331,12333,12335,12337,12339,12341,12343],{"class":101,"line":1297},[99,12330,6516],{"class":109},[99,12332,1154],{"class":105},[99,12334,12107],{"class":214},[99,12336,1430],{"class":105},[99,12338,10869],{"class":109},[99,12340,1154],{"class":105},[99,12342,11456],{"class":109},[99,12344,7240],{"class":168},[99,12346,12347,12349,12351,12354,12356,12359,12361,12363],{"class":101,"line":1303},[99,12348,6516],{"class":109},[99,12350,1154],{"class":105},[99,12352,12353],{"class":214}," \"c = \"",[99,12355,1430],{"class":105},[99,12357,12358],{"class":109}," c ",[99,12360,1154],{"class":105},[99,12362,11456],{"class":109},[99,12364,7240],{"class":168},[99,12366,12367,12369,12371,12373],{"class":101,"line":1315},[99,12368,2289],{"class":1949},[99,12370,110],{"class":109},[99,12372,2294],{"class":214},[99,12374,2705],{"class":109},[99,12376,12377,12379,12381],{"class":101,"line":1598},[99,12378,4076],{"class":105},[99,12380,4079],{"class":158},[99,12382,1276],{"class":109},[99,12384,12385],{"class":101,"line":1603},[99,12386,1551],{"class":109},[41,12388,12390],{"id":12389},"_63引用做函数参数","6.3引用做函数参数",[14,12392,12393],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12395,12396],{},"优点：可以简化指针修改实参",[90,12398,12400],{"className":92,"code":12399,"language":94,"meta":21,"style":21},"\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",[96,12401,12402,12407,12430,12441,12451,12460,12464,12468,12473,12495,12507,12519,12529,12533,12537,12542,12564,12574,12582,12590,12594,12598,12606,12610,12622,12634,12638,12649,12675,12679,12699,12723,12727,12737,12761,12765,12775,12779,12787],{"__ignoreMap":21},[99,12403,12404],{"class":101,"line":102},[99,12405,12406],{"class":168},"\u002F\u002F1. 值传递\n",[99,12408,12409,12411,12414,12416,12418,12420,12423,12425,12427],{"class":101,"line":22},[99,12410,5351],{"class":105},[99,12412,12413],{"class":1949}," mySwap01",[99,12415,110],{"class":109},[99,12417,113],{"class":105},[99,12419,1384],{"class":5203},[99,12421,12422],{"class":109},", ",[99,12424,113],{"class":105},[99,12426,2819],{"class":5203},[99,12428,12429],{"class":109},") {\n",[99,12431,12432,12434,12437,12439],{"class":101,"line":1165},[99,12433,1971],{"class":105},[99,12435,12436],{"class":109}," temp ",[99,12438,155],{"class":105},[99,12440,1418],{"class":109},[99,12442,12443,12446,12448],{"class":101,"line":1180},[99,12444,12445],{"class":109},"    a ",[99,12447,155],{"class":105},[99,12449,12450],{"class":109}," b;\n",[99,12452,12453,12455,12457],{"class":101,"line":1186},[99,12454,12126],{"class":109},[99,12456,155],{"class":105},[99,12458,12459],{"class":109}," temp;\n",[99,12461,12462],{"class":101,"line":1200},[99,12463,1551],{"class":109},[99,12465,12466],{"class":101,"line":1206},[99,12467,2386],{"emptyLinePlaceholder":26},[99,12469,12470],{"class":101,"line":1297},[99,12471,12472],{"class":168},"\u002F\u002F2. 地址传递\n",[99,12474,12475,12477,12480,12482,12485,12487,12489,12491,12493],{"class":101,"line":1303},[99,12476,5351],{"class":105},[99,12478,12479],{"class":1949}," mySwap02",[99,12481,110],{"class":109},[99,12483,12484],{"class":105},"int*",[99,12486,1384],{"class":5203},[99,12488,12422],{"class":109},[99,12490,12484],{"class":105},[99,12492,2819],{"class":5203},[99,12494,12429],{"class":109},[99,12496,12497,12499,12501,12503,12505],{"class":101,"line":1315},[99,12498,1971],{"class":105},[99,12500,12436],{"class":109},[99,12502,155],{"class":105},[99,12504,6505],{"class":105},[99,12506,6184],{"class":109},[99,12508,12509,12511,12513,12515,12517],{"class":101,"line":1598},[99,12510,6390],{"class":105},[99,12512,10906],{"class":109},[99,12514,155],{"class":105},[99,12516,6505],{"class":105},[99,12518,6056],{"class":109},[99,12520,12521,12523,12525,12527],{"class":101,"line":1603},[99,12522,6390],{"class":105},[99,12524,10932],{"class":109},[99,12526,155],{"class":105},[99,12528,12459],{"class":109},[99,12530,12531],{"class":101,"line":1609},[99,12532,1551],{"class":109},[99,12534,12535],{"class":101,"line":1614},[99,12536,2386],{"emptyLinePlaceholder":26},[99,12538,12539],{"class":101,"line":1628},[99,12540,12541],{"class":168},"\u002F\u002F3. 引用传递\n",[99,12543,12544,12546,12549,12551,12554,12556,12558,12560,12562],{"class":101,"line":1633},[99,12545,5351],{"class":105},[99,12547,12548],{"class":1949}," mySwap03",[99,12550,110],{"class":109},[99,12552,12553],{"class":105},"int&",[99,12555,1384],{"class":5203},[99,12557,12422],{"class":109},[99,12559,12553],{"class":105},[99,12561,2819],{"class":5203},[99,12563,12429],{"class":109},[99,12565,12566,12568,12570,12572],{"class":101,"line":1639},[99,12567,1971],{"class":105},[99,12569,12436],{"class":109},[99,12571,155],{"class":105},[99,12573,1418],{"class":109},[99,12575,12576,12578,12580],{"class":101,"line":1660},[99,12577,12445],{"class":109},[99,12579,155],{"class":105},[99,12581,12450],{"class":109},[99,12583,12584,12586,12588],{"class":101,"line":1665},[99,12585,12126],{"class":109},[99,12587,155],{"class":105},[99,12589,12459],{"class":109},[99,12591,12592],{"class":101,"line":1679},[99,12593,1551],{"class":109},[99,12595,12596],{"class":101,"line":1684},[99,12597,2386],{"emptyLinePlaceholder":26},[99,12599,12600,12602,12604],{"class":101,"line":1713},[99,12601,113],{"class":105},[99,12603,1959],{"class":1949},[99,12605,10840],{"class":109},[99,12607,12608],{"class":101,"line":1718},[99,12609,2386],{"emptyLinePlaceholder":26},[99,12611,12612,12614,12616,12618,12620],{"class":101,"line":1735},[99,12613,1971],{"class":105},[99,12615,10856],{"class":109},[99,12617,155],{"class":105},[99,12619,2024],{"class":158},[99,12621,1276],{"class":109},[99,12623,12624,12626,12628,12630,12632],{"class":101,"line":1740},[99,12625,1971],{"class":105},[99,12627,10869],{"class":109},[99,12629,155],{"class":105},[99,12631,8937],{"class":158},[99,12633,1276],{"class":109},[99,12635,12636],{"class":101,"line":1745},[99,12637,2386],{"emptyLinePlaceholder":26},[99,12639,12640,12643,12646],{"class":101,"line":1750},[99,12641,12642],{"class":1949},"    mySwap01",[99,12644,12645],{"class":109},"(a, b);",[99,12647,12648],{"class":168},"\u002F\u002F值传递，形参不会修饰实参\n",[99,12650,12651,12653,12655,12658,12660,12662,12664,12667,12669,12671,12673],{"class":101,"line":1764},[99,12652,6516],{"class":109},[99,12654,1154],{"class":105},[99,12656,12657],{"class":214}," \"a:\"",[99,12659,1430],{"class":105},[99,12661,10856],{"class":109},[99,12663,1154],{"class":105},[99,12665,12666],{"class":214}," \" b:\"",[99,12668,1430],{"class":105},[99,12670,10869],{"class":109},[99,12672,1154],{"class":105},[99,12674,8827],{"class":109},[99,12676,12677],{"class":101,"line":1769},[99,12678,2386],{"emptyLinePlaceholder":26},[99,12680,12681,12684,12686,12688,12691,12693,12696],{"class":101,"line":2563},[99,12682,12683],{"class":1949},"    mySwap02",[99,12685,110],{"class":109},[99,12687,463],{"class":105},[99,12689,12690],{"class":109},"a, ",[99,12692,463],{"class":105},[99,12694,12695],{"class":109},"b);",[99,12697,12698],{"class":168},"\u002F\u002F地址传递，形参会修饰实参\n",[99,12700,12701,12703,12705,12707,12709,12711,12713,12715,12717,12719,12721],{"class":101,"line":2577},[99,12702,6516],{"class":109},[99,12704,1154],{"class":105},[99,12706,12657],{"class":214},[99,12708,1430],{"class":105},[99,12710,10856],{"class":109},[99,12712,1154],{"class":105},[99,12714,12666],{"class":214},[99,12716,1430],{"class":105},[99,12718,10869],{"class":109},[99,12720,1154],{"class":105},[99,12722,8827],{"class":109},[99,12724,12725],{"class":101,"line":2585},[99,12726,2386],{"emptyLinePlaceholder":26},[99,12728,12729,12732,12734],{"class":101,"line":2590},[99,12730,12731],{"class":1949},"    mySwap03",[99,12733,12645],{"class":109},[99,12735,12736],{"class":168},"\u002F\u002F引用传递，形参会修饰实参\n",[99,12738,12739,12741,12743,12745,12747,12749,12751,12753,12755,12757,12759],{"class":101,"line":2596},[99,12740,6516],{"class":109},[99,12742,1154],{"class":105},[99,12744,12657],{"class":214},[99,12746,1430],{"class":105},[99,12748,10856],{"class":109},[99,12750,1154],{"class":105},[99,12752,12666],{"class":214},[99,12754,1430],{"class":105},[99,12756,10869],{"class":109},[99,12758,1154],{"class":105},[99,12760,8827],{"class":109},[99,12762,12763],{"class":101,"line":2602},[99,12764,2386],{"emptyLinePlaceholder":26},[99,12766,12767,12769,12771,12773],{"class":101,"line":2607},[99,12768,2289],{"class":1949},[99,12770,110],{"class":109},[99,12772,2294],{"class":214},[99,12774,2705],{"class":109},[99,12776,12777],{"class":101,"line":7935},[99,12778,2386],{"emptyLinePlaceholder":26},[99,12780,12781,12783,12785],{"class":101,"line":7959},[99,12782,4076],{"class":105},[99,12784,4079],{"class":158},[99,12786,1276],{"class":109},[99,12788,12789],{"class":101,"line":7964},[99,12790,1551],{"class":109},[41,12792,12794],{"id":12793},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12796,12797],{},"作用：引用是可以作为函数的返回值存在的",[14,12799,9012,12800],{},[259,12801,12802],{},"不要返回局部变量引用",[14,12804,12805],{},"用法：函数调用作为左值",[90,12807,12809],{"className":9928,"code":12808,"language":9930,"meta":21,"style":21},"\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",[96,12810,12811,12816,12824,12839,12845,12849,12853,12858,12866,12883,12889,12893,12897,12905,12909,12914,12928,12948,12967,12971,12976,12989,13009,13027,13031,13047,13051,13070,13088,13092,13102,13106,13114],{"__ignoreMap":21},[99,12812,12813],{"class":101,"line":102},[99,12814,12815],{"class":168},"\u002F\u002F返回局部变量引用\n",[99,12817,12818,12820,12822],{"class":101,"line":22},[99,12819,12553],{"class":105},[99,12821,5575],{"class":1949},[99,12823,10840],{"class":109},[99,12825,12826,12828,12830,12832,12834,12836],{"class":101,"line":1165},[99,12827,1971],{"class":105},[99,12829,10856],{"class":109},[99,12831,155],{"class":105},[99,12833,2024],{"class":158},[99,12835,165],{"class":109},[99,12837,12838],{"class":168}," \u002F\u002F局部变量\n",[99,12840,12841,12843],{"class":101,"line":1180},[99,12842,4076],{"class":105},[99,12844,1418],{"class":109},[99,12846,12847],{"class":101,"line":1186},[99,12848,1551],{"class":109},[99,12850,12851],{"class":101,"line":1200},[99,12852,2386],{"emptyLinePlaceholder":26},[99,12854,12855],{"class":101,"line":1206},[99,12856,12857],{"class":168},"\u002F\u002F返回静态变量引用\n",[99,12859,12860,12862,12864],{"class":101,"line":1297},[99,12861,12553],{"class":105},[99,12863,5644],{"class":1949},[99,12865,10840],{"class":109},[99,12867,12868,12870,12872,12874,12876,12878,12880],{"class":101,"line":1303},[99,12869,11007],{"class":105},[99,12871,2368],{"class":105},[99,12873,10856],{"class":109},[99,12875,155],{"class":105},[99,12877,8937],{"class":158},[99,12879,165],{"class":109},[99,12881,12882],{"class":168},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[99,12884,12885,12887],{"class":101,"line":1315},[99,12886,4076],{"class":105},[99,12888,1418],{"class":109},[99,12890,12891],{"class":101,"line":1598},[99,12892,1551],{"class":109},[99,12894,12895],{"class":101,"line":1603},[99,12896,2386],{"emptyLinePlaceholder":26},[99,12898,12899,12901,12903],{"class":101,"line":1609},[99,12900,113],{"class":105},[99,12902,1959],{"class":1949},[99,12904,10840],{"class":109},[99,12906,12907],{"class":101,"line":1614},[99,12908,2386],{"emptyLinePlaceholder":26},[99,12910,12911],{"class":101,"line":1628},[99,12912,12913],{"class":168},"    \u002F\u002F不能返回局部变量的引用\n",[99,12915,12916,12919,12922,12924,12926],{"class":101,"line":1633},[99,12917,12918],{"class":105},"    int&",[99,12920,12921],{"class":109}," ref ",[99,12923,155],{"class":105},[99,12925,5575],{"class":1949},[99,12927,5623],{"class":109},[99,12929,12930,12932,12934,12937,12939,12941,12943,12945],{"class":101,"line":1639},[99,12931,6516],{"class":109},[99,12933,1154],{"class":105},[99,12935,12936],{"class":214}," \"ref = \"",[99,12938,1430],{"class":105},[99,12940,12921],{"class":109},[99,12942,1154],{"class":105},[99,12944,11456],{"class":109},[99,12946,12947],{"class":168},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[99,12949,12950,12952,12954,12956,12958,12960,12962,12964],{"class":101,"line":1660},[99,12951,6516],{"class":109},[99,12953,1154],{"class":105},[99,12955,12936],{"class":214},[99,12957,1430],{"class":105},[99,12959,12921],{"class":109},[99,12961,1154],{"class":105},[99,12963,11456],{"class":109},[99,12965,12966],{"class":168},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[99,12968,12969],{"class":101,"line":1665},[99,12970,2386],{"emptyLinePlaceholder":26},[99,12972,12973],{"class":101,"line":1679},[99,12974,12975],{"class":168},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[99,12977,12978,12980,12983,12985,12987],{"class":101,"line":1684},[99,12979,12918],{"class":105},[99,12981,12982],{"class":109}," ref2 ",[99,12984,155],{"class":105},[99,12986,5644],{"class":1949},[99,12988,5623],{"class":109},[99,12990,12991,12993,12995,12998,13000,13002,13004,13006],{"class":101,"line":1713},[99,12992,6516],{"class":109},[99,12994,1154],{"class":105},[99,12996,12997],{"class":214}," \"ref2 = \"",[99,12999,1430],{"class":105},[99,13001,12982],{"class":109},[99,13003,1154],{"class":105},[99,13005,11456],{"class":109},[99,13007,13008],{"class":168}," \u002F\u002F20\n",[99,13010,13011,13013,13015,13017,13019,13021,13023,13025],{"class":101,"line":1718},[99,13012,6516],{"class":109},[99,13014,1154],{"class":105},[99,13016,12997],{"class":214},[99,13018,1430],{"class":105},[99,13020,12982],{"class":109},[99,13022,1154],{"class":105},[99,13024,11456],{"class":109},[99,13026,13008],{"class":168},[99,13028,13029],{"class":101,"line":1735},[99,13030,2386],{"emptyLinePlaceholder":26},[99,13032,13033,13035,13038,13040,13042,13044],{"class":101,"line":1740},[99,13034,5689],{"class":1949},[99,13036,13037],{"class":109},"() ",[99,13039,155],{"class":105},[99,13041,2985],{"class":158},[99,13043,165],{"class":109},[99,13045,13046],{"class":168},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[99,13048,13049],{"class":101,"line":1745},[99,13050,2386],{"emptyLinePlaceholder":26},[99,13052,13053,13055,13057,13059,13061,13063,13065,13067],{"class":101,"line":1750},[99,13054,6516],{"class":109},[99,13056,1154],{"class":105},[99,13058,12997],{"class":214},[99,13060,1430],{"class":105},[99,13062,12982],{"class":109},[99,13064,1154],{"class":105},[99,13066,11456],{"class":109},[99,13068,13069],{"class":168}," \u002F\u002F1000\n",[99,13071,13072,13074,13076,13078,13080,13082,13084,13086],{"class":101,"line":1764},[99,13073,6516],{"class":109},[99,13075,1154],{"class":105},[99,13077,12997],{"class":214},[99,13079,1430],{"class":105},[99,13081,12982],{"class":109},[99,13083,1154],{"class":105},[99,13085,11456],{"class":109},[99,13087,13069],{"class":168},[99,13089,13090],{"class":101,"line":1769},[99,13091,2386],{"emptyLinePlaceholder":26},[99,13093,13094,13096,13098,13100],{"class":101,"line":2563},[99,13095,2289],{"class":1949},[99,13097,110],{"class":109},[99,13099,2294],{"class":214},[99,13101,2705],{"class":109},[99,13103,13104],{"class":101,"line":2577},[99,13105,2386],{"emptyLinePlaceholder":26},[99,13107,13108,13110,13112],{"class":101,"line":2585},[99,13109,4076],{"class":105},[99,13111,4079],{"class":158},[99,13113,1276],{"class":109},[99,13115,13116],{"class":101,"line":2590},[99,13117,1551],{"class":109},[41,13119,13121],{"id":13120},"_65引用的本质","6.5引用的本质",[14,13123,13124,13125],{},"本质：",[259,13126,13127],{},"引用的本质在c++内部实现是一个指针常量.",[90,13129,13131],{"className":92,"code":13130,"language":94,"meta":21,"style":21},"\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",[96,13132,13133,13138,13154,13168,13172,13181,13193,13198,13203,13214,13227,13231,13247,13264,13268,13276,13284],{"__ignoreMap":21},[99,13134,13135],{"class":101,"line":102},[99,13136,13137],{"class":168},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[99,13139,13140,13142,13144,13146,13148,13151],{"class":101,"line":22},[99,13141,5351],{"class":105},[99,13143,11372],{"class":1949},[99,13145,110],{"class":109},[99,13147,12553],{"class":105},[99,13149,13150],{"class":5203}," ref",[99,13152,13153],{"class":109},"){\n",[99,13155,13156,13159,13161,13163,13165],{"class":101,"line":1165},[99,13157,13158],{"class":109},"    ref ",[99,13160,155],{"class":105},[99,13162,5741],{"class":158},[99,13164,165],{"class":109},[99,13166,13167],{"class":168}," \u002F\u002F ref是引用，转换为*ref = 100\n",[99,13169,13170],{"class":101,"line":1180},[99,13171,1551],{"class":109},[99,13173,13174,13176,13178],{"class":101,"line":1186},[99,13175,113],{"class":105},[99,13177,1959],{"class":1949},[99,13179,13180],{"class":109},"(){\n",[99,13182,13183,13185,13187,13189,13191],{"class":101,"line":1200},[99,13184,1971],{"class":105},[99,13186,10856],{"class":109},[99,13188,155],{"class":105},[99,13190,2024],{"class":158},[99,13192,1276],{"class":109},[99,13194,13195],{"class":101,"line":1206},[99,13196,13197],{"class":109},"    \n",[99,13199,13200],{"class":101,"line":1297},[99,13201,13202],{"class":168},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[99,13204,13205,13207,13209,13211],{"class":101,"line":1303},[99,13206,12918],{"class":105},[99,13208,12921],{"class":109},[99,13210,155],{"class":105},[99,13212,13213],{"class":109}," a; \n",[99,13215,13216,13218,13220,13222,13224],{"class":101,"line":1315},[99,13217,13158],{"class":109},[99,13219,155],{"class":105},[99,13221,8937],{"class":158},[99,13223,165],{"class":109},[99,13225,13226],{"class":168}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[99,13228,13229],{"class":101,"line":1598},[99,13230,13197],{"class":109},[99,13232,13233,13235,13237,13239,13241,13243,13245],{"class":101,"line":1603},[99,13234,6516],{"class":109},[99,13236,1154],{"class":105},[99,13238,12657],{"class":214},[99,13240,1430],{"class":105},[99,13242,10856],{"class":109},[99,13244,1154],{"class":105},[99,13246,8827],{"class":109},[99,13248,13249,13251,13253,13256,13258,13260,13262],{"class":101,"line":1609},[99,13250,6516],{"class":109},[99,13252,1154],{"class":105},[99,13254,13255],{"class":214}," \"ref:\"",[99,13257,1430],{"class":105},[99,13259,12921],{"class":109},[99,13261,1154],{"class":105},[99,13263,8827],{"class":109},[99,13265,13266],{"class":101,"line":1614},[99,13267,13197],{"class":109},[99,13269,13270,13273],{"class":101,"line":1628},[99,13271,13272],{"class":1949},"    func",[99,13274,13275],{"class":109},"(a);\n",[99,13277,13278,13280,13282],{"class":101,"line":1633},[99,13279,4076],{"class":105},[99,13281,4079],{"class":158},[99,13283,1276],{"class":109},[99,13285,13286],{"class":101,"line":1639},[99,13287,1551],{"class":109},[14,13289,11319],{},[53,13291,13292,13295],{},[56,13293,13294],{},"引用的本质，就是一个指针常量",[56,13296,13297],{},"引用一旦初始化，就不可以发生改变",[41,13299,13301],{"id":13300},"_66常量引用","6.6常量引用",[14,13303,13304],{},"作用：常量引用主要用来修饰形参",[14,13306,13307,13308,13311],{},"在函数形参列表中，可以加",[259,13309,13310],{},"const修饰形参","，防止形参改变实参",[90,13313,13315],{"className":92,"code":13314,"language":94,"meta":21,"style":21},"\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",[96,13316,13317,13322,13327,13346,13351,13364,13368,13372,13380,13384,13389,13394,13408,13412,13420,13432,13436,13441,13453,13460,13464,13474,13478,13486],{"__ignoreMap":21},[99,13318,13319],{"class":101,"line":102},[99,13320,13321],{"class":168},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[99,13323,13324],{"class":101,"line":22},[99,13325,13326],{"class":168},"\u002F\u002F加上const就不能修改实参的\n",[99,13328,13329,13331,13334,13336,13338,13341,13344],{"class":101,"line":1165},[99,13330,5351],{"class":105},[99,13332,13333],{"class":1949}," showValue",[99,13335,110],{"class":109},[99,13337,6779],{"class":105},[99,13339,13340],{"class":105}," int&",[99,13342,13343],{"class":5203}," v",[99,13345,12429],{"class":109},[99,13347,13348],{"class":101,"line":1180},[99,13349,13350],{"class":168},"    \u002F\u002Fv += 100;\n",[99,13352,13353,13355,13357,13360,13362],{"class":101,"line":1186},[99,13354,6516],{"class":109},[99,13356,1154],{"class":105},[99,13358,13359],{"class":109}," v ",[99,13361,1154],{"class":105},[99,13363,8827],{"class":109},[99,13365,13366],{"class":101,"line":1200},[99,13367,1551],{"class":109},[99,13369,13370],{"class":101,"line":1206},[99,13371,2386],{"emptyLinePlaceholder":26},[99,13373,13374,13376,13378],{"class":101,"line":1297},[99,13375,113],{"class":105},[99,13377,1959],{"class":1949},[99,13379,10840],{"class":109},[99,13381,13382],{"class":101,"line":1303},[99,13383,2386],{"emptyLinePlaceholder":26},[99,13385,13386],{"class":101,"line":1315},[99,13387,13388],{"class":168},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[99,13390,13391],{"class":101,"line":1598},[99,13392,13393],{"class":168},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[99,13395,13396,13398,13400,13402,13404,13406],{"class":101,"line":1603},[99,13397,11208],{"class":105},[99,13399,13340],{"class":105},[99,13401,12921],{"class":109},[99,13403,155],{"class":105},[99,13405,2024],{"class":158},[99,13407,1276],{"class":109},[99,13409,13410],{"class":101,"line":1609},[99,13411,2386],{"emptyLinePlaceholder":26},[99,13413,13414,13417],{"class":101,"line":1614},[99,13415,13416],{"class":168},"    \u002F\u002Fref = 100;",[99,13418,13419],{"class":168},"  \u002F\u002F加入const后不可以修改变量\n",[99,13421,13422,13424,13426,13428,13430],{"class":101,"line":1628},[99,13423,6516],{"class":109},[99,13425,1154],{"class":105},[99,13427,12921],{"class":109},[99,13429,1154],{"class":105},[99,13431,8827],{"class":109},[99,13433,13434],{"class":101,"line":1633},[99,13435,2386],{"emptyLinePlaceholder":26},[99,13437,13438],{"class":101,"line":1639},[99,13439,13440],{"class":168},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[99,13442,13443,13445,13447,13449,13451],{"class":101,"line":1660},[99,13444,1971],{"class":105},[99,13446,10856],{"class":109},[99,13448,155],{"class":105},[99,13450,2024],{"class":158},[99,13452,1276],{"class":109},[99,13454,13455,13458],{"class":101,"line":1665},[99,13456,13457],{"class":1949},"    showValue",[99,13459,13275],{"class":109},[99,13461,13462],{"class":101,"line":1679},[99,13463,2386],{"emptyLinePlaceholder":26},[99,13465,13466,13468,13470,13472],{"class":101,"line":1684},[99,13467,2289],{"class":1949},[99,13469,110],{"class":109},[99,13471,2294],{"class":214},[99,13473,2705],{"class":109},[99,13475,13476],{"class":101,"line":1713},[99,13477,2386],{"emptyLinePlaceholder":26},[99,13479,13480,13482,13484],{"class":101,"line":1718},[99,13481,4076],{"class":105},[99,13483,4079],{"class":158},[99,13485,1276],{"class":109},[99,13487,13488],{"class":101,"line":1735},[99,13489,1551],{"class":109},[5113,13491,13492],{},"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":21,"searchDepth":22,"depth":22,"links":13494},[13495,13496,13497,13498,13499,13500],{"id":12027,"depth":22,"text":12028},{"id":12206,"depth":22,"text":12207},{"id":12389,"depth":22,"text":12390},{"id":12793,"depth":22,"text":12794},{"id":13120,"depth":22,"text":13121},{"id":13300,"depth":22,"text":13301},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12019,"description":21},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13507,"title":13508,"body":13509,"description":21,"extension":24,"meta":14590,"navigation":26,"path":14591,"seo":14592,"stem":14593,"__hash__":14594},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13510,"toc":14582},[13511,13514,13518,13521,13526,13758,13760,13771,13775,13778,13786,13890,13893,13897,13900,13904,13907,13912,13934,13940,14267,14270,14274,14282,14579],[10,13512,13508],{"id":13513},"_7函数高级部分",[41,13515,13517],{"id":13516},"_71函数默认参数","7.1函数默认参数",[14,13519,13520],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13522,5168,13523],{},[96,13524,13525],{}," 返回值类型  函数名 （参数= 默认值）{}",[90,13527,13529],{"className":92,"code":13528,"language":94,"meta":21,"style":21},"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",[96,13530,13531,13566,13581,13585,13589,13594,13599,13628,13648,13658,13662,13666,13674,13678,13706,13728,13732,13742,13746,13754],{"__ignoreMap":21},[99,13532,13533,13535,13537,13539,13541,13543,13545,13547,13549,13552,13554,13556,13558,13560,13562,13564],{"class":101,"line":102},[99,13534,113],{"class":105},[99,13536,11372],{"class":1949},[99,13538,110],{"class":109},[99,13540,113],{"class":105},[99,13542,1384],{"class":5203},[99,13544,12422],{"class":109},[99,13546,113],{"class":105},[99,13548,2819],{"class":5203},[99,13550,13551],{"class":105}," =",[99,13553,2024],{"class":158},[99,13555,12422],{"class":109},[99,13557,113],{"class":105},[99,13559,2835],{"class":5203},[99,13561,13551],{"class":105},[99,13563,2024],{"class":158},[99,13565,12429],{"class":109},[99,13567,13568,13570,13572,13574,13576,13578],{"class":101,"line":22},[99,13569,4076],{"class":105},[99,13571,10856],{"class":109},[99,13573,591],{"class":105},[99,13575,10869],{"class":109},[99,13577,591],{"class":105},[99,13579,13580],{"class":109}," c;\n",[99,13582,13583],{"class":101,"line":1165},[99,13584,1551],{"class":109},[99,13586,13587],{"class":101,"line":1180},[99,13588,2386],{"emptyLinePlaceholder":26},[99,13590,13591],{"class":101,"line":1186},[99,13592,13593],{"class":168},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[99,13595,13596],{"class":101,"line":1200},[99,13597,13598],{"class":168},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[99,13600,13601,13603,13606,13608,13610,13612,13614,13616,13618,13620,13622,13624,13626],{"class":101,"line":1206},[99,13602,113],{"class":105},[99,13604,13605],{"class":1949}," func2",[99,13607,110],{"class":109},[99,13609,113],{"class":105},[99,13611,1384],{"class":5203},[99,13613,13551],{"class":105},[99,13615,2024],{"class":158},[99,13617,12422],{"class":109},[99,13619,113],{"class":105},[99,13621,2819],{"class":5203},[99,13623,13551],{"class":105},[99,13625,2024],{"class":158},[99,13627,2705],{"class":109},[99,13629,13630,13632,13634,13636,13638,13640,13642,13644,13646],{"class":101,"line":1297},[99,13631,113],{"class":105},[99,13633,13605],{"class":1949},[99,13635,110],{"class":109},[99,13637,113],{"class":105},[99,13639,1384],{"class":5203},[99,13641,12422],{"class":109},[99,13643,113],{"class":105},[99,13645,2819],{"class":5203},[99,13647,12429],{"class":109},[99,13649,13650,13652,13654,13656],{"class":101,"line":1303},[99,13651,4076],{"class":105},[99,13653,10856],{"class":109},[99,13655,591],{"class":105},[99,13657,12450],{"class":109},[99,13659,13660],{"class":101,"line":1315},[99,13661,1551],{"class":109},[99,13663,13664],{"class":101,"line":1598},[99,13665,2386],{"emptyLinePlaceholder":26},[99,13667,13668,13670,13672],{"class":101,"line":1603},[99,13669,113],{"class":105},[99,13671,1959],{"class":1949},[99,13673,10840],{"class":109},[99,13675,13676],{"class":101,"line":1609},[99,13677,2386],{"emptyLinePlaceholder":26},[99,13679,13680,13682,13684,13687,13689,13691,13693,13695,13697,13699,13702,13704],{"class":101,"line":1614},[99,13681,6516],{"class":109},[99,13683,1154],{"class":105},[99,13685,13686],{"class":214}," \"ret = \"",[99,13688,1430],{"class":105},[99,13690,11372],{"class":1949},[99,13692,110],{"class":109},[99,13694,810],{"class":158},[99,13696,12422],{"class":109},[99,13698,810],{"class":158},[99,13700,13701],{"class":109},") ",[99,13703,1154],{"class":105},[99,13705,8827],{"class":109},[99,13707,13708,13710,13712,13714,13716,13718,13720,13722,13724,13726],{"class":101,"line":1628},[99,13709,6516],{"class":109},[99,13711,1154],{"class":105},[99,13713,13686],{"class":214},[99,13715,1430],{"class":105},[99,13717,11372],{"class":1949},[99,13719,110],{"class":109},[99,13721,421],{"class":158},[99,13723,13701],{"class":109},[99,13725,1154],{"class":105},[99,13727,8827],{"class":109},[99,13729,13730],{"class":101,"line":1633},[99,13731,2386],{"emptyLinePlaceholder":26},[99,13733,13734,13736,13738,13740],{"class":101,"line":1639},[99,13735,2289],{"class":1949},[99,13737,110],{"class":109},[99,13739,2294],{"class":214},[99,13741,2705],{"class":109},[99,13743,13744],{"class":101,"line":1660},[99,13745,2386],{"emptyLinePlaceholder":26},[99,13747,13748,13750,13752],{"class":101,"line":1665},[99,13749,4076],{"class":105},[99,13751,4079],{"class":158},[99,13753,1276],{"class":109},[99,13755,13756],{"class":101,"line":1679},[99,13757,1551],{"class":109},[14,13759,11319],{},[53,13761,13762,13765,13768],{},[56,13763,13764],{},"我传就用我；没传就用你",[56,13766,13767],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[56,13769,13770],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[41,13772,13774],{"id":13773},"_72函数的占位参数","7.2函数的占位参数",[14,13776,13777],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13779,13780,13782,13783],{},[259,13781,5168],{}," ",[96,13784,13785],{},"返回值类型 函数名 (数据类型){}",[90,13787,13789],{"className":92,"code":13788,"language":94,"meta":21,"style":21},"\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",[96,13790,13791,13796,13814,13827,13831,13839,13843,13860,13864,13874,13878,13886],{"__ignoreMap":21},[99,13792,13793],{"class":101,"line":102},[99,13794,13795],{"class":168},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[99,13797,13798,13800,13802,13804,13806,13808,13810,13812],{"class":101,"line":22},[99,13799,5351],{"class":105},[99,13801,11372],{"class":1949},[99,13803,110],{"class":109},[99,13805,113],{"class":105},[99,13807,1384],{"class":5203},[99,13809,12422],{"class":109},[99,13811,113],{"class":105},[99,13813,12429],{"class":109},[99,13815,13816,13818,13820,13823,13825],{"class":101,"line":1165},[99,13817,6516],{"class":109},[99,13819,1154],{"class":105},[99,13821,13822],{"class":214}," \"this is func\"",[99,13824,1430],{"class":105},[99,13826,8827],{"class":109},[99,13828,13829],{"class":101,"line":1180},[99,13830,1551],{"class":109},[99,13832,13833,13835,13837],{"class":101,"line":1186},[99,13834,113],{"class":105},[99,13836,1959],{"class":1949},[99,13838,10840],{"class":109},[99,13840,13841],{"class":101,"line":1200},[99,13842,2386],{"emptyLinePlaceholder":26},[99,13844,13845,13847,13849,13851,13853,13855,13857],{"class":101,"line":1206},[99,13846,13272],{"class":1949},[99,13848,110],{"class":109},[99,13850,556],{"class":158},[99,13852,488],{"class":109},[99,13854,556],{"class":158},[99,13856,5953],{"class":109},[99,13858,13859],{"class":168}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[99,13861,13862],{"class":101,"line":1297},[99,13863,2386],{"emptyLinePlaceholder":26},[99,13865,13866,13868,13870,13872],{"class":101,"line":1303},[99,13867,2289],{"class":1949},[99,13869,110],{"class":109},[99,13871,2294],{"class":214},[99,13873,2705],{"class":109},[99,13875,13876],{"class":101,"line":1315},[99,13877,2386],{"emptyLinePlaceholder":26},[99,13879,13880,13882,13884],{"class":101,"line":1598},[99,13881,4076],{"class":105},[99,13883,4079],{"class":158},[99,13885,1276],{"class":109},[99,13887,13888],{"class":101,"line":1603},[99,13889,1551],{"class":109},[14,13891,13892],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[41,13894,13896],{"id":13895},"_73函数重载","7.3函数重载",[14,13898,13899],{},"意思是函数名是可以相同的",[70,13901,13903],{"id":13902},"_731基本语法","7.3.1基本语法",[14,13905,13906],{},"作用：函数名可以相同，提高复用性",[14,13908,13909],{},[259,13910,13911],{},"函数重载满足条件：",[1117,13913,13914,13917,13920],{},[56,13915,13916],{},"同一个作用域下",[56,13918,13919],{},"函数名称相同",[56,13921,13922,13923,13926,13927,13930,13931],{},"函数参数",[259,13924,13925],{},"类型不同","  或者 ",[259,13928,13929],{},"个数不同"," 或者 ",[259,13932,13933],{},"顺序不同",[14,13935,13936,13939],{},[259,13937,13938],{},"注意:","  函数的返回值不可以作为函数重载的条件",[90,13941,13943],{"className":9928,"code":13942,"language":9930,"meta":21,"style":21},"\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",[96,13944,13945,13950,13958,13962,13975,13979,13993,13997,14010,14014,14029,14033,14046,14050,14071,14075,14088,14092,14112,14116,14129,14133,14137,14142,14147,14152,14157,14162,14166,14170,14178,14182,14188,14198,14208,14222,14237,14241,14251,14255,14263],{"__ignoreMap":21},[99,13946,13947],{"class":101,"line":102},[99,13948,13949],{"class":168},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[99,13951,13952,13954,13956],{"class":101,"line":22},[99,13953,5351],{"class":105},[99,13955,11372],{"class":1949},[99,13957,1962],{"class":109},[99,13959,13960],{"class":101,"line":1165},[99,13961,1532],{"class":109},[99,13963,13964,13966,13968,13971,13973],{"class":101,"line":1180},[99,13965,6516],{"class":109},[99,13967,1154],{"class":105},[99,13969,13970],{"class":214}," \"func 的调用！\"",[99,13972,1430],{"class":105},[99,13974,8827],{"class":109},[99,13976,13977],{"class":101,"line":1186},[99,13978,1551],{"class":109},[99,13980,13981,13983,13985,13987,13989,13991],{"class":101,"line":1200},[99,13982,5351],{"class":105},[99,13984,11372],{"class":1949},[99,13986,110],{"class":109},[99,13988,113],{"class":105},[99,13990,1384],{"class":5203},[99,13992,116],{"class":109},[99,13994,13995],{"class":101,"line":1206},[99,13996,1532],{"class":109},[99,13998,13999,14001,14003,14006,14008],{"class":101,"line":1297},[99,14000,6516],{"class":109},[99,14002,1154],{"class":105},[99,14004,14005],{"class":214}," \"func (int a) 的调用！\"",[99,14007,1430],{"class":105},[99,14009,8827],{"class":109},[99,14011,14012],{"class":101,"line":1303},[99,14013,1551],{"class":109},[99,14015,14016,14018,14020,14022,14025,14027],{"class":101,"line":1315},[99,14017,5351],{"class":105},[99,14019,11372],{"class":1949},[99,14021,110],{"class":109},[99,14023,14024],{"class":105},"double",[99,14026,1384],{"class":5203},[99,14028,116],{"class":109},[99,14030,14031],{"class":101,"line":1598},[99,14032,1532],{"class":109},[99,14034,14035,14037,14039,14042,14044],{"class":101,"line":1603},[99,14036,6516],{"class":109},[99,14038,1154],{"class":105},[99,14040,14041],{"class":214}," \"func (double a)的调用！\"",[99,14043,1430],{"class":105},[99,14045,8827],{"class":109},[99,14047,14048],{"class":101,"line":1609},[99,14049,1551],{"class":109},[99,14051,14052,14054,14056,14058,14060,14062,14065,14067,14069],{"class":101,"line":1614},[99,14053,5351],{"class":105},[99,14055,11372],{"class":1949},[99,14057,110],{"class":109},[99,14059,113],{"class":105},[99,14061,1384],{"class":5203},[99,14063,14064],{"class":109}," ,",[99,14066,14024],{"class":105},[99,14068,2819],{"class":5203},[99,14070,116],{"class":109},[99,14072,14073],{"class":101,"line":1628},[99,14074,1532],{"class":109},[99,14076,14077,14079,14081,14084,14086],{"class":101,"line":1633},[99,14078,6516],{"class":109},[99,14080,1154],{"class":105},[99,14082,14083],{"class":214}," \"func (int a ,double b) 的调用！\"",[99,14085,1430],{"class":105},[99,14087,8827],{"class":109},[99,14089,14090],{"class":101,"line":1639},[99,14091,1551],{"class":109},[99,14093,14094,14096,14098,14100,14102,14104,14106,14108,14110],{"class":101,"line":1660},[99,14095,5351],{"class":105},[99,14097,11372],{"class":1949},[99,14099,110],{"class":109},[99,14101,14024],{"class":105},[99,14103,1384],{"class":5203},[99,14105,14064],{"class":109},[99,14107,113],{"class":105},[99,14109,2819],{"class":5203},[99,14111,116],{"class":109},[99,14113,14114],{"class":101,"line":1665},[99,14115,1532],{"class":109},[99,14117,14118,14120,14122,14125,14127],{"class":101,"line":1679},[99,14119,6516],{"class":109},[99,14121,1154],{"class":105},[99,14123,14124],{"class":214}," \"func (double a ,int b)的调用！\"",[99,14126,1430],{"class":105},[99,14128,8827],{"class":109},[99,14130,14131],{"class":101,"line":1684},[99,14132,1551],{"class":109},[99,14134,14135],{"class":101,"line":1713},[99,14136,2386],{"emptyLinePlaceholder":26},[99,14138,14139],{"class":101,"line":1718},[99,14140,14141],{"class":168},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[99,14143,14144],{"class":101,"line":1735},[99,14145,14146],{"class":168},"\u002F\u002Fint func(double a, int b)\n",[99,14148,14149],{"class":101,"line":1740},[99,14150,14151],{"class":168},"\u002F\u002F{\n",[99,14153,14154],{"class":101,"line":1745},[99,14155,14156],{"class":168},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[99,14158,14159],{"class":101,"line":1750},[99,14160,14161],{"class":168},"\u002F\u002F}\n",[99,14163,14164],{"class":101,"line":1764},[99,14165,2386],{"emptyLinePlaceholder":26},[99,14167,14168],{"class":101,"line":1769},[99,14169,2386],{"emptyLinePlaceholder":26},[99,14171,14172,14174,14176],{"class":101,"line":2563},[99,14173,113],{"class":105},[99,14175,1959],{"class":1949},[99,14177,10840],{"class":109},[99,14179,14180],{"class":101,"line":2577},[99,14181,2386],{"emptyLinePlaceholder":26},[99,14183,14184,14186],{"class":101,"line":2585},[99,14185,13272],{"class":1949},[99,14187,5623],{"class":109},[99,14189,14190,14192,14194,14196],{"class":101,"line":2590},[99,14191,13272],{"class":1949},[99,14193,110],{"class":109},[99,14195,556],{"class":158},[99,14197,2705],{"class":109},[99,14199,14200,14202,14204,14206],{"class":101,"line":2596},[99,14201,13272],{"class":1949},[99,14203,110],{"class":109},[99,14205,159],{"class":158},[99,14207,2705],{"class":109},[99,14209,14210,14212,14214,14216,14218,14220],{"class":101,"line":2602},[99,14211,13272],{"class":1949},[99,14213,110],{"class":109},[99,14215,556],{"class":158},[99,14217,488],{"class":109},[99,14219,159],{"class":158},[99,14221,2705],{"class":109},[99,14223,14224,14226,14228,14230,14233,14235],{"class":101,"line":2607},[99,14225,13272],{"class":1949},[99,14227,110],{"class":109},[99,14229,159],{"class":158},[99,14231,14232],{"class":109}," , ",[99,14234,556],{"class":158},[99,14236,2705],{"class":109},[99,14238,14239],{"class":101,"line":7935},[99,14240,13197],{"class":109},[99,14242,14243,14245,14247,14249],{"class":101,"line":7959},[99,14244,2289],{"class":1949},[99,14246,110],{"class":109},[99,14248,2294],{"class":214},[99,14250,2705],{"class":109},[99,14252,14253],{"class":101,"line":7964},[99,14254,2386],{"emptyLinePlaceholder":26},[99,14256,14257,14259,14261],{"class":101,"line":7970},[99,14258,4076],{"class":105},[99,14260,4079],{"class":158},[99,14262,1276],{"class":109},[99,14264,14265],{"class":101,"line":7997},[99,14266,1551],{"class":109},[14,14268,14269],{},"重点：函数返回值不可以作为函数重载条件！",[70,14271,14273],{"id":14272},"_732注意事项","7.3.2注意事项",[1117,14275,14276,14279],{},[56,14277,14278],{},"引用作为重载条件!!!",[56,14280,14281],{},"函数重载碰到函数默认参数",[90,14283,14285],{"className":92,"code":14284,"language":94,"meta":21,"style":21},"\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",[96,14286,14287,14292,14297,14301,14317,14321,14334,14338,14342,14360,14364,14377,14381,14385,14389,14394,14398,14422,14426,14439,14443,14447,14461,14465,14478,14482,14486,14494,14498,14510,14520,14533,14537,14541,14549,14553,14563,14567,14575],{"__ignoreMap":21},[99,14288,14289],{"class":101,"line":102},[99,14290,14291],{"class":168},"\u002F\u002F函数重载注意事项\n",[99,14293,14294],{"class":101,"line":22},[99,14295,14296],{"class":168},"\u002F\u002F1、引用作为重载条件\n",[99,14298,14299],{"class":101,"line":1165},[99,14300,2386],{"emptyLinePlaceholder":26},[99,14302,14303,14305,14307,14309,14311,14313,14315],{"class":101,"line":1180},[99,14304,5351],{"class":105},[99,14306,11372],{"class":1949},[99,14308,110],{"class":109},[99,14310,113],{"class":105},[99,14312,10571],{"class":105},[99,14314,348],{"class":5203},[99,14316,116],{"class":109},[99,14318,14319],{"class":101,"line":1186},[99,14320,1532],{"class":109},[99,14322,14323,14325,14327,14330,14332],{"class":101,"line":1200},[99,14324,6516],{"class":109},[99,14326,1154],{"class":105},[99,14328,14329],{"class":214}," \"func (int &a) 调用 \"",[99,14331,1430],{"class":105},[99,14333,8827],{"class":109},[99,14335,14336],{"class":101,"line":1206},[99,14337,1551],{"class":109},[99,14339,14340],{"class":101,"line":1297},[99,14341,2386],{"emptyLinePlaceholder":26},[99,14343,14344,14346,14348,14350,14352,14354,14356,14358],{"class":101,"line":1303},[99,14345,5351],{"class":105},[99,14347,11372],{"class":1949},[99,14349,110],{"class":109},[99,14351,6779],{"class":105},[99,14353,2368],{"class":105},[99,14355,10571],{"class":105},[99,14357,348],{"class":5203},[99,14359,116],{"class":109},[99,14361,14362],{"class":101,"line":1315},[99,14363,1532],{"class":109},[99,14365,14366,14368,14370,14373,14375],{"class":101,"line":1598},[99,14367,6516],{"class":109},[99,14369,1154],{"class":105},[99,14371,14372],{"class":214}," \"func (const int &a) 调用 \"",[99,14374,1430],{"class":105},[99,14376,8827],{"class":109},[99,14378,14379],{"class":101,"line":1603},[99,14380,1551],{"class":109},[99,14382,14383],{"class":101,"line":1609},[99,14384,2386],{"emptyLinePlaceholder":26},[99,14386,14387],{"class":101,"line":1614},[99,14388,2386],{"emptyLinePlaceholder":26},[99,14390,14391],{"class":101,"line":1628},[99,14392,14393],{"class":168},"\u002F\u002F2、函数重载碰到函数默认参数\n",[99,14395,14396],{"class":101,"line":1633},[99,14397,2386],{"emptyLinePlaceholder":26},[99,14399,14400,14402,14404,14406,14408,14410,14412,14414,14416,14418,14420],{"class":101,"line":1639},[99,14401,5351],{"class":105},[99,14403,13605],{"class":1949},[99,14405,110],{"class":109},[99,14407,113],{"class":105},[99,14409,1384],{"class":5203},[99,14411,12422],{"class":109},[99,14413,113],{"class":105},[99,14415,2819],{"class":5203},[99,14417,13551],{"class":105},[99,14419,2024],{"class":158},[99,14421,116],{"class":109},[99,14423,14424],{"class":101,"line":1660},[99,14425,1532],{"class":109},[99,14427,14428,14430,14432,14435,14437],{"class":101,"line":1665},[99,14429,6516],{"class":109},[99,14431,1154],{"class":105},[99,14433,14434],{"class":214}," \"func2(int a, int b = 10) 调用\"",[99,14436,1430],{"class":105},[99,14438,8827],{"class":109},[99,14440,14441],{"class":101,"line":1679},[99,14442,1551],{"class":109},[99,14444,14445],{"class":101,"line":1684},[99,14446,2386],{"emptyLinePlaceholder":26},[99,14448,14449,14451,14453,14455,14457,14459],{"class":101,"line":1713},[99,14450,5351],{"class":105},[99,14452,13605],{"class":1949},[99,14454,110],{"class":109},[99,14456,113],{"class":105},[99,14458,1384],{"class":5203},[99,14460,116],{"class":109},[99,14462,14463],{"class":101,"line":1718},[99,14464,1532],{"class":109},[99,14466,14467,14469,14471,14474,14476],{"class":101,"line":1735},[99,14468,6516],{"class":109},[99,14470,1154],{"class":105},[99,14472,14473],{"class":214}," \"func2(int a) 调用\"",[99,14475,1430],{"class":105},[99,14477,8827],{"class":109},[99,14479,14480],{"class":101,"line":1740},[99,14481,1551],{"class":109},[99,14483,14484],{"class":101,"line":1745},[99,14485,2386],{"emptyLinePlaceholder":26},[99,14487,14488,14490,14492],{"class":101,"line":1750},[99,14489,113],{"class":105},[99,14491,1959],{"class":1949},[99,14493,10840],{"class":109},[99,14495,14496],{"class":101,"line":1764},[99,14497,13197],{"class":109},[99,14499,14500,14502,14504,14506,14508],{"class":101,"line":1769},[99,14501,1971],{"class":105},[99,14503,10856],{"class":109},[99,14505,155],{"class":105},[99,14507,2024],{"class":158},[99,14509,1276],{"class":109},[99,14511,14512,14514,14517],{"class":101,"line":2563},[99,14513,13272],{"class":1949},[99,14515,14516],{"class":109},"(a);",[99,14518,14519],{"class":168}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[99,14521,14522,14524,14526,14528,14530],{"class":101,"line":2577},[99,14523,13272],{"class":1949},[99,14525,110],{"class":109},[99,14527,556],{"class":158},[99,14529,5953],{"class":109},[99,14531,14532],{"class":168},"\u002F\u002F调用有const   10是个常量\n",[99,14534,14535],{"class":101,"line":2585},[99,14536,2386],{"emptyLinePlaceholder":26},[99,14538,14539],{"class":101,"line":2590},[99,14540,2386],{"emptyLinePlaceholder":26},[99,14542,14543,14546],{"class":101,"line":2596},[99,14544,14545],{"class":168},"    \u002F\u002Ffunc2(10);",[99,14547,14548],{"class":168}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[99,14550,14551],{"class":101,"line":2602},[99,14552,2386],{"emptyLinePlaceholder":26},[99,14554,14555,14557,14559,14561],{"class":101,"line":2607},[99,14556,2289],{"class":1949},[99,14558,110],{"class":109},[99,14560,2294],{"class":214},[99,14562,2705],{"class":109},[99,14564,14565],{"class":101,"line":7935},[99,14566,2386],{"emptyLinePlaceholder":26},[99,14568,14569,14571,14573],{"class":101,"line":7959},[99,14570,4076],{"class":105},[99,14572,4079],{"class":158},[99,14574,1276],{"class":109},[99,14576,14577],{"class":101,"line":7964},[99,14578,1551],{"class":109},[5113,14580,14581],{},"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":21,"searchDepth":22,"depth":22,"links":14583},[14584,14585,14586],{"id":13516,"depth":22,"text":13517},{"id":13773,"depth":22,"text":13774},{"id":13895,"depth":22,"text":13896,"children":14587},[14588,14589],{"id":13902,"depth":1165,"text":13903},{"id":14272,"depth":1165,"text":14273},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13508,"description":21},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14596,"title":14597,"body":14598,"description":23352,"extension":24,"meta":23353,"navigation":26,"path":23354,"seo":23355,"stem":23356,"__hash__":23357},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14599,"toc":23333},[14600,14603,14609,14616,14621,14624,14627,14630,14634,14638,14641,14644,14652,14657,14660,14667,14672,14831,14834,15087,15090,15093,15096,15101,15104,15107,15118,15123,15359,15363,15373,15376,15384,15531,15535,15538,15541,15545,15990,15994,16002,16010,16922,16929,16934,17562,17565,17568,17571,17690,17693,17780,17783,17909,17912,18006,18009,18362,18366,18374,18378,18385,18388,18391,18402,18408,18413,18425,18433,18453,18461,18478,18664,18667,18671,18674,18677,18680,18683,18686,18689,18692,19152,19158,19162,19165,19176,19763,19766,20255,20259,20262,20265,20268,20271,20274,20282,20678,20682,20685,20688,21135,21138,21141,21146,21149,21154,21157,21161,21164,21166,21172,21175,21481,21491,21532,21536,21539,21541,21574,21577,21884,21886,21901,21904,21927,21936,21942,21945,21949,21952,21955,21960,21971,21976,21984,21989,22119,22122,22125,22300,22305,22517,22521,22524,22638,22643,22882,22886,22890,22893,22896,22901,23006,23009,23012,23015,23019,23130,23133,23136,23141,23193,23196,23199,23204,23250,23253,23258,23326,23328,23331],[10,14601,14597],{"id":14602},"_8类和对象",[14,14604,14605,14606],{},"C++面向对象的三大特性为",[259,14607,14608],{},"封装、继承、多态",[14,14610,14611,14612,14615],{},"C++认为",[259,14613,14614],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14617,14618],{},[259,14619,14620],{},"例如：",[14,14622,14623],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14625,14626],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14628,14629],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[41,14631,14633],{"id":14632},"_81封装","8.1封装",[70,14635,14637],{"id":14636},"_811封装的意义","8.1.1封装的意义",[14,14639,14640],{},"封装是C++面向对象三大特性之一",[14,14642,14643],{},"封装的意义：",[1117,14645,14646,14649],{},[56,14647,14648],{},"将属性和行为作为一个整体，表现生活中的事物",[56,14650,14651],{},"将属性和行为加以权限控制",[14,14653,14654],{},[259,14655,14656],{},"封装意义一：",[14,14658,14659],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14661,14662,13782,14664],{},[259,14663,5168],{},[96,14665,14666],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[53,14668,14669],{},[56,14670,14671],{},"**示例1：**设计一个圆类，求圆的周长",[90,14673,14675],{"className":92,"code":14674,"language":94,"meta":21,"style":21},"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",[96,14676,14677,14685,14689,14694,14699,14704,14709,14716,14721,14731,14735,14753,14757,14761,14769,14773,14778,14783,14788,14793,14804,14827],{"__ignoreMap":21},[99,14678,14679,14682],{"class":101,"line":102},[99,14680,14681],{"class":105},"class",[99,14683,14684],{"class":1949}," Circle\n",[99,14686,14687],{"class":101,"line":22},[99,14688,1532],{"class":109},[99,14690,14691],{"class":101,"line":1165},[99,14692,14693],{"class":168},"    \u002F\u002F访问权限\n",[99,14695,14696],{"class":101,"line":1180},[99,14697,14698],{"class":168},"    \u002F\u002F公共权限\n",[99,14700,14701],{"class":101,"line":1186},[99,14702,14703],{"class":105},"public:\n",[99,14705,14706],{"class":101,"line":1200},[99,14707,14708],{"class":168},"    \u002F\u002F属性\n",[99,14710,14711,14713],{"class":101,"line":1206},[99,14712,1971],{"class":105},[99,14714,14715],{"class":109}," m_r;\n",[99,14717,14718],{"class":101,"line":1297},[99,14719,14720],{"class":168},"    \u002F\u002F行为\n",[99,14722,14723,14726,14729],{"class":101,"line":1303},[99,14724,14725],{"class":105},"    double",[99,14727,14728],{"class":1949}," calculateZC",[99,14730,1962],{"class":109},[99,14732,14733],{"class":101,"line":1315},[99,14734,2016],{"class":109},[99,14736,14737,14740,14743,14745,14748,14750],{"class":101,"line":1598},[99,14738,14739],{"class":105},"        return",[99,14741,14742],{"class":158}," 2",[99,14744,565],{"class":105},[99,14746,14747],{"class":109},"PI",[99,14749,565],{"class":105},[99,14751,14752],{"class":109},"m_r;\n",[99,14754,14755],{"class":101,"line":1603},[99,14756,2173],{"class":109},[99,14758,14759],{"class":101,"line":1609},[99,14760,3981],{"class":109},[99,14762,14763,14765,14767],{"class":101,"line":1614},[99,14764,113],{"class":105},[99,14766,1959],{"class":1949},[99,14768,1962],{"class":109},[99,14770,14771],{"class":101,"line":1628},[99,14772,1532],{"class":109},[99,14774,14775],{"class":101,"line":1633},[99,14776,14777],{"class":168},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[99,14779,14780],{"class":101,"line":1639},[99,14781,14782],{"class":168},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[99,14784,14785],{"class":101,"line":1660},[99,14786,14787],{"class":109},"    Circle c1;\n",[99,14789,14790],{"class":101,"line":1665},[99,14791,14792],{"class":168},"    \u002F\u002F给圆对象 的属性进行赋值\n",[99,14794,14795,14798,14800,14802],{"class":101,"line":1679},[99,14796,14797],{"class":109},"    c1.m_r",[99,14799,155],{"class":105},[99,14801,556],{"class":158},[99,14803,1276],{"class":109},[99,14805,14806,14808,14810,14813,14815,14818,14821,14823,14825],{"class":101,"line":1684},[99,14807,1537],{"class":109},[99,14809,1154],{"class":105},[99,14811,14812],{"class":214},"\"圆的周长\"",[99,14814,1154],{"class":105},[99,14816,14817],{"class":109},"c1.",[99,14819,14820],{"class":1949},"calculateZC",[99,14822,2413],{"class":109},[99,14824,1154],{"class":105},[99,14826,1177],{"class":109},[99,14828,14829],{"class":101,"line":1713},[99,14830,1551],{"class":109},[14,14832,14833],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[90,14835,14837],{"className":92,"code":14836,"language":94,"meta":21,"style":21},"#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",[96,14838,14839,14845,14855,14861,14867,14871,14875,14880,14887,14892,14910,14914,14924,14928,14933,14949,14953,14963,14967,14972,14980,14984,15016,15020,15024,15032,15036,15041,15046,15060,15074,15083],{"__ignoreMap":21},[99,14840,14841,14843],{"class":101,"line":102},[99,14842,1935],{"class":105},[99,14844,1938],{"class":214},[99,14846,14847,14849,14851,14853],{"class":101,"line":22},[99,14848,1943],{"class":105},[99,14850,1946],{"class":105},[99,14852,1950],{"class":1949},[99,14854,1276],{"class":109},[99,14856,14857,14859],{"class":101,"line":1165},[99,14858,1935],{"class":105},[99,14860,7736],{"class":214},[99,14862,14863,14865],{"class":101,"line":1180},[99,14864,14681],{"class":105},[99,14866,7749],{"class":1949},[99,14868,14869],{"class":101,"line":1186},[99,14870,1532],{"class":109},[99,14872,14873],{"class":101,"line":1200},[99,14874,14703],{"class":105},[99,14876,14877],{"class":101,"line":1206},[99,14878,14879],{"class":109},"    string m_name;\n",[99,14881,14882,14884],{"class":101,"line":1297},[99,14883,1971],{"class":105},[99,14885,14886],{"class":109}," m_id;\n",[99,14888,14889],{"class":101,"line":1303},[99,14890,14891],{"class":168},"    \u002F\u002F赋值姓名\n",[99,14893,14894,14897,14900,14902,14905,14908],{"class":101,"line":1315},[99,14895,14896],{"class":105},"    void",[99,14898,14899],{"class":1949}," setName",[99,14901,110],{"class":109},[99,14903,14904],{"class":1949},"string",[99,14906,14907],{"class":5203}," name",[99,14909,116],{"class":109},[99,14911,14912],{"class":101,"line":1598},[99,14913,2016],{"class":109},[99,14915,14916,14919,14921],{"class":101,"line":1603},[99,14917,14918],{"class":109},"        m_name",[99,14920,155],{"class":105},[99,14922,14923],{"class":109},"name;\n",[99,14925,14926],{"class":101,"line":1609},[99,14927,2173],{"class":109},[99,14929,14930],{"class":101,"line":1614},[99,14931,14932],{"class":168},"    \u002F\u002F赋值学号\n",[99,14934,14935,14937,14940,14942,14944,14947],{"class":101,"line":1628},[99,14936,14896],{"class":105},[99,14938,14939],{"class":1949}," setId",[99,14941,110],{"class":109},[99,14943,113],{"class":105},[99,14945,14946],{"class":5203}," id",[99,14948,116],{"class":109},[99,14950,14951],{"class":101,"line":1633},[99,14952,2016],{"class":109},[99,14954,14955,14958,14960],{"class":101,"line":1639},[99,14956,14957],{"class":109},"        m_id",[99,14959,155],{"class":105},[99,14961,14962],{"class":109},"id;\n",[99,14964,14965],{"class":101,"line":1660},[99,14966,2173],{"class":109},[99,14968,14969],{"class":101,"line":1665},[99,14970,14971],{"class":168},"    \u002F\u002F打印学生信息\n",[99,14973,14974,14976,14978],{"class":101,"line":1679},[99,14975,14896],{"class":105},[99,14977,9602],{"class":1949},[99,14979,1962],{"class":109},[99,14981,14982],{"class":101,"line":1684},[99,14983,2016],{"class":109},[99,14985,14986,14988,14990,14993,14995,14998,15000,15002,15004,15007,15009,15012,15014],{"class":101,"line":1713},[99,14987,3437],{"class":109},[99,14989,1154],{"class":105},[99,14991,14992],{"class":214},"\"姓名：\"",[99,14994,1154],{"class":105},[99,14996,14997],{"class":109},"m_name",[99,14999,1154],{"class":105},[99,15001,4345],{"class":214},[99,15003,1154],{"class":105},[99,15005,15006],{"class":214},"\"学号：\"",[99,15008,1154],{"class":105},[99,15010,15011],{"class":109},"m_id",[99,15013,1154],{"class":105},[99,15015,1177],{"class":109},[99,15017,15018],{"class":101,"line":1718},[99,15019,2173],{"class":109},[99,15021,15022],{"class":101,"line":1735},[99,15023,3981],{"class":109},[99,15025,15026,15028,15030],{"class":101,"line":1740},[99,15027,113],{"class":105},[99,15029,1959],{"class":1949},[99,15031,1962],{"class":109},[99,15033,15034],{"class":101,"line":1745},[99,15035,1532],{"class":109},[99,15037,15038],{"class":101,"line":1750},[99,15039,15040],{"class":168},"    \u002F\u002F实例化\n",[99,15042,15043],{"class":101,"line":1764},[99,15044,15045],{"class":109},"    Student s1;\n",[99,15047,15048,15051,15054,15056,15058],{"class":101,"line":1769},[99,15049,15050],{"class":109},"    s1.",[99,15052,15053],{"class":1949},"setName",[99,15055,110],{"class":109},[99,15057,7903],{"class":214},[99,15059,2705],{"class":109},[99,15061,15062,15064,15067,15069,15072],{"class":101,"line":2563},[99,15063,15050],{"class":109},[99,15065,15066],{"class":1949},"setId",[99,15068,110],{"class":109},[99,15070,15071],{"class":158},"123456",[99,15073,2705],{"class":109},[99,15075,15076,15078,15081],{"class":101,"line":2577},[99,15077,15050],{"class":109},[99,15079,15080],{"class":1949},"printInfo",[99,15082,5623],{"class":109},[99,15084,15085],{"class":101,"line":2585},[99,15086,1551],{"class":109},[14,15088,15089],{},"类中的属性和行为统称为成员",[14,15091,15092],{},"属性：成员属性(成员变量)",[14,15094,15095],{},"方法：成员函数(成员方法)",[14,15097,15098],{},[259,15099,15100],{},"封装意义二：",[14,15102,15103],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15105,15106],{},"访问权限有三种：",[53,15108,15109,15112,15115],{},[56,15110,15111],{},"public        公共权限",[56,15113,15114],{},"protected 保护权限",[56,15116,15117],{},"private      私有权限",[14,15119,15120],{},[259,15121,15122],{},"示例：",[90,15124,15126],{"className":9928,"code":15125,"language":9930,"meta":21,"style":21},"\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",[96,15127,15128,15133,15138,15143,15148,15152,15159,15163,15168,15172,15177,15181,15186,15191,15196,15200,15205,15210,15217,15221,15225,15233,15237,15248,15260,15272,15276,15280,15284,15292,15296,15301,15313,15321,15329,15333,15343,15347,15355],{"__ignoreMap":21},[99,15129,15130],{"class":101,"line":102},[99,15131,15132],{"class":168},"\u002F\u002F三种权限\n",[99,15134,15135],{"class":101,"line":22},[99,15136,15137],{"class":168},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[99,15139,15140],{"class":101,"line":1165},[99,15141,15142],{"class":168},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[99,15144,15145],{"class":101,"line":1180},[99,15146,15147],{"class":168},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[99,15149,15150],{"class":101,"line":1186},[99,15151,2386],{"emptyLinePlaceholder":26},[99,15153,15154,15156],{"class":101,"line":1200},[99,15155,14681],{"class":105},[99,15157,15158],{"class":1949}," Person\n",[99,15160,15161],{"class":101,"line":1206},[99,15162,1532],{"class":109},[99,15164,15165],{"class":101,"line":1297},[99,15166,15167],{"class":168},"    \u002F\u002F姓名  公共权限\n",[99,15169,15170],{"class":101,"line":1303},[99,15171,14703],{"class":105},[99,15173,15174],{"class":101,"line":1315},[99,15175,15176],{"class":109},"    string m_Name;\n",[99,15178,15179],{"class":101,"line":1598},[99,15180,2386],{"emptyLinePlaceholder":26},[99,15182,15183],{"class":101,"line":1603},[99,15184,15185],{"class":168},"    \u002F\u002F汽车  保护权限\n",[99,15187,15188],{"class":101,"line":1609},[99,15189,15190],{"class":105},"protected:\n",[99,15192,15193],{"class":101,"line":1614},[99,15194,15195],{"class":109},"    string m_Car;\n",[99,15197,15198],{"class":101,"line":1628},[99,15199,2386],{"emptyLinePlaceholder":26},[99,15201,15202],{"class":101,"line":1633},[99,15203,15204],{"class":168},"    \u002F\u002F银行卡密码  私有权限\n",[99,15206,15207],{"class":101,"line":1639},[99,15208,15209],{"class":105},"private:\n",[99,15211,15212,15214],{"class":101,"line":1660},[99,15213,1971],{"class":105},[99,15215,15216],{"class":109}," m_Password;\n",[99,15218,15219],{"class":101,"line":1665},[99,15220,2386],{"emptyLinePlaceholder":26},[99,15222,15223],{"class":101,"line":1679},[99,15224,14703],{"class":105},[99,15226,15227,15229,15231],{"class":101,"line":1684},[99,15228,14896],{"class":105},[99,15230,11372],{"class":1949},[99,15232,1962],{"class":109},[99,15234,15235],{"class":101,"line":1713},[99,15236,2016],{"class":109},[99,15238,15239,15242,15244,15246],{"class":101,"line":1718},[99,15240,15241],{"class":109},"        m_Name ",[99,15243,155],{"class":105},[99,15245,8925],{"class":214},[99,15247,1276],{"class":109},[99,15249,15250,15253,15255,15258],{"class":101,"line":1735},[99,15251,15252],{"class":109},"        m_Car ",[99,15254,155],{"class":105},[99,15256,15257],{"class":214}," \"拖拉机\"",[99,15259,1276],{"class":109},[99,15261,15262,15265,15267,15270],{"class":101,"line":1740},[99,15263,15264],{"class":109},"        m_Password ",[99,15266,155],{"class":105},[99,15268,15269],{"class":158}," 123456",[99,15271,1276],{"class":109},[99,15273,15274],{"class":101,"line":1745},[99,15275,2173],{"class":109},[99,15277,15278],{"class":101,"line":1750},[99,15279,3981],{"class":109},[99,15281,15282],{"class":101,"line":1764},[99,15283,2386],{"emptyLinePlaceholder":26},[99,15285,15286,15288,15290],{"class":101,"line":1769},[99,15287,113],{"class":105},[99,15289,1959],{"class":1949},[99,15291,10840],{"class":109},[99,15293,15294],{"class":101,"line":2563},[99,15295,2386],{"emptyLinePlaceholder":26},[99,15297,15298],{"class":101,"line":2577},[99,15299,15300],{"class":109},"    Person p;\n",[99,15302,15303,15306,15308,15311],{"class":101,"line":2585},[99,15304,15305],{"class":109},"    p.m_Name ",[99,15307,155],{"class":105},[99,15309,15310],{"class":214}," \"李四\"",[99,15312,1276],{"class":109},[99,15314,15315,15318],{"class":101,"line":2590},[99,15316,15317],{"class":168},"    \u002F\u002Fp.m_Car = \"奔驰\";",[99,15319,15320],{"class":168},"  \u002F\u002F保护权限类外访问不到\n",[99,15322,15323,15326],{"class":101,"line":2596},[99,15324,15325],{"class":168},"    \u002F\u002Fp.m_Password = 123;",[99,15327,15328],{"class":168}," \u002F\u002F私有权限类外访问不到\n",[99,15330,15331],{"class":101,"line":2602},[99,15332,2386],{"emptyLinePlaceholder":26},[99,15334,15335,15337,15339,15341],{"class":101,"line":2607},[99,15336,2289],{"class":1949},[99,15338,110],{"class":109},[99,15340,2294],{"class":214},[99,15342,2705],{"class":109},[99,15344,15345],{"class":101,"line":7935},[99,15346,2386],{"emptyLinePlaceholder":26},[99,15348,15349,15351,15353],{"class":101,"line":7959},[99,15350,4076],{"class":105},[99,15352,4079],{"class":158},[99,15354,1276],{"class":109},[99,15356,15357],{"class":101,"line":7964},[99,15358,1551],{"class":109},[70,15360,15362],{"id":15361},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15364,15365,15366,15369,15370],{},"在C++中 struct和class唯一的",[259,15367,15368],{},"区别","就在于 ",[259,15371,15372],{},"默认的访问权限不同",[14,15374,15375],{},"区别：",[1117,15377,15378,15381],{},[56,15379,15380],{},"struct 默认权限为公共",[56,15382,15383],{},"class   默认权限为私有",[90,15385,15387],{"className":9928,"code":15386,"language":9930,"meta":21,"style":21},"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",[96,15388,15389,15396,15400,15410,15414,15418,15425,15429,15439,15443,15447,15455,15459,15464,15478,15482,15487,15501,15505,15515,15519,15527],{"__ignoreMap":21},[99,15390,15391,15393],{"class":101,"line":102},[99,15392,14681],{"class":105},[99,15394,15395],{"class":1949}," C1\n",[99,15397,15398],{"class":101,"line":22},[99,15399,1532],{"class":109},[99,15401,15402,15404,15407],{"class":101,"line":1165},[99,15403,1971],{"class":105},[99,15405,15406],{"class":109},"  m_A;",[99,15408,15409],{"class":168}," \u002F\u002F默认是私有权限\n",[99,15411,15412],{"class":101,"line":1180},[99,15413,3981],{"class":109},[99,15415,15416],{"class":101,"line":1186},[99,15417,2386],{"emptyLinePlaceholder":26},[99,15419,15420,15422],{"class":101,"line":1200},[99,15421,7746],{"class":105},[99,15423,15424],{"class":1949}," C2\n",[99,15426,15427],{"class":101,"line":1206},[99,15428,1532],{"class":109},[99,15430,15431,15433,15436],{"class":101,"line":1297},[99,15432,1971],{"class":105},[99,15434,15435],{"class":109}," m_A;",[99,15437,15438],{"class":168},"  \u002F\u002F默认是公共权限\n",[99,15440,15441],{"class":101,"line":1303},[99,15442,3981],{"class":109},[99,15444,15445],{"class":101,"line":1315},[99,15446,2386],{"emptyLinePlaceholder":26},[99,15448,15449,15451,15453],{"class":101,"line":1598},[99,15450,113],{"class":105},[99,15452,1959],{"class":1949},[99,15454,10840],{"class":109},[99,15456,15457],{"class":101,"line":1603},[99,15458,2386],{"emptyLinePlaceholder":26},[99,15460,15461],{"class":101,"line":1609},[99,15462,15463],{"class":109},"    C1 c1;\n",[99,15465,15466,15469,15471,15473,15475],{"class":101,"line":1614},[99,15467,15468],{"class":109},"    c1.m_A ",[99,15470,155],{"class":105},[99,15472,2024],{"class":158},[99,15474,165],{"class":109},[99,15476,15477],{"class":168}," \u002F\u002F错误，访问权限是私有\n",[99,15479,15480],{"class":101,"line":1628},[99,15481,2386],{"emptyLinePlaceholder":26},[99,15483,15484],{"class":101,"line":1633},[99,15485,15486],{"class":109},"    C2 c2;\n",[99,15488,15489,15492,15494,15496,15498],{"class":101,"line":1639},[99,15490,15491],{"class":109},"    c2.m_A ",[99,15493,155],{"class":105},[99,15495,2024],{"class":158},[99,15497,165],{"class":109},[99,15499,15500],{"class":168}," \u002F\u002F正确，访问权限是公共\n",[99,15502,15503],{"class":101,"line":1660},[99,15504,2386],{"emptyLinePlaceholder":26},[99,15506,15507,15509,15511,15513],{"class":101,"line":1665},[99,15508,2289],{"class":1949},[99,15510,110],{"class":109},[99,15512,2294],{"class":214},[99,15514,2705],{"class":109},[99,15516,15517],{"class":101,"line":1679},[99,15518,2386],{"emptyLinePlaceholder":26},[99,15520,15521,15523,15525],{"class":101,"line":1684},[99,15522,4076],{"class":105},[99,15524,4079],{"class":158},[99,15526,1276],{"class":109},[99,15528,15529],{"class":101,"line":1713},[99,15530,1551],{"class":109},[70,15532,15534],{"id":15533},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15536,15537],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15539,15540],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15542,15543],{},[259,15544,15122],{},[90,15546,15548],{"className":9928,"code":15547,"language":9930,"meta":21,"style":21},"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",[96,15549,15550,15560,15564,15568,15573,15587,15596,15600,15610,15614,15621,15625,15629,15633,15638,15647,15654,15658,15663,15679,15702,15715,15722,15726,15735,15739,15743,15748,15764,15774,15778,15782,15786,15794,15798,15808,15812,15820,15824,15828,15836,15840,15844,15849,15862,15885,15889,15894,15907,15929,15933,15938,15952,15960,15964,15974,15978,15986],{"__ignoreMap":21},[99,15551,15552,15554,15557],{"class":101,"line":102},[99,15553,14681],{"class":105},[99,15555,15556],{"class":1949}," Person",[99,15558,15559],{"class":109}," {\n",[99,15561,15562],{"class":101,"line":22},[99,15563,14703],{"class":105},[99,15565,15566],{"class":101,"line":1165},[99,15567,2386],{"emptyLinePlaceholder":26},[99,15569,15570],{"class":101,"line":1180},[99,15571,15572],{"class":168},"    \u002F\u002F姓名设置可读可写\n",[99,15574,15575,15577,15579,15581,15583,15585],{"class":101,"line":1186},[99,15576,14896],{"class":105},[99,15578,14899],{"class":1949},[99,15580,110],{"class":109},[99,15582,14904],{"class":1949},[99,15584,14907],{"class":5203},[99,15586,12429],{"class":109},[99,15588,15589,15591,15593],{"class":101,"line":1200},[99,15590,15241],{"class":109},[99,15592,155],{"class":105},[99,15594,15595],{"class":109}," name;\n",[99,15597,15598],{"class":101,"line":1206},[99,15599,2173],{"class":109},[99,15601,15602,15605,15608],{"class":101,"line":1297},[99,15603,15604],{"class":1949},"    string",[99,15606,15607],{"class":1949}," getName",[99,15609,1962],{"class":109},[99,15611,15612],{"class":101,"line":1303},[99,15613,2016],{"class":109},[99,15615,15616,15618],{"class":101,"line":1315},[99,15617,14739],{"class":105},[99,15619,15620],{"class":109}," m_Name;\n",[99,15622,15623],{"class":101,"line":1598},[99,15624,2173],{"class":109},[99,15626,15627],{"class":101,"line":1603},[99,15628,2386],{"emptyLinePlaceholder":26},[99,15630,15631],{"class":101,"line":1609},[99,15632,2386],{"emptyLinePlaceholder":26},[99,15634,15635],{"class":101,"line":1614},[99,15636,15637],{"class":168},"    \u002F\u002F获取年龄 \n",[99,15639,15640,15642,15645],{"class":101,"line":1628},[99,15641,1971],{"class":105},[99,15643,15644],{"class":1949}," getAge",[99,15646,10840],{"class":109},[99,15648,15649,15651],{"class":101,"line":1633},[99,15650,14739],{"class":105},[99,15652,15653],{"class":109}," m_Age;\n",[99,15655,15656],{"class":101,"line":1639},[99,15657,2173],{"class":109},[99,15659,15660],{"class":101,"line":1660},[99,15661,15662],{"class":168},"    \u002F\u002F设置年龄\n",[99,15664,15665,15667,15670,15672,15674,15677],{"class":101,"line":1665},[99,15666,14896],{"class":105},[99,15668,15669],{"class":1949}," setAge",[99,15671,110],{"class":109},[99,15673,113],{"class":105},[99,15675,15676],{"class":5203}," age",[99,15678,12429],{"class":109},[99,15680,15681,15683,15686,15688,15690,15692,15695,15697,15700],{"class":101,"line":1679},[99,15682,2483],{"class":105},[99,15684,15685],{"class":109}," (age ",[99,15687,1020],{"class":105},[99,15689,4079],{"class":158},[99,15691,3241],{"class":105},[99,15693,15694],{"class":109}," age ",[99,15696,1070],{"class":105},[99,15698,15699],{"class":158}," 150",[99,15701,12429],{"class":109},[99,15703,15704,15706,15708,15711,15713],{"class":101,"line":1684},[99,15705,9706],{"class":109},[99,15707,1154],{"class":105},[99,15709,15710],{"class":214}," \"你个老妖精!\"",[99,15712,1430],{"class":105},[99,15714,8827],{"class":109},[99,15716,15717,15720],{"class":101,"line":1713},[99,15718,15719],{"class":105},"            return",[99,15721,1276],{"class":109},[99,15723,15724],{"class":101,"line":1718},[99,15725,2515],{"class":109},[99,15727,15728,15731,15733],{"class":101,"line":1735},[99,15729,15730],{"class":109},"        m_Age ",[99,15732,155],{"class":105},[99,15734,7784],{"class":109},[99,15736,15737],{"class":101,"line":1740},[99,15738,2173],{"class":109},[99,15740,15741],{"class":101,"line":1745},[99,15742,2386],{"emptyLinePlaceholder":26},[99,15744,15745],{"class":101,"line":1750},[99,15746,15747],{"class":168},"    \u002F\u002F情人设置为只写\n",[99,15749,15750,15752,15755,15757,15759,15762],{"class":101,"line":1764},[99,15751,14896],{"class":105},[99,15753,15754],{"class":1949}," setLover",[99,15756,110],{"class":109},[99,15758,14904],{"class":1949},[99,15760,15761],{"class":5203}," lover",[99,15763,12429],{"class":109},[99,15765,15766,15769,15771],{"class":101,"line":1769},[99,15767,15768],{"class":109},"        m_Lover ",[99,15770,155],{"class":105},[99,15772,15773],{"class":109}," lover;\n",[99,15775,15776],{"class":101,"line":2563},[99,15777,2173],{"class":109},[99,15779,15780],{"class":101,"line":2577},[99,15781,2386],{"emptyLinePlaceholder":26},[99,15783,15784],{"class":101,"line":2585},[99,15785,15209],{"class":105},[99,15787,15788,15791],{"class":101,"line":2590},[99,15789,15790],{"class":109},"    string m_Name;",[99,15792,15793],{"class":168}," \u002F\u002F可读可写  姓名\n",[99,15795,15796],{"class":101,"line":2596},[99,15797,13197],{"class":109},[99,15799,15800,15802,15805],{"class":101,"line":2602},[99,15801,1971],{"class":105},[99,15803,15804],{"class":109}," m_Age;",[99,15806,15807],{"class":168}," \u002F\u002F只读  年龄\n",[99,15809,15810],{"class":101,"line":2607},[99,15811,2386],{"emptyLinePlaceholder":26},[99,15813,15814,15817],{"class":101,"line":7935},[99,15815,15816],{"class":109},"    string m_Lover;",[99,15818,15819],{"class":168}," \u002F\u002F只写  情人\n",[99,15821,15822],{"class":101,"line":7959},[99,15823,3981],{"class":109},[99,15825,15826],{"class":101,"line":7964},[99,15827,2386],{"emptyLinePlaceholder":26},[99,15829,15830,15832,15834],{"class":101,"line":7970},[99,15831,113],{"class":105},[99,15833,1959],{"class":1949},[99,15835,10840],{"class":109},[99,15837,15838],{"class":101,"line":7997},[99,15839,2386],{"emptyLinePlaceholder":26},[99,15841,15842],{"class":101,"line":8002},[99,15843,15300],{"class":109},[99,15845,15846],{"class":101,"line":8008},[99,15847,15848],{"class":168},"    \u002F\u002F姓名设置\n",[99,15850,15851,15854,15856,15858,15860],{"class":101,"line":8020},[99,15852,15853],{"class":109},"    p.",[99,15855,15053],{"class":1949},[99,15857,110],{"class":109},[99,15859,7903],{"class":214},[99,15861,2705],{"class":109},[99,15863,15864,15866,15868,15871,15873,15876,15879,15881,15883],{"class":101,"line":8032},[99,15865,6516],{"class":109},[99,15867,1154],{"class":105},[99,15869,15870],{"class":214}," \"姓名： \"",[99,15872,1430],{"class":105},[99,15874,15875],{"class":109}," p.",[99,15877,15878],{"class":1949},"getName",[99,15880,13037],{"class":109},[99,15882,1154],{"class":105},[99,15884,8827],{"class":109},[99,15886,15887],{"class":101,"line":8044},[99,15888,2386],{"emptyLinePlaceholder":26},[99,15890,15891],{"class":101,"line":9703},[99,15892,15893],{"class":168},"    \u002F\u002F年龄设置\n",[99,15895,15896,15898,15901,15903,15905],{"class":101,"line":9728},[99,15897,15853],{"class":109},[99,15899,15900],{"class":1949},"setAge",[99,15902,110],{"class":109},[99,15904,766],{"class":158},[99,15906,2705],{"class":109},[99,15908,15909,15911,15913,15916,15918,15920,15923,15925,15927],{"class":101,"line":9751},[99,15910,6516],{"class":109},[99,15912,1154],{"class":105},[99,15914,15915],{"class":214}," \"年龄： \"",[99,15917,1430],{"class":105},[99,15919,15875],{"class":109},[99,15921,15922],{"class":1949},"getAge",[99,15924,13037],{"class":109},[99,15926,1154],{"class":105},[99,15928,8827],{"class":109},[99,15930,15931],{"class":101,"line":9775},[99,15932,2386],{"emptyLinePlaceholder":26},[99,15934,15935],{"class":101,"line":9780},[99,15936,15937],{"class":168},"    \u002F\u002F情人设置\n",[99,15939,15940,15942,15945,15947,15950],{"class":101,"line":9785},[99,15941,15853],{"class":109},[99,15943,15944],{"class":1949},"setLover",[99,15946,110],{"class":109},[99,15948,15949],{"class":214},"\"苍井\"",[99,15951,2705],{"class":109},[99,15953,15954,15957],{"class":101,"line":9790},[99,15955,15956],{"class":168},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[99,15958,15959],{"class":168},"  \u002F\u002F只写属性，不可以读取\n",[99,15961,15962],{"class":101,"line":9799},[99,15963,2386],{"emptyLinePlaceholder":26},[99,15965,15966,15968,15970,15972],{"class":101,"line":9804},[99,15967,2289],{"class":1949},[99,15969,110],{"class":109},[99,15971,2294],{"class":214},[99,15973,2705],{"class":109},[99,15975,15976],{"class":101,"line":9810},[99,15977,2386],{"emptyLinePlaceholder":26},[99,15979,15980,15982,15984],{"class":101,"line":9831},[99,15981,4076],{"class":105},[99,15983,4079],{"class":158},[99,15985,1276],{"class":109},[99,15987,15988],{"class":101,"line":9837},[99,15989,1551],{"class":109},[70,15991,15993],{"id":15992},"_814封装案例","8.1.4封装案例",[53,15995,15996],{},[56,15997,15998,16001],{},[259,15999,16000],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1117,16003,16004,16007],{},[56,16005,16006],{},"求出立方体的面积和体积",[56,16008,16009],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[90,16011,16013],{"className":92,"code":16012,"language":94,"meta":21,"style":21},"#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",[96,16014,16015,16021,16031,16038,16042,16046,16051,16081,16085,16095,16105,16115,16119,16128,16132,16168,16172,16181,16185,16201,16205,16210,16219,16223,16230,16234,16243,16247,16254,16258,16267,16271,16278,16282,16287,16304,16308,16354,16358,16367,16371,16375,16379,16388,16392,16396,16401,16405,16411,16417,16423,16427,16431,16436,16458,16462,16516,16520,16528,16532,16537,16542,16555,16562,16578,16589,16595,16618,16624,16647,16661,16681,16687,16698,16721,16743,16748,16754,16768,16781,16786,16800,16805,16811,16816,16830,16835,16840,16854,16866,16871,16884,16889,16894,16899,16912,16917],{"__ignoreMap":21},[99,16016,16017,16019],{"class":101,"line":102},[99,16018,1935],{"class":105},[99,16020,1938],{"class":214},[99,16022,16023,16025,16027,16029],{"class":101,"line":22},[99,16024,1943],{"class":105},[99,16026,1946],{"class":105},[99,16028,1950],{"class":1949},[99,16030,1276],{"class":109},[99,16032,16033,16035],{"class":101,"line":1165},[99,16034,14681],{"class":105},[99,16036,16037],{"class":1949}," Cube\n",[99,16039,16040],{"class":101,"line":1180},[99,16041,1532],{"class":109},[99,16043,16044],{"class":101,"line":1186},[99,16045,14703],{"class":105},[99,16047,16048],{"class":101,"line":1200},[99,16049,16050],{"class":168},"    \u002F\u002F输入长宽高\n",[99,16052,16053,16055,16058,16060,16062,16065,16067,16069,16072,16074,16076,16079],{"class":101,"line":1206},[99,16054,14896],{"class":105},[99,16056,16057],{"class":1949}," setLwh",[99,16059,110],{"class":109},[99,16061,113],{"class":105},[99,16063,16064],{"class":5203}," l",[99,16066,488],{"class":109},[99,16068,113],{"class":105},[99,16070,16071],{"class":5203}," w",[99,16073,488],{"class":109},[99,16075,113],{"class":105},[99,16077,16078],{"class":5203}," h",[99,16080,116],{"class":109},[99,16082,16083],{"class":101,"line":1297},[99,16084,2016],{"class":109},[99,16086,16087,16090,16092],{"class":101,"line":1303},[99,16088,16089],{"class":109},"        m_L",[99,16091,155],{"class":105},[99,16093,16094],{"class":109},"l;\n",[99,16096,16097,16100,16102],{"class":101,"line":1315},[99,16098,16099],{"class":109},"        m_W",[99,16101,155],{"class":105},[99,16103,16104],{"class":109},"w;\n",[99,16106,16107,16110,16112],{"class":101,"line":1598},[99,16108,16109],{"class":109},"        m_H",[99,16111,155],{"class":105},[99,16113,16114],{"class":109},"h;\n",[99,16116,16117],{"class":101,"line":1603},[99,16118,2173],{"class":109},[99,16120,16121,16123,16126],{"class":101,"line":1609},[99,16122,1971],{"class":105},[99,16124,16125],{"class":1949}," mianji",[99,16127,1962],{"class":109},[99,16129,16130],{"class":101,"line":1614},[99,16131,2016],{"class":109},[99,16133,16134,16136,16138,16140,16143,16145,16148,16150,16153,16155,16158,16160,16163,16165],{"class":101,"line":1628},[99,16135,14739],{"class":105},[99,16137,14742],{"class":158},[99,16139,565],{"class":105},[99,16141,16142],{"class":109},"(m_L",[99,16144,565],{"class":105},[99,16146,16147],{"class":109},"m_W ",[99,16149,591],{"class":105},[99,16151,16152],{"class":109}," m_L",[99,16154,565],{"class":105},[99,16156,16157],{"class":109},"m_H ",[99,16159,591],{"class":105},[99,16161,16162],{"class":109}," m_W",[99,16164,565],{"class":105},[99,16166,16167],{"class":109},"m_H);\n",[99,16169,16170],{"class":101,"line":1633},[99,16171,2173],{"class":109},[99,16173,16174,16176,16179],{"class":101,"line":1639},[99,16175,1971],{"class":105},[99,16177,16178],{"class":1949}," tiji",[99,16180,1962],{"class":109},[99,16182,16183],{"class":101,"line":1660},[99,16184,2016],{"class":109},[99,16186,16187,16189,16191,16193,16196,16198],{"class":101,"line":1665},[99,16188,14739],{"class":105},[99,16190,16152],{"class":109},[99,16192,565],{"class":105},[99,16194,16195],{"class":109},"m_W",[99,16197,565],{"class":105},[99,16199,16200],{"class":109},"m_H;\n",[99,16202,16203],{"class":101,"line":1679},[99,16204,2173],{"class":109},[99,16206,16207],{"class":101,"line":1684},[99,16208,16209],{"class":168},"    \u002F\u002F获取长宽高\n",[99,16211,16212,16214,16217],{"class":101,"line":1713},[99,16213,1971],{"class":105},[99,16215,16216],{"class":1949}," getLength",[99,16218,1962],{"class":109},[99,16220,16221],{"class":101,"line":1718},[99,16222,2016],{"class":109},[99,16224,16225,16227],{"class":101,"line":1735},[99,16226,14739],{"class":105},[99,16228,16229],{"class":109}," m_L;\n",[99,16231,16232],{"class":101,"line":1740},[99,16233,2173],{"class":109},[99,16235,16236,16238,16241],{"class":101,"line":1745},[99,16237,1971],{"class":105},[99,16239,16240],{"class":1949}," getWidth",[99,16242,1962],{"class":109},[99,16244,16245],{"class":101,"line":1750},[99,16246,2016],{"class":109},[99,16248,16249,16251],{"class":101,"line":1764},[99,16250,14739],{"class":105},[99,16252,16253],{"class":109}," m_W;\n",[99,16255,16256],{"class":101,"line":1769},[99,16257,2173],{"class":109},[99,16259,16260,16262,16265],{"class":101,"line":2563},[99,16261,1971],{"class":105},[99,16263,16264],{"class":1949}," getHeight",[99,16266,1962],{"class":109},[99,16268,16269],{"class":101,"line":2577},[99,16270,2016],{"class":109},[99,16272,16273,16275],{"class":101,"line":2585},[99,16274,14739],{"class":105},[99,16276,16277],{"class":109}," m_H;\n",[99,16279,16280],{"class":101,"line":2590},[99,16281,2173],{"class":109},[99,16283,16284],{"class":101,"line":2596},[99,16285,16286],{"class":168},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[99,16288,16289,16292,16295,16297,16300,16302],{"class":101,"line":2602},[99,16290,16291],{"class":105},"    bool",[99,16293,16294],{"class":1949}," isEqual",[99,16296,110],{"class":109},[99,16298,16299],{"class":1949},"Cube",[99,16301,2835],{"class":5203},[99,16303,116],{"class":109},[99,16305,16306],{"class":101,"line":2607},[99,16307,2016],{"class":109},[99,16309,16310,16312,16315,16318,16320,16322,16325,16327,16330,16333,16335,16337,16340,16342,16344,16347,16349,16351],{"class":101,"line":7935},[99,16311,2483],{"class":105},[99,16313,16314],{"class":109}," (c.",[99,16316,16317],{"class":1949},"getLength",[99,16319,13037],{"class":109},[99,16321,2935],{"class":105},[99,16323,16324],{"class":109}," m_L ",[99,16326,1701],{"class":105},[99,16328,16329],{"class":109}," c.",[99,16331,16332],{"class":1949},"getWidth",[99,16334,13037],{"class":109},[99,16336,2935],{"class":105},[99,16338,16339],{"class":109}," m_W ",[99,16341,1701],{"class":105},[99,16343,16329],{"class":109},[99,16345,16346],{"class":1949},"getHeight",[99,16348,13037],{"class":109},[99,16350,2935],{"class":105},[99,16352,16353],{"class":109}," m_H)\n",[99,16355,16356],{"class":101,"line":7959},[99,16357,2496],{"class":109},[99,16359,16360,16362,16365],{"class":101,"line":7964},[99,16361,15719],{"class":105},[99,16363,16364],{"class":158}," true",[99,16366,1276],{"class":109},[99,16368,16369],{"class":101,"line":7970},[99,16370,2515],{"class":109},[99,16372,16373],{"class":101,"line":7997},[99,16374,2556],{"class":105},[99,16376,16377],{"class":101,"line":8002},[99,16378,2496],{"class":109},[99,16380,16381,16383,16386],{"class":101,"line":8008},[99,16382,15719],{"class":105},[99,16384,16385],{"class":158}," false",[99,16387,1276],{"class":109},[99,16389,16390],{"class":101,"line":8020},[99,16391,2515],{"class":109},[99,16393,16394],{"class":101,"line":8032},[99,16395,2173],{"class":109},[99,16397,16398],{"class":101,"line":8044},[99,16399,16400],{"class":168},"    \u002F\u002F私有属性\n",[99,16402,16403],{"class":101,"line":9703},[99,16404,15209],{"class":105},[99,16406,16407,16409],{"class":101,"line":9728},[99,16408,1971],{"class":105},[99,16410,16229],{"class":109},[99,16412,16413,16415],{"class":101,"line":9751},[99,16414,1971],{"class":105},[99,16416,16253],{"class":109},[99,16418,16419,16421],{"class":101,"line":9775},[99,16420,1971],{"class":105},[99,16422,16277],{"class":109},[99,16424,16425],{"class":101,"line":9780},[99,16426,2386],{"emptyLinePlaceholder":26},[99,16428,16429],{"class":101,"line":9785},[99,16430,3981],{"class":109},[99,16432,16433],{"class":101,"line":9790},[99,16434,16435],{"class":168},"\u002F\u002F全局函数判断两个立方体是否相等\n",[99,16437,16438,16440,16442,16444,16446,16449,16451,16453,16456],{"class":101,"line":9799},[99,16439,1340],{"class":105},[99,16441,16294],{"class":1949},[99,16443,110],{"class":109},[99,16445,16299],{"class":1949},[99,16447,16448],{"class":5203}," c1",[99,16450,488],{"class":109},[99,16452,16299],{"class":1949},[99,16454,16455],{"class":5203}," c2",[99,16457,116],{"class":109},[99,16459,16460],{"class":101,"line":9804},[99,16461,1532],{"class":109},[99,16463,16464,16466,16469,16471,16473,16475,16478,16480,16483,16485,16487,16489,16491,16493,16495,16497,16499,16501,16503,16505,16507,16509,16511,16513],{"class":101,"line":9810},[99,16465,4076],{"class":105},[99,16467,16468],{"class":109}," (c1.",[99,16470,16317],{"class":1949},[99,16472,13037],{"class":109},[99,16474,2935],{"class":105},[99,16476,16477],{"class":109}," c2.",[99,16479,16317],{"class":1949},[99,16481,16482],{"class":109},"()) ",[99,16484,1701],{"class":105},[99,16486,16468],{"class":109},[99,16488,16332],{"class":1949},[99,16490,13037],{"class":109},[99,16492,2935],{"class":105},[99,16494,16477],{"class":109},[99,16496,16332],{"class":1949},[99,16498,16482],{"class":109},[99,16500,1701],{"class":105},[99,16502,16468],{"class":109},[99,16504,16346],{"class":1949},[99,16506,13037],{"class":109},[99,16508,2935],{"class":105},[99,16510,16477],{"class":109},[99,16512,16346],{"class":1949},[99,16514,16515],{"class":109},"());\n",[99,16517,16518],{"class":101,"line":9831},[99,16519,1551],{"class":109},[99,16521,16522,16524,16526],{"class":101,"line":9837},[99,16523,113],{"class":105},[99,16525,1959],{"class":1949},[99,16527,1962],{"class":109},[99,16529,16530],{"class":101,"line":9851},[99,16531,1532],{"class":109},[99,16533,16534],{"class":101,"line":9857},[99,16535,16536],{"class":109},"    Cube c1;\n",[99,16538,16539],{"class":101,"line":9884},[99,16540,16541],{"class":168},"    \u002F\u002F输入立方体的长宽高\n",[99,16543,16544,16546,16548,16551,16553],{"class":101,"line":9893},[99,16545,1537],{"class":109},[99,16547,1154],{"class":105},[99,16549,16550],{"class":214},"\"请输入第一个立方体的长、宽、高：\"",[99,16552,1154],{"class":105},[99,16554,1177],{"class":109},[99,16556,16557,16559],{"class":101,"line":9899},[99,16558,1971],{"class":105},[99,16560,16561],{"class":109}," l,w,h,l1,w1,h1;\n",[99,16563,16564,16566,16568,16570,16572,16574,16576],{"class":101,"line":9907},[99,16565,1998],{"class":109},[99,16567,1415],{"class":105},[99,16569,628],{"class":109},[99,16571,1415],{"class":105},[99,16573,905],{"class":109},[99,16575,1415],{"class":105},[99,16577,16114],{"class":109},[99,16579,16580,16583,16586],{"class":101,"line":9912},[99,16581,16582],{"class":109},"    c1.",[99,16584,16585],{"class":1949},"setLwh",[99,16587,16588],{"class":109},"(l,w,h);\n",[99,16590,16592],{"class":101,"line":16591},66,[99,16593,16594],{"class":168},"    \u002F\u002F面积\n",[99,16596,16598,16600,16602,16605,16607,16609,16612,16614,16616],{"class":101,"line":16597},67,[99,16599,1537],{"class":109},[99,16601,1154],{"class":105},[99,16603,16604],{"class":214},"\"立方体的表面积为：\"",[99,16606,1154],{"class":105},[99,16608,14817],{"class":109},[99,16610,16611],{"class":1949},"mianji",[99,16613,2413],{"class":109},[99,16615,1154],{"class":105},[99,16617,1177],{"class":109},[99,16619,16621],{"class":101,"line":16620},68,[99,16622,16623],{"class":168},"    \u002F\u002F体积\n",[99,16625,16627,16629,16631,16634,16636,16638,16641,16643,16645],{"class":101,"line":16626},69,[99,16628,1537],{"class":109},[99,16630,1154],{"class":105},[99,16632,16633],{"class":214},"\"立方体的体积为：\"",[99,16635,1154],{"class":105},[99,16637,14817],{"class":109},[99,16639,16640],{"class":1949},"tiji",[99,16642,2413],{"class":109},[99,16644,1154],{"class":105},[99,16646,1177],{"class":109},[99,16648,16650,16652,16654,16657,16659],{"class":101,"line":16649},70,[99,16651,1537],{"class":109},[99,16653,1154],{"class":105},[99,16655,16656],{"class":214},"\"请输入第二个立方体的长、宽、高：\"",[99,16658,1154],{"class":105},[99,16660,1177],{"class":109},[99,16662,16664,16666,16668,16671,16673,16676,16678],{"class":101,"line":16663},71,[99,16665,1998],{"class":109},[99,16667,1415],{"class":105},[99,16669,16670],{"class":109},"l1",[99,16672,1415],{"class":105},[99,16674,16675],{"class":109},"w1",[99,16677,1415],{"class":105},[99,16679,16680],{"class":109},"h1;\n",[99,16682,16684],{"class":101,"line":16683},72,[99,16685,16686],{"class":109},"    Cube c2;\n",[99,16688,16690,16693,16695],{"class":101,"line":16689},73,[99,16691,16692],{"class":109},"    c2.",[99,16694,16585],{"class":1949},[99,16696,16697],{"class":109},"(l1,w1,h1);\n",[99,16699,16701,16703,16705,16708,16710,16713,16715,16717,16719],{"class":101,"line":16700},74,[99,16702,1537],{"class":109},[99,16704,1154],{"class":105},[99,16706,16707],{"class":214},"\"第二个立方体的表面积为：\"",[99,16709,1154],{"class":105},[99,16711,16712],{"class":109},"c2.",[99,16714,16611],{"class":1949},[99,16716,2413],{"class":109},[99,16718,1154],{"class":105},[99,16720,1177],{"class":109},[99,16722,16724,16726,16728,16731,16733,16735,16737,16739,16741],{"class":101,"line":16723},75,[99,16725,1537],{"class":109},[99,16727,1154],{"class":105},[99,16729,16730],{"class":214},"\"第二个立方体的体积为：\"",[99,16732,1154],{"class":105},[99,16734,16712],{"class":109},[99,16736,16640],{"class":1949},[99,16738,2413],{"class":109},[99,16740,1154],{"class":105},[99,16742,1177],{"class":109},[99,16744,16746],{"class":101,"line":16745},76,[99,16747,2386],{"emptyLinePlaceholder":26},[99,16749,16751],{"class":101,"line":16750},77,[99,16752,16753],{"class":168},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[99,16755,16757,16759,16761,16764,16766],{"class":101,"line":16756},78,[99,16758,1537],{"class":109},[99,16760,1154],{"class":105},[99,16762,16763],{"class":214},"\"内部函数判断结果：\"",[99,16765,1154],{"class":105},[99,16767,1177],{"class":109},[99,16769,16771,16773,16775,16778],{"class":101,"line":16770},79,[99,16772,3087],{"class":105},[99,16774,16468],{"class":109},[99,16776,16777],{"class":1949},"isEqual",[99,16779,16780],{"class":109},"(c2))\n",[99,16782,16784],{"class":101,"line":16783},80,[99,16785,2016],{"class":109},[99,16787,16789,16791,16793,16796,16798],{"class":101,"line":16788},81,[99,16790,3437],{"class":109},[99,16792,1154],{"class":105},[99,16794,16795],{"class":214},"\"两个立方体相等\"",[99,16797,1154],{"class":105},[99,16799,1177],{"class":109},[99,16801,16803],{"class":101,"line":16802},82,[99,16804,2173],{"class":109},[99,16806,16808],{"class":101,"line":16807},83,[99,16809,16810],{"class":105},"    else\n",[99,16812,16814],{"class":101,"line":16813},84,[99,16815,2016],{"class":109},[99,16817,16819,16821,16823,16826,16828],{"class":101,"line":16818},85,[99,16820,3437],{"class":109},[99,16822,1154],{"class":105},[99,16824,16825],{"class":214},"\"两个立方体不相等\"",[99,16827,1154],{"class":105},[99,16829,1177],{"class":109},[99,16831,16833],{"class":101,"line":16832},86,[99,16834,2173],{"class":109},[99,16836,16838],{"class":101,"line":16837},87,[99,16839,2386],{"emptyLinePlaceholder":26},[99,16841,16843,16845,16847,16850,16852],{"class":101,"line":16842},88,[99,16844,1537],{"class":109},[99,16846,1154],{"class":105},[99,16848,16849],{"class":214},"\"全局函数判断结果：\"",[99,16851,1154],{"class":105},[99,16853,1177],{"class":109},[99,16855,16857,16859,16861,16863],{"class":101,"line":16856},89,[99,16858,3087],{"class":105},[99,16860,1644],{"class":109},[99,16862,16777],{"class":1949},[99,16864,16865],{"class":109},"(c1, c2))\n",[99,16867,16869],{"class":101,"line":16868},90,[99,16870,2016],{"class":109},[99,16872,16874,16876,16878,16880,16882],{"class":101,"line":16873},91,[99,16875,3437],{"class":109},[99,16877,1154],{"class":105},[99,16879,16795],{"class":214},[99,16881,1154],{"class":105},[99,16883,1177],{"class":109},[99,16885,16887],{"class":101,"line":16886},92,[99,16888,2173],{"class":109},[99,16890,16892],{"class":101,"line":16891},93,[99,16893,16810],{"class":105},[99,16895,16897],{"class":101,"line":16896},94,[99,16898,2016],{"class":109},[99,16900,16902,16904,16906,16908,16910],{"class":101,"line":16901},95,[99,16903,3437],{"class":109},[99,16905,1154],{"class":105},[99,16907,16825],{"class":214},[99,16909,1154],{"class":105},[99,16911,1177],{"class":109},[99,16913,16915],{"class":101,"line":16914},96,[99,16916,2173],{"class":109},[99,16918,16920],{"class":101,"line":16919},97,[99,16921,1551],{"class":109},[53,16923,16924],{"start":22},[56,16925,16926],{},[259,16927,16928],{},"练习案例2：点和圆的关系",[1117,16930,16931],{},[56,16932,16933],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[90,16935,16937],{"className":92,"code":16936,"language":94,"meta":21,"style":21},"#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",[96,16938,16939,16945,16955,16962,16969,16973,16977,16982,17016,17021,17037,17051,17055,17059,17066,17073,17077,17083,17087,17091,17095,17117,17140,17145,17159,17174,17178,17182,17188,17193,17198,17202,17228,17232,17262,17290,17318,17335,17339,17352,17356,17360,17364,17377,17381,17385,17393,17397,17401,17405,17410,17414,17425,17432,17441,17451,17462,17469,17482,17493,17503,17514,17521,17535,17540,17550,17558],{"__ignoreMap":21},[99,16940,16941,16943],{"class":101,"line":102},[99,16942,1935],{"class":105},[99,16944,1938],{"class":214},[99,16946,16947,16949,16951,16953],{"class":101,"line":22},[99,16948,1943],{"class":105},[99,16950,1946],{"class":105},[99,16952,1950],{"class":1949},[99,16954,1276],{"class":109},[99,16956,16957,16959],{"class":101,"line":1165},[99,16958,1935],{"class":105},[99,16960,16961],{"class":214},"\u003Ccmath>\n",[99,16963,16964,16966],{"class":101,"line":1180},[99,16965,14681],{"class":105},[99,16967,16968],{"class":1949}," Point\n",[99,16970,16971],{"class":101,"line":1186},[99,16972,1532],{"class":109},[99,16974,16975],{"class":101,"line":1200},[99,16976,14703],{"class":105},[99,16978,16979],{"class":101,"line":1206},[99,16980,16981],{"class":168},"    \u002F\u002F赋值\n",[99,16983,16984,16986,16989,16991,16993,16996,16998,17000,17003,17006,17008,17011,17013],{"class":101,"line":1297},[99,16985,14896],{"class":105},[99,16987,16988],{"class":1949}," setPoint",[99,16990,110],{"class":109},[99,16992,14024],{"class":105},[99,16994,16995],{"class":5203}," x",[99,16997,12422],{"class":109},[99,16999,14024],{"class":105},[99,17001,17002],{"class":5203}," y",[99,17004,17005],{"class":109},") { m_x ",[99,17007,155],{"class":105},[99,17009,17010],{"class":109}," x; m_y ",[99,17012,155],{"class":105},[99,17014,17015],{"class":109}," y; }\n",[99,17017,17018],{"class":101,"line":1303},[99,17019,17020],{"class":168},"    \u002F\u002F获取坐标\n",[99,17022,17023,17025,17028,17031,17034],{"class":101,"line":1315},[99,17024,14725],{"class":105},[99,17026,17027],{"class":1949}," getX",[99,17029,17030],{"class":109},"() { ",[99,17032,17033],{"class":105},"return",[99,17035,17036],{"class":109}," m_x; }\n",[99,17038,17039,17041,17044,17046,17048],{"class":101,"line":1598},[99,17040,14725],{"class":105},[99,17042,17043],{"class":1949}," getY",[99,17045,17030],{"class":109},[99,17047,17033],{"class":105},[99,17049,17050],{"class":109}," m_y; }\n",[99,17052,17053],{"class":101,"line":1603},[99,17054,2386],{"emptyLinePlaceholder":26},[99,17056,17057],{"class":101,"line":1609},[99,17058,15209],{"class":105},[99,17060,17061,17063],{"class":101,"line":1614},[99,17062,14725],{"class":105},[99,17064,17065],{"class":109}," m_x;\n",[99,17067,17068,17070],{"class":101,"line":1628},[99,17069,14725],{"class":105},[99,17071,17072],{"class":109}," m_y;\n",[99,17074,17075],{"class":101,"line":1633},[99,17076,3981],{"class":109},[99,17078,17079,17081],{"class":101,"line":1639},[99,17080,14681],{"class":105},[99,17082,14684],{"class":1949},[99,17084,17085],{"class":101,"line":1660},[99,17086,1532],{"class":109},[99,17088,17089],{"class":101,"line":1665},[99,17090,14703],{"class":105},[99,17092,17093],{"class":101,"line":1679},[99,17094,16981],{"class":168},[99,17096,17097,17099,17102,17104,17106,17109,17112,17114],{"class":101,"line":1684},[99,17098,14896],{"class":105},[99,17100,17101],{"class":1949}," setRadius",[99,17103,110],{"class":109},[99,17105,14024],{"class":105},[99,17107,17108],{"class":5203}," r",[99,17110,17111],{"class":109},") { m_r ",[99,17113,155],{"class":105},[99,17115,17116],{"class":109}," r; }\n",[99,17118,17119,17121,17124,17126,17129,17132,17135,17137],{"class":101,"line":1713},[99,17120,14896],{"class":105},[99,17122,17123],{"class":1949}," setCenter",[99,17125,110],{"class":109},[99,17127,17128],{"class":1949},"Point",[99,17130,17131],{"class":5203}," center",[99,17133,17134],{"class":109},") { m_center ",[99,17136,155],{"class":105},[99,17138,17139],{"class":109}," center; }\n",[99,17141,17142],{"class":101,"line":1718},[99,17143,17144],{"class":168},"    \u002F\u002F获取属性\n",[99,17146,17147,17149,17152,17154,17156],{"class":101,"line":1735},[99,17148,14725],{"class":105},[99,17150,17151],{"class":1949}," getRadius",[99,17153,17030],{"class":109},[99,17155,17033],{"class":105},[99,17157,17158],{"class":109}," m_r; }\n",[99,17160,17161,17164,17167,17169,17171],{"class":101,"line":1740},[99,17162,17163],{"class":1949},"    Point",[99,17165,17166],{"class":1949}," getCenter",[99,17168,17030],{"class":109},[99,17170,17033],{"class":105},[99,17172,17173],{"class":109}," m_center; }\n",[99,17175,17176],{"class":101,"line":1745},[99,17177,2386],{"emptyLinePlaceholder":26},[99,17179,17180],{"class":101,"line":1750},[99,17181,15209],{"class":105},[99,17183,17184,17186],{"class":101,"line":1764},[99,17185,14725],{"class":105},[99,17187,14715],{"class":109},[99,17189,17190],{"class":101,"line":1769},[99,17191,17192],{"class":168},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[99,17194,17195],{"class":101,"line":2563},[99,17196,17197],{"class":109},"    Point m_center;\n",[99,17199,17200],{"class":101,"line":2577},[99,17201,3981],{"class":109},[99,17203,17204,17206,17209,17211,17214,17216,17218,17220,17222,17224,17226],{"class":101,"line":2585},[99,17205,5351],{"class":105},[99,17207,17208],{"class":1949}," isInCircle",[99,17210,110],{"class":109},[99,17212,17213],{"class":1949},"Circle",[99,17215,10571],{"class":105},[99,17217,398],{"class":5203},[99,17219,488],{"class":109},[99,17221,17128],{"class":1949},[99,17223,10571],{"class":105},[99,17225,14],{"class":5203},[99,17227,116],{"class":109},[99,17229,17230],{"class":101,"line":2590},[99,17231,1532],{"class":109},[99,17233,17234,17236,17239,17241,17243,17246,17249,17252,17254,17256,17258,17260],{"class":101,"line":2596},[99,17235,14725],{"class":105},[99,17237,17238],{"class":109}," dx ",[99,17240,155],{"class":105},[99,17242,16329],{"class":109},[99,17244,17245],{"class":1949},"getCenter",[99,17247,17248],{"class":109},"().",[99,17250,17251],{"class":1949},"getX",[99,17253,13037],{"class":109},[99,17255,642],{"class":105},[99,17257,15875],{"class":109},[99,17259,17251],{"class":1949},[99,17261,5623],{"class":109},[99,17263,17264,17266,17269,17271,17273,17275,17277,17280,17282,17284,17286,17288],{"class":101,"line":2602},[99,17265,14725],{"class":105},[99,17267,17268],{"class":109}," dy ",[99,17270,155],{"class":105},[99,17272,16329],{"class":109},[99,17274,17245],{"class":1949},[99,17276,17248],{"class":109},[99,17278,17279],{"class":1949},"getY",[99,17281,13037],{"class":109},[99,17283,642],{"class":105},[99,17285,15875],{"class":109},[99,17287,17279],{"class":1949},[99,17289,5623],{"class":109},[99,17291,17292,17294,17297,17299,17302,17305,17307,17309,17311,17313,17315],{"class":101,"line":2607},[99,17293,14725],{"class":105},[99,17295,17296],{"class":109}," distance ",[99,17298,155],{"class":105},[99,17300,17301],{"class":1949}," sqrt",[99,17303,17304],{"class":109},"(dx ",[99,17306,565],{"class":105},[99,17308,17238],{"class":109},[99,17310,591],{"class":105},[99,17312,17268],{"class":109},[99,17314,565],{"class":105},[99,17316,17317],{"class":109}," dy);\n",[99,17319,17320,17322,17325,17327,17329,17332],{"class":101,"line":7935},[99,17321,3087],{"class":105},[99,17323,17324],{"class":109}," (distance ",[99,17326,1020],{"class":105},[99,17328,16329],{"class":109},[99,17330,17331],{"class":1949},"getRadius",[99,17333,17334],{"class":109},"())\n",[99,17336,17337],{"class":101,"line":7959},[99,17338,2016],{"class":109},[99,17340,17341,17343,17345,17348,17350],{"class":101,"line":7964},[99,17342,9656],{"class":109},[99,17344,1154],{"class":105},[99,17346,17347],{"class":214}," \"点在圆内\"",[99,17349,1430],{"class":105},[99,17351,8827],{"class":109},[99,17353,17354],{"class":101,"line":7970},[99,17355,2173],{"class":109},[99,17357,17358],{"class":101,"line":7997},[99,17359,16810],{"class":105},[99,17361,17362],{"class":101,"line":8002},[99,17363,2016],{"class":109},[99,17365,17366,17368,17370,17373,17375],{"class":101,"line":8008},[99,17367,9656],{"class":109},[99,17369,1154],{"class":105},[99,17371,17372],{"class":214}," \"点在圆外\"",[99,17374,1430],{"class":105},[99,17376,8827],{"class":109},[99,17378,17379],{"class":101,"line":8020},[99,17380,2173],{"class":109},[99,17382,17383],{"class":101,"line":8032},[99,17384,1551],{"class":109},[99,17386,17387,17389,17391],{"class":101,"line":8044},[99,17388,113],{"class":105},[99,17390,1959],{"class":1949},[99,17392,1962],{"class":109},[99,17394,17395],{"class":101,"line":9703},[99,17396,1532],{"class":109},[99,17398,17399],{"class":101,"line":9728},[99,17400,15040],{"class":168},[99,17402,17403],{"class":101,"line":9751},[99,17404,14787],{"class":109},[99,17406,17407],{"class":101,"line":9775},[99,17408,17409],{"class":109},"    Point p1;\n",[99,17411,17412],{"class":101,"line":9780},[99,17413,16981],{"class":168},[99,17415,17416,17418,17420,17423],{"class":101,"line":9785},[99,17417,1537],{"class":109},[99,17419,1154],{"class":105},[99,17421,17422],{"class":214},"\"请输入圆的半径：\"",[99,17424,1276],{"class":109},[99,17426,17427,17429],{"class":101,"line":9790},[99,17428,14725],{"class":105},[99,17430,17431],{"class":109}," r;\n",[99,17433,17434,17436,17438],{"class":101,"line":9799},[99,17435,1998],{"class":109},[99,17437,1415],{"class":105},[99,17439,17440],{"class":109},"r;\n",[99,17442,17443,17445,17448],{"class":101,"line":9804},[99,17444,16582],{"class":109},[99,17446,17447],{"class":1949},"setRadius",[99,17449,17450],{"class":109},"(r);\n",[99,17452,17453,17455,17457,17460],{"class":101,"line":9810},[99,17454,1537],{"class":109},[99,17456,1154],{"class":105},[99,17458,17459],{"class":214},"\"请输入圆心坐标：\"",[99,17461,1276],{"class":109},[99,17463,17464,17466],{"class":101,"line":9831},[99,17465,14725],{"class":105},[99,17467,17468],{"class":109}," x, y;\n",[99,17470,17471,17473,17475,17477,17479],{"class":101,"line":9837},[99,17472,1998],{"class":109},[99,17474,1415],{"class":105},[99,17476,930],{"class":109},[99,17478,1415],{"class":105},[99,17480,17481],{"class":109},"y;\n",[99,17483,17484,17487,17490],{"class":101,"line":9851},[99,17485,17486],{"class":109},"    p1.",[99,17488,17489],{"class":1949},"setPoint",[99,17491,17492],{"class":109},"(x, y);\n",[99,17494,17495,17497,17500],{"class":101,"line":9857},[99,17496,16582],{"class":109},[99,17498,17499],{"class":1949},"setCenter",[99,17501,17502],{"class":109},"(p1);\n",[99,17504,17505,17507,17509,17512],{"class":101,"line":9884},[99,17506,1537],{"class":109},[99,17508,1154],{"class":105},[99,17510,17511],{"class":214},"\"请输入测试点坐标：\"",[99,17513,1276],{"class":109},[99,17515,17516,17518],{"class":101,"line":9893},[99,17517,14725],{"class":105},[99,17519,17520],{"class":109}," x1, y1;\n",[99,17522,17523,17525,17527,17530,17532],{"class":101,"line":9899},[99,17524,1998],{"class":109},[99,17526,1415],{"class":105},[99,17528,17529],{"class":109},"x1",[99,17531,1415],{"class":105},[99,17533,17534],{"class":109},"y1;\n",[99,17536,17537],{"class":101,"line":9907},[99,17538,17539],{"class":109},"    Point p2;\n",[99,17541,17542,17545,17547],{"class":101,"line":9912},[99,17543,17544],{"class":109},"    p2.",[99,17546,17489],{"class":1949},[99,17548,17549],{"class":109},"(x1, y1);\n",[99,17551,17552,17555],{"class":101,"line":16591},[99,17553,17554],{"class":1949},"    isInCircle",[99,17556,17557],{"class":109},"(c1, p2);\n",[99,17559,17560],{"class":101,"line":16597},[99,17561,1551],{"class":109},[14,17563,17564],{},"在类中可以让另一个类作为本来的成员",[14,17566,17567],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17569,17570],{},"创建point.h",[90,17572,17574],{"className":92,"code":17573,"language":94,"meta":21,"style":21},"#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",[96,17575,17576,17587,17593,17603,17609,17613,17618,17622,17626,17646,17650,17658,17666,17670,17674,17680,17686],{"__ignoreMap":21},[99,17577,17578,17581,17584],{"class":101,"line":102},[99,17579,17580],{"class":105},"#pragma",[99,17582,17583],{"class":1949}," once",[99,17585,17586],{"class":168}," \u002F\u002F防止头文件重复包含\n",[99,17588,17589,17591],{"class":101,"line":22},[99,17590,1935],{"class":105},[99,17592,1938],{"class":214},[99,17594,17595,17597,17599,17601],{"class":101,"line":1165},[99,17596,1943],{"class":105},[99,17598,1946],{"class":105},[99,17600,1950],{"class":1949},[99,17602,1276],{"class":109},[99,17604,17605,17607],{"class":101,"line":1180},[99,17606,14681],{"class":105},[99,17608,16968],{"class":1949},[99,17610,17611],{"class":101,"line":1186},[99,17612,1532],{"class":109},[99,17614,17615],{"class":101,"line":1200},[99,17616,17617],{"class":168},"\u002F\u002F做好声明与变量定义就可以\n",[99,17619,17620],{"class":101,"line":1206},[99,17621,14703],{"class":105},[99,17623,17624],{"class":101,"line":1297},[99,17625,16981],{"class":168},[99,17627,17628,17630,17632,17634,17636,17638,17640,17642,17644],{"class":101,"line":1303},[99,17629,14896],{"class":105},[99,17631,16988],{"class":1949},[99,17633,110],{"class":109},[99,17635,14024],{"class":105},[99,17637,16995],{"class":5203},[99,17639,12422],{"class":109},[99,17641,14024],{"class":105},[99,17643,17002],{"class":5203},[99,17645,2705],{"class":109},[99,17647,17648],{"class":101,"line":1315},[99,17649,17020],{"class":168},[99,17651,17652,17654,17656],{"class":101,"line":1598},[99,17653,14725],{"class":105},[99,17655,17027],{"class":1949},[99,17657,5623],{"class":109},[99,17659,17660,17662,17664],{"class":101,"line":1603},[99,17661,14725],{"class":105},[99,17663,17043],{"class":1949},[99,17665,5623],{"class":109},[99,17667,17668],{"class":101,"line":1609},[99,17669,2386],{"emptyLinePlaceholder":26},[99,17671,17672],{"class":101,"line":1614},[99,17673,15209],{"class":105},[99,17675,17676,17678],{"class":101,"line":1628},[99,17677,14725],{"class":105},[99,17679,17065],{"class":109},[99,17681,17682,17684],{"class":101,"line":1633},[99,17683,14725],{"class":105},[99,17685,17072],{"class":109},[99,17687,17688],{"class":101,"line":1639},[99,17689,3981],{"class":109},[14,17691,17692],{},"创建point.cpp",[90,17694,17696],{"className":92,"code":17695,"language":94,"meta":21,"style":21},"#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",[96,17697,17698,17705,17710,17744,17748,17764],{"__ignoreMap":21},[99,17699,17700,17702],{"class":101,"line":102},[99,17701,1935],{"class":105},[99,17703,17704],{"class":214},"\u003Cpoint.h>\n",[99,17706,17707],{"class":101,"line":22},[99,17708,17709],{"class":168},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[99,17711,17712,17714,17717,17720,17722,17724,17726,17728,17730,17732,17734,17736,17738,17740,17742],{"class":101,"line":1165},[99,17713,14896],{"class":105},[99,17715,17716],{"class":1949}," Point",[99,17718,17719],{"class":109},"::",[99,17721,17489],{"class":1949},[99,17723,110],{"class":109},[99,17725,14024],{"class":105},[99,17727,16995],{"class":5203},[99,17729,12422],{"class":109},[99,17731,14024],{"class":105},[99,17733,17002],{"class":5203},[99,17735,17005],{"class":109},[99,17737,155],{"class":105},[99,17739,17010],{"class":109},[99,17741,155],{"class":105},[99,17743,17015],{"class":109},[99,17745,17746],{"class":101,"line":1180},[99,17747,17020],{"class":168},[99,17749,17750,17752,17754,17756,17758,17760,17762],{"class":101,"line":1186},[99,17751,14725],{"class":105},[99,17753,17716],{"class":1949},[99,17755,17719],{"class":109},[99,17757,17251],{"class":1949},[99,17759,17030],{"class":109},[99,17761,17033],{"class":105},[99,17763,17036],{"class":109},[99,17765,17766,17768,17770,17772,17774,17776,17778],{"class":101,"line":1200},[99,17767,14725],{"class":105},[99,17769,17716],{"class":1949},[99,17771,17719],{"class":109},[99,17773,17279],{"class":1949},[99,17775,17030],{"class":109},[99,17777,17033],{"class":105},[99,17779,17050],{"class":109},[14,17781,17782],{},"创建circle.h",[90,17784,17786],{"className":92,"code":17785,"language":94,"meta":21,"style":21},"#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",[96,17787,17788,17795,17801,17811,17817,17823,17827,17831,17835,17849,17863,17867,17875,17883,17887,17891,17897,17901,17905],{"__ignoreMap":21},[99,17789,17790,17792],{"class":101,"line":102},[99,17791,17580],{"class":105},[99,17793,17794],{"class":1949}," once\n",[99,17796,17797,17799],{"class":101,"line":22},[99,17798,1935],{"class":105},[99,17800,1938],{"class":214},[99,17802,17803,17805,17807,17809],{"class":101,"line":1165},[99,17804,1943],{"class":105},[99,17806,1946],{"class":105},[99,17808,1950],{"class":1949},[99,17810,1276],{"class":109},[99,17812,17813,17815],{"class":101,"line":1180},[99,17814,1935],{"class":105},[99,17816,17704],{"class":214},[99,17818,17819,17821],{"class":101,"line":1186},[99,17820,14681],{"class":105},[99,17822,14684],{"class":1949},[99,17824,17825],{"class":101,"line":1200},[99,17826,1532],{"class":109},[99,17828,17829],{"class":101,"line":1206},[99,17830,14703],{"class":105},[99,17832,17833],{"class":101,"line":1297},[99,17834,16981],{"class":168},[99,17836,17837,17839,17841,17843,17845,17847],{"class":101,"line":1303},[99,17838,14896],{"class":105},[99,17840,17101],{"class":1949},[99,17842,110],{"class":109},[99,17844,14024],{"class":105},[99,17846,17108],{"class":5203},[99,17848,2705],{"class":109},[99,17850,17851,17853,17855,17857,17859,17861],{"class":101,"line":1315},[99,17852,14896],{"class":105},[99,17854,17123],{"class":1949},[99,17856,110],{"class":109},[99,17858,17128],{"class":1949},[99,17860,17131],{"class":5203},[99,17862,2705],{"class":109},[99,17864,17865],{"class":101,"line":1598},[99,17866,17144],{"class":168},[99,17868,17869,17871,17873],{"class":101,"line":1603},[99,17870,14725],{"class":105},[99,17872,17151],{"class":1949},[99,17874,5623],{"class":109},[99,17876,17877,17879,17881],{"class":101,"line":1609},[99,17878,17163],{"class":1949},[99,17880,17166],{"class":1949},[99,17882,5623],{"class":109},[99,17884,17885],{"class":101,"line":1614},[99,17886,2386],{"emptyLinePlaceholder":26},[99,17888,17889],{"class":101,"line":1628},[99,17890,15209],{"class":105},[99,17892,17893,17895],{"class":101,"line":1633},[99,17894,14725],{"class":105},[99,17896,14715],{"class":109},[99,17898,17899],{"class":101,"line":1639},[99,17900,17192],{"class":168},[99,17902,17903],{"class":101,"line":1660},[99,17904,17197],{"class":109},[99,17906,17907],{"class":101,"line":1665},[99,17908,3981],{"class":109},[14,17910,17911],{},"创建circle.cpp",[90,17913,17915],{"className":92,"code":17914,"language":94,"meta":21,"style":21},"#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",[96,17916,17917,17924,17947,17969,17974,17990],{"__ignoreMap":21},[99,17918,17919,17921],{"class":101,"line":102},[99,17920,1935],{"class":105},[99,17922,17923],{"class":214},"\u003Ccircle.h>\n",[99,17925,17926,17928,17931,17933,17935,17937,17939,17941,17943,17945],{"class":101,"line":22},[99,17927,5351],{"class":105},[99,17929,17930],{"class":1949}," Circle",[99,17932,17719],{"class":109},[99,17934,17447],{"class":1949},[99,17936,110],{"class":109},[99,17938,14024],{"class":105},[99,17940,17108],{"class":5203},[99,17942,17111],{"class":109},[99,17944,155],{"class":105},[99,17946,17116],{"class":109},[99,17948,17949,17951,17953,17955,17957,17959,17961,17963,17965,17967],{"class":101,"line":1165},[99,17950,5351],{"class":105},[99,17952,17930],{"class":1949},[99,17954,17719],{"class":109},[99,17956,17499],{"class":1949},[99,17958,110],{"class":109},[99,17960,17128],{"class":1949},[99,17962,17131],{"class":5203},[99,17964,17134],{"class":109},[99,17966,155],{"class":105},[99,17968,17139],{"class":109},[99,17970,17971],{"class":101,"line":1180},[99,17972,17973],{"class":168},"\u002F\u002F获取属性\n",[99,17975,17976,17978,17980,17982,17984,17986,17988],{"class":101,"line":1186},[99,17977,14024],{"class":105},[99,17979,17930],{"class":1949},[99,17981,17719],{"class":109},[99,17983,17331],{"class":1949},[99,17985,17030],{"class":109},[99,17987,17033],{"class":105},[99,17989,17158],{"class":109},[99,17991,17992,17994,17996,17998,18000,18002,18004],{"class":101,"line":1200},[99,17993,17128],{"class":1949},[99,17995,17930],{"class":1949},[99,17997,17719],{"class":109},[99,17999,17245],{"class":1949},[99,18001,17030],{"class":109},[99,18003,17033],{"class":105},[99,18005,17173],{"class":109},[14,18007,18008],{},"使用封装的类",[90,18010,18012],{"className":92,"code":18011,"language":94,"meta":21,"style":21},"#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",[96,18013,18014,18020,18030,18036,18042,18066,18070,18096,18122,18146,18160,18164,18176,18180,18184,18188,18200,18204,18208,18216,18220,18224,18228,18232,18236,18246,18252,18260,18268,18278,18284,18296,18304,18312,18322,18328,18340,18344,18352,18358],{"__ignoreMap":21},[99,18015,18016,18018],{"class":101,"line":102},[99,18017,1935],{"class":105},[99,18019,1938],{"class":214},[99,18021,18022,18024,18026,18028],{"class":101,"line":22},[99,18023,1943],{"class":105},[99,18025,1946],{"class":105},[99,18027,1950],{"class":1949},[99,18029,1276],{"class":109},[99,18031,18032,18034],{"class":101,"line":1165},[99,18033,1935],{"class":105},[99,18035,17923],{"class":214},[99,18037,18038,18040],{"class":101,"line":1180},[99,18039,1935],{"class":105},[99,18041,17704],{"class":214},[99,18043,18044,18046,18048,18050,18052,18054,18056,18058,18060,18062,18064],{"class":101,"line":1186},[99,18045,5351],{"class":105},[99,18047,17208],{"class":1949},[99,18049,110],{"class":109},[99,18051,17213],{"class":1949},[99,18053,10571],{"class":105},[99,18055,398],{"class":5203},[99,18057,488],{"class":109},[99,18059,17128],{"class":1949},[99,18061,10571],{"class":105},[99,18063,14],{"class":5203},[99,18065,116],{"class":109},[99,18067,18068],{"class":101,"line":1200},[99,18069,1532],{"class":109},[99,18071,18072,18074,18076,18078,18080,18082,18084,18086,18088,18090,18092,18094],{"class":101,"line":1206},[99,18073,14725],{"class":105},[99,18075,17238],{"class":109},[99,18077,155],{"class":105},[99,18079,16329],{"class":109},[99,18081,17245],{"class":1949},[99,18083,17248],{"class":109},[99,18085,17251],{"class":1949},[99,18087,13037],{"class":109},[99,18089,642],{"class":105},[99,18091,15875],{"class":109},[99,18093,17251],{"class":1949},[99,18095,5623],{"class":109},[99,18097,18098,18100,18102,18104,18106,18108,18110,18112,18114,18116,18118,18120],{"class":101,"line":1297},[99,18099,14725],{"class":105},[99,18101,17268],{"class":109},[99,18103,155],{"class":105},[99,18105,16329],{"class":109},[99,18107,17245],{"class":1949},[99,18109,17248],{"class":109},[99,18111,17279],{"class":1949},[99,18113,13037],{"class":109},[99,18115,642],{"class":105},[99,18117,15875],{"class":109},[99,18119,17279],{"class":1949},[99,18121,5623],{"class":109},[99,18123,18124,18126,18128,18130,18132,18134,18136,18138,18140,18142,18144],{"class":101,"line":1303},[99,18125,14725],{"class":105},[99,18127,17296],{"class":109},[99,18129,155],{"class":105},[99,18131,17301],{"class":1949},[99,18133,17304],{"class":109},[99,18135,565],{"class":105},[99,18137,17238],{"class":109},[99,18139,591],{"class":105},[99,18141,17268],{"class":109},[99,18143,565],{"class":105},[99,18145,17317],{"class":109},[99,18147,18148,18150,18152,18154,18156,18158],{"class":101,"line":1315},[99,18149,3087],{"class":105},[99,18151,17324],{"class":109},[99,18153,1020],{"class":105},[99,18155,16329],{"class":109},[99,18157,17331],{"class":1949},[99,18159,17334],{"class":109},[99,18161,18162],{"class":101,"line":1598},[99,18163,2016],{"class":109},[99,18165,18166,18168,18170,18172,18174],{"class":101,"line":1603},[99,18167,9656],{"class":109},[99,18169,1154],{"class":105},[99,18171,17347],{"class":214},[99,18173,1430],{"class":105},[99,18175,8827],{"class":109},[99,18177,18178],{"class":101,"line":1609},[99,18179,2173],{"class":109},[99,18181,18182],{"class":101,"line":1614},[99,18183,16810],{"class":105},[99,18185,18186],{"class":101,"line":1628},[99,18187,2016],{"class":109},[99,18189,18190,18192,18194,18196,18198],{"class":101,"line":1633},[99,18191,9656],{"class":109},[99,18193,1154],{"class":105},[99,18195,17372],{"class":214},[99,18197,1430],{"class":105},[99,18199,8827],{"class":109},[99,18201,18202],{"class":101,"line":1639},[99,18203,2173],{"class":109},[99,18205,18206],{"class":101,"line":1660},[99,18207,1551],{"class":109},[99,18209,18210,18212,18214],{"class":101,"line":1665},[99,18211,113],{"class":105},[99,18213,1959],{"class":1949},[99,18215,1962],{"class":109},[99,18217,18218],{"class":101,"line":1679},[99,18219,1532],{"class":109},[99,18221,18222],{"class":101,"line":1684},[99,18223,15040],{"class":168},[99,18225,18226],{"class":101,"line":1713},[99,18227,14787],{"class":109},[99,18229,18230],{"class":101,"line":1718},[99,18231,17409],{"class":109},[99,18233,18234],{"class":101,"line":1735},[99,18235,16981],{"class":168},[99,18237,18238,18240,18242,18244],{"class":101,"line":1740},[99,18239,1537],{"class":109},[99,18241,1154],{"class":105},[99,18243,17422],{"class":214},[99,18245,1276],{"class":109},[99,18247,18248,18250],{"class":101,"line":1745},[99,18249,14725],{"class":105},[99,18251,17431],{"class":109},[99,18253,18254,18256,18258],{"class":101,"line":1750},[99,18255,1998],{"class":109},[99,18257,1415],{"class":105},[99,18259,17440],{"class":109},[99,18261,18262,18264,18266],{"class":101,"line":1764},[99,18263,16582],{"class":109},[99,18265,17447],{"class":1949},[99,18267,17450],{"class":109},[99,18269,18270,18272,18274,18276],{"class":101,"line":1769},[99,18271,1537],{"class":109},[99,18273,1154],{"class":105},[99,18275,17459],{"class":214},[99,18277,1276],{"class":109},[99,18279,18280,18282],{"class":101,"line":2563},[99,18281,14725],{"class":105},[99,18283,17468],{"class":109},[99,18285,18286,18288,18290,18292,18294],{"class":101,"line":2577},[99,18287,1998],{"class":109},[99,18289,1415],{"class":105},[99,18291,930],{"class":109},[99,18293,1415],{"class":105},[99,18295,17481],{"class":109},[99,18297,18298,18300,18302],{"class":101,"line":2585},[99,18299,17486],{"class":109},[99,18301,17489],{"class":1949},[99,18303,17492],{"class":109},[99,18305,18306,18308,18310],{"class":101,"line":2590},[99,18307,16582],{"class":109},[99,18309,17499],{"class":1949},[99,18311,17502],{"class":109},[99,18313,18314,18316,18318,18320],{"class":101,"line":2596},[99,18315,1537],{"class":109},[99,18317,1154],{"class":105},[99,18319,17511],{"class":214},[99,18321,1276],{"class":109},[99,18323,18324,18326],{"class":101,"line":2602},[99,18325,14725],{"class":105},[99,18327,17520],{"class":109},[99,18329,18330,18332,18334,18336,18338],{"class":101,"line":2607},[99,18331,1998],{"class":109},[99,18333,1415],{"class":105},[99,18335,17529],{"class":109},[99,18337,1415],{"class":105},[99,18339,17534],{"class":109},[99,18341,18342],{"class":101,"line":7935},[99,18343,17539],{"class":109},[99,18345,18346,18348,18350],{"class":101,"line":7959},[99,18347,17544],{"class":109},[99,18349,17489],{"class":1949},[99,18351,17549],{"class":109},[99,18353,18354,18356],{"class":101,"line":7964},[99,18355,17554],{"class":1949},[99,18357,17557],{"class":109},[99,18359,18360],{"class":101,"line":7970},[99,18361,1551],{"class":109},[41,18363,18365],{"id":18364},"_82对象的初始化清理","8.2对象的初始化清理",[1117,18367,18368,18371],{},[56,18369,18370],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[56,18372,18373],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[70,18375,18377],{"id":18376},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18379,18380,18381,18384],{},"对象的",[259,18382,18383],{},"初始化和清理","也是两个非常重要的安全问题",[14,18386,18387],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18389,18390],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18392,18393,18394,18397,18398,18401],{},"c++利用了",[259,18395,18396],{},"构造函数","和",[259,18399,18400],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18403,18404,18405],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[259,18406,18407],{},"我们不提供构造和析构，编译器会提供",[14,18409,18410],{},[259,18411,18412],{},"编译器提供的构造函数和析构函数是空实现。",[1117,18414,18415,18418],{},[56,18416,18417],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[56,18419,18420,18421,18424],{},"析构函数：主要作用在于对象",[259,18422,18423],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18426,18427,18430],{},[259,18428,18429],{},"构造函数语法：",[96,18431,18432],{},"类名(){}",[53,18434,18435,18438,18441,18444,18447],{},[56,18436,18437],{},"构造函数，没有返回值也不写void",[56,18439,18440],{},"函数名称与类名相同",[56,18442,18443],{},"构造函数可以有参数，因此可以发生重载",[56,18445,18446],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[56,18448,18449,18450,539],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[96,18451,18452],{},"Person(){}",[14,18454,18455,13782,18458],{},[259,18456,18457],{},"析构函数语法：",[96,18459,18460],{},"~类名(){}",[53,18462,18463,18466,18469,18475],{},[56,18464,18465],{},"析构函数，没有返回值也不写void",[56,18467,18468],{},"函数名称与类名相同,在名称前加上符号  ~",[56,18470,18471,18472],{},"析构函数不可以有参数，因此",[259,18473,18474],{},"不可以发生重载",[56,18476,18477],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[90,18479,18481],{"className":92,"code":18480,"language":94,"meta":21,"style":21},"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",[96,18482,18483,18489,18493,18497,18502,18509,18513,18526,18530,18535,18542,18546,18559,18563,18567,18571,18575,18583,18587,18595,18599,18603,18611,18615,18620,18624,18631,18635,18648,18652,18660],{"__ignoreMap":21},[99,18484,18485,18487],{"class":101,"line":102},[99,18486,14681],{"class":105},[99,18488,15158],{"class":1949},[99,18490,18491],{"class":101,"line":22},[99,18492,1532],{"class":109},[99,18494,18495],{"class":101,"line":1165},[99,18496,14703],{"class":105},[99,18498,18499],{"class":101,"line":1180},[99,18500,18501],{"class":168},"    \u002F\u002F构造函数\n",[99,18503,18504,18507],{"class":101,"line":1186},[99,18505,18506],{"class":1949},"    Person",[99,18508,1962],{"class":109},[99,18510,18511],{"class":101,"line":1200},[99,18512,2016],{"class":109},[99,18514,18515,18517,18519,18522,18524],{"class":101,"line":1206},[99,18516,9656],{"class":109},[99,18518,1154],{"class":105},[99,18520,18521],{"class":214}," \"Person的构造函数调用\"",[99,18523,1430],{"class":105},[99,18525,8827],{"class":109},[99,18527,18528],{"class":101,"line":1297},[99,18529,2173],{"class":109},[99,18531,18532],{"class":101,"line":1303},[99,18533,18534],{"class":168},"    \u002F\u002F析构函数\n",[99,18536,18537,18540],{"class":101,"line":1315},[99,18538,18539],{"class":1949},"    ~Person",[99,18541,1962],{"class":109},[99,18543,18544],{"class":101,"line":1598},[99,18545,2016],{"class":109},[99,18547,18548,18550,18552,18555,18557],{"class":101,"line":1603},[99,18549,9656],{"class":109},[99,18551,1154],{"class":105},[99,18553,18554],{"class":214}," \"Person的析构函数调用\"",[99,18556,1430],{"class":105},[99,18558,8827],{"class":109},[99,18560,18561],{"class":101,"line":1609},[99,18562,2173],{"class":109},[99,18564,18565],{"class":101,"line":1614},[99,18566,2386],{"emptyLinePlaceholder":26},[99,18568,18569],{"class":101,"line":1628},[99,18570,3981],{"class":109},[99,18572,18573],{"class":101,"line":1633},[99,18574,2386],{"emptyLinePlaceholder":26},[99,18576,18577,18579,18581],{"class":101,"line":1639},[99,18578,5351],{"class":105},[99,18580,5575],{"class":1949},[99,18582,1962],{"class":109},[99,18584,18585],{"class":101,"line":1660},[99,18586,1532],{"class":109},[99,18588,18589,18592],{"class":101,"line":1665},[99,18590,18591],{"class":109},"    Person p;",[99,18593,18594],{"class":168},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[99,18596,18597],{"class":101,"line":1679},[99,18598,1551],{"class":109},[99,18600,18601],{"class":101,"line":1684},[99,18602,2386],{"emptyLinePlaceholder":26},[99,18604,18605,18607,18609],{"class":101,"line":1713},[99,18606,113],{"class":105},[99,18608,1959],{"class":1949},[99,18610,10840],{"class":109},[99,18612,18613],{"class":101,"line":1718},[99,18614,13197],{"class":109},[99,18616,18617],{"class":101,"line":1735},[99,18618,18619],{"class":168},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[99,18621,18622],{"class":101,"line":1740},[99,18623,2386],{"emptyLinePlaceholder":26},[99,18625,18626,18628],{"class":101,"line":1745},[99,18627,18591],{"class":109},[99,18629,18630],{"class":168},"\u002F\u002F只有构造函数\n",[99,18632,18633],{"class":101,"line":1750},[99,18634,2386],{"emptyLinePlaceholder":26},[99,18636,18637,18639,18641,18643,18645],{"class":101,"line":1764},[99,18638,2289],{"class":1949},[99,18640,110],{"class":109},[99,18642,2294],{"class":214},[99,18644,5953],{"class":109},[99,18646,18647],{"class":168},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[99,18649,18650],{"class":101,"line":1769},[99,18651,2386],{"emptyLinePlaceholder":26},[99,18653,18654,18656,18658],{"class":101,"line":2563},[99,18655,4076],{"class":105},[99,18657,4079],{"class":158},[99,18659,1276],{"class":109},[99,18661,18662],{"class":101,"line":2577},[99,18663,1551],{"class":109},[14,18665,18666],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[70,18668,18670],{"id":18669},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18672,18673],{},"两种分类方式：",[14,18675,18676],{},"​\t按参数分为： 有参构造和无参构造",[14,18678,18679],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18681,18682],{},"三种调用方式：",[14,18684,18685],{},"​\t括号法",[14,18687,18688],{},"​\t显示法",[14,18690,18691],{},"​\t隐式转换法",[90,18693,18695],{"className":92,"code":18694,"language":94,"meta":21,"style":21},"#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",[96,18696,18697,18703,18713,18718,18723,18728,18733,18737,18745,18749,18753,18757,18763,18767,18780,18784,18796,18800,18809,18822,18826,18830,18836,18840,18853,18857,18862,18878,18882,18887,18896,18909,18913,18919,18923,18928,18936,18940,18945,18949,18957,18961,18966,18971,18976,18981,18986,18990,18995,19000,19005,19010,19014,19019,19024,19040,19052,19057,19061,19066,19071,19076,19080,19085,19099,19112,19116,19124,19128,19134,19140,19148],{"__ignoreMap":21},[99,18698,18699,18701],{"class":101,"line":102},[99,18700,1935],{"class":105},[99,18702,1938],{"class":214},[99,18704,18705,18707,18709,18711],{"class":101,"line":22},[99,18706,1943],{"class":105},[99,18708,1946],{"class":105},[99,18710,1950],{"class":1949},[99,18712,1276],{"class":109},[99,18714,18715],{"class":101,"line":1165},[99,18716,18717],{"class":168},"\u002F\u002F1.构造函数的分类及调用\n",[99,18719,18720],{"class":101,"line":1180},[99,18721,18722],{"class":168},"\u002F\u002F分类\n",[99,18724,18725],{"class":101,"line":1186},[99,18726,18727],{"class":168},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[99,18729,18730],{"class":101,"line":1200},[99,18731,18732],{"class":168},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[99,18734,18735],{"class":101,"line":1206},[99,18736,2386],{"emptyLinePlaceholder":26},[99,18738,18739,18741,18743],{"class":101,"line":1297},[99,18740,14681],{"class":105},[99,18742,15556],{"class":1949},[99,18744,2660],{"class":109},[99,18746,18747],{"class":101,"line":1303},[99,18748,1532],{"class":109},[99,18750,18751],{"class":101,"line":1315},[99,18752,14703],{"class":105},[99,18754,18755],{"class":101,"line":1598},[99,18756,18501],{"class":168},[99,18758,18759,18761],{"class":101,"line":1603},[99,18760,18506],{"class":1949},[99,18762,1962],{"class":109},[99,18764,18765],{"class":101,"line":1609},[99,18766,2016],{"class":109},[99,18768,18769,18771,18773,18776,18778],{"class":101,"line":1614},[99,18770,3437],{"class":109},[99,18772,1154],{"class":105},[99,18774,18775],{"class":214},"\"Person构造函数无参构造\"",[99,18777,1154],{"class":105},[99,18779,1177],{"class":109},[99,18781,18782],{"class":101,"line":1628},[99,18783,2173],{"class":109},[99,18785,18786,18788,18790,18792,18794],{"class":101,"line":1633},[99,18787,18506],{"class":1949},[99,18789,110],{"class":109},[99,18791,113],{"class":105},[99,18793,1384],{"class":5203},[99,18795,116],{"class":109},[99,18797,18798],{"class":101,"line":1639},[99,18799,2016],{"class":109},[99,18801,18802,18805,18807],{"class":101,"line":1660},[99,18803,18804],{"class":109},"        age",[99,18806,155],{"class":105},[99,18808,6184],{"class":109},[99,18810,18811,18813,18815,18818,18820],{"class":101,"line":1665},[99,18812,3437],{"class":109},[99,18814,1154],{"class":105},[99,18816,18817],{"class":214},"\"Person构造函数有参构造\"",[99,18819,1154],{"class":105},[99,18821,1177],{"class":109},[99,18823,18824],{"class":101,"line":1679},[99,18825,2173],{"class":109},[99,18827,18828],{"class":101,"line":1684},[99,18829,18534],{"class":168},[99,18831,18832,18834],{"class":101,"line":1713},[99,18833,18539],{"class":1949},[99,18835,1962],{"class":109},[99,18837,18838],{"class":101,"line":1718},[99,18839,2016],{"class":109},[99,18841,18842,18844,18846,18849,18851],{"class":101,"line":1735},[99,18843,3437],{"class":109},[99,18845,1154],{"class":105},[99,18847,18848],{"class":214},"\"Person析构函数被调用\"",[99,18850,1154],{"class":105},[99,18852,1177],{"class":109},[99,18854,18855],{"class":101,"line":1740},[99,18856,2173],{"class":109},[99,18858,18859],{"class":101,"line":1745},[99,18860,18861],{"class":168},"    \u002F\u002F拷贝构造函数\n",[99,18863,18864,18866,18868,18870,18872,18874,18876],{"class":101,"line":1750},[99,18865,18506],{"class":1949},[99,18867,110],{"class":109},[99,18869,6779],{"class":105},[99,18871,15556],{"class":1949},[99,18873,10571],{"class":105},[99,18875,14],{"class":5203},[99,18877,116],{"class":109},[99,18879,18880],{"class":101,"line":1764},[99,18881,2016],{"class":109},[99,18883,18884],{"class":101,"line":1769},[99,18885,18886],{"class":168},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[99,18888,18889,18891,18893],{"class":101,"line":2563},[99,18890,18804],{"class":109},[99,18892,155],{"class":105},[99,18894,18895],{"class":109},"p.age;\n",[99,18897,18898,18900,18902,18905,18907],{"class":101,"line":2577},[99,18899,3437],{"class":109},[99,18901,1154],{"class":105},[99,18903,18904],{"class":214},"\"Person拷贝构造函数被调用\"",[99,18906,1154],{"class":105},[99,18908,1177],{"class":109},[99,18910,18911],{"class":101,"line":2585},[99,18912,2173],{"class":109},[99,18914,18915,18917],{"class":101,"line":2590},[99,18916,1971],{"class":105},[99,18918,7784],{"class":109},[99,18920,18921],{"class":101,"line":2596},[99,18922,3981],{"class":109},[99,18924,18925],{"class":101,"line":2602},[99,18926,18927],{"class":168},"\u002F\u002F调用\n",[99,18929,18930,18932,18934],{"class":101,"line":2607},[99,18931,5351],{"class":105},[99,18933,5575],{"class":1949},[99,18935,1962],{"class":109},[99,18937,18938],{"class":101,"line":7935},[99,18939,1532],{"class":109},[99,18941,18942],{"class":101,"line":7959},[99,18943,18944],{"class":168},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[99,18946,18947],{"class":101,"line":7964},[99,18948,1551],{"class":109},[99,18950,18951,18953,18955],{"class":101,"line":7970},[99,18952,5351],{"class":105},[99,18954,5644],{"class":1949},[99,18956,1962],{"class":109},[99,18958,18959],{"class":101,"line":7997},[99,18960,1532],{"class":109},[99,18962,18963],{"class":101,"line":8002},[99,18964,18965],{"class":168},"    \u002F\u002F1.括号法\n",[99,18967,18968],{"class":101,"line":8008},[99,18969,18970],{"class":168},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[99,18972,18973],{"class":101,"line":8020},[99,18974,18975],{"class":168},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[99,18977,18978],{"class":101,"line":8032},[99,18979,18980],{"class":168},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[99,18982,18983],{"class":101,"line":8044},[99,18984,18985],{"class":168},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[99,18987,18988],{"class":101,"line":9703},[99,18989,2386],{"emptyLinePlaceholder":26},[99,18991,18992],{"class":101,"line":9728},[99,18993,18994],{"class":168},"    \u002F\u002F注意事项\n",[99,18996,18997],{"class":101,"line":9751},[99,18998,18999],{"class":168},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[99,19001,19002],{"class":101,"line":9775},[99,19003,19004],{"class":168},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[99,19006,19007],{"class":101,"line":9780},[99,19008,19009],{"class":168},"    \u002F\u002F Person p4();\n",[99,19011,19012],{"class":101,"line":9785},[99,19013,2386],{"emptyLinePlaceholder":26},[99,19015,19016],{"class":101,"line":9790},[99,19017,19018],{"class":168},"    \u002F\u002F2.显示法\n",[99,19020,19021],{"class":101,"line":9799},[99,19022,19023],{"class":109},"    Person p1;\n",[99,19025,19026,19029,19031,19034,19036,19038],{"class":101,"line":9804},[99,19027,19028],{"class":109},"    Person p2",[99,19030,155],{"class":105},[99,19032,19033],{"class":1949},"Person",[99,19035,110],{"class":109},[99,19037,556],{"class":158},[99,19039,2705],{"class":109},[99,19041,19042,19045,19047,19049],{"class":101,"line":9810},[99,19043,19044],{"class":109},"    Person p3",[99,19046,155],{"class":105},[99,19048,19033],{"class":1949},[99,19050,19051],{"class":109},"(p2);\n",[99,19053,19054],{"class":101,"line":9831},[99,19055,19056],{"class":168},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[99,19058,19059],{"class":101,"line":9837},[99,19060,2386],{"emptyLinePlaceholder":26},[99,19062,19063],{"class":101,"line":9851},[99,19064,19065],{"class":168},"    \u002F\u002F 注意事项2\n",[99,19067,19068],{"class":101,"line":9857},[99,19069,19070],{"class":168},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[99,19072,19073],{"class":101,"line":9884},[99,19074,19075],{"class":168},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[99,19077,19078],{"class":101,"line":9893},[99,19079,2386],{"emptyLinePlaceholder":26},[99,19081,19082],{"class":101,"line":9899},[99,19083,19084],{"class":168},"    \u002F\u002F3.隐士转换法\n",[99,19086,19087,19090,19092,19094,19096],{"class":101,"line":9907},[99,19088,19089],{"class":109},"    Person p4",[99,19091,155],{"class":105},[99,19093,556],{"class":158},[99,19095,165],{"class":109},[99,19097,19098],{"class":168},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[99,19100,19101,19104,19106,19109],{"class":101,"line":9912},[99,19102,19103],{"class":109},"    Person p5",[99,19105,155],{"class":105},[99,19107,19108],{"class":109},"p4;",[99,19110,19111],{"class":168}," \u002F\u002F 这里会调用拷贝构造函数\n",[99,19113,19114],{"class":101,"line":16591},[99,19115,1551],{"class":109},[99,19117,19118,19120,19122],{"class":101,"line":16597},[99,19119,113],{"class":105},[99,19121,1959],{"class":1949},[99,19123,1962],{"class":109},[99,19125,19126],{"class":101,"line":16620},[99,19127,1532],{"class":109},[99,19129,19130,19132],{"class":101,"line":16626},[99,19131,5620],{"class":1949},[99,19133,5623],{"class":109},[99,19135,19136,19138],{"class":101,"line":16649},[99,19137,5689],{"class":1949},[99,19139,5623],{"class":109},[99,19141,19142,19144,19146],{"class":101,"line":16663},[99,19143,4076],{"class":105},[99,19145,4079],{"class":158},[99,19147,1276],{"class":109},[99,19149,19150],{"class":101,"line":16683},[99,19151,1551],{"class":109},[14,19153,19154,19157],{},[259,19155,19156],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[70,19159,19161],{"id":19160},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19163,19164],{},"C++中拷贝构造函数调用时机通常有三种情况",[1117,19166,19167,19170,19173],{},[56,19168,19169],{},"使用一个已经创建完毕的对象来初始化一个新对象",[56,19171,19172],{},"值传递的方式给函数参数传值",[56,19174,19175],{},"以值方式返回局部对象",[90,19177,19179],{"className":92,"code":19178,"language":94,"meta":21,"style":21},"#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",[96,19180,19181,19187,19197,19201,19206,19210,19215,19220,19225,19231,19235,19239,19245,19249,19262,19266,19271,19283,19287,19295,19308,19312,19316,19332,19336,19345,19358,19362,19368,19372,19384,19388,19394,19398,19402,19410,19414,19427,19435,19453,19457,19462,19467,19482,19486,19499,19503,19511,19515,19519,19527,19531,19536,19545,19549,19553,19578,19588,19592,19600,19604,19615,19640,19644,19648,19652,19660,19664,19669,19674,19681,19686,19691,19696,19701,19705,19710,19714,19719,19723,19728,19733,19737,19741,19746,19751,19759],{"__ignoreMap":21},[99,19182,19183,19185],{"class":101,"line":102},[99,19184,1935],{"class":105},[99,19186,1938],{"class":214},[99,19188,19189,19191,19193,19195],{"class":101,"line":22},[99,19190,1943],{"class":105},[99,19192,1946],{"class":105},[99,19194,1950],{"class":1949},[99,19196,1276],{"class":109},[99,19198,19199],{"class":101,"line":1165},[99,19200,2386],{"emptyLinePlaceholder":26},[99,19202,19203],{"class":101,"line":1180},[99,19204,19205],{"class":168},"\u002F\u002F拷贝构造函数调用时机\n",[99,19207,19208],{"class":101,"line":1186},[99,19209,2386],{"emptyLinePlaceholder":26},[99,19211,19212],{"class":101,"line":1200},[99,19213,19214],{"class":168},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[99,19216,19217],{"class":101,"line":1206},[99,19218,19219],{"class":168},"\u002F\u002F2.值传递的方式给函数参数传值\n",[99,19221,19222],{"class":101,"line":1297},[99,19223,19224],{"class":168},"\u002F\u002F3.以值方式返回局部对象\n",[99,19226,19227,19229],{"class":101,"line":1303},[99,19228,14681],{"class":105},[99,19230,15158],{"class":1949},[99,19232,19233],{"class":101,"line":1315},[99,19234,1532],{"class":109},[99,19236,19237],{"class":101,"line":1598},[99,19238,14703],{"class":105},[99,19240,19241,19243],{"class":101,"line":1603},[99,19242,18506],{"class":1949},[99,19244,1962],{"class":109},[99,19246,19247],{"class":101,"line":1609},[99,19248,2016],{"class":109},[99,19250,19251,19253,19255,19258,19260],{"class":101,"line":1614},[99,19252,9656],{"class":109},[99,19254,1154],{"class":105},[99,19256,19257],{"class":214}," \"Person的默认构造函数调用\"",[99,19259,1430],{"class":105},[99,19261,8827],{"class":109},[99,19263,19264],{"class":101,"line":1628},[99,19265,2173],{"class":109},[99,19267,19268],{"class":101,"line":1633},[99,19269,19270],{"class":168},"    \u002F\u002F有参构造\n",[99,19272,19273,19275,19277,19279,19281],{"class":101,"line":1639},[99,19274,18506],{"class":1949},[99,19276,110],{"class":109},[99,19278,113],{"class":105},[99,19280,15676],{"class":5203},[99,19282,116],{"class":109},[99,19284,19285],{"class":101,"line":1660},[99,19286,2016],{"class":109},[99,19288,19289,19291,19293],{"class":101,"line":1665},[99,19290,15730],{"class":109},[99,19292,155],{"class":105},[99,19294,7784],{"class":109},[99,19296,19297,19299,19301,19304,19306],{"class":101,"line":1679},[99,19298,9656],{"class":109},[99,19300,1154],{"class":105},[99,19302,19303],{"class":214}," \"Person的有参构造函数调用\"",[99,19305,1430],{"class":105},[99,19307,8827],{"class":109},[99,19309,19310],{"class":101,"line":1684},[99,19311,2173],{"class":109},[99,19313,19314],{"class":101,"line":1713},[99,19315,18861],{"class":168},[99,19317,19318,19320,19322,19324,19326,19328,19330],{"class":101,"line":1718},[99,19319,18506],{"class":1949},[99,19321,110],{"class":109},[99,19323,6779],{"class":105},[99,19325,15556],{"class":1949},[99,19327,10571],{"class":105},[99,19329,14],{"class":5203},[99,19331,116],{"class":109},[99,19333,19334],{"class":101,"line":1735},[99,19335,2016],{"class":109},[99,19337,19338,19340,19342],{"class":101,"line":1740},[99,19339,15730],{"class":109},[99,19341,155],{"class":105},[99,19343,19344],{"class":109}," p.m_Age;\n",[99,19346,19347,19349,19351,19354,19356],{"class":101,"line":1745},[99,19348,9656],{"class":109},[99,19350,1154],{"class":105},[99,19352,19353],{"class":214}," \"Person的拷贝构造函数调用\"",[99,19355,1430],{"class":105},[99,19357,8827],{"class":109},[99,19359,19360],{"class":101,"line":1750},[99,19361,2173],{"class":109},[99,19363,19364,19366],{"class":101,"line":1764},[99,19365,18539],{"class":1949},[99,19367,1962],{"class":109},[99,19369,19370],{"class":101,"line":1769},[99,19371,2016],{"class":109},[99,19373,19374,19376,19378,19380,19382],{"class":101,"line":2563},[99,19375,9656],{"class":109},[99,19377,1154],{"class":105},[99,19379,18554],{"class":214},[99,19381,1430],{"class":105},[99,19383,8827],{"class":109},[99,19385,19386],{"class":101,"line":2577},[99,19387,2173],{"class":109},[99,19389,19390,19392],{"class":101,"line":2585},[99,19391,1971],{"class":105},[99,19393,15653],{"class":109},[99,19395,19396],{"class":101,"line":2590},[99,19397,3981],{"class":109},[99,19399,19400],{"class":101,"line":2596},[99,19401,19214],{"class":168},[99,19403,19404,19406,19408],{"class":101,"line":2602},[99,19405,5351],{"class":105},[99,19407,5575],{"class":1949},[99,19409,1962],{"class":109},[99,19411,19412],{"class":101,"line":2607},[99,19413,1532],{"class":109},[99,19415,19416,19419,19421,19423,19425],{"class":101,"line":7935},[99,19417,19418],{"class":109},"    Person ",[99,19420,7117],{"class":1949},[99,19422,110],{"class":109},[99,19424,810],{"class":158},[99,19426,2705],{"class":109},[99,19428,19429,19431,19433],{"class":101,"line":7959},[99,19430,19418],{"class":109},[99,19432,7020],{"class":1949},[99,19434,17502],{"class":109},[99,19436,19437,19439,19441,19444,19446,19449,19451],{"class":101,"line":7964},[99,19438,1537],{"class":109},[99,19440,1154],{"class":105},[99,19442,19443],{"class":214},"\"P2的年龄为：\"",[99,19445,1154],{"class":105},[99,19447,19448],{"class":109},"p2.m_Age",[99,19450,1154],{"class":105},[99,19452,1177],{"class":109},[99,19454,19455],{"class":101,"line":7970},[99,19456,1551],{"class":109},[99,19458,19459],{"class":101,"line":7997},[99,19460,19461],{"class":168},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[99,19463,19464],{"class":101,"line":8002},[99,19465,19466],{"class":168},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[99,19468,19469,19471,19474,19476,19478,19480],{"class":101,"line":8008},[99,19470,5351],{"class":105},[99,19472,19473],{"class":1949}," doWork",[99,19475,110],{"class":109},[99,19477,19033],{"class":1949},[99,19479,6812],{"class":5203},[99,19481,116],{"class":109},[99,19483,19484],{"class":101,"line":8020},[99,19485,1532],{"class":109},[99,19487,19488,19490,19492,19495,19497],{"class":101,"line":8032},[99,19489,6516],{"class":109},[99,19491,1154],{"class":105},[99,19493,19494],{"class":214}," \"doWork函数调用\"",[99,19496,1430],{"class":105},[99,19498,8827],{"class":109},[99,19500,19501],{"class":101,"line":8044},[99,19502,1551],{"class":109},[99,19504,19505,19507,19509],{"class":101,"line":9703},[99,19506,5351],{"class":105},[99,19508,5644],{"class":1949},[99,19510,1962],{"class":109},[99,19512,19513],{"class":101,"line":9728},[99,19514,1532],{"class":109},[99,19516,19517],{"class":101,"line":9751},[99,19518,15300],{"class":109},[99,19520,19521,19524],{"class":101,"line":9775},[99,19522,19523],{"class":1949},"    doWork",[99,19525,19526],{"class":109},"(p);\n",[99,19528,19529],{"class":101,"line":9780},[99,19530,1551],{"class":109},[99,19532,19533],{"class":101,"line":9785},[99,19534,19535],{"class":168},"\u002F\u002F 3.以值方式返回局部对象\n",[99,19537,19538,19540,19543],{"class":101,"line":9790},[99,19539,19033],{"class":1949},[99,19541,19542],{"class":1949}," doWork2",[99,19544,1962],{"class":109},[99,19546,19547],{"class":101,"line":9799},[99,19548,1532],{"class":109},[99,19550,19551],{"class":101,"line":9804},[99,19552,19023],{"class":109},[99,19554,19555,19557,19559,19561,19563,19565,19567,19569,19571,19573,19575],{"class":101,"line":9810},[99,19556,1537],{"class":109},[99,19558,1154],{"class":105},[99,19560,110],{"class":109},[99,19562,113],{"class":105},[99,19564,6505],{"class":105},[99,19566,539],{"class":109},[99,19568,463],{"class":105},[99,19570,7117],{"class":109},[99,19572,1154],{"class":105},[99,19574,1224],{"class":109},[99,19576,19577],{"class":168},"\u002F\u002F打印p1的地址\n",[99,19579,19580,19582,19585],{"class":101,"line":9831},[99,19581,4076],{"class":105},[99,19583,19584],{"class":109}," p1;",[99,19586,19587],{"class":168},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[99,19589,19590],{"class":101,"line":9837},[99,19591,1551],{"class":109},[99,19593,19594,19596,19598],{"class":101,"line":9851},[99,19595,5351],{"class":105},[99,19597,5716],{"class":1949},[99,19599,1962],{"class":109},[99,19601,19602],{"class":101,"line":9857},[99,19603,1532],{"class":109},[99,19605,19606,19609,19611,19613],{"class":101,"line":9884},[99,19607,19608],{"class":109},"    Person p ",[99,19610,155],{"class":105},[99,19612,19542],{"class":1949},[99,19614,5623],{"class":109},[99,19616,19617,19619,19621,19623,19625,19627,19629,19631,19633,19635,19637],{"class":101,"line":9893},[99,19618,1537],{"class":109},[99,19620,1154],{"class":105},[99,19622,110],{"class":109},[99,19624,113],{"class":105},[99,19626,6505],{"class":105},[99,19628,539],{"class":109},[99,19630,463],{"class":105},[99,19632,14],{"class":109},[99,19634,1154],{"class":105},[99,19636,1224],{"class":109},[99,19638,19639],{"class":168},"\u002F\u002F打印p的地址\n",[99,19641,19642],{"class":101,"line":9899},[99,19643,1551],{"class":109},[99,19645,19646],{"class":101,"line":9907},[99,19647,2386],{"emptyLinePlaceholder":26},[99,19649,19650],{"class":101,"line":9912},[99,19651,2386],{"emptyLinePlaceholder":26},[99,19653,19654,19656,19658],{"class":101,"line":16591},[99,19655,113],{"class":105},[99,19657,1959],{"class":1949},[99,19659,1962],{"class":109},[99,19661,19662],{"class":101,"line":16597},[99,19663,1532],{"class":109},[99,19665,19666],{"class":101,"line":16620},[99,19667,19668],{"class":168},"    \u002F\u002F test01();\n",[99,19670,19671],{"class":101,"line":16626},[99,19672,19673],{"class":168},"    \u002F\u002F test02();\n",[99,19675,19676,19679],{"class":101,"line":16649},[99,19677,19678],{"class":1949},"    test03",[99,19680,5623],{"class":109},[99,19682,19683],{"class":101,"line":16663},[99,19684,19685],{"class":168},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[99,19687,19688],{"class":101,"line":16683},[99,19689,19690],{"class":168},"\u002F\u002F 输出结果如下：\n",[99,19692,19693],{"class":101,"line":16689},[99,19694,19695],{"class":168},"\u002F\u002F Person的默认构造函数调用\n",[99,19697,19698],{"class":101,"line":16700},[99,19699,19700],{"class":168},"\u002F\u002F 0x7fffffffceec\n",[99,19702,19703],{"class":101,"line":16723},[99,19704,19700],{"class":168},[99,19706,19707],{"class":101,"line":16745},[99,19708,19709],{"class":168},"\u002F\u002F Person的析构函数调用\n",[99,19711,19712],{"class":101,"line":16750},[99,19713,2386],{"emptyLinePlaceholder":26},[99,19715,19716],{"class":101,"line":16756},[99,19717,19718],{"class":168},"\u002F\u002F 之前的输出结果如下：\n",[99,19720,19721],{"class":101,"line":16770},[99,19722,19695],{"class":168},[99,19724,19725],{"class":101,"line":16783},[99,19726,19727],{"class":168},"\u002F\u002F 地址\n",[99,19729,19730],{"class":101,"line":16788},[99,19731,19732],{"class":168},"\u002F\u002F Person的拷贝构造函数调用\n",[99,19734,19735],{"class":101,"line":16802},[99,19736,19709],{"class":168},[99,19738,19739],{"class":101,"line":16807},[99,19740,19727],{"class":168},[99,19742,19743],{"class":101,"line":16813},[99,19744,19745],{"class":168},"\u002F\u002F (这两次输出的地址也是不同的) \n",[99,19747,19748],{"class":101,"line":16818},[99,19749,19750],{"class":168},"\u002F\u002F Person的析构函数调用     \n",[99,19752,19753,19755,19757],{"class":101,"line":16832},[99,19754,4076],{"class":105},[99,19756,4079],{"class":158},[99,19758,1276],{"class":109},[99,19760,19761],{"class":101,"line":16837},[99,19762,1551],{"class":109},[14,19764,19765],{},"简化版理解",[90,19767,19769],{"className":92,"code":19768,"language":94,"meta":21,"style":21},"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",[96,19770,19771,19779,19783,19789,19802,19813,19817,19829,19842,19850,19854,19870,19883,19892,19896,19901,19907,19920,19924,19928,19935,19939,19943,19948,19956,19960,19976,19989,20002,20006,20011,20019,20023,20027,20032,20037,20053,20061,20068,20074,20078,20082,20087,20095,20099,20103,20126,20133,20137,20141,20149,20153,20163,20185,20189,20193,20197,20205,20209,20214,20219,20225,20229,20239,20243,20251],{"__ignoreMap":21},[99,19772,19773,19775,19777],{"class":101,"line":102},[99,19774,14681],{"class":105},[99,19776,15556],{"class":1949},[99,19778,15559],{"class":109},[99,19780,19781],{"class":101,"line":22},[99,19782,14703],{"class":105},[99,19784,19785,19787],{"class":101,"line":1165},[99,19786,18506],{"class":1949},[99,19788,10840],{"class":109},[99,19790,19791,19793,19795,19798,19800],{"class":101,"line":1180},[99,19792,9656],{"class":109},[99,19794,1154],{"class":105},[99,19796,19797],{"class":214}," \"无参构造函数!\"",[99,19799,1430],{"class":105},[99,19801,8827],{"class":109},[99,19803,19804,19807,19809,19811],{"class":101,"line":1186},[99,19805,19806],{"class":109},"        mAge ",[99,19808,155],{"class":105},[99,19810,4079],{"class":158},[99,19812,1276],{"class":109},[99,19814,19815],{"class":101,"line":1200},[99,19816,2173],{"class":109},[99,19818,19819,19821,19823,19825,19827],{"class":101,"line":1206},[99,19820,18506],{"class":1949},[99,19822,110],{"class":109},[99,19824,113],{"class":105},[99,19826,15676],{"class":5203},[99,19828,12429],{"class":109},[99,19830,19831,19833,19835,19838,19840],{"class":101,"line":1297},[99,19832,9656],{"class":109},[99,19834,1154],{"class":105},[99,19836,19837],{"class":214}," \"有参构造函数!\"",[99,19839,1430],{"class":105},[99,19841,8827],{"class":109},[99,19843,19844,19846,19848],{"class":101,"line":1303},[99,19845,19806],{"class":109},[99,19847,155],{"class":105},[99,19849,7784],{"class":109},[99,19851,19852],{"class":101,"line":1315},[99,19853,2173],{"class":109},[99,19855,19856,19858,19860,19862,19864,19866,19868],{"class":101,"line":1598},[99,19857,18506],{"class":1949},[99,19859,110],{"class":109},[99,19861,6779],{"class":105},[99,19863,15556],{"class":1949},[99,19865,463],{"class":105},[99,19867,6812],{"class":5203},[99,19869,12429],{"class":109},[99,19871,19872,19874,19876,19879,19881],{"class":101,"line":1603},[99,19873,9656],{"class":109},[99,19875,1154],{"class":105},[99,19877,19878],{"class":214}," \"拷贝构造函数!\"",[99,19880,1430],{"class":105},[99,19882,8827],{"class":109},[99,19884,19885,19887,19889],{"class":101,"line":1609},[99,19886,19806],{"class":109},[99,19888,155],{"class":105},[99,19890,19891],{"class":109}," p.mAge;\n",[99,19893,19894],{"class":101,"line":1614},[99,19895,2173],{"class":109},[99,19897,19898],{"class":101,"line":1628},[99,19899,19900],{"class":168},"    \u002F\u002F析构函数在释放内存之前调用\n",[99,19902,19903,19905],{"class":101,"line":1633},[99,19904,18539],{"class":1949},[99,19906,10840],{"class":109},[99,19908,19909,19911,19913,19916,19918],{"class":101,"line":1639},[99,19910,9656],{"class":109},[99,19912,1154],{"class":105},[99,19914,19915],{"class":214}," \"析构函数!\"",[99,19917,1430],{"class":105},[99,19919,8827],{"class":109},[99,19921,19922],{"class":101,"line":1660},[99,19923,2173],{"class":109},[99,19925,19926],{"class":101,"line":1665},[99,19927,14703],{"class":105},[99,19929,19930,19932],{"class":101,"line":1679},[99,19931,1971],{"class":105},[99,19933,19934],{"class":109}," mAge;\n",[99,19936,19937],{"class":101,"line":1684},[99,19938,3981],{"class":109},[99,19940,19941],{"class":101,"line":1713},[99,19942,2386],{"emptyLinePlaceholder":26},[99,19944,19945],{"class":101,"line":1718},[99,19946,19947],{"class":168},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[99,19949,19950,19952,19954],{"class":101,"line":1735},[99,19951,5351],{"class":105},[99,19953,5575],{"class":1949},[99,19955,10840],{"class":109},[99,19957,19958],{"class":101,"line":1740},[99,19959,2386],{"emptyLinePlaceholder":26},[99,19961,19962,19964,19967,19969,19971,19973],{"class":101,"line":1745},[99,19963,19418],{"class":109},[99,19965,19966],{"class":1949},"man",[99,19968,110],{"class":109},[99,19970,421],{"class":158},[99,19972,5953],{"class":109},[99,19974,19975],{"class":168}," \u002F\u002Fp对象已经创建完毕\n",[99,19977,19978,19980,19983,19986],{"class":101,"line":1750},[99,19979,19418],{"class":109},[99,19981,19982],{"class":1949},"newman",[99,19984,19985],{"class":109},"(man);",[99,19987,19988],{"class":168}," \u002F\u002F调用拷贝构造函数\n",[99,19990,19991,19994,19996,19999],{"class":101,"line":1764},[99,19992,19993],{"class":109},"    Person newman2 ",[99,19995,155],{"class":105},[99,19997,19998],{"class":109}," man;",[99,20000,20001],{"class":168}," \u002F\u002F拷贝构造\n",[99,20003,20004],{"class":101,"line":1769},[99,20005,2386],{"emptyLinePlaceholder":26},[99,20007,20008],{"class":101,"line":2563},[99,20009,20010],{"class":168},"    \u002F\u002FPerson newman3;\n",[99,20012,20013,20016],{"class":101,"line":2577},[99,20014,20015],{"class":168},"    \u002F\u002Fnewman3 = man;",[99,20017,20018],{"class":168}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[99,20020,20021],{"class":101,"line":2585},[99,20022,1551],{"class":109},[99,20024,20025],{"class":101,"line":2590},[99,20026,2386],{"emptyLinePlaceholder":26},[99,20028,20029],{"class":101,"line":2596},[99,20030,20031],{"class":168},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[99,20033,20034],{"class":101,"line":2602},[99,20035,20036],{"class":168},"\u002F\u002F相当于Person p1 = p;\n",[99,20038,20039,20041,20043,20045,20047,20050],{"class":101,"line":2607},[99,20040,5351],{"class":105},[99,20042,19473],{"class":1949},[99,20044,110],{"class":109},[99,20046,19033],{"class":1949},[99,20048,20049],{"class":5203}," p1",[99,20051,20052],{"class":109},") {}\n",[99,20054,20055,20057,20059],{"class":101,"line":7935},[99,20056,5351],{"class":105},[99,20058,5644],{"class":1949},[99,20060,10840],{"class":109},[99,20062,20063,20065],{"class":101,"line":7959},[99,20064,18591],{"class":109},[99,20066,20067],{"class":168}," \u002F\u002F无参构造函数\n",[99,20069,20070,20072],{"class":101,"line":7964},[99,20071,19523],{"class":1949},[99,20073,19526],{"class":109},[99,20075,20076],{"class":101,"line":7970},[99,20077,1551],{"class":109},[99,20079,20080],{"class":101,"line":7997},[99,20081,2386],{"emptyLinePlaceholder":26},[99,20083,20084],{"class":101,"line":8002},[99,20085,20086],{"class":168},"\u002F\u002F3. 以值方式返回局部对象\n",[99,20088,20089,20091,20093],{"class":101,"line":8008},[99,20090,19033],{"class":1949},[99,20092,19542],{"class":1949},[99,20094,1962],{"class":109},[99,20096,20097],{"class":101,"line":8020},[99,20098,1532],{"class":109},[99,20100,20101],{"class":101,"line":8032},[99,20102,19023],{"class":109},[99,20104,20105,20107,20109,20111,20113,20115,20117,20119,20122,20124],{"class":101,"line":8044},[99,20106,6516],{"class":109},[99,20108,1154],{"class":105},[99,20110,1644],{"class":109},[99,20112,113],{"class":105},[99,20114,6505],{"class":105},[99,20116,539],{"class":109},[99,20118,463],{"class":105},[99,20120,20121],{"class":109},"p1 ",[99,20123,1154],{"class":105},[99,20125,8827],{"class":109},[99,20127,20128,20130],{"class":101,"line":9703},[99,20129,4076],{"class":105},[99,20131,20132],{"class":109}," p1;\n",[99,20134,20135],{"class":101,"line":9728},[99,20136,1551],{"class":109},[99,20138,20139],{"class":101,"line":9751},[99,20140,2386],{"emptyLinePlaceholder":26},[99,20142,20143,20145,20147],{"class":101,"line":9775},[99,20144,5351],{"class":105},[99,20146,5716],{"class":1949},[99,20148,1962],{"class":109},[99,20150,20151],{"class":101,"line":9780},[99,20152,1532],{"class":109},[99,20154,20155,20157,20159,20161],{"class":101,"line":9785},[99,20156,19608],{"class":109},[99,20158,155],{"class":105},[99,20160,19542],{"class":1949},[99,20162,5623],{"class":109},[99,20164,20165,20167,20169,20171,20173,20175,20177,20179,20181,20183],{"class":101,"line":9790},[99,20166,6516],{"class":109},[99,20168,1154],{"class":105},[99,20170,1644],{"class":109},[99,20172,113],{"class":105},[99,20174,6505],{"class":105},[99,20176,539],{"class":109},[99,20178,463],{"class":105},[99,20180,11435],{"class":109},[99,20182,1154],{"class":105},[99,20184,8827],{"class":109},[99,20186,20187],{"class":101,"line":9799},[99,20188,1551],{"class":109},[99,20190,20191],{"class":101,"line":9804},[99,20192,2386],{"emptyLinePlaceholder":26},[99,20194,20195],{"class":101,"line":9810},[99,20196,2386],{"emptyLinePlaceholder":26},[99,20198,20199,20201,20203],{"class":101,"line":9831},[99,20200,113],{"class":105},[99,20202,1959],{"class":1949},[99,20204,10840],{"class":109},[99,20206,20207],{"class":101,"line":9837},[99,20208,2386],{"emptyLinePlaceholder":26},[99,20210,20211],{"class":101,"line":9851},[99,20212,20213],{"class":168},"    \u002F\u002Ftest01();\n",[99,20215,20216],{"class":101,"line":9857},[99,20217,20218],{"class":168},"    \u002F\u002Ftest02();\n",[99,20220,20221,20223],{"class":101,"line":9884},[99,20222,19678],{"class":1949},[99,20224,5623],{"class":109},[99,20226,20227],{"class":101,"line":9893},[99,20228,2386],{"emptyLinePlaceholder":26},[99,20230,20231,20233,20235,20237],{"class":101,"line":9899},[99,20232,2289],{"class":1949},[99,20234,110],{"class":109},[99,20236,2294],{"class":214},[99,20238,2705],{"class":109},[99,20240,20241],{"class":101,"line":9907},[99,20242,2386],{"emptyLinePlaceholder":26},[99,20244,20245,20247,20249],{"class":101,"line":9912},[99,20246,4076],{"class":105},[99,20248,4079],{"class":158},[99,20250,1276],{"class":109},[99,20252,20253],{"class":101,"line":16591},[99,20254,1551],{"class":109},[70,20256,20258],{"id":20257},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20260,20261],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20263,20264],{},"1．默认构造函数(无参，函数体为空)",[14,20266,20267],{},"2．默认析构函数(无参，函数体为空)",[14,20269,20270],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20272,20273],{},"构造函数调用规则如下：",[1117,20275,20276,20279],{},[56,20277,20278],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[56,20280,20281],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[90,20283,20285],{"className":92,"code":20284,"language":94,"meta":21,"style":21},"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",[96,20286,20287,20295,20299,20304,20310,20322,20326,20331,20343,20352,20364,20368,20372,20388,20397,20409,20413,20417,20423,20435,20439,20443,20449,20453,20457,20465,20469,20481,20486,20494,20498,20516,20520,20524,20532,20536,20541,20549,20564,20577,20581,20586,20593,20609,20622,20626,20630,20638,20642,20648,20652,20662,20666,20674],{"__ignoreMap":21},[99,20288,20289,20291,20293],{"class":101,"line":102},[99,20290,14681],{"class":105},[99,20292,15556],{"class":1949},[99,20294,15559],{"class":109},[99,20296,20297],{"class":101,"line":22},[99,20298,14703],{"class":105},[99,20300,20301],{"class":101,"line":1165},[99,20302,20303],{"class":168},"    \u002F\u002F无参（默认）构造函数\n",[99,20305,20306,20308],{"class":101,"line":1180},[99,20307,18506],{"class":1949},[99,20309,10840],{"class":109},[99,20311,20312,20314,20316,20318,20320],{"class":101,"line":1186},[99,20313,9656],{"class":109},[99,20315,1154],{"class":105},[99,20317,19797],{"class":214},[99,20319,1430],{"class":105},[99,20321,8827],{"class":109},[99,20323,20324],{"class":101,"line":1200},[99,20325,2173],{"class":109},[99,20327,20328],{"class":101,"line":1206},[99,20329,20330],{"class":168},"    \u002F\u002F有参构造函数\n",[99,20332,20333,20335,20337,20339,20341],{"class":101,"line":1297},[99,20334,18506],{"class":1949},[99,20336,110],{"class":109},[99,20338,113],{"class":105},[99,20340,1384],{"class":5203},[99,20342,12429],{"class":109},[99,20344,20345,20348,20350],{"class":101,"line":1303},[99,20346,20347],{"class":109},"        age ",[99,20349,155],{"class":105},[99,20351,1418],{"class":109},[99,20353,20354,20356,20358,20360,20362],{"class":101,"line":1315},[99,20355,9656],{"class":109},[99,20357,1154],{"class":105},[99,20359,19837],{"class":214},[99,20361,1430],{"class":105},[99,20363,8827],{"class":109},[99,20365,20366],{"class":101,"line":1598},[99,20367,2173],{"class":109},[99,20369,20370],{"class":101,"line":1603},[99,20371,18861],{"class":168},[99,20373,20374,20376,20378,20380,20382,20384,20386],{"class":101,"line":1609},[99,20375,18506],{"class":1949},[99,20377,110],{"class":109},[99,20379,6779],{"class":105},[99,20381,15556],{"class":1949},[99,20383,463],{"class":105},[99,20385,6812],{"class":5203},[99,20387,12429],{"class":109},[99,20389,20390,20392,20394],{"class":101,"line":1614},[99,20391,20347],{"class":109},[99,20393,155],{"class":105},[99,20395,20396],{"class":109}," p.age;\n",[99,20398,20399,20401,20403,20405,20407],{"class":101,"line":1628},[99,20400,9656],{"class":109},[99,20402,1154],{"class":105},[99,20404,19878],{"class":214},[99,20406,1430],{"class":105},[99,20408,8827],{"class":109},[99,20410,20411],{"class":101,"line":1633},[99,20412,2173],{"class":109},[99,20414,20415],{"class":101,"line":1639},[99,20416,18534],{"class":168},[99,20418,20419,20421],{"class":101,"line":1660},[99,20420,18539],{"class":1949},[99,20422,10840],{"class":109},[99,20424,20425,20427,20429,20431,20433],{"class":101,"line":1665},[99,20426,9656],{"class":109},[99,20428,1154],{"class":105},[99,20430,19915],{"class":214},[99,20432,1430],{"class":105},[99,20434,8827],{"class":109},[99,20436,20437],{"class":101,"line":1679},[99,20438,2173],{"class":109},[99,20440,20441],{"class":101,"line":1684},[99,20442,14703],{"class":105},[99,20444,20445,20447],{"class":101,"line":1713},[99,20446,1971],{"class":105},[99,20448,7784],{"class":109},[99,20450,20451],{"class":101,"line":1718},[99,20452,3981],{"class":109},[99,20454,20455],{"class":101,"line":1735},[99,20456,2386],{"emptyLinePlaceholder":26},[99,20458,20459,20461,20463],{"class":101,"line":1740},[99,20460,5351],{"class":105},[99,20462,5575],{"class":1949},[99,20464,1962],{"class":109},[99,20466,20467],{"class":101,"line":1745},[99,20468,1532],{"class":109},[99,20470,20471,20473,20475,20477,20479],{"class":101,"line":1750},[99,20472,19418],{"class":109},[99,20474,7117],{"class":1949},[99,20476,110],{"class":109},[99,20478,760],{"class":158},[99,20480,2705],{"class":109},[99,20482,20483],{"class":101,"line":1764},[99,20484,20485],{"class":168},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[99,20487,20488,20490,20492],{"class":101,"line":1769},[99,20489,19418],{"class":109},[99,20491,7020],{"class":1949},[99,20493,17502],{"class":109},[99,20495,20496],{"class":101,"line":2563},[99,20497,2386],{"emptyLinePlaceholder":26},[99,20499,20500,20502,20504,20507,20509,20512,20514],{"class":101,"line":2577},[99,20501,6516],{"class":109},[99,20503,1154],{"class":105},[99,20505,20506],{"class":214}," \"p2的年龄为： \"",[99,20508,1430],{"class":105},[99,20510,20511],{"class":109}," p2.age ",[99,20513,1154],{"class":105},[99,20515,8827],{"class":109},[99,20517,20518],{"class":101,"line":2585},[99,20519,1551],{"class":109},[99,20521,20522],{"class":101,"line":2590},[99,20523,2386],{"emptyLinePlaceholder":26},[99,20525,20526,20528,20530],{"class":101,"line":2596},[99,20527,5351],{"class":105},[99,20529,5644],{"class":1949},[99,20531,1962],{"class":109},[99,20533,20534],{"class":101,"line":2602},[99,20535,1532],{"class":109},[99,20537,20538],{"class":101,"line":2607},[99,20539,20540],{"class":168},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[99,20542,20543,20546],{"class":101,"line":7935},[99,20544,20545],{"class":109},"    Person p1;",[99,20547,20548],{"class":168}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[99,20550,20551,20553,20555,20557,20559,20561],{"class":101,"line":7959},[99,20552,19418],{"class":109},[99,20554,7020],{"class":1949},[99,20556,110],{"class":109},[99,20558,556],{"class":158},[99,20560,5953],{"class":109},[99,20562,20563],{"class":168}," \u002F\u002F用户提供的有参\n",[99,20565,20566,20568,20571,20574],{"class":101,"line":7964},[99,20567,19418],{"class":109},[99,20569,20570],{"class":1949},"p3",[99,20572,20573],{"class":109},"(p2);",[99,20575,20576],{"class":168}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[99,20578,20579],{"class":101,"line":7970},[99,20580,2386],{"emptyLinePlaceholder":26},[99,20582,20583],{"class":101,"line":7997},[99,20584,20585],{"class":168},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[99,20587,20588,20591],{"class":101,"line":8002},[99,20589,20590],{"class":109},"    Person p4;",[99,20592,20548],{"class":168},[99,20594,20595,20597,20600,20602,20604,20606],{"class":101,"line":8008},[99,20596,19418],{"class":109},[99,20598,20599],{"class":1949},"p5",[99,20601,110],{"class":109},[99,20603,556],{"class":158},[99,20605,5953],{"class":109},[99,20607,20608],{"class":168}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[99,20610,20611,20613,20616,20619],{"class":101,"line":8020},[99,20612,19418],{"class":109},[99,20614,20615],{"class":1949},"p6",[99,20617,20618],{"class":109},"(p5);",[99,20620,20621],{"class":168}," \u002F\u002F用户自己提供拷贝构造\n",[99,20623,20624],{"class":101,"line":8032},[99,20625,1551],{"class":109},[99,20627,20628],{"class":101,"line":8044},[99,20629,2386],{"emptyLinePlaceholder":26},[99,20631,20632,20634,20636],{"class":101,"line":9703},[99,20633,113],{"class":105},[99,20635,1959],{"class":1949},[99,20637,10840],{"class":109},[99,20639,20640],{"class":101,"line":9728},[99,20641,2386],{"emptyLinePlaceholder":26},[99,20643,20644,20646],{"class":101,"line":9751},[99,20645,5620],{"class":1949},[99,20647,5623],{"class":109},[99,20649,20650],{"class":101,"line":9775},[99,20651,2386],{"emptyLinePlaceholder":26},[99,20653,20654,20656,20658,20660],{"class":101,"line":9780},[99,20655,2289],{"class":1949},[99,20657,110],{"class":109},[99,20659,2294],{"class":214},[99,20661,2705],{"class":109},[99,20663,20664],{"class":101,"line":9785},[99,20665,2386],{"emptyLinePlaceholder":26},[99,20667,20668,20670,20672],{"class":101,"line":9790},[99,20669,4076],{"class":105},[99,20671,4079],{"class":158},[99,20673,1276],{"class":109},[99,20675,20676],{"class":101,"line":9799},[99,20677,1551],{"class":109},[70,20679,20681],{"id":20680},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20683,20684],{},"浅拷贝：简单的赋值拷贝操作",[14,20686,20687],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[90,20689,20691],{"className":92,"code":20690,"language":94,"meta":21,"style":21},"#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",[96,20692,20693,20699,20709,20715,20719,20723,20728,20734,20738,20751,20755,20759,20766,20770,20780,20795,20808,20812,20817,20822,20838,20842,20855,20860,20865,20870,20879,20884,20899,20903,20907,20911,20917,20921,20926,20941,20945,20956,20970,20974,20983,20987,20993,21005,21009,21017,21021,21038,21069,21077,21105,21109,21113,21121,21125,21131],{"__ignoreMap":21},[99,20694,20695,20697],{"class":101,"line":102},[99,20696,1935],{"class":105},[99,20698,1938],{"class":214},[99,20700,20701,20703,20705,20707],{"class":101,"line":22},[99,20702,1943],{"class":105},[99,20704,1946],{"class":105},[99,20706,1950],{"class":1949},[99,20708,1276],{"class":109},[99,20710,20711,20713],{"class":101,"line":1165},[99,20712,14681],{"class":105},[99,20714,15158],{"class":1949},[99,20716,20717],{"class":101,"line":1180},[99,20718,1532],{"class":109},[99,20720,20721],{"class":101,"line":1186},[99,20722,14703],{"class":105},[99,20724,20725],{"class":101,"line":1200},[99,20726,20727],{"class":168},"    \u002F\u002F默认构造函数\n",[99,20729,20730,20732],{"class":101,"line":1206},[99,20731,18506],{"class":1949},[99,20733,1962],{"class":109},[99,20735,20736],{"class":101,"line":1297},[99,20737,2016],{"class":109},[99,20739,20740,20742,20744,20747,20749],{"class":101,"line":1303},[99,20741,3437],{"class":109},[99,20743,1154],{"class":105},[99,20745,20746],{"class":214},"\"默认构造函数\"",[99,20748,1154],{"class":105},[99,20750,1177],{"class":109},[99,20752,20753],{"class":101,"line":1315},[99,20754,2173],{"class":109},[99,20756,20757],{"class":101,"line":1598},[99,20758,20330],{"class":168},[99,20760,20761,20763],{"class":101,"line":1603},[99,20762,18539],{"class":1949},[99,20764,20765],{"class":109},"(int age,int height)\n",[99,20767,20768],{"class":101,"line":1609},[99,20769,2016],{"class":109},[99,20771,20772,20775,20777],{"class":101,"line":1614},[99,20773,20774],{"class":109},"        m_Age",[99,20776,155],{"class":105},[99,20778,20779],{"class":109},"age;\n",[99,20781,20782,20785,20787,20789,20792],{"class":101,"line":1628},[99,20783,20784],{"class":109},"        m_Height",[99,20786,11704],{"class":105},[99,20788,2368],{"class":105},[99,20790,20791],{"class":109},"(height);",[99,20793,20794],{"class":168},"\u002F\u002F放到堆区\n",[99,20796,20797,20799,20801,20804,20806],{"class":101,"line":1633},[99,20798,3437],{"class":109},[99,20800,1154],{"class":105},[99,20802,20803],{"class":214},"\"有参构造函数\"",[99,20805,1154],{"class":105},[99,20807,1177],{"class":109},[99,20809,20810],{"class":101,"line":1639},[99,20811,2173],{"class":109},[99,20813,20814],{"class":101,"line":1660},[99,20815,20816],{"class":168},"    \u002F\u002F深拷贝解决上述问题\n",[99,20818,20819],{"class":101,"line":1665},[99,20820,20821],{"class":168},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[99,20823,20824,20826,20828,20830,20832,20834,20836],{"class":101,"line":1679},[99,20825,18506],{"class":1949},[99,20827,110],{"class":109},[99,20829,6779],{"class":105},[99,20831,15556],{"class":1949},[99,20833,10571],{"class":105},[99,20835,14],{"class":5203},[99,20837,116],{"class":109},[99,20839,20840],{"class":101,"line":1684},[99,20841,2016],{"class":109},[99,20843,20844,20846,20848,20851,20853],{"class":101,"line":1713},[99,20845,3437],{"class":109},[99,20847,1154],{"class":105},[99,20849,20850],{"class":214},"\"拷贝构造函数\"",[99,20852,1154],{"class":105},[99,20854,1177],{"class":109},[99,20856,20857],{"class":101,"line":1718},[99,20858,20859],{"class":168},"        \u002F\u002F编译器默认的写如下注释部分\n",[99,20861,20862],{"class":101,"line":1735},[99,20863,20864],{"class":168},"        \u002F\u002Fm_Age=p.m_Age;\n",[99,20866,20867],{"class":101,"line":1740},[99,20868,20869],{"class":168},"        \u002F\u002Fm_Height=p.m_Height;\n",[99,20871,20872,20874,20876],{"class":101,"line":1745},[99,20873,20774],{"class":109},[99,20875,155],{"class":105},[99,20877,20878],{"class":109},"p.m_Age;\n",[99,20880,20881],{"class":101,"line":1750},[99,20882,20883],{"class":168},"        \u002F\u002F深拷贝操作\n",[99,20885,20886,20888,20890,20892,20894,20896],{"class":101,"line":1764},[99,20887,20784],{"class":109},[99,20889,11704],{"class":105},[99,20891,2368],{"class":105},[99,20893,110],{"class":109},[99,20895,565],{"class":105},[99,20897,20898],{"class":109},"p.m_Height);\n",[99,20900,20901],{"class":101,"line":1769},[99,20902,2173],{"class":109},[99,20904,20905],{"class":101,"line":2563},[99,20906,2386],{"emptyLinePlaceholder":26},[99,20908,20909],{"class":101,"line":2577},[99,20910,18534],{"class":168},[99,20912,20913,20915],{"class":101,"line":2585},[99,20914,18539],{"class":1949},[99,20916,1962],{"class":109},[99,20918,20919],{"class":101,"line":2590},[99,20920,2016],{"class":109},[99,20922,20923],{"class":101,"line":2596},[99,20924,20925],{"class":168},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[99,20927,20928,20930,20933,20936,20939],{"class":101,"line":2602},[99,20929,2483],{"class":105},[99,20931,20932],{"class":109},"(m_Height ",[99,20934,20935],{"class":105},"!=",[99,20937,20938],{"class":158}," NULL",[99,20940,116],{"class":109},[99,20942,20943],{"class":101,"line":2607},[99,20944,2496],{"class":109},[99,20946,20947,20950,20953],{"class":101,"line":7935},[99,20948,20949],{"class":105},"            delete",[99,20951,20952],{"class":109}," m_Height;",[99,20954,20955],{"class":168}," \u002F\u002F释放堆区内存\n",[99,20957,20958,20961,20963,20965,20967],{"class":101,"line":7959},[99,20959,20960],{"class":109},"            m_Height",[99,20962,155],{"class":105},[99,20964,2378],{"class":158},[99,20966,165],{"class":109},[99,20968,20969],{"class":168}," \u002F\u002F防止野指针\n",[99,20971,20972],{"class":101,"line":7964},[99,20973,2515],{"class":109},[99,20975,20976,20978,20980],{"class":101,"line":7970},[99,20977,3437],{"class":109},[99,20979,1154],{"class":105},[99,20981,20982],{"class":214},"\"Person的析构函数调用\"\n",[99,20984,20985],{"class":101,"line":7997},[99,20986,2173],{"class":109},[99,20988,20989,20991],{"class":101,"line":8002},[99,20990,1971],{"class":105},[99,20992,15653],{"class":109},[99,20994,20995,20997,20999,21002],{"class":101,"line":8008},[99,20996,1971],{"class":105},[99,20998,6505],{"class":105},[99,21000,21001],{"class":109},"m_Height;",[99,21003,21004],{"class":168}," \u002F\u002F定义一个指针，指向身高\n",[99,21006,21007],{"class":101,"line":8020},[99,21008,3981],{"class":109},[99,21010,21011,21013,21015],{"class":101,"line":8032},[99,21012,5351],{"class":105},[99,21014,5575],{"class":1949},[99,21016,1962],{"class":109},[99,21018,21019],{"class":101,"line":8044},[99,21020,1532],{"class":109},[99,21022,21023,21025,21027,21029,21031,21033,21036],{"class":101,"line":9703},[99,21024,19418],{"class":109},[99,21026,7117],{"class":1949},[99,21028,110],{"class":109},[99,21030,760],{"class":158},[99,21032,488],{"class":109},[99,21034,21035],{"class":158},"160",[99,21037,2705],{"class":109},[99,21039,21040,21042,21044,21047,21049,21052,21054,21057,21059,21062,21064,21066],{"class":101,"line":9728},[99,21041,1537],{"class":109},[99,21043,1154],{"class":105},[99,21045,21046],{"class":214},"\"p1的年龄为:\"",[99,21048,1154],{"class":105},[99,21050,21051],{"class":109},"p1.m_Age",[99,21053,1154],{"class":105},[99,21055,21056],{"class":214},"\"身高为：\"",[99,21058,6406],{"class":105},[99,21060,21061],{"class":109},"p1.m_Height",[99,21063,1154],{"class":105},[99,21065,1224],{"class":109},[99,21067,21068],{"class":168},"  \u002F\u002F18\n",[99,21070,21071,21073,21075],{"class":101,"line":9751},[99,21072,19418],{"class":109},[99,21074,7020],{"class":1949},[99,21076,17502],{"class":109},[99,21078,21079,21081,21083,21086,21088,21090,21092,21094,21096,21099,21101,21103],{"class":101,"line":9775},[99,21080,1537],{"class":109},[99,21082,1154],{"class":105},[99,21084,21085],{"class":214},"\"p2的年龄为：\"",[99,21087,1154],{"class":105},[99,21089,19448],{"class":109},[99,21091,1154],{"class":105},[99,21093,21056],{"class":214},[99,21095,6406],{"class":105},[99,21097,21098],{"class":109},"p2.m_Height",[99,21100,1154],{"class":105},[99,21102,1224],{"class":109},[99,21104,21068],{"class":168},[99,21106,21107],{"class":101,"line":9780},[99,21108,13197],{"class":109},[99,21110,21111],{"class":101,"line":9785},[99,21112,1551],{"class":109},[99,21114,21115,21117,21119],{"class":101,"line":9790},[99,21116,113],{"class":105},[99,21118,1959],{"class":1949},[99,21120,1962],{"class":109},[99,21122,21123],{"class":101,"line":9799},[99,21124,1532],{"class":109},[99,21126,21127,21129],{"class":101,"line":9804},[99,21128,5620],{"class":1949},[99,21130,5623],{"class":109},[99,21132,21133],{"class":101,"line":9810},[99,21134,1551],{"class":109},[14,21136,21137],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21139,21140],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21142,21143],{},[1448,21144],{"alt":21,"src":21145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21147,21148],{},"浅拷贝问题要使用深拷贝来解决",[14,21150,21151],{},[1448,21152],{"alt":21,"src":21153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21155,21156],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[70,21158,21160],{"id":21159},"_826初始化列表","8.2.6初始化列表",[14,21162,21163],{},"作用：初始化属性",[14,21165,5168],{},[90,21167,21170],{"className":21168,"code":21169,"language":5174},[5172],"构造函数():属性1(值1),属性2(值2).....{}\n",[96,21171,21169],{"__ignoreMap":21},[14,21173,21174],{},"例子",[90,21176,21178],{"className":92,"code":21177,"language":94,"meta":21,"style":21},"#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",[96,21179,21180,21186,21196,21202,21206,21211,21215,21220,21225,21230,21235,21240,21245,21249,21254,21259,21302,21311,21329,21347,21365,21369,21373,21380,21387,21394,21398,21402,21410,21414,21418,21438,21447,21451,21455,21465,21469,21477],{"__ignoreMap":21},[99,21181,21182,21184],{"class":101,"line":102},[99,21183,1935],{"class":105},[99,21185,1938],{"class":214},[99,21187,21188,21190,21192,21194],{"class":101,"line":22},[99,21189,1943],{"class":105},[99,21191,1946],{"class":105},[99,21193,1950],{"class":1949},[99,21195,1276],{"class":109},[99,21197,21198,21200],{"class":101,"line":1165},[99,21199,14681],{"class":105},[99,21201,15158],{"class":1949},[99,21203,21204],{"class":101,"line":1180},[99,21205,1532],{"class":109},[99,21207,21208],{"class":101,"line":1186},[99,21209,21210],{"class":105},"    public:\n",[99,21212,21213],{"class":101,"line":1200},[99,21214,2386],{"emptyLinePlaceholder":26},[99,21216,21217],{"class":101,"line":1206},[99,21218,21219],{"class":168},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[99,21221,21222],{"class":101,"line":1297},[99,21223,21224],{"class":168},"    \u002F\u002FPerson(int a, int b, int c) {\n",[99,21226,21227],{"class":101,"line":1303},[99,21228,21229],{"class":168},"    \u002F\u002F  m_A = a;\n",[99,21231,21232],{"class":101,"line":1315},[99,21233,21234],{"class":168},"    \u002F\u002F  m_B = b;\n",[99,21236,21237],{"class":101,"line":1598},[99,21238,21239],{"class":168},"    \u002F\u002F  m_C = c;\n",[99,21241,21242],{"class":101,"line":1603},[99,21243,21244],{"class":168},"    \u002F\u002F}\n",[99,21246,21247],{"class":101,"line":1609},[99,21248,2386],{"emptyLinePlaceholder":26},[99,21250,21251],{"class":101,"line":1614},[99,21252,21253],{"class":168},"    \u002F\u002F初始化列表方式初始化\n",[99,21255,21256],{"class":101,"line":1628},[99,21257,21258],{"class":168},"    \u002F\u002F使用有参构造函数\n",[99,21260,21261,21263,21265,21267,21269,21271,21273,21275,21277,21279,21281,21284,21287,21290,21293,21296,21299],{"class":101,"line":1633},[99,21262,18506],{"class":1949},[99,21264,110],{"class":109},[99,21266,113],{"class":105},[99,21268,1384],{"class":5203},[99,21270,12422],{"class":109},[99,21272,113],{"class":105},[99,21274,2819],{"class":5203},[99,21276,12422],{"class":109},[99,21278,113],{"class":105},[99,21280,2835],{"class":5203},[99,21282,21283],{"class":109},") :",[99,21285,21286],{"class":1949},"m_A",[99,21288,21289],{"class":109},"(a), ",[99,21291,21292],{"class":1949},"m_B",[99,21294,21295],{"class":109},"(b), ",[99,21297,21298],{"class":1949},"m_C",[99,21300,21301],{"class":109},"(c) {}\n",[99,21303,21304,21306,21309],{"class":101,"line":1639},[99,21305,14896],{"class":105},[99,21307,21308],{"class":1949}," PrintPerson",[99,21310,10840],{"class":109},[99,21312,21313,21315,21317,21320,21322,21325,21327],{"class":101,"line":1660},[99,21314,9656],{"class":109},[99,21316,1154],{"class":105},[99,21318,21319],{"class":214}," \"mA:\"",[99,21321,1430],{"class":105},[99,21323,21324],{"class":109}," m_A ",[99,21326,1154],{"class":105},[99,21328,8827],{"class":109},[99,21330,21331,21333,21335,21338,21340,21343,21345],{"class":101,"line":1665},[99,21332,9656],{"class":109},[99,21334,1154],{"class":105},[99,21336,21337],{"class":214}," \"mB:\"",[99,21339,1430],{"class":105},[99,21341,21342],{"class":109}," m_B ",[99,21344,1154],{"class":105},[99,21346,8827],{"class":109},[99,21348,21349,21351,21353,21356,21358,21361,21363],{"class":101,"line":1679},[99,21350,9656],{"class":109},[99,21352,1154],{"class":105},[99,21354,21355],{"class":214}," \"mC:\"",[99,21357,1430],{"class":105},[99,21359,21360],{"class":109}," m_C ",[99,21362,1154],{"class":105},[99,21364,8827],{"class":109},[99,21366,21367],{"class":101,"line":1684},[99,21368,2173],{"class":109},[99,21370,21371],{"class":101,"line":1713},[99,21372,15209],{"class":105},[99,21374,21375,21377],{"class":101,"line":1718},[99,21376,1971],{"class":105},[99,21378,21379],{"class":109}," m_A;\n",[99,21381,21382,21384],{"class":101,"line":1735},[99,21383,1971],{"class":105},[99,21385,21386],{"class":109}," m_B;\n",[99,21388,21389,21391],{"class":101,"line":1740},[99,21390,1971],{"class":105},[99,21392,21393],{"class":109}," m_C;\n",[99,21395,21396],{"class":101,"line":1745},[99,21397,3981],{"class":109},[99,21399,21400],{"class":101,"line":1750},[99,21401,2386],{"emptyLinePlaceholder":26},[99,21403,21404,21406,21408],{"class":101,"line":1764},[99,21405,113],{"class":105},[99,21407,1959],{"class":1949},[99,21409,5965],{"class":109},[99,21411,21412],{"class":101,"line":1769},[99,21413,1532],{"class":109},[99,21415,21416],{"class":101,"line":2563},[99,21417,2386],{"emptyLinePlaceholder":26},[99,21419,21420,21422,21424,21426,21428,21430,21432,21434,21436],{"class":101,"line":2577},[99,21421,19418],{"class":109},[99,21423,14],{"class":1949},[99,21425,110],{"class":109},[99,21427,327],{"class":158},[99,21429,12422],{"class":109},[99,21431,187],{"class":158},[99,21433,12422],{"class":109},[99,21435,181],{"class":158},[99,21437,2705],{"class":109},[99,21439,21440,21442,21445],{"class":101,"line":2585},[99,21441,15853],{"class":109},[99,21443,21444],{"class":1949},"PrintPerson",[99,21446,5623],{"class":109},[99,21448,21449],{"class":101,"line":2590},[99,21450,2386],{"emptyLinePlaceholder":26},[99,21452,21453],{"class":101,"line":2596},[99,21454,2386],{"emptyLinePlaceholder":26},[99,21456,21457,21459,21461,21463],{"class":101,"line":2602},[99,21458,2289],{"class":1949},[99,21460,110],{"class":109},[99,21462,2294],{"class":214},[99,21464,2705],{"class":109},[99,21466,21467],{"class":101,"line":2607},[99,21468,2386],{"emptyLinePlaceholder":26},[99,21470,21471,21473,21475],{"class":101,"line":7935},[99,21472,4076],{"class":105},[99,21474,4079],{"class":158},[99,21476,1276],{"class":109},[99,21478,21479],{"class":101,"line":7959},[99,21480,1551],{"class":109},[14,21482,21483,21484,21487,21488],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[259,21485,21486],{},"参数名就是定义的对象属性","，",[259,21489,21490],{},"属性后面的值为有参构造函数的形参",[90,21492,21494],{"className":92,"code":21493,"language":94,"meta":21,"style":21},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[96,21495,21496],{"__ignoreMap":21},[99,21497,21498,21500,21502,21504,21507,21509,21512,21514,21517,21519,21522,21524,21527,21529],{"class":101,"line":102},[99,21499,19033],{"class":1949},[99,21501,110],{"class":109},[99,21503,113],{"class":105},[99,21505,21506],{"class":109}," a.",[99,21508,113],{"class":105},[99,21510,21511],{"class":109}," b,",[99,21513,113],{"class":105},[99,21515,21516],{"class":109}," b):",[99,21518,21286],{"class":1949},[99,21520,21521],{"class":109},"(a),",[99,21523,21292],{"class":1949},[99,21525,21526],{"class":109},"(c),",[99,21528,21298],{"class":1949},[99,21530,21531],{"class":109},"(b) {}\n",[70,21533,21535],{"id":21534},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21537,21538],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21540,14620],{},[90,21542,21544],{"className":92,"code":21543,"language":94,"meta":21,"style":21},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[96,21545,21546,21551,21556,21560,21565,21569],{"__ignoreMap":21},[99,21547,21548],{"class":101,"line":102},[99,21549,21550],{"class":109},"A{};\n",[99,21552,21553],{"class":101,"line":22},[99,21554,21555],{"class":109},"B\n",[99,21557,21558],{"class":101,"line":1165},[99,21559,1532],{"class":109},[99,21561,21562],{"class":101,"line":1180},[99,21563,21564],{"class":109},"    A a;\n",[99,21566,21567],{"class":101,"line":1186},[99,21568,1551],{"class":109},[99,21570,21571],{"class":101,"line":1200},[99,21572,21573],{"class":168},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21575,21576],{},"案例",[90,21578,21580],{"className":92,"code":21579,"language":94,"meta":21,"style":21},"\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",[96,21581,21582,21587,21594,21598,21603,21608,21622,21626,21636,21647,21651,21658,21662,21675,21679,21684,21689,21693,21699,21703,21707,21711,21742,21746,21757,21761,21767,21771,21784,21788,21792,21796,21801,21806,21810,21818,21822,21839,21858,21862,21870,21874,21880],{"__ignoreMap":21},[99,21583,21584],{"class":101,"line":102},[99,21585,21586],{"class":168},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[99,21588,21589,21591],{"class":101,"line":22},[99,21590,14681],{"class":105},[99,21592,21593],{"class":1949}," Phone\n",[99,21595,21596],{"class":101,"line":1165},[99,21597,1532],{"class":109},[99,21599,21600],{"class":101,"line":1180},[99,21601,21602],{"class":109},"public：\n",[99,21604,21605],{"class":101,"line":1186},[99,21606,21607],{"class":168},"    \u002F\u002F 赋值(构造函数)\n",[99,21609,21610,21613,21615,21617,21620],{"class":101,"line":1200},[99,21611,21612],{"class":1949},"    Phone",[99,21614,110],{"class":109},[99,21616,14904],{"class":1949},[99,21618,21619],{"class":5203}," pName",[99,21621,116],{"class":109},[99,21623,21624],{"class":101,"line":1206},[99,21625,2016],{"class":109},[99,21627,21628,21631,21633],{"class":101,"line":1297},[99,21629,21630],{"class":109},"        m_pName",[99,21632,155],{"class":105},[99,21634,21635],{"class":109},"pName;\n",[99,21637,21638,21640,21642,21645],{"class":101,"line":1303},[99,21639,3437],{"class":109},[99,21641,1154],{"class":105},[99,21643,21644],{"class":214},"\"Phone的构造函数调用\"",[99,21646,1276],{"class":109},[99,21648,21649],{"class":101,"line":1315},[99,21650,2173],{"class":109},[99,21652,21653,21656],{"class":101,"line":1598},[99,21654,21655],{"class":1949},"    ~Phone",[99,21657,1962],{"class":109},[99,21659,21660],{"class":101,"line":1603},[99,21661,2016],{"class":109},[99,21663,21664,21666,21668,21671,21673],{"class":101,"line":1609},[99,21665,3437],{"class":109},[99,21667,1154],{"class":105},[99,21669,21670],{"class":214},"\"Phone析构函数调用\"",[99,21672,1154],{"class":105},[99,21674,1177],{"class":109},[99,21676,21677],{"class":101,"line":1614},[99,21678,2173],{"class":109},[99,21680,21681],{"class":101,"line":1628},[99,21682,21683],{"class":168},"    \u002F\u002F\n",[99,21685,21686],{"class":101,"line":1633},[99,21687,21688],{"class":109},"    string m_PName;\n",[99,21690,21691],{"class":101,"line":1639},[99,21692,3981],{"class":109},[99,21694,21695,21697],{"class":101,"line":1660},[99,21696,14681],{"class":105},[99,21698,15158],{"class":1949},[99,21700,21701],{"class":101,"line":1665},[99,21702,1532],{"class":109},[99,21704,21705],{"class":101,"line":1679},[99,21706,14703],{"class":105},[99,21708,21709],{"class":101,"line":1684},[99,21710,16981],{"class":168},[99,21712,21713,21715,21717,21719,21721,21723,21725,21728,21731,21733,21736,21739],{"class":101,"line":1713},[99,21714,18506],{"class":1949},[99,21716,110],{"class":109},[99,21718,14904],{"class":1949},[99,21720,14907],{"class":5203},[99,21722,488],{"class":109},[99,21724,14904],{"class":1949},[99,21726,21727],{"class":5203}," pname",[99,21729,21730],{"class":109},"):",[99,21732,14997],{"class":1949},[99,21734,21735],{"class":109},"(name),m_phone.",[99,21737,21738],{"class":1949},"m_PName",[99,21740,21741],{"class":109},"(pname) \n",[99,21743,21744],{"class":101,"line":1718},[99,21745,2016],{"class":109},[99,21747,21748,21750,21752,21755],{"class":101,"line":1735},[99,21749,3437],{"class":109},[99,21751,1154],{"class":105},[99,21753,21754],{"class":214},"\"Person的构造函数调用\"",[99,21756,1276],{"class":109},[99,21758,21759],{"class":101,"line":1740},[99,21760,2173],{"class":109},[99,21762,21763,21765],{"class":101,"line":1745},[99,21764,18539],{"class":1949},[99,21766,1962],{"class":109},[99,21768,21769],{"class":101,"line":1750},[99,21770,2016],{"class":109},[99,21772,21773,21775,21777,21780,21782],{"class":101,"line":1764},[99,21774,3437],{"class":109},[99,21776,1154],{"class":105},[99,21778,21779],{"class":214},"\"Person析构函数调用\"",[99,21781,1154],{"class":105},[99,21783,1177],{"class":109},[99,21785,21786],{"class":101,"line":1769},[99,21787,2173],{"class":109},[99,21789,21790],{"class":101,"line":2563},[99,21791,7767],{"class":168},[99,21793,21794],{"class":101,"line":2577},[99,21795,14879],{"class":109},[99,21797,21798],{"class":101,"line":2585},[99,21799,21800],{"class":168},"    \u002F\u002F手机\n",[99,21802,21803],{"class":101,"line":2590},[99,21804,21805],{"class":109},"    Phone m_Phone;\n",[99,21807,21808],{"class":101,"line":2596},[99,21809,3981],{"class":109},[99,21811,21812,21814,21816],{"class":101,"line":2602},[99,21813,5351],{"class":105},[99,21815,5575],{"class":1949},[99,21817,1962],{"class":109},[99,21819,21820],{"class":101,"line":2607},[99,21821,1532],{"class":109},[99,21823,21824,21826,21828,21830,21832,21834,21837],{"class":101,"line":7935},[99,21825,19418],{"class":109},[99,21827,14],{"class":1949},[99,21829,110],{"class":109},[99,21831,7903],{"class":214},[99,21833,488],{"class":109},[99,21835,21836],{"class":214},"\"安卓\"",[99,21838,2705],{"class":109},[99,21840,21841,21843,21845,21848,21850,21853,21855],{"class":101,"line":7959},[99,21842,1537],{"class":109},[99,21844,1154],{"class":105},[99,21846,21847],{"class":109},"p.Name",[99,21849,1154],{"class":105},[99,21851,21852],{"class":214},"\"拿着：\"",[99,21854,1154],{"class":105},[99,21856,21857],{"class":109},"p.m_phone.m_PName;\n",[99,21859,21860],{"class":101,"line":7964},[99,21861,1551],{"class":109},[99,21863,21864,21866,21868],{"class":101,"line":7970},[99,21865,113],{"class":105},[99,21867,1959],{"class":1949},[99,21869,1962],{"class":109},[99,21871,21872],{"class":101,"line":7997},[99,21873,1532],{"class":109},[99,21875,21876,21878],{"class":101,"line":8002},[99,21877,5620],{"class":1949},[99,21879,5623],{"class":109},[99,21881,21882],{"class":101,"line":8008},[99,21883,1551],{"class":109},[14,21885,9012],{},[90,21887,21889],{"className":92,"code":21888,"language":94,"meta":21,"style":21},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[96,21890,21891,21896],{"__ignoreMap":21},[99,21892,21893],{"class":101,"line":102},[99,21894,21895],{"class":168},"    \u002F\u002F不需要写这个：\n",[99,21897,21898],{"class":101,"line":22},[99,21899,21900],{"class":168},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21902,21903],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[90,21905,21907],{"className":92,"code":21906,"language":94,"meta":21,"style":21},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[96,21908,21909],{"__ignoreMap":21},[99,21910,21911,21913,21916,21918,21921,21924],{"class":101,"line":102},[99,21912,19033],{"class":1949},[99,21914,21915],{"class":109},"(string name.string pname):",[99,21917,14997],{"class":1949},[99,21919,21920],{"class":109},"(name),",[99,21922,21923],{"class":1949},"m_phone",[99,21925,21926],{"class":109},"(pname) {}\n",[14,21928,21929,21930,155,21933],{},"采用的是隐式转换法，实际为如下：\n",[96,21931,21932],{},"m_phone(pname)",[96,21934,21935],{},"Phone m_phone=pname",[14,21937,21938,21941],{},[259,21939,21940],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21943,21944],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[70,21946,21948],{"id":21947},"_828静态对象","8.2.8静态对象",[14,21950,21951],{},"静态对象在成员对象前static，称为静态对象",[14,21953,21954],{},"静态对象分为两类：",[53,21956,21957],{},[56,21958,21959],{},"静态成员变量",[1117,21961,21962,21965,21968],{},[56,21963,21964],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[56,21966,21967],{},"②在编译阶段分配内存",[56,21969,21970],{},"③类内声明，类外初始化",[53,21972,21973],{"start":22},[56,21974,21975],{},"静态成员函数",[1117,21977,21978,21981],{},[56,21979,21980],{},"①所有对象共享同一个函数",[56,21982,21983],{},"②静态成员函数只能访问静态成员变量",[21985,21986,21988],"h4",{"id":21987},"_8281静态成员变量","8.2.8.1静态成员变量",[90,21990,21992],{"className":92,"code":21991,"language":94,"meta":21,"style":21},"#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",[96,21993,21994,22000,22010,22016,22020,22024,22029,22034,22039,22047,22051,22055,22059,22067,22071,22075,22080,22093,22097,22105,22109,22115],{"__ignoreMap":21},[99,21995,21996,21998],{"class":101,"line":102},[99,21997,1935],{"class":105},[99,21999,1938],{"class":214},[99,22001,22002,22004,22006,22008],{"class":101,"line":22},[99,22003,1943],{"class":105},[99,22005,1946],{"class":105},[99,22007,1950],{"class":1949},[99,22009,1276],{"class":109},[99,22011,22012,22014],{"class":101,"line":1165},[99,22013,14681],{"class":105},[99,22015,15158],{"class":1949},[99,22017,22018],{"class":101,"line":1180},[99,22019,1532],{"class":109},[99,22021,22022],{"class":101,"line":1186},[99,22023,14703],{"class":105},[99,22025,22026],{"class":101,"line":1200},[99,22027,22028],{"class":168},"    \u002F\u002F非静态成员变量\n",[99,22030,22031],{"class":101,"line":1206},[99,22032,22033],{"class":168},"    \u002F\u002F int m_A;\n",[99,22035,22036],{"class":101,"line":1297},[99,22037,22038],{"class":168},"    \u002F\u002F定义静态成员变量\n",[99,22040,22041,22043,22045],{"class":101,"line":1303},[99,22042,11007],{"class":105},[99,22044,2368],{"class":105},[99,22046,21379],{"class":109},[99,22048,22049],{"class":101,"line":1315},[99,22050,2386],{"emptyLinePlaceholder":26},[99,22052,22053],{"class":101,"line":1598},[99,22054,2386],{"emptyLinePlaceholder":26},[99,22056,22057],{"class":101,"line":1603},[99,22058,3981],{"class":109},[99,22060,22061,22063,22065],{"class":101,"line":1609},[99,22062,5351],{"class":105},[99,22064,5575],{"class":1949},[99,22066,1962],{"class":109},[99,22068,22069],{"class":101,"line":1614},[99,22070,1532],{"class":109},[99,22072,22073],{"class":101,"line":1628},[99,22074,15300],{"class":109},[99,22076,22077],{"class":101,"line":1633},[99,22078,22079],{"class":168},"    \u002F\u002F输出类成员变量这块内存\n",[99,22081,22082,22084,22086,22089,22091],{"class":101,"line":1639},[99,22083,1537],{"class":109},[99,22085,1154],{"class":105},[99,22087,22088],{"class":109},"p.m_A",[99,22090,1154],{"class":105},[99,22092,1177],{"class":109},[99,22094,22095],{"class":101,"line":1660},[99,22096,1551],{"class":109},[99,22098,22099,22101,22103],{"class":101,"line":1665},[99,22100,113],{"class":105},[99,22102,1959],{"class":1949},[99,22104,1962],{"class":109},[99,22106,22107],{"class":101,"line":1679},[99,22108,1532],{"class":109},[99,22110,22111,22113],{"class":101,"line":1684},[99,22112,5620],{"class":1949},[99,22114,1962],{"class":109},[99,22116,22117],{"class":101,"line":1713},[99,22118,1551],{"class":109},[14,22120,22121],{},"此时输出是报错的：无法解析外部命令",[14,22123,22124],{},"解决这一问题：必须用到类内声明，类外初始化操作",[90,22126,22128],{"className":92,"code":22127,"language":94,"meta":21,"style":21},"#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",[96,22129,22130,22136,22146,22152,22156,22160,22165,22173,22177,22182,22197,22205,22209,22213,22218,22223,22235,22240,22251,22256,22261,22274,22278,22286,22290,22296],{"__ignoreMap":21},[99,22131,22132,22134],{"class":101,"line":102},[99,22133,1935],{"class":105},[99,22135,1938],{"class":214},[99,22137,22138,22140,22142,22144],{"class":101,"line":22},[99,22139,1943],{"class":105},[99,22141,1946],{"class":105},[99,22143,1950],{"class":1949},[99,22145,1276],{"class":109},[99,22147,22148,22150],{"class":101,"line":1165},[99,22149,14681],{"class":105},[99,22151,15158],{"class":1949},[99,22153,22154],{"class":101,"line":1180},[99,22155,1532],{"class":109},[99,22157,22158],{"class":101,"line":1186},[99,22159,14703],{"class":105},[99,22161,22162],{"class":101,"line":1200},[99,22163,22164],{"class":168},"    \u002F\u002F类内声明\n",[99,22166,22167,22169,22171],{"class":101,"line":1206},[99,22168,11007],{"class":105},[99,22170,2368],{"class":105},[99,22172,21379],{"class":109},[99,22174,22175],{"class":101,"line":1297},[99,22176,3981],{"class":109},[99,22178,22179],{"class":101,"line":1303},[99,22180,22181],{"class":168},"\u002F\u002F类外初始化\n",[99,22183,22184,22186,22188,22191,22193,22195],{"class":101,"line":1315},[99,22185,113],{"class":105},[99,22187,15556],{"class":1949},[99,22189,22190],{"class":109},"::m_A",[99,22192,155],{"class":105},[99,22194,556],{"class":158},[99,22196,1276],{"class":109},[99,22198,22199,22201,22203],{"class":101,"line":1598},[99,22200,5351],{"class":105},[99,22202,5575],{"class":1949},[99,22204,1962],{"class":109},[99,22206,22207],{"class":101,"line":1603},[99,22208,1532],{"class":109},[99,22210,22211],{"class":101,"line":1609},[99,22212,15300],{"class":109},[99,22214,22215],{"class":101,"line":1614},[99,22216,22217],{"class":168},"    \u002F\u002F访问变量的原内存空间\n",[99,22219,22220],{"class":101,"line":1628},[99,22221,22222],{"class":168},"    \u002F\u002F100\n",[99,22224,22225,22227,22229,22231,22233],{"class":101,"line":1633},[99,22226,1537],{"class":109},[99,22228,1154],{"class":105},[99,22230,22088],{"class":109},[99,22232,1154],{"class":105},[99,22234,1177],{"class":109},[99,22236,22237],{"class":101,"line":1639},[99,22238,22239],{"class":109},"    Person p2;\n",[99,22241,22242,22245,22247,22249],{"class":101,"line":1660},[99,22243,22244],{"class":109},"    p2.m_A",[99,22246,155],{"class":105},[99,22248,1708],{"class":158},[99,22250,1276],{"class":109},[99,22252,22253],{"class":101,"line":1665},[99,22254,22255],{"class":168},"    \u002F\u002F继续访问这片空间\n",[99,22257,22258],{"class":101,"line":1679},[99,22259,22260],{"class":168},"    \u002F\u002F200\n",[99,22262,22263,22265,22267,22270,22272],{"class":101,"line":1684},[99,22264,1537],{"class":109},[99,22266,1154],{"class":105},[99,22268,22269],{"class":109},"p2.m_A",[99,22271,1154],{"class":105},[99,22273,1177],{"class":109},[99,22275,22276],{"class":101,"line":1713},[99,22277,1551],{"class":109},[99,22279,22280,22282,22284],{"class":101,"line":1718},[99,22281,113],{"class":105},[99,22283,1959],{"class":1949},[99,22285,1962],{"class":109},[99,22287,22288],{"class":101,"line":1735},[99,22289,1532],{"class":109},[99,22291,22292,22294],{"class":101,"line":1740},[99,22293,5620],{"class":1949},[99,22295,5623],{"class":109},[99,22297,22298],{"class":101,"line":1745},[99,22299,1551],{"class":109},[14,22301,22302],{},[259,22303,22304],{},"静态变量的访问",[90,22306,22308],{"className":92,"code":22307,"language":94,"meta":21,"style":21},"#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",[96,22309,22310,22316,22326,22332,22336,22340,22344,22352,22356,22361,22369,22373,22377,22391,22406,22414,22418,22423,22428,22433,22438,22450,22455,22460,22474,22491,22495,22503,22507,22513],{"__ignoreMap":21},[99,22311,22312,22314],{"class":101,"line":102},[99,22313,1935],{"class":105},[99,22315,1938],{"class":214},[99,22317,22318,22320,22322,22324],{"class":101,"line":22},[99,22319,1943],{"class":105},[99,22321,1946],{"class":105},[99,22323,1950],{"class":1949},[99,22325,1276],{"class":109},[99,22327,22328,22330],{"class":101,"line":1165},[99,22329,14681],{"class":105},[99,22331,15158],{"class":1949},[99,22333,22334],{"class":101,"line":1180},[99,22335,1532],{"class":109},[99,22337,22338],{"class":101,"line":1186},[99,22339,14703],{"class":105},[99,22341,22342],{"class":101,"line":1200},[99,22343,22164],{"class":168},[99,22345,22346,22348,22350],{"class":101,"line":1206},[99,22347,11007],{"class":105},[99,22349,2368],{"class":105},[99,22351,21379],{"class":109},[99,22353,22354],{"class":101,"line":1297},[99,22355,15209],{"class":105},[99,22357,22358],{"class":101,"line":1303},[99,22359,22360],{"class":168},"    \u002F\u002F静态成员变量也是有访问权限的\n",[99,22362,22363,22365,22367],{"class":101,"line":1315},[99,22364,11007],{"class":105},[99,22366,2368],{"class":105},[99,22368,21386],{"class":109},[99,22370,22371],{"class":101,"line":1598},[99,22372,3981],{"class":109},[99,22374,22375],{"class":101,"line":1603},[99,22376,22181],{"class":168},[99,22378,22379,22381,22383,22385,22387,22389],{"class":101,"line":1609},[99,22380,113],{"class":105},[99,22382,15556],{"class":1949},[99,22384,22190],{"class":109},[99,22386,155],{"class":105},[99,22388,556],{"class":158},[99,22390,1276],{"class":109},[99,22392,22393,22395,22397,22400,22402,22404],{"class":101,"line":1614},[99,22394,113],{"class":105},[99,22396,15556],{"class":1949},[99,22398,22399],{"class":109},"::m_B",[99,22401,155],{"class":105},[99,22403,810],{"class":158},[99,22405,1276],{"class":109},[99,22407,22408,22410,22412],{"class":101,"line":1628},[99,22409,5351],{"class":105},[99,22411,5644],{"class":1949},[99,22413,1962],{"class":109},[99,22415,22416],{"class":101,"line":1633},[99,22417,1532],{"class":109},[99,22419,22420],{"class":101,"line":1639},[99,22421,22422],{"class":168},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[99,22424,22425],{"class":101,"line":1660},[99,22426,22427],{"class":168},"    \u002F\u002F静态成员变量有两种访问方式：\n",[99,22429,22430],{"class":101,"line":1665},[99,22431,22432],{"class":168},"    \u002F\u002F1.通过对象进行访问\n",[99,22434,22435],{"class":101,"line":1679},[99,22436,22437],{"class":109},"    Person p;  \n",[99,22439,22440,22442,22444,22446,22448],{"class":101,"line":1684},[99,22441,1537],{"class":109},[99,22443,1154],{"class":105},[99,22445,22088],{"class":109},[99,22447,1154],{"class":105},[99,22449,1177],{"class":109},[99,22451,22452],{"class":101,"line":1713},[99,22453,22454],{"class":168},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[99,22456,22457],{"class":101,"line":1718},[99,22458,22459],{"class":168},"    \u002F\u002F2.通过类名进行访问\n",[99,22461,22462,22464,22466,22468,22470,22472],{"class":101,"line":1735},[99,22463,1537],{"class":109},[99,22465,1154],{"class":105},[99,22467,19033],{"class":1949},[99,22469,22190],{"class":109},[99,22471,1154],{"class":105},[99,22473,1177],{"class":109},[99,22475,22476,22478,22480,22482,22484,22486,22488],{"class":101,"line":1740},[99,22477,1537],{"class":109},[99,22479,1154],{"class":105},[99,22481,19033],{"class":1949},[99,22483,22399],{"class":109},[99,22485,1154],{"class":105},[99,22487,1224],{"class":109},[99,22489,22490],{"class":168}," \u002F\u002F没有访问权限，报错\n",[99,22492,22493],{"class":101,"line":1745},[99,22494,1551],{"class":109},[99,22496,22497,22499,22501],{"class":101,"line":1750},[99,22498,113],{"class":105},[99,22500,1959],{"class":1949},[99,22502,1962],{"class":109},[99,22504,22505],{"class":101,"line":1764},[99,22506,1532],{"class":109},[99,22508,22509,22511],{"class":101,"line":1769},[99,22510,5689],{"class":1949},[99,22512,5623],{"class":109},[99,22514,22515],{"class":101,"line":2563},[99,22516,1551],{"class":109},[21985,22518,22520],{"id":22519},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22522,22523],{},"1.静态成员函数定义与访问",[90,22525,22527],{"className":92,"code":22526,"language":94,"meta":21,"style":21},"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",[96,22528,22529,22535,22539,22543,22548,22559,22563,22577,22581,22585,22593,22597,22602,22607,22611,22619,22624,22634],{"__ignoreMap":21},[99,22530,22531,22533],{"class":101,"line":102},[99,22532,14681],{"class":105},[99,22534,15158],{"class":1949},[99,22536,22537],{"class":101,"line":22},[99,22538,1532],{"class":109},[99,22540,22541],{"class":101,"line":1165},[99,22542,14703],{"class":105},[99,22544,22545],{"class":101,"line":1180},[99,22546,22547],{"class":168},"    \u002F\u002F在公共权限下定义静态成员函数\n",[99,22549,22550,22552,22555,22557],{"class":101,"line":1186},[99,22551,11007],{"class":105},[99,22553,22554],{"class":105}," void",[99,22556,11372],{"class":1949},[99,22558,1962],{"class":109},[99,22560,22561],{"class":101,"line":1200},[99,22562,2016],{"class":109},[99,22564,22565,22568,22570,22573,22575],{"class":101,"line":1206},[99,22566,22567],{"class":109},"        coout",[99,22569,1154],{"class":105},[99,22571,22572],{"class":214},"\"静态成员函数的调用\"",[99,22574,1154],{"class":105},[99,22576,1177],{"class":109},[99,22578,22579],{"class":101,"line":1297},[99,22580,2173],{"class":109},[99,22582,22583],{"class":101,"line":1303},[99,22584,3981],{"class":109},[99,22586,22587,22589,22591],{"class":101,"line":1315},[99,22588,5351],{"class":105},[99,22590,5575],{"class":1949},[99,22592,1962],{"class":109},[99,22594,22595],{"class":101,"line":1598},[99,22596,1532],{"class":109},[99,22598,22599],{"class":101,"line":1603},[99,22600,22601],{"class":168},"    \u002F\u002F静态成员函数的调用方式:\n",[99,22603,22604],{"class":101,"line":1609},[99,22605,22606],{"class":168},"    \u002F\u002F1.通过对象访问\n",[99,22608,22609],{"class":101,"line":1614},[99,22610,15300],{"class":109},[99,22612,22613,22615,22617],{"class":101,"line":1628},[99,22614,15853],{"class":109},[99,22616,11538],{"class":1949},[99,22618,5623],{"class":109},[99,22620,22621],{"class":101,"line":1633},[99,22622,22623],{"class":168},"    \u002F\u002F2.通过类名访问\n",[99,22625,22626,22628,22630,22632],{"class":101,"line":1639},[99,22627,18506],{"class":1949},[99,22629,17719],{"class":109},[99,22631,11538],{"class":1949},[99,22633,5623],{"class":109},[99,22635,22636],{"class":101,"line":1660},[99,22637,1551],{"class":109},[53,22639,22640],{"start":22},[56,22641,22642],{},"静态成员函数只能访问静态成员变量",[90,22644,22646],{"className":92,"code":22645,"language":94,"meta":21,"style":21},"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",[96,22647,22648,22654,22658,22662,22666,22676,22680,22694,22699,22711,22715,22726,22736,22740,22744,22748,22758,22762,22775,22779,22783,22787,22791,22805,22813,22817,22821,22825,22829,22837,22841,22851,22856,22860,22868,22872,22878],{"__ignoreMap":21},[99,22649,22650,22652],{"class":101,"line":102},[99,22651,14681],{"class":105},[99,22653,15158],{"class":1949},[99,22655,22656],{"class":101,"line":22},[99,22657,1532],{"class":109},[99,22659,22660],{"class":101,"line":1165},[99,22661,14703],{"class":105},[99,22663,22664],{"class":101,"line":1180},[99,22665,22547],{"class":168},[99,22667,22668,22670,22672,22674],{"class":101,"line":1186},[99,22669,11007],{"class":105},[99,22671,22554],{"class":105},[99,22673,11372],{"class":1949},[99,22675,1962],{"class":109},[99,22677,22678],{"class":101,"line":1200},[99,22679,2016],{"class":109},[99,22681,22682,22685,22687,22689,22691],{"class":101,"line":1206},[99,22683,22684],{"class":109},"        m_A",[99,22686,155],{"class":105},[99,22688,421],{"class":158},[99,22690,165],{"class":109},[99,22692,22693],{"class":168}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[99,22695,22696],{"class":101,"line":1297},[99,22697,22698],{"class":168},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[99,22700,22701,22703,22705,22707,22709],{"class":101,"line":1303},[99,22702,22567],{"class":109},[99,22704,1154],{"class":105},[99,22706,22572],{"class":214},[99,22708,1154],{"class":105},[99,22710,1177],{"class":109},[99,22712,22713],{"class":101,"line":1315},[99,22714,2173],{"class":109},[99,22716,22717,22719,22721,22723],{"class":101,"line":1598},[99,22718,11007],{"class":105},[99,22720,2368],{"class":105},[99,22722,15435],{"class":109},[99,22724,22725],{"class":168}," \u002F\u002F静态成员变量\n",[99,22727,22728,22730,22733],{"class":101,"line":1603},[99,22729,1971],{"class":105},[99,22731,22732],{"class":109}," m_B;",[99,22734,22735],{"class":168}," \u002F\u002F非静态成员变量\n",[99,22737,22738],{"class":101,"line":1609},[99,22739,2386],{"emptyLinePlaceholder":26},[99,22741,22742],{"class":101,"line":1614},[99,22743,15209],{"class":105},[99,22745,22746],{"class":101,"line":1628},[99,22747,22360],{"class":168},[99,22749,22750,22752,22754,22756],{"class":101,"line":1633},[99,22751,11007],{"class":105},[99,22753,22554],{"class":105},[99,22755,13605],{"class":1949},[99,22757,1962],{"class":109},[99,22759,22760],{"class":101,"line":1639},[99,22761,2016],{"class":109},[99,22763,22764,22766,22768,22771,22773],{"class":101,"line":1660},[99,22765,3437],{"class":109},[99,22767,1154],{"class":105},[99,22769,22770],{"class":214},"\"这是私有权限下的静态函数调用\"",[99,22772,1154],{"class":105},[99,22774,1177],{"class":109},[99,22776,22777],{"class":101,"line":1665},[99,22778,2173],{"class":109},[99,22780,22781],{"class":101,"line":1679},[99,22782,2386],{"emptyLinePlaceholder":26},[99,22784,22785],{"class":101,"line":1684},[99,22786,2386],{"emptyLinePlaceholder":26},[99,22788,22789],{"class":101,"line":1713},[99,22790,3981],{"class":109},[99,22792,22793,22795,22797,22799,22801,22803],{"class":101,"line":1718},[99,22794,113],{"class":105},[99,22796,15556],{"class":1949},[99,22798,22190],{"class":109},[99,22800,155],{"class":105},[99,22802,301],{"class":158},[99,22804,1276],{"class":109},[99,22806,22807,22809,22811],{"class":101,"line":1735},[99,22808,5351],{"class":105},[99,22810,5575],{"class":1949},[99,22812,1962],{"class":109},[99,22814,22815],{"class":101,"line":1740},[99,22816,1532],{"class":109},[99,22818,22819],{"class":101,"line":1745},[99,22820,22601],{"class":168},[99,22822,22823],{"class":101,"line":1750},[99,22824,22606],{"class":168},[99,22826,22827],{"class":101,"line":1764},[99,22828,15300],{"class":109},[99,22830,22831,22833,22835],{"class":101,"line":1769},[99,22832,15853],{"class":109},[99,22834,11538],{"class":1949},[99,22836,5623],{"class":109},[99,22838,22839],{"class":101,"line":2563},[99,22840,22623],{"class":168},[99,22842,22843,22845,22847,22849],{"class":101,"line":2577},[99,22844,18506],{"class":1949},[99,22846,17719],{"class":109},[99,22848,11538],{"class":1949},[99,22850,5623],{"class":109},[99,22852,22853],{"class":101,"line":2585},[99,22854,22855],{"class":168},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[99,22857,22858],{"class":101,"line":2590},[99,22859,1551],{"class":109},[99,22861,22862,22864,22866],{"class":101,"line":2596},[99,22863,113],{"class":105},[99,22865,1959],{"class":1949},[99,22867,1962],{"class":109},[99,22869,22870],{"class":101,"line":2602},[99,22871,1532],{"class":109},[99,22873,22874,22876],{"class":101,"line":2607},[99,22875,5620],{"class":1949},[99,22877,5623],{"class":109},[99,22879,22880],{"class":101,"line":7935},[99,22881,1551],{"class":109},[70,22883,22885],{"id":22884},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21985,22887,22889],{"id":22888},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22891,22892],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22894,22895],{},"只有非静态成员变量才属于类的对象上",[22897,22898,22900],"h5",{"id":22899},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[90,22902,22904],{"className":92,"code":22903,"language":94,"meta":21,"style":21},"#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",[96,22905,22906,22913,22923,22929,22933,22937,22941,22949,22953,22957,22980,22984,22992,22996,23002],{"__ignoreMap":21},[99,22907,22908,22910],{"class":101,"line":102},[99,22909,1935],{"class":105},[99,22911,22912],{"class":214},"\u003Ciostraem>\n",[99,22914,22915,22917,22919,22921],{"class":101,"line":22},[99,22916,1943],{"class":105},[99,22918,1946],{"class":105},[99,22920,1950],{"class":1949},[99,22922,1276],{"class":109},[99,22924,22925,22927],{"class":101,"line":1165},[99,22926,14681],{"class":105},[99,22928,15158],{"class":1949},[99,22930,22931],{"class":101,"line":1180},[99,22932,1532],{"class":109},[99,22934,22935],{"class":101,"line":1186},[99,22936,2386],{"emptyLinePlaceholder":26},[99,22938,22939],{"class":101,"line":1200},[99,22940,3981],{"class":109},[99,22942,22943,22945,22947],{"class":101,"line":1206},[99,22944,5351],{"class":105},[99,22946,5575],{"class":1949},[99,22948,1962],{"class":109},[99,22950,22951],{"class":101,"line":1297},[99,22952,1532],{"class":109},[99,22954,22955],{"class":101,"line":1303},[99,22956,15300],{"class":109},[99,22958,22959,22961,22963,22966,22968,22971,22973,22975,22977],{"class":101,"line":1315},[99,22960,1537],{"class":109},[99,22962,1154],{"class":105},[99,22964,22965],{"class":214},"\"size of p=\"",[99,22967,1154],{"class":105},[99,22969,22970],{"class":1949},"sizeoif",[99,22972,6526],{"class":109},[99,22974,1154],{"class":105},[99,22976,1224],{"class":109},[99,22978,22979],{"class":168}," \u002F\u002F查看这个空类的占用的内存空间\n",[99,22981,22982],{"class":101,"line":1598},[99,22983,1551],{"class":109},[99,22985,22986,22988,22990],{"class":101,"line":1603},[99,22987,113],{"class":105},[99,22989,1959],{"class":1949},[99,22991,1962],{"class":109},[99,22993,22994],{"class":101,"line":1609},[99,22995,1532],{"class":109},[99,22997,22998,23000],{"class":101,"line":1614},[99,22999,5620],{"class":1949},[99,23001,5623],{"class":109},[99,23003,23004],{"class":101,"line":1628},[99,23005,1551],{"class":109},[14,23007,23008],{},"输出结果为：size of p=1",[14,23010,23011],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23013,23014],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22897,23016,23018],{"id":23017},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[90,23020,23022],{"className":92,"code":23021,"language":94,"meta":21,"style":21},"#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",[96,23023,23024,23030,23040,23048,23052,23061,23065,23073,23077,23081,23100,23104,23108,23116,23120,23126],{"__ignoreMap":21},[99,23025,23026,23028],{"class":101,"line":102},[99,23027,1935],{"class":105},[99,23029,1938],{"class":214},[99,23031,23032,23034,23036,23038],{"class":101,"line":22},[99,23033,1943],{"class":105},[99,23035,1946],{"class":105},[99,23037,1950],{"class":1949},[99,23039,1276],{"class":109},[99,23041,23042,23044,23046],{"class":101,"line":1165},[99,23043,14681],{"class":105},[99,23045,15556],{"class":1949},[99,23047,2660],{"class":109},[99,23049,23050],{"class":101,"line":1180},[99,23051,1532],{"class":109},[99,23053,23054,23056,23058],{"class":101,"line":1186},[99,23055,1971],{"class":105},[99,23057,15435],{"class":109},[99,23059,23060],{"class":168},"\u002F\u002F非静态成员变量\n",[99,23062,23063],{"class":101,"line":1200},[99,23064,3981],{"class":109},[99,23066,23067,23069,23071],{"class":101,"line":1206},[99,23068,5351],{"class":105},[99,23070,5575],{"class":1949},[99,23072,1962],{"class":109},[99,23074,23075],{"class":101,"line":1297},[99,23076,1532],{"class":109},[99,23078,23079],{"class":101,"line":1303},[99,23080,15300],{"class":109},[99,23082,23083,23085,23087,23089,23091,23093,23095,23097],{"class":101,"line":1315},[99,23084,1537],{"class":109},[99,23086,1154],{"class":105},[99,23088,22965],{"class":214},[99,23090,1358],{"class":105},[99,23092,6526],{"class":109},[99,23094,1154],{"class":105},[99,23096,1224],{"class":109},[99,23098,23099],{"class":168}," \u002F\u002F查看不是空对象时占用多少内存\n",[99,23101,23102],{"class":101,"line":1598},[99,23103,2386],{"emptyLinePlaceholder":26},[99,23105,23106],{"class":101,"line":1603},[99,23107,1551],{"class":109},[99,23109,23110,23112,23114],{"class":101,"line":1609},[99,23111,113],{"class":105},[99,23113,1959],{"class":1949},[99,23115,1962],{"class":109},[99,23117,23118],{"class":101,"line":1614},[99,23119,1532],{"class":109},[99,23121,23122,23124],{"class":101,"line":1628},[99,23123,5620],{"class":1949},[99,23125,5623],{"class":109},[99,23127,23128],{"class":101,"line":1633},[99,23129,1551],{"class":109},[14,23131,23132],{},"输出结果：size of p=4",[14,23134,23135],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[53,23137,23138],{},[56,23139,23140],{},"如果加上非静态成员变量，Person类修改如下",[90,23142,23144],{"className":92,"code":23143,"language":94,"meta":21,"style":21},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[96,23145,23146,23152,23156,23162,23170,23174,23179],{"__ignoreMap":21},[99,23147,23148,23150],{"class":101,"line":102},[99,23149,14681],{"class":105},[99,23151,15158],{"class":1949},[99,23153,23154],{"class":101,"line":22},[99,23155,1532],{"class":109},[99,23157,23158,23160],{"class":101,"line":1165},[99,23159,1971],{"class":105},[99,23161,21379],{"class":109},[99,23163,23164,23166,23168],{"class":101,"line":1180},[99,23165,11007],{"class":105},[99,23167,2368],{"class":105},[99,23169,21386],{"class":109},[99,23171,23172],{"class":101,"line":1186},[99,23173,3981],{"class":109},[99,23175,23176],{"class":101,"line":1200},[99,23177,23178],{"class":168},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[99,23180,23181,23183,23185,23187,23189,23191],{"class":101,"line":1206},[99,23182,113],{"class":105},[99,23184,15556],{"class":1949},[99,23186,22399],{"class":109},[99,23188,155],{"class":105},[99,23190,301],{"class":158},[99,23192,1276],{"class":109},[14,23194,23195],{},"输出结果：4",[14,23197,23198],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[53,23200,23201],{"start":22},[56,23202,23203],{},"加上非静态成员函数",[90,23205,23207],{"className":92,"code":23206,"language":94,"meta":21,"style":21},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[96,23208,23209,23216,23220,23226,23234,23238,23242,23246],{"__ignoreMap":21},[99,23210,23211,23213],{"class":101,"line":102},[99,23212,14681],{"class":105},[99,23214,23215],{"class":1949},"  Person\n",[99,23217,23218],{"class":101,"line":22},[99,23219,1532],{"class":109},[99,23221,23222,23224],{"class":101,"line":1165},[99,23223,1971],{"class":105},[99,23225,21379],{"class":109},[99,23227,23228,23230,23232],{"class":101,"line":1180},[99,23229,14896],{"class":105},[99,23231,11372],{"class":1949},[99,23233,1962],{"class":109},[99,23235,23236],{"class":101,"line":1186},[99,23237,2016],{"class":109},[99,23239,23240],{"class":101,"line":1200},[99,23241,2386],{"emptyLinePlaceholder":26},[99,23243,23244],{"class":101,"line":1206},[99,23245,2173],{"class":109},[99,23247,23248],{"class":101,"line":1297},[99,23249,3981],{"class":109},[14,23251,23252],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[53,23254,23255],{"start":1165},[56,23256,23257],{},"加上静态成员函数",[90,23259,23261],{"className":92,"code":23260,"language":94,"meta":21,"style":21},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[96,23262,23263,23269,23273,23279,23287,23291,23295,23299,23310,23314,23318,23322],{"__ignoreMap":21},[99,23264,23265,23267],{"class":101,"line":102},[99,23266,14681],{"class":105},[99,23268,23215],{"class":1949},[99,23270,23271],{"class":101,"line":22},[99,23272,1532],{"class":109},[99,23274,23275,23277],{"class":101,"line":1165},[99,23276,1971],{"class":105},[99,23278,21379],{"class":109},[99,23280,23281,23283,23285],{"class":101,"line":1180},[99,23282,14896],{"class":105},[99,23284,11372],{"class":1949},[99,23286,1962],{"class":109},[99,23288,23289],{"class":101,"line":1186},[99,23290,2016],{"class":109},[99,23292,23293],{"class":101,"line":1200},[99,23294,2386],{"emptyLinePlaceholder":26},[99,23296,23297],{"class":101,"line":1206},[99,23298,2173],{"class":109},[99,23300,23301,23303,23305,23308],{"class":101,"line":1297},[99,23302,11007],{"class":105},[99,23304,22554],{"class":105},[99,23306,23307],{"class":1949}," func1",[99,23309,1962],{"class":109},[99,23311,23312],{"class":101,"line":1303},[99,23313,2016],{"class":109},[99,23315,23316],{"class":101,"line":1315},[99,23317,2386],{"emptyLinePlaceholder":26},[99,23319,23320],{"class":101,"line":1598},[99,23321,2173],{"class":109},[99,23323,23324],{"class":101,"line":1603},[99,23325,3981],{"class":109},[14,23327,23195],{},[14,23329,23330],{},"解释：静态成员函数也不属于类上",[5113,23332,7661],{},{"title":21,"searchDepth":22,"depth":22,"links":23334},[23335,23341],{"id":14632,"depth":22,"text":14633,"children":23336},[23337,23338,23339,23340],{"id":14636,"depth":1165,"text":14637},{"id":15361,"depth":1165,"text":15362},{"id":15533,"depth":1165,"text":15534},{"id":15992,"depth":1165,"text":15993},{"id":18364,"depth":22,"text":18365,"children":23342},[23343,23344,23345,23346,23347,23348,23349,23350,23351],{"id":18376,"depth":1165,"text":18377},{"id":18669,"depth":1165,"text":18670},{"id":19160,"depth":1165,"text":19161},{"id":20257,"depth":1165,"text":20258},{"id":20680,"depth":1165,"text":20681},{"id":21159,"depth":1165,"text":21160},{"id":21534,"depth":1165,"text":21535},{"id":21947,"depth":1165,"text":21948},{"id":22884,"depth":1165,"text":22885},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14597,"description":23352},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23359,"title":94,"body":23360,"description":23364,"extension":24,"meta":23365,"navigation":26,"path":23367,"seo":23368,"stem":23369,"__hash__":23370},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23361,"toc":23362},[],{"title":21,"searchDepth":22,"depth":22,"links":23363},[],null,{"category":23366},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":94,"description":23364},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23372,"title":23373,"body":23374,"description":21,"extension":24,"meta":23965,"navigation":26,"path":23966,"seo":23967,"stem":23968,"__hash__":23969},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23375,"toc":23947},[23376,23379,23383,23386,23389,23392,23410,23415,23418,23421,23424,23427,23432,23435,23440,23443,23446,23450,23453,23456,23462,23465,23483,23487,23491,23494,23499,23502,23506,23509,23522,23525,23529,23532,23535,23538,23563,23566,23575,23586,23601,23633,23637,23644,23652,23656,23659,23662,23667,23671,23674,23677,23682,23685,23689,23692,23695,23700,23703,23707,23712,23716,23783,23787,23790,23793,23796,23799,23802,23808,23829,23832,23846,23855,23859,23862,23865,23870,23873,23878,23883,23886,23889,23894,23899,23902,23907,23912,23915,23920,23925,23928,23931,23936,23939,23944],[10,23377,23373],{"id":23378},"_1强化学习基本认识",[41,23380,23382],{"id":23381},"_11什么是强化学习","1.1.什么是强化学习",[14,23384,23385],{},"强化学习有两部分组成：智能体和环境；",[14,23387,23388],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23390,23391],{},"强化学习与监督学习的区别:",[53,23393,23394,23397,23400,23403],{},[56,23395,23396],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[56,23398,23399],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[56,23401,23402],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[56,23404,23405,23406,23409],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[259,23407,23408],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23411,23412],{},[1448,23413],{"alt":21,"src":23414},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23416,23417],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23419,23420],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23422,23423],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23425,23426],{},"获取奖励",[14,23428,23429],{},[1448,23430],{"alt":21,"src":23431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23433,23434],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23436,23437],{},[1448,23438],{"alt":21,"src":23439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23441,23442],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23444,23445],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[41,23447,23449],{"id":23448},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23451,23452],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23454,23455],{},"具身智能中的应用",[14,23457,23458,23461],{},[259,23459,23460],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23463,23464],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23466,23467,23468,23471,23472,23475,23476,23479,23480],{},"机器人是",[259,23469,23470],{},"躯体","，深度学习是",[259,23473,23474],{},"神经元****网络","，VLA是",[259,23477,23478],{},"通用的行为逻辑","，而强化学习是",[259,23481,23482],{},"教练",[41,23484,23486],{"id":23485},"_13序列决策","1.3.序列决策",[70,23488,23490],{"id":23489},"_131智能体与环境","1.3.1.智能体与环境",[14,23492,23493],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23495,23496],{},[1448,23497],{"alt":21,"src":23498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23500,23501],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[70,23503,23505],{"id":23504},"_132奖励","1.3.2.奖励",[14,23507,23508],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23510,23511,23512,23521],{},"取某个策略的表现如何。强化学习的目的就是",[259,23513,23514,23515,23520],{},"最大化",[259,23516,23517],{},[259,23518,23519],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23523,23524],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[70,23526,23528],{"id":23527},"_133序列决策","1.3.3.序列决策",[14,23530,23531],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23533,23534],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23536,23537],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23539,23540,23544,23545,23547,23548,23550,23551,23553,23554,13782,23557,13782,23560],{},[23541,23542,23543],"em",{},"Ht"," = ",[23541,23546,706],{},"1*, a",[23541,23549,327],{},", r",[23541,23552,327],{},", . . . ,* ",[23541,23555,23556],{},"ot",[23541,23558,23559],{},", at ,",[23541,23561,23562],{},"rt",[14,23564,23565],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23567,23568,23544,23571,1644,23573,539],{},[23541,23569,23570],{},"st",[23541,23572,162],{},[23541,23574,23543],{},[14,23576,23577,23578,23581,23582,23585],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[259,23579,23580],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[259,23583,23584],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23587,23588,23589,23592,23593,23596,23597,23600],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[259,23590,23591],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[259,23594,23595],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23541,23598,23599],{},"S, A, T, R, Ω, O, γ",")。",[14,23602,23603,23604,23606,23607,23609,23610,110,23612,23615,23616,23618,23619,110,23622,23625,23626,23628,23629,23632],{},"其中 ",[23541,23605,799],{}," 表示状态空间，为隐变量，",[23541,23608,342],{}," 为动作空间，",[23541,23611,824],{},[23541,23613,23614],{},"s ′ |s, a",") 为状态转移概率，",[23541,23617,774],{}," 为奖励函数，",[23541,23620,23621],{},"Ω",[23541,23623,23624],{},"o|s, a",") 为观测概率，",[23541,23627,700],{}," 为观测空间，",[23541,23630,23631],{},"γ"," 为折扣因子。",[41,23634,23636],{"id":23635},"_14动作空间","1.4.动作空间",[14,23638,23639,23640,23643],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[259,23641,23642],{},"动作空间"," ，动作空间分为:",[53,23645,23646,23649],{},[56,23647,23648],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[56,23650,23651],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[41,23653,23655],{"id":23654},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23657,23658],{},"由策略、价值函数、模型三部分组成",[14,23660,23661],{},"这三者组成马尔可夫决策过程",[14,23663,23664],{},[1448,23665],{"alt":21,"src":23666},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[70,23668,23670],{"id":23669},"_151策略","1.5.1.策略",[14,23672,23673],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23675,23676],{},"策略可分为两种：",[14,23678,23679],{},[1448,23680],{"alt":21,"src":23681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23683,23684],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[70,23686,23688],{"id":23687},"_152价值函数","1.5.2.价值函数",[14,23690,23691],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23693,23694],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23696,23697],{},[1448,23698],{"alt":21,"src":23699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23701,23702],{},"进入某个状态采取的最优动作可以通过Q函数得到",[70,23704,23706],{"id":23705},"_153模型","1.5.3.模型",[14,23708,23709],{},[1448,23710],{"alt":21,"src":23711},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[41,23713,23715],{"id":23714},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[247,23717,23718,23729],{},[250,23719,23720],{},[253,23721,23722,23726],{},[256,23723,23725],{"align":23724},"left","类型",[256,23727,23728],{"align":23724},"特点",[294,23730,23731,23741,23751,23761,23773],{},[253,23732,23733,23738],{},[299,23734,23735],{"align":23724},[259,23736,23737],{},"基于价值的智能体",[299,23739,23740],{"align":23724},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[253,23742,23743,23748],{},[299,23744,23745],{"align":23724},[259,23746,23747],{},"基于策略的智能体",[299,23749,23750],{"align":23724},"直接学习策略，没有学习价值函数",[253,23752,23753,23758],{},[299,23754,23755],{"align":23724},[259,23756,23757],{},"演员-评论员智能体",[299,23759,23760],{"align":23724},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[253,23762,23763,23768],{},[299,23764,23765],{"align":23724},[259,23766,23767],{},"有模型强化学习智能体",[299,23769,23770],{"align":23724},[1448,23771],{"alt":21,"src":23772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[253,23774,23775,23780],{},[299,23776,23777],{"align":23724},[259,23778,23779],{},"免模型强化学习智能体",[299,23781,23782],{"align":23724},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[41,23784,23786],{"id":23785},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23788,23789],{},"学习和规划是序列决策的两个基本问题",[14,23791,23792],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23794,23795],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23797,23798],{},"强化学习用到的库：Gym",[14,23800,23801],{},"Gym可以检验强化学习算法的优劣",[14,23803,23804,23807],{},[259,23805,23806],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[90,23809,23813],{"className":23810,"code":23811,"language":23812,"meta":21,"style":21},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[96,23814,23815],{"__ignoreMap":21},[99,23816,23817,23820,23823,23826],{"class":101,"line":102},[99,23818,23819],{"class":1949},"pip",[99,23821,23822],{"class":214}," install",[99,23824,23825],{"class":214}," gym==",[99,23827,23828],{"class":158},"0.25.2\n",[14,23830,23831],{},"显示图形界面需要",[90,23833,23835],{"className":23810,"code":23834,"language":23812,"meta":21,"style":21},"pip install pygame\n",[96,23836,23837],{"__ignoreMap":21},[99,23838,23839,23841,23843],{"class":101,"line":102},[99,23840,23819],{"class":1949},[99,23842,23822],{"class":214},[99,23844,23845],{"class":214}," pygame\n",[14,23847,23848,23849],{},"有关Gym库的相关文档介绍：",[348,23850,23854],{"href":23851,"rel":23852},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23853],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[41,23856,23858],{"id":23857},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23860,23861],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23863,23864],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23866,23867],{},[1448,23868],{"alt":21,"src":23869},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23871,23872],{},"折扣率需要自己来设定",[14,23874,23875],{},[1448,23876],{"alt":21,"src":23877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[53,23879,23880],{},[56,23881,23882],{},"状态转移函数：",[14,23884,23885],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23887,23888],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23890,23891],{},[1448,23892],{"alt":21,"src":23893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[53,23895,23896],{"start":22},[56,23897,23898],{},"动作价值函数：",[14,23900,23901],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23903,23904],{},[1448,23905],{"alt":21,"src":23906},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[53,23908,23909],{"start":1165},[56,23910,23911],{},"最优动作价值函数：",[14,23913,23914],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[14,23916,23917],{},[1448,23918],{"alt":21,"src":23919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[53,23921,23922],{"start":1180},[56,23923,23924],{},"状态价值函数:",[14,23926,23927],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23929,23930],{},"它衡量的是“一个具体动作”的长期价值",[14,23932,23933],{},[1448,23934],{"alt":21,"src":23935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23937,23938],{},"几个价值函数之间的比较：",[14,23940,23941],{},[1448,23942],{"alt":21,"src":23943},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5113,23945,23946],{},"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":21,"searchDepth":22,"depth":22,"links":23948},[23949,23950,23951,23956,23957,23962,23963,23964],{"id":23381,"depth":22,"text":23382},{"id":23448,"depth":22,"text":23449},{"id":23485,"depth":22,"text":23486,"children":23952},[23953,23954,23955],{"id":23489,"depth":1165,"text":23490},{"id":23504,"depth":1165,"text":23505},{"id":23527,"depth":1165,"text":23528},{"id":23635,"depth":22,"text":23636},{"id":23654,"depth":22,"text":23655,"children":23958},[23959,23960,23961],{"id":23669,"depth":1165,"text":23670},{"id":23687,"depth":1165,"text":23688},{"id":23705,"depth":1165,"text":23706},{"id":23714,"depth":22,"text":23715},{"id":23785,"depth":22,"text":23786},{"id":23857,"depth":22,"text":23858},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23373,"description":21},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23971,"title":23972,"body":23973,"description":23980,"extension":24,"meta":23991,"navigation":26,"path":23992,"seo":23993,"stem":23994,"__hash__":23995},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23974,"toc":23989},[23975,23978,23981,23986],[10,23976,23972],{"id":23977},"_2马尔可夫决策过程",[14,23979,23980],{},"这是强化学习的基本框架",[14,23982,23983],{},[1448,23984],{"alt":21,"src":23985},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,23987,23988],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":21,"searchDepth":22,"depth":22,"links":23990},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23972,"description":23980},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23997,"title":23998,"body":23999,"description":21,"extension":24,"meta":24115,"navigation":26,"path":24116,"seo":24117,"stem":24118,"__hash__":24119},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24000,"toc":24110},[24001,24004,24008,24011,24016,24021,24024,24029,24032,24037,24040,24044,24049,24052,24057,24062,24067,24070,24074,24079,24082,24087,24092,24097,24102,24105],[10,24002,23998],{"id":24003},"_3动作价值函数",[41,24005,24007],{"id":24006},"_31dqn","3.1.DQN",[14,24009,24010],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24012,24013],{},[1448,24014],{"alt":21,"src":24015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24017,24018],{},[1448,24019],{"alt":21,"src":24020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24022,24023],{},"DQN算法的描述：",[14,24025,24026],{},[1448,24027],{"alt":21,"src":24028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24030,24031],{},"这里的Dense指的是全连接层",[14,24033,24034],{},[1448,24035],{"alt":21,"src":24036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24038,24039],{},"当前观测的状态为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算法",[41,24041,24043],{"id":24042},"_32dqn的举例","3.2.DQN的举例",[14,24045,24046],{},[1448,24047],{"alt":21,"src":24048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24050,24051],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24053,24054],{},[1448,24055],{"alt":21,"src":24056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24058,24059],{},[1448,24060],{"alt":21,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24063,24064],{},[1448,24065],{"alt":21,"src":24066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24068,24069],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[41,24071,24073],{"id":24072},"_33td算法","3.3.TD算法",[14,24075,24076],{},[1448,24077],{"alt":21,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24080,24081],{},"强化学习TD算法公式的粗略解释：",[14,24083,24084],{},[1448,24085],{"alt":21,"src":24086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24088,24089],{},[1448,24090],{"alt":21,"src":24091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24093,24094],{},[1448,24095],{"alt":21,"src":24096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24098,24099],{},[1448,24100],{"alt":21,"src":24101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24103,24104],{},"TD算法总结：",[14,24106,24107],{},[1448,24108],{"alt":21,"src":24109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":21,"searchDepth":22,"depth":22,"links":24111},[24112,24113,24114],{"id":24006,"depth":22,"text":24007},{"id":24042,"depth":22,"text":24043},{"id":24072,"depth":22,"text":24073},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23998,"description":21},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24121,"title":24122,"body":24123,"description":21,"extension":24,"meta":24356,"navigation":26,"path":24357,"seo":24358,"stem":24359,"__hash__":24360},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24124,"toc":24352},[24125,24128,24132,24135,24138,24143,24148,24151,24156,24161,24164,24169,24172,24177,24180,24185,24188,24193,24196,24201,24206,24209,24214,24217,24220,24225,24228,24233,24238,24242,24245,24248,24253,24258,24261,24266,24271,24274,24279,24282,24285,24290,24293,24298,24301,24306,24311,24314,24319,24324,24327,24332,24335,24340,24343],[10,24126,24122],{"id":24127},"_4策略学习",[41,24129,24131],{"id":24130},"_41概念描述","4.1.概念描述",[14,24133,24134],{},"用神经网络（策略网络）近似策略函数",[14,24136,24137],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24139,24140],{},[1448,24141],{"alt":21,"src":24142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24144,24145],{},[1448,24146],{"alt":21,"src":24147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24149,24150],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24152,24153],{},[1448,24154],{"alt":21,"src":24155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24157,24158],{},[1448,24159],{"alt":21,"src":24160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24162,24163],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24165,24166],{},[1448,24167],{"alt":21,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24170,24171],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24173,24174],{},[1448,24175],{"alt":21,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24178,24179],{},"改进theta要用到策略梯度算法",[14,24181,24182],{},[1448,24183],{"alt":21,"src":24184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24186,24187],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24189,24190],{},[1448,24191],{"alt":21,"src":24192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24194,24195],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24197,24198],{},[1448,24199],{"alt":21,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24202,24203],{},[1448,24204],{"alt":21,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24207,24208],{},"梯度公式总结：",[14,24210,24211],{},[1448,24212],{"alt":21,"src":24213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24215,24216],{},"两个公式的分别应用场景：",[14,24218,24219],{},"对于离散的动作：",[14,24221,24222],{},[1448,24223],{"alt":21,"src":24224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24226,24227],{},"对于连续的动作：",[14,24229,24230],{},[1448,24231],{"alt":21,"src":24232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24234,24235],{},[1448,24236],{"alt":21,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[41,24239,24241],{"id":24240},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24243,24244],{},"使用蒙特卡洛来近似计算策略梯度",[14,24246,24247],{},"蒙特卡洛法的解释如下：",[14,24249,24250],{},[1448,24251],{"alt":21,"src":24252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24254,24255],{},[1448,24256],{"alt":21,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24259,24260],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[53,24262,24263],{},[56,24264,24265],{},"方法一：reinforce算法",[14,24267,24268],{},[1448,24269],{"alt":21,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24272,24273],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[53,24275,24276],{"start":22},[56,24277,24278],{},"方法二：actor-critic算法",[14,24280,24281],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24283,24284],{},"两个网络的构建：",[14,24286,24287],{},[1448,24288],{"alt":21,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24291,24292],{},"actor网路：",[14,24294,24295],{},[1448,24296],{"alt":21,"src":24297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24299,24300],{},"critic网络",[14,24302,24303],{},[1448,24304],{"alt":21,"src":24305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[53,24307,24308],{"start":1165},[56,24309,24310],{},"网络的训练",[14,24312,24313],{},"网络描述",[14,24315,24316],{},[1448,24317],{"alt":21,"src":24318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24320,24321],{},[1448,24322],{"alt":21,"src":24323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24325,24326],{},"TD算法更新梯度：",[14,24328,24329],{},[1448,24330],{"alt":21,"src":24331},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24333,24334],{},"策略网络更新梯度：",[14,24336,24337],{},[1448,24338],{"alt":21,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24341,24342],{},"训练整个流程的具体描述：",[14,24344,24345,24348,24349],{},[1448,24346],{"alt":21,"src":24347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1448,24350],{"alt":21,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":21,"searchDepth":22,"depth":22,"links":24353},[24354,24355],{"id":24130,"depth":22,"text":24131},{"id":24240,"depth":22,"text":24241},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24122,"description":21},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24362,"title":24363,"body":24364,"description":24371,"extension":24,"meta":24421,"navigation":26,"path":24422,"seo":24423,"stem":24424,"__hash__":24425},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24365,"toc":24417},[24366,24369,24372,24376,24379,24384,24388,24391,24396,24399,24404,24409,24412],[10,24367,24363],{"id":24368},"_5alphago算法",[14,24370,24371],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[41,24373,24375],{"id":24374},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24377,24378],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24380,24381],{},[1448,24382],{"alt":21,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[41,24385,24387],{"id":24386},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24389,24390],{},"采用强化学习的方式训练策略网络",[14,24392,24393],{},[1448,24394],{"alt":21,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24397,24398],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24400,24401],{},[1448,24402],{"alt":21,"src":24403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24405,24406],{},[1448,24407],{"alt":21,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24410,24411],{},"强化学习训练策略网络的总结：",[14,24413,24414],{},[1448,24415],{"alt":21,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":21,"searchDepth":22,"depth":22,"links":24418},[24419,24420],{"id":24374,"depth":22,"text":24375},{"id":24386,"depth":22,"text":24387},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24363,"description":24371},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24427,"title":24428,"body":24429,"description":24436,"extension":24,"meta":24439,"navigation":26,"path":24440,"seo":24441,"stem":24442,"__hash__":24443},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24430,"toc":24437},[24431,24434],[10,24432,24428],{"id":24433},"_6价值网络",[14,24435,24436],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":21,"searchDepth":22,"depth":22,"links":24438},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24428,"description":24436},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24445,"title":24446,"body":24447,"description":24451,"extension":24,"meta":24452,"navigation":26,"path":24453,"seo":24454,"stem":24455,"__hash__":24456},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24448,"toc":24449},[],{"title":21,"searchDepth":22,"depth":22,"links":24450},[],"记录自己的强化学习笔记。",{"category":23366},"\u002Fwiki\u002F2025-12-04",{"title":24446,"description":24451},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24458,"title":24459,"body":24460,"description":23364,"extension":24,"meta":24499,"navigation":26,"path":24500,"seo":24501,"stem":24502,"__hash__":24503},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24461,"toc":24497},[24462,24465,24468,24474,24477,24483,24486,24491,24494],[10,24463,24459],{"id":24464},"_1-项目概览与官方资源",[14,24466,24467],{},"官方文档：",[14,24469,24470],{},[348,24471,24472],{"href":24472,"rel":24473},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23853],[14,24475,24476],{},"官方代码仓库：",[14,24478,24479],{},[348,24480,24481],{"href":24481,"rel":24482},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23853],[14,24484,24485],{},"复现大体流程：",[14,24487,24488],{},[1448,24489],{"alt":21,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24492,24493],{},"本教程的目标是打通这条链路：",[14,24495,24496],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":21,"searchDepth":22,"depth":22,"links":24498},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24459,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24505,"title":24506,"body":24507,"description":23364,"extension":24,"meta":24623,"navigation":26,"path":24624,"seo":24625,"stem":24626,"__hash__":24627},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24508,"toc":24618},[24509,24512,24516,24519,24526,24530,24533,24542,24552,24556,24586,24589,24615],[10,24510,24506],{"id":24511},"_2-环境准备与设备连接",[41,24513,24515],{"id":24514},"_21-系统与环境","2.1 系统与环境",[14,24517,24518],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24520,24521,24522,24525],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[96,24523,24524],{},"lerobot"," 依赖。",[41,24527,24529],{"id":24528},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24531,24532],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[90,24534,24536],{"className":23810,"code":24535,"language":23812,"meta":21,"style":21},"lerobot-find-out\n",[96,24537,24538],{"__ignoreMap":21},[99,24539,24540],{"class":101,"line":102},[99,24541,24535],{"class":1949},[14,24543,24544,24545,322,24548,24551],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[96,24546,24547],{},"\u002Fdev\u002FttyACM0",[96,24549,24550],{},"\u002Fdev\u002FttyACM1","）。",[41,24553,24555],{"id":24554},"_23-串口授权","2.3 串口授权",[90,24557,24559],{"className":23810,"code":24558,"language":23812,"meta":21,"style":21},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[96,24560,24561,24575],{"__ignoreMap":21},[99,24562,24563,24566,24569,24572],{"class":101,"line":102},[99,24564,24565],{"class":1949},"sudo",[99,24567,24568],{"class":214}," chmod",[99,24570,24571],{"class":158}," 666",[99,24573,24574],{"class":214}," \u002Fdev\u002FttyACM0\n",[99,24576,24577,24579,24581,24583],{"class":101,"line":22},[99,24578,24565],{"class":1949},[99,24580,24568],{"class":214},[99,24582,24571],{"class":158},[99,24584,24585],{"class":214}," \u002Fdev\u002FttyACM1\n",[14,24587,24588],{},"说明：",[1117,24590,24591,24596,24602,24612],{},[56,24592,24593,24595],{},[96,24594,24565],{},"：以 root 权限执行命令。",[56,24597,24598,24601],{},[96,24599,24600],{},"chmod","：修改设备节点权限。",[56,24603,24604,24607,24608,24611],{},[96,24605,24606],{},"666","：",[96,24609,24610],{},"rw-rw-rw-","，所有用户可读写。",[56,24613,24614],{},"串口号必须替换为你机器上的真实端口。",[5113,24616,24617],{},"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":21,"searchDepth":22,"depth":22,"links":24619},[24620,24621,24622],{"id":24514,"depth":22,"text":24515},{"id":24528,"depth":22,"text":24529},{"id":24554,"depth":22,"text":24555},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24506,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24629,"title":24630,"body":24631,"description":23364,"extension":24,"meta":24792,"navigation":26,"path":24793,"seo":24794,"stem":24795,"__hash__":24796},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24632,"toc":24788},[24633,24637,24641,24647,24650,24707,24710,24714,24717,24785],[10,24634,24636],{"id":24635},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[41,24638,24640],{"id":24639},"_31-配置电机-id","3.1 配置电机 ID",[14,24642,24643,24644,24646],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[96,24645,327],{},"，需要改成机械臂链路里不冲突的编号。",[14,24648,24649],{},"方式一：用 LeRobot 命令逐步写入。",[90,24651,24653],{"className":23810,"code":24652,"language":23812,"meta":21,"style":21},"# 主臂舵机配置 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",[96,24654,24655,24660,24668,24675,24680,24684,24689,24695,24702],{"__ignoreMap":21},[99,24656,24657],{"class":101,"line":102},[99,24658,24659],{"class":168},"# 主臂舵机配置 ID\n",[99,24661,24662,24665],{"class":101,"line":22},[99,24663,24664],{"class":1949},"lerobot-setup-motors",[99,24666,24667],{"class":158}," \\\n",[99,24669,24670,24673],{"class":101,"line":1165},[99,24671,24672],{"class":158},"  --teleop.type=so101_leader",[99,24674,24667],{"class":158},[99,24676,24677],{"class":101,"line":1180},[99,24678,24679],{"class":158},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[99,24681,24682],{"class":101,"line":1186},[99,24683,2386],{"emptyLinePlaceholder":26},[99,24685,24686],{"class":101,"line":1200},[99,24687,24688],{"class":168},"# 从臂舵机配置 ID\n",[99,24690,24691,24693],{"class":101,"line":1206},[99,24692,24664],{"class":1949},[99,24694,24667],{"class":158},[99,24696,24697,24700],{"class":101,"line":1297},[99,24698,24699],{"class":158},"  --robot.type=so101_follower",[99,24701,24667],{"class":158},[99,24703,24704],{"class":101,"line":1303},[99,24705,24706],{"class":158},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24708,24709],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[41,24711,24713],{"id":24712},"_32-机械臂校准","3.2 机械臂校准",[14,24715,24716],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[90,24718,24720],{"className":23810,"code":24719,"language":23812,"meta":21,"style":21},"# 主臂校准\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",[96,24721,24722,24727,24734,24740,24747,24752,24756,24761,24767,24773,24780],{"__ignoreMap":21},[99,24723,24724],{"class":101,"line":102},[99,24725,24726],{"class":168},"# 主臂校准\n",[99,24728,24729,24732],{"class":101,"line":22},[99,24730,24731],{"class":1949},"lerobot-calibrate",[99,24733,24667],{"class":158},[99,24735,24736,24738],{"class":101,"line":1165},[99,24737,24672],{"class":158},[99,24739,24667],{"class":158},[99,24741,24742,24745],{"class":101,"line":1180},[99,24743,24744],{"class":158},"  --teleop.port=\u002Fdev\u002FttyACM0",[99,24746,24667],{"class":158},[99,24748,24749],{"class":101,"line":1186},[99,24750,24751],{"class":158},"  --teleop.id=my_awesome_leader_arm\n",[99,24753,24754],{"class":101,"line":1200},[99,24755,2386],{"emptyLinePlaceholder":26},[99,24757,24758],{"class":101,"line":1206},[99,24759,24760],{"class":168},"# 从臂校准\n",[99,24762,24763,24765],{"class":101,"line":1297},[99,24764,24731],{"class":1949},[99,24766,24667],{"class":158},[99,24768,24769,24771],{"class":101,"line":1303},[99,24770,24699],{"class":158},[99,24772,24667],{"class":158},[99,24774,24775,24778],{"class":101,"line":1315},[99,24776,24777],{"class":158},"  --robot.port=\u002Fdev\u002FttyACM1",[99,24779,24667],{"class":158},[99,24781,24782],{"class":101,"line":1598},[99,24783,24784],{"class":158},"  --robot.id=my_awesome_follower_arm\n",[5113,24786,24787],{},"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":21,"searchDepth":22,"depth":22,"links":24789},[24790,24791],{"id":24639,"depth":22,"text":24640},{"id":24712,"depth":22,"text":24713},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24630,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24798,"title":24799,"body":24800,"description":23364,"extension":24,"meta":24991,"navigation":26,"path":24992,"seo":24993,"stem":24994,"__hash__":24995},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24801,"toc":24987},[24802,24805,24809,24856,24860,24873,24936,24939,24984],[10,24803,24799],{"id":24804},"_4-遥操与相机接入",[41,24806,24808],{"id":24807},"_41-不带相机遥操","4.1 不带相机遥操",[90,24810,24812],{"className":23810,"code":24811,"language":23812,"meta":21,"style":21},"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",[96,24813,24814,24821,24827,24833,24840,24846,24852],{"__ignoreMap":21},[99,24815,24816,24819],{"class":101,"line":102},[99,24817,24818],{"class":1949},"lerobot-teleoperate",[99,24820,24667],{"class":158},[99,24822,24823,24825],{"class":101,"line":22},[99,24824,24699],{"class":158},[99,24826,24667],{"class":158},[99,24828,24829,24831],{"class":101,"line":1165},[99,24830,24777],{"class":158},[99,24832,24667],{"class":158},[99,24834,24835,24838],{"class":101,"line":1180},[99,24836,24837],{"class":158},"  --robot.id=my_awesome_follower_arm",[99,24839,24667],{"class":158},[99,24841,24842,24844],{"class":101,"line":1186},[99,24843,24672],{"class":158},[99,24845,24667],{"class":158},[99,24847,24848,24850],{"class":101,"line":1200},[99,24849,24744],{"class":158},[99,24851,24667],{"class":158},[99,24853,24854],{"class":101,"line":1206},[99,24855,24751],{"class":158},[41,24857,24859],{"id":24858},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[90,24861,24863],{"className":23810,"code":24862,"language":23812,"meta":21,"style":21},"lerobot-find-cameras opencv\n",[96,24864,24865],{"__ignoreMap":21},[99,24866,24867,24870],{"class":101,"line":102},[99,24868,24869],{"class":1949},"lerobot-find-cameras",[99,24871,24872],{"class":214}," opencv\n",[90,24874,24876],{"className":23810,"code":24875,"language":23812,"meta":21,"style":21},"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",[96,24877,24878,24884,24890,24896,24902,24912,24918,24924,24931],{"__ignoreMap":21},[99,24879,24880,24882],{"class":101,"line":102},[99,24881,24818],{"class":1949},[99,24883,24667],{"class":158},[99,24885,24886,24888],{"class":101,"line":22},[99,24887,24699],{"class":158},[99,24889,24667],{"class":158},[99,24891,24892,24894],{"class":101,"line":1165},[99,24893,24777],{"class":158},[99,24895,24667],{"class":158},[99,24897,24898,24900],{"class":101,"line":1180},[99,24899,24837],{"class":158},[99,24901,24667],{"class":158},[99,24903,24904,24907,24910],{"class":101,"line":1186},[99,24905,24906],{"class":158},"  --robot.cameras=",[99,24908,24909],{"class":214},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[99,24911,24667],{"class":158},[99,24913,24914,24916],{"class":101,"line":1200},[99,24915,24672],{"class":158},[99,24917,24667],{"class":158},[99,24919,24920,24922],{"class":101,"line":1206},[99,24921,24744],{"class":158},[99,24923,24667],{"class":158},[99,24925,24926,24929],{"class":101,"line":1297},[99,24927,24928],{"class":158},"  --teleop.id=my_awesome_leader_arm",[99,24930,24667],{"class":158},[99,24932,24933],{"class":101,"line":1303},[99,24934,24935],{"class":158},"  --display_data=true\n",[14,24937,24938],{},"相机参数说明：",[1117,24940,24941,24947,24953,24962,24972,24978],{},[56,24942,24943,24946],{},[96,24944,24945],{},"front","：相机名称。",[56,24948,24949,24952],{},[96,24950,24951],{},"type: opencv","：相机驱动类型。",[56,24954,24955,24958,24959,24551],{},[96,24956,24957],{},"index_or_path","：设备编号或设备路径（如 ",[96,24960,24961],{},"\u002Fdev\u002Fvideo4",[56,24963,24964,24967,24968,24971],{},[96,24965,24966],{},"width"," \u002F ",[96,24969,24970],{},"height","：图像分辨率。",[56,24973,24974,24977],{},[96,24975,24976],{},"fps","：采样帧率。",[56,24979,24980,24983],{},[96,24981,24982],{},"--display_data=true","：启用实时可视化。",[5113,24985,24986],{},"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":21,"searchDepth":22,"depth":22,"links":24988},[24989,24990],{"id":24807,"depth":22,"text":24808},{"id":24858,"depth":22,"text":24859},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24799,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24997,"title":24998,"body":24999,"description":23364,"extension":24,"meta":25171,"navigation":26,"path":25172,"seo":25173,"stem":25174,"__hash__":25175},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25000,"toc":25166},[25001,25005,25009,25014,25019,25022,25064,25070,25074,25123,25128,25132,25135,25143,25148,25153,25158,25163],[10,25002,25004],{"id":25003},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[41,25006,25008],{"id":25007},"_51-生成访问令牌","5.1 生成访问令牌",[14,25010,25011],{},[1448,25012],{"alt":21,"src":25013},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25015,25016],{},[1448,25017],{"alt":21,"src":25018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25020,25021],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[90,25023,25025],{"className":23810,"code":25024,"language":23812,"meta":21,"style":21},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[96,25026,25027,25040],{"__ignoreMap":21},[99,25028,25029,25032,25035,25037],{"class":101,"line":102},[99,25030,25031],{"class":105},"export",[99,25033,25034],{"class":109}," HF_TOKEN",[99,25036,155],{"class":105},[99,25038,25039],{"class":214},"\"your_huggingface_token\"\n",[99,25041,25042,25045,25048,25051,25054,25056,25059,25061],{"class":101,"line":22},[99,25043,25044],{"class":1949},"hf",[99,25046,25047],{"class":214}," auth",[99,25049,25050],{"class":214}," login",[99,25052,25053],{"class":158}," --token",[99,25055,9711],{"class":214},[99,25057,25058],{"class":109},"$HF_TOKEN",[99,25060,361],{"class":214},[99,25062,25063],{"class":158}," --add-to-git-credential\n",[14,25065,25066,25069],{},[96,25067,25068],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[41,25071,25073],{"id":25072},"_52-验证登录","5.2 验证登录",[90,25075,25077],{"className":23810,"code":25076,"language":23812,"meta":21,"style":21},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[96,25078,25079,25110],{"__ignoreMap":21},[99,25080,25081,25084,25086,25089,25091,25093,25096,25099,25102,25105,25108],{"class":101,"line":102},[99,25082,25083],{"class":109},"HF_USER",[99,25085,155],{"class":105},[99,25087,25088],{"class":109},"$(",[99,25090,25044],{"class":1949},[99,25092,25047],{"class":214},[99,25094,25095],{"class":214}," whoami",[99,25097,25098],{"class":105}," |",[99,25100,25101],{"class":1949}," head",[99,25103,25104],{"class":158}," -n",[99,25106,25107],{"class":158}," 1",[99,25109,116],{"class":109},[99,25111,25112,25115,25117,25120],{"class":101,"line":22},[99,25113,25114],{"class":158},"echo",[99,25116,9711],{"class":214},[99,25118,25119],{"class":109},"$HF_USER",[99,25121,25122],{"class":214},"\"\n",[14,25124,25125],{},[1448,25126],{"alt":21,"src":25127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[41,25129,25131],{"id":25130},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25133,25134],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1117,25136,25137,25140],{},[56,25138,25139],{},"Dataset Repo（用于上传演示数据）",[56,25141,25142],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25144,25145],{},[1448,25146],{"alt":21,"src":25147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25149,25150],{},[1448,25151],{"alt":21,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25154,25155],{},[1448,25156],{"alt":21,"src":25157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25159,25160],{},[1448,25161],{"alt":21,"src":25162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5113,25164,25165],{},"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":21,"searchDepth":22,"depth":22,"links":25167},[25168,25169,25170],{"id":25007,"depth":22,"text":25008},{"id":25072,"depth":22,"text":25073},{"id":25130,"depth":22,"text":25131},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24998,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25177,"title":25178,"body":25179,"description":23364,"extension":24,"meta":25376,"navigation":26,"path":25377,"seo":25378,"stem":25379,"__hash__":25380},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25180,"toc":25371},[25181,25185,25189,25285,25293,25298,25302,25318,25321,25325,25368],[10,25182,25184],{"id":25183},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[41,25186,25188],{"id":25187},"_61-录制示教数据","6.1 录制示教数据",[90,25190,25192],{"className":23810,"code":25191,"language":23812,"meta":21,"style":21},"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",[96,25193,25194,25201,25207,25213,25219,25228,25234,25240,25246,25253,25263,25270,25280],{"__ignoreMap":21},[99,25195,25196,25199],{"class":101,"line":102},[99,25197,25198],{"class":1949},"lerobot-record",[99,25200,24667],{"class":158},[99,25202,25203,25205],{"class":101,"line":22},[99,25204,24699],{"class":158},[99,25206,24667],{"class":158},[99,25208,25209,25211],{"class":101,"line":1165},[99,25210,24777],{"class":158},[99,25212,24667],{"class":158},[99,25214,25215,25217],{"class":101,"line":1180},[99,25216,24837],{"class":158},[99,25218,24667],{"class":158},[99,25220,25221,25223,25226],{"class":101,"line":1186},[99,25222,24906],{"class":158},[99,25224,25225],{"class":214},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[99,25227,24667],{"class":158},[99,25229,25230,25232],{"class":101,"line":1200},[99,25231,24672],{"class":158},[99,25233,24667],{"class":158},[99,25235,25236,25238],{"class":101,"line":1206},[99,25237,24744],{"class":158},[99,25239,24667],{"class":158},[99,25241,25242,25244],{"class":101,"line":1297},[99,25243,24928],{"class":158},[99,25245,24667],{"class":158},[99,25247,25248,25251],{"class":101,"line":1303},[99,25249,25250],{"class":158},"  --display_data=true",[99,25252,24667],{"class":158},[99,25254,25255,25258,25261],{"class":101,"line":1315},[99,25256,25257],{"class":158},"  --dataset.repo_id=",[99,25259,25260],{"class":214},"\"Embodied-AI-6\u002Fso101_test\"",[99,25262,24667],{"class":158},[99,25264,25265,25268],{"class":101,"line":1598},[99,25266,25267],{"class":158},"  --dataset.num_episodes=10",[99,25269,24667],{"class":158},[99,25271,25272,25275,25278],{"class":101,"line":1603},[99,25273,25274],{"class":158},"  --dataset.single_task=",[99,25276,25277],{"class":214},"\"Grab the green cube\"",[99,25279,24667],{"class":158},[99,25281,25282],{"class":101,"line":1609},[99,25283,25284],{"class":158},"  --resume=true\n",[1117,25286,25287],{},[56,25288,25289,25292],{},[96,25290,25291],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25294,25295],{},[1448,25296],{"alt":21,"src":25297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[41,25299,25301],{"id":25300},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[90,25303,25305],{"className":23810,"code":25304,"language":23812,"meta":21,"style":21},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[96,25306,25307],{"__ignoreMap":21},[99,25308,25309,25312,25315],{"class":101,"line":102},[99,25310,25311],{"class":1949},"rm",[99,25313,25314],{"class":158}," -rf",[99,25316,25317],{"class":214}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25319,25320],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[41,25322,25324],{"id":25323},"_63-回放指定-episode","6.3 回放指定 episode",[90,25326,25328],{"className":23810,"code":25327,"language":23812,"meta":21,"style":21},"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",[96,25329,25330,25337,25343,25349,25355,25363],{"__ignoreMap":21},[99,25331,25332,25335],{"class":101,"line":102},[99,25333,25334],{"class":1949},"lerobot-replay",[99,25336,24667],{"class":158},[99,25338,25339,25341],{"class":101,"line":22},[99,25340,24699],{"class":158},[99,25342,24667],{"class":158},[99,25344,25345,25347],{"class":101,"line":1165},[99,25346,24777],{"class":158},[99,25348,24667],{"class":158},[99,25350,25351,25353],{"class":101,"line":1180},[99,25352,24837],{"class":158},[99,25354,24667],{"class":158},[99,25356,25357,25359,25361],{"class":101,"line":1186},[99,25358,25257],{"class":158},[99,25360,25260],{"class":214},[99,25362,24667],{"class":158},[99,25364,25365],{"class":101,"line":1200},[99,25366,25367],{"class":158},"  --dataset.episode=0\n",[5113,25369,25370],{},"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":21,"searchDepth":22,"depth":22,"links":25372},[25373,25374,25375],{"id":25187,"depth":22,"text":25188},{"id":25300,"depth":22,"text":25301},{"id":25323,"depth":22,"text":25324},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25178,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25382,"title":25383,"body":25384,"description":23364,"extension":24,"meta":25512,"navigation":26,"path":25513,"seo":25514,"stem":25515,"__hash__":25516},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25385,"toc":25510},[25386,25390,25453,25456,25503,25508],[10,25387,25389],{"id":25388},"_7-act-模型训练","7. ACT 模型训练",[90,25391,25393],{"className":23810,"code":25392,"language":23812,"meta":21,"style":21},"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",[96,25394,25395,25402,25410,25417,25424,25431,25438,25445],{"__ignoreMap":21},[99,25396,25397,25400],{"class":101,"line":102},[99,25398,25399],{"class":1949},"lerobot-train",[99,25401,24667],{"class":158},[99,25403,25404,25406,25408],{"class":101,"line":22},[99,25405,25257],{"class":158},[99,25407,25260],{"class":214},[99,25409,24667],{"class":158},[99,25411,25412,25415],{"class":101,"line":1165},[99,25413,25414],{"class":158},"  --policy.type=act",[99,25416,24667],{"class":158},[99,25418,25419,25422],{"class":101,"line":1180},[99,25420,25421],{"class":158},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[99,25423,24667],{"class":158},[99,25425,25426,25429],{"class":101,"line":1186},[99,25427,25428],{"class":158},"  --job_name=act_so101_test",[99,25430,24667],{"class":158},[99,25432,25433,25436],{"class":101,"line":1200},[99,25434,25435],{"class":158},"  --policy.device=cuda",[99,25437,24667],{"class":158},[99,25439,25440,25443],{"class":101,"line":1206},[99,25441,25442],{"class":158},"  --wandb.enable=false",[99,25444,24667],{"class":158},[99,25446,25447,25450],{"class":101,"line":1297},[99,25448,25449],{"class":158},"  --policy.repo_id=",[99,25451,25452],{"class":214},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25454,25455],{},"参数说明：",[1117,25457,25458,25464,25470,25476,25482,25491,25497],{},[56,25459,25460,25463],{},[96,25461,25462],{},"--dataset.repo_id","：训练数据集仓库。",[56,25465,25466,25469],{},[96,25467,25468],{},"--policy.type=act","：策略模型类型为 ACT。",[56,25471,25472,25475],{},[96,25473,25474],{},"--output_dir","：本地训练输出目录。",[56,25477,25478,25481],{},[96,25479,25480],{},"--job_name","：训练任务名称。",[56,25483,25484,25487,25488,24551],{},[96,25485,25486],{},"--policy.device","：训练设备（如 ",[96,25489,25490],{},"cuda",[56,25492,25493,25496],{},[96,25494,25495],{},"--wandb.enable","：是否启用 WandB 可视化。",[56,25498,25499,25502],{},[96,25500,25501],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25504,25505],{},[1448,25506],{"alt":21,"src":25507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5113,25509,25370],{},{"title":21,"searchDepth":22,"depth":22,"links":25511},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25383,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25518,"title":25519,"body":25520,"description":23364,"extension":24,"meta":25607,"navigation":26,"path":25608,"seo":25609,"stem":25610,"__hash__":25611},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25521,"toc":25605},[25522,25525,25528,25595,25603],[10,25523,25519],{"id":25524},"_8-策略部署与自动采集",[14,25526,25527],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[90,25529,25531],{"className":23810,"code":25530,"language":23812,"meta":21,"style":21},"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",[96,25532,25533,25539,25545,25551,25559,25565,25572,25580,25588],{"__ignoreMap":21},[99,25534,25535,25537],{"class":101,"line":102},[99,25536,25198],{"class":1949},[99,25538,24667],{"class":158},[99,25540,25541,25543],{"class":101,"line":22},[99,25542,24699],{"class":158},[99,25544,24667],{"class":158},[99,25546,25547,25549],{"class":101,"line":1165},[99,25548,24777],{"class":158},[99,25550,24667],{"class":158},[99,25552,25553,25555,25557],{"class":101,"line":1180},[99,25554,24906],{"class":158},[99,25556,25225],{"class":214},[99,25558,24667],{"class":158},[99,25560,25561,25563],{"class":101,"line":1186},[99,25562,24837],{"class":158},[99,25564,24667],{"class":158},[99,25566,25567,25570],{"class":101,"line":1200},[99,25568,25569],{"class":158},"  --display_data=false",[99,25571,24667],{"class":158},[99,25573,25574,25576,25578],{"class":101,"line":1206},[99,25575,25257],{"class":158},[99,25577,25260],{"class":214},[99,25579,24667],{"class":158},[99,25581,25582,25584,25586],{"class":101,"line":1297},[99,25583,25274],{"class":158},[99,25585,25277],{"class":214},[99,25587,24667],{"class":158},[99,25589,25590,25593],{"class":101,"line":1303},[99,25591,25592],{"class":158},"  --policy.path=",[99,25594,25452],{"class":214},[1117,25596,25597],{},[56,25598,25599,25602],{},[96,25600,25601],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5113,25604,25370],{},{"title":21,"searchDepth":22,"depth":22,"links":25606},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25519,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25613,"title":25614,"body":25615,"description":23364,"extension":24,"meta":25644,"navigation":26,"path":25645,"seo":25646,"stem":25647,"__hash__":25648},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25616,"toc":25642},[25617,25621,25624,25630,25633,25639],[10,25618,25620],{"id":25619},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25622,25623],{},"项目地址：",[14,25625,25626],{},[348,25627,25628],{"href":25628,"rel":25629},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23853],[14,25631,25632],{},"参考教程：",[14,25634,25635],{},[348,25636,25637],{"href":25637,"rel":25638},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23853],[14,25640,25641],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":21,"searchDepth":22,"depth":22,"links":25643},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25614,"description":23364},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25650,"title":25651,"body":25652,"description":25656,"extension":24,"meta":25657,"navigation":26,"path":25658,"seo":25659,"stem":25660,"__hash__":25661},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25653,"toc":25654},[],{"title":21,"searchDepth":22,"depth":22,"links":25655},[],"act复现",{"category":23366},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25651,"description":25656},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25663,"title":25664,"body":25665,"description":21,"extension":24,"meta":25967,"navigation":26,"path":25968,"seo":25969,"stem":25970,"__hash__":25971},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25666,"toc":25959},[25667,25670,25674,25684,25691,25698,25701,25708,25711,25714,25718,25730,25734,25780,25783,25786,25789,25792,25795,25799,25837,25843,25847,25901,25906,25909,25912,25917,25920,25925,25928,25931,25935,25938,25941,25945],[10,25668,25664],{"id":25669},"_1简介",[70,25671,25673],{"id":25672},"_11什么是-docker","1.1什么是 Docker？",[14,25675,25676,25677,25680,25681],{},"Docker 是一个开源的 ",[259,25678,25679],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[259,25682,25683],{},"一次构建，到处运行。",[14,25685,25686,25687,25690],{},"“ ",[259,25688,25689],{},"一次构建，到处运行"," ”也就是说：",[53,25692,25693],{},[56,25694,25695],{},[259,25696,25697],{},"之前：",[14,25699,25700],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[53,25702,25703],{},[56,25704,25705],{},[259,25706,25707],{},"使用docker后：",[14,25709,25710],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25712,25713],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[70,25715,25717],{"id":25716},"_12它是怎么工作的","1.2.它是怎么工作的？",[1117,25719,25720,25723],{},[56,25721,25722],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[56,25724,25725,25726,25729],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[259,25727,25728],{},"无论在哪运行都一样稳定"," 。",[70,25731,25733],{"id":25732},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[247,25735,25736,25746],{},[250,25737,25738],{},[253,25739,25740,25743],{},[256,25741,25742],{"align":23724},"概念",[256,25744,25745],{"align":23724},"解释",[294,25747,25748,25756,25764,25772],{},[253,25749,25750,25753],{},[299,25751,25752],{"align":23724},"镜像",[299,25754,25755],{"align":23724},"Image，运行容器的模板，像是一个应用快照",[253,25757,25758,25761],{},[299,25759,25760],{"align":23724},"容器",[299,25762,25763],{"align":23724},"Container，运行中的镜像实例，有自己的文件系统、网络等",[253,25765,25766,25769],{},[299,25767,25768],{"align":23724},"Dockerfile",[299,25770,25771],{"align":23724},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[253,25773,25774,25777],{},[299,25775,25776],{"align":23724},"仓库",[299,25778,25779],{"align":23724},"Registry，存放镜像的地方，比如 Docker Hub",[14,25781,25782],{},"抽象化理解:",[14,25784,25785],{},"Docker镜像≈C++类",[14,25787,25788],{},"Docker容器≈C++类实例(即对象)",[14,25790,25791],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25793,25794],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[70,25796,25798],{"id":25797},"_14类比理解","1.4.类比理解",[247,25800,25801,25811],{},[250,25802,25803],{},[253,25804,25805,25808],{},[256,25806,25807],{"align":23724},"传统部署",[256,25809,25810],{"align":23724},"Docker部署",[294,25812,25813,25821,25829],{},[253,25814,25815,25818],{},[299,25816,25817],{"align":23724},"手动安装依赖、调试版本不一致问题",[299,25819,25820],{"align":23724},"一次打包环境和代码",[253,25822,25823,25826],{},[299,25824,25825],{"align":23724},"程序“裸奔”跑在系统上",[299,25827,25828],{"align":23724},"程序“穿着容器”隔离运行",[253,25830,25831,25834],{},[299,25832,25833],{"align":23724},"容易“在我电脑上能跑”",[299,25835,25836],{"align":23724},"保证“无论在哪都能跑”",[14,25838,25839,25840],{},"就像快递包裹： ",[259,25841,25842],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[70,25844,25846],{"id":25845},"_15docker-的核心优势","1.5.Docker 的核心优势",[247,25848,25849,25859],{},[250,25850,25851],{},[253,25852,25853,25856],{},[256,25854,25855],{"align":23724},"优势",[256,25857,25858],{"align":23724},"说明",[294,25860,25861,25869,25877,25885,25893],{},[253,25862,25863,25866],{},[299,25864,25865],{"align":23724},"轻量级",[299,25867,25868],{"align":23724},"基于系统内核共享，启动速度快，占资源少",[253,25870,25871,25874],{},[299,25872,25873],{"align":23724},"跨平台",[299,25875,25876],{"align":23724},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[253,25878,25879,25882],{},[299,25880,25881],{"align":23724},"易于迁移部署",[299,25883,25884],{"align":23724},"应用和环境一起封装，不怕依赖不一致",[253,25886,25887,25890],{},[299,25888,25889],{"align":23724},"易于版本控制",[299,25891,25892],{"align":23724},"镜像版本可控，支持回滚",[253,25894,25895,25898],{},[299,25896,25897],{"align":23724},"生态丰富",[299,25899,25900],{"align":23724},"Docker Hub 上有成千上万的现成镜像可用",[53,25902,25903],{},[56,25904,25905],{},"在Linux上可以几乎实现无性能损失。",[14,25907,25908],{},"docker里的发行版和本机共用Linux内核。",[14,25910,25911],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[53,25913,25914],{},[56,25915,25916],{},"可以快速部署在绝大多数Linux发行版",[14,25918,25919],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[53,25921,25922],{},[56,25923,25924],{},"配置环境简单",[14,25926,25927],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25929,25930],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[53,25932,25933],{},[56,25934,25897],{},[14,25936,25937],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25939,25940],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[70,25942,25944],{"id":25943},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1117,25946,25947,25950,25953,25956],{},[56,25948,25949],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[56,25951,25952],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[56,25954,25955],{},"微服务架构：每个服务一个容器，灵活组合",[56,25957,25958],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":21,"searchDepth":22,"depth":22,"links":25960},[25961,25962,25963,25964,25965,25966],{"id":25672,"depth":1165,"text":25673},{"id":25716,"depth":1165,"text":25717},{"id":25732,"depth":1165,"text":25733},{"id":25797,"depth":1165,"text":25798},{"id":25845,"depth":1165,"text":25846},{"id":25943,"depth":1165,"text":25944},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25664,"description":21},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25973,"title":25974,"body":25975,"description":21,"extension":24,"meta":26708,"navigation":26,"path":26709,"seo":26710,"stem":26711,"__hash__":26712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25976,"toc":26703},[25977,25980,25984,25987,25990,25996,26002,26006,26015,26018,26075,26078,26129,26132,26215,26218,26255,26259,26270,26283,26290,26293,26373,26376,26426,26429,26452,26456,26463,26466,26482,26488,26491,26507,26513,26516,26532,26546,26552,26572,26578,26581,26593,26599,26602,26616,26622,26625,26645,26650,26653,26656,26660,26663,26666,26669,26676,26679,26682,26685,26690,26695,26700],[10,25978,25974],{"id":25979},"_2安装docker",[70,25981,25983],{"id":25982},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25985,25986],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,25988,25989],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,25991,25992],{},[348,25993,25994],{"href":25994,"rel":25995},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23853],[14,25997,25998],{},[348,25999,26000],{"href":26000,"rel":26001},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23853],[21985,26003,26005],{"id":26004},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26007,26008,26009,26014],{},"以下内容根据 ",[348,26010,26013],{"href":26011,"rel":26012},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23853],"官方文档"," 修改而来。",[14,26016,26017],{},"如果你过去安装过 docker，先删掉：",[90,26019,26021],{"className":23810,"code":26020,"language":23812,"meta":21,"style":21},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[96,26022,26023],{"__ignoreMap":21},[99,26024,26025,26027,26030,26033,26036,26039,26042,26045,26048,26051,26054,26057,26060,26063,26066,26069,26072],{"class":101,"line":102},[99,26026,3011],{"class":105},[99,26028,26029],{"class":109}," pkg ",[99,26031,26032],{"class":105},"in",[99,26034,26035],{"class":214}," docker.io",[99,26037,26038],{"class":214}," docker-doc",[99,26040,26041],{"class":214}," docker-compose",[99,26043,26044],{"class":214}," docker-compose-v2",[99,26046,26047],{"class":214}," podman-docker",[99,26049,26050],{"class":214}," containerd",[99,26052,26053],{"class":214}," runc",[99,26055,26056],{"class":109},"; ",[99,26058,26059],{"class":105},"do",[99,26061,26062],{"class":1949}," sudo",[99,26064,26065],{"class":214}," apt-get",[99,26067,26068],{"class":214}," remove",[99,26070,26071],{"class":109}," $pkg; ",[99,26073,26074],{"class":105},"done\n",[14,26076,26077],{},"首先安装依赖和GPG：",[90,26079,26083],{"className":26080,"code":26081,"language":26082,"meta":21,"style":21},"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",[96,26084,26085,26090,26095,26100,26105,26110,26115,26119,26124],{"__ignoreMap":21},[99,26086,26087],{"class":101,"line":102},[99,26088,26089],{},"# Add Docker's official GPG key:\n",[99,26091,26092],{"class":101,"line":22},[99,26093,26094],{},"sudo apt-get update\n",[99,26096,26097],{"class":101,"line":1165},[99,26098,26099],{},"sudo apt-get install ca-certificates curl\n",[99,26101,26102],{"class":101,"line":1180},[99,26103,26104],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[99,26106,26107],{"class":101,"line":1186},[99,26108,26109],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[99,26111,26112],{"class":101,"line":1200},[99,26113,26114],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[99,26116,26117],{"class":101,"line":1206},[99,26118,2386],{"emptyLinePlaceholder":26},[99,26120,26121],{"class":101,"line":1297},[99,26122,26123],{},"# 如果上面这行报错就弄下面这行\n",[99,26125,26126],{"class":101,"line":1303},[99,26127,26128],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26130,26131],{},"信任 Docker 的 GPG 公钥并添加仓库：",[90,26133,26135],{"className":23810,"code":26134,"language":23812,"meta":21,"style":21},"# 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",[96,26136,26137,26142,26148,26165,26198],{"__ignoreMap":21},[99,26138,26139],{"class":101,"line":102},[99,26140,26141],{"class":168},"# Add the repository to Apt sources:\n",[99,26143,26144,26146],{"class":101,"line":22},[99,26145,25114],{"class":158},[99,26147,24667],{"class":158},[99,26149,26150,26153,26156,26159,26162],{"class":101,"line":1165},[99,26151,26152],{"class":214},"  \"deb [arch=$(",[99,26154,26155],{"class":1949},"dpkg",[99,26157,26158],{"class":158}," --print-architecture",[99,26160,26161],{"class":214},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[99,26163,26164],{"class":158},"\\\n",[99,26166,26167,26170,26172,26174,26177,26180,26182,26184,26187,26189,26191,26194,26196],{"class":101,"line":1180},[99,26168,26169],{"class":214},"  \"",[99,26171,25088],{"class":109},[99,26173,668],{"class":158},[99,26175,26176],{"class":214}," \u002Fetc\u002Fos-release",[99,26178,26179],{"class":109}," && ",[99,26181,25114],{"class":158},[99,26183,9711],{"class":214},[99,26185,26186],{"class":109},"$VERSION_CODENAME",[99,26188,361],{"class":214},[99,26190,539],{"class":109},[99,26192,26193],{"class":214},"\" stable\"",[99,26195,25098],{"class":105},[99,26197,24667],{"class":158},[99,26199,26200,26203,26206,26209,26212],{"class":101,"line":1186},[99,26201,26202],{"class":1949},"  sudo",[99,26204,26205],{"class":214}," tee",[99,26207,26208],{"class":214}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[99,26210,26211],{"class":105}," >",[99,26213,26214],{"class":214}," \u002Fdev\u002Fnull\n",[14,26216,26217],{},"最后安装",[90,26219,26221],{"className":23810,"code":26220,"language":23812,"meta":21,"style":21},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[96,26222,26223,26232],{"__ignoreMap":21},[99,26224,26225,26227,26229],{"class":101,"line":102},[99,26226,24565],{"class":1949},[99,26228,26065],{"class":214},[99,26230,26231],{"class":214}," update\n",[99,26233,26234,26236,26238,26240,26243,26246,26249,26252],{"class":101,"line":22},[99,26235,24565],{"class":1949},[99,26237,26065],{"class":214},[99,26239,23822],{"class":214},[99,26241,26242],{"class":214}," docker-ce",[99,26244,26245],{"class":214}," docker-ce-cli",[99,26247,26248],{"class":214}," containerd.io",[99,26250,26251],{"class":214}," docker-buildx-plugin",[99,26253,26254],{"class":214}," docker-compose-plugin\n",[21985,26256,26258],{"id":26257},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26260,26261,26262,26265,26266,26269],{},"查看自己自己包管理工具版本（dnf是 ",[259,26263,26264],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[259,26267,26268],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[90,26271,26273],{"className":23810,"code":26272,"language":23812,"meta":21,"style":21},"dnf --version\n",[96,26274,26275],{"__ignoreMap":21},[99,26276,26277,26280],{"class":101,"line":102},[99,26278,26279],{"class":1949},"dnf",[99,26281,26282],{"class":158}," --version\n",[14,26284,26008,26285,26289],{},[348,26286,26013],{"href":26287,"rel":26288},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23853]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26291,26292],{},"如果你之前安装过 docker，请先删掉",[90,26294,26296],{"className":23810,"code":26295,"language":23812,"meta":21,"style":21},"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",[96,26297,26298,26312,26319,26326,26333,26340,26347,26354,26361,26368],{"__ignoreMap":21},[99,26299,26300,26302,26305,26307,26310],{"class":101,"line":102},[99,26301,24565],{"class":1949},[99,26303,26304],{"class":214}," dnf",[99,26306,26068],{"class":214},[99,26308,26309],{"class":214}," docker",[99,26311,24667],{"class":158},[99,26313,26314,26317],{"class":101,"line":22},[99,26315,26316],{"class":214},"                  docker-client",[99,26318,24667],{"class":158},[99,26320,26321,26324],{"class":101,"line":1165},[99,26322,26323],{"class":214},"                  docker-client-latest",[99,26325,24667],{"class":158},[99,26327,26328,26331],{"class":101,"line":1180},[99,26329,26330],{"class":214},"                  docker-common",[99,26332,24667],{"class":158},[99,26334,26335,26338],{"class":101,"line":1186},[99,26336,26337],{"class":214},"                  docker-latest",[99,26339,24667],{"class":158},[99,26341,26342,26345],{"class":101,"line":1200},[99,26343,26344],{"class":214},"                  docker-latest-logrotate",[99,26346,24667],{"class":158},[99,26348,26349,26352],{"class":101,"line":1206},[99,26350,26351],{"class":214},"                  docker-logrotate",[99,26353,24667],{"class":158},[99,26355,26356,26359],{"class":101,"line":1297},[99,26357,26358],{"class":214},"                  docker-selinux",[99,26360,24667],{"class":158},[99,26362,26363,26366],{"class":101,"line":1303},[99,26364,26365],{"class":214},"                  docker-engine-selinux",[99,26367,24667],{"class":158},[99,26369,26370],{"class":101,"line":1315},[99,26371,26372],{"class":214},"                  docker-engine\n",[14,26374,26375],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[90,26377,26379],{"className":23810,"code":26378,"language":23812,"meta":21,"style":21},"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",[96,26380,26381,26395,26410],{"__ignoreMap":21},[99,26382,26383,26385,26387,26390,26392],{"class":101,"line":102},[99,26384,24565],{"class":1949},[99,26386,26304],{"class":214},[99,26388,26389],{"class":158}," -y",[99,26391,23822],{"class":214},[99,26393,26394],{"class":214}," dnf-plugins-core\n",[99,26396,26397,26399,26401,26404,26407],{"class":101,"line":22},[99,26398,24565],{"class":1949},[99,26400,26304],{"class":214},[99,26402,26403],{"class":214}," config-manager",[99,26405,26406],{"class":214}," addrepo",[99,26408,26409],{"class":158}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[99,26411,26412,26414,26417,26420,26423],{"class":101,"line":1165},[99,26413,24565],{"class":1949},[99,26415,26416],{"class":214}," sed",[99,26418,26419],{"class":158}," -i",[99,26421,26422],{"class":214}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[99,26424,26425],{"class":214}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26427,26428],{},"最后安装：",[90,26430,26432],{"className":23810,"code":26431,"language":23812,"meta":21,"style":21},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[96,26433,26434],{"__ignoreMap":21},[99,26435,26436,26438,26440,26442,26444,26446,26448,26450],{"class":101,"line":102},[99,26437,24565],{"class":1949},[99,26439,26304],{"class":214},[99,26441,23822],{"class":214},[99,26443,26242],{"class":214},[99,26445,26245],{"class":214},[99,26447,26248],{"class":214},[99,26449,26251],{"class":214},[99,26451,26254],{"class":214},[70,26453,26455],{"id":26454},"_22配置环境","2.2.配置环境",[21985,26457,26459,26462],{"id":26458},"_221检查-docker-服务状态",[259,26460,26461],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26464,26465],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[90,26467,26469],{"className":23810,"code":26468,"language":23812,"meta":21,"style":21},"systemctl status docker\n",[96,26470,26471],{"__ignoreMap":21},[99,26472,26473,26476,26479],{"class":101,"line":102},[99,26474,26475],{"class":1949},"systemctl",[99,26477,26478],{"class":214}," status",[99,26480,26481],{"class":214}," docker\n",[21985,26483,26485,26462],{"id":26484},"_222启动-docker-服务",[259,26486,26487],{},"2.2.2.启动 Docker 服务",[14,26489,26490],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[90,26492,26494],{"className":23810,"code":26493,"language":23812,"meta":21,"style":21},"sudo systemctl start docker\n",[96,26495,26496],{"__ignoreMap":21},[99,26497,26498,26500,26503,26505],{"class":101,"line":102},[99,26499,24565],{"class":1949},[99,26501,26502],{"class":214}," systemctl",[99,26504,4170],{"class":214},[99,26506,26481],{"class":214},[21985,26508,26510,26462],{"id":26509},"_223设置-docker-开机自启",[259,26511,26512],{},"2.2.3.设置 Docker 开机自启",[14,26514,26515],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[90,26517,26519],{"className":23810,"code":26518,"language":23812,"meta":21,"style":21},"sudo systemctl enable docker\n",[96,26520,26521],{"__ignoreMap":21},[99,26522,26523,26525,26527,26530],{"class":101,"line":102},[99,26524,24565],{"class":1949},[99,26526,26502],{"class":214},[99,26528,26529],{"class":214}," enable",[99,26531,26481],{"class":214},[21985,26533,26535,13782,26538,13782,26543,26462],{"id":26534},"_224将用户添加到-docker-组",[259,26536,26537],{},"2.2.4.将用户添加到",[259,26539,26540],{},[96,26541,26542],{},"docker",[259,26544,26545],{},"组",[14,26547,26548,26549,26551],{},"使用以下命令将当前用户添加到 ",[96,26550,26542],{}," 组：",[90,26553,26555],{"className":23810,"code":26554,"language":23812,"meta":21,"style":21},"sudo usermod -aG docker $USER\n",[96,26556,26557],{"__ignoreMap":21},[99,26558,26559,26561,26564,26567,26569],{"class":101,"line":102},[99,26560,24565],{"class":1949},[99,26562,26563],{"class":214}," usermod",[99,26565,26566],{"class":158}," -aG",[99,26568,26309],{"class":214},[99,26570,26571],{"class":109}," $USER\n",[21985,26573,26575,26462],{"id":26574},"_225退出并重新登录",[259,26576,26577],{},"2.2.5.退出并重新登录",[14,26579,26580],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[90,26582,26584],{"className":23810,"code":26583,"language":23812,"meta":21,"style":21},"newgrp docker\n",[96,26585,26586],{"__ignoreMap":21},[99,26587,26588,26591],{"class":101,"line":102},[99,26589,26590],{"class":1949},"newgrp",[99,26592,26481],{"class":214},[21985,26594,26596,26462],{"id":26595},"_226重新启动-docker-服务如果需要",[259,26597,26598],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26600,26601],{},"确保 Docker 服务正在运行，可以使用以下命令：",[90,26603,26604],{"className":23810,"code":26493,"language":23812,"meta":21,"style":21},[96,26605,26606],{"__ignoreMap":21},[99,26607,26608,26610,26612,26614],{"class":101,"line":102},[99,26609,24565],{"class":1949},[99,26611,26502],{"class":214},[99,26613,4170],{"class":214},[99,26615,26481],{"class":214},[21985,26617,26619,26462],{"id":26618},"_227重启电脑后检查-docker-服务状态",[259,26620,26621],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26623,26624],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[90,26626,26628],{"className":23810,"code":26627,"language":23812,"meta":21,"style":21},"sudo reboot\nsystemctl status docker\n",[96,26629,26630,26637],{"__ignoreMap":21},[99,26631,26632,26634],{"class":101,"line":102},[99,26633,24565],{"class":1949},[99,26635,26636],{"class":214}," reboot\n",[99,26638,26639,26641,26643],{"class":101,"line":22},[99,26640,26475],{"class":1949},[99,26642,26478],{"class":214},[99,26644,26481],{"class":214},[14,26646,26647],{},[1448,26648],{"alt":21,"src":26649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26651,26652],{},"第三行显示enabled说明开机自启动成功",[14,26654,26655],{},"按q退出",[70,26657,26659],{"id":26658},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26661,26662],{},"优先使用linux来使用docker是比较好的",[14,26664,26665],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26667,26668],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26670,26671,26672],{},"官方下载安装:",[348,26673,26674],{"href":26674,"rel":26675},"https:\u002F\u002Fwww.docker.com\u002F",[23853],[14,26677,26678],{},"Windows的Docker显卡直通与USB直通:",[14,26680,26681],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26683,26684],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26686,26687],{},[1448,26688],{"alt":21,"src":26689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26691,26692],{},[1448,26693],{"alt":21,"src":26694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26696,26697],{},[1448,26698],{"alt":21,"src":26699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5113,26701,26702],{},"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":21,"searchDepth":22,"depth":22,"links":26704},[26705,26706,26707],{"id":25982,"depth":1165,"text":25983},{"id":26454,"depth":1165,"text":26455},{"id":26658,"depth":1165,"text":26659},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25974,"description":21},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26714,"title":26715,"body":26716,"description":26723,"extension":24,"meta":27416,"navigation":26,"path":27417,"seo":27418,"stem":27419,"__hash__":27420},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26717,"toc":27410},[26718,26721,26724,26728,26733,26738,26741,26769,26774,26783,26786,26791,26795,26802,26807,26813,26817,26820,26824,26829,26921,26926,26944,26949,26970,26975,26991,26995,27000,27029,27034,27080,27085,27129,27137,27154,27159,27175,27180,27194,27197,27200,27203,27206,27235,27238,27243,27247,27250,27253,27259,27262,27265,27268,27330,27337,27342,27345,27363,27367,27370,27387,27390,27393,27407],[10,26719,26715],{"id":26720},"_3docker直通",[14,26722,26723],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[70,26725,26727],{"id":26726},"_31usb直通","3.1.USB直通",[14,26729,26730],{},[1448,26731],{"alt":21,"src":26732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[53,26734,26735],{},[56,26736,26737],{},"方法一(不是很推荐新手)：",[14,26739,26740],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[90,26742,26744],{"className":23810,"code":26743,"language":23812,"meta":21,"style":21},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[96,26745,26746,26754,26759],{"__ignoreMap":21},[99,26747,26748,26751],{"class":101,"line":102},[99,26749,26750],{"class":1949},"ls",[99,26752,26753],{"class":214}," \u002Fdev\n",[99,26755,26756],{"class":101,"line":22},[99,26757,26758],{"class":168},"#例如\n",[99,26760,26761,26764,26766],{"class":101,"line":1165},[99,26762,26763],{"class":109},"--device",[99,26765,155],{"class":105},[99,26767,26768],{"class":214},"\u002Fdev\u002Ftty_USB0\n",[53,26770,26771],{"start":22},[56,26772,26773],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[90,26775,26777],{"className":23810,"code":26776,"language":23812,"meta":21,"style":21},"--privileged\n",[96,26778,26779],{"__ignoreMap":21},[99,26780,26781],{"class":101,"line":102},[99,26782,26776],{"class":1949},[14,26784,26785],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26787,26788],{},[1448,26789],{"alt":21,"src":26790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[70,26792,26794],{"id":26793},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26796,26797,26798,26801],{},"NVIDIA Container Toolkit使用户 ",[259,26799,26800],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26803,26804],{},[1448,26805],{"alt":21,"src":26806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26808,26809],{},[348,26810,26811],{"href":26811,"rel":26812},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23853],[21985,26814,26816],{"id":26815},"_321安装","3.2.1.安装",[14,26818,26819],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22897,26821,26823],{"id":26822},"_3211ubuntu","3.2.1.1.Ubuntu",[53,26825,26826],{},[56,26827,26828],{},"配置存储库 并更新",[90,26830,26832],{"className":23810,"code":26831,"language":23812,"meta":21,"style":21},"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",[96,26833,26834,26863,26883,26895,26907,26913],{"__ignoreMap":21},[99,26835,26836,26839,26842,26845,26847,26849,26852,26855,26858,26861],{"class":101,"line":102},[99,26837,26838],{"class":1949},"curl",[99,26840,26841],{"class":158}," -fsSL",[99,26843,26844],{"class":214}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[99,26846,25098],{"class":105},[99,26848,26062],{"class":1949},[99,26850,26851],{"class":214}," gpg",[99,26853,26854],{"class":158}," --dearmor",[99,26856,26857],{"class":158}," -o",[99,26859,26860],{"class":214}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[99,26862,24667],{"class":158},[99,26864,26865,26868,26870,26873,26876,26879,26881],{"class":101,"line":22},[99,26866,26867],{"class":109},"  && ",[99,26869,26838],{"class":1949},[99,26871,26872],{"class":158}," -s",[99,26874,26875],{"class":158}," -L",[99,26877,26878],{"class":214}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[99,26880,25098],{"class":105},[99,26882,24667],{"class":158},[99,26884,26885,26888,26891,26893],{"class":101,"line":1165},[99,26886,26887],{"class":1949},"    sed",[99,26889,26890],{"class":214}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[99,26892,25098],{"class":105},[99,26894,24667],{"class":158},[99,26896,26897,26900,26902,26905],{"class":101,"line":1180},[99,26898,26899],{"class":1949},"    sudo",[99,26901,26205],{"class":214},[99,26903,26904],{"class":214}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[99,26906,24667],{"class":158},[99,26908,26909,26911],{"class":101,"line":1186},[99,26910,26867],{"class":109},[99,26912,26164],{"class":158},[99,26914,26915,26917,26919],{"class":101,"line":1200},[99,26916,26899],{"class":1949},[99,26918,26065],{"class":214},[99,26920,26231],{"class":214},[53,26922,26923],{"start":22},[56,26924,26925],{},"安装nvidia-docker2",[90,26927,26929],{"className":23810,"code":26928,"language":23812,"meta":21,"style":21},"sudo apt-get install -y nvidia-docker2\n",[96,26930,26931],{"__ignoreMap":21},[99,26932,26933,26935,26937,26939,26941],{"class":101,"line":102},[99,26934,24565],{"class":1949},[99,26936,26065],{"class":214},[99,26938,23822],{"class":214},[99,26940,26389],{"class":158},[99,26942,26943],{"class":214}," nvidia-docker2\n",[53,26945,26946],{"start":1165},[56,26947,26948],{},"使用nvidia-ctk命令配置container runtime",[90,26950,26952],{"className":23810,"code":26951,"language":23812,"meta":21,"style":21},"sudo nvidia-ctk runtime configure --runtime=docker\n",[96,26953,26954],{"__ignoreMap":21},[99,26955,26956,26958,26961,26964,26967],{"class":101,"line":102},[99,26957,24565],{"class":1949},[99,26959,26960],{"class":214}," nvidia-ctk",[99,26962,26963],{"class":214}," runtime",[99,26965,26966],{"class":214}," configure",[99,26968,26969],{"class":158}," --runtime=docker\n",[53,26971,26972],{"start":1180},[56,26973,26974],{},"重启docker服务:",[90,26976,26978],{"className":23810,"code":26977,"language":23812,"meta":21,"style":21},"sudo systemctl restart docker\n",[96,26979,26980],{"__ignoreMap":21},[99,26981,26982,26984,26986,26989],{"class":101,"line":102},[99,26983,24565],{"class":1949},[99,26985,26502],{"class":214},[99,26987,26988],{"class":214}," restart",[99,26990,26481],{"class":214},[22897,26992,26994],{"id":26993},"_3212fedora","3.2.1.2.Fedora",[53,26996,26997],{},[56,26998,26999],{},"配置存储库",[90,27001,27003],{"className":23810,"code":27002,"language":23812,"meta":21,"style":21},"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",[96,27004,27005,27020],{"__ignoreMap":21},[99,27006,27007,27009,27011,27013,27016,27018],{"class":101,"line":102},[99,27008,26838],{"class":1949},[99,27010,26872],{"class":158},[99,27012,26875],{"class":158},[99,27014,27015],{"class":214}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[99,27017,25098],{"class":105},[99,27019,24667],{"class":158},[99,27021,27022,27024,27026],{"class":101,"line":22},[99,27023,24565],{"class":1949},[99,27025,26205],{"class":214},[99,27027,27028],{"class":214}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[53,27030,27031],{"start":22},[56,27032,27033],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[90,27035,27037],{"className":23810,"code":27036,"language":23812,"meta":21,"style":21},"# 如果是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",[96,27038,27039,27044,27058,27062,27067],{"__ignoreMap":21},[99,27040,27041],{"class":101,"line":102},[99,27042,27043],{"class":168},"# 如果是RHEL或者Rocky（DNF4）\n",[99,27045,27046,27048,27050,27052,27055],{"class":101,"line":22},[99,27047,24565],{"class":1949},[99,27049,26304],{"class":214},[99,27051,26403],{"class":214},[99,27053,27054],{"class":158}," --add-repo",[99,27056,27057],{"class":214}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[99,27059,27060],{"class":101,"line":1165},[99,27061,2386],{"emptyLinePlaceholder":26},[99,27063,27064],{"class":101,"line":1180},[99,27065,27066],{"class":168},"# 如果是Feodra41+（DNF5）\n",[99,27068,27069,27071,27073,27075,27077],{"class":101,"line":1186},[99,27070,24565],{"class":1949},[99,27072,26304],{"class":214},[99,27074,26403],{"class":214},[99,27076,26406],{"class":214},[99,27078,27079],{"class":158}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[53,27081,27082],{"start":1165},[56,27083,27084],{},"安装NVIDIA Container Toolki包",[90,27086,27088],{"className":23810,"code":27087,"language":23812,"meta":21,"style":21},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[96,27089,27090,27095,27108,27112,27117],{"__ignoreMap":21},[99,27091,27092],{"class":101,"line":102},[99,27093,27094],{"class":168},"# 如果是RHEL或者Rocky\n",[99,27096,27097,27099,27101,27103,27105],{"class":101,"line":22},[99,27098,24565],{"class":1949},[99,27100,26304],{"class":214},[99,27102,23822],{"class":214},[99,27104,26389],{"class":158},[99,27106,27107],{"class":214}," nvidia-container-toolkit\n",[99,27109,27110],{"class":101,"line":1165},[99,27111,2386],{"emptyLinePlaceholder":26},[99,27113,27114],{"class":101,"line":1180},[99,27115,27116],{"class":168},"# 如果是Fedora\n",[99,27118,27119,27121,27123,27125,27127],{"class":101,"line":1186},[99,27120,24565],{"class":1949},[99,27122,26304],{"class":214},[99,27124,23822],{"class":214},[99,27126,26389],{"class":158},[99,27128,27107],{"class":214},[53,27130,27131],{"start":1180},[56,27132,27133,27134,27136],{},"安装nvidia-docker2 ： 在Fedora上使用",[96,27135,26279],{},"进行安装",[90,27138,27140],{"className":23810,"code":27139,"language":23812,"meta":21,"style":21},"sudo dnf install -y nvidia-docker2\n",[96,27141,27142],{"__ignoreMap":21},[99,27143,27144,27146,27148,27150,27152],{"class":101,"line":102},[99,27145,24565],{"class":1949},[99,27147,26304],{"class":214},[99,27149,23822],{"class":214},[99,27151,26389],{"class":158},[99,27153,26943],{"class":214},[53,27155,27156],{"start":1186},[56,27157,27158],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[90,27160,27161],{"className":23810,"code":26951,"language":23812,"meta":21,"style":21},[96,27162,27163],{"__ignoreMap":21},[99,27164,27165,27167,27169,27171,27173],{"class":101,"line":102},[99,27166,24565],{"class":1949},[99,27168,26960],{"class":214},[99,27170,26963],{"class":214},[99,27172,26966],{"class":214},[99,27174,26969],{"class":158},[53,27176,27177],{"start":1200},[56,27178,27179],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[90,27181,27182],{"className":23810,"code":26977,"language":23812,"meta":21,"style":21},[96,27183,27184],{"__ignoreMap":21},[99,27185,27186,27188,27190,27192],{"class":101,"line":102},[99,27187,24565],{"class":1949},[99,27189,26502],{"class":214},[99,27191,26988],{"class":214},[99,27193,26481],{"class":214},[14,27195,27196],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27198,27199],{},"方法：",[14,27201,27202],{},"1️⃣nvidia-smi",[14,27204,27205],{},"2️⃣运行nvidia cuda 容器进行测试",[90,27207,27209],{"className":23810,"code":27208,"language":23812,"meta":21,"style":21},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[96,27210,27211],{"__ignoreMap":21},[99,27212,27213,27215,27217,27220,27223,27226,27229,27232],{"class":101,"line":102},[99,27214,24565],{"class":1949},[99,27216,26309],{"class":214},[99,27218,27219],{"class":214}," run",[99,27221,27222],{"class":158}," --rm",[99,27224,27225],{"class":158}," --gpus",[99,27227,27228],{"class":214}," all",[99,27230,27231],{"class":214}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[99,27233,27234],{"class":214}," nvidia-smi\n",[14,27236,27237],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27239,27240],{},[1448,27241],{"alt":21,"src":27242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[70,27244,27246],{"id":27245},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27248,27249],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27251,27252],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27254,27255],{},[348,27256,27257],{"href":27257,"rel":27258},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23853],[14,27260,27261],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27263,27264],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27266,27267],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[247,27269,27270,27286],{},[250,27271,27272],{},[253,27273,27274,27277,27280,27283],{},[256,27275,27276],{"align":23724},"镜像类型",[256,27278,27279],{"align":23724},"适用场景",[256,27281,27282],{"align":23724},"示例标签",[256,27284,27285],{"align":23724},"大小",[294,27287,27288,27302,27316],{},[253,27289,27290,27293,27296,27299],{},[299,27291,27292],{"align":23724},"base",[299,27294,27295],{"align":23724},"仅需 CUDA 运行时库",[299,27297,27298],{"align":23724},"12.4.0-base-ubuntu22.04",[299,27300,27301],{"align":23724},"~240MB",[253,27303,27304,27307,27310,27313],{},[299,27305,27306],{"align":23724},"runtime",[299,27308,27309],{"align":23724},"部署编译后的应用（含数学库）",[299,27311,27312],{"align":23724},"12.4.0-runtime-ubuntu22.04",[299,27314,27315],{"align":23724},"~2GB",[253,27317,27318,27321,27324,27327],{},[299,27319,27320],{"align":23724},"devel",[299,27322,27323],{"align":23724},"开发环境（含编译工具）",[299,27325,27326],{"align":23724},"12.4.0-devel-ubuntu22.04",[299,27328,27329],{"align":23724},"~3GB",[14,27331,27332,27333,27336],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[96,27334,27335],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27338,27339],{},[1448,27340],{"alt":21,"src":27341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27343,27344],{},"在dockerfile里就可以开头这么写：",[90,27346,27348],{"className":23810,"code":27347,"language":23812,"meta":21,"style":21},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[96,27349,27350,27355],{"__ignoreMap":21},[99,27351,27352],{"class":101,"line":102},[99,27353,27354],{"class":168},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[99,27356,27357,27360],{"class":101,"line":22},[99,27358,27359],{"class":1949},"FROM",[99,27361,27362],{"class":214}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[70,27364,27366],{"id":27365},"_34配置以太网","3.4.配置以太网",[14,27368,27369],{},"指定网络模式",[90,27371,27373],{"className":23810,"code":27372,"language":23812,"meta":21,"style":21},"--net=host \\\n",[96,27374,27375],{"__ignoreMap":21},[99,27376,27377,27380,27382,27385],{"class":101,"line":102},[99,27378,27379],{"class":109},"--net",[99,27381,155],{"class":105},[99,27383,27384],{"class":214},"host",[99,27386,24667],{"class":1949},[14,27388,27389],{},"启动参数里加上这行即可。具体在下方",[14,27391,27392],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1117,27394,27395,27398,27401,27404],{},[56,27396,27397],{},"--net=bridge:默认选项，表示连接到默认的网桥",[56,27399,27400],{},"--net=host:容器使用宿主机的网络",[56,27402,27403],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[56,27405,27406],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5113,27408,27409],{},"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":21,"searchDepth":22,"depth":22,"links":27411},[27412,27413,27414,27415],{"id":26726,"depth":1165,"text":26727},{"id":26793,"depth":1165,"text":26794},{"id":27245,"depth":1165,"text":27246},{"id":27365,"depth":1165,"text":27366},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26715,"description":26723},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":4,"title":5,"body":27422,"description":16,"extension":24,"meta":27432,"navigation":26,"path":27,"seo":27433,"stem":29,"__hash__":30},{"type":7,"value":27423,"toc":27430},[27424,27426,27428],[10,27425,5],{"id":12},[14,27427,16],{},[14,27429,19],{},{"title":21,"searchDepth":22,"depth":22,"links":27431},[],{},{"title":5,"description":16},{"id":27435,"title":27436,"body":27437,"description":21,"extension":24,"meta":28449,"navigation":26,"path":28450,"seo":28451,"stem":28452,"__hash__":28453},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27438,"toc":28444},[27439,27442,27446,27452,27456,27459,27799,27802,27805,27808,27813,27818,27821,27824,27827,27830,27849,27852,27863,27869,28051,28061,28077,28340,28342,28367,28382,28391,28441],[10,27440,27436],{"id":27441},"_5docker命令学习",[70,27443,27445],{"id":27444},"_51参考文档","5.1.参考文档",[14,27447,27448],{},[348,27449,27450],{"href":27450,"rel":27451},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23853],[70,27453,27455],{"id":27454},"_52常用命令","5.2.常用命令",[14,27457,27458],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[247,27460,27461,27474],{},[250,27462,27463],{},[253,27464,27465,27468,27471],{},[256,27466,27467],{"align":23724},"命令",[256,27469,27470],{"align":23724},"描述",[256,27472,27473],{"align":23724},"示例",[294,27475,27476,27487,27498,27509,27520,27531,27542,27553,27563,27574,27585,27596,27606,27617,27628,27639,27649,27659,27669,27679,27690,27701,27712,27723,27734,27745,27755,27766,27777,27788],{},[253,27477,27478,27481,27484],{},[299,27479,27480],{"align":23724},"docker run",[299,27482,27483],{"align":23724},"创建并启动一个新的容器。",[299,27485,27486],{"align":23724},"docker run -it ubuntu bash",[253,27488,27489,27492,27495],{},[299,27490,27491],{"align":23724},"docker build",[299,27493,27494],{"align":23724},"通过指定的 Dockerfile 创建一个新的镜像。",[299,27496,27497],{"align":23724},"docker build -t myimage .",[253,27499,27500,27503,27506],{},[299,27501,27502],{"align":23724},"docker pull",[299,27504,27505],{"align":23724},"从 Docker 仓库拉取镜像。",[299,27507,27508],{"align":23724},"docker pull ubuntu",[253,27510,27511,27514,27517],{},[299,27512,27513],{"align":23724},"docker push",[299,27515,27516],{"align":23724},"将本地镜像推送到 Docker 仓库。",[299,27518,27519],{"align":23724},"docker push myimage",[253,27521,27522,27525,27528],{},[299,27523,27524],{"align":23724},"docker stop",[299,27526,27527],{"align":23724},"停止一个正在运行的容器。",[299,27529,27530],{"align":23724},"docker stop container_id",[253,27532,27533,27536,27539],{},[299,27534,27535],{"align":23724},"docker start",[299,27537,27538],{"align":23724},"启动一个已经存在的容器。",[299,27540,27541],{"align":23724},"docker start container_id",[253,27543,27544,27547,27550],{},[299,27545,27546],{"align":23724},"docker restart",[299,27548,27549],{"align":23724},"重新启动容器。",[299,27551,27552],{"align":23724},"docker restart container_id",[253,27554,27555,27558,27561],{},[299,27556,27557],{"align":23724},"docker ps",[299,27559,27560],{"align":23724},"列出当前正在运行的容器。",[299,27562,27557],{"align":23724},[253,27564,27565,27568,27571],{},[299,27566,27567],{"align":23724},"docker rm",[299,27569,27570],{"align":23724},"删除一个或多个停止的容器。",[299,27572,27573],{"align":23724},"docker rm container_id",[253,27575,27576,27579,27582],{},[299,27577,27578],{"align":23724},"docker exec",[299,27580,27581],{"align":23724},"在一个正在运行的容器中执行命令。",[299,27583,27584],{"align":23724},"docker exec -it container_id bash",[253,27586,27587,27590,27593],{},[299,27588,27589],{"align":23724},"docker logs",[299,27591,27592],{"align":23724},"查看容器的日志输出。",[299,27594,27595],{"align":23724},"docker logs container_id",[253,27597,27598,27601,27604],{},[299,27599,27600],{"align":23724},"docker images",[299,27602,27603],{"align":23724},"列出本地所有镜像。",[299,27605,27600],{"align":23724},[253,27607,27608,27611,27614],{},[299,27609,27610],{"align":23724},"docker rmi",[299,27612,27613],{"align":23724},"删除一个或多个镜像。",[299,27615,27616],{"align":23724},"docker rmi myimage",[253,27618,27619,27622,27625],{},[299,27620,27621],{"align":23724},"docker network",[299,27623,27624],{"align":23724},"管理 Docker 网络。",[299,27626,27627],{"align":23724},"docker network ls",[253,27629,27630,27633,27636],{},[299,27631,27632],{"align":23724},"docker volume",[299,27634,27635],{"align":23724},"管理 Docker 数据卷。",[299,27637,27638],{"align":23724},"docker volume ls",[253,27640,27641,27644,27647],{},[299,27642,27643],{"align":23724},"docker-compose up",[299,27645,27646],{"align":23724},"启动 docker-compose.yml 中定义的所有服务。",[299,27648,27643],{"align":23724},[253,27650,27651,27654,27657],{},[299,27652,27653],{"align":23724},"docker-compose down",[299,27655,27656],{"align":23724},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[299,27658,27653],{"align":23724},[253,27660,27661,27664,27667],{},[299,27662,27663],{"align":23724},"docker info",[299,27665,27666],{"align":23724},"显示 Docker 系统的详细信息。",[299,27668,27663],{"align":23724},[253,27670,27671,27674,27677],{},[299,27672,27673],{"align":23724},"docker stats",[299,27675,27676],{"align":23724},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[299,27678,27673],{"align":23724},[253,27680,27681,27684,27687],{},[299,27682,27683],{"align":23724},"docker inspect",[299,27685,27686],{"align":23724},"查看容器或镜像的详细信息（JSON 格式）。",[299,27688,27689],{"align":23724},"docker inspect container_id",[253,27691,27692,27695,27698],{},[299,27693,27694],{"align":23724},"docker save",[299,27696,27697],{"align":23724},"将一个镜像保存为 tar 文件。",[299,27699,27700],{"align":23724},"docker save -o myimage.tar myimage",[253,27702,27703,27706,27709],{},[299,27704,27705],{"align":23724},"docker load",[299,27707,27708],{"align":23724},"从 tar 文件中加载镜像。",[299,27710,27711],{"align":23724},"docker load -i myimage.tar",[253,27713,27714,27717,27720],{},[299,27715,27716],{"align":23724},"docker tag",[299,27718,27719],{"align":23724},"为镜像添加标签（tag）。",[299,27721,27722],{"align":23724},"docker tag myimage myimage:v1",[253,27724,27725,27728,27731],{},[299,27726,27727],{"align":23724},"docker buildx build",[299,27729,27730],{"align":23724},"使用 Buildx 构建多架构镜像。",[299,27732,27733],{"align":23724},"docker buildx build -t myimage .",[253,27735,27736,27739,27742],{},[299,27737,27738],{"align":23724},"docker buildx create",[299,27740,27741],{"align":23724},"创建一个新的 Buildx 构建实例。",[299,27743,27744],{"align":23724},"docker buildx create –use",[253,27746,27747,27750,27753],{},[299,27748,27749],{"align":23724},"docker buildx ls",[299,27751,27752],{"align":23724},"列出所有可用的 Buildx 构建实例。",[299,27754,27749],{"align":23724},[253,27756,27757,27760,27763],{},[299,27758,27759],{"align":23724},"docker buildx use",[299,27761,27762],{"align":23724},"设置当前的 Buildx 构建实例。",[299,27764,27765],{"align":23724},"docker buildx use mybuilder",[253,27767,27768,27771,27774],{},[299,27769,27770],{"align":23724},"docker buildx bake",[299,27772,27773],{"align":23724},"使用 Bake 文件批量构建镜像。",[299,27775,27776],{"align":23724},"docker buildx bake -f bake.hcl",[253,27778,27779,27782,27785],{},[299,27780,27781],{"align":23724},"docker buildx build –push",[299,27783,27784],{"align":23724},"构建镜像并推送到镜像仓库。",[299,27786,27787],{"align":23724},"docker buildx build –push -t myimage .",[253,27789,27790,27793,27796],{},[299,27791,27792],{"align":23724},"docker buildx build –platform",[299,27794,27795],{"align":23724},"构建镜像并为多个平台生成支持。",[299,27797,27798],{"align":23724},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27800,27801],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27803,27804],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27806,27807],{},"docker images 可以查看已经下载的镜像",[14,27809,27810],{},[1448,27811],{"alt":21,"src":27812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27814,27815],{},[259,27816,27817],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27819,27820],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27822,27823],{},"docker container logs 查看容器日志",[14,27825,27826],{},"docker top 查看容器里的进程",[14,27828,27829],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[90,27831,27833],{"className":23810,"code":27832,"language":23812,"meta":21,"style":21},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[96,27834,27835],{"__ignoreMap":21},[99,27836,27837,27840,27843,27846],{"class":101,"line":102},[99,27838,27839],{"class":1949},"如：docker",[99,27841,27842],{"class":214}," cp",[99,27844,27845],{"class":214}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[99,27847,27848],{"class":214}," \u002Fmydata\u002Fnginx\n",[14,27850,27851],{},"docker run时在启动容器的时候会有几个常用的选项：",[1117,27853,27854,27857,27860],{},[56,27855,27856],{},"-d选项：表示后台运行",[56,27858,27859],{},"-P选项：随机端口映射",[56,27861,27862],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[70,27864,27866],{"id":27865},"_53run命令的参数非常重要",[259,27867,27868],{},"5.3.run命令的参数（非常重要）",[247,27870,27871,27884],{},[250,27872,27873],{},[253,27874,27875,27878,27881],{},[256,27876,27877],{"align":23724},"参数\u002F配置",[256,27879,27880],{"align":23724},"功能说明",[256,27882,27883],{"align":23724},"重要性与参考依据",[294,27885,27886,27897,27908,27919,27930,27941,27952,27963,27974,27985,27996,28007,28018,28029,28040],{},[253,27887,27888,27891,27894],{},[299,27889,27890],{"align":23724},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[299,27892,27893],{"align":23724},"指定容器名称，便于后续管理",[299,27895,27896],{"align":23724},"替代随机生成的容器名。",[253,27898,27899,27902,27905],{},[299,27900,27901],{"align":23724},"–gpus all",[299,27903,27904],{"align":23724},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[299,27906,27907],{"align":23724},"用于CUDA加速等GPU依赖任务。",[253,27909,27910,27913,27916],{},[299,27911,27912],{"align":23724},"-e NVIDIA_DRIVER_CAPABILITIES=all",[299,27914,27915],{"align":23724},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[299,27917,27918],{"align":23724},"确保容器内GPU功能完整67。",[253,27920,27921,27924,27927],{},[299,27922,27923],{"align":23724},"-dit",[299,27925,27926],{"align":23724},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[299,27928,27929],{"align":23724},"允许容器在后台运行并支持交互操作。",[253,27931,27932,27935,27938],{},[299,27933,27934],{"align":23724},"–privileged",[299,27936,27937],{"align":23724},"赋予容器完全主机权限（可访问设备、内核模块等）",[299,27939,27940],{"align":23724},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[253,27942,27943,27946,27949],{},[299,27944,27945],{"align":23724},"–net=host",[299,27947,27948],{"align":23724},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[299,27950,27951],{"align":23724},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[253,27953,27954,27957,27960],{},[299,27955,27956],{"align":23724},"–group-add audio–group-add video–group-add dialout",[299,27958,27959],{"align":23724},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[299,27961,27962],{"align":23724},"避免权限问题（如避免无法调用摄像头、麦克风）。",[253,27964,27965,27968,27971],{},[299,27966,27967],{"align":23724},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[299,27969,27970],{"align":23724},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[299,27972,27973],{"align":23724},"支持容器内运行图形界面应用（如OpenCV可视化）。",[253,27975,27976,27979,27982],{},[299,27977,27978],{"align":23724},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[299,27980,27981],{"align":23724},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[299,27983,27984],{"align":23724},"实现容器内图形显示。",[253,27986,27987,27990,27993],{},[299,27988,27989],{"align":23724},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[299,27991,27992],{"align":23724},"挂载X11认证文件（只读）",[299,27994,27995],{"align":23724},"确保容器有权连接宿主机显示服务。",[253,27997,27998,28001,28004],{},[299,27999,28000],{"align":23724},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[299,28002,28003],{"align":23724},"挂载Wayland显示协议相关目录",[299,28005,28006],{"align":23724},"支持Wayland协议的图形显示。",[253,28008,28009,28012,28015],{},[299,28010,28011],{"align":23724},"–ulimit nofile=1024:524288",[299,28013,28014],{"align":23724},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[299,28016,28017],{"align":23724},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[253,28019,28020,28023,28026],{},[299,28021,28022],{"align":23724},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[299,28024,28025],{"align":23724},"挂载宿主机用户目录到容器内同名路径",[299,28027,28028],{"align":23724},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[253,28030,28031,28034,28037],{},[299,28032,28033],{"align":23724},"-w \u002Fhome\u002Ftungchiahui",[299,28035,28036],{"align":23724},"设置容器启动后的默认工作目录",[299,28038,28039],{"align":23724},"直接进入项目路径，方便执行命令2324。",[253,28041,28042,28045,28048],{},[299,28043,28044],{"align":23724},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[299,28046,28047],{"align":23724},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[299,28049,28050],{"align":23724},"提供预配置的深度学习与机器人开发环境。",[14,28052,28053,28054,28056,28057,28060],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[96,28055,24565],{},"加不加",[96,28058,28059],{},"sudo -E","都无所谓。",[14,28062,28063,28064,28066,28067,28069,28070,28073,28074,28076],{},"用户已经被加到docker组了，不用",[96,28065,24565],{},"也行跑，其次，",[96,28068,24565],{},"运行的话，你的",[96,28071,28072],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[96,28075,28072],{},"更不可能变了。",[90,28078,28080],{"className":23810,"code":28079,"language":23812,"meta":21,"style":21},"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",[96,28081,28082,28095,28105,28115,28127,28134,28141,28148,28158,28167,28176,28190,28202,28214,28223,28233,28242,28257,28290,28317,28328,28335],{"__ignoreMap":21},[99,28083,28084,28086,28088,28090,28093],{"class":101,"line":102},[99,28085,24565],{"class":1949},[99,28087,26309],{"class":214},[99,28089,27219],{"class":214},[99,28091,28092],{"class":158}," --name=ros_opencv_cuda",[99,28094,24667],{"class":158},[99,28096,28097,28100,28103],{"class":101,"line":22},[99,28098,28099],{"class":109},"--gpus ",[99,28101,28102],{"class":214},"all",[99,28104,24667],{"class":158},[99,28106,28107,28110,28113],{"class":101,"line":1165},[99,28108,28109],{"class":109},"-e ",[99,28111,28112],{"class":214},"NVIDIA_DRIVER_CAPABILITIES=all",[99,28114,24667],{"class":158},[99,28116,28117,28119,28122,28125],{"class":101,"line":1180},[99,28118,28109],{"class":109},[99,28120,28121],{"class":214},"DISPLAY=",[99,28123,28124],{"class":109},"$DISPLAY ",[99,28126,26164],{"class":158},[99,28128,28129,28132],{"class":101,"line":1186},[99,28130,28131],{"class":109},"-dit ",[99,28133,26164],{"class":158},[99,28135,28136,28139],{"class":101,"line":1200},[99,28137,28138],{"class":109},"--privileged ",[99,28140,26164],{"class":158},[99,28142,28143,28146],{"class":101,"line":1206},[99,28144,28145],{"class":109},"--net=host ",[99,28147,26164],{"class":158},[99,28149,28150,28153,28156],{"class":101,"line":1297},[99,28151,28152],{"class":109},"--group-add ",[99,28154,28155],{"class":214},"audio",[99,28157,24667],{"class":158},[99,28159,28160,28162,28165],{"class":101,"line":1303},[99,28161,28152],{"class":109},[99,28163,28164],{"class":214},"video",[99,28166,24667],{"class":158},[99,28168,28169,28171,28174],{"class":101,"line":1315},[99,28170,28152],{"class":109},[99,28172,28173],{"class":214},"dialout",[99,28175,24667],{"class":158},[99,28177,28178,28180,28183,28185,28188],{"class":101,"line":1598},[99,28179,28109],{"class":109},[99,28181,28182],{"class":214},"XAUTHORITY=",[99,28184,28072],{"class":109},[99,28186,28187],{"class":214},"\u002F.Xauthority",[99,28189,24667],{"class":158},[99,28191,28192,28194,28197,28200],{"class":101,"line":1603},[99,28193,28109],{"class":109},[99,28195,28196],{"class":214},"WAYLAND_DISPLAY=",[99,28198,28199],{"class":109},"$WAYLAND_DISPLAY ",[99,28201,26164],{"class":158},[99,28203,28204,28206,28209,28212],{"class":101,"line":1609},[99,28205,28109],{"class":109},[99,28207,28208],{"class":214},"XDG_RUNTIME_DIR=",[99,28210,28211],{"class":109},"$XDG_RUNTIME_DIR ",[99,28213,26164],{"class":158},[99,28215,28216,28218,28221],{"class":101,"line":1614},[99,28217,28109],{"class":109},[99,28219,28220],{"class":214},"QT_QPA_PLATFORM=xcb",[99,28222,24667],{"class":158},[99,28224,28225,28228,28231],{"class":101,"line":1628},[99,28226,28227],{"class":109},"-v ",[99,28229,28230],{"class":214},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[99,28232,24667],{"class":158},[99,28234,28235,28237,28240],{"class":101,"line":1633},[99,28236,28227],{"class":109},[99,28238,28239],{"class":214},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[99,28241,24667],{"class":158},[99,28243,28244,28247,28250,28252,28255],{"class":101,"line":1639},[99,28245,28246],{"class":109},"-v $HOME",[99,28248,28249],{"class":214},"\u002F.Xauthority:",[99,28251,28072],{"class":109},[99,28253,28254],{"class":214},"\u002F.Xauthority:ro",[99,28256,24667],{"class":158},[99,28258,28259,28261,28264,28266,28269,28272,28274,28277,28279,28281,28283,28285,28288],{"class":101,"line":1660},[99,28260,28227],{"class":109},[99,28262,28263],{"class":214},"\u002Frun\u002Fuser\u002F",[99,28265,25088],{"class":109},[99,28267,28268],{"class":1949},"id",[99,28270,28271],{"class":158}," -u",[99,28273,539],{"class":109},[99,28275,28276],{"class":214},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[99,28278,25088],{"class":109},[99,28280,28268],{"class":1949},[99,28282,28271],{"class":158},[99,28284,539],{"class":109},[99,28286,28287],{"class":214},"\u002Fwayland-0",[99,28289,24667],{"class":158},[99,28291,28292,28294,28296,28298,28300,28302,28304,28307,28309,28311,28313,28315],{"class":101,"line":1665},[99,28293,28227],{"class":109},[99,28295,28263],{"class":214},[99,28297,25088],{"class":109},[99,28299,28268],{"class":1949},[99,28301,28271],{"class":158},[99,28303,539],{"class":109},[99,28305,28306],{"class":214},":\u002Frun\u002Fuser\u002F",[99,28308,25088],{"class":109},[99,28310,28268],{"class":1949},[99,28312,28271],{"class":158},[99,28314,13701],{"class":109},[99,28316,26164],{"class":158},[99,28318,28319,28321,28323,28326],{"class":101,"line":1679},[99,28320,28246],{"class":109},[99,28322,969],{"class":214},[99,28324,28325],{"class":109},"$HOME ",[99,28327,26164],{"class":158},[99,28329,28330,28333],{"class":101,"line":1684},[99,28331,28332],{"class":109},"-w $HOME ",[99,28334,26164],{"class":158},[99,28336,28337],{"class":101,"line":1713},[99,28338,28339],{"class":109},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28341,9012],{},[53,28343,28344,28352,28355,28358],{},[56,28345,28346,13782,28348,28351],{},[96,28347,28112],{},[96,28349,28350],{},"--gpus all","没有英伟达显卡请注释。",[56,28353,28354],{},"--name后面请自己为容器起名。",[56,28356,28357],{},"最后一行仓库名称请你自己找对应的镜像填上。",[56,28359,28360,28361,28366],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23541,28362,28363],{},[259,28364,28365],{},"请不要加","。",[90,28368,28370],{"className":23810,"code":28369,"language":23812,"meta":21,"style":21},"--ulimit nofile=1024:524288 \\\n",[96,28371,28372],{"__ignoreMap":21},[99,28373,28374,28377,28380],{"class":101,"line":102},[99,28375,28376],{"class":1949},"--ulimit",[99,28378,28379],{"class":214}," nofile=1024:524288",[99,28381,24667],{"class":158},[14,28383,28384,28385,28390],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23541,28386,28387],{},[259,28388,28389],{},"不建议","**.**",[90,28392,28394],{"className":23810,"code":28393,"language":23812,"meta":21,"style":21},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[96,28395,28396,28423,28432],{"__ignoreMap":21},[99,28397,28398,28401,28404,28406,28408,28410,28412,28414,28416,28419,28421],{"class":101,"line":102},[99,28399,28400],{"class":1949},"--user",[99,28402,28403],{"class":109}," $(",[99,28405,28268],{"class":1949},[99,28407,28271],{"class":158},[99,28409,539],{"class":109},[99,28411,969],{"class":214},[99,28413,25088],{"class":109},[99,28415,28268],{"class":1949},[99,28417,28418],{"class":158}," -g",[99,28420,13701],{"class":109},[99,28422,26164],{"class":158},[99,28424,28425,28427,28430],{"class":101,"line":22},[99,28426,28227],{"class":109},[99,28428,28429],{"class":214},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[99,28431,24667],{"class":158},[99,28433,28434,28436,28439],{"class":101,"line":1165},[99,28435,28227],{"class":109},[99,28437,28438],{"class":214},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[99,28440,24667],{"class":158},[5113,28442,28443],{},"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":21,"searchDepth":22,"depth":22,"links":28445},[28446,28447,28448],{"id":27444,"depth":1165,"text":27445},{"id":27454,"depth":1165,"text":27455},{"id":27865,"depth":1165,"text":27868},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27436,"description":21},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28455,"title":28456,"body":28457,"description":21,"extension":24,"meta":30080,"navigation":26,"path":30081,"seo":30082,"stem":30083,"__hash__":30084},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28458,"toc":30075},[28459,28462,28466,28469,28691,28695,28699,28702,28808,28813,28816,28821,28824,28829,28832,28837,28840,28852,28855,28860,28867,28895,28902,28978,28983,28986,29009,29011,29086,29091,29094,29098,29106,29111,29116,29120,29131,29137,29140,29143,29167,29170,29173,29201,29204,29207,29672,29675,29680,29685,29689,29712,29717,29721,29725,29728,29731,29734,29761,29764,29767,29785,29788,29791,29813,29821,29826,29831,29835,29838,29841,29844,29847,29892,29895,29913,29916,29921,29924,29945,29948,30004,30007,30012,30016,30019,30026,30029,30032,30037,30040,30056,30059,30072],[10,28460,28456],{"id":28461},"_6手动创建docker镜像",[70,28463,28465],{"id":28464},"_61dockerfile","6.1.DockerFile",[14,28467,28468],{},"常用命令：",[247,28470,28471,28482],{},[250,28472,28473],{},[253,28474,28475,28478,28480],{},[256,28476,28477],{"align":23724},"指令",[256,28479,25858],{"align":23724},[256,28481,27473],{"align":23724},[294,28483,28484,28494,28510,28521,28532,28543,28554,28565,28576,28590,28604,28615,28629,28640,28651,28665,28680],{},[253,28485,28486,28488,28491],{},[299,28487,27359],{"align":23724},[299,28489,28490],{"align":23724},"指定基础镜像，是 Dockerfile 的起点",[299,28492,28493],{"align":23724},"FROM ubuntu:22.04",[253,28495,28496,28499,28502],{},[299,28497,28498],{"align":23724},"LABEL",[299,28500,28501],{"align":23724},"添加元数据（如作者、版本等）",[299,28503,28504,28505,28509],{"align":23724},"LABEL maintainer=”",[348,28506,28508],{"href":28507},"mailto:you@example.com","you@example.com","”",[253,28511,28512,28515,28518],{},[299,28513,28514],{"align":23724},"ENV",[299,28516,28517],{"align":23724},"设置环境变量",[299,28519,28520],{"align":23724},"ENV PORT=8080",[253,28522,28523,28526,28529],{},[299,28524,28525],{"align":23724},"ARG",[299,28527,28528],{"align":23724},"构建参数，只在构建期间可用",[299,28530,28531],{"align":23724},"ARG VERSION=1.0",[253,28533,28534,28537,28540],{},[299,28535,28536],{"align":23724},"RUN",[299,28538,28539],{"align":23724},"构建镜像时运行命令",[299,28541,28542],{"align":23724},"RUN apt-get update && apt-get install -y curl",[253,28544,28545,28548,28551],{},[299,28546,28547],{"align":23724},"COPY",[299,28549,28550],{"align":23724},"复制文件到镜像中",[299,28552,28553],{"align":23724},"COPY . \u002Fapp",[253,28555,28556,28559,28562],{},[299,28557,28558],{"align":23724},"ADD",[299,28560,28561],{"align":23724},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[299,28563,28564],{"align":23724},"ADD archive.tar.gz \u002Fdata\u002F",[253,28566,28567,28570,28573],{},[299,28568,28569],{"align":23724},"WORKDIR",[299,28571,28572],{"align":23724},"设置工作目录",[299,28574,28575],{"align":23724},"WORKDIR \u002Fopt",[253,28577,28578,28581,28584],{},[299,28579,28580],{"align":23724},"CMD",[299,28582,28583],{"align":23724},"设置容器启动时默认命令（可被 docker run 覆盖）",[299,28585,28586,28587],{"align":23724},"CMD ",[99,28588,28589],{},"“node”, “index.js”",[253,28591,28592,28595,28598],{},[299,28593,28594],{"align":23724},"ENTRYPOINT",[299,28596,28597],{"align":23724},"设置容器启动时固定命令（通常用于 CLI 工具等）",[299,28599,28600,28601],{"align":23724},"ENTRYPOINT ",[99,28602,28603],{},"“python3”",[253,28605,28606,28609,28612],{},[299,28607,28608],{"align":23724},"EXPOSE",[299,28610,28611],{"align":23724},"声明镜像内服务监听的端口（不会自动映射）",[299,28613,28614],{"align":23724},"EXPOSE 80",[253,28616,28617,28620,28623],{},[299,28618,28619],{"align":23724},"VOLUME",[299,28621,28622],{"align":23724},"声明数据卷挂载点",[299,28624,28625,28626],{"align":23724},"VOLUME ",[99,28627,28628],{},"“\u002Fdata”",[253,28630,28631,28634,28637],{},[299,28632,28633],{"align":23724},"USER",[299,28635,28636],{"align":23724},"设置后续命令执行的用户",[299,28638,28639],{"align":23724},"USER appuser",[253,28641,28642,28645,28648],{},[299,28643,28644],{"align":23724},"ONBUILD",[299,28646,28647],{"align":23724},"当镜像作为其他镜像基础镜像时触发的构建指令",[299,28649,28650],{"align":23724},"ONBUILD COPY . \u002Fsrc",[253,28652,28653,28656,28659],{},[299,28654,28655],{"align":23724},"SHELL",[299,28657,28658],{"align":23724},"更改默认 shell，比如将 sh -c 改为 bash -c",[299,28660,28661,28662],{"align":23724},"SHELL ",[99,28663,28664],{},"“\u002Fbin\u002Fbash”, “-c”",[253,28666,28667,28670,28673],{},[299,28668,28669],{"align":23724},"HEALTHCHECK",[299,28671,28672],{"align":23724},"定义容器运行时的健康检查命令",[299,28674,28675,28676],{"align":23724},"`HEALTHCHECK CMD curl –fail ",[348,28677,28678],{"href":28678,"rel":28679},"http:\u002F\u002Flocalhost:8080",[23853],[253,28681,28682,28685,28688],{},[299,28683,28684],{"align":23724},"STOPSIGNAL",[299,28686,28687],{"align":23724},"容器停止时发送的信号",[299,28689,28690],{"align":23724},"STOPSIGNAL SIGKILL",[70,28692,28694],{"id":28693},"_62自己创建容器","6.2.自己创建容器",[21985,28696,28698],{"id":28697},"_621手动创建","6.2.1.手动创建",[14,28700,28701],{},"在x86电脑上编译x86的：",[90,28703,28705],{"className":23810,"code":28704,"language":23812,"meta":21,"style":21},"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",[96,28706,28707,28723,28727,28740,28744,28757,28761,28774,28778,28791,28795],{"__ignoreMap":21},[99,28708,28709,28711,28714,28717,28720],{"class":101,"line":102},[99,28710,26542],{"class":1949},[99,28712,28713],{"class":214}," build",[99,28715,28716],{"class":158}," -t",[99,28718,28719],{"class":214}," ros-melodic-cuda118-cudnn8-bionic:latest",[99,28721,28722],{"class":214}," .\n",[99,28724,28725],{"class":101,"line":22},[99,28726,2386],{"emptyLinePlaceholder":26},[99,28728,28729,28731,28733,28735,28738],{"class":101,"line":1165},[99,28730,26542],{"class":1949},[99,28732,28713],{"class":214},[99,28734,28716],{"class":158},[99,28736,28737],{"class":214}," ros-noetic-focal:latest",[99,28739,28722],{"class":214},[99,28741,28742],{"class":101,"line":1180},[99,28743,2386],{"emptyLinePlaceholder":26},[99,28745,28746,28748,28750,28752,28755],{"class":101,"line":1186},[99,28747,26542],{"class":1949},[99,28749,28713],{"class":214},[99,28751,28716],{"class":158},[99,28753,28754],{"class":214}," ros-humble-jammy:latest",[99,28756,28722],{"class":214},[99,28758,28759],{"class":101,"line":1200},[99,28760,2386],{"emptyLinePlaceholder":26},[99,28762,28763,28765,28767,28769,28772],{"class":101,"line":1206},[99,28764,26542],{"class":1949},[99,28766,28713],{"class":214},[99,28768,28716],{"class":158},[99,28770,28771],{"class":214}," ros-jazzy-noble:latest",[99,28773,28722],{"class":214},[99,28775,28776],{"class":101,"line":1297},[99,28777,2386],{"emptyLinePlaceholder":26},[99,28779,28780,28782,28784,28786,28789],{"class":101,"line":1303},[99,28781,26542],{"class":1949},[99,28783,28713],{"class":214},[99,28785,28716],{"class":158},[99,28787,28788],{"class":214}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[99,28790,28722],{"class":214},[99,28792,28793],{"class":101,"line":1315},[99,28794,2386],{"emptyLinePlaceholder":26},[99,28796,28797,28799,28801,28803,28806],{"class":101,"line":1598},[99,28798,26542],{"class":1949},[99,28800,28713],{"class":214},[99,28802,28716],{"class":158},[99,28804,28805],{"class":214}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[99,28807,28722],{"class":214},[14,28809,28810],{},[1448,28811],{"alt":21,"src":28812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28814,28815],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28817,28818],{},[1448,28819],{"alt":21,"src":28820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28822,28823],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[53,28825,28826],{},[56,28827,28828],{},"创建 Docker Hub 账户",[14,28830,28831],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[53,28833,28834],{"start":22},[56,28835,28836],{},"登录 Docker Hub",[14,28838,28839],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[90,28841,28843],{"className":23810,"code":28842,"language":23812,"meta":21,"style":21},"docker login\n",[96,28844,28845],{"__ignoreMap":21},[99,28846,28847,28849],{"class":101,"line":102},[99,28848,26542],{"class":1949},[99,28850,28851],{"class":214}," login\n",[14,28853,28854],{},"输入你的 Docker Hub 用户名和密码进行验证。",[53,28856,28857],{},[56,28858,28859],{},"为你的镜像打标签",[14,28861,28862,28863,28866],{},"Docker Hub 使用 ",[96,28864,28865],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[90,28868,28870],{"className":23810,"code":28869,"language":23812,"meta":21,"style":21},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[96,28871,28872],{"__ignoreMap":21},[99,28873,28874,28876,28879,28881,28884,28887,28890,28892],{"class":101,"line":102},[99,28875,26542],{"class":1949},[99,28877,28878],{"class":214}," tag",[99,28880,28771],{"class":214},[99,28882,28883],{"class":105}," \u003C",[99,28885,28886],{"class":214},"你的用户",[99,28888,28889],{"class":109},"名",[99,28891,1070],{"class":105},[99,28893,28894],{"class":214},"\u002Fros-jazzy-noble:latest\n",[14,28896,28897,28898,28901],{},"例如，如果你的 Docker Hub 用户名是 ",[96,28899,28900],{},"tungchiahui","，你应该执行：",[90,28903,28905],{"className":23810,"code":28904,"language":23812,"meta":21,"style":21},"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",[96,28906,28907,28918,28922,28933,28937,28948,28952,28963,28967],{"__ignoreMap":21},[99,28908,28909,28911,28913,28915],{"class":101,"line":102},[99,28910,26542],{"class":1949},[99,28912,28878],{"class":214},[99,28914,28737],{"class":214},[99,28916,28917],{"class":214}," tungchiahui\u002Fros-noetic-focal:latest\n",[99,28919,28920],{"class":101,"line":22},[99,28921,2386],{"emptyLinePlaceholder":26},[99,28923,28924,28926,28928,28930],{"class":101,"line":1165},[99,28925,26542],{"class":1949},[99,28927,28878],{"class":214},[99,28929,28754],{"class":214},[99,28931,28932],{"class":214}," tungchiahui\u002Fros-humble-jammy:latest\n",[99,28934,28935],{"class":101,"line":1180},[99,28936,2386],{"emptyLinePlaceholder":26},[99,28938,28939,28941,28943,28945],{"class":101,"line":1186},[99,28940,26542],{"class":1949},[99,28942,28878],{"class":214},[99,28944,28771],{"class":214},[99,28946,28947],{"class":214}," tungchiahui\u002Fros-jazzy-noble:latest\n",[99,28949,28950],{"class":101,"line":1200},[99,28951,2386],{"emptyLinePlaceholder":26},[99,28953,28954,28956,28958,28960],{"class":101,"line":1206},[99,28955,26542],{"class":1949},[99,28957,28878],{"class":214},[99,28959,28788],{"class":214},[99,28961,28962],{"class":214}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[99,28964,28965],{"class":101,"line":1297},[99,28966,2386],{"emptyLinePlaceholder":26},[99,28968,28969,28971,28973,28975],{"class":101,"line":1303},[99,28970,26542],{"class":1949},[99,28972,28878],{"class":214},[99,28974,28805],{"class":214},[99,28976,28977],{"class":214}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[53,28979,28980],{"start":22},[56,28981,28982],{},"推送镜像到 Docker Hub",[14,28984,28985],{},"使用以下命令将镜像推送到 Docker Hub：",[90,28987,28989],{"className":23810,"code":28988,"language":23812,"meta":21,"style":21},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[96,28990,28991],{"__ignoreMap":21},[99,28992,28993,28995,28998,29000,29002,29004,29006],{"class":101,"line":102},[99,28994,26542],{"class":1949},[99,28996,28997],{"class":214}," push",[99,28999,28883],{"class":105},[99,29001,28886],{"class":214},[99,29003,28889],{"class":109},[99,29005,1070],{"class":105},[99,29007,29008],{"class":214},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29010,14620],{},[90,29012,29014],{"className":23810,"code":29013,"language":23812,"meta":21,"style":21},"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",[96,29015,29016,29024,29028,29036,29040,29048,29052,29061,29065,29073,29077],{"__ignoreMap":21},[99,29017,29018,29020,29022],{"class":101,"line":102},[99,29019,26542],{"class":1949},[99,29021,28997],{"class":214},[99,29023,28917],{"class":214},[99,29025,29026],{"class":101,"line":22},[99,29027,2386],{"emptyLinePlaceholder":26},[99,29029,29030,29032,29034],{"class":101,"line":1165},[99,29031,26542],{"class":1949},[99,29033,28997],{"class":214},[99,29035,28932],{"class":214},[99,29037,29038],{"class":101,"line":1180},[99,29039,2386],{"emptyLinePlaceholder":26},[99,29041,29042,29044,29046],{"class":101,"line":1186},[99,29043,26542],{"class":1949},[99,29045,28997],{"class":214},[99,29047,28947],{"class":214},[99,29049,29050],{"class":101,"line":1200},[99,29051,2386],{"emptyLinePlaceholder":26},[99,29053,29054,29056,29058],{"class":101,"line":1206},[99,29055,26542],{"class":1949},[99,29057,28997],{"class":214},[99,29059,29060],{"class":214}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[99,29062,29063],{"class":101,"line":1297},[99,29064,2386],{"emptyLinePlaceholder":26},[99,29066,29067,29069,29071],{"class":101,"line":1303},[99,29068,26542],{"class":1949},[99,29070,28997],{"class":214},[99,29072,28977],{"class":214},[99,29074,29075],{"class":101,"line":1315},[99,29076,2386],{"emptyLinePlaceholder":26},[99,29078,29079,29081,29083],{"class":101,"line":1598},[99,29080,26542],{"class":1949},[99,29082,28997],{"class":214},[99,29084,29085],{"class":214}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[53,29087,29088],{"start":1165},[56,29089,29090],{},"验证推送成功",[14,29092,29093],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29095,29096],{},[259,29097,3770],{},[1117,29099,29100,29103],{},[56,29101,29102],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[56,29104,29105],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29107,29108],{},[1448,29109],{"alt":21,"src":29110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29112,29113],{},[1448,29114],{"alt":21,"src":29115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21985,29117,29119],{"id":29118},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29121,29122,29123,29126,29127,29130],{},"如果您想在 ",[259,29124,29125],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[259,29128,29129],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29132,29133,29134],{},"1. ",[259,29135,29136],{},"启用 Docker 跨平台构建",[14,29138,29139],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29141,29142],{},"第一步：启用 buildx（只需执行一次）",[90,29144,29146],{"className":23810,"code":29145,"language":23812,"meta":21,"style":21},"docker buildx create --name multiarch_builder --use\n",[96,29147,29148],{"__ignoreMap":21},[99,29149,29150,29152,29155,29158,29161,29164],{"class":101,"line":102},[99,29151,26542],{"class":1949},[99,29153,29154],{"class":214}," buildx",[99,29156,29157],{"class":214}," create",[99,29159,29160],{"class":158}," --name",[99,29162,29163],{"class":214}," multiarch_builder",[99,29165,29166],{"class":158}," --use\n",[14,29168,29169],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29171,29172],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[90,29174,29176],{"className":23810,"code":29175,"language":23812,"meta":21,"style":21},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[96,29177,29178],{"__ignoreMap":21},[99,29179,29180,29182,29184,29186,29189,29192,29195,29198],{"class":101,"line":102},[99,29181,26542],{"class":1949},[99,29183,27219],{"class":214},[99,29185,27222],{"class":158},[99,29187,29188],{"class":158}," --privileged",[99,29190,29191],{"class":214}," multiarch\u002Fqemu-user-static",[99,29193,29194],{"class":158}," --reset",[99,29196,29197],{"class":158}," -p",[99,29199,29200],{"class":214}," yes\n",[14,29202,29203],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29205,29206],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[90,29208,29210],{"className":23810,"code":29209,"language":23812,"meta":21,"style":21},"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",[96,29211,29212,29254,29258,29263,29273,29283,29292,29298,29302,29306,29316,29324,29333,29339,29343,29347,29357,29365,29374,29380,29384,29388,29398,29406,29415,29421,29425,29429,29439,29447,29456,29462,29466,29470,29480,29488,29497,29503,29507,29511,29521,29529,29538,29544,29548,29552,29562,29570,29579,29585,29589,29593,29603,29611,29620,29626,29630,29634,29645,29653,29662,29668],{"__ignoreMap":21},[99,29213,29214,29216,29218,29220,29223,29226,29228,29230,29233,29235,29237,29239,29241,29244,29247,29249,29252],{"class":101,"line":102},[99,29215,26542],{"class":1949},[99,29217,29154],{"class":214},[99,29219,28713],{"class":214},[99,29221,29222],{"class":158}," --platform",[99,29224,29225],{"class":214}," linux\u002Famd64,linux\u002Farm64",[99,29227,28716],{"class":158},[99,29229,28883],{"class":105},[99,29231,29232],{"class":214},"你的镜像",[99,29234,28889],{"class":109},[99,29236,1070],{"class":105},[99,29238,969],{"class":214},[99,29240,1020],{"class":105},[99,29242,29243],{"class":214},"标",[99,29245,29246],{"class":109},"签",[99,29248,1070],{"class":105},[99,29250,29251],{"class":158}," --push",[99,29253,28722],{"class":214},[99,29255,29256],{"class":101,"line":22},[99,29257,2386],{"emptyLinePlaceholder":26},[99,29259,29260],{"class":101,"line":1165},[99,29261,29262],{"class":168},"# 例子：\n",[99,29264,29265,29267,29269,29271],{"class":101,"line":1180},[99,29266,26542],{"class":1949},[99,29268,29154],{"class":214},[99,29270,28713],{"class":214},[99,29272,24667],{"class":158},[99,29274,29275,29278,29281],{"class":101,"line":1186},[99,29276,29277],{"class":109},"--platform ",[99,29279,29280],{"class":214},"linux\u002Famd64,linux\u002Farm64",[99,29282,24667],{"class":158},[99,29284,29285,29287,29290],{"class":101,"line":1200},[99,29286,28716],{"class":158},[99,29288,29289],{"class":214}," tungchiahui\u002Fros:noetic-focal",[99,29291,24667],{"class":158},[99,29293,29294,29296],{"class":101,"line":1206},[99,29295,29251],{"class":158},[99,29297,24667],{"class":158},[99,29299,29300],{"class":101,"line":1297},[99,29301,28722],{"class":214},[99,29303,29304],{"class":101,"line":1303},[99,29305,2386],{"emptyLinePlaceholder":26},[99,29307,29308,29310,29312,29314],{"class":101,"line":1315},[99,29309,26542],{"class":1949},[99,29311,29154],{"class":214},[99,29313,28713],{"class":214},[99,29315,24667],{"class":158},[99,29317,29318,29320,29322],{"class":101,"line":1598},[99,29319,29277],{"class":109},[99,29321,29280],{"class":214},[99,29323,24667],{"class":158},[99,29325,29326,29328,29331],{"class":101,"line":1603},[99,29327,28716],{"class":158},[99,29329,29330],{"class":214}," tungchiahui\u002Fros:humble-jammy",[99,29332,24667],{"class":158},[99,29334,29335,29337],{"class":101,"line":1609},[99,29336,29251],{"class":158},[99,29338,24667],{"class":158},[99,29340,29341],{"class":101,"line":1614},[99,29342,28722],{"class":214},[99,29344,29345],{"class":101,"line":1628},[99,29346,2386],{"emptyLinePlaceholder":26},[99,29348,29349,29351,29353,29355],{"class":101,"line":1633},[99,29350,26542],{"class":1949},[99,29352,29154],{"class":214},[99,29354,28713],{"class":214},[99,29356,24667],{"class":158},[99,29358,29359,29361,29363],{"class":101,"line":1639},[99,29360,29277],{"class":109},[99,29362,29280],{"class":214},[99,29364,24667],{"class":158},[99,29366,29367,29369,29372],{"class":101,"line":1660},[99,29368,28716],{"class":158},[99,29370,29371],{"class":214}," tungchiahui\u002Fros:jazzy-noble",[99,29373,24667],{"class":158},[99,29375,29376,29378],{"class":101,"line":1665},[99,29377,29251],{"class":158},[99,29379,24667],{"class":158},[99,29381,29382],{"class":101,"line":1679},[99,29383,28722],{"class":214},[99,29385,29386],{"class":101,"line":1684},[99,29387,2386],{"emptyLinePlaceholder":26},[99,29389,29390,29392,29394,29396],{"class":101,"line":1713},[99,29391,26309],{"class":1949},[99,29393,29154],{"class":214},[99,29395,28713],{"class":214},[99,29397,24667],{"class":158},[99,29399,29400,29402,29404],{"class":101,"line":1718},[99,29401,29277],{"class":109},[99,29403,29280],{"class":214},[99,29405,24667],{"class":158},[99,29407,29408,29410,29413],{"class":101,"line":1735},[99,29409,28716],{"class":158},[99,29411,29412],{"class":214}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[99,29414,24667],{"class":158},[99,29416,29417,29419],{"class":101,"line":1740},[99,29418,29251],{"class":158},[99,29420,24667],{"class":158},[99,29422,29423],{"class":101,"line":1745},[99,29424,28722],{"class":214},[99,29426,29427],{"class":101,"line":1750},[99,29428,2386],{"emptyLinePlaceholder":26},[99,29430,29431,29433,29435,29437],{"class":101,"line":1764},[99,29432,26542],{"class":1949},[99,29434,29154],{"class":214},[99,29436,28713],{"class":214},[99,29438,24667],{"class":158},[99,29440,29441,29443,29445],{"class":101,"line":1769},[99,29442,29277],{"class":109},[99,29444,29280],{"class":214},[99,29446,24667],{"class":158},[99,29448,29449,29451,29454],{"class":101,"line":2563},[99,29450,28716],{"class":158},[99,29452,29453],{"class":214}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[99,29455,24667],{"class":158},[99,29457,29458,29460],{"class":101,"line":2577},[99,29459,29251],{"class":158},[99,29461,24667],{"class":158},[99,29463,29464],{"class":101,"line":2585},[99,29465,28722],{"class":214},[99,29467,29468],{"class":101,"line":2590},[99,29469,2386],{"emptyLinePlaceholder":26},[99,29471,29472,29474,29476,29478],{"class":101,"line":2596},[99,29473,26309],{"class":1949},[99,29475,29154],{"class":214},[99,29477,28713],{"class":214},[99,29479,24667],{"class":158},[99,29481,29482,29484,29486],{"class":101,"line":2602},[99,29483,29277],{"class":109},[99,29485,29280],{"class":214},[99,29487,24667],{"class":158},[99,29489,29490,29492,29495],{"class":101,"line":2607},[99,29491,28716],{"class":158},[99,29493,29494],{"class":214}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[99,29496,24667],{"class":158},[99,29498,29499,29501],{"class":101,"line":7935},[99,29500,29251],{"class":158},[99,29502,24667],{"class":158},[99,29504,29505],{"class":101,"line":7959},[99,29506,28722],{"class":214},[99,29508,29509],{"class":101,"line":7964},[99,29510,2386],{"emptyLinePlaceholder":26},[99,29512,29513,29515,29517,29519],{"class":101,"line":7970},[99,29514,26542],{"class":1949},[99,29516,29154],{"class":214},[99,29518,28713],{"class":214},[99,29520,24667],{"class":158},[99,29522,29523,29525,29527],{"class":101,"line":7997},[99,29524,29277],{"class":109},[99,29526,29280],{"class":214},[99,29528,24667],{"class":158},[99,29530,29531,29533,29536],{"class":101,"line":8002},[99,29532,28716],{"class":158},[99,29534,29535],{"class":214}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[99,29537,24667],{"class":158},[99,29539,29540,29542],{"class":101,"line":8008},[99,29541,29251],{"class":158},[99,29543,24667],{"class":158},[99,29545,29546],{"class":101,"line":8020},[99,29547,28722],{"class":214},[99,29549,29550],{"class":101,"line":8032},[99,29551,2386],{"emptyLinePlaceholder":26},[99,29553,29554,29556,29558,29560],{"class":101,"line":8044},[99,29555,26542],{"class":1949},[99,29557,29154],{"class":214},[99,29559,28713],{"class":214},[99,29561,24667],{"class":158},[99,29563,29564,29566,29568],{"class":101,"line":9703},[99,29565,29277],{"class":109},[99,29567,29280],{"class":214},[99,29569,24667],{"class":158},[99,29571,29572,29574,29577],{"class":101,"line":9728},[99,29573,28716],{"class":158},[99,29575,29576],{"class":214}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[99,29578,24667],{"class":158},[99,29580,29581,29583],{"class":101,"line":9751},[99,29582,29251],{"class":158},[99,29584,24667],{"class":158},[99,29586,29587],{"class":101,"line":9775},[99,29588,28722],{"class":214},[99,29590,29591],{"class":101,"line":9780},[99,29592,2386],{"emptyLinePlaceholder":26},[99,29594,29595,29597,29599,29601],{"class":101,"line":9785},[99,29596,26309],{"class":1949},[99,29598,29154],{"class":214},[99,29600,28713],{"class":214},[99,29602,24667],{"class":158},[99,29604,29605,29607,29609],{"class":101,"line":9790},[99,29606,29277],{"class":109},[99,29608,29280],{"class":214},[99,29610,24667],{"class":158},[99,29612,29613,29615,29618],{"class":101,"line":9799},[99,29614,28716],{"class":158},[99,29616,29617],{"class":214}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[99,29619,24667],{"class":158},[99,29621,29622,29624],{"class":101,"line":9804},[99,29623,29251],{"class":158},[99,29625,24667],{"class":158},[99,29627,29628],{"class":101,"line":9810},[99,29629,28722],{"class":214},[99,29631,29632],{"class":101,"line":9831},[99,29633,2386],{"emptyLinePlaceholder":26},[99,29635,29636,29639,29641,29643],{"class":101,"line":9837},[99,29637,29638],{"class":1949},"  docker",[99,29640,29154],{"class":214},[99,29642,28713],{"class":214},[99,29644,24667],{"class":158},[99,29646,29647,29649,29651],{"class":101,"line":9851},[99,29648,29277],{"class":109},[99,29650,29280],{"class":214},[99,29652,24667],{"class":158},[99,29654,29655,29657,29660],{"class":101,"line":9857},[99,29656,28716],{"class":158},[99,29658,29659],{"class":214}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[99,29661,24667],{"class":158},[99,29663,29664,29666],{"class":101,"line":9884},[99,29665,29251],{"class":158},[99,29667,24667],{"class":158},[99,29669,29670],{"class":101,"line":9893},[99,29671,28722],{"class":214},[14,29673,29674],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29676,29677],{},[1448,29678],{"alt":21,"src":29679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29681,29682],{},[1448,29683],{"alt":21,"src":29684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21985,29686,29688],{"id":29687},"_623清除构建缓存","6.2.3.清除构建缓存",[90,29690,29692],{"className":23810,"code":29691,"language":23812,"meta":21,"style":21},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[96,29693,29694,29699],{"__ignoreMap":21},[99,29695,29696],{"class":101,"line":102},[99,29697,29698],{"class":168},"# 清理BuildKit构建缓存\n",[99,29700,29701,29703,29706,29709],{"class":101,"line":22},[99,29702,26542],{"class":1949},[99,29704,29705],{"class":214}," builder",[99,29707,29708],{"class":214}," prune",[99,29710,29711],{"class":158}," -f\n",[14,29713,29714],{},[1448,29715],{"alt":21,"src":29716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[70,29718,29720],{"id":29719},"_63补充","6.3.补充",[21985,29722,29724],{"id":29723},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29726,29727],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29729,29730],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29732,29733],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[90,29735,29737],{"className":23810,"code":29736,"language":23812,"meta":21,"style":21},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[96,29738,29739,29746],{"__ignoreMap":21},[99,29740,29741,29743],{"class":101,"line":102},[99,29742,27359],{"class":1949},[99,29744,29745],{"class":214}," nginx\n",[99,29747,29748,29750,29753,29756,29758],{"class":101,"line":22},[99,29749,28536],{"class":1949},[99,29751,29752],{"class":214}," echo",[99,29754,29755],{"class":214}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[99,29757,26211],{"class":105},[99,29759,29760],{"class":214}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29762,29763],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29765,29766],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[90,29768,29770],{"className":23810,"code":29769,"language":23812,"meta":21,"style":21},"docker build -t nginx:tuling .\n",[96,29771,29772],{"__ignoreMap":21},[99,29773,29774,29776,29778,29780,29783],{"class":101,"line":102},[99,29775,26542],{"class":1949},[99,29777,28713],{"class":214},[99,29779,28716],{"class":158},[99,29781,29782],{"class":214}," nginx:tuling",[99,29784,28722],{"class":214},[14,29786,29787],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29789,29790],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[90,29792,29794],{"className":23810,"code":29793,"language":23812,"meta":21,"style":21},"docker run -d -p 92:80 nginx:tuling\n",[96,29795,29796],{"__ignoreMap":21},[99,29797,29798,29800,29802,29805,29807,29810],{"class":101,"line":102},[99,29799,26542],{"class":1949},[99,29801,27219],{"class":214},[99,29803,29804],{"class":158}," -d",[99,29806,29197],{"class":158},[99,29808,29809],{"class":214}," 92:80",[99,29811,29812],{"class":214}," nginx:tuling\n",[14,29814,29815,29816],{},"4、访问 ",[348,29817,29820],{"href":29818,"rel":29819},"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",[23853],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29822,29823],{},[1448,29824],{"alt":21,"src":29825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29827,29828],{},[1448,29829],{"alt":21,"src":29830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21985,29832,29834],{"id":29833},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29836,29837],{},"只需要知道大体流程即可",[14,29839,29840],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29842,29843],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29845,29846],{},"2、在Dockerfile中添加以下内容",[90,29848,29850],{"className":26080,"code":29849,"language":26082,"meta":21,"style":21},"# 基于哪个镜像\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",[96,29851,29852,29857,29862,29867,29872,29877,29882,29887],{"__ignoreMap":21},[99,29853,29854],{"class":101,"line":102},[99,29855,29856],{},"# 基于哪个镜像\n",[99,29858,29859],{"class":101,"line":22},[99,29860,29861],{},"From java:8\n",[99,29863,29864],{"class":101,"line":1165},[99,29865,29866],{},"# 复制文件到容器\n",[99,29868,29869],{"class":101,"line":1180},[99,29870,29871],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[99,29873,29874],{"class":101,"line":1186},[99,29875,29876],{},"# 声明需要暴露的端口\n",[99,29878,29879],{"class":101,"line":1200},[99,29880,29881],{},"EXPOSE 8877\n",[99,29883,29884],{"class":101,"line":1206},[99,29885,29886],{},"# 配置容器启动后执行的命令\n",[99,29888,29889],{"class":101,"line":1297},[99,29890,29891],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29893,29894],{},"3、使用docker build命令构建镜像",[90,29896,29898],{"className":23810,"code":29897,"language":23812,"meta":21,"style":21},"docker build -t tulingmall-member:0.0.5 .\n",[96,29899,29900],{"__ignoreMap":21},[99,29901,29902,29904,29906,29908,29911],{"class":101,"line":102},[99,29903,26542],{"class":1949},[99,29905,28713],{"class":214},[99,29907,28716],{"class":158},[99,29909,29910],{"class":214}," tulingmall-member:0.0.5",[99,29912,28722],{"class":214},[14,29914,29915],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29917,29918],{},[1448,29919],{"alt":21,"src":29920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29922,29923],{},"4、启动镜像，加-d可在后台启动",[90,29925,29927],{"className":23810,"code":29926,"language":23812,"meta":21,"style":21},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[96,29928,29929],{"__ignoreMap":21},[99,29930,29931,29933,29935,29937,29939,29942],{"class":101,"line":102},[99,29932,26542],{"class":1949},[99,29934,27219],{"class":214},[99,29936,29804],{"class":158},[99,29938,29197],{"class":158},[99,29940,29941],{"class":214}," 8877:8877",[99,29943,29944],{"class":214}," tulingmall-member:0.0.5\n",[14,29946,29947],{},"加上JVM参数：",[90,29949,29951],{"className":23810,"code":29950,"language":23812,"meta":21,"style":21},"# --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",[96,29952,29953,29958,29973,29983,29992,29999],{"__ignoreMap":21},[99,29954,29955],{"class":101,"line":102},[99,29956,29957],{"class":168},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[99,29959,29960,29962,29964,29967,29969,29971],{"class":101,"line":22},[99,29961,26542],{"class":1949},[99,29963,27219],{"class":214},[99,29965,29966],{"class":158},"  -d",[99,29968,29197],{"class":158},[99,29970,29941],{"class":214},[99,29972,24667],{"class":158},[99,29974,29975,29977,29980],{"class":101,"line":1165},[99,29976,28109],{"class":109},[99,29978,29979],{"class":214},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[99,29981,29982],{"class":158},"  \\\n",[99,29984,29985,29987,29990],{"class":101,"line":1180},[99,29986,28109],{"class":109},[99,29988,29989],{"class":214},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[99,29991,29982],{"class":158},[99,29993,29994,29997],{"class":101,"line":1186},[99,29995,29996],{"class":109},"--cap-add=SYS_PTRACE  ",[99,29998,26164],{"class":158},[99,30000,30001],{"class":101,"line":1200},[99,30002,30003],{"class":109},"tulingmall-member:0.0.5\n",[14,30005,30006],{},"5、访问会员服务接口",[14,30008,30009],{},[1448,30010],{"alt":21,"src":30011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21985,30013,30015],{"id":30014},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30017,30018],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30020,30021,30022],{},"阿里云docker镜像仓库：",[348,30023,30024],{"href":30024,"rel":30025},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23853],[14,30027,30028],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30030,30031],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30033,30034],{},[1448,30035],{"alt":21,"src":30036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30038,30039],{},"要把镜像推送到镜像仓库",[90,30041,30043],{"className":23810,"code":30042,"language":23812,"meta":21,"style":21},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[96,30044,30045],{"__ignoreMap":21},[99,30046,30047,30049,30051,30053],{"class":101,"line":102},[99,30048,26542],{"class":1949},[99,30050,28878],{"class":214},[99,30052,29910],{"class":214},[99,30054,30055],{"class":214}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30057,30058],{},"最后将镜像推送到远程仓库",[90,30060,30062],{"className":23810,"code":30061,"language":23812,"meta":21,"style":21},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[96,30063,30064],{"__ignoreMap":21},[99,30065,30066,30068,30070],{"class":101,"line":102},[99,30067,26542],{"class":1949},[99,30069,28997],{"class":214},[99,30071,30055],{"class":214},[5113,30073,30074],{},"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":21,"searchDepth":22,"depth":22,"links":30076},[30077,30078,30079],{"id":28464,"depth":1165,"text":28465},{"id":28693,"depth":1165,"text":28694},{"id":29719,"depth":1165,"text":29720},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28456,"description":21},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30086,"title":30087,"body":30088,"description":21,"extension":24,"meta":30231,"navigation":26,"path":30232,"seo":30233,"stem":30234,"__hash__":30235},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30089,"toc":30229},[30090,30093,30098,30103,30106,30111,30116,30119,30124,30129,30132,30137,30140,30143,30146,30149,30152,30155,30175,30197,30200,30203,30223,30226],[10,30091,30087],{"id":30092},"_7vscode远程开发",[53,30094,30095],{},[56,30096,30097],{},"插件1：微软Docker工具",[14,30099,30100],{},[1448,30101],{"alt":21,"src":30102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30104,30105],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30107,30108],{},[1448,30109],{"alt":21,"src":30110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[53,30112,30113],{"start":22},[56,30114,30115],{},"插件2：微软Docker远程开发工具",[14,30117,30118],{},"下面这是远程开发的插件。",[14,30120,30121],{},[1448,30122],{"alt":21,"src":30123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30125,30126],{},[1448,30127],{"alt":21,"src":30128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30130,30131],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30133,30134],{},[1448,30135],{"alt":21,"src":30136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30138,30139],{},"安装完拓展之后，vscode进行链接：",[14,30141,30142],{},"1.按ctrl+shift+p",[14,30144,30145],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30147,30148],{},"3.选择目前运行的容器",[14,30150,30151],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30153,30154],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[90,30156,30158],{"className":23810,"code":30157,"language":23812,"meta":21,"style":21},"docker run -v 主机目录:容器目录 image-name\n",[96,30159,30160],{"__ignoreMap":21},[99,30161,30162,30164,30166,30169,30172],{"class":101,"line":102},[99,30163,26542],{"class":1949},[99,30165,27219],{"class":214},[99,30167,30168],{"class":158}," -v",[99,30170,30171],{"class":214}," 主机目录:容器目录",[99,30173,30174],{"class":214}," image-name\n",[90,30176,30178],{"className":23810,"code":30177,"language":23812,"meta":21,"style":21},"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",[96,30179,30180],{"__ignoreMap":21},[99,30181,30182,30184,30186,30189,30191,30194],{"class":101,"line":102},[99,30183,26542],{"class":1949},[99,30185,27219],{"class":214},[99,30187,30188],{"class":158}," -it",[99,30190,30168],{"class":158},[99,30192,30193],{"class":214}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[99,30195,30196],{"class":214}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30198,30199],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30201,30202],{},"查看挂载情况：",[90,30204,30206],{"className":23810,"code":30205,"language":23812,"meta":21,"style":21},"mount | grep -i project\n",[96,30207,30208],{"__ignoreMap":21},[99,30209,30210,30213,30215,30218,30220],{"class":101,"line":102},[99,30211,30212],{"class":1949},"mount",[99,30214,25098],{"class":105},[99,30216,30217],{"class":1949}," grep",[99,30219,26419],{"class":158},[99,30221,30222],{"class":214}," project\n",[14,30224,30225],{},"也可以通过ls来进行查看",[5113,30227,30228],{},"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":21,"searchDepth":22,"depth":22,"links":30230},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30087,"description":21},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30237,"title":30238,"body":30239,"description":23364,"extension":24,"meta":30243,"navigation":26,"path":30245,"seo":30246,"stem":30247,"__hash__":30248},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30240,"toc":30241},[],{"title":21,"searchDepth":22,"depth":22,"links":30242},[],{"category":30244},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30238,"description":23364},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30250,"title":30251,"body":30252,"description":23364,"extension":24,"meta":30256,"navigation":26,"path":30257,"seo":30258,"stem":30259,"__hash__":30260},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30253,"toc":30254},[],{"title":21,"searchDepth":22,"depth":22,"links":30255},[],{"category":30244},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30251,"description":23364},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30262,"title":30263,"body":30264,"description":23364,"extension":24,"meta":30557,"navigation":26,"path":30558,"seo":30559,"stem":30560,"__hash__":30561},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30265,"toc":30555},[30266,30269,30277,30292,30297,30348,30351,30357,30544,30549,30552],[10,30267,30263],{"id":30268},"_1验证深度学习环境",[14,30270,30271,30272],{},"关于环境的安装，看",[348,30273,30276],{"href":30274,"rel":30275},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23853],"Pytorch-->深度学习",[14,30278,30279,30280,30283,30284,30287,30288,30291],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[96,30281,30282],{},"pytorch-cuda=12.4"," 是一个“ ",[259,30285,30286],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[259,30289,30290],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30293,30294],{},[1448,30295],{"alt":21,"src":30296},"\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",[90,30298,30300],{"className":23810,"code":30299,"language":23812,"meta":21,"style":21},"# 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",[96,30301,30302,30307],{"__ignoreMap":21},[99,30303,30304],{"class":101,"line":102},[99,30305,30306],{"class":168},"# CUDA 12.4\n",[99,30308,30309,30312,30314,30317,30320,30323,30326,30329,30331,30334,30337,30340,30343,30345],{"class":101,"line":22},[99,30310,30311],{"class":1949},"conda",[99,30313,23822],{"class":214},[99,30315,30316],{"class":214}," pytorch==",[99,30318,30319],{"class":158},"2.5.1",[99,30321,30322],{"class":214}," torchvision==",[99,30324,30325],{"class":158},"0.20.1",[99,30327,30328],{"class":214}," torchaudio==",[99,30330,30319],{"class":158},[99,30332,30333],{"class":214}," pytorch-cuda=",[99,30335,30336],{"class":158},"12.4",[99,30338,30339],{"class":158}," -c",[99,30341,30342],{"class":214}," pytorch",[99,30344,30339],{"class":158},[99,30346,30347],{"class":214}," nvidia\n",[14,30349,30350],{},"）：",[14,30352,30353],{},[348,30354,30355],{"href":30355,"rel":30356},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23853],[90,30358,30362],{"className":30359,"code":30360,"language":30361,"meta":21,"style":21},"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",[96,30363,30364,30369,30377,30382,30392,30408,30413,30423,30460,30467,30479,30495,30500,30510,30522,30532],{"__ignoreMap":21},[99,30365,30366],{"class":101,"line":102},[99,30367,30368],{"class":168},"# 对深度学习环境进行测试\n",[99,30370,30371,30374],{"class":101,"line":22},[99,30372,30373],{"class":105},"import",[99,30375,30376],{"class":109}," torch\n",[99,30378,30379],{"class":101,"line":1165},[99,30380,30381],{"class":168},"# 查看cuda是否被激活\n",[99,30383,30384,30387,30389],{"class":101,"line":1180},[99,30385,30386],{"class":109},"flag",[99,30388,155],{"class":105},[99,30390,30391],{"class":109},"torch.cuda.is_available()\n",[99,30393,30394,30397,30399,30402,30405],{"class":101,"line":1186},[99,30395,30396],{"class":158},"print",[99,30398,110],{"class":109},[99,30400,30401],{"class":214},"\"cuda:\"",[99,30403,30404],{"class":109},", flag)   ",[99,30406,30407],{"class":168},"#返回true的话说明被激活\n",[99,30409,30410],{"class":101,"line":1200},[99,30411,30412],{"class":168},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[99,30414,30415,30418,30420],{"class":101,"line":1206},[99,30416,30417],{"class":109},"ngpu",[99,30419,155],{"class":105},[99,30421,30422],{"class":158},"1\n",[99,30424,30425,30428,30430,30433,30436,30438,30441,30444,30447,30449,30451,30453,30455,30458],{"class":101,"line":1297},[99,30426,30427],{"class":109},"device",[99,30429,155],{"class":105},[99,30431,30432],{"class":109},"torch.device(",[99,30434,30435],{"class":214},"\"cuda:0\"",[99,30437,1690],{"class":105},[99,30439,30440],{"class":109},"(torch.cuda.is_available() ",[99,30442,30443],{"class":105},"and",[99,30445,30446],{"class":109}," ngpu",[99,30448,1070],{"class":105},[99,30450,301],{"class":158},[99,30452,13701],{"class":109},[99,30454,1687],{"class":105},[99,30456,30457],{"class":214}," \"cpu\"",[99,30459,116],{"class":109},[99,30461,30462,30464],{"class":101,"line":1303},[99,30463,30396],{"class":158},[99,30465,30466],{"class":109},"(device)\n",[99,30468,30469,30471,30474,30476],{"class":101,"line":1315},[99,30470,30396],{"class":158},[99,30472,30473],{"class":109},"(torch.cuda.get_device_name(",[99,30475,301],{"class":158},[99,30477,30478],{"class":109},"))\n",[99,30480,30481,30483,30486,30488,30490,30492],{"class":101,"line":1598},[99,30482,30396],{"class":158},[99,30484,30485],{"class":109},"(torch.rand(",[99,30487,181],{"class":158},[99,30489,488],{"class":109},[99,30491,181],{"class":158},[99,30493,30494],{"class":109},").cuda())\n",[99,30496,30497],{"class":101,"line":1603},[99,30498,30499],{"class":168},"# 查看cuda和cudnn的版本\n",[99,30501,30502,30505,30507],{"class":101,"line":1609},[99,30503,30504],{"class":109},"cuda_version",[99,30506,155],{"class":105},[99,30508,30509],{"class":109},"torch.version.cuda\n",[99,30511,30512,30514,30516,30519],{"class":101,"line":1614},[99,30513,30396],{"class":158},[99,30515,110],{"class":109},[99,30517,30518],{"class":214},"\"cuda version\"",[99,30520,30521],{"class":109},",cuda_version)\n",[99,30523,30524,30527,30529],{"class":101,"line":1628},[99,30525,30526],{"class":109},"cudnn_version",[99,30528,155],{"class":105},[99,30530,30531],{"class":109},"torch.backends.cudnn.version()\n",[99,30533,30534,30536,30538,30541],{"class":101,"line":1633},[99,30535,30396],{"class":158},[99,30537,110],{"class":109},[99,30539,30540],{"class":214},"\"cudnn version\"",[99,30542,30543],{"class":109},",cudnn_version)\n",[14,30545,30546],{},[1448,30547],{"alt":21,"src":30548},"\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",[14,30550,30551],{},"cuda:0 指的是一块显卡",[5113,30553,30554],{},"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":21,"searchDepth":22,"depth":22,"links":30556},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30263,"description":23364},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30563,"title":30564,"body":30565,"description":23364,"extension":24,"meta":50369,"navigation":26,"path":50370,"seo":50371,"stem":50372,"__hash__":50373},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30566,"toc":50363},[30567,30570,30574,30578,30581,30586,30591,30594,30599,30604,30609,30612,30616,30621,30625,30630,30633,30638,30641,30644,30647,30650,30655,30658,30663,30668,30673,30678,30681,30685,30688,30693,31297,31302,31305,31310,31313,31316,31780,31783,31786,31789,31792,33843,33846,33851,33856,34651,34654,34659,35437,35441,37100,37104,37818,37822,37826,37831,37836,37841,37844,37849,37854,37859,37864,37869,37873,37878,39160,39165,39168,39171,39174,39329,39332,39335,40551,40556,41251,41255,41259,41264,41269,41272,41277,41282,41287,41292,41297,41302,41307,41312,41317,41322,41327,41332,41337,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41426,41430,41433,42911,42915,44562,44566,45260,45264,45267,45270,45814,45817,45821,45824,47221,47225,47228,47806,49593,49597,49600,50360],[10,30568,30564],{"id":30569},"_2经典神经网络",[70,30571,30573],{"id":30572},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21985,30575,30577],{"id":30576},"_211原理介绍","2.1.1.原理介绍",[14,30579,30580],{},"LeNet-5",[53,30582,30583],{},[56,30584,30585],{},"原理",[14,30587,30588],{},[1448,30589],{"alt":21,"src":30590},"\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",[14,30592,30593],{},"B是batch批次；C是channel通道",[53,30595,30596],{"start":22},[56,30597,30598],{},"网络参数详细",[14,30600,30601],{},[1448,30602],{"alt":21,"src":30603},"\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",[14,30605,30606],{},[1448,30607],{"alt":21,"src":30608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30610,30611],{},"AlexNet",[53,30613,30614],{},[56,30615,30585],{},[14,30617,30618],{},[1448,30619],{"alt":21,"src":30620},"\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",[53,30622,30623],{"start":22},[56,30624,30598],{},[14,30626,30627],{},[1448,30628],{"alt":21,"src":30629},"\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",[14,30631,30632],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30634,30635],{},[1448,30636],{"alt":21,"src":30637},"\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",[14,30639,30640],{},"数据处理中的图像增强操作:",[14,30642,30643],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30645,30646],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30648,30649],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30651,30652],{},[1448,30653],{"alt":21,"src":30654},"\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",[14,30656,30657],{},"提升网络精确度的方法：LRN正则化",[14,30659,30660],{},[1448,30661],{"alt":21,"src":30662},"\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",[14,30664,30665],{},[1448,30666],{"alt":21,"src":30667},"\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",[53,30669,30670],{"start":1165},[56,30671,30672],{},"AlexNet的总结",[14,30674,30675],{},[1448,30676],{"alt":21,"src":30677},"\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",[14,30679,30680],{},"比LeNet模型要深一丢丢",[21985,30682,30684],{"id":30683},"_212代码实现","2.1.2.代码实现",[14,30686,30687],{},"（1）LeNet",[53,30689,30690],{},[56,30691,30692],{},"模型搭建",[90,30694,30696],{"className":30359,"code":30695,"language":30361,"meta":21,"style":21},"# 导入库\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",[96,30697,30698,30703,30709,30714,30727,30732,30744,30748,30768,30773,30778,30789,30794,30813,30817,30822,30871,30883,30888,30917,30952,30979,30984,30996,31001,31021,31040,31059,31063,31068,31078,31095,31106,31121,31132,31143,31158,31173,31184,31191,31195,31209,31214,31237,31242,31247,31252,31256,31261,31266,31276],{"__ignoreMap":21},[99,30699,30700],{"class":101,"line":102},[99,30701,30702],{"class":168},"# 导入库\n",[99,30704,30705,30707],{"class":101,"line":22},[99,30706,30373],{"class":105},[99,30708,30376],{"class":109},[99,30710,30711],{"class":101,"line":1165},[99,30712,30713],{"class":168},"# 导入神经网络层\n",[99,30715,30716,30719,30722,30724],{"class":101,"line":1180},[99,30717,30718],{"class":105},"from",[99,30720,30721],{"class":109}," torch ",[99,30723,30373],{"class":105},[99,30725,30726],{"class":109}," nn\n",[99,30728,30729],{"class":101,"line":1186},[99,30730,30731],{"class":168},"# 导入展示神经网络参数的包\n",[99,30733,30734,30736,30739,30741],{"class":101,"line":1200},[99,30735,30718],{"class":105},[99,30737,30738],{"class":109}," torchsummary ",[99,30740,30373],{"class":105},[99,30742,30743],{"class":109}," summary\n",[99,30745,30746],{"class":101,"line":1206},[99,30747,2386],{"emptyLinePlaceholder":26},[99,30749,30750,30752,30755,30757,30760,30762,30765],{"class":101,"line":1297},[99,30751,14681],{"class":105},[99,30753,30754],{"class":1949}," LeNet",[99,30756,110],{"class":109},[99,30758,30759],{"class":1949},"nn",[99,30761,668],{"class":109},[99,30763,30764],{"class":1949},"Module",[99,30766,30767],{"class":109},"):\n",[99,30769,30770],{"class":101,"line":1303},[99,30771,30772],{"class":168},"    # 模型初始化:\n",[99,30774,30775],{"class":101,"line":1315},[99,30776,30777],{"class":168},"    # 定义一些网络层和激活函数\n",[99,30779,30780,30783,30786],{"class":101,"line":1598},[99,30781,30782],{"class":105},"    def",[99,30784,30785],{"class":158}," __init__",[99,30787,30788],{"class":109},"(self):\n",[99,30790,30791],{"class":101,"line":1603},[99,30792,30793],{"class":168},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[99,30795,30796,30799,30802,30805,30808,30811],{"class":101,"line":1609},[99,30797,30798],{"class":158},"        super",[99,30800,30801],{"class":109},"(LeNet,",[99,30803,30804],{"class":158},"self",[99,30806,30807],{"class":109},").",[99,30809,30810],{"class":158},"__init__",[99,30812,1962],{"class":109},[99,30814,30815],{"class":101,"line":1614},[99,30816,2386],{"emptyLinePlaceholder":26},[99,30818,30819],{"class":101,"line":1628},[99,30820,30821],{"class":168},"        # 定义网络层\n",[99,30823,30824,30827,30830,30832,30835,30838,30840,30842,30844,30847,30849,30851,30853,30856,30858,30860,30862,30865,30867,30869],{"class":101,"line":1633},[99,30825,30826],{"class":158},"        self",[99,30828,30829],{"class":109},".c1",[99,30831,155],{"class":105},[99,30833,30834],{"class":109},"nn.Conv2d(",[99,30836,30837],{"class":5203},"in_channels",[99,30839,155],{"class":105},[99,30841,327],{"class":158},[99,30843,488],{"class":109},[99,30845,30846],{"class":5203},"out_channels",[99,30848,155],{"class":105},[99,30850,454],{"class":158},[99,30852,488],{"class":109},[99,30854,30855],{"class":5203},"kernel_size",[99,30857,155],{"class":105},[99,30859,429],{"class":158},[99,30861,488],{"class":109},[99,30863,30864],{"class":5203},"padding",[99,30866,155],{"class":105},[99,30868,187],{"class":158},[99,30870,116],{"class":109},[99,30872,30873,30875,30878,30880],{"class":101,"line":1639},[99,30874,30826],{"class":158},[99,30876,30877],{"class":109},".sig",[99,30879,155],{"class":105},[99,30881,30882],{"class":109},"nn.Sigmoid()\n",[99,30884,30885],{"class":101,"line":1660},[99,30886,30887],{"class":168},"        # 定义池化\n",[99,30889,30890,30892,30895,30897,30900,30902,30904,30906,30908,30911,30913,30915],{"class":101,"line":1665},[99,30891,30826],{"class":158},[99,30893,30894],{"class":109},".s2",[99,30896,155],{"class":105},[99,30898,30899],{"class":109},"nn.AvgPool2d(",[99,30901,30855],{"class":5203},[99,30903,155],{"class":105},[99,30905,187],{"class":158},[99,30907,488],{"class":109},[99,30909,30910],{"class":5203},"stride",[99,30912,155],{"class":105},[99,30914,187],{"class":158},[99,30916,116],{"class":109},[99,30918,30919,30921,30924,30926,30928,30930,30932,30934,30936,30938,30940,30942,30944,30946,30948,30950],{"class":101,"line":1679},[99,30920,30826],{"class":158},[99,30922,30923],{"class":109},".c3",[99,30925,155],{"class":105},[99,30927,30834],{"class":109},[99,30929,30837],{"class":5203},[99,30931,155],{"class":105},[99,30933,454],{"class":158},[99,30935,488],{"class":109},[99,30937,30846],{"class":5203},[99,30939,155],{"class":105},[99,30941,711],{"class":158},[99,30943,488],{"class":109},[99,30945,30855],{"class":5203},[99,30947,155],{"class":105},[99,30949,429],{"class":158},[99,30951,116],{"class":109},[99,30953,30954,30956,30959,30961,30963,30965,30967,30969,30971,30973,30975,30977],{"class":101,"line":1684},[99,30955,30826],{"class":158},[99,30957,30958],{"class":109},".s4",[99,30960,155],{"class":105},[99,30962,30899],{"class":109},[99,30964,30855],{"class":5203},[99,30966,155],{"class":105},[99,30968,187],{"class":158},[99,30970,488],{"class":109},[99,30972,30910],{"class":5203},[99,30974,155],{"class":105},[99,30976,187],{"class":158},[99,30978,116],{"class":109},[99,30980,30981],{"class":101,"line":1713},[99,30982,30983],{"class":168},"        # 定义平展层\n",[99,30985,30986,30988,30991,30993],{"class":101,"line":1718},[99,30987,30826],{"class":158},[99,30989,30990],{"class":109},".flatten",[99,30992,155],{"class":105},[99,30994,30995],{"class":109},"nn.Flatten()\n",[99,30997,30998],{"class":101,"line":1735},[99,30999,31000],{"class":168},"        # 定义全连接层\n",[99,31002,31003,31005,31008,31010,31013,31015,31017,31019],{"class":101,"line":1740},[99,31004,30826],{"class":158},[99,31006,31007],{"class":109},".f5",[99,31009,155],{"class":105},[99,31011,31012],{"class":109},"nn.Linear(",[99,31014,3973],{"class":158},[99,31016,488],{"class":109},[99,31018,927],{"class":158},[99,31020,116],{"class":109},[99,31022,31023,31025,31028,31030,31032,31034,31036,31038],{"class":101,"line":1745},[99,31024,30826],{"class":158},[99,31026,31027],{"class":109},".f6",[99,31029,155],{"class":105},[99,31031,31012],{"class":109},[99,31033,927],{"class":158},[99,31035,488],{"class":109},[99,31037,821],{"class":158},[99,31039,116],{"class":109},[99,31041,31042,31044,31047,31049,31051,31053,31055,31057],{"class":101,"line":1750},[99,31043,30826],{"class":158},[99,31045,31046],{"class":109},".f7",[99,31048,155],{"class":105},[99,31050,31012],{"class":109},[99,31052,821],{"class":158},[99,31054,488],{"class":109},[99,31056,556],{"class":158},[99,31058,116],{"class":109},[99,31060,31061],{"class":101,"line":1764},[99,31062,2386],{"emptyLinePlaceholder":26},[99,31064,31065],{"class":101,"line":1769},[99,31066,31067],{"class":168},"    # 写工具->写前向传播\n",[99,31069,31070,31072,31075],{"class":101,"line":2563},[99,31071,30782],{"class":105},[99,31073,31074],{"class":1949}," forward",[99,31076,31077],{"class":109},"(self,x):\n",[99,31079,31080,31083,31085,31087,31090,31092],{"class":101,"line":2577},[99,31081,31082],{"class":109},"        x",[99,31084,155],{"class":105},[99,31086,30804],{"class":158},[99,31088,31089],{"class":109},".sig(",[99,31091,30804],{"class":158},[99,31093,31094],{"class":109},".c1(x))\n",[99,31096,31097,31099,31101,31103],{"class":101,"line":2585},[99,31098,31082],{"class":109},[99,31100,155],{"class":105},[99,31102,30804],{"class":158},[99,31104,31105],{"class":109},".s2(x)\n",[99,31107,31108,31110,31112,31114,31116,31118],{"class":101,"line":2590},[99,31109,31082],{"class":109},[99,31111,155],{"class":105},[99,31113,30804],{"class":158},[99,31115,31089],{"class":109},[99,31117,30804],{"class":158},[99,31119,31120],{"class":109},".c3(x))\n",[99,31122,31123,31125,31127,31129],{"class":101,"line":2596},[99,31124,31082],{"class":109},[99,31126,155],{"class":105},[99,31128,30804],{"class":158},[99,31130,31131],{"class":109},".s4(x)\n",[99,31133,31134,31136,31138,31140],{"class":101,"line":2602},[99,31135,31082],{"class":109},[99,31137,155],{"class":105},[99,31139,30804],{"class":158},[99,31141,31142],{"class":109},".flatten(x)\n",[99,31144,31145,31147,31149,31151,31153,31155],{"class":101,"line":2607},[99,31146,31082],{"class":109},[99,31148,155],{"class":105},[99,31150,30804],{"class":158},[99,31152,31089],{"class":109},[99,31154,30804],{"class":158},[99,31156,31157],{"class":109},".f5(x))\n",[99,31159,31160,31162,31164,31166,31168,31170],{"class":101,"line":7935},[99,31161,31082],{"class":109},[99,31163,155],{"class":105},[99,31165,30804],{"class":158},[99,31167,31089],{"class":109},[99,31169,30804],{"class":158},[99,31171,31172],{"class":109},".f6(x))\n",[99,31174,31175,31177,31179,31181],{"class":101,"line":7959},[99,31176,31082],{"class":109},[99,31178,155],{"class":105},[99,31180,30804],{"class":158},[99,31182,31183],{"class":109},".f7(x)\n",[99,31185,31186,31188],{"class":101,"line":7964},[99,31187,14739],{"class":105},[99,31189,31190],{"class":109}," x\n",[99,31192,31193],{"class":101,"line":7970},[99,31194,2386],{"emptyLinePlaceholder":26},[99,31196,31197,31199,31202,31204,31207],{"class":101,"line":7997},[99,31198,1517],{"class":105},[99,31200,31201],{"class":158}," __name__",[99,31203,2935],{"class":105},[99,31205,31206],{"class":214},"\"__main__\"",[99,31208,3725],{"class":109},[99,31210,31211],{"class":101,"line":8002},[99,31212,31213],{"class":168},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[99,31215,31216,31219,31221,31223,31226,31228,31231,31233,31235],{"class":101,"line":8008},[99,31217,31218],{"class":109},"    device",[99,31220,155],{"class":105},[99,31222,30432],{"class":109},[99,31224,31225],{"class":214},"\"cuda\"",[99,31227,1690],{"class":105},[99,31229,31230],{"class":109}," torch.cuda.is_available() ",[99,31232,1687],{"class":105},[99,31234,30457],{"class":214},[99,31236,116],{"class":109},[99,31238,31239],{"class":101,"line":8020},[99,31240,31241],{"class":168},"    # 如果就是想指定用cpu用下方代码:\n",[99,31243,31244],{"class":101,"line":8032},[99,31245,31246],{"class":168},"    # device=\"cpu\"\n",[99,31248,31249],{"class":101,"line":8044},[99,31250,31251],{"class":168},"    # print(device)\n",[99,31253,31254],{"class":101,"line":9703},[99,31255,2386],{"emptyLinePlaceholder":26},[99,31257,31258],{"class":101,"line":9728},[99,31259,31260],{"class":168},"    # 实例化模型\n",[99,31262,31263],{"class":101,"line":9751},[99,31264,31265],{"class":168},"    # 将模型放到设备中去运行\n",[99,31267,31268,31271,31273],{"class":101,"line":9775},[99,31269,31270],{"class":109},"    model",[99,31272,155],{"class":105},[99,31274,31275],{"class":109},"LeNet().to(device)\n",[99,31277,31278,31281,31284,31286,31288,31290,31292,31294],{"class":101,"line":9780},[99,31279,31280],{"class":158},"    print",[99,31282,31283],{"class":109},"(summary(model,(",[99,31285,327],{"class":158},[99,31287,488],{"class":109},[99,31289,1011],{"class":158},[99,31291,488],{"class":109},[99,31293,1011],{"class":158},[99,31295,31296],{"class":109},")))\n",[14,31298,31299],{},[1448,31300],{"alt":21,"src":31301},"\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",[14,31303,31304],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[53,31306,31307],{"start":22},[56,31308,31309],{},"训练",[14,31311,31312],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31314,31315],{},"在训练之前可以将数据展示看一下",[90,31317,31319],{"className":30359,"code":31318,"language":30361,"meta":21,"style":21},"# 建立画图的函数，用于展示数据\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",[96,31320,31321,31326,31331,31343,31355,31368,31373,31385,31390,31402,31407,31419,31423,31427,31448,31460,31465,31486,31497,31501,31506,31524,31535,31540,31551,31556,31567,31571,31576,31591,31604,31609,31614,31627,31640,31653,31658,31662,31667,31687,31704,31724,31737,31750,31760,31775],{"__ignoreMap":21},[99,31322,31323],{"class":101,"line":102},[99,31324,31325],{"class":168},"# 建立画图的函数，用于展示数据\n",[99,31327,31328],{"class":101,"line":22},[99,31329,31330],{"class":168},"# torchvision中包含很多内置的数据集\n",[99,31332,31333,31335,31338,31340],{"class":101,"line":1165},[99,31334,30718],{"class":105},[99,31336,31337],{"class":109}," sklearn.externals.array_api_compat.torch ",[99,31339,30373],{"class":105},[99,31341,31342],{"class":109}," squeeze\n",[99,31344,31345,31347,31350,31352],{"class":101,"line":1180},[99,31346,30718],{"class":105},[99,31348,31349],{"class":109}," torchvision.datasets ",[99,31351,30373],{"class":105},[99,31353,31354],{"class":109}," FashionMNIST\n",[99,31356,31357,31359,31362,31365],{"class":101,"line":1186},[99,31358,30373],{"class":105},[99,31360,31361],{"class":109}," numpy ",[99,31363,31364],{"class":105},"as",[99,31366,31367],{"class":109}," np\n",[99,31369,31370],{"class":101,"line":1200},[99,31371,31372],{"class":168},"# 引入处理数据集的包\n",[99,31374,31375,31377,31380,31382],{"class":101,"line":1206},[99,31376,30718],{"class":105},[99,31378,31379],{"class":109}," torchvision ",[99,31381,30373],{"class":105},[99,31383,31384],{"class":109}," transforms\n",[99,31386,31387],{"class":101,"line":1297},[99,31388,31389],{"class":168},"# 从torch库中引入数据处理的包\n",[99,31391,31392,31394,31397,31399],{"class":101,"line":1303},[99,31393,30373],{"class":105},[99,31395,31396],{"class":109}," torch.utils.data ",[99,31398,31364],{"class":105},[99,31400,31401],{"class":109}," Data\n",[99,31403,31404],{"class":101,"line":1315},[99,31405,31406],{"class":168},"# 导入画图的库\n",[99,31408,31409,31411,31414,31416],{"class":101,"line":1598},[99,31410,30373],{"class":105},[99,31412,31413],{"class":109}," matplotlib.pyplot ",[99,31415,31364],{"class":105},[99,31417,31418],{"class":109}," plt\n",[99,31420,31421],{"class":101,"line":1603},[99,31422,2386],{"emptyLinePlaceholder":26},[99,31424,31425],{"class":101,"line":1609},[99,31426,2386],{"emptyLinePlaceholder":26},[99,31428,31429,31432,31434,31437,31440,31442,31445],{"class":101,"line":1614},[99,31430,31431],{"class":109},"train_data",[99,31433,155],{"class":105},[99,31435,31436],{"class":109},"FashionMNIST(",[99,31438,31439],{"class":5203},"root",[99,31441,155],{"class":105},[99,31443,31444],{"class":214},"'.\u002Fdata'",[99,31446,31447],{"class":109},",\n",[99,31449,31450,31453,31455,31458],{"class":101,"line":1628},[99,31451,31452],{"class":5203},"                        train",[99,31454,155],{"class":105},[99,31456,31457],{"class":158},"True",[99,31459,31447],{"class":109},[99,31461,31462],{"class":101,"line":1633},[99,31463,31464],{"class":168},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[99,31466,31467,31470,31472,31475,31478,31480,31483],{"class":101,"line":1639},[99,31468,31469],{"class":5203},"                        transform",[99,31471,155],{"class":105},[99,31473,31474],{"class":109},"transforms.Compose([transforms.Resize(",[99,31476,31477],{"class":5203},"size",[99,31479,155],{"class":105},[99,31481,31482],{"class":158},"224",[99,31484,31485],{"class":109},"),transforms.ToTensor()]),\n",[99,31487,31488,31491,31493,31495],{"class":101,"line":1660},[99,31489,31490],{"class":5203},"                        download",[99,31492,155],{"class":105},[99,31494,31457],{"class":158},[99,31496,116],{"class":109},[99,31498,31499],{"class":101,"line":1665},[99,31500,2386],{"emptyLinePlaceholder":26},[99,31502,31503],{"class":101,"line":1679},[99,31504,31505],{"class":168},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[99,31507,31508,31511,31513,31516,31519,31521],{"class":101,"line":1684},[99,31509,31510],{"class":109},"train_loader",[99,31512,155],{"class":105},[99,31514,31515],{"class":109},"Data.DataLoader(",[99,31517,31518],{"class":5203},"dataset",[99,31520,155],{"class":105},[99,31522,31523],{"class":109},"train_data,\n",[99,31525,31526,31529,31531,31533],{"class":101,"line":1713},[99,31527,31528],{"class":5203},"                             batch_size",[99,31530,155],{"class":105},[99,31532,313],{"class":158},[99,31534,31447],{"class":109},[99,31536,31537],{"class":101,"line":1718},[99,31538,31539],{"class":168},"                             # 数据是否打乱\n",[99,31541,31542,31545,31547,31549],{"class":101,"line":1735},[99,31543,31544],{"class":5203},"                             shuffle",[99,31546,155],{"class":105},[99,31548,31457],{"class":158},[99,31550,31447],{"class":109},[99,31552,31553],{"class":101,"line":1740},[99,31554,31555],{"class":168},"                             # 规定加载数据的进程\n",[99,31557,31558,31561,31563,31565],{"class":101,"line":1745},[99,31559,31560],{"class":5203},"                             num_workers",[99,31562,155],{"class":105},[99,31564,301],{"class":158},[99,31566,116],{"class":109},[99,31568,31569],{"class":101,"line":1750},[99,31570,2386],{"emptyLinePlaceholder":26},[99,31572,31573],{"class":101,"line":1764},[99,31574,31575],{"class":168},"# 获得一个batch的数据\n",[99,31577,31578,31580,31583,31585,31588],{"class":101,"line":1769},[99,31579,3011],{"class":105},[99,31581,31582],{"class":109}," step,(b_x,b_y) ",[99,31584,26032],{"class":105},[99,31586,31587],{"class":158}," enumerate",[99,31589,31590],{"class":109},"(train_loader):\n",[99,31592,31593,31595,31598,31600,31602],{"class":101,"line":2563},[99,31594,3087],{"class":105},[99,31596,31597],{"class":109}," step ",[99,31599,1070],{"class":105},[99,31601,4079],{"class":158},[99,31603,3725],{"class":109},[99,31605,31606],{"class":101,"line":2577},[99,31607,31608],{"class":105},"        break\n",[99,31610,31611],{"class":101,"line":2585},[99,31612,31613],{"class":168},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[99,31615,31616,31619,31621,31624],{"class":101,"line":2590},[99,31617,31618],{"class":109},"batch_x",[99,31620,155],{"class":105},[99,31622,31623],{"class":109},"b_x.squeeze().numpy()  ",[99,31625,31626],{"class":168},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[99,31628,31629,31632,31634,31637],{"class":101,"line":2596},[99,31630,31631],{"class":109},"batch_y",[99,31633,155],{"class":105},[99,31635,31636],{"class":109},"b_y.numpy()   ",[99,31638,31639],{"class":168},"#将张量转换成功numpy数组\n",[99,31641,31642,31645,31647,31650],{"class":101,"line":2602},[99,31643,31644],{"class":109},"class_label",[99,31646,155],{"class":105},[99,31648,31649],{"class":109},"train_data.classes  ",[99,31651,31652],{"class":168},"#训练集标签\n",[99,31654,31655],{"class":101,"line":2607},[99,31656,31657],{"class":168},"# print(class_label)\n",[99,31659,31660],{"class":101,"line":7935},[99,31661,2386],{"emptyLinePlaceholder":26},[99,31663,31664],{"class":101,"line":7959},[99,31665,31666],{"class":168},"# 可视化一个batch的图像\n",[99,31668,31669,31672,31675,31677,31679,31681,31683,31685],{"class":101,"line":7964},[99,31670,31671],{"class":109},"plt.figure(",[99,31673,31674],{"class":5203},"figsize",[99,31676,155],{"class":105},[99,31678,110],{"class":109},[99,31680,608],{"class":158},[99,31682,488],{"class":109},[99,31684,429],{"class":158},[99,31686,30478],{"class":109},[99,31688,31689,31691,31694,31696,31699,31701],{"class":101,"line":7970},[99,31690,3011],{"class":105},[99,31692,31693],{"class":109}," ii ",[99,31695,26032],{"class":105},[99,31697,31698],{"class":109}," np.arange(",[99,31700,7345],{"class":158},[99,31702,31703],{"class":109},"(batch_y)):\n",[99,31705,31706,31709,31711,31713,31715,31718,31720,31722],{"class":101,"line":7997},[99,31707,31708],{"class":109},"    plt.subplot(",[99,31710,403],{"class":158},[99,31712,488],{"class":109},[99,31714,711],{"class":158},[99,31716,31717],{"class":109},",ii ",[99,31719,591],{"class":105},[99,31721,25107],{"class":158},[99,31723,116],{"class":109},[99,31725,31726,31729,31732,31734],{"class":101,"line":8002},[99,31727,31728],{"class":109},"    plt.imshow(batch_x[ii,:,:],",[99,31730,31731],{"class":5203},"cmap",[99,31733,155],{"class":105},[99,31735,31736],{"class":109},"plt.cm.gray)\n",[99,31738,31739,31742,31744,31746,31748],{"class":101,"line":8008},[99,31740,31741],{"class":109},"    plt.title(class_label[batch_y[ii]],",[99,31743,31477],{"class":5203},[99,31745,155],{"class":105},[99,31747,556],{"class":158},[99,31749,116],{"class":109},[99,31751,31752,31755,31758],{"class":101,"line":8020},[99,31753,31754],{"class":109},"    plt.axis(",[99,31756,31757],{"class":214},"\"off\"",[99,31759,116],{"class":109},[99,31761,31762,31765,31768,31770,31773],{"class":101,"line":8032},[99,31763,31764],{"class":109},"    plt.subplots_adjust(",[99,31766,31767],{"class":5203},"wspace",[99,31769,155],{"class":105},[99,31771,31772],{"class":158},"0.05",[99,31774,116],{"class":109},[99,31776,31777],{"class":101,"line":8044},[99,31778,31779],{"class":109},"plt.show()\n",[14,31781,31782],{},"用matplotlib进行展示的过程可以后续再补",[14,31784,31785],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31787,31788],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31790,31791],{},"模型训练：",[90,31793,31795],{"className":30359,"code":31794,"language":30361,"meta":21,"style":21},"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",[96,31796,31797,31804,31811,31815,31827,31833,31844,31854,31864,31874,31884,31889,31901,31911,31915,31919,31924,31935,31948,31959,31976,31987,32026,32042,32054,32065,32070,32081,32097,32108,32119,32130,32137,32141,32146,32151,32155,32160,32170,32191,32195,32199,32204,32209,32214,32234,32238,32243,32253,32257,32262,32271,32276,32281,32286,32296,32300,32304,32309,32314,32324,32329,32339,32344,32353,32358,32367,32372,32381,32385,32390,32400,32404,32408,32413,32428,32456,32471,32475,32480,32485,32494,32499,32508,32513,32522,32527,32536,32541,32550,32555,32564,32569,32582,32587,32597,32602,32612,32618,32624,32630,32636,32647,32653,32673,32679,32690,32696,32702,32708,32714,32720,32726,32732,32752,32758,32774,32780,32794,32800,32815,32821,32830,32836,32845,32851,32857,32866,32872,32883,32889,32908,32914,32925,32931,32951,32967,32973,32987,32993,32999,33010,33016,33022,33032,33038,33049,33055,33065,33070,33076,33125,33172,33177,33183,33202,33208,33228,33234,33240,33250,33255,33261,33277,33322,33328,33334,33340,33351,33357,33363,33369,33387,33401,33410,33419,33428,33437,33443,33449,33457,33462,33468,33479,33485,33505,33511,33517,33523,33540,33546,33552,33558,33564,33570,33597,33621,33627,33633,33639,33650,33661,33667,33684,33707,33730,33736,33741,33750,33760,33766,33771,33777,33790,33796,33807,33818,33837],{"__ignoreMap":21},[99,31798,31799,31801],{"class":101,"line":102},[99,31800,30373],{"class":105},[99,31802,31803],{"class":109}," copy\n",[99,31805,31806,31808],{"class":101,"line":22},[99,31807,30373],{"class":105},[99,31809,31810],{"class":109}," time\n",[99,31812,31813],{"class":101,"line":1165},[99,31814,2386],{"emptyLinePlaceholder":26},[99,31816,31817,31819,31822,31824],{"class":101,"line":1180},[99,31818,30373],{"class":105},[99,31820,31821],{"class":109}," pandas ",[99,31823,31364],{"class":105},[99,31825,31826],{"class":109}," pd\n",[99,31828,31829,31831],{"class":101,"line":1186},[99,31830,30373],{"class":105},[99,31832,30376],{"class":109},[99,31834,31835,31837,31839,31841],{"class":101,"line":1200},[99,31836,30718],{"class":105},[99,31838,31396],{"class":109},[99,31840,30373],{"class":105},[99,31842,31843],{"class":109}," Dataset\n",[99,31845,31846,31848,31850,31852],{"class":101,"line":1206},[99,31847,30718],{"class":105},[99,31849,31349],{"class":109},[99,31851,30373],{"class":105},[99,31853,31354],{"class":109},[99,31855,31856,31858,31860,31862],{"class":101,"line":1297},[99,31857,30718],{"class":105},[99,31859,31379],{"class":109},[99,31861,30373],{"class":105},[99,31863,31384],{"class":109},[99,31865,31866,31868,31870,31872],{"class":101,"line":1303},[99,31867,30373],{"class":105},[99,31869,31396],{"class":109},[99,31871,31364],{"class":105},[99,31873,31401],{"class":109},[99,31875,31876,31878,31880,31882],{"class":101,"line":1315},[99,31877,30373],{"class":105},[99,31879,31413],{"class":109},[99,31881,31364],{"class":105},[99,31883,31418],{"class":109},[99,31885,31886],{"class":101,"line":1598},[99,31887,31888],{"class":168},"# 导入模型\n",[99,31890,31891,31893,31896,31898],{"class":101,"line":1603},[99,31892,30718],{"class":105},[99,31894,31895],{"class":109}," model ",[99,31897,30373],{"class":105},[99,31899,31900],{"class":109}," LeNet\n",[99,31902,31903,31905,31907,31909],{"class":101,"line":1609},[99,31904,30718],{"class":105},[99,31906,30721],{"class":109},[99,31908,30373],{"class":105},[99,31910,30726],{"class":109},[99,31912,31913],{"class":101,"line":1614},[99,31914,2386],{"emptyLinePlaceholder":26},[99,31916,31917],{"class":101,"line":1628},[99,31918,2386],{"emptyLinePlaceholder":26},[99,31920,31921],{"class":101,"line":1633},[99,31922,31923],{"class":168},"# 处理训练集与验证集函数--->划分数据集\n",[99,31925,31926,31929,31932],{"class":101,"line":1639},[99,31927,31928],{"class":105},"def",[99,31930,31931],{"class":1949}," train_val_data_process",[99,31933,31934],{"class":109},"():\n",[99,31936,31937,31940,31942,31944,31946],{"class":101,"line":1660},[99,31938,31939],{"class":109},"    train_data",[99,31941,155],{"class":105},[99,31943,31436],{"class":109},[99,31945,31444],{"class":214},[99,31947,31447],{"class":109},[99,31949,31950,31953,31955,31957],{"class":101,"line":1665},[99,31951,31952],{"class":5203},"                            train",[99,31954,155],{"class":105},[99,31956,31457],{"class":158},[99,31958,31447],{"class":109},[99,31960,31961,31964,31966,31968,31970,31972,31974],{"class":101,"line":1679},[99,31962,31963],{"class":5203},"                            transform",[99,31965,155],{"class":105},[99,31967,31474],{"class":109},[99,31969,31477],{"class":5203},[99,31971,155],{"class":105},[99,31973,1011],{"class":158},[99,31975,31485],{"class":109},[99,31977,31978,31981,31983,31985],{"class":101,"line":1684},[99,31979,31980],{"class":5203},"                            download",[99,31982,155],{"class":105},[99,31984,31457],{"class":158},[99,31986,116],{"class":109},[99,31988,31989,31992,31994,31997,32000,32002,32005,32007,32009,32012,32014,32016,32019,32021,32023],{"class":101,"line":1713},[99,31990,31991],{"class":109},"    train_data,val_data",[99,31993,155],{"class":105},[99,31995,31996],{"class":109},"Data.random_split(train_data,[",[99,31998,31999],{"class":158},"round",[99,32001,110],{"class":109},[99,32003,32004],{"class":158},"0.8",[99,32006,565],{"class":105},[99,32008,7345],{"class":158},[99,32010,32011],{"class":109},"(train_data)),",[99,32013,31999],{"class":158},[99,32015,110],{"class":109},[99,32017,32018],{"class":158},"0.2",[99,32020,565],{"class":105},[99,32022,7345],{"class":158},[99,32024,32025],{"class":109},"(train_data))])\n",[99,32027,32028,32031,32033,32036,32038,32040],{"class":101,"line":1718},[99,32029,32030],{"class":109},"    train_dataloader ",[99,32032,155],{"class":105},[99,32034,32035],{"class":109}," Data.DataLoader(",[99,32037,31518],{"class":5203},[99,32039,155],{"class":105},[99,32041,31523],{"class":109},[99,32043,32044,32047,32049,32052],{"class":101,"line":1735},[99,32045,32046],{"class":5203},"                                       batch_size",[99,32048,155],{"class":105},[99,32050,32051],{"class":158},"128",[99,32053,31447],{"class":109},[99,32055,32056,32059,32061,32063],{"class":101,"line":1740},[99,32057,32058],{"class":5203},"                                       shuffle",[99,32060,155],{"class":105},[99,32062,31457],{"class":158},[99,32064,31447],{"class":109},[99,32066,32067],{"class":101,"line":1745},[99,32068,32069],{"class":168},"                                       # 规定8个进程\n",[99,32071,32072,32075,32077,32079],{"class":101,"line":1750},[99,32073,32074],{"class":5203},"                                       num_workers",[99,32076,155],{"class":105},[99,32078,505],{"class":158},[99,32080,116],{"class":109},[99,32082,32083,32086,32088,32090,32092,32094],{"class":101,"line":1764},[99,32084,32085],{"class":109},"    val_dataloader",[99,32087,155],{"class":105},[99,32089,31515],{"class":109},[99,32091,31518],{"class":5203},[99,32093,155],{"class":105},[99,32095,32096],{"class":109},"val_data,\n",[99,32098,32099,32102,32104,32106],{"class":101,"line":1769},[99,32100,32101],{"class":5203},"                                   batch_size",[99,32103,155],{"class":105},[99,32105,32051],{"class":158},[99,32107,31447],{"class":109},[99,32109,32110,32113,32115,32117],{"class":101,"line":2563},[99,32111,32112],{"class":5203},"                                   shuffle",[99,32114,155],{"class":105},[99,32116,31457],{"class":158},[99,32118,31447],{"class":109},[99,32120,32121,32124,32126,32128],{"class":101,"line":2577},[99,32122,32123],{"class":5203},"                                   num_workers",[99,32125,155],{"class":105},[99,32127,505],{"class":158},[99,32129,116],{"class":109},[99,32131,32132,32134],{"class":101,"line":2585},[99,32133,4076],{"class":105},[99,32135,32136],{"class":109}," train_dataloader,val_dataloader\n",[99,32138,32139],{"class":101,"line":2590},[99,32140,2386],{"emptyLinePlaceholder":26},[99,32142,32143],{"class":101,"line":2596},[99,32144,32145],{"class":168},"# 验证是否出错\n",[99,32147,32148],{"class":101,"line":2602},[99,32149,32150],{"class":168},"# train_val_data_process()\n",[99,32152,32153],{"class":101,"line":2607},[99,32154,2386],{"emptyLinePlaceholder":26},[99,32156,32157],{"class":101,"line":7935},[99,32158,32159],{"class":168},"# 定义模型训练函数\n",[99,32161,32162,32164,32167],{"class":101,"line":7959},[99,32163,31928],{"class":105},[99,32165,32166],{"class":1949}," train_model_process",[99,32168,32169],{"class":109},"(model,train_dataloader,val_dataloader,num_epochs):\n",[99,32171,32172,32174,32176,32178,32180,32182,32184,32186,32189],{"class":101,"line":7964},[99,32173,31218],{"class":109},[99,32175,155],{"class":105},[99,32177,30432],{"class":109},[99,32179,31225],{"class":214},[99,32181,1690],{"class":105},[99,32183,31230],{"class":109},[99,32185,1687],{"class":105},[99,32187,32188],{"class":214}," 'cpu'",[99,32190,116],{"class":109},[99,32192,32193],{"class":101,"line":7970},[99,32194,2386],{"emptyLinePlaceholder":26},[99,32196,32197],{"class":101,"line":7997},[99,32198,2386],{"emptyLinePlaceholder":26},[99,32200,32201],{"class":101,"line":8002},[99,32202,32203],{"class":168},"    # 定义优化器\n",[99,32205,32206],{"class":101,"line":8008},[99,32207,32208],{"class":168},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[99,32210,32211],{"class":101,"line":8020},[99,32212,32213],{"class":168},"    # lr为学习率\n",[99,32215,32216,32219,32221,32224,32227,32229,32232],{"class":101,"line":8032},[99,32217,32218],{"class":109},"    optimizer",[99,32220,155],{"class":105},[99,32222,32223],{"class":109},"torch.optim.Adam(model.parameters(),",[99,32225,32226],{"class":5203},"lr",[99,32228,155],{"class":105},[99,32230,32231],{"class":158},"0.001",[99,32233,116],{"class":109},[99,32235,32236],{"class":101,"line":8044},[99,32237,2386],{"emptyLinePlaceholder":26},[99,32239,32240],{"class":101,"line":9703},[99,32241,32242],{"class":168},"    # 定义损失函数使用交叉熵损失函数\n",[99,32244,32245,32248,32250],{"class":101,"line":9728},[99,32246,32247],{"class":109},"    criterion",[99,32249,155],{"class":105},[99,32251,32252],{"class":109},"nn.CrossEntropyLoss()\n",[99,32254,32255],{"class":101,"line":9751},[99,32256,2386],{"emptyLinePlaceholder":26},[99,32258,32259],{"class":101,"line":9775},[99,32260,32261],{"class":168},"    # 将模型放到GPU中进行训练\n",[99,32263,32264,32266,32268],{"class":101,"line":9780},[99,32265,31270],{"class":109},[99,32267,155],{"class":105},[99,32269,32270],{"class":109},"model.to(device)\n",[99,32272,32273],{"class":101,"line":9785},[99,32274,32275],{"class":168},"    # 复制当前模型的参数\n",[99,32277,32278],{"class":101,"line":9790},[99,32279,32280],{"class":168},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[99,32282,32283],{"class":101,"line":9799},[99,32284,32285],{"class":168},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[99,32287,32288,32291,32293],{"class":101,"line":9804},[99,32289,32290],{"class":109},"    best_model_wts",[99,32292,155],{"class":105},[99,32294,32295],{"class":109},"copy.deepcopy(model.state_dict())\n",[99,32297,32298],{"class":101,"line":9810},[99,32299,2386],{"emptyLinePlaceholder":26},[99,32301,32302],{"class":101,"line":9831},[99,32303,2386],{"emptyLinePlaceholder":26},[99,32305,32306],{"class":101,"line":9837},[99,32307,32308],{"class":168},"    # 初始化参数\n",[99,32310,32311],{"class":101,"line":9851},[99,32312,32313],{"class":168},"    # 最高准确度\n",[99,32315,32316,32319,32321],{"class":101,"line":9857},[99,32317,32318],{"class":109},"    best_acc",[99,32320,155],{"class":105},[99,32322,32323],{"class":158},"0.0\n",[99,32325,32326],{"class":101,"line":9884},[99,32327,32328],{"class":168},"    # 训练集损失列表\n",[99,32330,32331,32334,32336],{"class":101,"line":9893},[99,32332,32333],{"class":109},"    train_loss_all",[99,32335,155],{"class":105},[99,32337,32338],{"class":109},"[]\n",[99,32340,32341],{"class":101,"line":9899},[99,32342,32343],{"class":168},"    # 验证集函数列表\n",[99,32345,32346,32349,32351],{"class":101,"line":9907},[99,32347,32348],{"class":109},"    val_loss_all",[99,32350,155],{"class":105},[99,32352,32338],{"class":109},[99,32354,32355],{"class":101,"line":9912},[99,32356,32357],{"class":168},"    # 训练集准确度列表\n",[99,32359,32360,32363,32365],{"class":101,"line":16591},[99,32361,32362],{"class":109},"    train_acc_all",[99,32364,155],{"class":105},[99,32366,32338],{"class":109},[99,32368,32369],{"class":101,"line":16597},[99,32370,32371],{"class":168},"    # 验证集准确度列表\n",[99,32373,32374,32377,32379],{"class":101,"line":16620},[99,32375,32376],{"class":109},"    val_acc_all",[99,32378,155],{"class":105},[99,32380,32338],{"class":109},[99,32382,32383],{"class":101,"line":16626},[99,32384,2386],{"emptyLinePlaceholder":26},[99,32386,32387],{"class":101,"line":16649},[99,32388,32389],{"class":168},"    # 保存当前时间--->方便看每轮训练的时间\n",[99,32391,32392,32395,32397],{"class":101,"line":16663},[99,32393,32394],{"class":109},"    since",[99,32396,155],{"class":105},[99,32398,32399],{"class":109},"time.time()\n",[99,32401,32402],{"class":101,"line":16683},[99,32403,2386],{"emptyLinePlaceholder":26},[99,32405,32406],{"class":101,"line":16689},[99,32407,2386],{"emptyLinePlaceholder":26},[99,32409,32410],{"class":101,"line":16700},[99,32411,32412],{"class":168},"    # 准备工作完成--->开始训练模型\n",[99,32414,32415,32417,32420,32422,32425],{"class":101,"line":16723},[99,32416,3187],{"class":105},[99,32418,32419],{"class":109}," epoch ",[99,32421,26032],{"class":105},[99,32423,32424],{"class":158}," range",[99,32426,32427],{"class":109},"(num_epochs):\n",[99,32429,32430,32433,32435,32438,32441,32443,32445,32447,32450,32452,32454],{"class":101,"line":16745},[99,32431,32432],{"class":158},"        print",[99,32434,110],{"class":109},[99,32436,32437],{"class":214},"\"Epoch ",[99,32439,32440],{"class":158},"{}",[99,32442,694],{"class":214},[99,32444,32440],{"class":158},[99,32446,361],{"class":214},[99,32448,32449],{"class":109},".format(epoch,num_epochs",[99,32451,642],{"class":105},[99,32453,327],{"class":158},[99,32455,30478],{"class":109},[99,32457,32458,32460,32462,32465,32467,32469],{"class":101,"line":16750},[99,32459,32432],{"class":158},[99,32461,110],{"class":109},[99,32463,32464],{"class":214},"\"-\"",[99,32466,565],{"class":105},[99,32468,556],{"class":158},[99,32470,116],{"class":109},[99,32472,32473],{"class":101,"line":16756},[99,32474,2386],{"emptyLinePlaceholder":26},[99,32476,32477],{"class":101,"line":16770},[99,32478,32479],{"class":168},"        # 初始化参数\n",[99,32481,32482],{"class":101,"line":16783},[99,32483,32484],{"class":168},"        # 训练集损失函数\n",[99,32486,32487,32490,32492],{"class":101,"line":16788},[99,32488,32489],{"class":109},"        train_loss",[99,32491,155],{"class":105},[99,32493,32323],{"class":158},[99,32495,32496],{"class":101,"line":16802},[99,32497,32498],{"class":168},"        # 训练集准确度\n",[99,32500,32501,32504,32506],{"class":101,"line":16807},[99,32502,32503],{"class":109},"        train_corrects",[99,32505,155],{"class":105},[99,32507,3071],{"class":158},[99,32509,32510],{"class":101,"line":16813},[99,32511,32512],{"class":168},"        # 验证集损失函数\n",[99,32514,32515,32518,32520],{"class":101,"line":16818},[99,32516,32517],{"class":109},"        val_loss",[99,32519,155],{"class":105},[99,32521,32323],{"class":158},[99,32523,32524],{"class":101,"line":16832},[99,32525,32526],{"class":168},"        # 验证集准确度\n",[99,32528,32529,32532,32534],{"class":101,"line":16837},[99,32530,32531],{"class":109},"        val_corrects",[99,32533,155],{"class":105},[99,32535,3071],{"class":158},[99,32537,32538],{"class":101,"line":16842},[99,32539,32540],{"class":168},"        # 训练集样本数量\n",[99,32542,32543,32546,32548],{"class":101,"line":16856},[99,32544,32545],{"class":109},"        train_num",[99,32547,155],{"class":105},[99,32549,3071],{"class":158},[99,32551,32552],{"class":101,"line":16868},[99,32553,32554],{"class":168},"        # 验证集样本数量\n",[99,32556,32557,32560,32562],{"class":101,"line":16873},[99,32558,32559],{"class":109},"        val_num",[99,32561,155],{"class":105},[99,32563,3071],{"class":158},[99,32565,32566],{"class":101,"line":16886},[99,32567,32568],{"class":168},"        # 将数据放到设备,并开始训练\n",[99,32570,32571,32573,32575,32577,32579],{"class":101,"line":16891},[99,32572,3389],{"class":105},[99,32574,31582],{"class":109},[99,32576,26032],{"class":105},[99,32578,31587],{"class":158},[99,32580,32581],{"class":109},"(train_dataloader):\n",[99,32583,32584],{"class":101,"line":16896},[99,32585,32586],{"class":168},"            # 将特征放入到训练设备\n",[99,32588,32589,32592,32594],{"class":101,"line":16901},[99,32590,32591],{"class":109},"            b_x",[99,32593,155],{"class":105},[99,32595,32596],{"class":109},"b_x.to(device)\n",[99,32598,32599],{"class":101,"line":16914},[99,32600,32601],{"class":168},"            # 将标签放入到训练设备当中\n",[99,32603,32604,32607,32609],{"class":101,"line":16919},[99,32605,32606],{"class":109},"            b_y",[99,32608,155],{"class":105},[99,32610,32611],{"class":109},"b_y.to(device)\n",[99,32613,32615],{"class":101,"line":32614},98,[99,32616,32617],{"class":168},"            # 设置模型为训练模式\n",[99,32619,32621],{"class":101,"line":32620},99,[99,32622,32623],{"class":109},"            model.train()\n",[99,32625,32627],{"class":101,"line":32626},100,[99,32628,32629],{"class":168},"            # 将数据放到模型当中,开始前向传播\n",[99,32631,32633],{"class":101,"line":32632},101,[99,32634,32635],{"class":168},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[99,32637,32639,32642,32644],{"class":101,"line":32638},102,[99,32640,32641],{"class":109},"            output",[99,32643,155],{"class":105},[99,32645,32646],{"class":109},"model(b_x)\n",[99,32648,32650],{"class":101,"line":32649},103,[99,32651,32652],{"class":168},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[99,32654,32656,32659,32661,32664,32667,32669,32671],{"class":101,"line":32655},104,[99,32657,32658],{"class":109},"            pre_lab",[99,32660,155],{"class":105},[99,32662,32663],{"class":109},"torch.argmax(output,",[99,32665,32666],{"class":5203},"dim",[99,32668,155],{"class":105},[99,32670,327],{"class":158},[99,32672,116],{"class":109},[99,32674,32676],{"class":101,"line":32675},105,[99,32677,32678],{"class":168},"            # 计算每一个batch的损失函数\n",[99,32680,32682,32685,32687],{"class":101,"line":32681},106,[99,32683,32684],{"class":109},"            loss",[99,32686,155],{"class":105},[99,32688,32689],{"class":109},"criterion(output,b_y)\n",[99,32691,32693],{"class":101,"line":32692},107,[99,32694,32695],{"class":168},"            # 将梯度初始化为0\n",[99,32697,32699],{"class":101,"line":32698},108,[99,32700,32701],{"class":109},"            optimizer.zero_grad()\n",[99,32703,32705],{"class":101,"line":32704},109,[99,32706,32707],{"class":168},"            # 梯度置为0后再进行反向传播\n",[99,32709,32711],{"class":101,"line":32710},110,[99,32712,32713],{"class":109},"            loss.backward()\n",[99,32715,32717],{"class":101,"line":32716},111,[99,32718,32719],{"class":168},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[99,32721,32723],{"class":101,"line":32722},112,[99,32724,32725],{"class":109},"            optimizer.step()\n",[99,32727,32729],{"class":101,"line":32728},113,[99,32730,32731],{"class":168},"            # loss.item()指的是batch的平均损失\n",[99,32733,32735,32738,32740,32743,32745,32748,32750],{"class":101,"line":32734},114,[99,32736,32737],{"class":109},"            train_loss",[99,32739,9464],{"class":105},[99,32741,32742],{"class":109},"loss.item()",[99,32744,565],{"class":105},[99,32746,32747],{"class":109},"b_x.size(",[99,32749,301],{"class":158},[99,32751,116],{"class":109},[99,32753,32755],{"class":101,"line":32754},115,[99,32756,32757],{"class":168},"            # 计算每个批次中正确预测的数量\n",[99,32759,32761,32764,32766,32769,32771],{"class":101,"line":32760},116,[99,32762,32763],{"class":109},"            train_corrects",[99,32765,9464],{"class":105},[99,32767,32768],{"class":109},"torch.sum(pre_lab",[99,32770,2935],{"class":105},[99,32772,32773],{"class":109},"b_y.data)\n",[99,32775,32777],{"class":101,"line":32776},117,[99,32778,32779],{"class":168},"            # 计算目前为止一共处理了多少样本\n",[99,32781,32783,32786,32788,32790,32792],{"class":101,"line":32782},118,[99,32784,32785],{"class":109},"            train_num",[99,32787,9464],{"class":105},[99,32789,32747],{"class":109},[99,32791,301],{"class":158},[99,32793,116],{"class":109},[99,32795,32797],{"class":101,"line":32796},119,[99,32798,32799],{"class":168},"        # 验证数据\n",[99,32801,32803,32805,32808,32810,32812],{"class":101,"line":32802},120,[99,32804,3389],{"class":105},[99,32806,32807],{"class":109}," step ,(b_x,b_y) ",[99,32809,26032],{"class":105},[99,32811,31587],{"class":158},[99,32813,32814],{"class":109},"(val_dataloader):\n",[99,32816,32818],{"class":101,"line":32817},121,[99,32819,32820],{"class":168},"            # 将特征放到验证设备当中\n",[99,32822,32824,32826,32828],{"class":101,"line":32823},122,[99,32825,32591],{"class":109},[99,32827,155],{"class":105},[99,32829,32596],{"class":109},[99,32831,32833],{"class":101,"line":32832},123,[99,32834,32835],{"class":168},"            # 将标签放到放到训练设备当中\n",[99,32837,32839,32841,32843],{"class":101,"line":32838},124,[99,32840,32606],{"class":109},[99,32842,155],{"class":105},[99,32844,32611],{"class":109},[99,32846,32848],{"class":101,"line":32847},125,[99,32849,32850],{"class":168},"            # 开启验证模式，设置模型为评估模式\n",[99,32852,32854],{"class":101,"line":32853},126,[99,32855,32856],{"class":109},"            model.eval()\n",[99,32858,32860,32863],{"class":101,"line":32859},127,[99,32861,32862],{"class":105},"            with",[99,32864,32865],{"class":109}," torch.no_grad():\n",[99,32867,32869],{"class":101,"line":32868},128,[99,32870,32871],{"class":168},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[99,32873,32875,32878,32880],{"class":101,"line":32874},129,[99,32876,32877],{"class":109},"                output ",[99,32879,155],{"class":105},[99,32881,32882],{"class":109}," model(b_x)\n",[99,32884,32886],{"class":101,"line":32885},130,[99,32887,32888],{"class":168},"                # 查找每一行中最大值对应的下标\n",[99,32890,32892,32895,32897,32900,32902,32904,32906],{"class":101,"line":32891},131,[99,32893,32894],{"class":109},"                pre_lab ",[99,32896,155],{"class":105},[99,32898,32899],{"class":109}," torch.argmax(output, ",[99,32901,32666],{"class":5203},[99,32903,155],{"class":105},[99,32905,327],{"class":158},[99,32907,116],{"class":109},[99,32909,32911],{"class":101,"line":32910},132,[99,32912,32913],{"class":168},"                # 计算验证集上的当前 batch 损失\n",[99,32915,32917,32920,32922],{"class":101,"line":32916},133,[99,32918,32919],{"class":109},"                val_batch_loss ",[99,32921,155],{"class":105},[99,32923,32924],{"class":109}," criterion(output, b_y)\n",[99,32926,32928],{"class":101,"line":32927},134,[99,32929,32930],{"class":168},"                # 对损失函数进行累加（按样本数加权）\n",[99,32932,32934,32937,32939,32942,32944,32947,32949],{"class":101,"line":32933},135,[99,32935,32936],{"class":109},"                val_loss ",[99,32938,9464],{"class":105},[99,32940,32941],{"class":109}," val_batch_loss.item() ",[99,32943,565],{"class":105},[99,32945,32946],{"class":109}," b_x.size(",[99,32948,301],{"class":158},[99,32950,116],{"class":109},[99,32952,32954,32957,32959,32962,32964],{"class":101,"line":32953},136,[99,32955,32956],{"class":109},"                val_corrects ",[99,32958,9464],{"class":105},[99,32960,32961],{"class":109}," torch.sum(pre_lab ",[99,32963,2935],{"class":105},[99,32965,32966],{"class":109}," b_y.data)\n",[99,32968,32970],{"class":101,"line":32969},137,[99,32971,32972],{"class":168},"                # 当前用于验证的样本数量\n",[99,32974,32976,32979,32981,32983,32985],{"class":101,"line":32975},138,[99,32977,32978],{"class":109},"            val_num ",[99,32980,9464],{"class":105},[99,32982,32946],{"class":109},[99,32984,301],{"class":158},[99,32986,116],{"class":109},[99,32988,32990],{"class":101,"line":32989},139,[99,32991,32992],{"class":168},"        # 计算并保存每一次迭代的loss值和准确率\n",[99,32994,32996],{"class":101,"line":32995},140,[99,32997,32998],{"class":168},"        # 计算并保存训练集的loss值\n",[99,33000,33002,33005,33007],{"class":101,"line":33001},141,[99,33003,33004],{"class":109},"        train_loss_all.append(train_loss",[99,33006,694],{"class":105},[99,33008,33009],{"class":109},"train_num)\n",[99,33011,33013],{"class":101,"line":33012},142,[99,33014,33015],{"class":168},"        # 取双精度\n",[99,33017,33019],{"class":101,"line":33018},143,[99,33020,33021],{"class":168},"        # 计算并保存训练集的准确率\n",[99,33023,33025,33028,33030],{"class":101,"line":33024},144,[99,33026,33027],{"class":109},"        train_acc_all.append(train_corrects.double().item()",[99,33029,694],{"class":105},[99,33031,33009],{"class":109},[99,33033,33035],{"class":101,"line":33034},145,[99,33036,33037],{"class":168},"        # 计算并保存验证集的loss值\n",[99,33039,33041,33044,33046],{"class":101,"line":33040},146,[99,33042,33043],{"class":109},"        val_loss_all.append(val_loss",[99,33045,694],{"class":105},[99,33047,33048],{"class":109},"val_num)\n",[99,33050,33052],{"class":101,"line":33051},147,[99,33053,33054],{"class":168},"        # 计算并保存验证集的准确率\n",[99,33056,33058,33061,33063],{"class":101,"line":33057},148,[99,33059,33060],{"class":109},"        val_acc_all.append(val_corrects.double().item()",[99,33062,694],{"class":105},[99,33064,33048],{"class":109},[99,33066,33068],{"class":101,"line":33067},149,[99,33069,2386],{"emptyLinePlaceholder":26},[99,33071,33073],{"class":101,"line":33072},150,[99,33074,33075],{"class":168},"        # 打印训练一轮的loss值和准确率\n",[99,33077,33079,33081,33083,33085,33087,33090,33092,33095,33097,33100,33102,33104,33106,33108,33111,33113,33115,33118,33120,33122],{"class":101,"line":33078},151,[99,33080,32432],{"class":158},[99,33082,110],{"class":109},[99,33084,3578],{"class":214},[99,33086,32440],{"class":158},[99,33088,33089],{"class":214},"train loss:",[99,33091,1006],{"class":158},[99,33093,33094],{"class":105},":.4f",[99,33096,1056],{"class":158},[99,33098,33099],{"class":214}," train acc:",[99,33101,1006],{"class":158},[99,33103,33094],{"class":105},[99,33105,1056],{"class":158},[99,33107,3578],{"class":214},[99,33109,33110],{"class":109},".format(epoch,train_loss_all[",[99,33112,642],{"class":105},[99,33114,327],{"class":158},[99,33116,33117],{"class":109},"],train_acc_all[",[99,33119,642],{"class":105},[99,33121,327],{"class":158},[99,33123,33124],{"class":109},"]))\n",[99,33126,33128,33130,33132,33134,33136,33139,33141,33143,33145,33148,33150,33152,33154,33156,33159,33161,33163,33166,33168,33170],{"class":101,"line":33127},152,[99,33129,32432],{"class":158},[99,33131,110],{"class":109},[99,33133,3578],{"class":214},[99,33135,32440],{"class":158},[99,33137,33138],{"class":214},"val loss:",[99,33140,1006],{"class":158},[99,33142,33094],{"class":105},[99,33144,1056],{"class":158},[99,33146,33147],{"class":214}," val acc:",[99,33149,1006],{"class":158},[99,33151,33094],{"class":105},[99,33153,1056],{"class":158},[99,33155,3578],{"class":214},[99,33157,33158],{"class":109},".format(epoch,val_loss_all[",[99,33160,642],{"class":105},[99,33162,327],{"class":158},[99,33164,33165],{"class":109},"],val_acc_all[",[99,33167,642],{"class":105},[99,33169,327],{"class":158},[99,33171,33124],{"class":109},[99,33173,33175],{"class":101,"line":33174},153,[99,33176,2386],{"emptyLinePlaceholder":26},[99,33178,33180],{"class":101,"line":33179},154,[99,33181,33182],{"class":168},"        # 判断准确度--->保存最优模型\n",[99,33184,33186,33188,33191,33193,33195,33197,33199],{"class":101,"line":33185},155,[99,33187,2483],{"class":105},[99,33189,33190],{"class":109}," val_acc_all[",[99,33192,642],{"class":105},[99,33194,327],{"class":158},[99,33196,1050],{"class":109},[99,33198,1070],{"class":105},[99,33200,33201],{"class":109},"best_acc:\n",[99,33203,33205],{"class":101,"line":33204},156,[99,33206,33207],{"class":168},"            # 保存当前模型准确度\n",[99,33209,33211,33214,33216,33218,33221,33223,33225],{"class":101,"line":33210},157,[99,33212,33213],{"class":109},"            best_acc:",[99,33215,149],{"class":158},[99,33217,155],{"class":105},[99,33219,33220],{"class":109},"val_acc_all[",[99,33222,642],{"class":105},[99,33224,327],{"class":158},[99,33226,33227],{"class":109},"]\n",[99,33229,33231],{"class":101,"line":33230},158,[99,33232,33233],{"class":168},"            # 保存当前的准确度\n",[99,33235,33237],{"class":101,"line":33236},159,[99,33238,33239],{"class":168},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[99,33241,33243,33246,33248],{"class":101,"line":33242},160,[99,33244,33245],{"class":109},"            best_model_wts",[99,33247,155],{"class":105},[99,33249,32295],{"class":109},[99,33251,33253],{"class":101,"line":33252},161,[99,33254,2386],{"emptyLinePlaceholder":26},[99,33256,33258],{"class":101,"line":33257},162,[99,33259,33260],{"class":168},"        # 计算耗时\n",[99,33262,33264,33267,33269,33272,33274],{"class":101,"line":33263},163,[99,33265,33266],{"class":109},"        time_use",[99,33268,155],{"class":105},[99,33270,33271],{"class":109},"time.time()",[99,33273,642],{"class":105},[99,33275,33276],{"class":109},"since\n",[99,33278,33280,33282,33284,33287,33289,33292,33294,33296,33298,33300,33302,33305,33308,33311,33313,33316,33318,33320],{"class":101,"line":33279},164,[99,33281,32432],{"class":158},[99,33283,110],{"class":109},[99,33285,33286],{"class":214},"'训练和验证耗费的时间",[99,33288,1006],{"class":158},[99,33290,33291],{"class":105},":.0f",[99,33293,1056],{"class":158},[99,33295,654],{"class":214},[99,33297,1006],{"class":158},[99,33299,33291],{"class":105},[99,33301,1056],{"class":158},[99,33303,33304],{"class":214},"s'",[99,33306,33307],{"class":109},".format(time_use",[99,33309,33310],{"class":105},"\u002F\u002F",[99,33312,1017],{"class":158},[99,33314,33315],{"class":109},",time_use",[99,33317,438],{"class":105},[99,33319,1017],{"class":158},[99,33321,30478],{"class":109},[99,33323,33325],{"class":101,"line":33324},165,[99,33326,33327],{"class":168},"    # 选择最优参数\n",[99,33329,33331],{"class":101,"line":33330},166,[99,33332,33333],{"class":168},"    # 加载最高准确率下的模型参数\n",[99,33335,33337],{"class":101,"line":33336},167,[99,33338,33339],{"class":168},"    # model.load_state_dict(best_model_wts)\n",[99,33341,33343,33346,33349],{"class":101,"line":33342},168,[99,33344,33345],{"class":109},"    torch.save(model.state_dict(best_model_wts), ",[99,33347,33348],{"class":214},"'.\u002Fbest_model.pth'",[99,33350,116],{"class":109},[99,33352,33354],{"class":101,"line":33353},169,[99,33355,33356],{"class":168},"    # 或者写成\n",[99,33358,33360],{"class":101,"line":33359},170,[99,33361,33362],{"class":168},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[99,33364,33366],{"class":101,"line":33365},171,[99,33367,33368],{"class":168},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[99,33370,33372,33375,33377,33380,33383,33385],{"class":101,"line":33371},172,[99,33373,33374],{"class":109},"    train_process",[99,33376,155],{"class":105},[99,33378,33379],{"class":109},"pd.DataFrame(",[99,33381,33382],{"class":5203},"data",[99,33384,155],{"class":105},[99,33386,1532],{"class":109},[99,33388,33390,33393,33395,33398],{"class":101,"line":33389},173,[99,33391,33392],{"class":214},"        \"epoch\"",[99,33394,969],{"class":109},[99,33396,33397],{"class":158},"range",[99,33399,33400],{"class":109},"(num_epochs),\n",[99,33402,33404,33407],{"class":101,"line":33403},174,[99,33405,33406],{"class":214},"        \"train_loss_all\"",[99,33408,33409],{"class":109},":train_loss_all,\n",[99,33411,33413,33416],{"class":101,"line":33412},175,[99,33414,33415],{"class":214},"        \"val_loss_all\"",[99,33417,33418],{"class":109},":val_loss_all,\n",[99,33420,33422,33425],{"class":101,"line":33421},176,[99,33423,33424],{"class":214},"        \"train_acc_all\"",[99,33426,33427],{"class":109},":train_acc_all,\n",[99,33429,33431,33434],{"class":101,"line":33430},177,[99,33432,33433],{"class":214},"        \"val_acc_all\"",[99,33435,33436],{"class":109},":val_acc_all\n",[99,33438,33440],{"class":101,"line":33439},178,[99,33441,33442],{"class":109},"    })\n",[99,33444,33446],{"class":101,"line":33445},179,[99,33447,33448],{"class":168},"    # 返回训练保存的过程\n",[99,33450,33452,33454],{"class":101,"line":33451},180,[99,33453,4076],{"class":105},[99,33455,33456],{"class":109}," train_process\n",[99,33458,33460],{"class":101,"line":33459},181,[99,33461,2386],{"emptyLinePlaceholder":26},[99,33463,33465],{"class":101,"line":33464},182,[99,33466,33467],{"class":168},"# 将loss值和精度按照图片的形式展示出来\n",[99,33469,33471,33473,33476],{"class":101,"line":33470},183,[99,33472,31928],{"class":105},[99,33474,33475],{"class":1949}," matplot_acc_loss",[99,33477,33478],{"class":109},"(train_process):\n",[99,33480,33482],{"class":101,"line":33481},184,[99,33483,33484],{"class":168},"    # 设置图的大小\n",[99,33486,33488,33491,33493,33495,33497,33499,33501,33503],{"class":101,"line":33487},185,[99,33489,33490],{"class":109},"    plt.figure(",[99,33492,31674],{"class":5203},[99,33494,155],{"class":105},[99,33496,110],{"class":109},[99,33498,608],{"class":158},[99,33500,488],{"class":109},[99,33502,403],{"class":158},[99,33504,30478],{"class":109},[99,33506,33508],{"class":101,"line":33507},186,[99,33509,33510],{"class":168},"    # 设置图中有几张图\n",[99,33512,33514],{"class":101,"line":33513},187,[99,33515,33516],{"class":168},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[99,33518,33520],{"class":101,"line":33519},188,[99,33521,33522],{"class":168},"    # ①loss图\n",[99,33524,33526,33528,33530,33532,33534,33536,33538],{"class":101,"line":33525},189,[99,33527,31708],{"class":109},[99,33529,327],{"class":158},[99,33531,488],{"class":109},[99,33533,187],{"class":158},[99,33535,488],{"class":109},[99,33537,327],{"class":158},[99,33539,116],{"class":109},[99,33541,33543],{"class":101,"line":33542},190,[99,33544,33545],{"class":168},"    # 补充:\n",[99,33547,33549],{"class":101,"line":33548},191,[99,33550,33551],{"class":168},"    # plt.subplot(nrows, ncols, index)\n",[99,33553,33555],{"class":101,"line":33554},192,[99,33556,33557],{"class":168},"    # nrows：行数\n",[99,33559,33561],{"class":101,"line":33560},193,[99,33562,33563],{"class":168},"    # ncols：列数\n",[99,33565,33567],{"class":101,"line":33566},194,[99,33568,33569],{"class":168},"    # index：目前选中第几个子图（从1开始）\n",[99,33571,33573,33576,33579,33582,33585,33587,33590,33592,33595],{"class":101,"line":33572},195,[99,33574,33575],{"class":109},"    plt.plot(train_process[",[99,33577,33578],{"class":214},"\"epoch\"",[99,33580,33581],{"class":109},"],train_process.train_loss_all,",[99,33583,33584],{"class":214},"'ro-'",[99,33586,488],{"class":109},[99,33588,33589],{"class":5203},"label",[99,33591,155],{"class":105},[99,33593,33594],{"class":214},"'train loss'",[99,33596,116],{"class":109},[99,33598,33600,33602,33604,33607,33610,33612,33614,33616,33619],{"class":101,"line":33599},196,[99,33601,33575],{"class":109},[99,33603,33578],{"class":214},[99,33605,33606],{"class":109},"],train_process.val_loss_all,",[99,33608,33609],{"class":214},"'bs--'",[99,33611,488],{"class":109},[99,33613,33589],{"class":5203},[99,33615,155],{"class":105},[99,33617,33618],{"class":214},"'val loss'",[99,33620,116],{"class":109},[99,33622,33624],{"class":101,"line":33623},197,[99,33625,33626],{"class":168},"    # 添加一个图例\n",[99,33628,33630],{"class":101,"line":33629},198,[99,33631,33632],{"class":109},"    plt.legend()\n",[99,33634,33636],{"class":101,"line":33635},199,[99,33637,33638],{"class":168},"    # 给轴添加标签\n",[99,33640,33642,33645,33648],{"class":101,"line":33641},200,[99,33643,33644],{"class":109},"    plt.xlabel(",[99,33646,33647],{"class":214},"'epoch'",[99,33649,116],{"class":109},[99,33651,33653,33656,33659],{"class":101,"line":33652},201,[99,33654,33655],{"class":109},"    plt.ylabel(",[99,33657,33658],{"class":214},"'loss'",[99,33660,116],{"class":109},[99,33662,33664],{"class":101,"line":33663},202,[99,33665,33666],{"class":168},"    # ②准确度图\n",[99,33668,33670,33672,33674,33676,33678,33680,33682],{"class":101,"line":33669},203,[99,33671,31708],{"class":109},[99,33673,327],{"class":158},[99,33675,488],{"class":109},[99,33677,187],{"class":158},[99,33679,488],{"class":109},[99,33681,187],{"class":158},[99,33683,116],{"class":109},[99,33685,33687,33689,33691,33694,33696,33698,33700,33702,33705],{"class":101,"line":33686},204,[99,33688,33575],{"class":109},[99,33690,33578],{"class":214},[99,33692,33693],{"class":109},"],train_process.train_acc_all,",[99,33695,33584],{"class":214},[99,33697,488],{"class":109},[99,33699,33589],{"class":5203},[99,33701,155],{"class":105},[99,33703,33704],{"class":214},"'train acc'",[99,33706,116],{"class":109},[99,33708,33710,33712,33714,33717,33719,33721,33723,33725,33728],{"class":101,"line":33709},205,[99,33711,33575],{"class":109},[99,33713,33578],{"class":214},[99,33715,33716],{"class":109},"],train_process.val_acc_all,",[99,33718,33609],{"class":214},[99,33720,488],{"class":109},[99,33722,33589],{"class":5203},[99,33724,155],{"class":105},[99,33726,33727],{"class":214},"'val acc'",[99,33729,116],{"class":109},[99,33731,33733],{"class":101,"line":33732},206,[99,33734,33735],{"class":168},"    # 添加图例\n",[99,33737,33739],{"class":101,"line":33738},207,[99,33740,33632],{"class":109},[99,33742,33744,33746,33748],{"class":101,"line":33743},208,[99,33745,33644],{"class":109},[99,33747,33578],{"class":214},[99,33749,116],{"class":109},[99,33751,33753,33755,33758],{"class":101,"line":33752},209,[99,33754,33655],{"class":109},[99,33756,33757],{"class":214},"\"acc\"",[99,33759,116],{"class":109},[99,33761,33763],{"class":101,"line":33762},210,[99,33764,33765],{"class":109},"    plt.show()\n",[99,33767,33769],{"class":101,"line":33768},211,[99,33770,2386],{"emptyLinePlaceholder":26},[99,33772,33774],{"class":101,"line":33773},212,[99,33775,33776],{"class":168},"# 正式开始训练:\n",[99,33778,33780,33782,33784,33786,33788],{"class":101,"line":33779},213,[99,33781,1517],{"class":105},[99,33783,31201],{"class":158},[99,33785,2935],{"class":105},[99,33787,31206],{"class":214},[99,33789,3725],{"class":109},[99,33791,33793],{"class":101,"line":33792},214,[99,33794,33795],{"class":168},"    # 将模型实例化\n",[99,33797,33799,33802,33804],{"class":101,"line":33798},215,[99,33800,33801],{"class":109},"    LeNet",[99,33803,155],{"class":105},[99,33805,33806],{"class":109},"LeNet()\n",[99,33808,33810,33813,33815],{"class":101,"line":33809},216,[99,33811,33812],{"class":109},"    train_dataloader,val_dataloader",[99,33814,155],{"class":105},[99,33816,33817],{"class":109},"train_val_data_process()\n",[99,33819,33821,33823,33825,33828,33831,33833,33835],{"class":101,"line":33820},217,[99,33822,33374],{"class":109},[99,33824,155],{"class":105},[99,33826,33827],{"class":109},"train_model_process(LeNet,train_dataloader,val_dataloader,",[99,33829,33830],{"class":5203},"num_epochs",[99,33832,155],{"class":105},[99,33834,810],{"class":158},[99,33836,116],{"class":109},[99,33838,33840],{"class":101,"line":33839},218,[99,33841,33842],{"class":109},"    matplot_acc_loss(train_process)\n",[14,33844,33845],{},"画图的补充点学习：",[14,33847,33848],{},[1448,33849],{"alt":21,"src":33850},"\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",[53,33852,33853],{"start":1165},[56,33854,33855],{},"测试",[90,33857,33859],{"className":30359,"code":33858,"language":30361,"meta":21,"style":21},"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",[96,33860,33861,33867,33877,33889,33899,33904,33914,33924,33928,33933,33942,33959,33971,33988,33999,34015,34020,34031,34042,34053,34060,34064,34069,34079,34084,34101,34109,34113,34118,34127,34136,34140,34145,34150,34155,34162,34167,34179,34189,34199,34204,34208,34213,34222,34227,34243,34248,34253,34258,34272,34277,34291,34295,34300,34315,34320,34332,34336,34341,34353,34358,34366,34371,34376,34386,34391,34400,34405,34410,34414,34419,34424,34440,34448,34453,34458,34517,34523,34528,34539,34547,34555,34559,34564,34568,34573,34581,34586,34602,34607,34617,34627],{"__ignoreMap":21},[99,33862,33863,33865],{"class":101,"line":102},[99,33864,30373],{"class":105},[99,33866,30376],{"class":109},[99,33868,33869,33871,33873,33875],{"class":101,"line":22},[99,33870,30373],{"class":105},[99,33872,31396],{"class":109},[99,33874,31364],{"class":105},[99,33876,31401],{"class":109},[99,33878,33879,33881,33884,33886],{"class":101,"line":1165},[99,33880,30718],{"class":105},[99,33882,33883],{"class":109}," jupyter_client.consoleapp ",[99,33885,30373],{"class":105},[99,33887,33888],{"class":109}," classes\n",[99,33890,33891,33893,33895,33897],{"class":101,"line":1180},[99,33892,30718],{"class":105},[99,33894,31379],{"class":109},[99,33896,30373],{"class":105},[99,33898,31384],{"class":109},[99,33900,33901],{"class":101,"line":1186},[99,33902,33903],{"class":168},"# 导入数据集\n",[99,33905,33906,33908,33910,33912],{"class":101,"line":1200},[99,33907,30718],{"class":105},[99,33909,31349],{"class":109},[99,33911,30373],{"class":105},[99,33913,31354],{"class":109},[99,33915,33916,33918,33920,33922],{"class":101,"line":1206},[99,33917,30718],{"class":105},[99,33919,31895],{"class":109},[99,33921,30373],{"class":105},[99,33923,31900],{"class":109},[99,33925,33926],{"class":101,"line":1297},[99,33927,2386],{"emptyLinePlaceholder":26},[99,33929,33930],{"class":101,"line":1303},[99,33931,33932],{"class":168},"# 测试数据处理\n",[99,33934,33935,33937,33940],{"class":101,"line":1315},[99,33936,31928],{"class":105},[99,33938,33939],{"class":1949}," test_data_process",[99,33941,31934],{"class":109},[99,33943,33944,33947,33949,33951,33953,33955,33957],{"class":101,"line":1598},[99,33945,33946],{"class":109},"    test_data",[99,33948,155],{"class":105},[99,33950,31436],{"class":109},[99,33952,31439],{"class":5203},[99,33954,155],{"class":105},[99,33956,31444],{"class":214},[99,33958,31447],{"class":109},[99,33960,33961,33964,33966,33969],{"class":101,"line":1603},[99,33962,33963],{"class":5203},"                           train",[99,33965,155],{"class":105},[99,33967,33968],{"class":158},"False",[99,33970,31447],{"class":109},[99,33972,33973,33976,33978,33980,33982,33984,33986],{"class":101,"line":1609},[99,33974,33975],{"class":5203},"                           transform",[99,33977,155],{"class":105},[99,33979,31474],{"class":109},[99,33981,31477],{"class":5203},[99,33983,155],{"class":105},[99,33985,1011],{"class":158},[99,33987,31485],{"class":109},[99,33989,33990,33993,33995,33997],{"class":101,"line":1614},[99,33991,33992],{"class":5203},"                           download",[99,33994,155],{"class":105},[99,33996,31457],{"class":158},[99,33998,116],{"class":109},[99,34000,34001,34004,34006,34008,34010,34012],{"class":101,"line":1628},[99,34002,34003],{"class":109},"    test_dataloader",[99,34005,155],{"class":105},[99,34007,31515],{"class":109},[99,34009,31518],{"class":5203},[99,34011,155],{"class":105},[99,34013,34014],{"class":109},"test_data,\n",[99,34016,34017],{"class":101,"line":1633},[99,34018,34019],{"class":168},"                                    # 这里是一张一张进行测试\n",[99,34021,34022,34025,34027,34029],{"class":101,"line":1639},[99,34023,34024],{"class":5203},"                                    batch_size",[99,34026,155],{"class":105},[99,34028,327],{"class":158},[99,34030,31447],{"class":109},[99,34032,34033,34036,34038,34040],{"class":101,"line":1660},[99,34034,34035],{"class":5203},"                                    shuffle",[99,34037,155],{"class":105},[99,34039,31457],{"class":158},[99,34041,31447],{"class":109},[99,34043,34044,34047,34049,34051],{"class":101,"line":1665},[99,34045,34046],{"class":5203},"                                    num_workers",[99,34048,155],{"class":105},[99,34050,301],{"class":158},[99,34052,116],{"class":109},[99,34054,34055,34057],{"class":101,"line":1679},[99,34056,4076],{"class":105},[99,34058,34059],{"class":109}," test_dataloader\n",[99,34061,34062],{"class":101,"line":1684},[99,34063,2386],{"emptyLinePlaceholder":26},[99,34065,34066],{"class":101,"line":1713},[99,34067,34068],{"class":168},"# 定义模型测试函数\n",[99,34070,34071,34073,34076],{"class":101,"line":1718},[99,34072,31928],{"class":105},[99,34074,34075],{"class":1949}," test_model_process",[99,34077,34078],{"class":109},"(model,test_dataloader):\n",[99,34080,34081],{"class":101,"line":1735},[99,34082,34083],{"class":168},"    # 将模型放到设备当中，先进行判断\n",[99,34085,34086,34088,34090,34092,34094,34096,34098],{"class":101,"line":1740},[99,34087,31218],{"class":109},[99,34089,155],{"class":105},[99,34091,31225],{"class":214},[99,34093,1690],{"class":105},[99,34095,31230],{"class":109},[99,34097,1687],{"class":105},[99,34099,34100],{"class":214}," \"cpu\"\n",[99,34102,34103,34105,34107],{"class":101,"line":1745},[99,34104,31270],{"class":109},[99,34106,155],{"class":105},[99,34108,32270],{"class":109},[99,34110,34111],{"class":101,"line":1750},[99,34112,2386],{"emptyLinePlaceholder":26},[99,34114,34115],{"class":101,"line":1764},[99,34116,34117],{"class":168},"    # 设置初始化参数\n",[99,34119,34120,34123,34125],{"class":101,"line":1769},[99,34121,34122],{"class":109},"    test_corrects",[99,34124,155],{"class":105},[99,34126,32323],{"class":158},[99,34128,34129,34132,34134],{"class":101,"line":2563},[99,34130,34131],{"class":109},"    test_num",[99,34133,155],{"class":105},[99,34135,3071],{"class":158},[99,34137,34138],{"class":101,"line":2577},[99,34139,2386],{"emptyLinePlaceholder":26},[99,34141,34142],{"class":101,"line":2585},[99,34143,34144],{"class":168},"    # 进行模型测试\n",[99,34146,34147],{"class":101,"line":2590},[99,34148,34149],{"class":168},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[99,34151,34152],{"class":101,"line":2596},[99,34153,34154],{"class":168},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[99,34156,34157,34160],{"class":101,"line":2602},[99,34158,34159],{"class":105},"    with",[99,34161,32865],{"class":109},[99,34163,34164],{"class":101,"line":2607},[99,34165,34166],{"class":168},"        # 从数据中进行\n",[99,34168,34169,34171,34174,34176],{"class":101,"line":7935},[99,34170,3389],{"class":105},[99,34172,34173],{"class":109}," test_data_x,test_data_y ",[99,34175,26032],{"class":105},[99,34177,34178],{"class":109}," test_dataloader:\n",[99,34180,34181,34184,34186],{"class":101,"line":7959},[99,34182,34183],{"class":109},"            test_data_x",[99,34185,155],{"class":105},[99,34187,34188],{"class":109},"test_data_x.to(device)\n",[99,34190,34191,34194,34196],{"class":101,"line":7964},[99,34192,34193],{"class":109},"            test_data_y",[99,34195,155],{"class":105},[99,34197,34198],{"class":109},"test_data_y.to(device)\n",[99,34200,34201],{"class":101,"line":7970},[99,34202,34203],{"class":168},"            # 设置为验证模式\n",[99,34205,34206],{"class":101,"line":7997},[99,34207,32856],{"class":109},[99,34209,34210],{"class":101,"line":8002},[99,34211,34212],{"class":168},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[99,34214,34215,34217,34219],{"class":101,"line":8008},[99,34216,32641],{"class":109},[99,34218,155],{"class":105},[99,34220,34221],{"class":109},"model(test_data_x)\n",[99,34223,34224],{"class":101,"line":8020},[99,34225,34226],{"class":168},"            # 查找每一行中最大值对应的下标\n",[99,34228,34229,34231,34233,34235,34237,34239,34241],{"class":101,"line":8032},[99,34230,32658],{"class":109},[99,34232,155],{"class":105},[99,34234,32663],{"class":109},[99,34236,32666],{"class":5203},[99,34238,155],{"class":105},[99,34240,327],{"class":158},[99,34242,116],{"class":109},[99,34244,34245],{"class":101,"line":8044},[99,34246,34247],{"class":168},"            # 计算正确率\n",[99,34249,34250],{"class":101,"line":9703},[99,34251,34252],{"class":168},"            # .data表示是一个不带梯度信息的tensor\n",[99,34254,34255],{"class":101,"line":9728},[99,34256,34257],{"class":168},"            # 如果预测正确，则准确度test_corrects加1\n",[99,34259,34260,34263,34265,34267,34269],{"class":101,"line":9751},[99,34261,34262],{"class":109},"            test_corrects",[99,34264,9464],{"class":105},[99,34266,32768],{"class":109},[99,34268,2935],{"class":105},[99,34270,34271],{"class":109},"test_data_y.data)\n",[99,34273,34274],{"class":101,"line":9775},[99,34275,34276],{"class":168},"            # 将所有的测试样本进行累计\n",[99,34278,34279,34282,34284,34287,34289],{"class":101,"line":9780},[99,34280,34281],{"class":109},"            test_num",[99,34283,9464],{"class":105},[99,34285,34286],{"class":109},"test_data_x.size(",[99,34288,301],{"class":158},[99,34290,116],{"class":109},[99,34292,34293],{"class":101,"line":9785},[99,34294,2386],{"emptyLinePlaceholder":26},[99,34296,34297],{"class":101,"line":9790},[99,34298,34299],{"class":168},"        # 计算准确度\n",[99,34301,34302,34305,34307,34310,34312],{"class":101,"line":9799},[99,34303,34304],{"class":109},"        test_acc",[99,34306,155],{"class":105},[99,34308,34309],{"class":109},"test_corrects.double().item()",[99,34311,694],{"class":105},[99,34313,34314],{"class":109},"test_num\n",[99,34316,34317],{"class":101,"line":9804},[99,34318,34319],{"class":168},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[99,34321,34322,34324,34326,34329],{"class":101,"line":9810},[99,34323,32432],{"class":158},[99,34325,110],{"class":109},[99,34327,34328],{"class":214},"\"测试的准确率：\"",[99,34330,34331],{"class":109},",test_acc)\n",[99,34333,34334],{"class":101,"line":9831},[99,34335,2386],{"emptyLinePlaceholder":26},[99,34337,34338],{"class":101,"line":9837},[99,34339,34340],{"class":168},"# 实现模型的测试功能\n",[99,34342,34343,34345,34347,34349,34351],{"class":101,"line":9851},[99,34344,1517],{"class":105},[99,34346,31201],{"class":158},[99,34348,2935],{"class":105},[99,34350,31206],{"class":214},[99,34352,3725],{"class":109},[99,34354,34355],{"class":101,"line":9857},[99,34356,34357],{"class":168},"    # 加载模型\n",[99,34359,34360,34362,34364],{"class":101,"line":9884},[99,34361,31270],{"class":109},[99,34363,155],{"class":105},[99,34365,33806],{"class":109},[99,34367,34368],{"class":101,"line":9893},[99,34369,34370],{"class":168},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[99,34372,34373],{"class":101,"line":9899},[99,34374,34375],{"class":168},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[99,34377,34378,34381,34384],{"class":101,"line":9907},[99,34379,34380],{"class":109},"    model.load_state_dict(torch.load(",[99,34382,34383],{"class":214},"'best_model.pth'",[99,34385,30478],{"class":109},[99,34387,34388],{"class":101,"line":9912},[99,34389,34390],{"class":168},"    # 数据加载\n",[99,34392,34393,34395,34397],{"class":101,"line":16591},[99,34394,34003],{"class":109},[99,34396,155],{"class":105},[99,34398,34399],{"class":109},"test_data_process()\n",[99,34401,34402],{"class":101,"line":16597},[99,34403,34404],{"class":168},"    # 加载模型测试的函数\n",[99,34406,34407],{"class":101,"line":16620},[99,34408,34409],{"class":109},"    test_model_process(model,test_dataloader)\n",[99,34411,34412],{"class":101,"line":16626},[99,34413,2386],{"emptyLinePlaceholder":26},[99,34415,34416],{"class":101,"line":16649},[99,34417,34418],{"class":168},"    # 验证集推理实现：\n",[99,34420,34421],{"class":101,"line":16663},[99,34422,34423],{"class":168},"    # 加载数据加载的更详细一些\n",[99,34425,34426,34428,34430,34432,34434,34436,34438],{"class":101,"line":16683},[99,34427,31218],{"class":109},[99,34429,155],{"class":105},[99,34431,31225],{"class":214},[99,34433,1690],{"class":105},[99,34435,31230],{"class":109},[99,34437,1687],{"class":105},[99,34439,34100],{"class":214},[99,34441,34442,34444,34446],{"class":101,"line":16689},[99,34443,31270],{"class":109},[99,34445,155],{"class":105},[99,34447,32270],{"class":109},[99,34449,34450],{"class":101,"line":16700},[99,34451,34452],{"class":168},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[99,34454,34455],{"class":101,"line":16723},[99,34456,34457],{"class":168},"    # 顺序不可改变\n",[99,34459,34460,34463,34465,34467,34470,34472,34475,34477,34480,34482,34485,34487,34490,34492,34495,34497,34500,34502,34505,34507,34510,34512,34515],{"class":101,"line":16745},[99,34461,34462],{"class":109},"    classes",[99,34464,155],{"class":105},[99,34466,1000],{"class":109},[99,34468,34469],{"class":214},"'T-shirt\u002Ftop'",[99,34471,488],{"class":109},[99,34473,34474],{"class":214},"'Trouser'",[99,34476,488],{"class":109},[99,34478,34479],{"class":214},"'Pullover'",[99,34481,488],{"class":109},[99,34483,34484],{"class":214},"'Dress'",[99,34486,488],{"class":109},[99,34488,34489],{"class":214},"'Coat'",[99,34491,488],{"class":109},[99,34493,34494],{"class":214},"'Sandal'",[99,34496,488],{"class":109},[99,34498,34499],{"class":214},"'Shirt'",[99,34501,488],{"class":109},[99,34503,34504],{"class":214},"'Sneaker'",[99,34506,488],{"class":109},[99,34508,34509],{"class":214},"'Bag'",[99,34511,488],{"class":109},[99,34513,34514],{"class":214},"'Ankle boot'",[99,34516,33227],{"class":109},[99,34518,34519,34521],{"class":101,"line":16750},[99,34520,34159],{"class":105},[99,34522,32865],{"class":109},[99,34524,34525],{"class":101,"line":16756},[99,34526,34527],{"class":168},"        # 将数据和标签都放到设备当中\n",[99,34529,34530,34532,34535,34537],{"class":101,"line":16770},[99,34531,3389],{"class":105},[99,34533,34534],{"class":109}," b_x,b_y ",[99,34536,26032],{"class":105},[99,34538,34178],{"class":109},[99,34540,34541,34543,34545],{"class":101,"line":16783},[99,34542,32591],{"class":109},[99,34544,155],{"class":105},[99,34546,32596],{"class":109},[99,34548,34549,34551,34553],{"class":101,"line":16788},[99,34550,32606],{"class":109},[99,34552,155],{"class":105},[99,34554,32611],{"class":109},[99,34556,34557],{"class":101,"line":16802},[99,34558,2386],{"emptyLinePlaceholder":26},[99,34560,34561],{"class":101,"line":16807},[99,34562,34563],{"class":168},"            # 设置模型为验证模式\n",[99,34565,34566],{"class":101,"line":16813},[99,34567,32856],{"class":109},[99,34569,34570],{"class":101,"line":16818},[99,34571,34572],{"class":168},"            # 模型推理结果\n",[99,34574,34575,34577,34579],{"class":101,"line":16832},[99,34576,32641],{"class":109},[99,34578,155],{"class":105},[99,34580,32646],{"class":109},[99,34582,34583],{"class":101,"line":16837},[99,34584,34585],{"class":168},"            # 获取最大下标，最大下标就是类别号\n",[99,34587,34588,34590,34592,34594,34596,34598,34600],{"class":101,"line":16842},[99,34589,32658],{"class":109},[99,34591,155],{"class":105},[99,34593,32663],{"class":109},[99,34595,32666],{"class":5203},[99,34597,155],{"class":105},[99,34599,327],{"class":158},[99,34601,116],{"class":109},[99,34603,34604],{"class":101,"line":16856},[99,34605,34606],{"class":168},"            # 取出张量中的数值\n",[99,34608,34609,34612,34614],{"class":101,"line":16868},[99,34610,34611],{"class":109},"            result",[99,34613,155],{"class":105},[99,34615,34616],{"class":109},"pre_lab.item()\n",[99,34618,34619,34622,34624],{"class":101,"line":16873},[99,34620,34621],{"class":109},"            label",[99,34623,155],{"class":105},[99,34625,34626],{"class":109},"b_y.item()\n",[99,34628,34629,34632,34634,34637,34640,34643,34645,34648],{"class":101,"line":16886},[99,34630,34631],{"class":158},"            print",[99,34633,110],{"class":109},[99,34635,34636],{"class":214},"\"预测值：\"",[99,34638,34639],{"class":109},",classes[result],",[99,34641,34642],{"class":214},"\"------\"",[99,34644,488],{"class":109},[99,34646,34647],{"class":214},"\"真实值：\"",[99,34649,34650],{"class":109},",classes[label])\n",[14,34652,34653],{},"（2）AlexNet",[53,34655,34656],{},[56,34657,34658],{},"神经网络构建",[90,34660,34662],{"className":30359,"code":34661,"language":30361,"meta":21,"style":21},"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",[96,34663,34664,34670,34680,34690,34702,34706,34723,34731,34746,34758,34800,34827,34870,34896,34940,34983,35026,35053,35057,35067,35072,35100,35119,35138,35142,35147,35155,35170,35180,35194,35204,35219,35234,35249,35260,35264,35269,35279,35294,35299,35313,35328,35340,35345,35356,35361,35367,35372,35384,35404,35409,35418],{"__ignoreMap":21},[99,34665,34666,34668],{"class":101,"line":102},[99,34667,30373],{"class":105},[99,34669,30376],{"class":109},[99,34671,34672,34674,34676,34678],{"class":101,"line":22},[99,34673,30718],{"class":105},[99,34675,30721],{"class":109},[99,34677,30373],{"class":105},[99,34679,30726],{"class":109},[99,34681,34682,34684,34686,34688],{"class":101,"line":1165},[99,34683,30718],{"class":105},[99,34685,30738],{"class":109},[99,34687,30373],{"class":105},[99,34689,30743],{"class":109},[99,34691,34692,34694,34697,34699],{"class":101,"line":1180},[99,34693,30373],{"class":105},[99,34695,34696],{"class":109}," torch.nn.functional ",[99,34698,31364],{"class":105},[99,34700,34701],{"class":109}," F\n",[99,34703,34704],{"class":101,"line":1186},[99,34705,2386],{"emptyLinePlaceholder":26},[99,34707,34708,34710,34713,34715,34717,34719,34721],{"class":101,"line":1200},[99,34709,14681],{"class":105},[99,34711,34712],{"class":1949}," AlexNet",[99,34714,110],{"class":109},[99,34716,30759],{"class":1949},[99,34718,668],{"class":109},[99,34720,30764],{"class":1949},[99,34722,30767],{"class":109},[99,34724,34725,34727,34729],{"class":101,"line":1206},[99,34726,30782],{"class":105},[99,34728,30785],{"class":158},[99,34730,30788],{"class":109},[99,34732,34733,34735,34738,34740,34742,34744],{"class":101,"line":1297},[99,34734,30798],{"class":158},[99,34736,34737],{"class":109},"(AlexNet,",[99,34739,30804],{"class":158},[99,34741,30807],{"class":109},[99,34743,30810],{"class":158},[99,34745,1962],{"class":109},[99,34747,34748,34750,34753,34755],{"class":101,"line":1303},[99,34749,30826],{"class":158},[99,34751,34752],{"class":109},".ReLu",[99,34754,155],{"class":105},[99,34756,34757],{"class":109},"nn.ReLU()\n",[99,34759,34760,34762,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798],{"class":101,"line":1315},[99,34761,30826],{"class":158},[99,34763,30829],{"class":109},[99,34765,155],{"class":105},[99,34767,30834],{"class":109},[99,34769,30837],{"class":5203},[99,34771,155],{"class":105},[99,34773,327],{"class":158},[99,34775,488],{"class":109},[99,34777,30846],{"class":5203},[99,34779,155],{"class":105},[99,34781,319],{"class":158},[99,34783,488],{"class":109},[99,34785,30855],{"class":5203},[99,34787,155],{"class":105},[99,34789,582],{"class":158},[99,34791,488],{"class":109},[99,34793,30910],{"class":5203},[99,34795,155],{"class":105},[99,34797,403],{"class":158},[99,34799,116],{"class":109},[99,34801,34802,34804,34806,34808,34811,34813,34815,34817,34819,34821,34823,34825],{"class":101,"line":1598},[99,34803,30826],{"class":158},[99,34805,30894],{"class":109},[99,34807,155],{"class":105},[99,34809,34810],{"class":109},"nn.MaxPool2d(",[99,34812,30855],{"class":5203},[99,34814,155],{"class":105},[99,34816,181],{"class":158},[99,34818,488],{"class":109},[99,34820,30910],{"class":5203},[99,34822,155],{"class":105},[99,34824,187],{"class":158},[99,34826,116],{"class":109},[99,34828,34829,34831,34833,34835,34837,34839,34841,34843,34845,34847,34849,34852,34854,34856,34858,34860,34862,34864,34866,34868],{"class":101,"line":1603},[99,34830,30826],{"class":158},[99,34832,30923],{"class":109},[99,34834,155],{"class":105},[99,34836,30834],{"class":109},[99,34838,30837],{"class":5203},[99,34840,155],{"class":105},[99,34842,319],{"class":158},[99,34844,488],{"class":109},[99,34846,30846],{"class":5203},[99,34848,155],{"class":105},[99,34850,34851],{"class":158},"256",[99,34853,488],{"class":109},[99,34855,30855],{"class":5203},[99,34857,155],{"class":105},[99,34859,429],{"class":158},[99,34861,488],{"class":109},[99,34863,30864],{"class":5203},[99,34865,155],{"class":105},[99,34867,187],{"class":158},[99,34869,116],{"class":109},[99,34871,34872,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894],{"class":101,"line":1609},[99,34873,30826],{"class":158},[99,34875,30958],{"class":109},[99,34877,155],{"class":105},[99,34879,34810],{"class":109},[99,34881,30855],{"class":5203},[99,34883,155],{"class":105},[99,34885,181],{"class":158},[99,34887,488],{"class":109},[99,34889,30910],{"class":5203},[99,34891,155],{"class":105},[99,34893,187],{"class":158},[99,34895,116],{"class":109},[99,34897,34898,34900,34903,34905,34907,34909,34911,34913,34915,34917,34919,34922,34924,34926,34928,34930,34932,34934,34936,34938],{"class":101,"line":1614},[99,34899,30826],{"class":158},[99,34901,34902],{"class":109},".c5",[99,34904,155],{"class":105},[99,34906,30834],{"class":109},[99,34908,30837],{"class":5203},[99,34910,155],{"class":105},[99,34912,34851],{"class":158},[99,34914,488],{"class":109},[99,34916,30846],{"class":5203},[99,34918,155],{"class":105},[99,34920,34921],{"class":158},"384",[99,34923,488],{"class":109},[99,34925,30855],{"class":5203},[99,34927,155],{"class":105},[99,34929,181],{"class":158},[99,34931,488],{"class":109},[99,34933,30864],{"class":5203},[99,34935,155],{"class":105},[99,34937,327],{"class":158},[99,34939,116],{"class":109},[99,34941,34942,34944,34947,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981],{"class":101,"line":1628},[99,34943,30826],{"class":158},[99,34945,34946],{"class":109},".c6",[99,34948,155],{"class":105},[99,34950,30834],{"class":109},[99,34952,30837],{"class":5203},[99,34954,155],{"class":105},[99,34956,34921],{"class":158},[99,34958,488],{"class":109},[99,34960,30846],{"class":5203},[99,34962,155],{"class":105},[99,34964,34921],{"class":158},[99,34966,488],{"class":109},[99,34968,30855],{"class":5203},[99,34970,155],{"class":105},[99,34972,181],{"class":158},[99,34974,488],{"class":109},[99,34976,30864],{"class":5203},[99,34978,155],{"class":105},[99,34980,327],{"class":158},[99,34982,116],{"class":109},[99,34984,34985,34987,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024],{"class":101,"line":1633},[99,34986,30826],{"class":158},[99,34988,34989],{"class":109},".c7",[99,34991,155],{"class":105},[99,34993,30834],{"class":109},[99,34995,30837],{"class":5203},[99,34997,155],{"class":105},[99,34999,34921],{"class":158},[99,35001,488],{"class":109},[99,35003,30846],{"class":5203},[99,35005,155],{"class":105},[99,35007,34851],{"class":158},[99,35009,488],{"class":109},[99,35011,30855],{"class":5203},[99,35013,155],{"class":105},[99,35015,181],{"class":158},[99,35017,488],{"class":109},[99,35019,30864],{"class":5203},[99,35021,155],{"class":105},[99,35023,327],{"class":158},[99,35025,116],{"class":109},[99,35027,35028,35030,35033,35035,35037,35039,35041,35043,35045,35047,35049,35051],{"class":101,"line":1639},[99,35029,30826],{"class":158},[99,35031,35032],{"class":109},".s8",[99,35034,155],{"class":105},[99,35036,34810],{"class":109},[99,35038,30855],{"class":5203},[99,35040,155],{"class":105},[99,35042,181],{"class":158},[99,35044,488],{"class":109},[99,35046,30910],{"class":5203},[99,35048,155],{"class":105},[99,35050,187],{"class":158},[99,35052,116],{"class":109},[99,35054,35055],{"class":101,"line":1660},[99,35056,30983],{"class":168},[99,35058,35059,35061,35063,35065],{"class":101,"line":1665},[99,35060,30826],{"class":158},[99,35062,30990],{"class":109},[99,35064,155],{"class":105},[99,35066,30995],{"class":109},[99,35068,35069],{"class":101,"line":1679},[99,35070,35071],{"class":168},"       # 定义全连接层\n",[99,35073,35074,35076,35079,35081,35083,35085,35087,35089,35091,35093,35095,35098],{"class":101,"line":1684},[99,35075,30826],{"class":158},[99,35077,35078],{"class":109},".f1",[99,35080,155],{"class":105},[99,35082,31012],{"class":109},[99,35084,454],{"class":158},[99,35086,565],{"class":105},[99,35088,454],{"class":158},[99,35090,565],{"class":105},[99,35092,34851],{"class":158},[99,35094,488],{"class":109},[99,35096,35097],{"class":158},"4096",[99,35099,116],{"class":109},[99,35101,35102,35104,35107,35109,35111,35113,35115,35117],{"class":101,"line":1713},[99,35103,30826],{"class":158},[99,35105,35106],{"class":109},".f2",[99,35108,155],{"class":105},[99,35110,31012],{"class":109},[99,35112,35097],{"class":158},[99,35114,488],{"class":109},[99,35116,35097],{"class":158},[99,35118,116],{"class":109},[99,35120,35121,35123,35126,35128,35130,35132,35134,35136],{"class":101,"line":1718},[99,35122,30826],{"class":158},[99,35124,35125],{"class":109},".f3",[99,35127,155],{"class":105},[99,35129,31012],{"class":109},[99,35131,35097],{"class":158},[99,35133,488],{"class":109},[99,35135,556],{"class":158},[99,35137,116],{"class":109},[99,35139,35140],{"class":101,"line":1735},[99,35141,2386],{"emptyLinePlaceholder":26},[99,35143,35144],{"class":101,"line":1740},[99,35145,35146],{"class":168},"    # 定义前向传播\n",[99,35148,35149,35151,35153],{"class":101,"line":1745},[99,35150,30782],{"class":105},[99,35152,31074],{"class":1949},[99,35154,31077],{"class":109},[99,35156,35157,35159,35161,35163,35166,35168],{"class":101,"line":1750},[99,35158,31082],{"class":109},[99,35160,155],{"class":105},[99,35162,30804],{"class":158},[99,35164,35165],{"class":109},".ReLu(",[99,35167,30804],{"class":158},[99,35169,31094],{"class":109},[99,35171,35172,35174,35176,35178],{"class":101,"line":1764},[99,35173,31082],{"class":109},[99,35175,155],{"class":105},[99,35177,30804],{"class":158},[99,35179,31105],{"class":109},[99,35181,35182,35184,35186,35188,35190,35192],{"class":101,"line":1769},[99,35183,31082],{"class":109},[99,35185,155],{"class":105},[99,35187,30804],{"class":158},[99,35189,35165],{"class":109},[99,35191,30804],{"class":158},[99,35193,31120],{"class":109},[99,35195,35196,35198,35200,35202],{"class":101,"line":2563},[99,35197,31082],{"class":109},[99,35199,155],{"class":105},[99,35201,30804],{"class":158},[99,35203,31131],{"class":109},[99,35205,35206,35208,35210,35212,35214,35216],{"class":101,"line":2577},[99,35207,31082],{"class":109},[99,35209,155],{"class":105},[99,35211,30804],{"class":158},[99,35213,35165],{"class":109},[99,35215,30804],{"class":158},[99,35217,35218],{"class":109},".c5(x))\n",[99,35220,35221,35223,35225,35227,35229,35231],{"class":101,"line":2585},[99,35222,31082],{"class":109},[99,35224,155],{"class":105},[99,35226,30804],{"class":158},[99,35228,35165],{"class":109},[99,35230,30804],{"class":158},[99,35232,35233],{"class":109},".c6(x))\n",[99,35235,35236,35238,35240,35242,35244,35246],{"class":101,"line":2590},[99,35237,31082],{"class":109},[99,35239,155],{"class":105},[99,35241,30804],{"class":158},[99,35243,35165],{"class":109},[99,35245,30804],{"class":158},[99,35247,35248],{"class":109},".c7(x))\n",[99,35250,35251,35253,35255,35257],{"class":101,"line":2596},[99,35252,31082],{"class":109},[99,35254,155],{"class":105},[99,35256,30804],{"class":158},[99,35258,35259],{"class":109},".s8(x)\n",[99,35261,35262],{"class":101,"line":2602},[99,35263,2386],{"emptyLinePlaceholder":26},[99,35265,35266],{"class":101,"line":2607},[99,35267,35268],{"class":168},"        # 展平加线性全连接层\n",[99,35270,35271,35273,35275,35277],{"class":101,"line":7935},[99,35272,31082],{"class":109},[99,35274,155],{"class":105},[99,35276,30804],{"class":158},[99,35278,31142],{"class":109},[99,35280,35281,35283,35285,35287,35289,35291],{"class":101,"line":7959},[99,35282,31082],{"class":109},[99,35284,155],{"class":105},[99,35286,30804],{"class":158},[99,35288,35165],{"class":109},[99,35290,30804],{"class":158},[99,35292,35293],{"class":109},".f1(x))\n",[99,35295,35296],{"class":101,"line":7964},[99,35297,35298],{"class":168},"        # 还需要dropout对神经元随机进行失活\n",[99,35300,35301,35303,35305,35308,35311],{"class":101,"line":7970},[99,35302,31082],{"class":109},[99,35304,155],{"class":105},[99,35306,35307],{"class":109},"F.dropout(x,",[99,35309,35310],{"class":158},"0.5",[99,35312,116],{"class":109},[99,35314,35315,35317,35319,35321,35323,35325],{"class":101,"line":7997},[99,35316,31082],{"class":109},[99,35318,155],{"class":105},[99,35320,30804],{"class":158},[99,35322,35165],{"class":109},[99,35324,30804],{"class":158},[99,35326,35327],{"class":109},".f2(x))\n",[99,35329,35330,35332,35334,35336,35338],{"class":101,"line":8002},[99,35331,31082],{"class":109},[99,35333,155],{"class":105},[99,35335,35307],{"class":109},[99,35337,35310],{"class":158},[99,35339,116],{"class":109},[99,35341,35342],{"class":101,"line":8008},[99,35343,35344],{"class":168},"        # 直接输出\n",[99,35346,35347,35349,35351,35353],{"class":101,"line":8020},[99,35348,31082],{"class":109},[99,35350,155],{"class":105},[99,35352,30804],{"class":158},[99,35354,35355],{"class":109},".f3(x)\n",[99,35357,35358],{"class":101,"line":8032},[99,35359,35360],{"class":168},"        # 前向传播输出\n",[99,35362,35363,35365],{"class":101,"line":8044},[99,35364,14739],{"class":105},[99,35366,31190],{"class":109},[99,35368,35369],{"class":101,"line":9703},[99,35370,35371],{"class":168},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[99,35373,35374,35376,35378,35380,35382],{"class":101,"line":9728},[99,35375,1517],{"class":105},[99,35377,31201],{"class":158},[99,35379,2935],{"class":105},[99,35381,31206],{"class":214},[99,35383,3725],{"class":109},[99,35385,35386,35388,35390,35392,35394,35396,35398,35400,35402],{"class":101,"line":9751},[99,35387,31218],{"class":109},[99,35389,155],{"class":105},[99,35391,30432],{"class":109},[99,35393,31225],{"class":214},[99,35395,1690],{"class":105},[99,35397,31230],{"class":109},[99,35399,1687],{"class":105},[99,35401,30457],{"class":214},[99,35403,116],{"class":109},[99,35405,35406],{"class":101,"line":9775},[99,35407,35408],{"class":168},"    # 模型实例化，然后将实例化的模型放到设备中\n",[99,35410,35411,35413,35415],{"class":101,"line":9780},[99,35412,31270],{"class":109},[99,35414,155],{"class":105},[99,35416,35417],{"class":109},"AlexNet().to(device)\n",[99,35419,35420,35422,35424,35426,35428,35431,35433,35435],{"class":101,"line":9785},[99,35421,31280],{"class":158},[99,35423,31283],{"class":109},[99,35425,327],{"class":158},[99,35427,488],{"class":109},[99,35429,35430],{"class":158},"227",[99,35432,488],{"class":109},[99,35434,35430],{"class":158},[99,35436,31296],{"class":109},[53,35438,35439],{"start":22},[56,35440,31309],{},[90,35442,35444],{"className":30359,"code":35443,"language":30361,"meta":21,"style":21},"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",[96,35445,35446,35452,35458,35468,35474,35484,35494,35504,35514,35524,35528,35539,35549,35553,35557,35561,35569,35581,35591,35607,35617,35649,35663,35673,35683,35687,35697,35711,35721,35731,35741,35747,35751,35755,35759,35763,35767,35775,35795,35799,35803,35807,35811,35815,35831,35835,35839,35847,35851,35855,35863,35867,35871,35875,35883,35887,35891,35895,35899,35907,35911,35919,35923,35931,35935,35943,35947,35955,35959,35963,35971,35975,35979,35983,35995,36019,36033,36037,36041,36045,36053,36057,36065,36069,36077,36081,36089,36093,36101,36105,36113,36117,36129,36133,36141,36145,36153,36157,36161,36165,36169,36177,36181,36197,36201,36209,36213,36217,36221,36225,36229,36233,36237,36253,36257,36269,36273,36285,36289,36301,36305,36313,36317,36325,36329,36333,36338,36344,36348,36357,36361,36378,36382,36391,36395,36413,36426,36431,36444,36448,36452,36460,36464,36468,36476,36480,36488,36492,36500,36504,36508,36550,36592,36596,36600,36616,36620,36636,36640,36644,36652,36656,36660,36672,36710,36715,36720,36729,36733,36747,36757,36763,36769,36775,36781,36785,36789,36795,36799,36803,36811,36815,36833,36837,36841,36845,36861,36865,36869,36873,36877,36881,36901,36921,36925,36929,36933,36941,36949,36953,36969,36989,37009,37013,37017,37025,37033,37037,37041,37045,37057,37061,37071,37079,37096],{"__ignoreMap":21},[99,35447,35448,35450],{"class":101,"line":102},[99,35449,30373],{"class":105},[99,35451,31803],{"class":109},[99,35453,35454,35456],{"class":101,"line":22},[99,35455,30373],{"class":105},[99,35457,31810],{"class":109},[99,35459,35460,35462,35464,35466],{"class":101,"line":1165},[99,35461,30373],{"class":105},[99,35463,31821],{"class":109},[99,35465,31364],{"class":105},[99,35467,31826],{"class":109},[99,35469,35470,35472],{"class":101,"line":1180},[99,35471,30373],{"class":105},[99,35473,30376],{"class":109},[99,35475,35476,35478,35480,35482],{"class":101,"line":1186},[99,35477,30718],{"class":105},[99,35479,31396],{"class":109},[99,35481,30373],{"class":105},[99,35483,31843],{"class":109},[99,35485,35486,35488,35490,35492],{"class":101,"line":1200},[99,35487,30718],{"class":105},[99,35489,31349],{"class":109},[99,35491,30373],{"class":105},[99,35493,31354],{"class":109},[99,35495,35496,35498,35500,35502],{"class":101,"line":1206},[99,35497,30718],{"class":105},[99,35499,31379],{"class":109},[99,35501,30373],{"class":105},[99,35503,31384],{"class":109},[99,35505,35506,35508,35510,35512],{"class":101,"line":1297},[99,35507,30373],{"class":105},[99,35509,31396],{"class":109},[99,35511,31364],{"class":105},[99,35513,31401],{"class":109},[99,35515,35516,35518,35520,35522],{"class":101,"line":1303},[99,35517,30373],{"class":105},[99,35519,31413],{"class":109},[99,35521,31364],{"class":105},[99,35523,31418],{"class":109},[99,35525,35526],{"class":101,"line":1315},[99,35527,31888],{"class":168},[99,35529,35530,35532,35534,35536],{"class":101,"line":1598},[99,35531,30718],{"class":105},[99,35533,31895],{"class":109},[99,35535,30373],{"class":105},[99,35537,35538],{"class":109}," AlexNet\n",[99,35540,35541,35543,35545,35547],{"class":101,"line":1603},[99,35542,30718],{"class":105},[99,35544,30721],{"class":109},[99,35546,30373],{"class":105},[99,35548,30726],{"class":109},[99,35550,35551],{"class":101,"line":1609},[99,35552,2386],{"emptyLinePlaceholder":26},[99,35554,35555],{"class":101,"line":1614},[99,35556,2386],{"emptyLinePlaceholder":26},[99,35558,35559],{"class":101,"line":1628},[99,35560,31923],{"class":168},[99,35562,35563,35565,35567],{"class":101,"line":1633},[99,35564,31928],{"class":105},[99,35566,31931],{"class":1949},[99,35568,31934],{"class":109},[99,35570,35571,35573,35575,35577,35579],{"class":101,"line":1639},[99,35572,31939],{"class":109},[99,35574,155],{"class":105},[99,35576,31436],{"class":109},[99,35578,31444],{"class":214},[99,35580,31447],{"class":109},[99,35582,35583,35585,35587,35589],{"class":101,"line":1660},[99,35584,31952],{"class":5203},[99,35586,155],{"class":105},[99,35588,31457],{"class":158},[99,35590,31447],{"class":109},[99,35592,35593,35595,35597,35599,35601,35603,35605],{"class":101,"line":1665},[99,35594,31963],{"class":5203},[99,35596,155],{"class":105},[99,35598,31474],{"class":109},[99,35600,31477],{"class":5203},[99,35602,155],{"class":105},[99,35604,35430],{"class":158},[99,35606,31485],{"class":109},[99,35608,35609,35611,35613,35615],{"class":101,"line":1679},[99,35610,31980],{"class":5203},[99,35612,155],{"class":105},[99,35614,31457],{"class":158},[99,35616,116],{"class":109},[99,35618,35619,35621,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647],{"class":101,"line":1684},[99,35620,31991],{"class":109},[99,35622,155],{"class":105},[99,35624,31996],{"class":109},[99,35626,31999],{"class":158},[99,35628,110],{"class":109},[99,35630,32004],{"class":158},[99,35632,565],{"class":105},[99,35634,7345],{"class":158},[99,35636,32011],{"class":109},[99,35638,31999],{"class":158},[99,35640,110],{"class":109},[99,35642,32018],{"class":158},[99,35644,565],{"class":105},[99,35646,7345],{"class":158},[99,35648,32025],{"class":109},[99,35650,35651,35653,35655,35657,35659,35661],{"class":101,"line":1713},[99,35652,32030],{"class":109},[99,35654,155],{"class":105},[99,35656,32035],{"class":109},[99,35658,31518],{"class":5203},[99,35660,155],{"class":105},[99,35662,31523],{"class":109},[99,35664,35665,35667,35669,35671],{"class":101,"line":1718},[99,35666,32046],{"class":5203},[99,35668,155],{"class":105},[99,35670,32051],{"class":158},[99,35672,31447],{"class":109},[99,35674,35675,35677,35679,35681],{"class":101,"line":1735},[99,35676,32058],{"class":5203},[99,35678,155],{"class":105},[99,35680,31457],{"class":158},[99,35682,31447],{"class":109},[99,35684,35685],{"class":101,"line":1740},[99,35686,32069],{"class":168},[99,35688,35689,35691,35693,35695],{"class":101,"line":1745},[99,35690,32074],{"class":5203},[99,35692,155],{"class":105},[99,35694,505],{"class":158},[99,35696,116],{"class":109},[99,35698,35699,35701,35703,35705,35707,35709],{"class":101,"line":1750},[99,35700,32085],{"class":109},[99,35702,155],{"class":105},[99,35704,31515],{"class":109},[99,35706,31518],{"class":5203},[99,35708,155],{"class":105},[99,35710,32096],{"class":109},[99,35712,35713,35715,35717,35719],{"class":101,"line":1764},[99,35714,32101],{"class":5203},[99,35716,155],{"class":105},[99,35718,32051],{"class":158},[99,35720,31447],{"class":109},[99,35722,35723,35725,35727,35729],{"class":101,"line":1769},[99,35724,32112],{"class":5203},[99,35726,155],{"class":105},[99,35728,31457],{"class":158},[99,35730,31447],{"class":109},[99,35732,35733,35735,35737,35739],{"class":101,"line":2563},[99,35734,32123],{"class":5203},[99,35736,155],{"class":105},[99,35738,505],{"class":158},[99,35740,116],{"class":109},[99,35742,35743,35745],{"class":101,"line":2577},[99,35744,4076],{"class":105},[99,35746,32136],{"class":109},[99,35748,35749],{"class":101,"line":2585},[99,35750,2386],{"emptyLinePlaceholder":26},[99,35752,35753],{"class":101,"line":2590},[99,35754,32145],{"class":168},[99,35756,35757],{"class":101,"line":2596},[99,35758,32150],{"class":168},[99,35760,35761],{"class":101,"line":2602},[99,35762,2386],{"emptyLinePlaceholder":26},[99,35764,35765],{"class":101,"line":2607},[99,35766,32159],{"class":168},[99,35768,35769,35771,35773],{"class":101,"line":7935},[99,35770,31928],{"class":105},[99,35772,32166],{"class":1949},[99,35774,32169],{"class":109},[99,35776,35777,35779,35781,35783,35785,35787,35789,35791,35793],{"class":101,"line":7959},[99,35778,31218],{"class":109},[99,35780,155],{"class":105},[99,35782,30432],{"class":109},[99,35784,31225],{"class":214},[99,35786,1690],{"class":105},[99,35788,31230],{"class":109},[99,35790,1687],{"class":105},[99,35792,32188],{"class":214},[99,35794,116],{"class":109},[99,35796,35797],{"class":101,"line":7964},[99,35798,2386],{"emptyLinePlaceholder":26},[99,35800,35801],{"class":101,"line":7970},[99,35802,2386],{"emptyLinePlaceholder":26},[99,35804,35805],{"class":101,"line":7997},[99,35806,32203],{"class":168},[99,35808,35809],{"class":101,"line":8002},[99,35810,32208],{"class":168},[99,35812,35813],{"class":101,"line":8008},[99,35814,32213],{"class":168},[99,35816,35817,35819,35821,35823,35825,35827,35829],{"class":101,"line":8020},[99,35818,32218],{"class":109},[99,35820,155],{"class":105},[99,35822,32223],{"class":109},[99,35824,32226],{"class":5203},[99,35826,155],{"class":105},[99,35828,32231],{"class":158},[99,35830,116],{"class":109},[99,35832,35833],{"class":101,"line":8032},[99,35834,2386],{"emptyLinePlaceholder":26},[99,35836,35837],{"class":101,"line":8044},[99,35838,32242],{"class":168},[99,35840,35841,35843,35845],{"class":101,"line":9703},[99,35842,32247],{"class":109},[99,35844,155],{"class":105},[99,35846,32252],{"class":109},[99,35848,35849],{"class":101,"line":9728},[99,35850,2386],{"emptyLinePlaceholder":26},[99,35852,35853],{"class":101,"line":9751},[99,35854,32261],{"class":168},[99,35856,35857,35859,35861],{"class":101,"line":9775},[99,35858,31270],{"class":109},[99,35860,155],{"class":105},[99,35862,32270],{"class":109},[99,35864,35865],{"class":101,"line":9780},[99,35866,32275],{"class":168},[99,35868,35869],{"class":101,"line":9785},[99,35870,32280],{"class":168},[99,35872,35873],{"class":101,"line":9790},[99,35874,32285],{"class":168},[99,35876,35877,35879,35881],{"class":101,"line":9799},[99,35878,32290],{"class":109},[99,35880,155],{"class":105},[99,35882,32295],{"class":109},[99,35884,35885],{"class":101,"line":9804},[99,35886,2386],{"emptyLinePlaceholder":26},[99,35888,35889],{"class":101,"line":9810},[99,35890,2386],{"emptyLinePlaceholder":26},[99,35892,35893],{"class":101,"line":9831},[99,35894,32308],{"class":168},[99,35896,35897],{"class":101,"line":9837},[99,35898,32313],{"class":168},[99,35900,35901,35903,35905],{"class":101,"line":9851},[99,35902,32318],{"class":109},[99,35904,155],{"class":105},[99,35906,32323],{"class":158},[99,35908,35909],{"class":101,"line":9857},[99,35910,32328],{"class":168},[99,35912,35913,35915,35917],{"class":101,"line":9884},[99,35914,32333],{"class":109},[99,35916,155],{"class":105},[99,35918,32338],{"class":109},[99,35920,35921],{"class":101,"line":9893},[99,35922,32343],{"class":168},[99,35924,35925,35927,35929],{"class":101,"line":9899},[99,35926,32348],{"class":109},[99,35928,155],{"class":105},[99,35930,32338],{"class":109},[99,35932,35933],{"class":101,"line":9907},[99,35934,32357],{"class":168},[99,35936,35937,35939,35941],{"class":101,"line":9912},[99,35938,32362],{"class":109},[99,35940,155],{"class":105},[99,35942,32338],{"class":109},[99,35944,35945],{"class":101,"line":16591},[99,35946,32371],{"class":168},[99,35948,35949,35951,35953],{"class":101,"line":16597},[99,35950,32376],{"class":109},[99,35952,155],{"class":105},[99,35954,32338],{"class":109},[99,35956,35957],{"class":101,"line":16620},[99,35958,2386],{"emptyLinePlaceholder":26},[99,35960,35961],{"class":101,"line":16626},[99,35962,32389],{"class":168},[99,35964,35965,35967,35969],{"class":101,"line":16649},[99,35966,32394],{"class":109},[99,35968,155],{"class":105},[99,35970,32399],{"class":109},[99,35972,35973],{"class":101,"line":16663},[99,35974,2386],{"emptyLinePlaceholder":26},[99,35976,35977],{"class":101,"line":16683},[99,35978,2386],{"emptyLinePlaceholder":26},[99,35980,35981],{"class":101,"line":16689},[99,35982,32412],{"class":168},[99,35984,35985,35987,35989,35991,35993],{"class":101,"line":16700},[99,35986,3187],{"class":105},[99,35988,32419],{"class":109},[99,35990,26032],{"class":105},[99,35992,32424],{"class":158},[99,35994,32427],{"class":109},[99,35996,35997,35999,36001,36003,36005,36007,36009,36011,36013,36015,36017],{"class":101,"line":16723},[99,35998,32432],{"class":158},[99,36000,110],{"class":109},[99,36002,32437],{"class":214},[99,36004,32440],{"class":158},[99,36006,694],{"class":214},[99,36008,32440],{"class":158},[99,36010,361],{"class":214},[99,36012,32449],{"class":109},[99,36014,642],{"class":105},[99,36016,327],{"class":158},[99,36018,30478],{"class":109},[99,36020,36021,36023,36025,36027,36029,36031],{"class":101,"line":16745},[99,36022,32432],{"class":158},[99,36024,110],{"class":109},[99,36026,32464],{"class":214},[99,36028,565],{"class":105},[99,36030,556],{"class":158},[99,36032,116],{"class":109},[99,36034,36035],{"class":101,"line":16750},[99,36036,2386],{"emptyLinePlaceholder":26},[99,36038,36039],{"class":101,"line":16756},[99,36040,32479],{"class":168},[99,36042,36043],{"class":101,"line":16770},[99,36044,32484],{"class":168},[99,36046,36047,36049,36051],{"class":101,"line":16783},[99,36048,32489],{"class":109},[99,36050,155],{"class":105},[99,36052,32323],{"class":158},[99,36054,36055],{"class":101,"line":16788},[99,36056,32498],{"class":168},[99,36058,36059,36061,36063],{"class":101,"line":16802},[99,36060,32503],{"class":109},[99,36062,155],{"class":105},[99,36064,3071],{"class":158},[99,36066,36067],{"class":101,"line":16807},[99,36068,32512],{"class":168},[99,36070,36071,36073,36075],{"class":101,"line":16813},[99,36072,32517],{"class":109},[99,36074,155],{"class":105},[99,36076,32323],{"class":158},[99,36078,36079],{"class":101,"line":16818},[99,36080,32526],{"class":168},[99,36082,36083,36085,36087],{"class":101,"line":16832},[99,36084,32531],{"class":109},[99,36086,155],{"class":105},[99,36088,3071],{"class":158},[99,36090,36091],{"class":101,"line":16837},[99,36092,32540],{"class":168},[99,36094,36095,36097,36099],{"class":101,"line":16842},[99,36096,32545],{"class":109},[99,36098,155],{"class":105},[99,36100,3071],{"class":158},[99,36102,36103],{"class":101,"line":16856},[99,36104,32554],{"class":168},[99,36106,36107,36109,36111],{"class":101,"line":16868},[99,36108,32559],{"class":109},[99,36110,155],{"class":105},[99,36112,3071],{"class":158},[99,36114,36115],{"class":101,"line":16873},[99,36116,32568],{"class":168},[99,36118,36119,36121,36123,36125,36127],{"class":101,"line":16886},[99,36120,3389],{"class":105},[99,36122,31582],{"class":109},[99,36124,26032],{"class":105},[99,36126,31587],{"class":158},[99,36128,32581],{"class":109},[99,36130,36131],{"class":101,"line":16891},[99,36132,32586],{"class":168},[99,36134,36135,36137,36139],{"class":101,"line":16896},[99,36136,32591],{"class":109},[99,36138,155],{"class":105},[99,36140,32596],{"class":109},[99,36142,36143],{"class":101,"line":16901},[99,36144,32601],{"class":168},[99,36146,36147,36149,36151],{"class":101,"line":16914},[99,36148,32606],{"class":109},[99,36150,155],{"class":105},[99,36152,32611],{"class":109},[99,36154,36155],{"class":101,"line":16919},[99,36156,32617],{"class":168},[99,36158,36159],{"class":101,"line":32614},[99,36160,32623],{"class":109},[99,36162,36163],{"class":101,"line":32620},[99,36164,32629],{"class":168},[99,36166,36167],{"class":101,"line":32626},[99,36168,32635],{"class":168},[99,36170,36171,36173,36175],{"class":101,"line":32632},[99,36172,32641],{"class":109},[99,36174,155],{"class":105},[99,36176,32646],{"class":109},[99,36178,36179],{"class":101,"line":32638},[99,36180,32652],{"class":168},[99,36182,36183,36185,36187,36189,36191,36193,36195],{"class":101,"line":32649},[99,36184,32658],{"class":109},[99,36186,155],{"class":105},[99,36188,32663],{"class":109},[99,36190,32666],{"class":5203},[99,36192,155],{"class":105},[99,36194,327],{"class":158},[99,36196,116],{"class":109},[99,36198,36199],{"class":101,"line":32655},[99,36200,32678],{"class":168},[99,36202,36203,36205,36207],{"class":101,"line":32675},[99,36204,32684],{"class":109},[99,36206,155],{"class":105},[99,36208,32689],{"class":109},[99,36210,36211],{"class":101,"line":32681},[99,36212,32695],{"class":168},[99,36214,36215],{"class":101,"line":32692},[99,36216,32701],{"class":109},[99,36218,36219],{"class":101,"line":32698},[99,36220,32707],{"class":168},[99,36222,36223],{"class":101,"line":32704},[99,36224,32713],{"class":109},[99,36226,36227],{"class":101,"line":32710},[99,36228,32719],{"class":168},[99,36230,36231],{"class":101,"line":32716},[99,36232,32725],{"class":109},[99,36234,36235],{"class":101,"line":32722},[99,36236,32731],{"class":168},[99,36238,36239,36241,36243,36245,36247,36249,36251],{"class":101,"line":32728},[99,36240,32737],{"class":109},[99,36242,9464],{"class":105},[99,36244,32742],{"class":109},[99,36246,565],{"class":105},[99,36248,32747],{"class":109},[99,36250,301],{"class":158},[99,36252,116],{"class":109},[99,36254,36255],{"class":101,"line":32734},[99,36256,32757],{"class":168},[99,36258,36259,36261,36263,36265,36267],{"class":101,"line":32754},[99,36260,32763],{"class":109},[99,36262,9464],{"class":105},[99,36264,32768],{"class":109},[99,36266,2935],{"class":105},[99,36268,32773],{"class":109},[99,36270,36271],{"class":101,"line":32760},[99,36272,32779],{"class":168},[99,36274,36275,36277,36279,36281,36283],{"class":101,"line":32776},[99,36276,32785],{"class":109},[99,36278,9464],{"class":105},[99,36280,32747],{"class":109},[99,36282,301],{"class":158},[99,36284,116],{"class":109},[99,36286,36287],{"class":101,"line":32782},[99,36288,32799],{"class":168},[99,36290,36291,36293,36295,36297,36299],{"class":101,"line":32796},[99,36292,3389],{"class":105},[99,36294,32807],{"class":109},[99,36296,26032],{"class":105},[99,36298,31587],{"class":158},[99,36300,32814],{"class":109},[99,36302,36303],{"class":101,"line":32802},[99,36304,32820],{"class":168},[99,36306,36307,36309,36311],{"class":101,"line":32817},[99,36308,32591],{"class":109},[99,36310,155],{"class":105},[99,36312,32596],{"class":109},[99,36314,36315],{"class":101,"line":32823},[99,36316,32835],{"class":168},[99,36318,36319,36321,36323],{"class":101,"line":32832},[99,36320,32606],{"class":109},[99,36322,155],{"class":105},[99,36324,32611],{"class":109},[99,36326,36327],{"class":101,"line":32838},[99,36328,32850],{"class":168},[99,36330,36331],{"class":101,"line":32847},[99,36332,32856],{"class":109},[99,36334,36335],{"class":101,"line":32853},[99,36336,36337],{"class":168},"            # 验证时不计算梯度以节省内存\u002F计算\n",[99,36339,36340,36342],{"class":101,"line":32859},[99,36341,32862],{"class":105},[99,36343,32865],{"class":109},[99,36345,36346],{"class":101,"line":32868},[99,36347,32871],{"class":168},[99,36349,36350,36353,36355],{"class":101,"line":32874},[99,36351,36352],{"class":109},"                output",[99,36354,155],{"class":105},[99,36356,32646],{"class":109},[99,36358,36359],{"class":101,"line":32885},[99,36360,32888],{"class":168},[99,36362,36363,36366,36368,36370,36372,36374,36376],{"class":101,"line":32891},[99,36364,36365],{"class":109},"                pre_lab",[99,36367,155],{"class":105},[99,36369,32663],{"class":109},[99,36371,32666],{"class":5203},[99,36373,155],{"class":105},[99,36375,327],{"class":158},[99,36377,116],{"class":109},[99,36379,36380],{"class":101,"line":32910},[99,36381,32913],{"class":168},[99,36383,36384,36387,36389],{"class":101,"line":32916},[99,36385,36386],{"class":109},"                val_batch_loss",[99,36388,155],{"class":105},[99,36390,32689],{"class":109},[99,36392,36393],{"class":101,"line":32927},[99,36394,32930],{"class":168},[99,36396,36397,36400,36402,36405,36407,36409,36411],{"class":101,"line":32933},[99,36398,36399],{"class":109},"                val_loss",[99,36401,9464],{"class":105},[99,36403,36404],{"class":109},"val_batch_loss.item()",[99,36406,565],{"class":105},[99,36408,32747],{"class":109},[99,36410,301],{"class":158},[99,36412,116],{"class":109},[99,36414,36415,36418,36420,36422,36424],{"class":101,"line":32953},[99,36416,36417],{"class":109},"                val_corrects",[99,36419,9464],{"class":105},[99,36421,32768],{"class":109},[99,36423,2935],{"class":105},[99,36425,32773],{"class":109},[99,36427,36428],{"class":101,"line":32969},[99,36429,36430],{"class":168},"            # 当前用于验证的样本数量\n",[99,36432,36433,36436,36438,36440,36442],{"class":101,"line":32975},[99,36434,36435],{"class":109},"            val_num",[99,36437,9464],{"class":105},[99,36439,32747],{"class":109},[99,36441,301],{"class":158},[99,36443,116],{"class":109},[99,36445,36446],{"class":101,"line":32989},[99,36447,32992],{"class":168},[99,36449,36450],{"class":101,"line":32995},[99,36451,32998],{"class":168},[99,36453,36454,36456,36458],{"class":101,"line":33001},[99,36455,33004],{"class":109},[99,36457,694],{"class":105},[99,36459,33009],{"class":109},[99,36461,36462],{"class":101,"line":33012},[99,36463,33015],{"class":168},[99,36465,36466],{"class":101,"line":33018},[99,36467,33021],{"class":168},[99,36469,36470,36472,36474],{"class":101,"line":33024},[99,36471,33027],{"class":109},[99,36473,694],{"class":105},[99,36475,33009],{"class":109},[99,36477,36478],{"class":101,"line":33034},[99,36479,33037],{"class":168},[99,36481,36482,36484,36486],{"class":101,"line":33040},[99,36483,33043],{"class":109},[99,36485,694],{"class":105},[99,36487,33048],{"class":109},[99,36489,36490],{"class":101,"line":33051},[99,36491,33054],{"class":168},[99,36493,36494,36496,36498],{"class":101,"line":33057},[99,36495,33060],{"class":109},[99,36497,694],{"class":105},[99,36499,33048],{"class":109},[99,36501,36502],{"class":101,"line":33067},[99,36503,2386],{"emptyLinePlaceholder":26},[99,36505,36506],{"class":101,"line":33072},[99,36507,33075],{"class":168},[99,36509,36510,36512,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548],{"class":101,"line":33078},[99,36511,32432],{"class":158},[99,36513,110],{"class":109},[99,36515,3578],{"class":214},[99,36517,32440],{"class":158},[99,36519,33089],{"class":214},[99,36521,1006],{"class":158},[99,36523,33094],{"class":105},[99,36525,1056],{"class":158},[99,36527,33099],{"class":214},[99,36529,1006],{"class":158},[99,36531,33094],{"class":105},[99,36533,1056],{"class":158},[99,36535,3578],{"class":214},[99,36537,33110],{"class":109},[99,36539,642],{"class":105},[99,36541,327],{"class":158},[99,36543,33117],{"class":109},[99,36545,642],{"class":105},[99,36547,327],{"class":158},[99,36549,33124],{"class":109},[99,36551,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590],{"class":101,"line":33127},[99,36553,32432],{"class":158},[99,36555,110],{"class":109},[99,36557,3578],{"class":214},[99,36559,32440],{"class":158},[99,36561,33138],{"class":214},[99,36563,1006],{"class":158},[99,36565,33094],{"class":105},[99,36567,1056],{"class":158},[99,36569,33147],{"class":214},[99,36571,1006],{"class":158},[99,36573,33094],{"class":105},[99,36575,1056],{"class":158},[99,36577,3578],{"class":214},[99,36579,33158],{"class":109},[99,36581,642],{"class":105},[99,36583,327],{"class":158},[99,36585,33165],{"class":109},[99,36587,642],{"class":105},[99,36589,327],{"class":158},[99,36591,33124],{"class":109},[99,36593,36594],{"class":101,"line":33174},[99,36595,2386],{"emptyLinePlaceholder":26},[99,36597,36598],{"class":101,"line":33179},[99,36599,33182],{"class":168},[99,36601,36602,36604,36606,36608,36610,36612,36614],{"class":101,"line":33185},[99,36603,2483],{"class":105},[99,36605,33190],{"class":109},[99,36607,642],{"class":105},[99,36609,327],{"class":158},[99,36611,1050],{"class":109},[99,36613,1070],{"class":105},[99,36615,33201],{"class":109},[99,36617,36618],{"class":101,"line":33204},[99,36619,33207],{"class":168},[99,36621,36622,36624,36626,36628,36630,36632,36634],{"class":101,"line":33210},[99,36623,33213],{"class":109},[99,36625,149],{"class":158},[99,36627,155],{"class":105},[99,36629,33220],{"class":109},[99,36631,642],{"class":105},[99,36633,327],{"class":158},[99,36635,33227],{"class":109},[99,36637,36638],{"class":101,"line":33230},[99,36639,33233],{"class":168},[99,36641,36642],{"class":101,"line":33236},[99,36643,33239],{"class":168},[99,36645,36646,36648,36650],{"class":101,"line":33242},[99,36647,33245],{"class":109},[99,36649,155],{"class":105},[99,36651,32295],{"class":109},[99,36653,36654],{"class":101,"line":33252},[99,36655,2386],{"emptyLinePlaceholder":26},[99,36657,36658],{"class":101,"line":33257},[99,36659,33260],{"class":168},[99,36661,36662,36664,36666,36668,36670],{"class":101,"line":33263},[99,36663,33266],{"class":109},[99,36665,155],{"class":105},[99,36667,33271],{"class":109},[99,36669,642],{"class":105},[99,36671,33276],{"class":109},[99,36673,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708],{"class":101,"line":33279},[99,36675,32432],{"class":158},[99,36677,110],{"class":109},[99,36679,33286],{"class":214},[99,36681,1006],{"class":158},[99,36683,33291],{"class":105},[99,36685,1056],{"class":158},[99,36687,654],{"class":214},[99,36689,1006],{"class":158},[99,36691,33291],{"class":105},[99,36693,1056],{"class":158},[99,36695,33304],{"class":214},[99,36697,33307],{"class":109},[99,36699,33310],{"class":105},[99,36701,1017],{"class":158},[99,36703,33315],{"class":109},[99,36705,438],{"class":105},[99,36707,1017],{"class":158},[99,36709,30478],{"class":109},[99,36711,36712],{"class":101,"line":33324},[99,36713,36714],{"class":168},"    # 选择最优参数并保存\n",[99,36716,36717],{"class":101,"line":33330},[99,36718,36719],{"class":168},"    # 保存最佳模型权重字典\n",[99,36721,36722,36725,36727],{"class":101,"line":33336},[99,36723,36724],{"class":109},"    torch.save(best_model_wts,",[99,36726,33348],{"class":214},[99,36728,116],{"class":109},[99,36730,36731],{"class":101,"line":33342},[99,36732,33368],{"class":168},[99,36734,36735,36737,36739,36741,36743,36745],{"class":101,"line":33353},[99,36736,33374],{"class":109},[99,36738,155],{"class":105},[99,36740,33379],{"class":109},[99,36742,33382],{"class":5203},[99,36744,155],{"class":105},[99,36746,1532],{"class":109},[99,36748,36749,36751,36753,36755],{"class":101,"line":33359},[99,36750,33392],{"class":214},[99,36752,969],{"class":109},[99,36754,33397],{"class":158},[99,36756,33400],{"class":109},[99,36758,36759,36761],{"class":101,"line":33365},[99,36760,33406],{"class":214},[99,36762,33409],{"class":109},[99,36764,36765,36767],{"class":101,"line":33371},[99,36766,33415],{"class":214},[99,36768,33418],{"class":109},[99,36770,36771,36773],{"class":101,"line":33389},[99,36772,33424],{"class":214},[99,36774,33427],{"class":109},[99,36776,36777,36779],{"class":101,"line":33403},[99,36778,33433],{"class":214},[99,36780,33436],{"class":109},[99,36782,36783],{"class":101,"line":33412},[99,36784,33442],{"class":109},[99,36786,36787],{"class":101,"line":33421},[99,36788,33448],{"class":168},[99,36790,36791,36793],{"class":101,"line":33430},[99,36792,4076],{"class":105},[99,36794,33456],{"class":109},[99,36796,36797],{"class":101,"line":33439},[99,36798,2386],{"emptyLinePlaceholder":26},[99,36800,36801],{"class":101,"line":33445},[99,36802,33467],{"class":168},[99,36804,36805,36807,36809],{"class":101,"line":33451},[99,36806,31928],{"class":105},[99,36808,33475],{"class":1949},[99,36810,33478],{"class":109},[99,36812,36813],{"class":101,"line":33459},[99,36814,33484],{"class":168},[99,36816,36817,36819,36821,36823,36825,36827,36829,36831],{"class":101,"line":33464},[99,36818,33490],{"class":109},[99,36820,31674],{"class":5203},[99,36822,155],{"class":105},[99,36824,110],{"class":109},[99,36826,608],{"class":158},[99,36828,488],{"class":109},[99,36830,403],{"class":158},[99,36832,30478],{"class":109},[99,36834,36835],{"class":101,"line":33470},[99,36836,33510],{"class":168},[99,36838,36839],{"class":101,"line":33481},[99,36840,33516],{"class":168},[99,36842,36843],{"class":101,"line":33487},[99,36844,33522],{"class":168},[99,36846,36847,36849,36851,36853,36855,36857,36859],{"class":101,"line":33507},[99,36848,31708],{"class":109},[99,36850,327],{"class":158},[99,36852,488],{"class":109},[99,36854,187],{"class":158},[99,36856,488],{"class":109},[99,36858,327],{"class":158},[99,36860,116],{"class":109},[99,36862,36863],{"class":101,"line":33513},[99,36864,33545],{"class":168},[99,36866,36867],{"class":101,"line":33519},[99,36868,33551],{"class":168},[99,36870,36871],{"class":101,"line":33525},[99,36872,33557],{"class":168},[99,36874,36875],{"class":101,"line":33542},[99,36876,33563],{"class":168},[99,36878,36879],{"class":101,"line":33548},[99,36880,33569],{"class":168},[99,36882,36883,36885,36887,36889,36891,36893,36895,36897,36899],{"class":101,"line":33554},[99,36884,33575],{"class":109},[99,36886,33578],{"class":214},[99,36888,33581],{"class":109},[99,36890,33584],{"class":214},[99,36892,488],{"class":109},[99,36894,33589],{"class":5203},[99,36896,155],{"class":105},[99,36898,33594],{"class":214},[99,36900,116],{"class":109},[99,36902,36903,36905,36907,36909,36911,36913,36915,36917,36919],{"class":101,"line":33560},[99,36904,33575],{"class":109},[99,36906,33578],{"class":214},[99,36908,33606],{"class":109},[99,36910,33609],{"class":214},[99,36912,488],{"class":109},[99,36914,33589],{"class":5203},[99,36916,155],{"class":105},[99,36918,33618],{"class":214},[99,36920,116],{"class":109},[99,36922,36923],{"class":101,"line":33566},[99,36924,33626],{"class":168},[99,36926,36927],{"class":101,"line":33572},[99,36928,33632],{"class":109},[99,36930,36931],{"class":101,"line":33599},[99,36932,33638],{"class":168},[99,36934,36935,36937,36939],{"class":101,"line":33623},[99,36936,33644],{"class":109},[99,36938,33647],{"class":214},[99,36940,116],{"class":109},[99,36942,36943,36945,36947],{"class":101,"line":33629},[99,36944,33655],{"class":109},[99,36946,33658],{"class":214},[99,36948,116],{"class":109},[99,36950,36951],{"class":101,"line":33635},[99,36952,33666],{"class":168},[99,36954,36955,36957,36959,36961,36963,36965,36967],{"class":101,"line":33641},[99,36956,31708],{"class":109},[99,36958,327],{"class":158},[99,36960,488],{"class":109},[99,36962,187],{"class":158},[99,36964,488],{"class":109},[99,36966,187],{"class":158},[99,36968,116],{"class":109},[99,36970,36971,36973,36975,36977,36979,36981,36983,36985,36987],{"class":101,"line":33652},[99,36972,33575],{"class":109},[99,36974,33578],{"class":214},[99,36976,33693],{"class":109},[99,36978,33584],{"class":214},[99,36980,488],{"class":109},[99,36982,33589],{"class":5203},[99,36984,155],{"class":105},[99,36986,33704],{"class":214},[99,36988,116],{"class":109},[99,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007],{"class":101,"line":33663},[99,36992,33575],{"class":109},[99,36994,33578],{"class":214},[99,36996,33716],{"class":109},[99,36998,33609],{"class":214},[99,37000,488],{"class":109},[99,37002,33589],{"class":5203},[99,37004,155],{"class":105},[99,37006,33727],{"class":214},[99,37008,116],{"class":109},[99,37010,37011],{"class":101,"line":33669},[99,37012,33735],{"class":168},[99,37014,37015],{"class":101,"line":33686},[99,37016,33632],{"class":109},[99,37018,37019,37021,37023],{"class":101,"line":33709},[99,37020,33644],{"class":109},[99,37022,33578],{"class":214},[99,37024,116],{"class":109},[99,37026,37027,37029,37031],{"class":101,"line":33732},[99,37028,33655],{"class":109},[99,37030,33757],{"class":214},[99,37032,116],{"class":109},[99,37034,37035],{"class":101,"line":33738},[99,37036,33765],{"class":109},[99,37038,37039],{"class":101,"line":33743},[99,37040,2386],{"emptyLinePlaceholder":26},[99,37042,37043],{"class":101,"line":33752},[99,37044,33776],{"class":168},[99,37046,37047,37049,37051,37053,37055],{"class":101,"line":33762},[99,37048,1517],{"class":105},[99,37050,31201],{"class":158},[99,37052,2935],{"class":105},[99,37054,31206],{"class":214},[99,37056,3725],{"class":109},[99,37058,37059],{"class":101,"line":33768},[99,37060,33795],{"class":168},[99,37062,37063,37066,37068],{"class":101,"line":33773},[99,37064,37065],{"class":109},"    AlexNet",[99,37067,155],{"class":105},[99,37069,37070],{"class":109},"AlexNet()\n",[99,37072,37073,37075,37077],{"class":101,"line":33779},[99,37074,33812],{"class":109},[99,37076,155],{"class":105},[99,37078,33817],{"class":109},[99,37080,37081,37083,37085,37088,37090,37092,37094],{"class":101,"line":33792},[99,37082,33374],{"class":109},[99,37084,155],{"class":105},[99,37086,37087],{"class":109},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[99,37089,33830],{"class":5203},[99,37091,155],{"class":105},[99,37093,810],{"class":158},[99,37095,116],{"class":109},[99,37097,37098],{"class":101,"line":33798},[99,37099,33842],{"class":109},[53,37101,37102],{"start":1165},[56,37103,33855],{},[90,37105,37107],{"className":30359,"code":37106,"language":30361,"meta":21,"style":21},"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",[96,37108,37109,37115,37125,37135,37145,37149,37159,37169,37180,37184,37188,37192,37200,37216,37226,37242,37252,37266,37270,37280,37290,37300,37306,37310,37314,37322,37326,37342,37350,37354,37358,37366,37374,37378,37382,37386,37390,37396,37400,37410,37418,37426,37430,37434,37438,37446,37450,37466,37470,37474,37478,37490,37494,37506,37510,37514,37526,37530,37540,37544,37548,37560,37564,37572,37576,37580,37588,37592,37600,37604,37608,37612,37616,37620,37636,37644,37648,37652,37700,37706,37710,37720,37728,37736,37740,37744,37748,37752,37760,37764,37780,37784,37792,37800],{"__ignoreMap":21},[99,37110,37111,37113],{"class":101,"line":102},[99,37112,30373],{"class":105},[99,37114,30376],{"class":109},[99,37116,37117,37119,37121,37123],{"class":101,"line":22},[99,37118,30373],{"class":105},[99,37120,31396],{"class":109},[99,37122,31364],{"class":105},[99,37124,31401],{"class":109},[99,37126,37127,37129,37131,37133],{"class":101,"line":1165},[99,37128,30718],{"class":105},[99,37130,33883],{"class":109},[99,37132,30373],{"class":105},[99,37134,33888],{"class":109},[99,37136,37137,37139,37141,37143],{"class":101,"line":1180},[99,37138,30718],{"class":105},[99,37140,31379],{"class":109},[99,37142,30373],{"class":105},[99,37144,31384],{"class":109},[99,37146,37147],{"class":101,"line":1186},[99,37148,33903],{"class":168},[99,37150,37151,37153,37155,37157],{"class":101,"line":1200},[99,37152,30718],{"class":105},[99,37154,31349],{"class":109},[99,37156,30373],{"class":105},[99,37158,31354],{"class":109},[99,37160,37161,37163,37165,37167],{"class":101,"line":1206},[99,37162,30718],{"class":105},[99,37164,31895],{"class":109},[99,37166,30373],{"class":105},[99,37168,35538],{"class":109},[99,37170,37171,37173,37176,37178],{"class":101,"line":1297},[99,37172,30718],{"class":105},[99,37174,37175],{"class":109}," 练习.AlexNet.model ",[99,37177,30373],{"class":105},[99,37179,35538],{"class":109},[99,37181,37182],{"class":101,"line":1303},[99,37183,2386],{"emptyLinePlaceholder":26},[99,37185,37186],{"class":101,"line":1315},[99,37187,2386],{"emptyLinePlaceholder":26},[99,37189,37190],{"class":101,"line":1598},[99,37191,33932],{"class":168},[99,37193,37194,37196,37198],{"class":101,"line":1603},[99,37195,31928],{"class":105},[99,37197,33939],{"class":1949},[99,37199,31934],{"class":109},[99,37201,37202,37204,37206,37208,37210,37212,37214],{"class":101,"line":1609},[99,37203,33946],{"class":109},[99,37205,155],{"class":105},[99,37207,31436],{"class":109},[99,37209,31439],{"class":5203},[99,37211,155],{"class":105},[99,37213,31444],{"class":214},[99,37215,31447],{"class":109},[99,37217,37218,37220,37222,37224],{"class":101,"line":1614},[99,37219,33963],{"class":5203},[99,37221,155],{"class":105},[99,37223,33968],{"class":158},[99,37225,31447],{"class":109},[99,37227,37228,37230,37232,37234,37236,37238,37240],{"class":101,"line":1628},[99,37229,33975],{"class":5203},[99,37231,155],{"class":105},[99,37233,31474],{"class":109},[99,37235,31477],{"class":5203},[99,37237,155],{"class":105},[99,37239,35430],{"class":158},[99,37241,31485],{"class":109},[99,37243,37244,37246,37248,37250],{"class":101,"line":1633},[99,37245,33992],{"class":5203},[99,37247,155],{"class":105},[99,37249,31457],{"class":158},[99,37251,116],{"class":109},[99,37253,37254,37256,37258,37260,37262,37264],{"class":101,"line":1639},[99,37255,34003],{"class":109},[99,37257,155],{"class":105},[99,37259,31515],{"class":109},[99,37261,31518],{"class":5203},[99,37263,155],{"class":105},[99,37265,34014],{"class":109},[99,37267,37268],{"class":101,"line":1660},[99,37269,34019],{"class":168},[99,37271,37272,37274,37276,37278],{"class":101,"line":1665},[99,37273,34024],{"class":5203},[99,37275,155],{"class":105},[99,37277,327],{"class":158},[99,37279,31447],{"class":109},[99,37281,37282,37284,37286,37288],{"class":101,"line":1679},[99,37283,34035],{"class":5203},[99,37285,155],{"class":105},[99,37287,31457],{"class":158},[99,37289,31447],{"class":109},[99,37291,37292,37294,37296,37298],{"class":101,"line":1684},[99,37293,34046],{"class":5203},[99,37295,155],{"class":105},[99,37297,301],{"class":158},[99,37299,116],{"class":109},[99,37301,37302,37304],{"class":101,"line":1713},[99,37303,4076],{"class":105},[99,37305,34059],{"class":109},[99,37307,37308],{"class":101,"line":1718},[99,37309,2386],{"emptyLinePlaceholder":26},[99,37311,37312],{"class":101,"line":1735},[99,37313,34068],{"class":168},[99,37315,37316,37318,37320],{"class":101,"line":1740},[99,37317,31928],{"class":105},[99,37319,34075],{"class":1949},[99,37321,34078],{"class":109},[99,37323,37324],{"class":101,"line":1745},[99,37325,34083],{"class":168},[99,37327,37328,37330,37332,37334,37336,37338,37340],{"class":101,"line":1750},[99,37329,31218],{"class":109},[99,37331,155],{"class":105},[99,37333,31225],{"class":214},[99,37335,1690],{"class":105},[99,37337,31230],{"class":109},[99,37339,1687],{"class":105},[99,37341,34100],{"class":214},[99,37343,37344,37346,37348],{"class":101,"line":1764},[99,37345,31270],{"class":109},[99,37347,155],{"class":105},[99,37349,32270],{"class":109},[99,37351,37352],{"class":101,"line":1769},[99,37353,2386],{"emptyLinePlaceholder":26},[99,37355,37356],{"class":101,"line":2563},[99,37357,34117],{"class":168},[99,37359,37360,37362,37364],{"class":101,"line":2577},[99,37361,34122],{"class":109},[99,37363,155],{"class":105},[99,37365,32323],{"class":158},[99,37367,37368,37370,37372],{"class":101,"line":2585},[99,37369,34131],{"class":109},[99,37371,155],{"class":105},[99,37373,3071],{"class":158},[99,37375,37376],{"class":101,"line":2590},[99,37377,2386],{"emptyLinePlaceholder":26},[99,37379,37380],{"class":101,"line":2596},[99,37381,34144],{"class":168},[99,37383,37384],{"class":101,"line":2602},[99,37385,34149],{"class":168},[99,37387,37388],{"class":101,"line":2607},[99,37389,34154],{"class":168},[99,37391,37392,37394],{"class":101,"line":7935},[99,37393,34159],{"class":105},[99,37395,32865],{"class":109},[99,37397,37398],{"class":101,"line":7959},[99,37399,34166],{"class":168},[99,37401,37402,37404,37406,37408],{"class":101,"line":7964},[99,37403,3389],{"class":105},[99,37405,34173],{"class":109},[99,37407,26032],{"class":105},[99,37409,34178],{"class":109},[99,37411,37412,37414,37416],{"class":101,"line":7970},[99,37413,34183],{"class":109},[99,37415,155],{"class":105},[99,37417,34188],{"class":109},[99,37419,37420,37422,37424],{"class":101,"line":7997},[99,37421,34193],{"class":109},[99,37423,155],{"class":105},[99,37425,34198],{"class":109},[99,37427,37428],{"class":101,"line":8002},[99,37429,34203],{"class":168},[99,37431,37432],{"class":101,"line":8008},[99,37433,32856],{"class":109},[99,37435,37436],{"class":101,"line":8020},[99,37437,34212],{"class":168},[99,37439,37440,37442,37444],{"class":101,"line":8032},[99,37441,32641],{"class":109},[99,37443,155],{"class":105},[99,37445,34221],{"class":109},[99,37447,37448],{"class":101,"line":8044},[99,37449,34226],{"class":168},[99,37451,37452,37454,37456,37458,37460,37462,37464],{"class":101,"line":9703},[99,37453,32658],{"class":109},[99,37455,155],{"class":105},[99,37457,32663],{"class":109},[99,37459,32666],{"class":5203},[99,37461,155],{"class":105},[99,37463,327],{"class":158},[99,37465,116],{"class":109},[99,37467,37468],{"class":101,"line":9728},[99,37469,34247],{"class":168},[99,37471,37472],{"class":101,"line":9751},[99,37473,34252],{"class":168},[99,37475,37476],{"class":101,"line":9775},[99,37477,34257],{"class":168},[99,37479,37480,37482,37484,37486,37488],{"class":101,"line":9780},[99,37481,34262],{"class":109},[99,37483,9464],{"class":105},[99,37485,32768],{"class":109},[99,37487,2935],{"class":105},[99,37489,34271],{"class":109},[99,37491,37492],{"class":101,"line":9785},[99,37493,34276],{"class":168},[99,37495,37496,37498,37500,37502,37504],{"class":101,"line":9790},[99,37497,34281],{"class":109},[99,37499,9464],{"class":105},[99,37501,34286],{"class":109},[99,37503,301],{"class":158},[99,37505,116],{"class":109},[99,37507,37508],{"class":101,"line":9799},[99,37509,2386],{"emptyLinePlaceholder":26},[99,37511,37512],{"class":101,"line":9804},[99,37513,34299],{"class":168},[99,37515,37516,37518,37520,37522,37524],{"class":101,"line":9810},[99,37517,34304],{"class":109},[99,37519,155],{"class":105},[99,37521,34309],{"class":109},[99,37523,694],{"class":105},[99,37525,34314],{"class":109},[99,37527,37528],{"class":101,"line":9831},[99,37529,34319],{"class":168},[99,37531,37532,37534,37536,37538],{"class":101,"line":9837},[99,37533,32432],{"class":158},[99,37535,110],{"class":109},[99,37537,34328],{"class":214},[99,37539,34331],{"class":109},[99,37541,37542],{"class":101,"line":9851},[99,37543,2386],{"emptyLinePlaceholder":26},[99,37545,37546],{"class":101,"line":9857},[99,37547,34340],{"class":168},[99,37549,37550,37552,37554,37556,37558],{"class":101,"line":9884},[99,37551,1517],{"class":105},[99,37553,31201],{"class":158},[99,37555,2935],{"class":105},[99,37557,31206],{"class":214},[99,37559,3725],{"class":109},[99,37561,37562],{"class":101,"line":9893},[99,37563,34357],{"class":168},[99,37565,37566,37568,37570],{"class":101,"line":9899},[99,37567,31270],{"class":109},[99,37569,155],{"class":105},[99,37571,37070],{"class":109},[99,37573,37574],{"class":101,"line":9907},[99,37575,34370],{"class":168},[99,37577,37578],{"class":101,"line":9912},[99,37579,34375],{"class":168},[99,37581,37582,37584,37586],{"class":101,"line":16591},[99,37583,34380],{"class":109},[99,37585,34383],{"class":214},[99,37587,30478],{"class":109},[99,37589,37590],{"class":101,"line":16597},[99,37591,34390],{"class":168},[99,37593,37594,37596,37598],{"class":101,"line":16620},[99,37595,34003],{"class":109},[99,37597,155],{"class":105},[99,37599,34399],{"class":109},[99,37601,37602],{"class":101,"line":16626},[99,37603,34404],{"class":168},[99,37605,37606],{"class":101,"line":16649},[99,37607,34409],{"class":109},[99,37609,37610],{"class":101,"line":16663},[99,37611,2386],{"emptyLinePlaceholder":26},[99,37613,37614],{"class":101,"line":16683},[99,37615,34418],{"class":168},[99,37617,37618],{"class":101,"line":16689},[99,37619,34423],{"class":168},[99,37621,37622,37624,37626,37628,37630,37632,37634],{"class":101,"line":16700},[99,37623,31218],{"class":109},[99,37625,155],{"class":105},[99,37627,31225],{"class":214},[99,37629,1690],{"class":105},[99,37631,31230],{"class":109},[99,37633,1687],{"class":105},[99,37635,34100],{"class":214},[99,37637,37638,37640,37642],{"class":101,"line":16723},[99,37639,31270],{"class":109},[99,37641,155],{"class":105},[99,37643,32270],{"class":109},[99,37645,37646],{"class":101,"line":16745},[99,37647,34452],{"class":168},[99,37649,37650],{"class":101,"line":16750},[99,37651,34457],{"class":168},[99,37653,37654,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698],{"class":101,"line":16756},[99,37655,34462],{"class":109},[99,37657,155],{"class":105},[99,37659,1000],{"class":109},[99,37661,34469],{"class":214},[99,37663,488],{"class":109},[99,37665,34474],{"class":214},[99,37667,488],{"class":109},[99,37669,34479],{"class":214},[99,37671,488],{"class":109},[99,37673,34484],{"class":214},[99,37675,488],{"class":109},[99,37677,34489],{"class":214},[99,37679,488],{"class":109},[99,37681,34494],{"class":214},[99,37683,488],{"class":109},[99,37685,34499],{"class":214},[99,37687,488],{"class":109},[99,37689,34504],{"class":214},[99,37691,488],{"class":109},[99,37693,34509],{"class":214},[99,37695,488],{"class":109},[99,37697,34514],{"class":214},[99,37699,33227],{"class":109},[99,37701,37702,37704],{"class":101,"line":16770},[99,37703,34159],{"class":105},[99,37705,32865],{"class":109},[99,37707,37708],{"class":101,"line":16783},[99,37709,34527],{"class":168},[99,37711,37712,37714,37716,37718],{"class":101,"line":16788},[99,37713,3389],{"class":105},[99,37715,34534],{"class":109},[99,37717,26032],{"class":105},[99,37719,34178],{"class":109},[99,37721,37722,37724,37726],{"class":101,"line":16802},[99,37723,32591],{"class":109},[99,37725,155],{"class":105},[99,37727,32596],{"class":109},[99,37729,37730,37732,37734],{"class":101,"line":16807},[99,37731,32606],{"class":109},[99,37733,155],{"class":105},[99,37735,32611],{"class":109},[99,37737,37738],{"class":101,"line":16813},[99,37739,2386],{"emptyLinePlaceholder":26},[99,37741,37742],{"class":101,"line":16818},[99,37743,34563],{"class":168},[99,37745,37746],{"class":101,"line":16832},[99,37747,32856],{"class":109},[99,37749,37750],{"class":101,"line":16837},[99,37751,34572],{"class":168},[99,37753,37754,37756,37758],{"class":101,"line":16842},[99,37755,32641],{"class":109},[99,37757,155],{"class":105},[99,37759,32646],{"class":109},[99,37761,37762],{"class":101,"line":16856},[99,37763,34585],{"class":168},[99,37765,37766,37768,37770,37772,37774,37776,37778],{"class":101,"line":16868},[99,37767,32658],{"class":109},[99,37769,155],{"class":105},[99,37771,32663],{"class":109},[99,37773,32666],{"class":5203},[99,37775,155],{"class":105},[99,37777,327],{"class":158},[99,37779,116],{"class":109},[99,37781,37782],{"class":101,"line":16873},[99,37783,34606],{"class":168},[99,37785,37786,37788,37790],{"class":101,"line":16886},[99,37787,34611],{"class":109},[99,37789,155],{"class":105},[99,37791,34616],{"class":109},[99,37793,37794,37796,37798],{"class":101,"line":16891},[99,37795,34621],{"class":109},[99,37797,155],{"class":105},[99,37799,34626],{"class":109},[99,37801,37802,37804,37806,37808,37810,37812,37814,37816],{"class":101,"line":16896},[99,37803,34631],{"class":158},[99,37805,110],{"class":109},[99,37807,34636],{"class":214},[99,37809,34639],{"class":109},[99,37811,34642],{"class":214},[99,37813,488],{"class":109},[99,37815,34647],{"class":214},[99,37817,34650],{"class":109},[70,37819,37821],{"id":37820},"_22vgg","2.2.VGG",[21985,37823,37825],{"id":37824},"_221原理","2.2.1.原理",[14,37827,37828],{},[1448,37829],{"alt":21,"src":37830},"\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",[14,37832,37833],{},[1448,37834],{"alt":21,"src":37835},"\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",[14,37837,37838],{},[1448,37839],{"alt":21,"src":37840},"\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",[14,37842,37843],{},"参数详细描述：",[14,37845,37846],{},[1448,37847],{"alt":21,"src":37848},"\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",[14,37850,37851],{},[1448,37852],{"alt":21,"src":37853},"\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",[14,37855,37856],{},[1448,37857],{"alt":21,"src":37858},"\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",[14,37860,37861],{},[1448,37862],{"alt":21,"src":37863},"\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",[14,37865,37866],{},[1448,37867],{"alt":21,"src":37868},"\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",[21985,37870,37872],{"id":37871},"_222代码实现","2.2.2.代码实现",[53,37874,37875],{},[56,37876,37877],{},"网络搭建",[90,37879,37881],{"className":30359,"code":37880,"language":30361,"meta":21,"style":21},"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",[96,37882,37883,37889,37901,37911,37921,37925,37942,37950,37969,37974,37979,37991,38029,38034,38070,38074,38103,38108,38113,38124,38160,38164,38200,38204,38232,38236,38241,38252,38288,38292,38328,38332,38368,38372,38400,38404,38409,38420,38457,38461,38497,38501,38537,38541,38569,38573,38578,38589,38625,38629,38665,38669,38705,38709,38737,38741,38746,38757,38762,38767,38772,38793,38797,38809,38813,38825,38829,38833,38838,38843,38858,38863,38873,38878,38893,38898,38917,38922,38931,38936,38946,38951,38956,38970,38975,38989,38997,39001,39005,39013,39024,39035,39046,39057,39068,39079,39085,39089,39094,39107,39127,39133,39142],{"__ignoreMap":21},[99,37884,37885,37887],{"class":101,"line":102},[99,37886,30373],{"class":105},[99,37888,30376],{"class":109},[99,37890,37891,37893,37896,37898],{"class":101,"line":22},[99,37892,30718],{"class":105},[99,37894,37895],{"class":109}," sympy.core.sympify ",[99,37897,30373],{"class":105},[99,37899,37900],{"class":109}," kernS\n",[99,37902,37903,37905,37907,37909],{"class":101,"line":1165},[99,37904,30718],{"class":105},[99,37906,30721],{"class":109},[99,37908,30373],{"class":105},[99,37910,30726],{"class":109},[99,37912,37913,37915,37917,37919],{"class":101,"line":1180},[99,37914,30718],{"class":105},[99,37916,30738],{"class":109},[99,37918,30373],{"class":105},[99,37920,30743],{"class":109},[99,37922,37923],{"class":101,"line":1186},[99,37924,2386],{"emptyLinePlaceholder":26},[99,37926,37927,37929,37932,37934,37936,37938,37940],{"class":101,"line":1200},[99,37928,14681],{"class":105},[99,37930,37931],{"class":1949}," VGG16",[99,37933,110],{"class":109},[99,37935,30759],{"class":1949},[99,37937,668],{"class":109},[99,37939,30764],{"class":1949},[99,37941,30767],{"class":109},[99,37943,37944,37946,37948],{"class":101,"line":1206},[99,37945,30782],{"class":105},[99,37947,30785],{"class":158},[99,37949,30788],{"class":109},[99,37951,37952,37954,37956,37959,37961,37963,37965,37967],{"class":101,"line":1297},[99,37953,30798],{"class":158},[99,37955,110],{"class":109},[99,37957,37958],{"class":158},"VGG16",[99,37960,12422],{"class":109},[99,37962,30804],{"class":158},[99,37964,30807],{"class":109},[99,37966,30810],{"class":158},[99,37968,1962],{"class":109},[99,37970,37971],{"class":101,"line":1303},[99,37972,37973],{"class":168},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[99,37975,37976],{"class":101,"line":1315},[99,37977,37978],{"class":168},"        # 这里用的是灰度图\n",[99,37980,37981,37983,37986,37988],{"class":101,"line":1598},[99,37982,30826],{"class":158},[99,37984,37985],{"class":109},".block1",[99,37987,155],{"class":105},[99,37989,37990],{"class":109},"nn.Sequential(\n",[99,37992,37993,37996,37998,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026],{"class":101,"line":1603},[99,37994,37995],{"class":109},"            nn.Conv2d(",[99,37997,30837],{"class":5203},[99,37999,155],{"class":105},[99,38001,327],{"class":158},[99,38003,488],{"class":109},[99,38005,30846],{"class":5203},[99,38007,155],{"class":105},[99,38009,313],{"class":158},[99,38011,488],{"class":109},[99,38013,30855],{"class":5203},[99,38015,155],{"class":105},[99,38017,181],{"class":158},[99,38019,488],{"class":109},[99,38021,30864],{"class":5203},[99,38023,155],{"class":105},[99,38025,327],{"class":158},[99,38027,38028],{"class":109},"),\n",[99,38030,38031],{"class":101,"line":1609},[99,38032,38033],{"class":109},"            nn.ReLU(),\n",[99,38035,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068],{"class":101,"line":1614},[99,38037,37995],{"class":109},[99,38039,30837],{"class":5203},[99,38041,155],{"class":105},[99,38043,313],{"class":158},[99,38045,488],{"class":109},[99,38047,30846],{"class":5203},[99,38049,155],{"class":105},[99,38051,313],{"class":158},[99,38053,488],{"class":109},[99,38055,30855],{"class":5203},[99,38057,155],{"class":105},[99,38059,181],{"class":158},[99,38061,488],{"class":109},[99,38063,30864],{"class":5203},[99,38065,155],{"class":105},[99,38067,327],{"class":158},[99,38069,38028],{"class":109},[99,38071,38072],{"class":101,"line":1628},[99,38073,38033],{"class":109},[99,38075,38076,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101],{"class":101,"line":1633},[99,38077,38078],{"class":109},"            nn.MaxPool2d(",[99,38080,30855],{"class":5203},[99,38082,155],{"class":105},[99,38084,187],{"class":158},[99,38086,488],{"class":109},[99,38088,30910],{"class":5203},[99,38090,155],{"class":105},[99,38092,187],{"class":158},[99,38094,488],{"class":109},[99,38096,30864],{"class":5203},[99,38098,155],{"class":105},[99,38100,301],{"class":158},[99,38102,116],{"class":109},[99,38104,38105],{"class":101,"line":1639},[99,38106,38107],{"class":109},"        )\n",[99,38109,38110],{"class":101,"line":1660},[99,38111,38112],{"class":168},"        # 第二层\n",[99,38114,38115,38117,38120,38122],{"class":101,"line":1665},[99,38116,30826],{"class":158},[99,38118,38119],{"class":109},".block2",[99,38121,155],{"class":105},[99,38123,37990],{"class":109},[99,38125,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158],{"class":101,"line":1679},[99,38127,37995],{"class":109},[99,38129,30837],{"class":5203},[99,38131,155],{"class":105},[99,38133,313],{"class":158},[99,38135,488],{"class":109},[99,38137,30846],{"class":5203},[99,38139,155],{"class":105},[99,38141,32051],{"class":158},[99,38143,488],{"class":109},[99,38145,30855],{"class":5203},[99,38147,155],{"class":105},[99,38149,181],{"class":158},[99,38151,488],{"class":109},[99,38153,30864],{"class":5203},[99,38155,155],{"class":105},[99,38157,327],{"class":158},[99,38159,38028],{"class":109},[99,38161,38162],{"class":101,"line":1684},[99,38163,38033],{"class":109},[99,38165,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198],{"class":101,"line":1713},[99,38167,37995],{"class":109},[99,38169,30837],{"class":5203},[99,38171,155],{"class":105},[99,38173,32051],{"class":158},[99,38175,488],{"class":109},[99,38177,30846],{"class":5203},[99,38179,155],{"class":105},[99,38181,32051],{"class":158},[99,38183,488],{"class":109},[99,38185,30855],{"class":5203},[99,38187,155],{"class":105},[99,38189,181],{"class":158},[99,38191,488],{"class":109},[99,38193,30864],{"class":5203},[99,38195,155],{"class":105},[99,38197,327],{"class":158},[99,38199,38028],{"class":109},[99,38201,38202],{"class":101,"line":1718},[99,38203,38033],{"class":109},[99,38205,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230],{"class":101,"line":1735},[99,38207,38078],{"class":109},[99,38209,30855],{"class":5203},[99,38211,155],{"class":105},[99,38213,187],{"class":158},[99,38215,488],{"class":109},[99,38217,30910],{"class":5203},[99,38219,155],{"class":105},[99,38221,187],{"class":158},[99,38223,488],{"class":109},[99,38225,30864],{"class":5203},[99,38227,155],{"class":105},[99,38229,301],{"class":158},[99,38231,116],{"class":109},[99,38233,38234],{"class":101,"line":1740},[99,38235,38107],{"class":109},[99,38237,38238],{"class":101,"line":1745},[99,38239,38240],{"class":168},"        # 第三层\n",[99,38242,38243,38245,38248,38250],{"class":101,"line":1750},[99,38244,30826],{"class":158},[99,38246,38247],{"class":109},".block3",[99,38249,155],{"class":105},[99,38251,37990],{"class":109},[99,38253,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286],{"class":101,"line":1764},[99,38255,37995],{"class":109},[99,38257,30837],{"class":5203},[99,38259,155],{"class":105},[99,38261,32051],{"class":158},[99,38263,488],{"class":109},[99,38265,30846],{"class":5203},[99,38267,155],{"class":105},[99,38269,34851],{"class":158},[99,38271,488],{"class":109},[99,38273,30855],{"class":5203},[99,38275,155],{"class":105},[99,38277,181],{"class":158},[99,38279,488],{"class":109},[99,38281,30864],{"class":5203},[99,38283,155],{"class":105},[99,38285,327],{"class":158},[99,38287,38028],{"class":109},[99,38289,38290],{"class":101,"line":1769},[99,38291,38033],{"class":109},[99,38293,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326],{"class":101,"line":2563},[99,38295,37995],{"class":109},[99,38297,30837],{"class":5203},[99,38299,155],{"class":105},[99,38301,34851],{"class":158},[99,38303,488],{"class":109},[99,38305,30846],{"class":5203},[99,38307,155],{"class":105},[99,38309,34851],{"class":158},[99,38311,488],{"class":109},[99,38313,30855],{"class":5203},[99,38315,155],{"class":105},[99,38317,181],{"class":158},[99,38319,488],{"class":109},[99,38321,30864],{"class":5203},[99,38323,155],{"class":105},[99,38325,327],{"class":158},[99,38327,38028],{"class":109},[99,38329,38330],{"class":101,"line":2577},[99,38331,38033],{"class":109},[99,38333,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366],{"class":101,"line":2585},[99,38335,37995],{"class":109},[99,38337,30837],{"class":5203},[99,38339,155],{"class":105},[99,38341,34851],{"class":158},[99,38343,488],{"class":109},[99,38345,30846],{"class":5203},[99,38347,155],{"class":105},[99,38349,34851],{"class":158},[99,38351,488],{"class":109},[99,38353,30855],{"class":5203},[99,38355,155],{"class":105},[99,38357,181],{"class":158},[99,38359,488],{"class":109},[99,38361,30864],{"class":5203},[99,38363,155],{"class":105},[99,38365,327],{"class":158},[99,38367,38028],{"class":109},[99,38369,38370],{"class":101,"line":2590},[99,38371,38033],{"class":109},[99,38373,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398],{"class":101,"line":2596},[99,38375,38078],{"class":109},[99,38377,30855],{"class":5203},[99,38379,155],{"class":105},[99,38381,187],{"class":158},[99,38383,488],{"class":109},[99,38385,30910],{"class":5203},[99,38387,155],{"class":105},[99,38389,187],{"class":158},[99,38391,488],{"class":109},[99,38393,30864],{"class":5203},[99,38395,155],{"class":105},[99,38397,301],{"class":158},[99,38399,116],{"class":109},[99,38401,38402],{"class":101,"line":2602},[99,38403,38107],{"class":109},[99,38405,38406],{"class":101,"line":2607},[99,38407,38408],{"class":168},"        # 第四层\n",[99,38410,38411,38413,38416,38418],{"class":101,"line":7935},[99,38412,30826],{"class":158},[99,38414,38415],{"class":109},".block4",[99,38417,155],{"class":105},[99,38419,37990],{"class":109},[99,38421,38422,38424,38426,38428,38430,38432,38434,38436,38439,38441,38443,38445,38447,38449,38451,38453,38455],{"class":101,"line":7959},[99,38423,37995],{"class":109},[99,38425,30837],{"class":5203},[99,38427,155],{"class":105},[99,38429,34851],{"class":158},[99,38431,488],{"class":109},[99,38433,30846],{"class":5203},[99,38435,155],{"class":105},[99,38437,38438],{"class":158},"512",[99,38440,488],{"class":109},[99,38442,30855],{"class":5203},[99,38444,155],{"class":105},[99,38446,181],{"class":158},[99,38448,488],{"class":109},[99,38450,30864],{"class":5203},[99,38452,155],{"class":105},[99,38454,327],{"class":158},[99,38456,38028],{"class":109},[99,38458,38459],{"class":101,"line":7964},[99,38460,38033],{"class":109},[99,38462,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495],{"class":101,"line":7970},[99,38464,37995],{"class":109},[99,38466,30837],{"class":5203},[99,38468,155],{"class":105},[99,38470,38438],{"class":158},[99,38472,488],{"class":109},[99,38474,30846],{"class":5203},[99,38476,155],{"class":105},[99,38478,38438],{"class":158},[99,38480,488],{"class":109},[99,38482,30855],{"class":5203},[99,38484,155],{"class":105},[99,38486,181],{"class":158},[99,38488,488],{"class":109},[99,38490,30864],{"class":5203},[99,38492,155],{"class":105},[99,38494,327],{"class":158},[99,38496,38028],{"class":109},[99,38498,38499],{"class":101,"line":7997},[99,38500,38033],{"class":109},[99,38502,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535],{"class":101,"line":8002},[99,38504,37995],{"class":109},[99,38506,30837],{"class":5203},[99,38508,155],{"class":105},[99,38510,38438],{"class":158},[99,38512,488],{"class":109},[99,38514,30846],{"class":5203},[99,38516,155],{"class":105},[99,38518,38438],{"class":158},[99,38520,488],{"class":109},[99,38522,30855],{"class":5203},[99,38524,155],{"class":105},[99,38526,181],{"class":158},[99,38528,488],{"class":109},[99,38530,30864],{"class":5203},[99,38532,155],{"class":105},[99,38534,327],{"class":158},[99,38536,38028],{"class":109},[99,38538,38539],{"class":101,"line":8008},[99,38540,38033],{"class":109},[99,38542,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567],{"class":101,"line":8020},[99,38544,38078],{"class":109},[99,38546,30855],{"class":5203},[99,38548,155],{"class":105},[99,38550,187],{"class":158},[99,38552,488],{"class":109},[99,38554,30910],{"class":5203},[99,38556,155],{"class":105},[99,38558,187],{"class":158},[99,38560,488],{"class":109},[99,38562,30864],{"class":5203},[99,38564,155],{"class":105},[99,38566,301],{"class":158},[99,38568,116],{"class":109},[99,38570,38571],{"class":101,"line":8032},[99,38572,38107],{"class":109},[99,38574,38575],{"class":101,"line":8044},[99,38576,38577],{"class":168},"        # 第五层\n",[99,38579,38580,38582,38585,38587],{"class":101,"line":9703},[99,38581,30826],{"class":158},[99,38583,38584],{"class":109},".block5",[99,38586,155],{"class":105},[99,38588,37990],{"class":109},[99,38590,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623],{"class":101,"line":9728},[99,38592,37995],{"class":109},[99,38594,30837],{"class":5203},[99,38596,155],{"class":105},[99,38598,38438],{"class":158},[99,38600,488],{"class":109},[99,38602,30846],{"class":5203},[99,38604,155],{"class":105},[99,38606,38438],{"class":158},[99,38608,488],{"class":109},[99,38610,30855],{"class":5203},[99,38612,155],{"class":105},[99,38614,181],{"class":158},[99,38616,488],{"class":109},[99,38618,30864],{"class":5203},[99,38620,155],{"class":105},[99,38622,327],{"class":158},[99,38624,38028],{"class":109},[99,38626,38627],{"class":101,"line":9751},[99,38628,38033],{"class":109},[99,38630,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663],{"class":101,"line":9775},[99,38632,37995],{"class":109},[99,38634,30837],{"class":5203},[99,38636,155],{"class":105},[99,38638,38438],{"class":158},[99,38640,488],{"class":109},[99,38642,30846],{"class":5203},[99,38644,155],{"class":105},[99,38646,38438],{"class":158},[99,38648,488],{"class":109},[99,38650,30855],{"class":5203},[99,38652,155],{"class":105},[99,38654,181],{"class":158},[99,38656,488],{"class":109},[99,38658,30864],{"class":5203},[99,38660,155],{"class":105},[99,38662,327],{"class":158},[99,38664,38028],{"class":109},[99,38666,38667],{"class":101,"line":9780},[99,38668,38033],{"class":109},[99,38670,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703],{"class":101,"line":9785},[99,38672,37995],{"class":109},[99,38674,30837],{"class":5203},[99,38676,155],{"class":105},[99,38678,38438],{"class":158},[99,38680,488],{"class":109},[99,38682,30846],{"class":5203},[99,38684,155],{"class":105},[99,38686,38438],{"class":158},[99,38688,488],{"class":109},[99,38690,30855],{"class":5203},[99,38692,155],{"class":105},[99,38694,181],{"class":158},[99,38696,488],{"class":109},[99,38698,30864],{"class":5203},[99,38700,155],{"class":105},[99,38702,327],{"class":158},[99,38704,38028],{"class":109},[99,38706,38707],{"class":101,"line":9790},[99,38708,38033],{"class":109},[99,38710,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735],{"class":101,"line":9799},[99,38712,38078],{"class":109},[99,38714,30855],{"class":5203},[99,38716,155],{"class":105},[99,38718,187],{"class":158},[99,38720,488],{"class":109},[99,38722,30910],{"class":5203},[99,38724,155],{"class":105},[99,38726,187],{"class":158},[99,38728,488],{"class":109},[99,38730,30864],{"class":5203},[99,38732,155],{"class":105},[99,38734,301],{"class":158},[99,38736,116],{"class":109},[99,38738,38739],{"class":101,"line":9804},[99,38740,38107],{"class":109},[99,38742,38743],{"class":101,"line":9810},[99,38744,38745],{"class":168},"        # 全连接层\n",[99,38747,38748,38750,38753,38755],{"class":101,"line":9831},[99,38749,30826],{"class":158},[99,38751,38752],{"class":109},".block6",[99,38754,155],{"class":105},[99,38756,37990],{"class":109},[99,38758,38759],{"class":101,"line":9837},[99,38760,38761],{"class":168},"            # 平展操作\n",[99,38763,38764],{"class":101,"line":9851},[99,38765,38766],{"class":168},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[99,38768,38769],{"class":101,"line":9857},[99,38770,38771],{"class":109},"            nn.Flatten(),\n",[99,38773,38774,38777,38779,38781,38783,38785,38787,38789,38791],{"class":101,"line":9884},[99,38775,38776],{"class":109},"            nn.Linear(",[99,38778,479],{"class":158},[99,38780,565],{"class":105},[99,38782,479],{"class":158},[99,38784,565],{"class":105},[99,38786,38438],{"class":158},[99,38788,488],{"class":109},[99,38790,34851],{"class":158},[99,38792,38028],{"class":109},[99,38794,38795],{"class":101,"line":9893},[99,38796,38033],{"class":109},[99,38798,38799,38801,38803,38805,38807],{"class":101,"line":9899},[99,38800,38776],{"class":109},[99,38802,34851],{"class":158},[99,38804,488],{"class":109},[99,38806,32051],{"class":158},[99,38808,38028],{"class":109},[99,38810,38811],{"class":101,"line":9907},[99,38812,38033],{"class":109},[99,38814,38815,38817,38819,38821,38823],{"class":101,"line":9912},[99,38816,38776],{"class":109},[99,38818,32051],{"class":158},[99,38820,488],{"class":109},[99,38822,556],{"class":158},[99,38824,116],{"class":109},[99,38826,38827],{"class":101,"line":16591},[99,38828,38107],{"class":109},[99,38830,38831],{"class":101,"line":16597},[99,38832,2386],{"emptyLinePlaceholder":26},[99,38834,38835],{"class":101,"line":16620},[99,38836,38837],{"class":168},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[99,38839,38840],{"class":101,"line":16626},[99,38841,38842],{"class":168},"        # 循环遍历模型\n",[99,38844,38845,38847,38850,38852,38855],{"class":101,"line":16649},[99,38846,3389],{"class":105},[99,38848,38849],{"class":109}," m ",[99,38851,26032],{"class":105},[99,38853,38854],{"class":158}," self",[99,38856,38857],{"class":109},".modules():\n",[99,38859,38860],{"class":101,"line":16663},[99,38861,38862],{"class":168},"            # print(m)\n",[99,38864,38865,38867,38870],{"class":101,"line":16683},[99,38866,4628],{"class":105},[99,38868,38869],{"class":158}," isinstance",[99,38871,38872],{"class":109},"(m,nn.Conv2d):\n",[99,38874,38875],{"class":101,"line":16689},[99,38876,38877],{"class":168},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[99,38879,38880,38883,38886,38888,38891],{"class":101,"line":16700},[99,38881,38882],{"class":109},"                nn.init.kaiming_normal_(m.weight,",[99,38884,38885],{"class":5203},"nonlinearity",[99,38887,155],{"class":105},[99,38889,38890],{"class":214},"'relu'",[99,38892,116],{"class":109},[99,38894,38895],{"class":101,"line":16723},[99,38896,38897],{"class":168},"                # 判断b参数是否存在\n",[99,38899,38900,38903,38906,38909,38912,38915],{"class":101,"line":16745},[99,38901,38902],{"class":105},"                if",[99,38904,38905],{"class":109}," m.bias ",[99,38907,38908],{"class":105},"is",[99,38910,38911],{"class":105}," not",[99,38913,38914],{"class":158}," None",[99,38916,3725],{"class":109},[99,38918,38919],{"class":101,"line":16750},[99,38920,38921],{"class":168},"                    # 如果参数不存在的化初始化b=0\n",[99,38923,38924,38927,38929],{"class":101,"line":16756},[99,38925,38926],{"class":109},"                    nn.init.constant_(m.bias,",[99,38928,301],{"class":158},[99,38930,116],{"class":109},[99,38932,38933],{"class":101,"line":16770},[99,38934,38935],{"class":168},"            # 全连接层初始化\n",[99,38937,38938,38941,38943],{"class":101,"line":16783},[99,38939,38940],{"class":105},"            elif",[99,38942,38869],{"class":158},[99,38944,38945],{"class":109},"(m,nn.Linear):\n",[99,38947,38948],{"class":101,"line":16788},[99,38949,38950],{"class":168},"                # 这个初始化方法是利用的是正太分布的方式\n",[99,38952,38953],{"class":101,"line":16802},[99,38954,38955],{"class":168},"                # 均值为0，方差为0.01\n",[99,38957,38958,38961,38963,38965,38968],{"class":101,"line":16807},[99,38959,38960],{"class":109},"                nn.init.normal_(m.weight,",[99,38962,301],{"class":158},[99,38964,488],{"class":109},[99,38966,38967],{"class":158},"0.01",[99,38969,116],{"class":109},[99,38971,38972],{"class":101,"line":16813},[99,38973,38974],{"class":168},"                # 初始化b参数\n",[99,38976,38977,38979,38981,38983,38985,38987],{"class":101,"line":16818},[99,38978,38902],{"class":105},[99,38980,38905],{"class":109},[99,38982,38908],{"class":105},[99,38984,38911],{"class":105},[99,38986,38914],{"class":158},[99,38988,3725],{"class":109},[99,38990,38991,38993,38995],{"class":101,"line":16832},[99,38992,38926],{"class":109},[99,38994,301],{"class":158},[99,38996,116],{"class":109},[99,38998,38999],{"class":101,"line":16837},[99,39000,2386],{"emptyLinePlaceholder":26},[99,39002,39003],{"class":101,"line":16842},[99,39004,35146],{"class":168},[99,39006,39007,39009,39011],{"class":101,"line":16856},[99,39008,30782],{"class":105},[99,39010,31074],{"class":1949},[99,39012,31077],{"class":109},[99,39014,39015,39017,39019,39021],{"class":101,"line":16868},[99,39016,31082],{"class":109},[99,39018,155],{"class":105},[99,39020,30804],{"class":158},[99,39022,39023],{"class":109},".block1(x)\n",[99,39025,39026,39028,39030,39032],{"class":101,"line":16873},[99,39027,31082],{"class":109},[99,39029,155],{"class":105},[99,39031,30804],{"class":158},[99,39033,39034],{"class":109},".block2(x)\n",[99,39036,39037,39039,39041,39043],{"class":101,"line":16886},[99,39038,31082],{"class":109},[99,39040,155],{"class":105},[99,39042,30804],{"class":158},[99,39044,39045],{"class":109},".block3(x)\n",[99,39047,39048,39050,39052,39054],{"class":101,"line":16891},[99,39049,31082],{"class":109},[99,39051,155],{"class":105},[99,39053,30804],{"class":158},[99,39055,39056],{"class":109},".block4(x)\n",[99,39058,39059,39061,39063,39065],{"class":101,"line":16896},[99,39060,31082],{"class":109},[99,39062,155],{"class":105},[99,39064,30804],{"class":158},[99,39066,39067],{"class":109},".block5(x)\n",[99,39069,39070,39072,39074,39076],{"class":101,"line":16901},[99,39071,31082],{"class":109},[99,39073,155],{"class":105},[99,39075,30804],{"class":158},[99,39077,39078],{"class":109},".block6(x)\n",[99,39080,39081,39083],{"class":101,"line":16914},[99,39082,14739],{"class":105},[99,39084,31190],{"class":109},[99,39086,39087],{"class":101,"line":16919},[99,39088,2386],{"emptyLinePlaceholder":26},[99,39090,39091],{"class":101,"line":32614},[99,39092,39093],{"class":168},"# 验证模型\n",[99,39095,39096,39098,39100,39102,39105],{"class":101,"line":32620},[99,39097,1517],{"class":105},[99,39099,31201],{"class":158},[99,39101,2935],{"class":105},[99,39103,39104],{"class":214},"'__main__'",[99,39106,3725],{"class":109},[99,39108,39109,39111,39113,39115,39117,39119,39121,39123,39125],{"class":101,"line":32626},[99,39110,31218],{"class":109},[99,39112,155],{"class":105},[99,39114,30432],{"class":109},[99,39116,31225],{"class":214},[99,39118,1690],{"class":105},[99,39120,31230],{"class":109},[99,39122,1687],{"class":105},[99,39124,30457],{"class":214},[99,39126,116],{"class":109},[99,39128,39129,39131],{"class":101,"line":32632},[99,39130,31280],{"class":158},[99,39132,30466],{"class":109},[99,39134,39135,39137,39139],{"class":101,"line":32638},[99,39136,31270],{"class":109},[99,39138,155],{"class":105},[99,39140,39141],{"class":109},"VGG16().to(device)\n",[99,39143,39144,39146,39148,39150,39152,39154,39156,39158],{"class":101,"line":32649},[99,39145,31280],{"class":158},[99,39147,31283],{"class":109},[99,39149,327],{"class":158},[99,39151,488],{"class":109},[99,39153,31482],{"class":158},[99,39155,488],{"class":109},[99,39157,31482],{"class":158},[99,39159,31296],{"class":109},[53,39161,39162],{"start":22},[56,39163,39164],{},"训练代码",[14,39166,39167],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39169,39170],{},"解决方式:",[14,39172,39173],{},"①权重初始化",[90,39175,39177],{"className":30359,"code":39176,"language":30361,"meta":21,"style":21},"# 权重初始化,保证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",[96,39178,39179,39184,39189,39201,39206,39214,39219,39232,39237,39251,39256,39265,39270,39279,39284,39289,39302,39307,39321],{"__ignoreMap":21},[99,39180,39181],{"class":101,"line":102},[99,39182,39183],{"class":168},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[99,39185,39186],{"class":101,"line":22},[99,39187,39188],{"class":168},"# 循环遍历模型\n",[99,39190,39191,39193,39195,39197,39199],{"class":101,"line":1165},[99,39192,3011],{"class":105},[99,39194,38849],{"class":109},[99,39196,26032],{"class":105},[99,39198,38854],{"class":158},[99,39200,38857],{"class":109},[99,39202,39203],{"class":101,"line":1180},[99,39204,39205],{"class":168},"    # print(m)\n",[99,39207,39208,39210,39212],{"class":101,"line":1186},[99,39209,3087],{"class":105},[99,39211,38869],{"class":158},[99,39213,38872],{"class":109},[99,39215,39216],{"class":101,"line":1200},[99,39217,39218],{"class":168},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[99,39220,39221,39224,39226,39228,39230],{"class":101,"line":1206},[99,39222,39223],{"class":109},"        nn.init.kaiming_normal_(m.weight,",[99,39225,38885],{"class":5203},[99,39227,155],{"class":105},[99,39229,38890],{"class":214},[99,39231,116],{"class":109},[99,39233,39234],{"class":101,"line":1297},[99,39235,39236],{"class":168},"        # 判断b参数是否存在\n",[99,39238,39239,39241,39243,39245,39247,39249],{"class":101,"line":1303},[99,39240,2483],{"class":105},[99,39242,38905],{"class":109},[99,39244,38908],{"class":105},[99,39246,38911],{"class":105},[99,39248,38914],{"class":158},[99,39250,3725],{"class":109},[99,39252,39253],{"class":101,"line":1315},[99,39254,39255],{"class":168},"            # 如果参数不存在的化初始化b=0\n",[99,39257,39258,39261,39263],{"class":101,"line":1598},[99,39259,39260],{"class":109},"            nn.init.constant_(m.bias,",[99,39262,301],{"class":158},[99,39264,116],{"class":109},[99,39266,39267],{"class":101,"line":1603},[99,39268,39269],{"class":168},"    # 全连接层初始化\n",[99,39271,39272,39275,39277],{"class":101,"line":1609},[99,39273,39274],{"class":105},"    elif",[99,39276,38869],{"class":158},[99,39278,38945],{"class":109},[99,39280,39281],{"class":101,"line":1614},[99,39282,39283],{"class":168},"        # 这个初始化方法是利用的是正太分布的方式\n",[99,39285,39286],{"class":101,"line":1628},[99,39287,39288],{"class":168},"        # 均值为0，方差为0.01\n",[99,39290,39291,39294,39296,39298,39300],{"class":101,"line":1633},[99,39292,39293],{"class":109},"        nn.init.normal_(m.weight,",[99,39295,301],{"class":158},[99,39297,488],{"class":109},[99,39299,38967],{"class":158},[99,39301,116],{"class":109},[99,39303,39304],{"class":101,"line":1639},[99,39305,39306],{"class":168},"        # 初始化b参数\n",[99,39308,39309,39311,39313,39315,39317,39319],{"class":101,"line":1660},[99,39310,2483],{"class":105},[99,39312,38905],{"class":109},[99,39314,38908],{"class":105},[99,39316,38911],{"class":105},[99,39318,38914],{"class":158},[99,39320,3725],{"class":109},[99,39322,39323,39325,39327],{"class":101,"line":1665},[99,39324,39260],{"class":109},[99,39326,301],{"class":158},[99,39328,116],{"class":109},[14,39330,39331],{},"②尽可能地增加批次",[14,39333,39334],{},"训练完整代码：",[90,39336,39337],{"className":30359,"code":37880,"language":30361,"meta":21,"style":21},[96,39338,39339,39345,39355,39365,39375,39379,39395,39403,39421,39425,39429,39439,39475,39479,39515,39519,39547,39551,39555,39565,39601,39605,39641,39645,39673,39677,39681,39691,39727,39731,39767,39771,39807,39811,39839,39843,39847,39857,39893,39897,39933,39937,39973,39977,40005,40009,40013,40023,40059,40063,40099,40103,40139,40143,40171,40175,40179,40189,40193,40197,40201,40221,40225,40237,40241,40253,40257,40261,40265,40269,40281,40285,40293,40297,40309,40313,40327,40331,40339,40343,40351,40355,40359,40371,40375,40389,40397,40401,40405,40413,40423,40433,40443,40453,40463,40473,40479,40483,40487,40499,40519,40525,40533],{"__ignoreMap":21},[99,39340,39341,39343],{"class":101,"line":102},[99,39342,30373],{"class":105},[99,39344,30376],{"class":109},[99,39346,39347,39349,39351,39353],{"class":101,"line":22},[99,39348,30718],{"class":105},[99,39350,37895],{"class":109},[99,39352,30373],{"class":105},[99,39354,37900],{"class":109},[99,39356,39357,39359,39361,39363],{"class":101,"line":1165},[99,39358,30718],{"class":105},[99,39360,30721],{"class":109},[99,39362,30373],{"class":105},[99,39364,30726],{"class":109},[99,39366,39367,39369,39371,39373],{"class":101,"line":1180},[99,39368,30718],{"class":105},[99,39370,30738],{"class":109},[99,39372,30373],{"class":105},[99,39374,30743],{"class":109},[99,39376,39377],{"class":101,"line":1186},[99,39378,2386],{"emptyLinePlaceholder":26},[99,39380,39381,39383,39385,39387,39389,39391,39393],{"class":101,"line":1200},[99,39382,14681],{"class":105},[99,39384,37931],{"class":1949},[99,39386,110],{"class":109},[99,39388,30759],{"class":1949},[99,39390,668],{"class":109},[99,39392,30764],{"class":1949},[99,39394,30767],{"class":109},[99,39396,39397,39399,39401],{"class":101,"line":1206},[99,39398,30782],{"class":105},[99,39400,30785],{"class":158},[99,39402,30788],{"class":109},[99,39404,39405,39407,39409,39411,39413,39415,39417,39419],{"class":101,"line":1297},[99,39406,30798],{"class":158},[99,39408,110],{"class":109},[99,39410,37958],{"class":158},[99,39412,12422],{"class":109},[99,39414,30804],{"class":158},[99,39416,30807],{"class":109},[99,39418,30810],{"class":158},[99,39420,1962],{"class":109},[99,39422,39423],{"class":101,"line":1303},[99,39424,37973],{"class":168},[99,39426,39427],{"class":101,"line":1315},[99,39428,37978],{"class":168},[99,39430,39431,39433,39435,39437],{"class":101,"line":1598},[99,39432,30826],{"class":158},[99,39434,37985],{"class":109},[99,39436,155],{"class":105},[99,39438,37990],{"class":109},[99,39440,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473],{"class":101,"line":1603},[99,39442,37995],{"class":109},[99,39444,30837],{"class":5203},[99,39446,155],{"class":105},[99,39448,327],{"class":158},[99,39450,488],{"class":109},[99,39452,30846],{"class":5203},[99,39454,155],{"class":105},[99,39456,313],{"class":158},[99,39458,488],{"class":109},[99,39460,30855],{"class":5203},[99,39462,155],{"class":105},[99,39464,181],{"class":158},[99,39466,488],{"class":109},[99,39468,30864],{"class":5203},[99,39470,155],{"class":105},[99,39472,327],{"class":158},[99,39474,38028],{"class":109},[99,39476,39477],{"class":101,"line":1609},[99,39478,38033],{"class":109},[99,39480,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513],{"class":101,"line":1614},[99,39482,37995],{"class":109},[99,39484,30837],{"class":5203},[99,39486,155],{"class":105},[99,39488,313],{"class":158},[99,39490,488],{"class":109},[99,39492,30846],{"class":5203},[99,39494,155],{"class":105},[99,39496,313],{"class":158},[99,39498,488],{"class":109},[99,39500,30855],{"class":5203},[99,39502,155],{"class":105},[99,39504,181],{"class":158},[99,39506,488],{"class":109},[99,39508,30864],{"class":5203},[99,39510,155],{"class":105},[99,39512,327],{"class":158},[99,39514,38028],{"class":109},[99,39516,39517],{"class":101,"line":1628},[99,39518,38033],{"class":109},[99,39520,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545],{"class":101,"line":1633},[99,39522,38078],{"class":109},[99,39524,30855],{"class":5203},[99,39526,155],{"class":105},[99,39528,187],{"class":158},[99,39530,488],{"class":109},[99,39532,30910],{"class":5203},[99,39534,155],{"class":105},[99,39536,187],{"class":158},[99,39538,488],{"class":109},[99,39540,30864],{"class":5203},[99,39542,155],{"class":105},[99,39544,301],{"class":158},[99,39546,116],{"class":109},[99,39548,39549],{"class":101,"line":1639},[99,39550,38107],{"class":109},[99,39552,39553],{"class":101,"line":1660},[99,39554,38112],{"class":168},[99,39556,39557,39559,39561,39563],{"class":101,"line":1665},[99,39558,30826],{"class":158},[99,39560,38119],{"class":109},[99,39562,155],{"class":105},[99,39564,37990],{"class":109},[99,39566,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599],{"class":101,"line":1679},[99,39568,37995],{"class":109},[99,39570,30837],{"class":5203},[99,39572,155],{"class":105},[99,39574,313],{"class":158},[99,39576,488],{"class":109},[99,39578,30846],{"class":5203},[99,39580,155],{"class":105},[99,39582,32051],{"class":158},[99,39584,488],{"class":109},[99,39586,30855],{"class":5203},[99,39588,155],{"class":105},[99,39590,181],{"class":158},[99,39592,488],{"class":109},[99,39594,30864],{"class":5203},[99,39596,155],{"class":105},[99,39598,327],{"class":158},[99,39600,38028],{"class":109},[99,39602,39603],{"class":101,"line":1684},[99,39604,38033],{"class":109},[99,39606,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639],{"class":101,"line":1713},[99,39608,37995],{"class":109},[99,39610,30837],{"class":5203},[99,39612,155],{"class":105},[99,39614,32051],{"class":158},[99,39616,488],{"class":109},[99,39618,30846],{"class":5203},[99,39620,155],{"class":105},[99,39622,32051],{"class":158},[99,39624,488],{"class":109},[99,39626,30855],{"class":5203},[99,39628,155],{"class":105},[99,39630,181],{"class":158},[99,39632,488],{"class":109},[99,39634,30864],{"class":5203},[99,39636,155],{"class":105},[99,39638,327],{"class":158},[99,39640,38028],{"class":109},[99,39642,39643],{"class":101,"line":1718},[99,39644,38033],{"class":109},[99,39646,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671],{"class":101,"line":1735},[99,39648,38078],{"class":109},[99,39650,30855],{"class":5203},[99,39652,155],{"class":105},[99,39654,187],{"class":158},[99,39656,488],{"class":109},[99,39658,30910],{"class":5203},[99,39660,155],{"class":105},[99,39662,187],{"class":158},[99,39664,488],{"class":109},[99,39666,30864],{"class":5203},[99,39668,155],{"class":105},[99,39670,301],{"class":158},[99,39672,116],{"class":109},[99,39674,39675],{"class":101,"line":1740},[99,39676,38107],{"class":109},[99,39678,39679],{"class":101,"line":1745},[99,39680,38240],{"class":168},[99,39682,39683,39685,39687,39689],{"class":101,"line":1750},[99,39684,30826],{"class":158},[99,39686,38247],{"class":109},[99,39688,155],{"class":105},[99,39690,37990],{"class":109},[99,39692,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725],{"class":101,"line":1764},[99,39694,37995],{"class":109},[99,39696,30837],{"class":5203},[99,39698,155],{"class":105},[99,39700,32051],{"class":158},[99,39702,488],{"class":109},[99,39704,30846],{"class":5203},[99,39706,155],{"class":105},[99,39708,34851],{"class":158},[99,39710,488],{"class":109},[99,39712,30855],{"class":5203},[99,39714,155],{"class":105},[99,39716,181],{"class":158},[99,39718,488],{"class":109},[99,39720,30864],{"class":5203},[99,39722,155],{"class":105},[99,39724,327],{"class":158},[99,39726,38028],{"class":109},[99,39728,39729],{"class":101,"line":1769},[99,39730,38033],{"class":109},[99,39732,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765],{"class":101,"line":2563},[99,39734,37995],{"class":109},[99,39736,30837],{"class":5203},[99,39738,155],{"class":105},[99,39740,34851],{"class":158},[99,39742,488],{"class":109},[99,39744,30846],{"class":5203},[99,39746,155],{"class":105},[99,39748,34851],{"class":158},[99,39750,488],{"class":109},[99,39752,30855],{"class":5203},[99,39754,155],{"class":105},[99,39756,181],{"class":158},[99,39758,488],{"class":109},[99,39760,30864],{"class":5203},[99,39762,155],{"class":105},[99,39764,327],{"class":158},[99,39766,38028],{"class":109},[99,39768,39769],{"class":101,"line":2577},[99,39770,38033],{"class":109},[99,39772,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805],{"class":101,"line":2585},[99,39774,37995],{"class":109},[99,39776,30837],{"class":5203},[99,39778,155],{"class":105},[99,39780,34851],{"class":158},[99,39782,488],{"class":109},[99,39784,30846],{"class":5203},[99,39786,155],{"class":105},[99,39788,34851],{"class":158},[99,39790,488],{"class":109},[99,39792,30855],{"class":5203},[99,39794,155],{"class":105},[99,39796,181],{"class":158},[99,39798,488],{"class":109},[99,39800,30864],{"class":5203},[99,39802,155],{"class":105},[99,39804,327],{"class":158},[99,39806,38028],{"class":109},[99,39808,39809],{"class":101,"line":2590},[99,39810,38033],{"class":109},[99,39812,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837],{"class":101,"line":2596},[99,39814,38078],{"class":109},[99,39816,30855],{"class":5203},[99,39818,155],{"class":105},[99,39820,187],{"class":158},[99,39822,488],{"class":109},[99,39824,30910],{"class":5203},[99,39826,155],{"class":105},[99,39828,187],{"class":158},[99,39830,488],{"class":109},[99,39832,30864],{"class":5203},[99,39834,155],{"class":105},[99,39836,301],{"class":158},[99,39838,116],{"class":109},[99,39840,39841],{"class":101,"line":2602},[99,39842,38107],{"class":109},[99,39844,39845],{"class":101,"line":2607},[99,39846,38408],{"class":168},[99,39848,39849,39851,39853,39855],{"class":101,"line":7935},[99,39850,30826],{"class":158},[99,39852,38415],{"class":109},[99,39854,155],{"class":105},[99,39856,37990],{"class":109},[99,39858,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891],{"class":101,"line":7959},[99,39860,37995],{"class":109},[99,39862,30837],{"class":5203},[99,39864,155],{"class":105},[99,39866,34851],{"class":158},[99,39868,488],{"class":109},[99,39870,30846],{"class":5203},[99,39872,155],{"class":105},[99,39874,38438],{"class":158},[99,39876,488],{"class":109},[99,39878,30855],{"class":5203},[99,39880,155],{"class":105},[99,39882,181],{"class":158},[99,39884,488],{"class":109},[99,39886,30864],{"class":5203},[99,39888,155],{"class":105},[99,39890,327],{"class":158},[99,39892,38028],{"class":109},[99,39894,39895],{"class":101,"line":7964},[99,39896,38033],{"class":109},[99,39898,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931],{"class":101,"line":7970},[99,39900,37995],{"class":109},[99,39902,30837],{"class":5203},[99,39904,155],{"class":105},[99,39906,38438],{"class":158},[99,39908,488],{"class":109},[99,39910,30846],{"class":5203},[99,39912,155],{"class":105},[99,39914,38438],{"class":158},[99,39916,488],{"class":109},[99,39918,30855],{"class":5203},[99,39920,155],{"class":105},[99,39922,181],{"class":158},[99,39924,488],{"class":109},[99,39926,30864],{"class":5203},[99,39928,155],{"class":105},[99,39930,327],{"class":158},[99,39932,38028],{"class":109},[99,39934,39935],{"class":101,"line":7997},[99,39936,38033],{"class":109},[99,39938,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971],{"class":101,"line":8002},[99,39940,37995],{"class":109},[99,39942,30837],{"class":5203},[99,39944,155],{"class":105},[99,39946,38438],{"class":158},[99,39948,488],{"class":109},[99,39950,30846],{"class":5203},[99,39952,155],{"class":105},[99,39954,38438],{"class":158},[99,39956,488],{"class":109},[99,39958,30855],{"class":5203},[99,39960,155],{"class":105},[99,39962,181],{"class":158},[99,39964,488],{"class":109},[99,39966,30864],{"class":5203},[99,39968,155],{"class":105},[99,39970,327],{"class":158},[99,39972,38028],{"class":109},[99,39974,39975],{"class":101,"line":8008},[99,39976,38033],{"class":109},[99,39978,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003],{"class":101,"line":8020},[99,39980,38078],{"class":109},[99,39982,30855],{"class":5203},[99,39984,155],{"class":105},[99,39986,187],{"class":158},[99,39988,488],{"class":109},[99,39990,30910],{"class":5203},[99,39992,155],{"class":105},[99,39994,187],{"class":158},[99,39996,488],{"class":109},[99,39998,30864],{"class":5203},[99,40000,155],{"class":105},[99,40002,301],{"class":158},[99,40004,116],{"class":109},[99,40006,40007],{"class":101,"line":8032},[99,40008,38107],{"class":109},[99,40010,40011],{"class":101,"line":8044},[99,40012,38577],{"class":168},[99,40014,40015,40017,40019,40021],{"class":101,"line":9703},[99,40016,30826],{"class":158},[99,40018,38584],{"class":109},[99,40020,155],{"class":105},[99,40022,37990],{"class":109},[99,40024,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057],{"class":101,"line":9728},[99,40026,37995],{"class":109},[99,40028,30837],{"class":5203},[99,40030,155],{"class":105},[99,40032,38438],{"class":158},[99,40034,488],{"class":109},[99,40036,30846],{"class":5203},[99,40038,155],{"class":105},[99,40040,38438],{"class":158},[99,40042,488],{"class":109},[99,40044,30855],{"class":5203},[99,40046,155],{"class":105},[99,40048,181],{"class":158},[99,40050,488],{"class":109},[99,40052,30864],{"class":5203},[99,40054,155],{"class":105},[99,40056,327],{"class":158},[99,40058,38028],{"class":109},[99,40060,40061],{"class":101,"line":9751},[99,40062,38033],{"class":109},[99,40064,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097],{"class":101,"line":9775},[99,40066,37995],{"class":109},[99,40068,30837],{"class":5203},[99,40070,155],{"class":105},[99,40072,38438],{"class":158},[99,40074,488],{"class":109},[99,40076,30846],{"class":5203},[99,40078,155],{"class":105},[99,40080,38438],{"class":158},[99,40082,488],{"class":109},[99,40084,30855],{"class":5203},[99,40086,155],{"class":105},[99,40088,181],{"class":158},[99,40090,488],{"class":109},[99,40092,30864],{"class":5203},[99,40094,155],{"class":105},[99,40096,327],{"class":158},[99,40098,38028],{"class":109},[99,40100,40101],{"class":101,"line":9780},[99,40102,38033],{"class":109},[99,40104,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137],{"class":101,"line":9785},[99,40106,37995],{"class":109},[99,40108,30837],{"class":5203},[99,40110,155],{"class":105},[99,40112,38438],{"class":158},[99,40114,488],{"class":109},[99,40116,30846],{"class":5203},[99,40118,155],{"class":105},[99,40120,38438],{"class":158},[99,40122,488],{"class":109},[99,40124,30855],{"class":5203},[99,40126,155],{"class":105},[99,40128,181],{"class":158},[99,40130,488],{"class":109},[99,40132,30864],{"class":5203},[99,40134,155],{"class":105},[99,40136,327],{"class":158},[99,40138,38028],{"class":109},[99,40140,40141],{"class":101,"line":9790},[99,40142,38033],{"class":109},[99,40144,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169],{"class":101,"line":9799},[99,40146,38078],{"class":109},[99,40148,30855],{"class":5203},[99,40150,155],{"class":105},[99,40152,187],{"class":158},[99,40154,488],{"class":109},[99,40156,30910],{"class":5203},[99,40158,155],{"class":105},[99,40160,187],{"class":158},[99,40162,488],{"class":109},[99,40164,30864],{"class":5203},[99,40166,155],{"class":105},[99,40168,301],{"class":158},[99,40170,116],{"class":109},[99,40172,40173],{"class":101,"line":9804},[99,40174,38107],{"class":109},[99,40176,40177],{"class":101,"line":9810},[99,40178,38745],{"class":168},[99,40180,40181,40183,40185,40187],{"class":101,"line":9831},[99,40182,30826],{"class":158},[99,40184,38752],{"class":109},[99,40186,155],{"class":105},[99,40188,37990],{"class":109},[99,40190,40191],{"class":101,"line":9837},[99,40192,38761],{"class":168},[99,40194,40195],{"class":101,"line":9851},[99,40196,38766],{"class":168},[99,40198,40199],{"class":101,"line":9857},[99,40200,38771],{"class":109},[99,40202,40203,40205,40207,40209,40211,40213,40215,40217,40219],{"class":101,"line":9884},[99,40204,38776],{"class":109},[99,40206,479],{"class":158},[99,40208,565],{"class":105},[99,40210,479],{"class":158},[99,40212,565],{"class":105},[99,40214,38438],{"class":158},[99,40216,488],{"class":109},[99,40218,34851],{"class":158},[99,40220,38028],{"class":109},[99,40222,40223],{"class":101,"line":9893},[99,40224,38033],{"class":109},[99,40226,40227,40229,40231,40233,40235],{"class":101,"line":9899},[99,40228,38776],{"class":109},[99,40230,34851],{"class":158},[99,40232,488],{"class":109},[99,40234,32051],{"class":158},[99,40236,38028],{"class":109},[99,40238,40239],{"class":101,"line":9907},[99,40240,38033],{"class":109},[99,40242,40243,40245,40247,40249,40251],{"class":101,"line":9912},[99,40244,38776],{"class":109},[99,40246,32051],{"class":158},[99,40248,488],{"class":109},[99,40250,556],{"class":158},[99,40252,116],{"class":109},[99,40254,40255],{"class":101,"line":16591},[99,40256,38107],{"class":109},[99,40258,40259],{"class":101,"line":16597},[99,40260,2386],{"emptyLinePlaceholder":26},[99,40262,40263],{"class":101,"line":16620},[99,40264,38837],{"class":168},[99,40266,40267],{"class":101,"line":16626},[99,40268,38842],{"class":168},[99,40270,40271,40273,40275,40277,40279],{"class":101,"line":16649},[99,40272,3389],{"class":105},[99,40274,38849],{"class":109},[99,40276,26032],{"class":105},[99,40278,38854],{"class":158},[99,40280,38857],{"class":109},[99,40282,40283],{"class":101,"line":16663},[99,40284,38862],{"class":168},[99,40286,40287,40289,40291],{"class":101,"line":16683},[99,40288,4628],{"class":105},[99,40290,38869],{"class":158},[99,40292,38872],{"class":109},[99,40294,40295],{"class":101,"line":16689},[99,40296,38877],{"class":168},[99,40298,40299,40301,40303,40305,40307],{"class":101,"line":16700},[99,40300,38882],{"class":109},[99,40302,38885],{"class":5203},[99,40304,155],{"class":105},[99,40306,38890],{"class":214},[99,40308,116],{"class":109},[99,40310,40311],{"class":101,"line":16723},[99,40312,38897],{"class":168},[99,40314,40315,40317,40319,40321,40323,40325],{"class":101,"line":16745},[99,40316,38902],{"class":105},[99,40318,38905],{"class":109},[99,40320,38908],{"class":105},[99,40322,38911],{"class":105},[99,40324,38914],{"class":158},[99,40326,3725],{"class":109},[99,40328,40329],{"class":101,"line":16750},[99,40330,38921],{"class":168},[99,40332,40333,40335,40337],{"class":101,"line":16756},[99,40334,38926],{"class":109},[99,40336,301],{"class":158},[99,40338,116],{"class":109},[99,40340,40341],{"class":101,"line":16770},[99,40342,38935],{"class":168},[99,40344,40345,40347,40349],{"class":101,"line":16783},[99,40346,38940],{"class":105},[99,40348,38869],{"class":158},[99,40350,38945],{"class":109},[99,40352,40353],{"class":101,"line":16788},[99,40354,38950],{"class":168},[99,40356,40357],{"class":101,"line":16802},[99,40358,38955],{"class":168},[99,40360,40361,40363,40365,40367,40369],{"class":101,"line":16807},[99,40362,38960],{"class":109},[99,40364,301],{"class":158},[99,40366,488],{"class":109},[99,40368,38967],{"class":158},[99,40370,116],{"class":109},[99,40372,40373],{"class":101,"line":16813},[99,40374,38974],{"class":168},[99,40376,40377,40379,40381,40383,40385,40387],{"class":101,"line":16818},[99,40378,38902],{"class":105},[99,40380,38905],{"class":109},[99,40382,38908],{"class":105},[99,40384,38911],{"class":105},[99,40386,38914],{"class":158},[99,40388,3725],{"class":109},[99,40390,40391,40393,40395],{"class":101,"line":16832},[99,40392,38926],{"class":109},[99,40394,301],{"class":158},[99,40396,116],{"class":109},[99,40398,40399],{"class":101,"line":16837},[99,40400,2386],{"emptyLinePlaceholder":26},[99,40402,40403],{"class":101,"line":16842},[99,40404,35146],{"class":168},[99,40406,40407,40409,40411],{"class":101,"line":16856},[99,40408,30782],{"class":105},[99,40410,31074],{"class":1949},[99,40412,31077],{"class":109},[99,40414,40415,40417,40419,40421],{"class":101,"line":16868},[99,40416,31082],{"class":109},[99,40418,155],{"class":105},[99,40420,30804],{"class":158},[99,40422,39023],{"class":109},[99,40424,40425,40427,40429,40431],{"class":101,"line":16873},[99,40426,31082],{"class":109},[99,40428,155],{"class":105},[99,40430,30804],{"class":158},[99,40432,39034],{"class":109},[99,40434,40435,40437,40439,40441],{"class":101,"line":16886},[99,40436,31082],{"class":109},[99,40438,155],{"class":105},[99,40440,30804],{"class":158},[99,40442,39045],{"class":109},[99,40444,40445,40447,40449,40451],{"class":101,"line":16891},[99,40446,31082],{"class":109},[99,40448,155],{"class":105},[99,40450,30804],{"class":158},[99,40452,39056],{"class":109},[99,40454,40455,40457,40459,40461],{"class":101,"line":16896},[99,40456,31082],{"class":109},[99,40458,155],{"class":105},[99,40460,30804],{"class":158},[99,40462,39067],{"class":109},[99,40464,40465,40467,40469,40471],{"class":101,"line":16901},[99,40466,31082],{"class":109},[99,40468,155],{"class":105},[99,40470,30804],{"class":158},[99,40472,39078],{"class":109},[99,40474,40475,40477],{"class":101,"line":16914},[99,40476,14739],{"class":105},[99,40478,31190],{"class":109},[99,40480,40481],{"class":101,"line":16919},[99,40482,2386],{"emptyLinePlaceholder":26},[99,40484,40485],{"class":101,"line":32614},[99,40486,39093],{"class":168},[99,40488,40489,40491,40493,40495,40497],{"class":101,"line":32620},[99,40490,1517],{"class":105},[99,40492,31201],{"class":158},[99,40494,2935],{"class":105},[99,40496,39104],{"class":214},[99,40498,3725],{"class":109},[99,40500,40501,40503,40505,40507,40509,40511,40513,40515,40517],{"class":101,"line":32626},[99,40502,31218],{"class":109},[99,40504,155],{"class":105},[99,40506,30432],{"class":109},[99,40508,31225],{"class":214},[99,40510,1690],{"class":105},[99,40512,31230],{"class":109},[99,40514,1687],{"class":105},[99,40516,30457],{"class":214},[99,40518,116],{"class":109},[99,40520,40521,40523],{"class":101,"line":32632},[99,40522,31280],{"class":158},[99,40524,30466],{"class":109},[99,40526,40527,40529,40531],{"class":101,"line":32638},[99,40528,31270],{"class":109},[99,40530,155],{"class":105},[99,40532,39141],{"class":109},[99,40534,40535,40537,40539,40541,40543,40545,40547,40549],{"class":101,"line":32649},[99,40536,31280],{"class":158},[99,40538,31283],{"class":109},[99,40540,327],{"class":158},[99,40542,488],{"class":109},[99,40544,31482],{"class":158},[99,40546,488],{"class":109},[99,40548,31482],{"class":158},[99,40550,31296],{"class":109},[53,40552,40553],{"start":1165},[56,40554,40555],{},"测试代码",[90,40557,40559],{"className":30359,"code":40558,"language":30361,"meta":21,"style":21},"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",[96,40560,40561,40567,40577,40587,40591,40601,40612,40616,40620,40624,40632,40648,40658,40674,40684,40698,40702,40712,40722,40732,40738,40742,40746,40754,40758,40774,40782,40786,40790,40798,40806,40810,40814,40818,40822,40828,40832,40842,40850,40858,40862,40866,40870,40878,40882,40898,40902,40906,40910,40922,40926,40938,40942,40946,40958,40962,40972,40976,40980,40992,40996,41005,41009,41013,41021,41025,41033,41037,41041,41045,41049,41053,41069,41077,41081,41085,41133,41139,41143,41153,41161,41169,41173,41177,41181,41185,41193,41197,41213,41217,41225,41233],{"__ignoreMap":21},[99,40562,40563,40565],{"class":101,"line":102},[99,40564,30373],{"class":105},[99,40566,30376],{"class":109},[99,40568,40569,40571,40573,40575],{"class":101,"line":22},[99,40570,30373],{"class":105},[99,40572,31396],{"class":109},[99,40574,31364],{"class":105},[99,40576,31401],{"class":109},[99,40578,40579,40581,40583,40585],{"class":101,"line":1165},[99,40580,30718],{"class":105},[99,40582,31379],{"class":109},[99,40584,30373],{"class":105},[99,40586,31384],{"class":109},[99,40588,40589],{"class":101,"line":1180},[99,40590,33903],{"class":168},[99,40592,40593,40595,40597,40599],{"class":101,"line":1186},[99,40594,30718],{"class":105},[99,40596,31349],{"class":109},[99,40598,30373],{"class":105},[99,40600,31354],{"class":109},[99,40602,40603,40605,40607,40609],{"class":101,"line":1200},[99,40604,30718],{"class":105},[99,40606,31895],{"class":109},[99,40608,30373],{"class":105},[99,40610,40611],{"class":158}," VGG16\n",[99,40613,40614],{"class":101,"line":1206},[99,40615,2386],{"emptyLinePlaceholder":26},[99,40617,40618],{"class":101,"line":1297},[99,40619,2386],{"emptyLinePlaceholder":26},[99,40621,40622],{"class":101,"line":1303},[99,40623,33932],{"class":168},[99,40625,40626,40628,40630],{"class":101,"line":1315},[99,40627,31928],{"class":105},[99,40629,33939],{"class":1949},[99,40631,31934],{"class":109},[99,40633,40634,40636,40638,40640,40642,40644,40646],{"class":101,"line":1598},[99,40635,33946],{"class":109},[99,40637,155],{"class":105},[99,40639,31436],{"class":109},[99,40641,31439],{"class":5203},[99,40643,155],{"class":105},[99,40645,31444],{"class":214},[99,40647,31447],{"class":109},[99,40649,40650,40652,40654,40656],{"class":101,"line":1603},[99,40651,33963],{"class":5203},[99,40653,155],{"class":105},[99,40655,33968],{"class":158},[99,40657,31447],{"class":109},[99,40659,40660,40662,40664,40666,40668,40670,40672],{"class":101,"line":1609},[99,40661,33975],{"class":5203},[99,40663,155],{"class":105},[99,40665,31474],{"class":109},[99,40667,31477],{"class":5203},[99,40669,155],{"class":105},[99,40671,31482],{"class":158},[99,40673,31485],{"class":109},[99,40675,40676,40678,40680,40682],{"class":101,"line":1614},[99,40677,33992],{"class":5203},[99,40679,155],{"class":105},[99,40681,31457],{"class":158},[99,40683,116],{"class":109},[99,40685,40686,40688,40690,40692,40694,40696],{"class":101,"line":1628},[99,40687,34003],{"class":109},[99,40689,155],{"class":105},[99,40691,31515],{"class":109},[99,40693,31518],{"class":5203},[99,40695,155],{"class":105},[99,40697,34014],{"class":109},[99,40699,40700],{"class":101,"line":1633},[99,40701,34019],{"class":168},[99,40703,40704,40706,40708,40710],{"class":101,"line":1639},[99,40705,34024],{"class":5203},[99,40707,155],{"class":105},[99,40709,327],{"class":158},[99,40711,31447],{"class":109},[99,40713,40714,40716,40718,40720],{"class":101,"line":1660},[99,40715,34035],{"class":5203},[99,40717,155],{"class":105},[99,40719,31457],{"class":158},[99,40721,31447],{"class":109},[99,40723,40724,40726,40728,40730],{"class":101,"line":1665},[99,40725,34046],{"class":5203},[99,40727,155],{"class":105},[99,40729,301],{"class":158},[99,40731,116],{"class":109},[99,40733,40734,40736],{"class":101,"line":1679},[99,40735,4076],{"class":105},[99,40737,34059],{"class":109},[99,40739,40740],{"class":101,"line":1684},[99,40741,2386],{"emptyLinePlaceholder":26},[99,40743,40744],{"class":101,"line":1713},[99,40745,34068],{"class":168},[99,40747,40748,40750,40752],{"class":101,"line":1718},[99,40749,31928],{"class":105},[99,40751,34075],{"class":1949},[99,40753,34078],{"class":109},[99,40755,40756],{"class":101,"line":1735},[99,40757,34083],{"class":168},[99,40759,40760,40762,40764,40766,40768,40770,40772],{"class":101,"line":1740},[99,40761,31218],{"class":109},[99,40763,155],{"class":105},[99,40765,31225],{"class":214},[99,40767,1690],{"class":105},[99,40769,31230],{"class":109},[99,40771,1687],{"class":105},[99,40773,34100],{"class":214},[99,40775,40776,40778,40780],{"class":101,"line":1745},[99,40777,31270],{"class":109},[99,40779,155],{"class":105},[99,40781,32270],{"class":109},[99,40783,40784],{"class":101,"line":1750},[99,40785,2386],{"emptyLinePlaceholder":26},[99,40787,40788],{"class":101,"line":1764},[99,40789,34117],{"class":168},[99,40791,40792,40794,40796],{"class":101,"line":1769},[99,40793,34122],{"class":109},[99,40795,155],{"class":105},[99,40797,32323],{"class":158},[99,40799,40800,40802,40804],{"class":101,"line":2563},[99,40801,34131],{"class":109},[99,40803,155],{"class":105},[99,40805,3071],{"class":158},[99,40807,40808],{"class":101,"line":2577},[99,40809,2386],{"emptyLinePlaceholder":26},[99,40811,40812],{"class":101,"line":2585},[99,40813,34144],{"class":168},[99,40815,40816],{"class":101,"line":2590},[99,40817,34149],{"class":168},[99,40819,40820],{"class":101,"line":2596},[99,40821,34154],{"class":168},[99,40823,40824,40826],{"class":101,"line":2602},[99,40825,34159],{"class":105},[99,40827,32865],{"class":109},[99,40829,40830],{"class":101,"line":2607},[99,40831,34166],{"class":168},[99,40833,40834,40836,40838,40840],{"class":101,"line":7935},[99,40835,3389],{"class":105},[99,40837,34173],{"class":109},[99,40839,26032],{"class":105},[99,40841,34178],{"class":109},[99,40843,40844,40846,40848],{"class":101,"line":7959},[99,40845,34183],{"class":109},[99,40847,155],{"class":105},[99,40849,34188],{"class":109},[99,40851,40852,40854,40856],{"class":101,"line":7964},[99,40853,34193],{"class":109},[99,40855,155],{"class":105},[99,40857,34198],{"class":109},[99,40859,40860],{"class":101,"line":7970},[99,40861,34203],{"class":168},[99,40863,40864],{"class":101,"line":7997},[99,40865,32856],{"class":109},[99,40867,40868],{"class":101,"line":8002},[99,40869,34212],{"class":168},[99,40871,40872,40874,40876],{"class":101,"line":8008},[99,40873,32641],{"class":109},[99,40875,155],{"class":105},[99,40877,34221],{"class":109},[99,40879,40880],{"class":101,"line":8020},[99,40881,34226],{"class":168},[99,40883,40884,40886,40888,40890,40892,40894,40896],{"class":101,"line":8032},[99,40885,32658],{"class":109},[99,40887,155],{"class":105},[99,40889,32663],{"class":109},[99,40891,32666],{"class":5203},[99,40893,155],{"class":105},[99,40895,327],{"class":158},[99,40897,116],{"class":109},[99,40899,40900],{"class":101,"line":8044},[99,40901,34247],{"class":168},[99,40903,40904],{"class":101,"line":9703},[99,40905,34252],{"class":168},[99,40907,40908],{"class":101,"line":9728},[99,40909,34257],{"class":168},[99,40911,40912,40914,40916,40918,40920],{"class":101,"line":9751},[99,40913,34262],{"class":109},[99,40915,9464],{"class":105},[99,40917,32768],{"class":109},[99,40919,2935],{"class":105},[99,40921,34271],{"class":109},[99,40923,40924],{"class":101,"line":9775},[99,40925,34276],{"class":168},[99,40927,40928,40930,40932,40934,40936],{"class":101,"line":9780},[99,40929,34281],{"class":109},[99,40931,9464],{"class":105},[99,40933,34286],{"class":109},[99,40935,301],{"class":158},[99,40937,116],{"class":109},[99,40939,40940],{"class":101,"line":9785},[99,40941,2386],{"emptyLinePlaceholder":26},[99,40943,40944],{"class":101,"line":9790},[99,40945,34299],{"class":168},[99,40947,40948,40950,40952,40954,40956],{"class":101,"line":9799},[99,40949,34304],{"class":109},[99,40951,155],{"class":105},[99,40953,34309],{"class":109},[99,40955,694],{"class":105},[99,40957,34314],{"class":109},[99,40959,40960],{"class":101,"line":9804},[99,40961,34319],{"class":168},[99,40963,40964,40966,40968,40970],{"class":101,"line":9810},[99,40965,32432],{"class":158},[99,40967,110],{"class":109},[99,40969,34328],{"class":214},[99,40971,34331],{"class":109},[99,40973,40974],{"class":101,"line":9831},[99,40975,2386],{"emptyLinePlaceholder":26},[99,40977,40978],{"class":101,"line":9837},[99,40979,34340],{"class":168},[99,40981,40982,40984,40986,40988,40990],{"class":101,"line":9851},[99,40983,1517],{"class":105},[99,40985,31201],{"class":158},[99,40987,2935],{"class":105},[99,40989,31206],{"class":214},[99,40991,3725],{"class":109},[99,40993,40994],{"class":101,"line":9857},[99,40995,34357],{"class":168},[99,40997,40998,41000,41002],{"class":101,"line":9884},[99,40999,31270],{"class":109},[99,41001,155],{"class":105},[99,41003,41004],{"class":109},"VGG16()\n",[99,41006,41007],{"class":101,"line":9893},[99,41008,34370],{"class":168},[99,41010,41011],{"class":101,"line":9899},[99,41012,34375],{"class":168},[99,41014,41015,41017,41019],{"class":101,"line":9907},[99,41016,34380],{"class":109},[99,41018,34383],{"class":214},[99,41020,30478],{"class":109},[99,41022,41023],{"class":101,"line":9912},[99,41024,34390],{"class":168},[99,41026,41027,41029,41031],{"class":101,"line":16591},[99,41028,34003],{"class":109},[99,41030,155],{"class":105},[99,41032,34399],{"class":109},[99,41034,41035],{"class":101,"line":16597},[99,41036,34404],{"class":168},[99,41038,41039],{"class":101,"line":16620},[99,41040,34409],{"class":109},[99,41042,41043],{"class":101,"line":16626},[99,41044,2386],{"emptyLinePlaceholder":26},[99,41046,41047],{"class":101,"line":16649},[99,41048,34418],{"class":168},[99,41050,41051],{"class":101,"line":16663},[99,41052,34423],{"class":168},[99,41054,41055,41057,41059,41061,41063,41065,41067],{"class":101,"line":16683},[99,41056,31218],{"class":109},[99,41058,155],{"class":105},[99,41060,31225],{"class":214},[99,41062,1690],{"class":105},[99,41064,31230],{"class":109},[99,41066,1687],{"class":105},[99,41068,34100],{"class":214},[99,41070,41071,41073,41075],{"class":101,"line":16689},[99,41072,31270],{"class":109},[99,41074,155],{"class":105},[99,41076,32270],{"class":109},[99,41078,41079],{"class":101,"line":16700},[99,41080,34452],{"class":168},[99,41082,41083],{"class":101,"line":16723},[99,41084,34457],{"class":168},[99,41086,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131],{"class":101,"line":16745},[99,41088,34462],{"class":109},[99,41090,155],{"class":105},[99,41092,1000],{"class":109},[99,41094,34469],{"class":214},[99,41096,488],{"class":109},[99,41098,34474],{"class":214},[99,41100,488],{"class":109},[99,41102,34479],{"class":214},[99,41104,488],{"class":109},[99,41106,34484],{"class":214},[99,41108,488],{"class":109},[99,41110,34489],{"class":214},[99,41112,488],{"class":109},[99,41114,34494],{"class":214},[99,41116,488],{"class":109},[99,41118,34499],{"class":214},[99,41120,488],{"class":109},[99,41122,34504],{"class":214},[99,41124,488],{"class":109},[99,41126,34509],{"class":214},[99,41128,488],{"class":109},[99,41130,34514],{"class":214},[99,41132,33227],{"class":109},[99,41134,41135,41137],{"class":101,"line":16750},[99,41136,34159],{"class":105},[99,41138,32865],{"class":109},[99,41140,41141],{"class":101,"line":16756},[99,41142,34527],{"class":168},[99,41144,41145,41147,41149,41151],{"class":101,"line":16770},[99,41146,3389],{"class":105},[99,41148,34534],{"class":109},[99,41150,26032],{"class":105},[99,41152,34178],{"class":109},[99,41154,41155,41157,41159],{"class":101,"line":16783},[99,41156,32591],{"class":109},[99,41158,155],{"class":105},[99,41160,32596],{"class":109},[99,41162,41163,41165,41167],{"class":101,"line":16788},[99,41164,32606],{"class":109},[99,41166,155],{"class":105},[99,41168,32611],{"class":109},[99,41170,41171],{"class":101,"line":16802},[99,41172,2386],{"emptyLinePlaceholder":26},[99,41174,41175],{"class":101,"line":16807},[99,41176,34563],{"class":168},[99,41178,41179],{"class":101,"line":16813},[99,41180,32856],{"class":109},[99,41182,41183],{"class":101,"line":16818},[99,41184,34572],{"class":168},[99,41186,41187,41189,41191],{"class":101,"line":16832},[99,41188,32641],{"class":109},[99,41190,155],{"class":105},[99,41192,32646],{"class":109},[99,41194,41195],{"class":101,"line":16837},[99,41196,34585],{"class":168},[99,41198,41199,41201,41203,41205,41207,41209,41211],{"class":101,"line":16842},[99,41200,32658],{"class":109},[99,41202,155],{"class":105},[99,41204,32663],{"class":109},[99,41206,32666],{"class":5203},[99,41208,155],{"class":105},[99,41210,327],{"class":158},[99,41212,116],{"class":109},[99,41214,41215],{"class":101,"line":16856},[99,41216,34606],{"class":168},[99,41218,41219,41221,41223],{"class":101,"line":16868},[99,41220,34611],{"class":109},[99,41222,155],{"class":105},[99,41224,34616],{"class":109},[99,41226,41227,41229,41231],{"class":101,"line":16873},[99,41228,34621],{"class":109},[99,41230,155],{"class":105},[99,41232,34626],{"class":109},[99,41234,41235,41237,41239,41241,41243,41245,41247,41249],{"class":101,"line":16886},[99,41236,34631],{"class":158},[99,41238,110],{"class":109},[99,41240,34636],{"class":214},[99,41242,34639],{"class":109},[99,41244,34642],{"class":214},[99,41246,488],{"class":109},[99,41248,34647],{"class":214},[99,41250,34650],{"class":109},[70,41252,41254],{"id":41253},"_23googlenet","2.3.GoogLeNet",[21985,41256,41258],{"id":41257},"_231原理","2.3.1.原理",[53,41260,41261],{},[56,41262,41263],{},"网络结构",[14,41265,41266],{},[1448,41267],{"alt":21,"src":41268},"\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",[14,41270,41271],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41273,41274],{},[1448,41275],{"alt":21,"src":41276},"\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",[14,41278,41279],{},[1448,41280],{"alt":21,"src":41281},"\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",[14,41283,41284],{},[1448,41285],{"alt":21,"src":41286},"\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",[53,41288,41289],{"start":22},[56,41290,41291],{},"1x1卷积的优点",[14,41293,41294],{},[1448,41295],{"alt":21,"src":41296},"\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",[53,41298,41299],{"start":1165},[56,41300,41301],{},"全局平均池化层优点",[14,41303,41304],{},[1448,41305],{"alt":21,"src":41306},"\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",[14,41308,41309],{},[1448,41310],{"alt":21,"src":41311},"\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",[53,41313,41314],{"start":1180},[56,41315,41316],{},"参数详细描述",[14,41318,41319],{},[1448,41320],{"alt":21,"src":41321},"\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",[14,41323,41324],{},[1448,41325],{"alt":21,"src":41326},"\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",[14,41328,41329],{},[1448,41330],{"alt":21,"src":41331},"\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",[14,41333,41334],{},[1448,41335],{"alt":21,"src":41336},"\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",[14,41338,41339],{},[1448,41340],{"alt":21,"src":41341},"\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",[14,41343,41344],{},[1448,41345],{"alt":21,"src":41346},"\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",[14,41348,41349],{},[1448,41350],{"alt":21,"src":41351},"\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",[14,41353,41354],{},[1448,41355],{"alt":21,"src":41356},"\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",[14,41358,41359],{},[1448,41360],{"alt":21,"src":41361},"\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",[14,41363,41364],{},[1448,41365],{"alt":21,"src":41366},"\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",[14,41368,41369],{},[1448,41370],{"alt":21,"src":41371},"\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",[14,41373,41374],{},[1448,41375],{"alt":21,"src":41376},"\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",[14,41378,41379],{},[1448,41380],{"alt":21,"src":41381},"\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",[14,41383,41384],{},[1448,41385],{"alt":21,"src":41386},"\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",[14,41388,41389],{},[1448,41390],{"alt":21,"src":41391},"\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",[14,41393,41394],{},[1448,41395],{"alt":21,"src":41396},"\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",[14,41398,41399],{},[1448,41400],{"alt":21,"src":41401},"\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",[14,41403,41404],{},[1448,41405],{"alt":21,"src":41406},"\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",[14,41408,41409],{},[1448,41410],{"alt":21,"src":41411},"\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",[14,41413,41414],{},[1448,41415],{"alt":21,"src":41416},"\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",[14,41418,41419],{},[1448,41420],{"alt":21,"src":41421},"\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",[21985,41423,41425],{"id":41424},"_232代码实现","2.3.2.代码实现",[53,41427,41428],{},[56,41429,30692],{},[14,41431,41432],{},"根据原理一步一步搭建即可",[90,41434,41436],{"className":30359,"code":41435,"language":30361,"meta":21,"style":21},"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",[96,41437,41438,41444,41454,41464,41468,41485,41494,41509,41519,41524,41557,41562,41599,41646,41651,41687,41734,41739,41744,41779,41811,41815,41823,41839,41863,41888,41909,41914,41929,41933,41937,41942,41959,41964,41973,41988,41999,42043,42047,42075,42079,42090,42118,42122,42159,42163,42191,42195,42206,42242,42274,42302,42306,42317,42351,42383,42415,42448,42482,42510,42514,42525,42558,42590,42604,42608,42621,42625,42630,42642,42650,42672,42677,42682,42687,42692,42697,42702,42716,42724,42733,42746,42761,42770,42774,42782,42793,42804,42815,42826,42837,42843,42847,42852,42864,42884,42893],{"__ignoreMap":21},[99,41439,41440,41442],{"class":101,"line":102},[99,41441,30373],{"class":105},[99,41443,30376],{"class":109},[99,41445,41446,41448,41450,41452],{"class":101,"line":22},[99,41447,30718],{"class":105},[99,41449,30721],{"class":109},[99,41451,30373],{"class":105},[99,41453,30726],{"class":109},[99,41455,41456,41458,41460,41462],{"class":101,"line":1165},[99,41457,30718],{"class":105},[99,41459,30738],{"class":109},[99,41461,30373],{"class":105},[99,41463,30743],{"class":109},[99,41465,41466],{"class":101,"line":1180},[99,41467,2386],{"emptyLinePlaceholder":26},[99,41469,41470,41472,41475,41477,41479,41481,41483],{"class":101,"line":1186},[99,41471,14681],{"class":105},[99,41473,41474],{"class":1949}," Inception",[99,41476,110],{"class":109},[99,41478,30759],{"class":1949},[99,41480,668],{"class":109},[99,41482,30764],{"class":1949},[99,41484,30767],{"class":109},[99,41486,41487,41489,41491],{"class":101,"line":1200},[99,41488,30782],{"class":105},[99,41490,30785],{"class":158},[99,41492,41493],{"class":109},"(self,in_channels,c1,c2,c3,c4):\n",[99,41495,41496,41498,41501,41503,41505,41507],{"class":101,"line":1206},[99,41497,30798],{"class":158},[99,41499,41500],{"class":109},"(Inception,",[99,41502,30804],{"class":158},[99,41504,30807],{"class":109},[99,41506,30810],{"class":158},[99,41508,1962],{"class":109},[99,41510,41511,41513,41515,41517],{"class":101,"line":1297},[99,41512,30826],{"class":158},[99,41514,34752],{"class":109},[99,41516,155],{"class":105},[99,41518,34757],{"class":109},[99,41520,41521],{"class":101,"line":1303},[99,41522,41523],{"class":168},"        # 路线1：定义1*1卷积\n",[99,41525,41526,41528,41531,41533,41535,41537,41539,41542,41544,41546,41549,41551,41553,41555],{"class":101,"line":1315},[99,41527,30826],{"class":158},[99,41529,41530],{"class":109},".p1_1",[99,41532,155],{"class":105},[99,41534,30834],{"class":109},[99,41536,30837],{"class":5203},[99,41538,155],{"class":105},[99,41540,41541],{"class":109},"in_channels,",[99,41543,30846],{"class":5203},[99,41545,155],{"class":105},[99,41547,41548],{"class":109},"c1,",[99,41550,30855],{"class":5203},[99,41552,155],{"class":105},[99,41554,327],{"class":158},[99,41556,116],{"class":109},[99,41558,41559],{"class":101,"line":1598},[99,41560,41561],{"class":168},"        # 路线2：定义1*1卷积和3*3\n",[99,41563,41564,41566,41569,41571,41573,41575,41577,41579,41581,41583,41586,41588,41591,41593,41595,41597],{"class":101,"line":1603},[99,41565,30826],{"class":158},[99,41567,41568],{"class":109},".p2_1",[99,41570,155],{"class":105},[99,41572,30834],{"class":109},[99,41574,30837],{"class":5203},[99,41576,155],{"class":105},[99,41578,41541],{"class":109},[99,41580,30846],{"class":5203},[99,41582,155],{"class":105},[99,41584,41585],{"class":109},"c2[",[99,41587,301],{"class":158},[99,41589,41590],{"class":109},"],",[99,41592,30855],{"class":5203},[99,41594,155],{"class":105},[99,41596,327],{"class":158},[99,41598,116],{"class":109},[99,41600,41601,41603,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644],{"class":101,"line":1609},[99,41602,30826],{"class":158},[99,41604,41605],{"class":109},".p2_2",[99,41607,155],{"class":105},[99,41609,30834],{"class":109},[99,41611,30837],{"class":5203},[99,41613,155],{"class":105},[99,41615,41585],{"class":109},[99,41617,301],{"class":158},[99,41619,41590],{"class":109},[99,41621,30846],{"class":5203},[99,41623,155],{"class":105},[99,41625,41585],{"class":109},[99,41627,327],{"class":158},[99,41629,41590],{"class":109},[99,41631,30855],{"class":5203},[99,41633,155],{"class":105},[99,41635,181],{"class":158},[99,41637,488],{"class":109},[99,41639,30864],{"class":5203},[99,41641,155],{"class":105},[99,41643,327],{"class":158},[99,41645,116],{"class":109},[99,41647,41648],{"class":101,"line":1614},[99,41649,41650],{"class":168},"        # 路线3：定义1*1卷积和5*5\n",[99,41652,41653,41655,41658,41660,41662,41664,41666,41668,41670,41672,41675,41677,41679,41681,41683,41685],{"class":101,"line":1628},[99,41654,30826],{"class":158},[99,41656,41657],{"class":109},".p3_1",[99,41659,155],{"class":105},[99,41661,30834],{"class":109},[99,41663,30837],{"class":5203},[99,41665,155],{"class":105},[99,41667,41541],{"class":109},[99,41669,30846],{"class":5203},[99,41671,155],{"class":105},[99,41673,41674],{"class":109},"c3[",[99,41676,301],{"class":158},[99,41678,41590],{"class":109},[99,41680,30855],{"class":5203},[99,41682,155],{"class":105},[99,41684,327],{"class":158},[99,41686,116],{"class":109},[99,41688,41689,41691,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732],{"class":101,"line":1633},[99,41690,30826],{"class":158},[99,41692,41693],{"class":109},".p3_2",[99,41695,155],{"class":105},[99,41697,30834],{"class":109},[99,41699,30837],{"class":5203},[99,41701,155],{"class":105},[99,41703,41674],{"class":109},[99,41705,301],{"class":158},[99,41707,41590],{"class":109},[99,41709,30846],{"class":5203},[99,41711,155],{"class":105},[99,41713,41674],{"class":109},[99,41715,327],{"class":158},[99,41717,41590],{"class":109},[99,41719,30855],{"class":5203},[99,41721,155],{"class":105},[99,41723,429],{"class":158},[99,41725,488],{"class":109},[99,41727,30864],{"class":5203},[99,41729,155],{"class":105},[99,41731,187],{"class":158},[99,41733,116],{"class":109},[99,41735,41736],{"class":101,"line":1639},[99,41737,41738],{"class":168},"        # 路线4：定义3*3最大池化和1*1卷积\n",[99,41740,41741],{"class":101,"line":1660},[99,41742,41743],{"class":168},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[99,41745,41746,41748,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777],{"class":101,"line":1665},[99,41747,30826],{"class":158},[99,41749,41750],{"class":109},".p4_1",[99,41752,155],{"class":105},[99,41754,34810],{"class":109},[99,41756,30855],{"class":5203},[99,41758,155],{"class":105},[99,41760,181],{"class":158},[99,41762,488],{"class":109},[99,41764,30910],{"class":5203},[99,41766,155],{"class":105},[99,41768,327],{"class":158},[99,41770,488],{"class":109},[99,41772,30864],{"class":5203},[99,41774,155],{"class":105},[99,41776,327],{"class":158},[99,41778,116],{"class":109},[99,41780,41781,41783,41786,41788,41790,41792,41794,41796,41798,41800,41803,41805,41807,41809],{"class":101,"line":1679},[99,41782,30826],{"class":158},[99,41784,41785],{"class":109},".p4_2",[99,41787,155],{"class":105},[99,41789,30834],{"class":109},[99,41791,30837],{"class":5203},[99,41793,155],{"class":105},[99,41795,41541],{"class":109},[99,41797,30846],{"class":5203},[99,41799,155],{"class":105},[99,41801,41802],{"class":109},"c4,",[99,41804,30855],{"class":5203},[99,41806,155],{"class":105},[99,41808,327],{"class":158},[99,41810,116],{"class":109},[99,41812,41813],{"class":101,"line":1684},[99,41814,2386],{"emptyLinePlaceholder":26},[99,41816,41817,41819,41821],{"class":101,"line":1713},[99,41818,30782],{"class":105},[99,41820,31074],{"class":1949},[99,41822,31077],{"class":109},[99,41824,41825,41828,41830,41832,41834,41836],{"class":101,"line":1718},[99,41826,41827],{"class":109},"        p1",[99,41829,155],{"class":105},[99,41831,30804],{"class":158},[99,41833,35165],{"class":109},[99,41835,30804],{"class":158},[99,41837,41838],{"class":109},".p1_1(x))\n",[99,41840,41841,41843,41845,41847,41849,41851,41854,41856,41858,41860],{"class":101,"line":1735},[99,41842,7072],{"class":109},[99,41844,155],{"class":105},[99,41846,30804],{"class":158},[99,41848,35165],{"class":109},[99,41850,30804],{"class":158},[99,41852,41853],{"class":109},".p2_2(",[99,41855,30804],{"class":158},[99,41857,35165],{"class":109},[99,41859,30804],{"class":158},[99,41861,41862],{"class":109},".p2_1(x))))\n",[99,41864,41865,41868,41870,41872,41874,41876,41879,41881,41883,41885],{"class":101,"line":1740},[99,41866,41867],{"class":109},"        p3",[99,41869,155],{"class":105},[99,41871,30804],{"class":158},[99,41873,35165],{"class":109},[99,41875,30804],{"class":158},[99,41877,41878],{"class":109},".p3_2(",[99,41880,30804],{"class":158},[99,41882,35165],{"class":109},[99,41884,30804],{"class":158},[99,41886,41887],{"class":109},".p3_1(x))))\n",[99,41889,41890,41893,41895,41897,41899,41901,41904,41906],{"class":101,"line":1745},[99,41891,41892],{"class":109},"        p4",[99,41894,155],{"class":105},[99,41896,30804],{"class":158},[99,41898,35165],{"class":109},[99,41900,30804],{"class":158},[99,41902,41903],{"class":109},".p4_2(",[99,41905,30804],{"class":158},[99,41907,41908],{"class":109},".p4_1(x)))\n",[99,41910,41911],{"class":101,"line":1750},[99,41912,41913],{"class":168},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[99,41915,41916,41918,41921,41923,41925,41927],{"class":101,"line":1764},[99,41917,14739],{"class":105},[99,41919,41920],{"class":109}," torch.cat((p1,p2,p3,p4),",[99,41922,32666],{"class":5203},[99,41924,155],{"class":105},[99,41926,327],{"class":158},[99,41928,116],{"class":109},[99,41930,41931],{"class":101,"line":1769},[99,41932,2386],{"emptyLinePlaceholder":26},[99,41934,41935],{"class":101,"line":2563},[99,41936,2386],{"emptyLinePlaceholder":26},[99,41938,41939],{"class":101,"line":2577},[99,41940,41941],{"class":168},"# 搭建GoogLeNet网络\n",[99,41943,41944,41946,41949,41951,41953,41955,41957],{"class":101,"line":2585},[99,41945,14681],{"class":105},[99,41947,41948],{"class":1949}," GoogLeNet",[99,41950,110],{"class":109},[99,41952,30759],{"class":1949},[99,41954,668],{"class":109},[99,41956,30764],{"class":1949},[99,41958,30767],{"class":109},[99,41960,41961],{"class":101,"line":2590},[99,41962,41963],{"class":168},"    # 必须把Inception导入到里边\n",[99,41965,41966,41968,41970],{"class":101,"line":2596},[99,41967,30782],{"class":105},[99,41969,30785],{"class":158},[99,41971,41972],{"class":109},"(self,Inception):\n",[99,41974,41975,41977,41980,41982,41984,41986],{"class":101,"line":2602},[99,41976,30798],{"class":158},[99,41978,41979],{"class":109},"(GoogLeNet,",[99,41981,30804],{"class":158},[99,41983,30807],{"class":109},[99,41985,30810],{"class":158},[99,41987,1962],{"class":109},[99,41989,41990,41992,41995,41997],{"class":101,"line":2607},[99,41991,30826],{"class":158},[99,41993,41994],{"class":109},".b1",[99,41996,155],{"class":105},[99,41998,37990],{"class":109},[99,42000,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041],{"class":101,"line":7935},[99,42002,37995],{"class":109},[99,42004,30837],{"class":5203},[99,42006,155],{"class":105},[99,42008,327],{"class":158},[99,42010,488],{"class":109},[99,42012,30846],{"class":5203},[99,42014,155],{"class":105},[99,42016,313],{"class":158},[99,42018,488],{"class":109},[99,42020,30855],{"class":5203},[99,42022,155],{"class":105},[99,42024,479],{"class":158},[99,42026,488],{"class":109},[99,42028,30910],{"class":5203},[99,42030,155],{"class":105},[99,42032,187],{"class":158},[99,42034,488],{"class":109},[99,42036,30864],{"class":5203},[99,42038,155],{"class":105},[99,42040,181],{"class":158},[99,42042,38028],{"class":109},[99,42044,42045],{"class":101,"line":7959},[99,42046,38033],{"class":109},[99,42048,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073],{"class":101,"line":7964},[99,42050,38078],{"class":109},[99,42052,30855],{"class":5203},[99,42054,155],{"class":105},[99,42056,181],{"class":158},[99,42058,488],{"class":109},[99,42060,30910],{"class":5203},[99,42062,155],{"class":105},[99,42064,187],{"class":158},[99,42066,488],{"class":109},[99,42068,30864],{"class":5203},[99,42070,155],{"class":105},[99,42072,327],{"class":158},[99,42074,116],{"class":109},[99,42076,42077],{"class":101,"line":7970},[99,42078,38107],{"class":109},[99,42080,42081,42083,42086,42088],{"class":101,"line":7997},[99,42082,30826],{"class":158},[99,42084,42085],{"class":109},".b2",[99,42087,155],{"class":105},[99,42089,37990],{"class":109},[99,42091,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116],{"class":101,"line":8002},[99,42093,37995],{"class":109},[99,42095,30837],{"class":5203},[99,42097,155],{"class":105},[99,42099,313],{"class":158},[99,42101,488],{"class":109},[99,42103,30846],{"class":5203},[99,42105,155],{"class":105},[99,42107,313],{"class":158},[99,42109,488],{"class":109},[99,42111,30855],{"class":5203},[99,42113,155],{"class":105},[99,42115,327],{"class":158},[99,42117,38028],{"class":109},[99,42119,42120],{"class":101,"line":8008},[99,42121,38033],{"class":109},[99,42123,42124,42126,42128,42130,42132,42134,42136,42138,42141,42143,42145,42147,42149,42151,42153,42155,42157],{"class":101,"line":8020},[99,42125,37995],{"class":109},[99,42127,30837],{"class":5203},[99,42129,155],{"class":105},[99,42131,313],{"class":158},[99,42133,488],{"class":109},[99,42135,30846],{"class":5203},[99,42137,155],{"class":105},[99,42139,42140],{"class":158},"192",[99,42142,488],{"class":109},[99,42144,30855],{"class":5203},[99,42146,155],{"class":105},[99,42148,181],{"class":158},[99,42150,488],{"class":109},[99,42152,30864],{"class":5203},[99,42154,155],{"class":105},[99,42156,327],{"class":158},[99,42158,38028],{"class":109},[99,42160,42161],{"class":101,"line":8032},[99,42162,38033],{"class":109},[99,42164,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189],{"class":101,"line":8044},[99,42166,38078],{"class":109},[99,42168,30855],{"class":5203},[99,42170,155],{"class":105},[99,42172,181],{"class":158},[99,42174,488],{"class":109},[99,42176,30910],{"class":5203},[99,42178,155],{"class":105},[99,42180,187],{"class":158},[99,42182,488],{"class":109},[99,42184,30864],{"class":5203},[99,42186,155],{"class":105},[99,42188,327],{"class":158},[99,42190,116],{"class":109},[99,42192,42193],{"class":101,"line":9703},[99,42194,38107],{"class":109},[99,42196,42197,42199,42202,42204],{"class":101,"line":9728},[99,42198,30826],{"class":158},[99,42200,42201],{"class":109},".b3",[99,42203,155],{"class":105},[99,42205,37990],{"class":109},[99,42207,42208,42211,42213,42215,42217,42220,42222,42224,42226,42229,42231,42233,42235,42238,42240],{"class":101,"line":9751},[99,42209,42210],{"class":109},"            Inception(",[99,42212,42140],{"class":158},[99,42214,488],{"class":109},[99,42216,313],{"class":158},[99,42218,42219],{"class":109},",(",[99,42221,319],{"class":158},[99,42223,488],{"class":109},[99,42225,32051],{"class":158},[99,42227,42228],{"class":109},"),(",[99,42230,711],{"class":158},[99,42232,488],{"class":109},[99,42234,307],{"class":158},[99,42236,42237],{"class":109},"),",[99,42239,307],{"class":158},[99,42241,38028],{"class":109},[99,42243,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272],{"class":101,"line":9775},[99,42245,42210],{"class":109},[99,42247,34851],{"class":158},[99,42249,488],{"class":109},[99,42251,32051],{"class":158},[99,42253,42219],{"class":109},[99,42255,32051],{"class":158},[99,42257,488],{"class":109},[99,42259,42140],{"class":158},[99,42261,42228],{"class":109},[99,42263,307],{"class":158},[99,42265,488],{"class":109},[99,42267,319],{"class":158},[99,42269,42237],{"class":109},[99,42271,313],{"class":158},[99,42273,38028],{"class":109},[99,42275,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300],{"class":101,"line":9780},[99,42277,38078],{"class":109},[99,42279,30855],{"class":5203},[99,42281,155],{"class":105},[99,42283,181],{"class":158},[99,42285,488],{"class":109},[99,42287,30910],{"class":5203},[99,42289,155],{"class":105},[99,42291,187],{"class":158},[99,42293,488],{"class":109},[99,42295,30864],{"class":5203},[99,42297,155],{"class":105},[99,42299,327],{"class":158},[99,42301,116],{"class":109},[99,42303,42304],{"class":101,"line":9785},[99,42305,38107],{"class":109},[99,42307,42308,42310,42313,42315],{"class":101,"line":9790},[99,42309,30826],{"class":158},[99,42311,42312],{"class":109},".b4",[99,42314,155],{"class":105},[99,42316,37990],{"class":109},[99,42318,42319,42321,42324,42326,42328,42330,42332,42334,42337,42339,42341,42343,42345,42347,42349],{"class":101,"line":9799},[99,42320,42210],{"class":109},[99,42322,42323],{"class":158},"480",[99,42325,488],{"class":109},[99,42327,42140],{"class":158},[99,42329,42219],{"class":109},[99,42331,319],{"class":158},[99,42333,488],{"class":109},[99,42335,42336],{"class":158},"208",[99,42338,42228],{"class":109},[99,42340,711],{"class":158},[99,42342,488],{"class":109},[99,42344,717],{"class":158},[99,42346,42237],{"class":109},[99,42348,313],{"class":158},[99,42350,38028],{"class":109},[99,42352,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381],{"class":101,"line":9804},[99,42354,42210],{"class":109},[99,42356,38438],{"class":158},[99,42358,488],{"class":109},[99,42360,21035],{"class":158},[99,42362,42219],{"class":109},[99,42364,728],{"class":158},[99,42366,488],{"class":109},[99,42368,31482],{"class":158},[99,42370,42228],{"class":109},[99,42372,910],{"class":158},[99,42374,488],{"class":109},[99,42376,313],{"class":158},[99,42378,42237],{"class":109},[99,42380,313],{"class":158},[99,42382,38028],{"class":109},[99,42384,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413],{"class":101,"line":9810},[99,42386,42210],{"class":109},[99,42388,38438],{"class":158},[99,42390,488],{"class":109},[99,42392,32051],{"class":158},[99,42394,42219],{"class":109},[99,42396,32051],{"class":158},[99,42398,488],{"class":109},[99,42400,34851],{"class":158},[99,42402,42228],{"class":109},[99,42404,910],{"class":158},[99,42406,488],{"class":109},[99,42408,313],{"class":158},[99,42410,42237],{"class":109},[99,42412,313],{"class":158},[99,42414,38028],{"class":109},[99,42416,42417,42419,42421,42423,42425,42427,42429,42431,42434,42436,42438,42440,42442,42444,42446],{"class":101,"line":9831},[99,42418,42210],{"class":109},[99,42420,38438],{"class":158},[99,42422,488],{"class":109},[99,42424,728],{"class":158},[99,42426,42219],{"class":109},[99,42428,32051],{"class":158},[99,42430,488],{"class":109},[99,42432,42433],{"class":158},"288",[99,42435,42228],{"class":109},[99,42437,307],{"class":158},[99,42439,488],{"class":109},[99,42441,313],{"class":158},[99,42443,42237],{"class":109},[99,42445,313],{"class":158},[99,42447,38028],{"class":109},[99,42449,42450,42452,42455,42457,42459,42461,42463,42465,42468,42470,42472,42474,42476,42478,42480],{"class":101,"line":9837},[99,42451,42210],{"class":109},[99,42453,42454],{"class":158},"528",[99,42456,488],{"class":109},[99,42458,34851],{"class":158},[99,42460,42219],{"class":109},[99,42462,21035],{"class":158},[99,42464,488],{"class":109},[99,42466,42467],{"class":158},"320",[99,42469,42228],{"class":109},[99,42471,307],{"class":158},[99,42473,488],{"class":109},[99,42475,32051],{"class":158},[99,42477,42237],{"class":109},[99,42479,32051],{"class":158},[99,42481,38028],{"class":109},[99,42483,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508],{"class":101,"line":9851},[99,42485,38078],{"class":109},[99,42487,30855],{"class":5203},[99,42489,155],{"class":105},[99,42491,181],{"class":158},[99,42493,488],{"class":109},[99,42495,30910],{"class":5203},[99,42497,155],{"class":105},[99,42499,187],{"class":158},[99,42501,488],{"class":109},[99,42503,30864],{"class":5203},[99,42505,155],{"class":105},[99,42507,327],{"class":158},[99,42509,116],{"class":109},[99,42511,42512],{"class":101,"line":9857},[99,42513,38107],{"class":109},[99,42515,42516,42518,42521,42523],{"class":101,"line":9884},[99,42517,30826],{"class":158},[99,42519,42520],{"class":109},".b5",[99,42522,155],{"class":105},[99,42524,37990],{"class":109},[99,42526,42527,42529,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556],{"class":101,"line":9893},[99,42528,42210],{"class":109},[99,42530,42531],{"class":158},"832",[99,42533,488],{"class":109},[99,42535,34851],{"class":158},[99,42537,42219],{"class":109},[99,42539,21035],{"class":158},[99,42541,488],{"class":109},[99,42543,42467],{"class":158},[99,42545,42228],{"class":109},[99,42547,307],{"class":158},[99,42549,488],{"class":109},[99,42551,32051],{"class":158},[99,42553,42237],{"class":109},[99,42555,32051],{"class":158},[99,42557,38028],{"class":109},[99,42559,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588],{"class":101,"line":9899},[99,42561,42210],{"class":109},[99,42563,42531],{"class":158},[99,42565,488],{"class":109},[99,42567,34921],{"class":158},[99,42569,42219],{"class":109},[99,42571,42140],{"class":158},[99,42573,488],{"class":109},[99,42575,34921],{"class":158},[99,42577,42228],{"class":109},[99,42579,717],{"class":158},[99,42581,488],{"class":109},[99,42583,32051],{"class":158},[99,42585,42237],{"class":109},[99,42587,32051],{"class":158},[99,42589,38028],{"class":109},[99,42591,42592,42595,42597,42599,42601],{"class":101,"line":9907},[99,42593,42594],{"class":109},"            nn.AdaptiveAvgPool2d((",[99,42596,327],{"class":158},[99,42598,488],{"class":109},[99,42600,327],{"class":158},[99,42602,42603],{"class":109},")),\n",[99,42605,42606],{"class":101,"line":9912},[99,42607,38771],{"class":109},[99,42609,42610,42612,42615,42617,42619],{"class":101,"line":16591},[99,42611,38776],{"class":109},[99,42613,42614],{"class":158},"1024",[99,42616,488],{"class":109},[99,42618,556],{"class":158},[99,42620,116],{"class":109},[99,42622,42623],{"class":101,"line":16597},[99,42624,38107],{"class":109},[99,42626,42627],{"class":101,"line":16620},[99,42628,42629],{"class":168},"        # 对模型参数初始化\n",[99,42631,42632,42634,42636,42638,42640],{"class":101,"line":16626},[99,42633,3389],{"class":105},[99,42635,38849],{"class":109},[99,42637,26032],{"class":105},[99,42639,38854],{"class":158},[99,42641,38857],{"class":109},[99,42643,42644,42646,42648],{"class":101,"line":16649},[99,42645,4628],{"class":105},[99,42647,38869],{"class":158},[99,42649,38872],{"class":109},[99,42651,42652,42654,42657,42659,42662,42664,42666,42668,42670],{"class":101,"line":16663},[99,42653,38882],{"class":109},[99,42655,42656],{"class":5203},"mode",[99,42658,155],{"class":105},[99,42660,42661],{"class":214},"'fan_out'",[99,42663,488],{"class":109},[99,42665,38885],{"class":5203},[99,42667,155],{"class":105},[99,42669,38890],{"class":214},[99,42671,116],{"class":109},[99,42673,42674],{"class":101,"line":16683},[99,42675,42676],{"class":168},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[99,42678,42679],{"class":101,"line":16689},[99,42680,42681],{"class":168},"                # ② mode = 'fan_out'决定使用的fan值：\n",[99,42683,42684],{"class":101,"line":16700},[99,42685,42686],{"class":168},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[99,42688,42689],{"class":101,"line":16723},[99,42690,42691],{"class":168},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[99,42693,42694],{"class":101,"line":16745},[99,42695,42696],{"class":168},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[99,42698,42699],{"class":101,"line":16750},[99,42700,42701],{"class":168},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[99,42703,42704,42706,42708,42710,42712,42714],{"class":101,"line":16756},[99,42705,38902],{"class":105},[99,42707,38905],{"class":109},[99,42709,38908],{"class":105},[99,42711,38911],{"class":105},[99,42713,38914],{"class":158},[99,42715,3725],{"class":109},[99,42717,42718,42720,42722],{"class":101,"line":16770},[99,42719,38926],{"class":109},[99,42721,301],{"class":158},[99,42723,116],{"class":109},[99,42725,42726,42729,42731],{"class":101,"line":16783},[99,42727,42728],{"class":105},"                elif",[99,42730,38869],{"class":158},[99,42732,38945],{"class":109},[99,42734,42735,42738,42740,42742,42744],{"class":101,"line":16788},[99,42736,42737],{"class":109},"                    nn.init.normal_(m.weight,",[99,42739,301],{"class":158},[99,42741,488],{"class":109},[99,42743,38967],{"class":158},[99,42745,116],{"class":109},[99,42747,42748,42751,42753,42755,42757,42759],{"class":101,"line":16802},[99,42749,42750],{"class":105},"                    if",[99,42752,38905],{"class":109},[99,42754,38908],{"class":105},[99,42756,38911],{"class":105},[99,42758,38914],{"class":158},[99,42760,3725],{"class":109},[99,42762,42763,42766,42768],{"class":101,"line":16807},[99,42764,42765],{"class":109},"                        nn.init.constant_(m.bias,",[99,42767,301],{"class":158},[99,42769,116],{"class":109},[99,42771,42772],{"class":101,"line":16813},[99,42773,35146],{"class":168},[99,42775,42776,42778,42780],{"class":101,"line":16818},[99,42777,30782],{"class":105},[99,42779,31074],{"class":1949},[99,42781,31077],{"class":109},[99,42783,42784,42786,42788,42790],{"class":101,"line":16832},[99,42785,31082],{"class":109},[99,42787,155],{"class":105},[99,42789,30804],{"class":158},[99,42791,42792],{"class":109},".b1(x)\n",[99,42794,42795,42797,42799,42801],{"class":101,"line":16837},[99,42796,31082],{"class":109},[99,42798,155],{"class":105},[99,42800,30804],{"class":158},[99,42802,42803],{"class":109},".b2(x)\n",[99,42805,42806,42808,42810,42812],{"class":101,"line":16842},[99,42807,31082],{"class":109},[99,42809,155],{"class":105},[99,42811,30804],{"class":158},[99,42813,42814],{"class":109},".b3(x)\n",[99,42816,42817,42819,42821,42823],{"class":101,"line":16856},[99,42818,31082],{"class":109},[99,42820,155],{"class":105},[99,42822,30804],{"class":158},[99,42824,42825],{"class":109},".b4(x)\n",[99,42827,42828,42830,42832,42834],{"class":101,"line":16868},[99,42829,31082],{"class":109},[99,42831,155],{"class":105},[99,42833,30804],{"class":158},[99,42835,42836],{"class":109},".b5(x)\n",[99,42838,42839,42841],{"class":101,"line":16873},[99,42840,14739],{"class":105},[99,42842,31190],{"class":109},[99,42844,42845],{"class":101,"line":16886},[99,42846,2386],{"emptyLinePlaceholder":26},[99,42848,42849],{"class":101,"line":16891},[99,42850,42851],{"class":168},"# 模型展示\n",[99,42853,42854,42856,42858,42860,42862],{"class":101,"line":16896},[99,42855,1517],{"class":105},[99,42857,31201],{"class":158},[99,42859,2935],{"class":105},[99,42861,31206],{"class":214},[99,42863,3725],{"class":109},[99,42865,42866,42868,42870,42872,42874,42876,42878,42880,42882],{"class":101,"line":16901},[99,42867,31218],{"class":109},[99,42869,155],{"class":105},[99,42871,30432],{"class":109},[99,42873,31225],{"class":214},[99,42875,1690],{"class":105},[99,42877,31230],{"class":109},[99,42879,1687],{"class":105},[99,42881,30457],{"class":214},[99,42883,116],{"class":109},[99,42885,42886,42888,42890],{"class":101,"line":16914},[99,42887,31270],{"class":109},[99,42889,155],{"class":105},[99,42891,42892],{"class":109},"GoogLeNet(Inception).to(device)\n",[99,42894,42895,42897,42899,42901,42903,42905,42907,42909],{"class":101,"line":16919},[99,42896,31280],{"class":158},[99,42898,31283],{"class":109},[99,42900,327],{"class":158},[99,42902,488],{"class":109},[99,42904,31482],{"class":158},[99,42906,488],{"class":109},[99,42908,31482],{"class":158},[99,42910,31296],{"class":109},[53,42912,42913],{"start":22},[56,42914,39164],{},[90,42916,42918],{"className":30359,"code":42917,"language":30361,"meta":21,"style":21},"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",[96,42919,42920,42926,42932,42942,42948,42958,42968,42978,42988,42998,43002,43013,43023,43027,43031,43035,43043,43055,43065,43081,43091,43123,43137,43147,43157,43161,43171,43185,43195,43205,43215,43221,43225,43229,43233,43237,43241,43249,43269,43273,43277,43281,43285,43289,43305,43309,43313,43321,43325,43329,43337,43341,43345,43349,43357,43361,43365,43369,43373,43381,43385,43393,43397,43405,43409,43417,43421,43429,43433,43437,43445,43449,43453,43457,43469,43493,43507,43511,43515,43519,43527,43531,43539,43543,43551,43555,43563,43567,43575,43579,43587,43591,43603,43607,43615,43619,43627,43631,43635,43639,43643,43651,43655,43671,43675,43683,43687,43691,43695,43699,43703,43707,43711,43727,43731,43743,43747,43759,43763,43775,43779,43787,43791,43799,43803,43807,43811,43817,43821,43829,43833,43849,43853,43861,43865,43881,43893,43897,43909,43913,43917,43925,43929,43933,43941,43945,43953,43957,43965,43969,43973,44015,44057,44061,44065,44081,44085,44101,44105,44109,44117,44121,44125,44137,44175,44179,44183,44191,44195,44209,44219,44225,44231,44237,44243,44247,44251,44257,44261,44265,44273,44277,44295,44299,44303,44307,44323,44327,44331,44335,44339,44343,44363,44383,44387,44391,44395,44403,44411,44415,44431,44451,44471,44475,44479,44487,44495,44499,44503,44507,44519,44523,44533,44541,44558],{"__ignoreMap":21},[99,42921,42922,42924],{"class":101,"line":102},[99,42923,30373],{"class":105},[99,42925,31803],{"class":109},[99,42927,42928,42930],{"class":101,"line":22},[99,42929,30373],{"class":105},[99,42931,31810],{"class":109},[99,42933,42934,42936,42938,42940],{"class":101,"line":1165},[99,42935,30373],{"class":105},[99,42937,31821],{"class":109},[99,42939,31364],{"class":105},[99,42941,31826],{"class":109},[99,42943,42944,42946],{"class":101,"line":1180},[99,42945,30373],{"class":105},[99,42947,30376],{"class":109},[99,42949,42950,42952,42954,42956],{"class":101,"line":1186},[99,42951,30718],{"class":105},[99,42953,31396],{"class":109},[99,42955,30373],{"class":105},[99,42957,31843],{"class":109},[99,42959,42960,42962,42964,42966],{"class":101,"line":1200},[99,42961,30718],{"class":105},[99,42963,31349],{"class":109},[99,42965,30373],{"class":105},[99,42967,31354],{"class":109},[99,42969,42970,42972,42974,42976],{"class":101,"line":1206},[99,42971,30718],{"class":105},[99,42973,31379],{"class":109},[99,42975,30373],{"class":105},[99,42977,31384],{"class":109},[99,42979,42980,42982,42984,42986],{"class":101,"line":1297},[99,42981,30373],{"class":105},[99,42983,31396],{"class":109},[99,42985,31364],{"class":105},[99,42987,31401],{"class":109},[99,42989,42990,42992,42994,42996],{"class":101,"line":1303},[99,42991,30373],{"class":105},[99,42993,31413],{"class":109},[99,42995,31364],{"class":105},[99,42997,31418],{"class":109},[99,42999,43000],{"class":101,"line":1315},[99,43001,31888],{"class":168},[99,43003,43004,43006,43008,43010],{"class":101,"line":1598},[99,43005,30718],{"class":105},[99,43007,31895],{"class":109},[99,43009,30373],{"class":105},[99,43011,43012],{"class":109}," GoogLeNet, Inception\n",[99,43014,43015,43017,43019,43021],{"class":101,"line":1603},[99,43016,30718],{"class":105},[99,43018,30721],{"class":109},[99,43020,30373],{"class":105},[99,43022,30726],{"class":109},[99,43024,43025],{"class":101,"line":1609},[99,43026,2386],{"emptyLinePlaceholder":26},[99,43028,43029],{"class":101,"line":1614},[99,43030,2386],{"emptyLinePlaceholder":26},[99,43032,43033],{"class":101,"line":1628},[99,43034,31923],{"class":168},[99,43036,43037,43039,43041],{"class":101,"line":1633},[99,43038,31928],{"class":105},[99,43040,31931],{"class":1949},[99,43042,31934],{"class":109},[99,43044,43045,43047,43049,43051,43053],{"class":101,"line":1639},[99,43046,31939],{"class":109},[99,43048,155],{"class":105},[99,43050,31436],{"class":109},[99,43052,31444],{"class":214},[99,43054,31447],{"class":109},[99,43056,43057,43059,43061,43063],{"class":101,"line":1660},[99,43058,31952],{"class":5203},[99,43060,155],{"class":105},[99,43062,31457],{"class":158},[99,43064,31447],{"class":109},[99,43066,43067,43069,43071,43073,43075,43077,43079],{"class":101,"line":1665},[99,43068,31963],{"class":5203},[99,43070,155],{"class":105},[99,43072,31474],{"class":109},[99,43074,31477],{"class":5203},[99,43076,155],{"class":105},[99,43078,35430],{"class":158},[99,43080,31485],{"class":109},[99,43082,43083,43085,43087,43089],{"class":101,"line":1679},[99,43084,31980],{"class":5203},[99,43086,155],{"class":105},[99,43088,31457],{"class":158},[99,43090,116],{"class":109},[99,43092,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121],{"class":101,"line":1684},[99,43094,31991],{"class":109},[99,43096,155],{"class":105},[99,43098,31996],{"class":109},[99,43100,31999],{"class":158},[99,43102,110],{"class":109},[99,43104,32004],{"class":158},[99,43106,565],{"class":105},[99,43108,7345],{"class":158},[99,43110,32011],{"class":109},[99,43112,31999],{"class":158},[99,43114,110],{"class":109},[99,43116,32018],{"class":158},[99,43118,565],{"class":105},[99,43120,7345],{"class":158},[99,43122,32025],{"class":109},[99,43124,43125,43127,43129,43131,43133,43135],{"class":101,"line":1713},[99,43126,32030],{"class":109},[99,43128,155],{"class":105},[99,43130,32035],{"class":109},[99,43132,31518],{"class":5203},[99,43134,155],{"class":105},[99,43136,31523],{"class":109},[99,43138,43139,43141,43143,43145],{"class":101,"line":1718},[99,43140,32046],{"class":5203},[99,43142,155],{"class":105},[99,43144,307],{"class":158},[99,43146,31447],{"class":109},[99,43148,43149,43151,43153,43155],{"class":101,"line":1735},[99,43150,32058],{"class":5203},[99,43152,155],{"class":105},[99,43154,31457],{"class":158},[99,43156,31447],{"class":109},[99,43158,43159],{"class":101,"line":1740},[99,43160,32069],{"class":168},[99,43162,43163,43165,43167,43169],{"class":101,"line":1745},[99,43164,32074],{"class":5203},[99,43166,155],{"class":105},[99,43168,505],{"class":158},[99,43170,116],{"class":109},[99,43172,43173,43175,43177,43179,43181,43183],{"class":101,"line":1750},[99,43174,32085],{"class":109},[99,43176,155],{"class":105},[99,43178,31515],{"class":109},[99,43180,31518],{"class":5203},[99,43182,155],{"class":105},[99,43184,32096],{"class":109},[99,43186,43187,43189,43191,43193],{"class":101,"line":1764},[99,43188,32101],{"class":5203},[99,43190,155],{"class":105},[99,43192,307],{"class":158},[99,43194,31447],{"class":109},[99,43196,43197,43199,43201,43203],{"class":101,"line":1769},[99,43198,32112],{"class":5203},[99,43200,155],{"class":105},[99,43202,31457],{"class":158},[99,43204,31447],{"class":109},[99,43206,43207,43209,43211,43213],{"class":101,"line":2563},[99,43208,32123],{"class":5203},[99,43210,155],{"class":105},[99,43212,505],{"class":158},[99,43214,116],{"class":109},[99,43216,43217,43219],{"class":101,"line":2577},[99,43218,4076],{"class":105},[99,43220,32136],{"class":109},[99,43222,43223],{"class":101,"line":2585},[99,43224,2386],{"emptyLinePlaceholder":26},[99,43226,43227],{"class":101,"line":2590},[99,43228,32145],{"class":168},[99,43230,43231],{"class":101,"line":2596},[99,43232,32150],{"class":168},[99,43234,43235],{"class":101,"line":2602},[99,43236,2386],{"emptyLinePlaceholder":26},[99,43238,43239],{"class":101,"line":2607},[99,43240,32159],{"class":168},[99,43242,43243,43245,43247],{"class":101,"line":7935},[99,43244,31928],{"class":105},[99,43246,32166],{"class":1949},[99,43248,32169],{"class":109},[99,43250,43251,43253,43255,43257,43259,43261,43263,43265,43267],{"class":101,"line":7959},[99,43252,31218],{"class":109},[99,43254,155],{"class":105},[99,43256,30432],{"class":109},[99,43258,31225],{"class":214},[99,43260,1690],{"class":105},[99,43262,31230],{"class":109},[99,43264,1687],{"class":105},[99,43266,32188],{"class":214},[99,43268,116],{"class":109},[99,43270,43271],{"class":101,"line":7964},[99,43272,2386],{"emptyLinePlaceholder":26},[99,43274,43275],{"class":101,"line":7970},[99,43276,2386],{"emptyLinePlaceholder":26},[99,43278,43279],{"class":101,"line":7997},[99,43280,32203],{"class":168},[99,43282,43283],{"class":101,"line":8002},[99,43284,32208],{"class":168},[99,43286,43287],{"class":101,"line":8008},[99,43288,32213],{"class":168},[99,43290,43291,43293,43295,43297,43299,43301,43303],{"class":101,"line":8020},[99,43292,32218],{"class":109},[99,43294,155],{"class":105},[99,43296,32223],{"class":109},[99,43298,32226],{"class":5203},[99,43300,155],{"class":105},[99,43302,32231],{"class":158},[99,43304,116],{"class":109},[99,43306,43307],{"class":101,"line":8032},[99,43308,2386],{"emptyLinePlaceholder":26},[99,43310,43311],{"class":101,"line":8044},[99,43312,32242],{"class":168},[99,43314,43315,43317,43319],{"class":101,"line":9703},[99,43316,32247],{"class":109},[99,43318,155],{"class":105},[99,43320,32252],{"class":109},[99,43322,43323],{"class":101,"line":9728},[99,43324,2386],{"emptyLinePlaceholder":26},[99,43326,43327],{"class":101,"line":9751},[99,43328,32261],{"class":168},[99,43330,43331,43333,43335],{"class":101,"line":9775},[99,43332,31270],{"class":109},[99,43334,155],{"class":105},[99,43336,32270],{"class":109},[99,43338,43339],{"class":101,"line":9780},[99,43340,32275],{"class":168},[99,43342,43343],{"class":101,"line":9785},[99,43344,32280],{"class":168},[99,43346,43347],{"class":101,"line":9790},[99,43348,32285],{"class":168},[99,43350,43351,43353,43355],{"class":101,"line":9799},[99,43352,32290],{"class":109},[99,43354,155],{"class":105},[99,43356,32295],{"class":109},[99,43358,43359],{"class":101,"line":9804},[99,43360,2386],{"emptyLinePlaceholder":26},[99,43362,43363],{"class":101,"line":9810},[99,43364,2386],{"emptyLinePlaceholder":26},[99,43366,43367],{"class":101,"line":9831},[99,43368,32308],{"class":168},[99,43370,43371],{"class":101,"line":9837},[99,43372,32313],{"class":168},[99,43374,43375,43377,43379],{"class":101,"line":9851},[99,43376,32318],{"class":109},[99,43378,155],{"class":105},[99,43380,32323],{"class":158},[99,43382,43383],{"class":101,"line":9857},[99,43384,32328],{"class":168},[99,43386,43387,43389,43391],{"class":101,"line":9884},[99,43388,32333],{"class":109},[99,43390,155],{"class":105},[99,43392,32338],{"class":109},[99,43394,43395],{"class":101,"line":9893},[99,43396,32343],{"class":168},[99,43398,43399,43401,43403],{"class":101,"line":9899},[99,43400,32348],{"class":109},[99,43402,155],{"class":105},[99,43404,32338],{"class":109},[99,43406,43407],{"class":101,"line":9907},[99,43408,32357],{"class":168},[99,43410,43411,43413,43415],{"class":101,"line":9912},[99,43412,32362],{"class":109},[99,43414,155],{"class":105},[99,43416,32338],{"class":109},[99,43418,43419],{"class":101,"line":16591},[99,43420,32371],{"class":168},[99,43422,43423,43425,43427],{"class":101,"line":16597},[99,43424,32376],{"class":109},[99,43426,155],{"class":105},[99,43428,32338],{"class":109},[99,43430,43431],{"class":101,"line":16620},[99,43432,2386],{"emptyLinePlaceholder":26},[99,43434,43435],{"class":101,"line":16626},[99,43436,32389],{"class":168},[99,43438,43439,43441,43443],{"class":101,"line":16649},[99,43440,32394],{"class":109},[99,43442,155],{"class":105},[99,43444,32399],{"class":109},[99,43446,43447],{"class":101,"line":16663},[99,43448,2386],{"emptyLinePlaceholder":26},[99,43450,43451],{"class":101,"line":16683},[99,43452,2386],{"emptyLinePlaceholder":26},[99,43454,43455],{"class":101,"line":16689},[99,43456,32412],{"class":168},[99,43458,43459,43461,43463,43465,43467],{"class":101,"line":16700},[99,43460,3187],{"class":105},[99,43462,32419],{"class":109},[99,43464,26032],{"class":105},[99,43466,32424],{"class":158},[99,43468,32427],{"class":109},[99,43470,43471,43473,43475,43477,43479,43481,43483,43485,43487,43489,43491],{"class":101,"line":16723},[99,43472,32432],{"class":158},[99,43474,110],{"class":109},[99,43476,32437],{"class":214},[99,43478,32440],{"class":158},[99,43480,694],{"class":214},[99,43482,32440],{"class":158},[99,43484,361],{"class":214},[99,43486,32449],{"class":109},[99,43488,642],{"class":105},[99,43490,327],{"class":158},[99,43492,30478],{"class":109},[99,43494,43495,43497,43499,43501,43503,43505],{"class":101,"line":16745},[99,43496,32432],{"class":158},[99,43498,110],{"class":109},[99,43500,32464],{"class":214},[99,43502,565],{"class":105},[99,43504,556],{"class":158},[99,43506,116],{"class":109},[99,43508,43509],{"class":101,"line":16750},[99,43510,2386],{"emptyLinePlaceholder":26},[99,43512,43513],{"class":101,"line":16756},[99,43514,32479],{"class":168},[99,43516,43517],{"class":101,"line":16770},[99,43518,32484],{"class":168},[99,43520,43521,43523,43525],{"class":101,"line":16783},[99,43522,32489],{"class":109},[99,43524,155],{"class":105},[99,43526,32323],{"class":158},[99,43528,43529],{"class":101,"line":16788},[99,43530,32498],{"class":168},[99,43532,43533,43535,43537],{"class":101,"line":16802},[99,43534,32503],{"class":109},[99,43536,155],{"class":105},[99,43538,3071],{"class":158},[99,43540,43541],{"class":101,"line":16807},[99,43542,32512],{"class":168},[99,43544,43545,43547,43549],{"class":101,"line":16813},[99,43546,32517],{"class":109},[99,43548,155],{"class":105},[99,43550,32323],{"class":158},[99,43552,43553],{"class":101,"line":16818},[99,43554,32526],{"class":168},[99,43556,43557,43559,43561],{"class":101,"line":16832},[99,43558,32531],{"class":109},[99,43560,155],{"class":105},[99,43562,3071],{"class":158},[99,43564,43565],{"class":101,"line":16837},[99,43566,32540],{"class":168},[99,43568,43569,43571,43573],{"class":101,"line":16842},[99,43570,32545],{"class":109},[99,43572,155],{"class":105},[99,43574,3071],{"class":158},[99,43576,43577],{"class":101,"line":16856},[99,43578,32554],{"class":168},[99,43580,43581,43583,43585],{"class":101,"line":16868},[99,43582,32559],{"class":109},[99,43584,155],{"class":105},[99,43586,3071],{"class":158},[99,43588,43589],{"class":101,"line":16873},[99,43590,32568],{"class":168},[99,43592,43593,43595,43597,43599,43601],{"class":101,"line":16886},[99,43594,3389],{"class":105},[99,43596,31582],{"class":109},[99,43598,26032],{"class":105},[99,43600,31587],{"class":158},[99,43602,32581],{"class":109},[99,43604,43605],{"class":101,"line":16891},[99,43606,32586],{"class":168},[99,43608,43609,43611,43613],{"class":101,"line":16896},[99,43610,32591],{"class":109},[99,43612,155],{"class":105},[99,43614,32596],{"class":109},[99,43616,43617],{"class":101,"line":16901},[99,43618,32601],{"class":168},[99,43620,43621,43623,43625],{"class":101,"line":16914},[99,43622,32606],{"class":109},[99,43624,155],{"class":105},[99,43626,32611],{"class":109},[99,43628,43629],{"class":101,"line":16919},[99,43630,32617],{"class":168},[99,43632,43633],{"class":101,"line":32614},[99,43634,32623],{"class":109},[99,43636,43637],{"class":101,"line":32620},[99,43638,32629],{"class":168},[99,43640,43641],{"class":101,"line":32626},[99,43642,32635],{"class":168},[99,43644,43645,43647,43649],{"class":101,"line":32632},[99,43646,32641],{"class":109},[99,43648,155],{"class":105},[99,43650,32646],{"class":109},[99,43652,43653],{"class":101,"line":32638},[99,43654,32652],{"class":168},[99,43656,43657,43659,43661,43663,43665,43667,43669],{"class":101,"line":32649},[99,43658,32658],{"class":109},[99,43660,155],{"class":105},[99,43662,32663],{"class":109},[99,43664,32666],{"class":5203},[99,43666,155],{"class":105},[99,43668,327],{"class":158},[99,43670,116],{"class":109},[99,43672,43673],{"class":101,"line":32655},[99,43674,32678],{"class":168},[99,43676,43677,43679,43681],{"class":101,"line":32675},[99,43678,32684],{"class":109},[99,43680,155],{"class":105},[99,43682,32689],{"class":109},[99,43684,43685],{"class":101,"line":32681},[99,43686,32695],{"class":168},[99,43688,43689],{"class":101,"line":32692},[99,43690,32701],{"class":109},[99,43692,43693],{"class":101,"line":32698},[99,43694,32707],{"class":168},[99,43696,43697],{"class":101,"line":32704},[99,43698,32713],{"class":109},[99,43700,43701],{"class":101,"line":32710},[99,43702,32719],{"class":168},[99,43704,43705],{"class":101,"line":32716},[99,43706,32725],{"class":109},[99,43708,43709],{"class":101,"line":32722},[99,43710,32731],{"class":168},[99,43712,43713,43715,43717,43719,43721,43723,43725],{"class":101,"line":32728},[99,43714,32737],{"class":109},[99,43716,9464],{"class":105},[99,43718,32742],{"class":109},[99,43720,565],{"class":105},[99,43722,32747],{"class":109},[99,43724,301],{"class":158},[99,43726,116],{"class":109},[99,43728,43729],{"class":101,"line":32734},[99,43730,32757],{"class":168},[99,43732,43733,43735,43737,43739,43741],{"class":101,"line":32754},[99,43734,32763],{"class":109},[99,43736,9464],{"class":105},[99,43738,32768],{"class":109},[99,43740,2935],{"class":105},[99,43742,32773],{"class":109},[99,43744,43745],{"class":101,"line":32760},[99,43746,32779],{"class":168},[99,43748,43749,43751,43753,43755,43757],{"class":101,"line":32776},[99,43750,32785],{"class":109},[99,43752,9464],{"class":105},[99,43754,32747],{"class":109},[99,43756,301],{"class":158},[99,43758,116],{"class":109},[99,43760,43761],{"class":101,"line":32782},[99,43762,32799],{"class":168},[99,43764,43765,43767,43769,43771,43773],{"class":101,"line":32796},[99,43766,3389],{"class":105},[99,43768,32807],{"class":109},[99,43770,26032],{"class":105},[99,43772,31587],{"class":158},[99,43774,32814],{"class":109},[99,43776,43777],{"class":101,"line":32802},[99,43778,32820],{"class":168},[99,43780,43781,43783,43785],{"class":101,"line":32817},[99,43782,32591],{"class":109},[99,43784,155],{"class":105},[99,43786,32596],{"class":109},[99,43788,43789],{"class":101,"line":32823},[99,43790,32835],{"class":168},[99,43792,43793,43795,43797],{"class":101,"line":32832},[99,43794,32606],{"class":109},[99,43796,155],{"class":105},[99,43798,32611],{"class":109},[99,43800,43801],{"class":101,"line":32838},[99,43802,32850],{"class":168},[99,43804,43805],{"class":101,"line":32847},[99,43806,32856],{"class":109},[99,43808,43809],{"class":101,"line":32853},[99,43810,36337],{"class":168},[99,43812,43813,43815],{"class":101,"line":32859},[99,43814,32862],{"class":105},[99,43816,32865],{"class":109},[99,43818,43819],{"class":101,"line":32868},[99,43820,32871],{"class":168},[99,43822,43823,43825,43827],{"class":101,"line":32874},[99,43824,36352],{"class":109},[99,43826,155],{"class":105},[99,43828,32646],{"class":109},[99,43830,43831],{"class":101,"line":32885},[99,43832,32888],{"class":168},[99,43834,43835,43837,43839,43841,43843,43845,43847],{"class":101,"line":32891},[99,43836,36365],{"class":109},[99,43838,155],{"class":105},[99,43840,32663],{"class":109},[99,43842,32666],{"class":5203},[99,43844,155],{"class":105},[99,43846,327],{"class":158},[99,43848,116],{"class":109},[99,43850,43851],{"class":101,"line":32910},[99,43852,32913],{"class":168},[99,43854,43855,43857,43859],{"class":101,"line":32916},[99,43856,36386],{"class":109},[99,43858,155],{"class":105},[99,43860,32689],{"class":109},[99,43862,43863],{"class":101,"line":32927},[99,43864,32930],{"class":168},[99,43866,43867,43869,43871,43873,43875,43877,43879],{"class":101,"line":32933},[99,43868,36399],{"class":109},[99,43870,9464],{"class":105},[99,43872,36404],{"class":109},[99,43874,565],{"class":105},[99,43876,32747],{"class":109},[99,43878,301],{"class":158},[99,43880,116],{"class":109},[99,43882,43883,43885,43887,43889,43891],{"class":101,"line":32953},[99,43884,36417],{"class":109},[99,43886,9464],{"class":105},[99,43888,32768],{"class":109},[99,43890,2935],{"class":105},[99,43892,32773],{"class":109},[99,43894,43895],{"class":101,"line":32969},[99,43896,36430],{"class":168},[99,43898,43899,43901,43903,43905,43907],{"class":101,"line":32975},[99,43900,36435],{"class":109},[99,43902,9464],{"class":105},[99,43904,32747],{"class":109},[99,43906,301],{"class":158},[99,43908,116],{"class":109},[99,43910,43911],{"class":101,"line":32989},[99,43912,32992],{"class":168},[99,43914,43915],{"class":101,"line":32995},[99,43916,32998],{"class":168},[99,43918,43919,43921,43923],{"class":101,"line":33001},[99,43920,33004],{"class":109},[99,43922,694],{"class":105},[99,43924,33009],{"class":109},[99,43926,43927],{"class":101,"line":33012},[99,43928,33015],{"class":168},[99,43930,43931],{"class":101,"line":33018},[99,43932,33021],{"class":168},[99,43934,43935,43937,43939],{"class":101,"line":33024},[99,43936,33027],{"class":109},[99,43938,694],{"class":105},[99,43940,33009],{"class":109},[99,43942,43943],{"class":101,"line":33034},[99,43944,33037],{"class":168},[99,43946,43947,43949,43951],{"class":101,"line":33040},[99,43948,33043],{"class":109},[99,43950,694],{"class":105},[99,43952,33048],{"class":109},[99,43954,43955],{"class":101,"line":33051},[99,43956,33054],{"class":168},[99,43958,43959,43961,43963],{"class":101,"line":33057},[99,43960,33060],{"class":109},[99,43962,694],{"class":105},[99,43964,33048],{"class":109},[99,43966,43967],{"class":101,"line":33067},[99,43968,2386],{"emptyLinePlaceholder":26},[99,43970,43971],{"class":101,"line":33072},[99,43972,33075],{"class":168},[99,43974,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013],{"class":101,"line":33078},[99,43976,32432],{"class":158},[99,43978,110],{"class":109},[99,43980,3578],{"class":214},[99,43982,32440],{"class":158},[99,43984,33089],{"class":214},[99,43986,1006],{"class":158},[99,43988,33094],{"class":105},[99,43990,1056],{"class":158},[99,43992,33099],{"class":214},[99,43994,1006],{"class":158},[99,43996,33094],{"class":105},[99,43998,1056],{"class":158},[99,44000,3578],{"class":214},[99,44002,33110],{"class":109},[99,44004,642],{"class":105},[99,44006,327],{"class":158},[99,44008,33117],{"class":109},[99,44010,642],{"class":105},[99,44012,327],{"class":158},[99,44014,33124],{"class":109},[99,44016,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055],{"class":101,"line":33127},[99,44018,32432],{"class":158},[99,44020,110],{"class":109},[99,44022,3578],{"class":214},[99,44024,32440],{"class":158},[99,44026,33138],{"class":214},[99,44028,1006],{"class":158},[99,44030,33094],{"class":105},[99,44032,1056],{"class":158},[99,44034,33147],{"class":214},[99,44036,1006],{"class":158},[99,44038,33094],{"class":105},[99,44040,1056],{"class":158},[99,44042,3578],{"class":214},[99,44044,33158],{"class":109},[99,44046,642],{"class":105},[99,44048,327],{"class":158},[99,44050,33165],{"class":109},[99,44052,642],{"class":105},[99,44054,327],{"class":158},[99,44056,33124],{"class":109},[99,44058,44059],{"class":101,"line":33174},[99,44060,2386],{"emptyLinePlaceholder":26},[99,44062,44063],{"class":101,"line":33179},[99,44064,33182],{"class":168},[99,44066,44067,44069,44071,44073,44075,44077,44079],{"class":101,"line":33185},[99,44068,2483],{"class":105},[99,44070,33190],{"class":109},[99,44072,642],{"class":105},[99,44074,327],{"class":158},[99,44076,1050],{"class":109},[99,44078,1070],{"class":105},[99,44080,33201],{"class":109},[99,44082,44083],{"class":101,"line":33204},[99,44084,33207],{"class":168},[99,44086,44087,44089,44091,44093,44095,44097,44099],{"class":101,"line":33210},[99,44088,33213],{"class":109},[99,44090,149],{"class":158},[99,44092,155],{"class":105},[99,44094,33220],{"class":109},[99,44096,642],{"class":105},[99,44098,327],{"class":158},[99,44100,33227],{"class":109},[99,44102,44103],{"class":101,"line":33230},[99,44104,33233],{"class":168},[99,44106,44107],{"class":101,"line":33236},[99,44108,33239],{"class":168},[99,44110,44111,44113,44115],{"class":101,"line":33242},[99,44112,33245],{"class":109},[99,44114,155],{"class":105},[99,44116,32295],{"class":109},[99,44118,44119],{"class":101,"line":33252},[99,44120,2386],{"emptyLinePlaceholder":26},[99,44122,44123],{"class":101,"line":33257},[99,44124,33260],{"class":168},[99,44126,44127,44129,44131,44133,44135],{"class":101,"line":33263},[99,44128,33266],{"class":109},[99,44130,155],{"class":105},[99,44132,33271],{"class":109},[99,44134,642],{"class":105},[99,44136,33276],{"class":109},[99,44138,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173],{"class":101,"line":33279},[99,44140,32432],{"class":158},[99,44142,110],{"class":109},[99,44144,33286],{"class":214},[99,44146,1006],{"class":158},[99,44148,33291],{"class":105},[99,44150,1056],{"class":158},[99,44152,654],{"class":214},[99,44154,1006],{"class":158},[99,44156,33291],{"class":105},[99,44158,1056],{"class":158},[99,44160,33304],{"class":214},[99,44162,33307],{"class":109},[99,44164,33310],{"class":105},[99,44166,1017],{"class":158},[99,44168,33315],{"class":109},[99,44170,438],{"class":105},[99,44172,1017],{"class":158},[99,44174,30478],{"class":109},[99,44176,44177],{"class":101,"line":33324},[99,44178,36714],{"class":168},[99,44180,44181],{"class":101,"line":33330},[99,44182,36719],{"class":168},[99,44184,44185,44187,44189],{"class":101,"line":33336},[99,44186,36724],{"class":109},[99,44188,33348],{"class":214},[99,44190,116],{"class":109},[99,44192,44193],{"class":101,"line":33342},[99,44194,33368],{"class":168},[99,44196,44197,44199,44201,44203,44205,44207],{"class":101,"line":33353},[99,44198,33374],{"class":109},[99,44200,155],{"class":105},[99,44202,33379],{"class":109},[99,44204,33382],{"class":5203},[99,44206,155],{"class":105},[99,44208,1532],{"class":109},[99,44210,44211,44213,44215,44217],{"class":101,"line":33359},[99,44212,33392],{"class":214},[99,44214,969],{"class":109},[99,44216,33397],{"class":158},[99,44218,33400],{"class":109},[99,44220,44221,44223],{"class":101,"line":33365},[99,44222,33406],{"class":214},[99,44224,33409],{"class":109},[99,44226,44227,44229],{"class":101,"line":33371},[99,44228,33415],{"class":214},[99,44230,33418],{"class":109},[99,44232,44233,44235],{"class":101,"line":33389},[99,44234,33424],{"class":214},[99,44236,33427],{"class":109},[99,44238,44239,44241],{"class":101,"line":33403},[99,44240,33433],{"class":214},[99,44242,33436],{"class":109},[99,44244,44245],{"class":101,"line":33412},[99,44246,33442],{"class":109},[99,44248,44249],{"class":101,"line":33421},[99,44250,33448],{"class":168},[99,44252,44253,44255],{"class":101,"line":33430},[99,44254,4076],{"class":105},[99,44256,33456],{"class":109},[99,44258,44259],{"class":101,"line":33439},[99,44260,2386],{"emptyLinePlaceholder":26},[99,44262,44263],{"class":101,"line":33445},[99,44264,33467],{"class":168},[99,44266,44267,44269,44271],{"class":101,"line":33451},[99,44268,31928],{"class":105},[99,44270,33475],{"class":1949},[99,44272,33478],{"class":109},[99,44274,44275],{"class":101,"line":33459},[99,44276,33484],{"class":168},[99,44278,44279,44281,44283,44285,44287,44289,44291,44293],{"class":101,"line":33464},[99,44280,33490],{"class":109},[99,44282,31674],{"class":5203},[99,44284,155],{"class":105},[99,44286,110],{"class":109},[99,44288,608],{"class":158},[99,44290,488],{"class":109},[99,44292,403],{"class":158},[99,44294,30478],{"class":109},[99,44296,44297],{"class":101,"line":33470},[99,44298,33510],{"class":168},[99,44300,44301],{"class":101,"line":33481},[99,44302,33516],{"class":168},[99,44304,44305],{"class":101,"line":33487},[99,44306,33522],{"class":168},[99,44308,44309,44311,44313,44315,44317,44319,44321],{"class":101,"line":33507},[99,44310,31708],{"class":109},[99,44312,327],{"class":158},[99,44314,488],{"class":109},[99,44316,187],{"class":158},[99,44318,488],{"class":109},[99,44320,327],{"class":158},[99,44322,116],{"class":109},[99,44324,44325],{"class":101,"line":33513},[99,44326,33545],{"class":168},[99,44328,44329],{"class":101,"line":33519},[99,44330,33551],{"class":168},[99,44332,44333],{"class":101,"line":33525},[99,44334,33557],{"class":168},[99,44336,44337],{"class":101,"line":33542},[99,44338,33563],{"class":168},[99,44340,44341],{"class":101,"line":33548},[99,44342,33569],{"class":168},[99,44344,44345,44347,44349,44351,44353,44355,44357,44359,44361],{"class":101,"line":33554},[99,44346,33575],{"class":109},[99,44348,33578],{"class":214},[99,44350,33581],{"class":109},[99,44352,33584],{"class":214},[99,44354,488],{"class":109},[99,44356,33589],{"class":5203},[99,44358,155],{"class":105},[99,44360,33594],{"class":214},[99,44362,116],{"class":109},[99,44364,44365,44367,44369,44371,44373,44375,44377,44379,44381],{"class":101,"line":33560},[99,44366,33575],{"class":109},[99,44368,33578],{"class":214},[99,44370,33606],{"class":109},[99,44372,33609],{"class":214},[99,44374,488],{"class":109},[99,44376,33589],{"class":5203},[99,44378,155],{"class":105},[99,44380,33618],{"class":214},[99,44382,116],{"class":109},[99,44384,44385],{"class":101,"line":33566},[99,44386,33626],{"class":168},[99,44388,44389],{"class":101,"line":33572},[99,44390,33632],{"class":109},[99,44392,44393],{"class":101,"line":33599},[99,44394,33638],{"class":168},[99,44396,44397,44399,44401],{"class":101,"line":33623},[99,44398,33644],{"class":109},[99,44400,33647],{"class":214},[99,44402,116],{"class":109},[99,44404,44405,44407,44409],{"class":101,"line":33629},[99,44406,33655],{"class":109},[99,44408,33658],{"class":214},[99,44410,116],{"class":109},[99,44412,44413],{"class":101,"line":33635},[99,44414,33666],{"class":168},[99,44416,44417,44419,44421,44423,44425,44427,44429],{"class":101,"line":33641},[99,44418,31708],{"class":109},[99,44420,327],{"class":158},[99,44422,488],{"class":109},[99,44424,187],{"class":158},[99,44426,488],{"class":109},[99,44428,187],{"class":158},[99,44430,116],{"class":109},[99,44432,44433,44435,44437,44439,44441,44443,44445,44447,44449],{"class":101,"line":33652},[99,44434,33575],{"class":109},[99,44436,33578],{"class":214},[99,44438,33693],{"class":109},[99,44440,33584],{"class":214},[99,44442,488],{"class":109},[99,44444,33589],{"class":5203},[99,44446,155],{"class":105},[99,44448,33704],{"class":214},[99,44450,116],{"class":109},[99,44452,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":101,"line":33663},[99,44454,33575],{"class":109},[99,44456,33578],{"class":214},[99,44458,33716],{"class":109},[99,44460,33609],{"class":214},[99,44462,488],{"class":109},[99,44464,33589],{"class":5203},[99,44466,155],{"class":105},[99,44468,33727],{"class":214},[99,44470,116],{"class":109},[99,44472,44473],{"class":101,"line":33669},[99,44474,33735],{"class":168},[99,44476,44477],{"class":101,"line":33686},[99,44478,33632],{"class":109},[99,44480,44481,44483,44485],{"class":101,"line":33709},[99,44482,33644],{"class":109},[99,44484,33578],{"class":214},[99,44486,116],{"class":109},[99,44488,44489,44491,44493],{"class":101,"line":33732},[99,44490,33655],{"class":109},[99,44492,33757],{"class":214},[99,44494,116],{"class":109},[99,44496,44497],{"class":101,"line":33738},[99,44498,33765],{"class":109},[99,44500,44501],{"class":101,"line":33743},[99,44502,2386],{"emptyLinePlaceholder":26},[99,44504,44505],{"class":101,"line":33752},[99,44506,33776],{"class":168},[99,44508,44509,44511,44513,44515,44517],{"class":101,"line":33762},[99,44510,1517],{"class":105},[99,44512,31201],{"class":158},[99,44514,2935],{"class":105},[99,44516,31206],{"class":214},[99,44518,3725],{"class":109},[99,44520,44521],{"class":101,"line":33768},[99,44522,33795],{"class":168},[99,44524,44525,44528,44530],{"class":101,"line":33773},[99,44526,44527],{"class":109},"    GoogLeNet",[99,44529,155],{"class":105},[99,44531,44532],{"class":109},"GoogLeNet(Inception)\n",[99,44534,44535,44537,44539],{"class":101,"line":33779},[99,44536,33812],{"class":109},[99,44538,155],{"class":105},[99,44540,33817],{"class":109},[99,44542,44543,44545,44547,44550,44552,44554,44556],{"class":101,"line":33792},[99,44544,33374],{"class":109},[99,44546,155],{"class":105},[99,44548,44549],{"class":109},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[99,44551,33830],{"class":5203},[99,44553,155],{"class":105},[99,44555,1061],{"class":158},[99,44557,116],{"class":109},[99,44559,44560],{"class":101,"line":33798},[99,44561,33842],{"class":109},[53,44563,44564],{"start":1165},[56,44565,40555],{},[90,44567,44569],{"className":30359,"code":44568,"language":30361,"meta":21,"style":21},"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",[96,44570,44571,44577,44587,44597,44601,44611,44622,44626,44630,44634,44642,44658,44668,44684,44694,44708,44712,44722,44732,44742,44748,44752,44756,44764,44768,44784,44792,44796,44800,44808,44816,44820,44824,44828,44832,44838,44842,44852,44860,44868,44872,44876,44880,44888,44892,44908,44912,44916,44920,44932,44936,44948,44952,44956,44968,44972,44982,44986,44990,45002,45006,45014,45018,45022,45030,45034,45042,45046,45050,45054,45058,45062,45078,45086,45090,45094,45142,45148,45152,45162,45170,45178,45182,45186,45190,45194,45202,45206,45222,45226,45234,45242],{"__ignoreMap":21},[99,44572,44573,44575],{"class":101,"line":102},[99,44574,30373],{"class":105},[99,44576,30376],{"class":109},[99,44578,44579,44581,44583,44585],{"class":101,"line":22},[99,44580,30373],{"class":105},[99,44582,31396],{"class":109},[99,44584,31364],{"class":105},[99,44586,31401],{"class":109},[99,44588,44589,44591,44593,44595],{"class":101,"line":1165},[99,44590,30718],{"class":105},[99,44592,31379],{"class":109},[99,44594,30373],{"class":105},[99,44596,31384],{"class":109},[99,44598,44599],{"class":101,"line":1180},[99,44600,33903],{"class":168},[99,44602,44603,44605,44607,44609],{"class":101,"line":1186},[99,44604,30718],{"class":105},[99,44606,31349],{"class":109},[99,44608,30373],{"class":105},[99,44610,31354],{"class":109},[99,44612,44613,44615,44617,44619],{"class":101,"line":1200},[99,44614,30718],{"class":105},[99,44616,31895],{"class":109},[99,44618,30373],{"class":105},[99,44620,44621],{"class":109}," GoogLeNet,Inception\n",[99,44623,44624],{"class":101,"line":1206},[99,44625,2386],{"emptyLinePlaceholder":26},[99,44627,44628],{"class":101,"line":1297},[99,44629,2386],{"emptyLinePlaceholder":26},[99,44631,44632],{"class":101,"line":1303},[99,44633,33932],{"class":168},[99,44635,44636,44638,44640],{"class":101,"line":1315},[99,44637,31928],{"class":105},[99,44639,33939],{"class":1949},[99,44641,31934],{"class":109},[99,44643,44644,44646,44648,44650,44652,44654,44656],{"class":101,"line":1598},[99,44645,33946],{"class":109},[99,44647,155],{"class":105},[99,44649,31436],{"class":109},[99,44651,31439],{"class":5203},[99,44653,155],{"class":105},[99,44655,31444],{"class":214},[99,44657,31447],{"class":109},[99,44659,44660,44662,44664,44666],{"class":101,"line":1603},[99,44661,33963],{"class":5203},[99,44663,155],{"class":105},[99,44665,33968],{"class":158},[99,44667,31447],{"class":109},[99,44669,44670,44672,44674,44676,44678,44680,44682],{"class":101,"line":1609},[99,44671,33975],{"class":5203},[99,44673,155],{"class":105},[99,44675,31474],{"class":109},[99,44677,31477],{"class":5203},[99,44679,155],{"class":105},[99,44681,35430],{"class":158},[99,44683,31485],{"class":109},[99,44685,44686,44688,44690,44692],{"class":101,"line":1614},[99,44687,33992],{"class":5203},[99,44689,155],{"class":105},[99,44691,31457],{"class":158},[99,44693,116],{"class":109},[99,44695,44696,44698,44700,44702,44704,44706],{"class":101,"line":1628},[99,44697,34003],{"class":109},[99,44699,155],{"class":105},[99,44701,31515],{"class":109},[99,44703,31518],{"class":5203},[99,44705,155],{"class":105},[99,44707,34014],{"class":109},[99,44709,44710],{"class":101,"line":1633},[99,44711,34019],{"class":168},[99,44713,44714,44716,44718,44720],{"class":101,"line":1639},[99,44715,34024],{"class":5203},[99,44717,155],{"class":105},[99,44719,327],{"class":158},[99,44721,31447],{"class":109},[99,44723,44724,44726,44728,44730],{"class":101,"line":1660},[99,44725,34035],{"class":5203},[99,44727,155],{"class":105},[99,44729,31457],{"class":158},[99,44731,31447],{"class":109},[99,44733,44734,44736,44738,44740],{"class":101,"line":1665},[99,44735,34046],{"class":5203},[99,44737,155],{"class":105},[99,44739,301],{"class":158},[99,44741,116],{"class":109},[99,44743,44744,44746],{"class":101,"line":1679},[99,44745,4076],{"class":105},[99,44747,34059],{"class":109},[99,44749,44750],{"class":101,"line":1684},[99,44751,2386],{"emptyLinePlaceholder":26},[99,44753,44754],{"class":101,"line":1713},[99,44755,34068],{"class":168},[99,44757,44758,44760,44762],{"class":101,"line":1718},[99,44759,31928],{"class":105},[99,44761,34075],{"class":1949},[99,44763,34078],{"class":109},[99,44765,44766],{"class":101,"line":1735},[99,44767,34083],{"class":168},[99,44769,44770,44772,44774,44776,44778,44780,44782],{"class":101,"line":1740},[99,44771,31218],{"class":109},[99,44773,155],{"class":105},[99,44775,31225],{"class":214},[99,44777,1690],{"class":105},[99,44779,31230],{"class":109},[99,44781,1687],{"class":105},[99,44783,34100],{"class":214},[99,44785,44786,44788,44790],{"class":101,"line":1745},[99,44787,31270],{"class":109},[99,44789,155],{"class":105},[99,44791,32270],{"class":109},[99,44793,44794],{"class":101,"line":1750},[99,44795,2386],{"emptyLinePlaceholder":26},[99,44797,44798],{"class":101,"line":1764},[99,44799,34117],{"class":168},[99,44801,44802,44804,44806],{"class":101,"line":1769},[99,44803,34122],{"class":109},[99,44805,155],{"class":105},[99,44807,32323],{"class":158},[99,44809,44810,44812,44814],{"class":101,"line":2563},[99,44811,34131],{"class":109},[99,44813,155],{"class":105},[99,44815,3071],{"class":158},[99,44817,44818],{"class":101,"line":2577},[99,44819,2386],{"emptyLinePlaceholder":26},[99,44821,44822],{"class":101,"line":2585},[99,44823,34144],{"class":168},[99,44825,44826],{"class":101,"line":2590},[99,44827,34149],{"class":168},[99,44829,44830],{"class":101,"line":2596},[99,44831,34154],{"class":168},[99,44833,44834,44836],{"class":101,"line":2602},[99,44835,34159],{"class":105},[99,44837,32865],{"class":109},[99,44839,44840],{"class":101,"line":2607},[99,44841,34166],{"class":168},[99,44843,44844,44846,44848,44850],{"class":101,"line":7935},[99,44845,3389],{"class":105},[99,44847,34173],{"class":109},[99,44849,26032],{"class":105},[99,44851,34178],{"class":109},[99,44853,44854,44856,44858],{"class":101,"line":7959},[99,44855,34183],{"class":109},[99,44857,155],{"class":105},[99,44859,34188],{"class":109},[99,44861,44862,44864,44866],{"class":101,"line":7964},[99,44863,34193],{"class":109},[99,44865,155],{"class":105},[99,44867,34198],{"class":109},[99,44869,44870],{"class":101,"line":7970},[99,44871,34203],{"class":168},[99,44873,44874],{"class":101,"line":7997},[99,44875,32856],{"class":109},[99,44877,44878],{"class":101,"line":8002},[99,44879,34212],{"class":168},[99,44881,44882,44884,44886],{"class":101,"line":8008},[99,44883,32641],{"class":109},[99,44885,155],{"class":105},[99,44887,34221],{"class":109},[99,44889,44890],{"class":101,"line":8020},[99,44891,34226],{"class":168},[99,44893,44894,44896,44898,44900,44902,44904,44906],{"class":101,"line":8032},[99,44895,32658],{"class":109},[99,44897,155],{"class":105},[99,44899,32663],{"class":109},[99,44901,32666],{"class":5203},[99,44903,155],{"class":105},[99,44905,327],{"class":158},[99,44907,116],{"class":109},[99,44909,44910],{"class":101,"line":8044},[99,44911,34247],{"class":168},[99,44913,44914],{"class":101,"line":9703},[99,44915,34252],{"class":168},[99,44917,44918],{"class":101,"line":9728},[99,44919,34257],{"class":168},[99,44921,44922,44924,44926,44928,44930],{"class":101,"line":9751},[99,44923,34262],{"class":109},[99,44925,9464],{"class":105},[99,44927,32768],{"class":109},[99,44929,2935],{"class":105},[99,44931,34271],{"class":109},[99,44933,44934],{"class":101,"line":9775},[99,44935,34276],{"class":168},[99,44937,44938,44940,44942,44944,44946],{"class":101,"line":9780},[99,44939,34281],{"class":109},[99,44941,9464],{"class":105},[99,44943,34286],{"class":109},[99,44945,301],{"class":158},[99,44947,116],{"class":109},[99,44949,44950],{"class":101,"line":9785},[99,44951,2386],{"emptyLinePlaceholder":26},[99,44953,44954],{"class":101,"line":9790},[99,44955,34299],{"class":168},[99,44957,44958,44960,44962,44964,44966],{"class":101,"line":9799},[99,44959,34304],{"class":109},[99,44961,155],{"class":105},[99,44963,34309],{"class":109},[99,44965,694],{"class":105},[99,44967,34314],{"class":109},[99,44969,44970],{"class":101,"line":9804},[99,44971,34319],{"class":168},[99,44973,44974,44976,44978,44980],{"class":101,"line":9810},[99,44975,32432],{"class":158},[99,44977,110],{"class":109},[99,44979,34328],{"class":214},[99,44981,34331],{"class":109},[99,44983,44984],{"class":101,"line":9831},[99,44985,2386],{"emptyLinePlaceholder":26},[99,44987,44988],{"class":101,"line":9837},[99,44989,34340],{"class":168},[99,44991,44992,44994,44996,44998,45000],{"class":101,"line":9851},[99,44993,1517],{"class":105},[99,44995,31201],{"class":158},[99,44997,2935],{"class":105},[99,44999,31206],{"class":214},[99,45001,3725],{"class":109},[99,45003,45004],{"class":101,"line":9857},[99,45005,34357],{"class":168},[99,45007,45008,45010,45012],{"class":101,"line":9884},[99,45009,31270],{"class":109},[99,45011,155],{"class":105},[99,45013,44532],{"class":109},[99,45015,45016],{"class":101,"line":9893},[99,45017,34370],{"class":168},[99,45019,45020],{"class":101,"line":9899},[99,45021,34375],{"class":168},[99,45023,45024,45026,45028],{"class":101,"line":9907},[99,45025,34380],{"class":109},[99,45027,34383],{"class":214},[99,45029,30478],{"class":109},[99,45031,45032],{"class":101,"line":9912},[99,45033,34390],{"class":168},[99,45035,45036,45038,45040],{"class":101,"line":16591},[99,45037,34003],{"class":109},[99,45039,155],{"class":105},[99,45041,34399],{"class":109},[99,45043,45044],{"class":101,"line":16597},[99,45045,34404],{"class":168},[99,45047,45048],{"class":101,"line":16620},[99,45049,34409],{"class":109},[99,45051,45052],{"class":101,"line":16626},[99,45053,2386],{"emptyLinePlaceholder":26},[99,45055,45056],{"class":101,"line":16649},[99,45057,34418],{"class":168},[99,45059,45060],{"class":101,"line":16663},[99,45061,34423],{"class":168},[99,45063,45064,45066,45068,45070,45072,45074,45076],{"class":101,"line":16683},[99,45065,31218],{"class":109},[99,45067,155],{"class":105},[99,45069,31225],{"class":214},[99,45071,1690],{"class":105},[99,45073,31230],{"class":109},[99,45075,1687],{"class":105},[99,45077,34100],{"class":214},[99,45079,45080,45082,45084],{"class":101,"line":16689},[99,45081,31270],{"class":109},[99,45083,155],{"class":105},[99,45085,32270],{"class":109},[99,45087,45088],{"class":101,"line":16700},[99,45089,34452],{"class":168},[99,45091,45092],{"class":101,"line":16723},[99,45093,34457],{"class":168},[99,45095,45096,45098,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140],{"class":101,"line":16745},[99,45097,34462],{"class":109},[99,45099,155],{"class":105},[99,45101,1000],{"class":109},[99,45103,34469],{"class":214},[99,45105,488],{"class":109},[99,45107,34474],{"class":214},[99,45109,488],{"class":109},[99,45111,34479],{"class":214},[99,45113,488],{"class":109},[99,45115,34484],{"class":214},[99,45117,488],{"class":109},[99,45119,34489],{"class":214},[99,45121,488],{"class":109},[99,45123,34494],{"class":214},[99,45125,488],{"class":109},[99,45127,34499],{"class":214},[99,45129,488],{"class":109},[99,45131,34504],{"class":214},[99,45133,488],{"class":109},[99,45135,34509],{"class":214},[99,45137,488],{"class":109},[99,45139,34514],{"class":214},[99,45141,33227],{"class":109},[99,45143,45144,45146],{"class":101,"line":16750},[99,45145,34159],{"class":105},[99,45147,32865],{"class":109},[99,45149,45150],{"class":101,"line":16756},[99,45151,34527],{"class":168},[99,45153,45154,45156,45158,45160],{"class":101,"line":16770},[99,45155,3389],{"class":105},[99,45157,34534],{"class":109},[99,45159,26032],{"class":105},[99,45161,34178],{"class":109},[99,45163,45164,45166,45168],{"class":101,"line":16783},[99,45165,32591],{"class":109},[99,45167,155],{"class":105},[99,45169,32596],{"class":109},[99,45171,45172,45174,45176],{"class":101,"line":16788},[99,45173,32606],{"class":109},[99,45175,155],{"class":105},[99,45177,32611],{"class":109},[99,45179,45180],{"class":101,"line":16802},[99,45181,2386],{"emptyLinePlaceholder":26},[99,45183,45184],{"class":101,"line":16807},[99,45185,34563],{"class":168},[99,45187,45188],{"class":101,"line":16813},[99,45189,32856],{"class":109},[99,45191,45192],{"class":101,"line":16818},[99,45193,34572],{"class":168},[99,45195,45196,45198,45200],{"class":101,"line":16832},[99,45197,32641],{"class":109},[99,45199,155],{"class":105},[99,45201,32646],{"class":109},[99,45203,45204],{"class":101,"line":16837},[99,45205,34585],{"class":168},[99,45207,45208,45210,45212,45214,45216,45218,45220],{"class":101,"line":16842},[99,45209,32658],{"class":109},[99,45211,155],{"class":105},[99,45213,32663],{"class":109},[99,45215,32666],{"class":5203},[99,45217,155],{"class":105},[99,45219,327],{"class":158},[99,45221,116],{"class":109},[99,45223,45224],{"class":101,"line":16856},[99,45225,34606],{"class":168},[99,45227,45228,45230,45232],{"class":101,"line":16868},[99,45229,34611],{"class":109},[99,45231,155],{"class":105},[99,45233,34616],{"class":109},[99,45235,45236,45238,45240],{"class":101,"line":16873},[99,45237,34621],{"class":109},[99,45239,155],{"class":105},[99,45241,34626],{"class":109},[99,45243,45244,45246,45248,45250,45252,45254,45256,45258],{"class":101,"line":16886},[99,45245,34631],{"class":158},[99,45247,110],{"class":109},[99,45249,34636],{"class":214},[99,45251,34639],{"class":109},[99,45253,34642],{"class":214},[99,45255,488],{"class":109},[99,45257,34647],{"class":214},[99,45259,34650],{"class":109},[70,45261,45263],{"id":45262},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45265,45266],{},"猫狗分类任务",[14,45268,45269],{},"划分数据集和验证集",[90,45271,45273],{"className":30359,"code":45272,"language":30361,"meta":21,"style":21},"# 创建脚本，用于划分数据集和验证集\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",[96,45274,45275,45280,45287,45292,45303,45310,45314,45324,45338,45347,45351,45356,45366,45386,45390,45395,45405,45416,45429,45433,45438,45447,45457,45468,45472,45477,45487,45491,45496,45501,45506,45511,45516,45520,45530,45557,45570,45582,45609,45614,45619,45633,45638,45650,45665,45680,45688,45692,45697,45703,45715,45728,45733,45738,45743,45793,45799,45803],{"__ignoreMap":21},[99,45276,45277],{"class":101,"line":102},[99,45278,45279],{"class":168},"# 创建脚本，用于划分数据集和验证集\n",[99,45281,45282,45284],{"class":101,"line":22},[99,45283,30373],{"class":105},[99,45285,45286],{"class":109}," os\n",[99,45288,45289],{"class":101,"line":1165},[99,45290,45291],{"class":168},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[99,45293,45294,45296,45299,45301],{"class":101,"line":1180},[99,45295,30718],{"class":105},[99,45297,45298],{"class":109}," shutil ",[99,45300,30373],{"class":105},[99,45302,31803],{"class":109},[99,45304,45305,45307],{"class":101,"line":1186},[99,45306,30373],{"class":105},[99,45308,45309],{"class":109}," random\n",[99,45311,45312],{"class":101,"line":1200},[99,45313,2386],{"emptyLinePlaceholder":26},[99,45315,45316,45318,45321],{"class":101,"line":1206},[99,45317,31928],{"class":105},[99,45319,45320],{"class":1949}," mkfile",[99,45322,45323],{"class":109},"(file):\n",[99,45325,45326,45328,45330,45333,45336],{"class":101,"line":1297},[99,45327,3087],{"class":105},[99,45329,38911],{"class":105},[99,45331,45332],{"class":109}," os.path.exists(",[99,45334,45335],{"class":5203},"file",[99,45337,30767],{"class":109},[99,45339,45340,45343,45345],{"class":101,"line":1303},[99,45341,45342],{"class":109},"        os.makedirs(",[99,45344,45335],{"class":5203},[99,45346,116],{"class":109},[99,45348,45349],{"class":101,"line":1315},[99,45350,2386],{"emptyLinePlaceholder":26},[99,45352,45353],{"class":101,"line":1598},[99,45354,45355],{"class":168},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[99,45357,45358,45361,45363],{"class":101,"line":1603},[99,45359,45360],{"class":109},"file_path",[99,45362,155],{"class":105},[99,45364,45365],{"class":214},"'data_cat_dog'\n",[99,45367,45368,45371,45373,45376,45378,45381,45383],{"class":101,"line":1609},[99,45369,45370],{"class":109},"flower_class",[99,45372,155],{"class":105},[99,45374,45375],{"class":109},"[cla ",[99,45377,3011],{"class":105},[99,45379,45380],{"class":109}," cla ",[99,45382,26032],{"class":105},[99,45384,45385],{"class":109}," os.listdir(file_path)]\n",[99,45387,45388],{"class":101,"line":1614},[99,45389,2386],{"emptyLinePlaceholder":26},[99,45391,45392],{"class":101,"line":1628},[99,45393,45394],{"class":168},"# 创建训练集train文件夹\n",[99,45396,45397,45400,45403],{"class":101,"line":1633},[99,45398,45399],{"class":109},"mkfile(",[99,45401,45402],{"class":214},"'data\u002Ftrain'",[99,45404,116],{"class":109},[99,45406,45407,45409,45411,45413],{"class":101,"line":1639},[99,45408,3011],{"class":105},[99,45410,45380],{"class":109},[99,45412,26032],{"class":105},[99,45414,45415],{"class":109}," flower_class:\n",[99,45417,45418,45421,45424,45426],{"class":101,"line":1660},[99,45419,45420],{"class":109},"    mkfile(",[99,45422,45423],{"class":214},"'data\u002Ftrain\u002F'",[99,45425,591],{"class":105},[99,45427,45428],{"class":109},"cla)\n",[99,45430,45431],{"class":101,"line":1665},[99,45432,2386],{"emptyLinePlaceholder":26},[99,45434,45435],{"class":101,"line":1679},[99,45436,45437],{"class":168},"# 创建验证集val文件夹\n",[99,45439,45440,45442,45445],{"class":101,"line":1684},[99,45441,45399],{"class":109},[99,45443,45444],{"class":214},"'data\u002Ftest'",[99,45446,116],{"class":109},[99,45448,45449,45451,45453,45455],{"class":101,"line":1713},[99,45450,3011],{"class":105},[99,45452,45380],{"class":109},[99,45454,26032],{"class":105},[99,45456,45415],{"class":109},[99,45458,45459,45461,45464,45466],{"class":101,"line":1718},[99,45460,45420],{"class":109},[99,45462,45463],{"class":214},"'data\u002Ftest\u002F'",[99,45465,591],{"class":105},[99,45467,45428],{"class":109},[99,45469,45470],{"class":101,"line":1735},[99,45471,2386],{"emptyLinePlaceholder":26},[99,45473,45474],{"class":101,"line":1740},[99,45475,45476],{"class":168},"# 划分比例，训练集：测试集=9：1\n",[99,45478,45479,45482,45484],{"class":101,"line":1745},[99,45480,45481],{"class":109},"split_rate",[99,45483,155],{"class":105},[99,45485,45486],{"class":158},"0.1\n",[99,45488,45489],{"class":101,"line":1750},[99,45490,2386],{"emptyLinePlaceholder":26},[99,45492,45493],{"class":101,"line":1764},[99,45494,45495],{"class":168},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[99,45497,45498],{"class":101,"line":1769},[99,45499,45500],{"class":168},"# cla_path：当前类别的原始图片路径\n",[99,45502,45503],{"class":101,"line":2563},[99,45504,45505],{"class":168},"# images：当前类别下所有图片的文件名列表\n",[99,45507,45508],{"class":101,"line":2577},[99,45509,45510],{"class":168},"# num：该类别图片总数\n",[99,45512,45513],{"class":101,"line":2585},[99,45514,45515],{"class":168},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[99,45517,45518],{"class":101,"line":2590},[99,45519,2386],{"emptyLinePlaceholder":26},[99,45521,45522,45524,45526,45528],{"class":101,"line":2596},[99,45523,3011],{"class":105},[99,45525,45380],{"class":109},[99,45527,26032],{"class":105},[99,45529,45415],{"class":109},[99,45531,45532,45535,45537,45540,45542,45545,45548,45550,45552,45554],{"class":101,"line":2602},[99,45533,45534],{"class":109},"    cla_path ",[99,45536,155],{"class":105},[99,45538,45539],{"class":109}," file_path ",[99,45541,591],{"class":105},[99,45543,45544],{"class":214}," '\u002F'",[99,45546,45547],{"class":105}," +",[99,45549,45380],{"class":109},[99,45551,591],{"class":105},[99,45553,45544],{"class":214},[99,45555,45556],{"class":168},"  # 某一类别的子目录\n",[99,45558,45559,45562,45564,45567],{"class":101,"line":2607},[99,45560,45561],{"class":109},"    images ",[99,45563,155],{"class":105},[99,45565,45566],{"class":109}," os.listdir(cla_path)  ",[99,45568,45569],{"class":168},"# iamges 列表存储了该目录下所有图像的名称\n",[99,45571,45572,45575,45577,45579],{"class":101,"line":7935},[99,45573,45574],{"class":109},"    num ",[99,45576,155],{"class":105},[99,45578,7318],{"class":158},[99,45580,45581],{"class":109},"(images)\n",[99,45583,45584,45587,45589,45592,45594,45596,45598,45601,45603,45606],{"class":101,"line":7959},[99,45585,45586],{"class":109},"    eval_index ",[99,45588,155],{"class":105},[99,45590,45591],{"class":109}," random.sample(images, ",[99,45593,603],{"class":5203},[99,45595,155],{"class":105},[99,45597,113],{"class":158},[99,45599,45600],{"class":109},"(num ",[99,45602,565],{"class":105},[99,45604,45605],{"class":109}," split_rate))  ",[99,45607,45608],{"class":168},"# 从images列表中随机抽取 k 个图像名称\n",[99,45610,45611],{"class":101,"line":7964},[99,45612,45613],{"class":168},"    # 遍历该类别下的所有图片\n",[99,45615,45616],{"class":101,"line":7970},[99,45617,45618],{"class":168},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[99,45620,45621,45623,45626,45628,45630],{"class":101,"line":7997},[99,45622,3187],{"class":105},[99,45624,45625],{"class":109}," index, image ",[99,45627,26032],{"class":105},[99,45629,31587],{"class":158},[99,45631,45632],{"class":109},"(images):\n",[99,45634,45635],{"class":101,"line":8002},[99,45636,45637],{"class":168},"        # eval_index 中保存验证集val的图像名称\n",[99,45639,45640,45642,45645,45647],{"class":101,"line":8008},[99,45641,2483],{"class":105},[99,45643,45644],{"class":109}," image ",[99,45646,26032],{"class":105},[99,45648,45649],{"class":109}," eval_index:\n",[99,45651,45652,45655,45657,45660,45662],{"class":101,"line":8020},[99,45653,45654],{"class":109},"            image_path ",[99,45656,155],{"class":105},[99,45658,45659],{"class":109}," cla_path ",[99,45661,591],{"class":105},[99,45663,45664],{"class":109}," image\n",[99,45666,45667,45670,45672,45675,45677],{"class":101,"line":8032},[99,45668,45669],{"class":109},"            new_path ",[99,45671,155],{"class":105},[99,45673,45674],{"class":214}," 'data\u002Ftest\u002F'",[99,45676,45547],{"class":105},[99,45678,45679],{"class":109}," cla\n",[99,45681,45682,45685],{"class":101,"line":8044},[99,45683,45684],{"class":109},"            copy(image_path, new_path)  ",[99,45686,45687],{"class":168},"# 将选中的图像复制到新路径\n",[99,45689,45690],{"class":101,"line":9703},[99,45691,2386],{"emptyLinePlaceholder":26},[99,45693,45694],{"class":101,"line":9728},[99,45695,45696],{"class":168},"        # 其余的图像保存在训练集train中\n",[99,45698,45699,45701],{"class":101,"line":9751},[99,45700,2520],{"class":105},[99,45702,3725],{"class":109},[99,45704,45705,45707,45709,45711,45713],{"class":101,"line":9775},[99,45706,45654],{"class":109},[99,45708,155],{"class":105},[99,45710,45659],{"class":109},[99,45712,591],{"class":105},[99,45714,45664],{"class":109},[99,45716,45717,45719,45721,45724,45726],{"class":101,"line":9780},[99,45718,45669],{"class":109},[99,45720,155],{"class":105},[99,45722,45723],{"class":214}," 'data\u002Ftrain\u002F'",[99,45725,45547],{"class":105},[99,45727,45679],{"class":109},[99,45729,45730],{"class":101,"line":9785},[99,45731,45732],{"class":109},"            copy(image_path, new_path)\n",[99,45734,45735],{"class":101,"line":9790},[99,45736,45737],{"class":168},"            # 打印进度条信息\n",[99,45739,45740],{"class":101,"line":9799},[99,45741,45742],{"class":168},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[99,45744,45745,45747,45749,45751,45754,45756,45758,45761,45763,45765,45767,45770,45773,45775,45777,45780,45783,45785,45787,45790],{"class":101,"line":9804},[99,45746,32432],{"class":158},[99,45748,110],{"class":109},[99,45750,361],{"class":214},[99,45752,45753],{"class":158},"\\r",[99,45755,1000],{"class":214},[99,45757,32440],{"class":158},[99,45759,45760],{"class":214},"] processing [",[99,45762,32440],{"class":158},[99,45764,694],{"class":214},[99,45766,32440],{"class":158},[99,45768,45769],{"class":214},"]\"",[99,45771,45772],{"class":109},".format(cla, index ",[99,45774,591],{"class":105},[99,45776,25107],{"class":158},[99,45778,45779],{"class":109},", num), ",[99,45781,45782],{"class":5203},"end",[99,45784,155],{"class":105},[99,45786,7639],{"class":214},[99,45788,45789],{"class":109},")  ",[99,45791,45792],{"class":168},"# processing bar\n",[99,45794,45795,45797],{"class":101,"line":9810},[99,45796,31280],{"class":158},[99,45798,1962],{"class":109},[99,45800,45801],{"class":101,"line":9831},[99,45802,2386],{"emptyLinePlaceholder":26},[99,45804,45805,45807,45809,45812],{"class":101,"line":9837},[99,45806,30396],{"class":158},[99,45808,110],{"class":109},[99,45810,45811],{"class":214},"\"processing done!\"",[99,45813,116],{"class":109},[14,45815,45816],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21985,45818,45820],{"id":45819},"_242模型代码","2.4.2.模型代码",[14,45822,45823],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[90,45825,45827],{"className":30359,"code":45826,"language":30361,"meta":21,"style":21},"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",[96,45828,45829,45835,45845,45855,45859,45875,45883,45897,45907,45911,45941,45945,45979,46025,46029,46063,46109,46113,46117,46151,46181,46185,46193,46207,46229,46251,46269,46273,46287,46291,46295,46311,46315,46323,46337,46347,46391,46395,46423,46427,46437,46465,46469,46505,46509,46537,46541,46551,46583,46615,46643,46647,46657,46689,46721,46753,46785,46817,46845,46849,46859,46891,46923,46935,46939,46951,46955,46959,46971,46979,46999,47003,47007,47011,47015,47019,47023,47037,47045,47053,47065,47079,47087,47091,47099,47109,47119,47129,47139,47149,47155,47159,47163,47175,47195,47203],{"__ignoreMap":21},[99,45830,45831,45833],{"class":101,"line":102},[99,45832,30373],{"class":105},[99,45834,30376],{"class":109},[99,45836,45837,45839,45841,45843],{"class":101,"line":22},[99,45838,30718],{"class":105},[99,45840,30721],{"class":109},[99,45842,30373],{"class":105},[99,45844,30726],{"class":109},[99,45846,45847,45849,45851,45853],{"class":101,"line":1165},[99,45848,30718],{"class":105},[99,45850,30738],{"class":109},[99,45852,30373],{"class":105},[99,45854,30743],{"class":109},[99,45856,45857],{"class":101,"line":1180},[99,45858,2386],{"emptyLinePlaceholder":26},[99,45860,45861,45863,45865,45867,45869,45871,45873],{"class":101,"line":1186},[99,45862,14681],{"class":105},[99,45864,41474],{"class":1949},[99,45866,110],{"class":109},[99,45868,30759],{"class":1949},[99,45870,668],{"class":109},[99,45872,30764],{"class":1949},[99,45874,30767],{"class":109},[99,45876,45877,45879,45881],{"class":101,"line":1200},[99,45878,30782],{"class":105},[99,45880,30785],{"class":158},[99,45882,41493],{"class":109},[99,45884,45885,45887,45889,45891,45893,45895],{"class":101,"line":1206},[99,45886,30798],{"class":158},[99,45888,41500],{"class":109},[99,45890,30804],{"class":158},[99,45892,30807],{"class":109},[99,45894,30810],{"class":158},[99,45896,1962],{"class":109},[99,45898,45899,45901,45903,45905],{"class":101,"line":1297},[99,45900,30826],{"class":158},[99,45902,34752],{"class":109},[99,45904,155],{"class":105},[99,45906,34757],{"class":109},[99,45908,45909],{"class":101,"line":1303},[99,45910,41523],{"class":168},[99,45912,45913,45915,45917,45919,45921,45923,45925,45927,45929,45931,45933,45935,45937,45939],{"class":101,"line":1315},[99,45914,30826],{"class":158},[99,45916,41530],{"class":109},[99,45918,155],{"class":105},[99,45920,30834],{"class":109},[99,45922,30837],{"class":5203},[99,45924,155],{"class":105},[99,45926,41541],{"class":109},[99,45928,30846],{"class":5203},[99,45930,155],{"class":105},[99,45932,41548],{"class":109},[99,45934,30855],{"class":5203},[99,45936,155],{"class":105},[99,45938,327],{"class":158},[99,45940,116],{"class":109},[99,45942,45943],{"class":101,"line":1598},[99,45944,41561],{"class":168},[99,45946,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977],{"class":101,"line":1603},[99,45948,30826],{"class":158},[99,45950,41568],{"class":109},[99,45952,155],{"class":105},[99,45954,30834],{"class":109},[99,45956,30837],{"class":5203},[99,45958,155],{"class":105},[99,45960,41541],{"class":109},[99,45962,30846],{"class":5203},[99,45964,155],{"class":105},[99,45966,41585],{"class":109},[99,45968,301],{"class":158},[99,45970,41590],{"class":109},[99,45972,30855],{"class":5203},[99,45974,155],{"class":105},[99,45976,327],{"class":158},[99,45978,116],{"class":109},[99,45980,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023],{"class":101,"line":1609},[99,45982,30826],{"class":158},[99,45984,41605],{"class":109},[99,45986,155],{"class":105},[99,45988,30834],{"class":109},[99,45990,30837],{"class":5203},[99,45992,155],{"class":105},[99,45994,41585],{"class":109},[99,45996,301],{"class":158},[99,45998,41590],{"class":109},[99,46000,30846],{"class":5203},[99,46002,155],{"class":105},[99,46004,41585],{"class":109},[99,46006,327],{"class":158},[99,46008,41590],{"class":109},[99,46010,30855],{"class":5203},[99,46012,155],{"class":105},[99,46014,181],{"class":158},[99,46016,488],{"class":109},[99,46018,30864],{"class":5203},[99,46020,155],{"class":105},[99,46022,327],{"class":158},[99,46024,116],{"class":109},[99,46026,46027],{"class":101,"line":1614},[99,46028,41650],{"class":168},[99,46030,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061],{"class":101,"line":1628},[99,46032,30826],{"class":158},[99,46034,41657],{"class":109},[99,46036,155],{"class":105},[99,46038,30834],{"class":109},[99,46040,30837],{"class":5203},[99,46042,155],{"class":105},[99,46044,41541],{"class":109},[99,46046,30846],{"class":5203},[99,46048,155],{"class":105},[99,46050,41674],{"class":109},[99,46052,301],{"class":158},[99,46054,41590],{"class":109},[99,46056,30855],{"class":5203},[99,46058,155],{"class":105},[99,46060,327],{"class":158},[99,46062,116],{"class":109},[99,46064,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107],{"class":101,"line":1633},[99,46066,30826],{"class":158},[99,46068,41693],{"class":109},[99,46070,155],{"class":105},[99,46072,30834],{"class":109},[99,46074,30837],{"class":5203},[99,46076,155],{"class":105},[99,46078,41674],{"class":109},[99,46080,301],{"class":158},[99,46082,41590],{"class":109},[99,46084,30846],{"class":5203},[99,46086,155],{"class":105},[99,46088,41674],{"class":109},[99,46090,327],{"class":158},[99,46092,41590],{"class":109},[99,46094,30855],{"class":5203},[99,46096,155],{"class":105},[99,46098,429],{"class":158},[99,46100,488],{"class":109},[99,46102,30864],{"class":5203},[99,46104,155],{"class":105},[99,46106,187],{"class":158},[99,46108,116],{"class":109},[99,46110,46111],{"class":101,"line":1639},[99,46112,41738],{"class":168},[99,46114,46115],{"class":101,"line":1660},[99,46116,41743],{"class":168},[99,46118,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149],{"class":101,"line":1665},[99,46120,30826],{"class":158},[99,46122,41750],{"class":109},[99,46124,155],{"class":105},[99,46126,34810],{"class":109},[99,46128,30855],{"class":5203},[99,46130,155],{"class":105},[99,46132,181],{"class":158},[99,46134,488],{"class":109},[99,46136,30910],{"class":5203},[99,46138,155],{"class":105},[99,46140,327],{"class":158},[99,46142,488],{"class":109},[99,46144,30864],{"class":5203},[99,46146,155],{"class":105},[99,46148,327],{"class":158},[99,46150,116],{"class":109},[99,46152,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179],{"class":101,"line":1679},[99,46154,30826],{"class":158},[99,46156,41785],{"class":109},[99,46158,155],{"class":105},[99,46160,30834],{"class":109},[99,46162,30837],{"class":5203},[99,46164,155],{"class":105},[99,46166,41541],{"class":109},[99,46168,30846],{"class":5203},[99,46170,155],{"class":105},[99,46172,41802],{"class":109},[99,46174,30855],{"class":5203},[99,46176,155],{"class":105},[99,46178,327],{"class":158},[99,46180,116],{"class":109},[99,46182,46183],{"class":101,"line":1684},[99,46184,2386],{"emptyLinePlaceholder":26},[99,46186,46187,46189,46191],{"class":101,"line":1713},[99,46188,30782],{"class":105},[99,46190,31074],{"class":1949},[99,46192,31077],{"class":109},[99,46194,46195,46197,46199,46201,46203,46205],{"class":101,"line":1718},[99,46196,41827],{"class":109},[99,46198,155],{"class":105},[99,46200,30804],{"class":158},[99,46202,35165],{"class":109},[99,46204,30804],{"class":158},[99,46206,41838],{"class":109},[99,46208,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227],{"class":101,"line":1735},[99,46210,7072],{"class":109},[99,46212,155],{"class":105},[99,46214,30804],{"class":158},[99,46216,35165],{"class":109},[99,46218,30804],{"class":158},[99,46220,41853],{"class":109},[99,46222,30804],{"class":158},[99,46224,35165],{"class":109},[99,46226,30804],{"class":158},[99,46228,41862],{"class":109},[99,46230,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249],{"class":101,"line":1740},[99,46232,41867],{"class":109},[99,46234,155],{"class":105},[99,46236,30804],{"class":158},[99,46238,35165],{"class":109},[99,46240,30804],{"class":158},[99,46242,41878],{"class":109},[99,46244,30804],{"class":158},[99,46246,35165],{"class":109},[99,46248,30804],{"class":158},[99,46250,41887],{"class":109},[99,46252,46253,46255,46257,46259,46261,46263,46265,46267],{"class":101,"line":1745},[99,46254,41892],{"class":109},[99,46256,155],{"class":105},[99,46258,30804],{"class":158},[99,46260,35165],{"class":109},[99,46262,30804],{"class":158},[99,46264,41903],{"class":109},[99,46266,30804],{"class":158},[99,46268,41908],{"class":109},[99,46270,46271],{"class":101,"line":1750},[99,46272,41913],{"class":168},[99,46274,46275,46277,46279,46281,46283,46285],{"class":101,"line":1764},[99,46276,14739],{"class":105},[99,46278,41920],{"class":109},[99,46280,32666],{"class":5203},[99,46282,155],{"class":105},[99,46284,327],{"class":158},[99,46286,116],{"class":109},[99,46288,46289],{"class":101,"line":1769},[99,46290,2386],{"emptyLinePlaceholder":26},[99,46292,46293],{"class":101,"line":2563},[99,46294,41941],{"class":168},[99,46296,46297,46299,46301,46303,46305,46307,46309],{"class":101,"line":2577},[99,46298,14681],{"class":105},[99,46300,41948],{"class":1949},[99,46302,110],{"class":109},[99,46304,30759],{"class":1949},[99,46306,668],{"class":109},[99,46308,30764],{"class":1949},[99,46310,30767],{"class":109},[99,46312,46313],{"class":101,"line":2585},[99,46314,41963],{"class":168},[99,46316,46317,46319,46321],{"class":101,"line":2590},[99,46318,30782],{"class":105},[99,46320,30785],{"class":158},[99,46322,41972],{"class":109},[99,46324,46325,46327,46329,46331,46333,46335],{"class":101,"line":2596},[99,46326,30798],{"class":158},[99,46328,41979],{"class":109},[99,46330,30804],{"class":158},[99,46332,30807],{"class":109},[99,46334,30810],{"class":158},[99,46336,1962],{"class":109},[99,46338,46339,46341,46343,46345],{"class":101,"line":2602},[99,46340,30826],{"class":158},[99,46342,41994],{"class":109},[99,46344,155],{"class":105},[99,46346,37990],{"class":109},[99,46348,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389],{"class":101,"line":2607},[99,46350,37995],{"class":109},[99,46352,30837],{"class":5203},[99,46354,155],{"class":105},[99,46356,181],{"class":158},[99,46358,488],{"class":109},[99,46360,30846],{"class":5203},[99,46362,155],{"class":105},[99,46364,313],{"class":158},[99,46366,488],{"class":109},[99,46368,30855],{"class":5203},[99,46370,155],{"class":105},[99,46372,479],{"class":158},[99,46374,488],{"class":109},[99,46376,30910],{"class":5203},[99,46378,155],{"class":105},[99,46380,187],{"class":158},[99,46382,488],{"class":109},[99,46384,30864],{"class":5203},[99,46386,155],{"class":105},[99,46388,181],{"class":158},[99,46390,38028],{"class":109},[99,46392,46393],{"class":101,"line":7935},[99,46394,38033],{"class":109},[99,46396,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421],{"class":101,"line":7959},[99,46398,38078],{"class":109},[99,46400,30855],{"class":5203},[99,46402,155],{"class":105},[99,46404,181],{"class":158},[99,46406,488],{"class":109},[99,46408,30910],{"class":5203},[99,46410,155],{"class":105},[99,46412,187],{"class":158},[99,46414,488],{"class":109},[99,46416,30864],{"class":5203},[99,46418,155],{"class":105},[99,46420,327],{"class":158},[99,46422,116],{"class":109},[99,46424,46425],{"class":101,"line":7964},[99,46426,38107],{"class":109},[99,46428,46429,46431,46433,46435],{"class":101,"line":7970},[99,46430,30826],{"class":158},[99,46432,42085],{"class":109},[99,46434,155],{"class":105},[99,46436,37990],{"class":109},[99,46438,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463],{"class":101,"line":7997},[99,46440,37995],{"class":109},[99,46442,30837],{"class":5203},[99,46444,155],{"class":105},[99,46446,313],{"class":158},[99,46448,488],{"class":109},[99,46450,30846],{"class":5203},[99,46452,155],{"class":105},[99,46454,313],{"class":158},[99,46456,488],{"class":109},[99,46458,30855],{"class":5203},[99,46460,155],{"class":105},[99,46462,327],{"class":158},[99,46464,38028],{"class":109},[99,46466,46467],{"class":101,"line":8002},[99,46468,38033],{"class":109},[99,46470,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503],{"class":101,"line":8008},[99,46472,37995],{"class":109},[99,46474,30837],{"class":5203},[99,46476,155],{"class":105},[99,46478,313],{"class":158},[99,46480,488],{"class":109},[99,46482,30846],{"class":5203},[99,46484,155],{"class":105},[99,46486,42140],{"class":158},[99,46488,488],{"class":109},[99,46490,30855],{"class":5203},[99,46492,155],{"class":105},[99,46494,181],{"class":158},[99,46496,488],{"class":109},[99,46498,30864],{"class":5203},[99,46500,155],{"class":105},[99,46502,327],{"class":158},[99,46504,38028],{"class":109},[99,46506,46507],{"class":101,"line":8020},[99,46508,38033],{"class":109},[99,46510,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535],{"class":101,"line":8032},[99,46512,38078],{"class":109},[99,46514,30855],{"class":5203},[99,46516,155],{"class":105},[99,46518,181],{"class":158},[99,46520,488],{"class":109},[99,46522,30910],{"class":5203},[99,46524,155],{"class":105},[99,46526,187],{"class":158},[99,46528,488],{"class":109},[99,46530,30864],{"class":5203},[99,46532,155],{"class":105},[99,46534,327],{"class":158},[99,46536,116],{"class":109},[99,46538,46539],{"class":101,"line":8044},[99,46540,38107],{"class":109},[99,46542,46543,46545,46547,46549],{"class":101,"line":9703},[99,46544,30826],{"class":158},[99,46546,42201],{"class":109},[99,46548,155],{"class":105},[99,46550,37990],{"class":109},[99,46552,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581],{"class":101,"line":9728},[99,46554,42210],{"class":109},[99,46556,42140],{"class":158},[99,46558,488],{"class":109},[99,46560,313],{"class":158},[99,46562,42219],{"class":109},[99,46564,319],{"class":158},[99,46566,488],{"class":109},[99,46568,32051],{"class":158},[99,46570,42228],{"class":109},[99,46572,711],{"class":158},[99,46574,488],{"class":109},[99,46576,307],{"class":158},[99,46578,42237],{"class":109},[99,46580,307],{"class":158},[99,46582,38028],{"class":109},[99,46584,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613],{"class":101,"line":9751},[99,46586,42210],{"class":109},[99,46588,34851],{"class":158},[99,46590,488],{"class":109},[99,46592,32051],{"class":158},[99,46594,42219],{"class":109},[99,46596,32051],{"class":158},[99,46598,488],{"class":109},[99,46600,42140],{"class":158},[99,46602,42228],{"class":109},[99,46604,307],{"class":158},[99,46606,488],{"class":109},[99,46608,319],{"class":158},[99,46610,42237],{"class":109},[99,46612,313],{"class":158},[99,46614,38028],{"class":109},[99,46616,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641],{"class":101,"line":9775},[99,46618,38078],{"class":109},[99,46620,30855],{"class":5203},[99,46622,155],{"class":105},[99,46624,181],{"class":158},[99,46626,488],{"class":109},[99,46628,30910],{"class":5203},[99,46630,155],{"class":105},[99,46632,187],{"class":158},[99,46634,488],{"class":109},[99,46636,30864],{"class":5203},[99,46638,155],{"class":105},[99,46640,327],{"class":158},[99,46642,116],{"class":109},[99,46644,46645],{"class":101,"line":9780},[99,46646,38107],{"class":109},[99,46648,46649,46651,46653,46655],{"class":101,"line":9785},[99,46650,30826],{"class":158},[99,46652,42312],{"class":109},[99,46654,155],{"class":105},[99,46656,37990],{"class":109},[99,46658,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687],{"class":101,"line":9790},[99,46660,42210],{"class":109},[99,46662,42323],{"class":158},[99,46664,488],{"class":109},[99,46666,42140],{"class":158},[99,46668,42219],{"class":109},[99,46670,319],{"class":158},[99,46672,488],{"class":109},[99,46674,42336],{"class":158},[99,46676,42228],{"class":109},[99,46678,711],{"class":158},[99,46680,488],{"class":109},[99,46682,717],{"class":158},[99,46684,42237],{"class":109},[99,46686,313],{"class":158},[99,46688,38028],{"class":109},[99,46690,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719],{"class":101,"line":9799},[99,46692,42210],{"class":109},[99,46694,38438],{"class":158},[99,46696,488],{"class":109},[99,46698,21035],{"class":158},[99,46700,42219],{"class":109},[99,46702,728],{"class":158},[99,46704,488],{"class":109},[99,46706,31482],{"class":158},[99,46708,42228],{"class":109},[99,46710,910],{"class":158},[99,46712,488],{"class":109},[99,46714,313],{"class":158},[99,46716,42237],{"class":109},[99,46718,313],{"class":158},[99,46720,38028],{"class":109},[99,46722,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751],{"class":101,"line":9804},[99,46724,42210],{"class":109},[99,46726,38438],{"class":158},[99,46728,488],{"class":109},[99,46730,32051],{"class":158},[99,46732,42219],{"class":109},[99,46734,32051],{"class":158},[99,46736,488],{"class":109},[99,46738,34851],{"class":158},[99,46740,42228],{"class":109},[99,46742,910],{"class":158},[99,46744,488],{"class":109},[99,46746,313],{"class":158},[99,46748,42237],{"class":109},[99,46750,313],{"class":158},[99,46752,38028],{"class":109},[99,46754,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783],{"class":101,"line":9810},[99,46756,42210],{"class":109},[99,46758,38438],{"class":158},[99,46760,488],{"class":109},[99,46762,728],{"class":158},[99,46764,42219],{"class":109},[99,46766,32051],{"class":158},[99,46768,488],{"class":109},[99,46770,42433],{"class":158},[99,46772,42228],{"class":109},[99,46774,307],{"class":158},[99,46776,488],{"class":109},[99,46778,313],{"class":158},[99,46780,42237],{"class":109},[99,46782,313],{"class":158},[99,46784,38028],{"class":109},[99,46786,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815],{"class":101,"line":9831},[99,46788,42210],{"class":109},[99,46790,42454],{"class":158},[99,46792,488],{"class":109},[99,46794,34851],{"class":158},[99,46796,42219],{"class":109},[99,46798,21035],{"class":158},[99,46800,488],{"class":109},[99,46802,42467],{"class":158},[99,46804,42228],{"class":109},[99,46806,307],{"class":158},[99,46808,488],{"class":109},[99,46810,32051],{"class":158},[99,46812,42237],{"class":109},[99,46814,32051],{"class":158},[99,46816,38028],{"class":109},[99,46818,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843],{"class":101,"line":9837},[99,46820,38078],{"class":109},[99,46822,30855],{"class":5203},[99,46824,155],{"class":105},[99,46826,181],{"class":158},[99,46828,488],{"class":109},[99,46830,30910],{"class":5203},[99,46832,155],{"class":105},[99,46834,187],{"class":158},[99,46836,488],{"class":109},[99,46838,30864],{"class":5203},[99,46840,155],{"class":105},[99,46842,327],{"class":158},[99,46844,116],{"class":109},[99,46846,46847],{"class":101,"line":9851},[99,46848,38107],{"class":109},[99,46850,46851,46853,46855,46857],{"class":101,"line":9857},[99,46852,30826],{"class":158},[99,46854,42520],{"class":109},[99,46856,155],{"class":105},[99,46858,37990],{"class":109},[99,46860,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889],{"class":101,"line":9884},[99,46862,42210],{"class":109},[99,46864,42531],{"class":158},[99,46866,488],{"class":109},[99,46868,34851],{"class":158},[99,46870,42219],{"class":109},[99,46872,21035],{"class":158},[99,46874,488],{"class":109},[99,46876,42467],{"class":158},[99,46878,42228],{"class":109},[99,46880,307],{"class":158},[99,46882,488],{"class":109},[99,46884,32051],{"class":158},[99,46886,42237],{"class":109},[99,46888,32051],{"class":158},[99,46890,38028],{"class":109},[99,46892,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921],{"class":101,"line":9893},[99,46894,42210],{"class":109},[99,46896,42531],{"class":158},[99,46898,488],{"class":109},[99,46900,34921],{"class":158},[99,46902,42219],{"class":109},[99,46904,42140],{"class":158},[99,46906,488],{"class":109},[99,46908,34921],{"class":158},[99,46910,42228],{"class":109},[99,46912,717],{"class":158},[99,46914,488],{"class":109},[99,46916,32051],{"class":158},[99,46918,42237],{"class":109},[99,46920,32051],{"class":158},[99,46922,38028],{"class":109},[99,46924,46925,46927,46929,46931,46933],{"class":101,"line":9899},[99,46926,42594],{"class":109},[99,46928,327],{"class":158},[99,46930,488],{"class":109},[99,46932,327],{"class":158},[99,46934,42603],{"class":109},[99,46936,46937],{"class":101,"line":9907},[99,46938,38771],{"class":109},[99,46940,46941,46943,46945,46947,46949],{"class":101,"line":9912},[99,46942,38776],{"class":109},[99,46944,42614],{"class":158},[99,46946,488],{"class":109},[99,46948,187],{"class":158},[99,46950,116],{"class":109},[99,46952,46953],{"class":101,"line":16591},[99,46954,38107],{"class":109},[99,46956,46957],{"class":101,"line":16597},[99,46958,42629],{"class":168},[99,46960,46961,46963,46965,46967,46969],{"class":101,"line":16620},[99,46962,3389],{"class":105},[99,46964,38849],{"class":109},[99,46966,26032],{"class":105},[99,46968,38854],{"class":158},[99,46970,38857],{"class":109},[99,46972,46973,46975,46977],{"class":101,"line":16626},[99,46974,4628],{"class":105},[99,46976,38869],{"class":158},[99,46978,38872],{"class":109},[99,46980,46981,46983,46985,46987,46989,46991,46993,46995,46997],{"class":101,"line":16649},[99,46982,38882],{"class":109},[99,46984,42656],{"class":5203},[99,46986,155],{"class":105},[99,46988,42661],{"class":214},[99,46990,488],{"class":109},[99,46992,38885],{"class":5203},[99,46994,155],{"class":105},[99,46996,38890],{"class":214},[99,46998,116],{"class":109},[99,47000,47001],{"class":101,"line":16663},[99,47002,42676],{"class":168},[99,47004,47005],{"class":101,"line":16683},[99,47006,42681],{"class":168},[99,47008,47009],{"class":101,"line":16689},[99,47010,42686],{"class":168},[99,47012,47013],{"class":101,"line":16700},[99,47014,42691],{"class":168},[99,47016,47017],{"class":101,"line":16723},[99,47018,42696],{"class":168},[99,47020,47021],{"class":101,"line":16745},[99,47022,42701],{"class":168},[99,47024,47025,47027,47029,47031,47033,47035],{"class":101,"line":16750},[99,47026,38902],{"class":105},[99,47028,38905],{"class":109},[99,47030,38908],{"class":105},[99,47032,38911],{"class":105},[99,47034,38914],{"class":158},[99,47036,3725],{"class":109},[99,47038,47039,47041,47043],{"class":101,"line":16756},[99,47040,38926],{"class":109},[99,47042,301],{"class":158},[99,47044,116],{"class":109},[99,47046,47047,47049,47051],{"class":101,"line":16770},[99,47048,42728],{"class":105},[99,47050,38869],{"class":158},[99,47052,38945],{"class":109},[99,47054,47055,47057,47059,47061,47063],{"class":101,"line":16783},[99,47056,42737],{"class":109},[99,47058,301],{"class":158},[99,47060,488],{"class":109},[99,47062,38967],{"class":158},[99,47064,116],{"class":109},[99,47066,47067,47069,47071,47073,47075,47077],{"class":101,"line":16788},[99,47068,42750],{"class":105},[99,47070,38905],{"class":109},[99,47072,38908],{"class":105},[99,47074,38911],{"class":105},[99,47076,38914],{"class":158},[99,47078,3725],{"class":109},[99,47080,47081,47083,47085],{"class":101,"line":16802},[99,47082,42765],{"class":109},[99,47084,301],{"class":158},[99,47086,116],{"class":109},[99,47088,47089],{"class":101,"line":16807},[99,47090,35146],{"class":168},[99,47092,47093,47095,47097],{"class":101,"line":16813},[99,47094,30782],{"class":105},[99,47096,31074],{"class":1949},[99,47098,31077],{"class":109},[99,47100,47101,47103,47105,47107],{"class":101,"line":16818},[99,47102,31082],{"class":109},[99,47104,155],{"class":105},[99,47106,30804],{"class":158},[99,47108,42792],{"class":109},[99,47110,47111,47113,47115,47117],{"class":101,"line":16832},[99,47112,31082],{"class":109},[99,47114,155],{"class":105},[99,47116,30804],{"class":158},[99,47118,42803],{"class":109},[99,47120,47121,47123,47125,47127],{"class":101,"line":16837},[99,47122,31082],{"class":109},[99,47124,155],{"class":105},[99,47126,30804],{"class":158},[99,47128,42814],{"class":109},[99,47130,47131,47133,47135,47137],{"class":101,"line":16842},[99,47132,31082],{"class":109},[99,47134,155],{"class":105},[99,47136,30804],{"class":158},[99,47138,42825],{"class":109},[99,47140,47141,47143,47145,47147],{"class":101,"line":16856},[99,47142,31082],{"class":109},[99,47144,155],{"class":105},[99,47146,30804],{"class":158},[99,47148,42836],{"class":109},[99,47150,47151,47153],{"class":101,"line":16868},[99,47152,14739],{"class":105},[99,47154,31190],{"class":109},[99,47156,47157],{"class":101,"line":16873},[99,47158,2386],{"emptyLinePlaceholder":26},[99,47160,47161],{"class":101,"line":16886},[99,47162,42851],{"class":168},[99,47164,47165,47167,47169,47171,47173],{"class":101,"line":16891},[99,47166,1517],{"class":105},[99,47168,31201],{"class":158},[99,47170,2935],{"class":105},[99,47172,31206],{"class":214},[99,47174,3725],{"class":109},[99,47176,47177,47179,47181,47183,47185,47187,47189,47191,47193],{"class":101,"line":16896},[99,47178,31218],{"class":109},[99,47180,155],{"class":105},[99,47182,30432],{"class":109},[99,47184,31225],{"class":214},[99,47186,1690],{"class":105},[99,47188,31230],{"class":109},[99,47190,1687],{"class":105},[99,47192,30457],{"class":214},[99,47194,116],{"class":109},[99,47196,47197,47199,47201],{"class":101,"line":16901},[99,47198,31270],{"class":109},[99,47200,155],{"class":105},[99,47202,42892],{"class":109},[99,47204,47205,47207,47209,47211,47213,47215,47217,47219],{"class":101,"line":16914},[99,47206,31280],{"class":158},[99,47208,31283],{"class":109},[99,47210,327],{"class":158},[99,47212,488],{"class":109},[99,47214,31482],{"class":158},[99,47216,488],{"class":109},[99,47218,31482],{"class":158},[99,47220,31296],{"class":109},[21985,47222,47224],{"id":47223},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47226,47227],{},"计算图片的均值与方差，用于训练中归一化处理操作",[90,47229,47231],{"className":30359,"code":47230,"language":30361,"meta":21,"style":21},"# 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",[96,47232,47233,47238,47251,47256,47262,47267,47277,47281,47286,47296,47300,47305,47315,47332,47336,47341,47353,47365,47396,47405,47415,47425,47429,47434,47449,47453,47458,47463,47468,47478,47483,47508,47512,47517,47532,47536,47549,47553,47558,47563,47568,47573,47578,47588,47598,47621,47629,47637,47645,47649,47661,47665,47670,47674,47678,47685,47705,47729,47736,47750,47755,47760,47764,47778,47782,47794],{"__ignoreMap":21},[99,47234,47235],{"class":101,"line":102},[99,47236,47237],{"class":168},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[99,47239,47240,47242,47245,47248],{"class":101,"line":22},[99,47241,30718],{"class":105},[99,47243,47244],{"class":158}," PIL",[99,47246,47247],{"class":105}," import",[99,47249,47250],{"class":109}," Image\n",[99,47252,47253],{"class":101,"line":1165},[99,47254,47255],{"class":168},"# os 用来处理文件夹和文件路径\n",[99,47257,47258,47260],{"class":101,"line":1180},[99,47259,30373],{"class":105},[99,47261,45286],{"class":109},[99,47263,47264],{"class":101,"line":1186},[99,47265,47266],{"class":168},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[99,47268,47269,47271,47273,47275],{"class":101,"line":1200},[99,47270,30373],{"class":105},[99,47272,31361],{"class":109},[99,47274,31364],{"class":105},[99,47276,31367],{"class":109},[99,47278,47279],{"class":101,"line":1206},[99,47280,2386],{"emptyLinePlaceholder":26},[99,47282,47283],{"class":101,"line":1297},[99,47284,47285],{"class":168},"# 文件夹路径，包含所有图片文件\n",[99,47287,47288,47291,47293],{"class":101,"line":1303},[99,47289,47290],{"class":109},"folder_path ",[99,47292,155],{"class":105},[99,47294,47295],{"class":214}," 'data_cat_dog'\n",[99,47297,47298],{"class":101,"line":1315},[99,47299,2386],{"emptyLinePlaceholder":26},[99,47301,47302],{"class":101,"line":1598},[99,47303,47304],{"class":168},"# 初始化累积变量\n",[99,47306,47307,47310,47312],{"class":101,"line":1603},[99,47308,47309],{"class":109},"total_pixels ",[99,47311,155],{"class":105},[99,47313,47314],{"class":158}," 0\n",[99,47316,47317,47320,47322,47325,47327,47329],{"class":101,"line":1609},[99,47318,47319],{"class":109},"sum_normalized_pixel_values ",[99,47321,155],{"class":105},[99,47323,47324],{"class":109}," np.zeros(",[99,47326,181],{"class":158},[99,47328,45789],{"class":109},[99,47330,47331],{"class":168},"# 如果是RGB图像，需要三个通道的均值和方差\n",[99,47333,47334],{"class":101,"line":1614},[99,47335,2386],{"emptyLinePlaceholder":26},[99,47337,47338],{"class":101,"line":1628},[99,47339,47340],{"class":168},"# 遍历文件夹中的图片文件\n",[99,47342,47343,47345,47348,47350],{"class":101,"line":1633},[99,47344,3011],{"class":105},[99,47346,47347],{"class":109}," root, dirs, files ",[99,47349,26032],{"class":105},[99,47351,47352],{"class":109}," os.walk(folder_path):\n",[99,47354,47355,47357,47360,47362],{"class":101,"line":1639},[99,47356,3187],{"class":105},[99,47358,47359],{"class":109}," filename ",[99,47361,26032],{"class":105},[99,47363,47364],{"class":109}," files:\n",[99,47366,47367,47369,47372,47375,47377,47380,47382,47385,47387,47390,47393],{"class":101,"line":1660},[99,47368,2483],{"class":105},[99,47370,47371],{"class":109}," filename.endswith((",[99,47373,47374],{"class":214},"'.jpg'",[99,47376,12422],{"class":109},[99,47378,47379],{"class":214},"'.jpeg'",[99,47381,12422],{"class":109},[99,47383,47384],{"class":214},"'.png'",[99,47386,12422],{"class":109},[99,47388,47389],{"class":214},"'.bmp'",[99,47391,47392],{"class":109},")):  ",[99,47394,47395],{"class":168},"# 可根据实际情况添加其他格式\n",[99,47397,47398,47400,47402],{"class":101,"line":1665},[99,47399,45654],{"class":109},[99,47401,155],{"class":105},[99,47403,47404],{"class":109}," os.path.join(root, filename)\n",[99,47406,47407,47410,47412],{"class":101,"line":1679},[99,47408,47409],{"class":109},"            image ",[99,47411,155],{"class":105},[99,47413,47414],{"class":109}," Image.open(image_path)\n",[99,47416,47417,47420,47422],{"class":101,"line":1684},[99,47418,47419],{"class":109},"            image_array ",[99,47421,155],{"class":105},[99,47423,47424],{"class":109}," np.array(image)\n",[99,47426,47427],{"class":101,"line":1713},[99,47428,2386],{"emptyLinePlaceholder":26},[99,47430,47431],{"class":101,"line":1718},[99,47432,47433],{"class":168},"            # 归一化像素值到0-1之间\n",[99,47435,47436,47439,47441,47444,47446],{"class":101,"line":1735},[99,47437,47438],{"class":109},"            normalized_image_array ",[99,47440,155],{"class":105},[99,47442,47443],{"class":109}," image_array ",[99,47445,694],{"class":105},[99,47447,47448],{"class":158}," 255.0\n",[99,47450,47451],{"class":101,"line":1740},[99,47452,2386],{"emptyLinePlaceholder":26},[99,47454,47455],{"class":101,"line":1745},[99,47456,47457],{"class":168},"            # print(image_path)\n",[99,47459,47460],{"class":101,"line":1750},[99,47461,47462],{"class":168},"            # print(normalized_image_array.shape)\n",[99,47464,47465],{"class":101,"line":1764},[99,47466,47467],{"class":168},"            # 累积归一化后的像素值和像素数量\n",[99,47469,47470,47473,47475],{"class":101,"line":1769},[99,47471,47472],{"class":109},"            total_pixels ",[99,47474,9464],{"class":105},[99,47476,47477],{"class":109}," normalized_image_array.size\n",[99,47479,47480],{"class":101,"line":2563},[99,47481,47482],{"class":168},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[99,47484,47485,47488,47490,47493,47496,47498,47500,47502,47504,47506],{"class":101,"line":2577},[99,47486,47487],{"class":109},"            sum_normalized_pixel_values ",[99,47489,9464],{"class":105},[99,47491,47492],{"class":109}," np.sum(normalized_image_array, ",[99,47494,47495],{"class":5203},"axis",[99,47497,155],{"class":105},[99,47499,110],{"class":109},[99,47501,301],{"class":158},[99,47503,12422],{"class":109},[99,47505,327],{"class":158},[99,47507,30478],{"class":109},[99,47509,47510],{"class":101,"line":2585},[99,47511,2386],{"emptyLinePlaceholder":26},[99,47513,47514],{"class":101,"line":2590},[99,47515,47516],{"class":168},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[99,47518,47519,47522,47524,47527,47529],{"class":101,"line":2596},[99,47520,47521],{"class":109},"mean ",[99,47523,155],{"class":105},[99,47525,47526],{"class":109}," sum_normalized_pixel_values ",[99,47528,694],{"class":105},[99,47530,47531],{"class":109}," total_pixels\n",[99,47533,47534],{"class":101,"line":2602},[99,47535,2386],{"emptyLinePlaceholder":26},[99,47537,47538,47541,47543,47545,47547],{"class":101,"line":2607},[99,47539,47540],{"class":109},"sum_squared_diff ",[99,47542,155],{"class":105},[99,47544,47324],{"class":109},[99,47546,181],{"class":158},[99,47548,116],{"class":109},[99,47550,47551],{"class":101,"line":7935},[99,47552,2386],{"emptyLinePlaceholder":26},[99,47554,47555],{"class":101,"line":7959},[99,47556,47557],{"class":168},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[99,47559,47560],{"class":101,"line":7964},[99,47561,47562],{"class":168},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[99,47564,47565],{"class":101,"line":7970},[99,47566,47567],{"class":168},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[99,47569,47570],{"class":101,"line":7997},[99,47571,47572],{"class":168},"# Image.open(image_path)：打开图片\n",[99,47574,47575],{"class":101,"line":8002},[99,47576,47577],{"class":168},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[99,47579,47580,47582,47584,47586],{"class":101,"line":8008},[99,47581,3011],{"class":105},[99,47583,47347],{"class":109},[99,47585,26032],{"class":105},[99,47587,47352],{"class":109},[99,47589,47590,47592,47594,47596],{"class":101,"line":8020},[99,47591,3187],{"class":105},[99,47593,47359],{"class":109},[99,47595,26032],{"class":105},[99,47597,47364],{"class":109},[99,47599,47600,47602,47604,47606,47608,47610,47612,47614,47616,47618],{"class":101,"line":8032},[99,47601,2483],{"class":105},[99,47603,47371],{"class":109},[99,47605,47374],{"class":214},[99,47607,12422],{"class":109},[99,47609,47379],{"class":214},[99,47611,12422],{"class":109},[99,47613,47384],{"class":214},[99,47615,12422],{"class":109},[99,47617,47389],{"class":214},[99,47619,47620],{"class":109},")):\n",[99,47622,47623,47625,47627],{"class":101,"line":8044},[99,47624,45654],{"class":109},[99,47626,155],{"class":105},[99,47628,47404],{"class":109},[99,47630,47631,47633,47635],{"class":101,"line":9703},[99,47632,47409],{"class":109},[99,47634,155],{"class":105},[99,47636,47414],{"class":109},[99,47638,47639,47641,47643],{"class":101,"line":9728},[99,47640,47419],{"class":109},[99,47642,155],{"class":105},[99,47644,47424],{"class":109},[99,47646,47647],{"class":101,"line":9751},[99,47648,47433],{"class":168},[99,47650,47651,47653,47655,47657,47659],{"class":101,"line":9775},[99,47652,47438],{"class":109},[99,47654,155],{"class":105},[99,47656,47443],{"class":109},[99,47658,694],{"class":105},[99,47660,47448],{"class":158},[99,47662,47663],{"class":101,"line":9780},[99,47664,47462],{"class":168},[99,47666,47667],{"class":101,"line":9785},[99,47668,47669],{"class":168},"            # print(mean.shape)\n",[99,47671,47672],{"class":101,"line":9790},[99,47673,47457],{"class":168},[99,47675,47676],{"class":101,"line":9799},[99,47677,2386],{"emptyLinePlaceholder":26},[99,47679,47680,47683],{"class":101,"line":9804},[99,47681,47682],{"class":105},"            try",[99,47684,3725],{"class":109},[99,47686,47687,47690,47692,47695,47697,47700,47702],{"class":101,"line":9810},[99,47688,47689],{"class":109},"                diff ",[99,47691,155],{"class":105},[99,47693,47694],{"class":109}," (normalized_image_array ",[99,47696,642],{"class":105},[99,47698,47699],{"class":109}," mean) ",[99,47701,10648],{"class":105},[99,47703,47704],{"class":158}," 2\n",[99,47706,47707,47710,47712,47715,47717,47719,47721,47723,47725,47727],{"class":101,"line":9831},[99,47708,47709],{"class":109},"                sum_squared_diff ",[99,47711,9464],{"class":105},[99,47713,47714],{"class":109}," np.sum(diff, ",[99,47716,47495],{"class":5203},[99,47718,155],{"class":105},[99,47720,110],{"class":109},[99,47722,301],{"class":158},[99,47724,12422],{"class":109},[99,47726,327],{"class":158},[99,47728,30478],{"class":109},[99,47730,47731,47734],{"class":101,"line":9837},[99,47732,47733],{"class":105},"            except",[99,47735,3725],{"class":109},[99,47737,47738,47741,47743,47745,47748],{"class":101,"line":9851},[99,47739,47740],{"class":158},"                print",[99,47742,110],{"class":109},[99,47744,162],{"class":105},[99,47746,47747],{"class":214},"\"捕获到自定义异常\"",[99,47749,116],{"class":109},[99,47751,47752],{"class":101,"line":9857},[99,47753,47754],{"class":168},"            # diff = (normalized_image_array - mean) ** 2\n",[99,47756,47757],{"class":101,"line":9884},[99,47758,47759],{"class":168},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[99,47761,47762],{"class":101,"line":9893},[99,47763,2386],{"emptyLinePlaceholder":26},[99,47765,47766,47769,47771,47774,47776],{"class":101,"line":9899},[99,47767,47768],{"class":109},"variance ",[99,47770,155],{"class":105},[99,47772,47773],{"class":109}," sum_squared_diff ",[99,47775,694],{"class":105},[99,47777,47531],{"class":109},[99,47779,47780],{"class":101,"line":9907},[99,47781,2386],{"emptyLinePlaceholder":26},[99,47783,47784,47786,47788,47791],{"class":101,"line":9912},[99,47785,30396],{"class":158},[99,47787,110],{"class":109},[99,47789,47790],{"class":214},"\"Mean:\"",[99,47792,47793],{"class":109},", mean)\n",[99,47795,47796,47798,47800,47803],{"class":101,"line":16591},[99,47797,30396],{"class":158},[99,47799,110],{"class":109},[99,47801,47802],{"class":214},"\"Variance:\"",[99,47804,47805],{"class":109},", variance)\n",[90,47807,47809],{"className":30359,"code":47808,"language":30361,"meta":21,"style":21},"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",[96,47810,47811,47817,47823,47833,47839,47849,47863,47873,47883,47893,47897,47907,47917,47921,47925,47933,47938,47943,47962,47966,47971,47976,47981,47986,48027,48032,48042,48047,48060,48065,48070,48075,48080,48085,48089,48094,48099,48121,48125,48157,48171,48181,48191,48195,48205,48219,48229,48239,48249,48255,48259,48263,48267,48271,48275,48283,48303,48307,48311,48315,48319,48335,48339,48343,48351,48355,48359,48367,48371,48375,48379,48387,48391,48395,48399,48407,48411,48419,48423,48431,48435,48443,48447,48455,48459,48463,48471,48475,48479,48491,48515,48529,48533,48537,48541,48549,48553,48561,48565,48573,48577,48585,48589,48597,48601,48609,48613,48625,48629,48637,48641,48649,48653,48657,48661,48665,48673,48677,48693,48697,48705,48709,48713,48717,48721,48725,48729,48733,48749,48753,48765,48769,48781,48785,48797,48801,48809,48813,48821,48825,48829,48833,48839,48843,48851,48855,48871,48875,48883,48887,48903,48915,48919,48931,48935,48939,48947,48951,48955,48963,48967,48975,48979,48987,48991,48995,49037,49079,49083,49087,49103,49107,49123,49127,49131,49139,49143,49147,49159,49197,49201,49205,49213,49217,49231,49241,49247,49253,49259,49265,49269,49273,49279,49283,49287,49295,49299,49317,49321,49325,49329,49345,49349,49353,49357,49361,49365,49385,49405,49409,49413,49417,49425,49433,49437,49453,49473,49493,49497,49502,49511,49520,49525,49530,49535,49548,49553,49562,49571,49588],{"__ignoreMap":21},[99,47812,47813,47815],{"class":101,"line":102},[99,47814,30373],{"class":105},[99,47816,31803],{"class":109},[99,47818,47819,47821],{"class":101,"line":22},[99,47820,30373],{"class":105},[99,47822,31810],{"class":109},[99,47824,47825,47827,47829,47831],{"class":101,"line":1165},[99,47826,30373],{"class":105},[99,47828,31821],{"class":109},[99,47830,31364],{"class":105},[99,47832,31826],{"class":109},[99,47834,47835,47837],{"class":101,"line":1180},[99,47836,30373],{"class":105},[99,47838,30376],{"class":109},[99,47840,47841,47843,47845,47847],{"class":101,"line":1186},[99,47842,30718],{"class":105},[99,47844,31396],{"class":109},[99,47846,30373],{"class":105},[99,47848,31843],{"class":109},[99,47850,47851,47853,47855,47857,47860],{"class":101,"line":1200},[99,47852,30718],{"class":105},[99,47854,31349],{"class":109},[99,47856,30373],{"class":105},[99,47858,47859],{"class":109}," ImageFolder ",[99,47861,47862],{"class":168},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[99,47864,47865,47867,47869,47871],{"class":101,"line":1206},[99,47866,30718],{"class":105},[99,47868,31379],{"class":109},[99,47870,30373],{"class":105},[99,47872,31384],{"class":109},[99,47874,47875,47877,47879,47881],{"class":101,"line":1297},[99,47876,30373],{"class":105},[99,47878,31396],{"class":109},[99,47880,31364],{"class":105},[99,47882,31401],{"class":109},[99,47884,47885,47887,47889,47891],{"class":101,"line":1303},[99,47886,30373],{"class":105},[99,47888,31413],{"class":109},[99,47890,31364],{"class":105},[99,47892,31418],{"class":109},[99,47894,47895],{"class":101,"line":1315},[99,47896,31888],{"class":168},[99,47898,47899,47901,47903,47905],{"class":101,"line":1598},[99,47900,30718],{"class":105},[99,47902,31895],{"class":109},[99,47904,30373],{"class":105},[99,47906,43012],{"class":109},[99,47908,47909,47911,47913,47915],{"class":101,"line":1603},[99,47910,30718],{"class":105},[99,47912,30721],{"class":109},[99,47914,30373],{"class":105},[99,47916,30726],{"class":109},[99,47918,47919],{"class":101,"line":1609},[99,47920,2386],{"emptyLinePlaceholder":26},[99,47922,47923],{"class":101,"line":1614},[99,47924,31923],{"class":168},[99,47926,47927,47929,47931],{"class":101,"line":1628},[99,47928,31928],{"class":105},[99,47930,31931],{"class":1949},[99,47932,31934],{"class":109},[99,47934,47935],{"class":101,"line":1633},[99,47936,47937],{"class":168},"    # 导入自己的数据集，并进行数据处理\n",[99,47939,47940],{"class":101,"line":1639},[99,47941,47942],{"class":168},"    # 定义数据集的路径\n",[99,47944,47945,47948,47950,47952,47954,47956,47960],{"class":101,"line":1660},[99,47946,47947],{"class":158},"    ROOT_PATH",[99,47949,155],{"class":105},[99,47951,780],{"class":105},[99,47953,361],{"class":214},[99,47955,668],{"class":158},[99,47957,47959],{"class":47958},"sA_wV","\u002Fdata\u002Ftrain",[99,47961,25122],{"class":214},[99,47963,47964],{"class":101,"line":1665},[99,47965,2386],{"emptyLinePlaceholder":26},[99,47967,47968],{"class":101,"line":1679},[99,47969,47970],{"class":168},"    # 定义归一化方法\n",[99,47972,47973],{"class":101,"line":1684},[99,47974,47975],{"class":168},"    # 这里需要先计算一下数据集的均值和方差\n",[99,47977,47978],{"class":101,"line":1713},[99,47979,47980],{"class":168},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[99,47982,47983],{"class":101,"line":1718},[99,47984,47985],{"class":168},"    # 第一个参数是均值，第二个参数是方差\n",[99,47987,47988,47991,47993,47996,47999,48001,48004,48006,48009,48012,48015,48017,48020,48022,48025],{"class":101,"line":1735},[99,47989,47990],{"class":109},"    normalize",[99,47992,155],{"class":105},[99,47994,47995],{"class":109},"transforms.Normalize([",[99,47997,47998],{"class":158},"0.162",[99,48000,488],{"class":109},[99,48002,48003],{"class":158},"0.151",[99,48005,488],{"class":109},[99,48007,48008],{"class":158},"0.138",[99,48010,48011],{"class":109},"],[",[99,48013,48014],{"class":158},"0.058",[99,48016,488],{"class":109},[99,48018,48019],{"class":158},"0.052",[99,48021,488],{"class":109},[99,48023,48024],{"class":158},"0.048",[99,48026,4643],{"class":109},[99,48028,48029],{"class":101,"line":1740},[99,48030,48031],{"class":168},"    # 定义数据集处理方法变量\n",[99,48033,48034,48037,48039],{"class":101,"line":1745},[99,48035,48036],{"class":109},"    train_transform",[99,48038,155],{"class":105},[99,48040,48041],{"class":109},"transforms.Compose([\n",[99,48043,48044],{"class":101,"line":1750},[99,48045,48046],{"class":168},"        # 调整图像大小为224*224\n",[99,48048,48049,48052,48054,48056,48058],{"class":101,"line":1764},[99,48050,48051],{"class":109},"        transforms.Resize((",[99,48053,31482],{"class":158},[99,48055,488],{"class":109},[99,48057,31482],{"class":158},[99,48059,42603],{"class":109},[99,48061,48062],{"class":101,"line":1769},[99,48063,48064],{"class":168},"        # 将图像转换为张量\n",[99,48066,48067],{"class":101,"line":2563},[99,48068,48069],{"class":109},"        transforms.ToTensor(),\n",[99,48071,48072],{"class":101,"line":2577},[99,48073,48074],{"class":109},"        normalize])\n",[99,48076,48077],{"class":101,"line":2585},[99,48078,48079],{"class":168},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[99,48081,48082],{"class":101,"line":2590},[99,48083,48084],{"class":168},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[99,48086,48087],{"class":101,"line":2596},[99,48088,2386],{"emptyLinePlaceholder":26},[99,48090,48091],{"class":101,"line":2602},[99,48092,48093],{"class":168},"    # 加载数据集\n",[99,48095,48096],{"class":101,"line":2607},[99,48097,48098],{"class":168},"    # 传入数据集路径与处理方法\n",[99,48100,48101,48103,48105,48108,48111,48113,48116,48118],{"class":101,"line":7935},[99,48102,31939],{"class":109},[99,48104,155],{"class":105},[99,48106,48107],{"class":109},"ImageFolder(",[99,48109,48110],{"class":158},"ROOT_PATH",[99,48112,488],{"class":109},[99,48114,48115],{"class":5203},"transform",[99,48117,155],{"class":105},[99,48119,48120],{"class":109},"train_transform)\n",[99,48122,48123],{"class":101,"line":7959},[99,48124,2386],{"emptyLinePlaceholder":26},[99,48126,48127,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155],{"class":101,"line":7964},[99,48128,31991],{"class":109},[99,48130,155],{"class":105},[99,48132,31996],{"class":109},[99,48134,31999],{"class":158},[99,48136,110],{"class":109},[99,48138,32004],{"class":158},[99,48140,565],{"class":105},[99,48142,7345],{"class":158},[99,48144,32011],{"class":109},[99,48146,31999],{"class":158},[99,48148,110],{"class":109},[99,48150,32018],{"class":158},[99,48152,565],{"class":105},[99,48154,7345],{"class":158},[99,48156,32025],{"class":109},[99,48158,48159,48161,48163,48165,48167,48169],{"class":101,"line":7970},[99,48160,32030],{"class":109},[99,48162,155],{"class":105},[99,48164,32035],{"class":109},[99,48166,31518],{"class":5203},[99,48168,155],{"class":105},[99,48170,31523],{"class":109},[99,48172,48173,48175,48177,48179],{"class":101,"line":7997},[99,48174,32046],{"class":5203},[99,48176,155],{"class":105},[99,48178,307],{"class":158},[99,48180,31447],{"class":109},[99,48182,48183,48185,48187,48189],{"class":101,"line":8002},[99,48184,32058],{"class":5203},[99,48186,155],{"class":105},[99,48188,31457],{"class":158},[99,48190,31447],{"class":109},[99,48192,48193],{"class":101,"line":8008},[99,48194,32069],{"class":168},[99,48196,48197,48199,48201,48203],{"class":101,"line":8020},[99,48198,32074],{"class":5203},[99,48200,155],{"class":105},[99,48202,505],{"class":158},[99,48204,116],{"class":109},[99,48206,48207,48209,48211,48213,48215,48217],{"class":101,"line":8032},[99,48208,32085],{"class":109},[99,48210,155],{"class":105},[99,48212,31515],{"class":109},[99,48214,31518],{"class":5203},[99,48216,155],{"class":105},[99,48218,32096],{"class":109},[99,48220,48221,48223,48225,48227],{"class":101,"line":8044},[99,48222,32101],{"class":5203},[99,48224,155],{"class":105},[99,48226,307],{"class":158},[99,48228,31447],{"class":109},[99,48230,48231,48233,48235,48237],{"class":101,"line":9703},[99,48232,32112],{"class":5203},[99,48234,155],{"class":105},[99,48236,31457],{"class":158},[99,48238,31447],{"class":109},[99,48240,48241,48243,48245,48247],{"class":101,"line":9728},[99,48242,32123],{"class":5203},[99,48244,155],{"class":105},[99,48246,505],{"class":158},[99,48248,116],{"class":109},[99,48250,48251,48253],{"class":101,"line":9751},[99,48252,4076],{"class":105},[99,48254,32136],{"class":109},[99,48256,48257],{"class":101,"line":9775},[99,48258,2386],{"emptyLinePlaceholder":26},[99,48260,48261],{"class":101,"line":9780},[99,48262,32145],{"class":168},[99,48264,48265],{"class":101,"line":9785},[99,48266,32150],{"class":168},[99,48268,48269],{"class":101,"line":9790},[99,48270,2386],{"emptyLinePlaceholder":26},[99,48272,48273],{"class":101,"line":9799},[99,48274,32159],{"class":168},[99,48276,48277,48279,48281],{"class":101,"line":9804},[99,48278,31928],{"class":105},[99,48280,32166],{"class":1949},[99,48282,32169],{"class":109},[99,48284,48285,48287,48289,48291,48293,48295,48297,48299,48301],{"class":101,"line":9810},[99,48286,31218],{"class":109},[99,48288,155],{"class":105},[99,48290,30432],{"class":109},[99,48292,31225],{"class":214},[99,48294,1690],{"class":105},[99,48296,31230],{"class":109},[99,48298,1687],{"class":105},[99,48300,32188],{"class":214},[99,48302,116],{"class":109},[99,48304,48305],{"class":101,"line":9831},[99,48306,2386],{"emptyLinePlaceholder":26},[99,48308,48309],{"class":101,"line":9837},[99,48310,32203],{"class":168},[99,48312,48313],{"class":101,"line":9851},[99,48314,32208],{"class":168},[99,48316,48317],{"class":101,"line":9857},[99,48318,32213],{"class":168},[99,48320,48321,48323,48325,48327,48329,48331,48333],{"class":101,"line":9884},[99,48322,32218],{"class":109},[99,48324,155],{"class":105},[99,48326,32223],{"class":109},[99,48328,32226],{"class":5203},[99,48330,155],{"class":105},[99,48332,32231],{"class":158},[99,48334,116],{"class":109},[99,48336,48337],{"class":101,"line":9893},[99,48338,2386],{"emptyLinePlaceholder":26},[99,48340,48341],{"class":101,"line":9899},[99,48342,32242],{"class":168},[99,48344,48345,48347,48349],{"class":101,"line":9907},[99,48346,32247],{"class":109},[99,48348,155],{"class":105},[99,48350,32252],{"class":109},[99,48352,48353],{"class":101,"line":9912},[99,48354,2386],{"emptyLinePlaceholder":26},[99,48356,48357],{"class":101,"line":16591},[99,48358,32261],{"class":168},[99,48360,48361,48363,48365],{"class":101,"line":16597},[99,48362,31270],{"class":109},[99,48364,155],{"class":105},[99,48366,32270],{"class":109},[99,48368,48369],{"class":101,"line":16620},[99,48370,32275],{"class":168},[99,48372,48373],{"class":101,"line":16626},[99,48374,32280],{"class":168},[99,48376,48377],{"class":101,"line":16649},[99,48378,32285],{"class":168},[99,48380,48381,48383,48385],{"class":101,"line":16663},[99,48382,32290],{"class":109},[99,48384,155],{"class":105},[99,48386,32295],{"class":109},[99,48388,48389],{"class":101,"line":16683},[99,48390,2386],{"emptyLinePlaceholder":26},[99,48392,48393],{"class":101,"line":16689},[99,48394,32308],{"class":168},[99,48396,48397],{"class":101,"line":16700},[99,48398,32313],{"class":168},[99,48400,48401,48403,48405],{"class":101,"line":16723},[99,48402,32318],{"class":109},[99,48404,155],{"class":105},[99,48406,32323],{"class":158},[99,48408,48409],{"class":101,"line":16745},[99,48410,32328],{"class":168},[99,48412,48413,48415,48417],{"class":101,"line":16750},[99,48414,32333],{"class":109},[99,48416,155],{"class":105},[99,48418,32338],{"class":109},[99,48420,48421],{"class":101,"line":16756},[99,48422,32343],{"class":168},[99,48424,48425,48427,48429],{"class":101,"line":16770},[99,48426,32348],{"class":109},[99,48428,155],{"class":105},[99,48430,32338],{"class":109},[99,48432,48433],{"class":101,"line":16783},[99,48434,32357],{"class":168},[99,48436,48437,48439,48441],{"class":101,"line":16788},[99,48438,32362],{"class":109},[99,48440,155],{"class":105},[99,48442,32338],{"class":109},[99,48444,48445],{"class":101,"line":16802},[99,48446,32371],{"class":168},[99,48448,48449,48451,48453],{"class":101,"line":16807},[99,48450,32376],{"class":109},[99,48452,155],{"class":105},[99,48454,32338],{"class":109},[99,48456,48457],{"class":101,"line":16813},[99,48458,2386],{"emptyLinePlaceholder":26},[99,48460,48461],{"class":101,"line":16818},[99,48462,32389],{"class":168},[99,48464,48465,48467,48469],{"class":101,"line":16832},[99,48466,32394],{"class":109},[99,48468,155],{"class":105},[99,48470,32399],{"class":109},[99,48472,48473],{"class":101,"line":16837},[99,48474,2386],{"emptyLinePlaceholder":26},[99,48476,48477],{"class":101,"line":16842},[99,48478,32412],{"class":168},[99,48480,48481,48483,48485,48487,48489],{"class":101,"line":16856},[99,48482,3187],{"class":105},[99,48484,32419],{"class":109},[99,48486,26032],{"class":105},[99,48488,32424],{"class":158},[99,48490,32427],{"class":109},[99,48492,48493,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513],{"class":101,"line":16868},[99,48494,32432],{"class":158},[99,48496,110],{"class":109},[99,48498,32437],{"class":214},[99,48500,32440],{"class":158},[99,48502,694],{"class":214},[99,48504,32440],{"class":158},[99,48506,361],{"class":214},[99,48508,32449],{"class":109},[99,48510,642],{"class":105},[99,48512,327],{"class":158},[99,48514,30478],{"class":109},[99,48516,48517,48519,48521,48523,48525,48527],{"class":101,"line":16873},[99,48518,32432],{"class":158},[99,48520,110],{"class":109},[99,48522,32464],{"class":214},[99,48524,565],{"class":105},[99,48526,556],{"class":158},[99,48528,116],{"class":109},[99,48530,48531],{"class":101,"line":16886},[99,48532,2386],{"emptyLinePlaceholder":26},[99,48534,48535],{"class":101,"line":16891},[99,48536,32479],{"class":168},[99,48538,48539],{"class":101,"line":16896},[99,48540,32484],{"class":168},[99,48542,48543,48545,48547],{"class":101,"line":16901},[99,48544,32489],{"class":109},[99,48546,155],{"class":105},[99,48548,32323],{"class":158},[99,48550,48551],{"class":101,"line":16914},[99,48552,32498],{"class":168},[99,48554,48555,48557,48559],{"class":101,"line":16919},[99,48556,32503],{"class":109},[99,48558,155],{"class":105},[99,48560,3071],{"class":158},[99,48562,48563],{"class":101,"line":32614},[99,48564,32512],{"class":168},[99,48566,48567,48569,48571],{"class":101,"line":32620},[99,48568,32517],{"class":109},[99,48570,155],{"class":105},[99,48572,32323],{"class":158},[99,48574,48575],{"class":101,"line":32626},[99,48576,32526],{"class":168},[99,48578,48579,48581,48583],{"class":101,"line":32632},[99,48580,32531],{"class":109},[99,48582,155],{"class":105},[99,48584,3071],{"class":158},[99,48586,48587],{"class":101,"line":32638},[99,48588,32540],{"class":168},[99,48590,48591,48593,48595],{"class":101,"line":32649},[99,48592,32545],{"class":109},[99,48594,155],{"class":105},[99,48596,3071],{"class":158},[99,48598,48599],{"class":101,"line":32655},[99,48600,32554],{"class":168},[99,48602,48603,48605,48607],{"class":101,"line":32675},[99,48604,32559],{"class":109},[99,48606,155],{"class":105},[99,48608,3071],{"class":158},[99,48610,48611],{"class":101,"line":32681},[99,48612,32568],{"class":168},[99,48614,48615,48617,48619,48621,48623],{"class":101,"line":32692},[99,48616,3389],{"class":105},[99,48618,31582],{"class":109},[99,48620,26032],{"class":105},[99,48622,31587],{"class":158},[99,48624,32581],{"class":109},[99,48626,48627],{"class":101,"line":32698},[99,48628,32586],{"class":168},[99,48630,48631,48633,48635],{"class":101,"line":32704},[99,48632,32591],{"class":109},[99,48634,155],{"class":105},[99,48636,32596],{"class":109},[99,48638,48639],{"class":101,"line":32710},[99,48640,32601],{"class":168},[99,48642,48643,48645,48647],{"class":101,"line":32716},[99,48644,32606],{"class":109},[99,48646,155],{"class":105},[99,48648,32611],{"class":109},[99,48650,48651],{"class":101,"line":32722},[99,48652,32617],{"class":168},[99,48654,48655],{"class":101,"line":32728},[99,48656,32623],{"class":109},[99,48658,48659],{"class":101,"line":32734},[99,48660,32629],{"class":168},[99,48662,48663],{"class":101,"line":32754},[99,48664,32635],{"class":168},[99,48666,48667,48669,48671],{"class":101,"line":32760},[99,48668,32641],{"class":109},[99,48670,155],{"class":105},[99,48672,32646],{"class":109},[99,48674,48675],{"class":101,"line":32776},[99,48676,32652],{"class":168},[99,48678,48679,48681,48683,48685,48687,48689,48691],{"class":101,"line":32782},[99,48680,32658],{"class":109},[99,48682,155],{"class":105},[99,48684,32663],{"class":109},[99,48686,32666],{"class":5203},[99,48688,155],{"class":105},[99,48690,327],{"class":158},[99,48692,116],{"class":109},[99,48694,48695],{"class":101,"line":32796},[99,48696,32678],{"class":168},[99,48698,48699,48701,48703],{"class":101,"line":32802},[99,48700,32684],{"class":109},[99,48702,155],{"class":105},[99,48704,32689],{"class":109},[99,48706,48707],{"class":101,"line":32817},[99,48708,32695],{"class":168},[99,48710,48711],{"class":101,"line":32823},[99,48712,32701],{"class":109},[99,48714,48715],{"class":101,"line":32832},[99,48716,32707],{"class":168},[99,48718,48719],{"class":101,"line":32838},[99,48720,32713],{"class":109},[99,48722,48723],{"class":101,"line":32847},[99,48724,32719],{"class":168},[99,48726,48727],{"class":101,"line":32853},[99,48728,32725],{"class":109},[99,48730,48731],{"class":101,"line":32859},[99,48732,32731],{"class":168},[99,48734,48735,48737,48739,48741,48743,48745,48747],{"class":101,"line":32868},[99,48736,32737],{"class":109},[99,48738,9464],{"class":105},[99,48740,32742],{"class":109},[99,48742,565],{"class":105},[99,48744,32747],{"class":109},[99,48746,301],{"class":158},[99,48748,116],{"class":109},[99,48750,48751],{"class":101,"line":32874},[99,48752,32757],{"class":168},[99,48754,48755,48757,48759,48761,48763],{"class":101,"line":32885},[99,48756,32763],{"class":109},[99,48758,9464],{"class":105},[99,48760,32768],{"class":109},[99,48762,2935],{"class":105},[99,48764,32773],{"class":109},[99,48766,48767],{"class":101,"line":32891},[99,48768,32779],{"class":168},[99,48770,48771,48773,48775,48777,48779],{"class":101,"line":32910},[99,48772,32785],{"class":109},[99,48774,9464],{"class":105},[99,48776,32747],{"class":109},[99,48778,301],{"class":158},[99,48780,116],{"class":109},[99,48782,48783],{"class":101,"line":32916},[99,48784,32799],{"class":168},[99,48786,48787,48789,48791,48793,48795],{"class":101,"line":32927},[99,48788,3389],{"class":105},[99,48790,32807],{"class":109},[99,48792,26032],{"class":105},[99,48794,31587],{"class":158},[99,48796,32814],{"class":109},[99,48798,48799],{"class":101,"line":32933},[99,48800,32820],{"class":168},[99,48802,48803,48805,48807],{"class":101,"line":32953},[99,48804,32591],{"class":109},[99,48806,155],{"class":105},[99,48808,32596],{"class":109},[99,48810,48811],{"class":101,"line":32969},[99,48812,32835],{"class":168},[99,48814,48815,48817,48819],{"class":101,"line":32975},[99,48816,32606],{"class":109},[99,48818,155],{"class":105},[99,48820,32611],{"class":109},[99,48822,48823],{"class":101,"line":32989},[99,48824,32850],{"class":168},[99,48826,48827],{"class":101,"line":32995},[99,48828,32856],{"class":109},[99,48830,48831],{"class":101,"line":33001},[99,48832,36337],{"class":168},[99,48834,48835,48837],{"class":101,"line":33012},[99,48836,32862],{"class":105},[99,48838,32865],{"class":109},[99,48840,48841],{"class":101,"line":33018},[99,48842,32871],{"class":168},[99,48844,48845,48847,48849],{"class":101,"line":33024},[99,48846,36352],{"class":109},[99,48848,155],{"class":105},[99,48850,32646],{"class":109},[99,48852,48853],{"class":101,"line":33034},[99,48854,32888],{"class":168},[99,48856,48857,48859,48861,48863,48865,48867,48869],{"class":101,"line":33040},[99,48858,36365],{"class":109},[99,48860,155],{"class":105},[99,48862,32663],{"class":109},[99,48864,32666],{"class":5203},[99,48866,155],{"class":105},[99,48868,327],{"class":158},[99,48870,116],{"class":109},[99,48872,48873],{"class":101,"line":33051},[99,48874,32913],{"class":168},[99,48876,48877,48879,48881],{"class":101,"line":33057},[99,48878,36386],{"class":109},[99,48880,155],{"class":105},[99,48882,32689],{"class":109},[99,48884,48885],{"class":101,"line":33067},[99,48886,32930],{"class":168},[99,48888,48889,48891,48893,48895,48897,48899,48901],{"class":101,"line":33072},[99,48890,36399],{"class":109},[99,48892,9464],{"class":105},[99,48894,36404],{"class":109},[99,48896,565],{"class":105},[99,48898,32747],{"class":109},[99,48900,301],{"class":158},[99,48902,116],{"class":109},[99,48904,48905,48907,48909,48911,48913],{"class":101,"line":33078},[99,48906,36417],{"class":109},[99,48908,9464],{"class":105},[99,48910,32768],{"class":109},[99,48912,2935],{"class":105},[99,48914,32773],{"class":109},[99,48916,48917],{"class":101,"line":33127},[99,48918,36430],{"class":168},[99,48920,48921,48923,48925,48927,48929],{"class":101,"line":33174},[99,48922,36435],{"class":109},[99,48924,9464],{"class":105},[99,48926,32747],{"class":109},[99,48928,301],{"class":158},[99,48930,116],{"class":109},[99,48932,48933],{"class":101,"line":33179},[99,48934,32992],{"class":168},[99,48936,48937],{"class":101,"line":33185},[99,48938,32998],{"class":168},[99,48940,48941,48943,48945],{"class":101,"line":33204},[99,48942,33004],{"class":109},[99,48944,694],{"class":105},[99,48946,33009],{"class":109},[99,48948,48949],{"class":101,"line":33210},[99,48950,33015],{"class":168},[99,48952,48953],{"class":101,"line":33230},[99,48954,33021],{"class":168},[99,48956,48957,48959,48961],{"class":101,"line":33236},[99,48958,33027],{"class":109},[99,48960,694],{"class":105},[99,48962,33009],{"class":109},[99,48964,48965],{"class":101,"line":33242},[99,48966,33037],{"class":168},[99,48968,48969,48971,48973],{"class":101,"line":33252},[99,48970,33043],{"class":109},[99,48972,694],{"class":105},[99,48974,33048],{"class":109},[99,48976,48977],{"class":101,"line":33257},[99,48978,33054],{"class":168},[99,48980,48981,48983,48985],{"class":101,"line":33263},[99,48982,33060],{"class":109},[99,48984,694],{"class":105},[99,48986,33048],{"class":109},[99,48988,48989],{"class":101,"line":33279},[99,48990,2386],{"emptyLinePlaceholder":26},[99,48992,48993],{"class":101,"line":33324},[99,48994,33075],{"class":168},[99,48996,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035],{"class":101,"line":33330},[99,48998,32432],{"class":158},[99,49000,110],{"class":109},[99,49002,3578],{"class":214},[99,49004,32440],{"class":158},[99,49006,33089],{"class":214},[99,49008,1006],{"class":158},[99,49010,33094],{"class":105},[99,49012,1056],{"class":158},[99,49014,33099],{"class":214},[99,49016,1006],{"class":158},[99,49018,33094],{"class":105},[99,49020,1056],{"class":158},[99,49022,3578],{"class":214},[99,49024,33110],{"class":109},[99,49026,642],{"class":105},[99,49028,327],{"class":158},[99,49030,33117],{"class":109},[99,49032,642],{"class":105},[99,49034,327],{"class":158},[99,49036,33124],{"class":109},[99,49038,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077],{"class":101,"line":33336},[99,49040,32432],{"class":158},[99,49042,110],{"class":109},[99,49044,3578],{"class":214},[99,49046,32440],{"class":158},[99,49048,33138],{"class":214},[99,49050,1006],{"class":158},[99,49052,33094],{"class":105},[99,49054,1056],{"class":158},[99,49056,33147],{"class":214},[99,49058,1006],{"class":158},[99,49060,33094],{"class":105},[99,49062,1056],{"class":158},[99,49064,3578],{"class":214},[99,49066,33158],{"class":109},[99,49068,642],{"class":105},[99,49070,327],{"class":158},[99,49072,33165],{"class":109},[99,49074,642],{"class":105},[99,49076,327],{"class":158},[99,49078,33124],{"class":109},[99,49080,49081],{"class":101,"line":33342},[99,49082,2386],{"emptyLinePlaceholder":26},[99,49084,49085],{"class":101,"line":33353},[99,49086,33182],{"class":168},[99,49088,49089,49091,49093,49095,49097,49099,49101],{"class":101,"line":33359},[99,49090,2483],{"class":105},[99,49092,33190],{"class":109},[99,49094,642],{"class":105},[99,49096,327],{"class":158},[99,49098,1050],{"class":109},[99,49100,1070],{"class":105},[99,49102,33201],{"class":109},[99,49104,49105],{"class":101,"line":33365},[99,49106,33207],{"class":168},[99,49108,49109,49111,49113,49115,49117,49119,49121],{"class":101,"line":33371},[99,49110,33213],{"class":109},[99,49112,149],{"class":158},[99,49114,155],{"class":105},[99,49116,33220],{"class":109},[99,49118,642],{"class":105},[99,49120,327],{"class":158},[99,49122,33227],{"class":109},[99,49124,49125],{"class":101,"line":33389},[99,49126,33233],{"class":168},[99,49128,49129],{"class":101,"line":33403},[99,49130,33239],{"class":168},[99,49132,49133,49135,49137],{"class":101,"line":33412},[99,49134,33245],{"class":109},[99,49136,155],{"class":105},[99,49138,32295],{"class":109},[99,49140,49141],{"class":101,"line":33421},[99,49142,2386],{"emptyLinePlaceholder":26},[99,49144,49145],{"class":101,"line":33430},[99,49146,33260],{"class":168},[99,49148,49149,49151,49153,49155,49157],{"class":101,"line":33439},[99,49150,33266],{"class":109},[99,49152,155],{"class":105},[99,49154,33271],{"class":109},[99,49156,642],{"class":105},[99,49158,33276],{"class":109},[99,49160,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195],{"class":101,"line":33445},[99,49162,32432],{"class":158},[99,49164,110],{"class":109},[99,49166,33286],{"class":214},[99,49168,1006],{"class":158},[99,49170,33291],{"class":105},[99,49172,1056],{"class":158},[99,49174,654],{"class":214},[99,49176,1006],{"class":158},[99,49178,33291],{"class":105},[99,49180,1056],{"class":158},[99,49182,33304],{"class":214},[99,49184,33307],{"class":109},[99,49186,33310],{"class":105},[99,49188,1017],{"class":158},[99,49190,33315],{"class":109},[99,49192,438],{"class":105},[99,49194,1017],{"class":158},[99,49196,30478],{"class":109},[99,49198,49199],{"class":101,"line":33451},[99,49200,36714],{"class":168},[99,49202,49203],{"class":101,"line":33459},[99,49204,36719],{"class":168},[99,49206,49207,49209,49211],{"class":101,"line":33464},[99,49208,36724],{"class":109},[99,49210,33348],{"class":214},[99,49212,116],{"class":109},[99,49214,49215],{"class":101,"line":33470},[99,49216,33368],{"class":168},[99,49218,49219,49221,49223,49225,49227,49229],{"class":101,"line":33481},[99,49220,33374],{"class":109},[99,49222,155],{"class":105},[99,49224,33379],{"class":109},[99,49226,33382],{"class":5203},[99,49228,155],{"class":105},[99,49230,1532],{"class":109},[99,49232,49233,49235,49237,49239],{"class":101,"line":33487},[99,49234,33392],{"class":214},[99,49236,969],{"class":109},[99,49238,33397],{"class":158},[99,49240,33400],{"class":109},[99,49242,49243,49245],{"class":101,"line":33507},[99,49244,33406],{"class":214},[99,49246,33409],{"class":109},[99,49248,49249,49251],{"class":101,"line":33513},[99,49250,33415],{"class":214},[99,49252,33418],{"class":109},[99,49254,49255,49257],{"class":101,"line":33519},[99,49256,33424],{"class":214},[99,49258,33427],{"class":109},[99,49260,49261,49263],{"class":101,"line":33525},[99,49262,33433],{"class":214},[99,49264,33436],{"class":109},[99,49266,49267],{"class":101,"line":33542},[99,49268,33442],{"class":109},[99,49270,49271],{"class":101,"line":33548},[99,49272,33448],{"class":168},[99,49274,49275,49277],{"class":101,"line":33554},[99,49276,4076],{"class":105},[99,49278,33456],{"class":109},[99,49280,49281],{"class":101,"line":33560},[99,49282,2386],{"emptyLinePlaceholder":26},[99,49284,49285],{"class":101,"line":33566},[99,49286,33467],{"class":168},[99,49288,49289,49291,49293],{"class":101,"line":33572},[99,49290,31928],{"class":105},[99,49292,33475],{"class":1949},[99,49294,33478],{"class":109},[99,49296,49297],{"class":101,"line":33599},[99,49298,33484],{"class":168},[99,49300,49301,49303,49305,49307,49309,49311,49313,49315],{"class":101,"line":33623},[99,49302,33490],{"class":109},[99,49304,31674],{"class":5203},[99,49306,155],{"class":105},[99,49308,110],{"class":109},[99,49310,608],{"class":158},[99,49312,488],{"class":109},[99,49314,403],{"class":158},[99,49316,30478],{"class":109},[99,49318,49319],{"class":101,"line":33629},[99,49320,33510],{"class":168},[99,49322,49323],{"class":101,"line":33635},[99,49324,33516],{"class":168},[99,49326,49327],{"class":101,"line":33641},[99,49328,33522],{"class":168},[99,49330,49331,49333,49335,49337,49339,49341,49343],{"class":101,"line":33652},[99,49332,31708],{"class":109},[99,49334,327],{"class":158},[99,49336,488],{"class":109},[99,49338,187],{"class":158},[99,49340,488],{"class":109},[99,49342,327],{"class":158},[99,49344,116],{"class":109},[99,49346,49347],{"class":101,"line":33663},[99,49348,33545],{"class":168},[99,49350,49351],{"class":101,"line":33669},[99,49352,33551],{"class":168},[99,49354,49355],{"class":101,"line":33686},[99,49356,33557],{"class":168},[99,49358,49359],{"class":101,"line":33709},[99,49360,33563],{"class":168},[99,49362,49363],{"class":101,"line":33732},[99,49364,33569],{"class":168},[99,49366,49367,49369,49371,49373,49375,49377,49379,49381,49383],{"class":101,"line":33738},[99,49368,33575],{"class":109},[99,49370,33578],{"class":214},[99,49372,33581],{"class":109},[99,49374,33584],{"class":214},[99,49376,488],{"class":109},[99,49378,33589],{"class":5203},[99,49380,155],{"class":105},[99,49382,33594],{"class":214},[99,49384,116],{"class":109},[99,49386,49387,49389,49391,49393,49395,49397,49399,49401,49403],{"class":101,"line":33743},[99,49388,33575],{"class":109},[99,49390,33578],{"class":214},[99,49392,33606],{"class":109},[99,49394,33609],{"class":214},[99,49396,488],{"class":109},[99,49398,33589],{"class":5203},[99,49400,155],{"class":105},[99,49402,33618],{"class":214},[99,49404,116],{"class":109},[99,49406,49407],{"class":101,"line":33752},[99,49408,33626],{"class":168},[99,49410,49411],{"class":101,"line":33762},[99,49412,33632],{"class":109},[99,49414,49415],{"class":101,"line":33768},[99,49416,33638],{"class":168},[99,49418,49419,49421,49423],{"class":101,"line":33773},[99,49420,33644],{"class":109},[99,49422,33647],{"class":214},[99,49424,116],{"class":109},[99,49426,49427,49429,49431],{"class":101,"line":33779},[99,49428,33655],{"class":109},[99,49430,33658],{"class":214},[99,49432,116],{"class":109},[99,49434,49435],{"class":101,"line":33792},[99,49436,33666],{"class":168},[99,49438,49439,49441,49443,49445,49447,49449,49451],{"class":101,"line":33798},[99,49440,31708],{"class":109},[99,49442,327],{"class":158},[99,49444,488],{"class":109},[99,49446,187],{"class":158},[99,49448,488],{"class":109},[99,49450,187],{"class":158},[99,49452,116],{"class":109},[99,49454,49455,49457,49459,49461,49463,49465,49467,49469,49471],{"class":101,"line":33809},[99,49456,33575],{"class":109},[99,49458,33578],{"class":214},[99,49460,33693],{"class":109},[99,49462,33584],{"class":214},[99,49464,488],{"class":109},[99,49466,33589],{"class":5203},[99,49468,155],{"class":105},[99,49470,33704],{"class":214},[99,49472,116],{"class":109},[99,49474,49475,49477,49479,49481,49483,49485,49487,49489,49491],{"class":101,"line":33820},[99,49476,33575],{"class":109},[99,49478,33578],{"class":214},[99,49480,33716],{"class":109},[99,49482,33609],{"class":214},[99,49484,488],{"class":109},[99,49486,33589],{"class":5203},[99,49488,155],{"class":105},[99,49490,33727],{"class":214},[99,49492,116],{"class":109},[99,49494,49495],{"class":101,"line":33839},[99,49496,33735],{"class":168},[99,49498,49500],{"class":101,"line":49499},219,[99,49501,33632],{"class":109},[99,49503,49505,49507,49509],{"class":101,"line":49504},220,[99,49506,33644],{"class":109},[99,49508,33578],{"class":214},[99,49510,116],{"class":109},[99,49512,49514,49516,49518],{"class":101,"line":49513},221,[99,49515,33655],{"class":109},[99,49517,33757],{"class":214},[99,49519,116],{"class":109},[99,49521,49523],{"class":101,"line":49522},222,[99,49524,33765],{"class":109},[99,49526,49528],{"class":101,"line":49527},223,[99,49529,2386],{"emptyLinePlaceholder":26},[99,49531,49533],{"class":101,"line":49532},224,[99,49534,33776],{"class":168},[99,49536,49538,49540,49542,49544,49546],{"class":101,"line":49537},225,[99,49539,1517],{"class":105},[99,49541,31201],{"class":158},[99,49543,2935],{"class":105},[99,49545,31206],{"class":214},[99,49547,3725],{"class":109},[99,49549,49551],{"class":101,"line":49550},226,[99,49552,33795],{"class":168},[99,49554,49556,49558,49560],{"class":101,"line":49555},227,[99,49557,44527],{"class":109},[99,49559,155],{"class":105},[99,49561,44532],{"class":109},[99,49563,49565,49567,49569],{"class":101,"line":49564},228,[99,49566,33812],{"class":109},[99,49568,155],{"class":105},[99,49570,33817],{"class":109},[99,49572,49574,49576,49578,49580,49582,49584,49586],{"class":101,"line":49573},229,[99,49575,33374],{"class":109},[99,49577,155],{"class":105},[99,49579,44549],{"class":109},[99,49581,33830],{"class":5203},[99,49583,155],{"class":105},[99,49585,1017],{"class":158},[99,49587,116],{"class":109},[99,49589,49591],{"class":101,"line":49590},230,[99,49592,33842],{"class":109},[21985,49594,49596],{"id":49595},"_242测试代码","2.4.2.测试代码",[14,49598,49599],{},"使用测试集进行测试与推理",[90,49601,49603],{"className":30359,"code":49602,"language":30361,"meta":21,"style":21},"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",[96,49604,49605,49611,49621,49631,49642,49652,49656,49660,49668,49673,49677,49694,49698,49702,49706,49710,49714,49746,49750,49758,49762,49774,49778,49782,49786,49790,49794,49798,49802,49806,49824,49838,49842,49852,49862,49872,49878,49882,49886,49894,49898,49914,49922,49926,49930,49938,49946,49950,49954,49958,49962,49968,49972,49982,49990,49998,50002,50006,50010,50018,50022,50038,50042,50046,50050,50062,50066,50078,50082,50086,50098,50102,50112,50116,50120,50132,50136,50144,50148,50152,50160,50164,50172,50176,50180,50184,50188,50192,50208,50216,50220,50224,50242,50248,50252,50262,50270,50278,50282,50286,50290,50294,50302,50306,50322,50326,50334,50342],{"__ignoreMap":21},[99,49606,49607,49609],{"class":101,"line":102},[99,49608,30373],{"class":105},[99,49610,30376],{"class":109},[99,49612,49613,49615,49617,49619],{"class":101,"line":22},[99,49614,30373],{"class":105},[99,49616,31396],{"class":109},[99,49618,31364],{"class":105},[99,49620,31401],{"class":109},[99,49622,49623,49625,49627,49629],{"class":101,"line":1165},[99,49624,30718],{"class":105},[99,49626,31379],{"class":109},[99,49628,30373],{"class":105},[99,49630,31384],{"class":109},[99,49632,49633,49635,49637,49639],{"class":101,"line":1180},[99,49634,30718],{"class":105},[99,49636,31349],{"class":109},[99,49638,30373],{"class":105},[99,49640,49641],{"class":109}," ImageFolder\n",[99,49643,49644,49646,49648,49650],{"class":101,"line":1186},[99,49645,30718],{"class":105},[99,49647,31895],{"class":109},[99,49649,30373],{"class":105},[99,49651,44621],{"class":109},[99,49653,49654],{"class":101,"line":1200},[99,49655,2386],{"emptyLinePlaceholder":26},[99,49657,49658],{"class":101,"line":1206},[99,49659,33932],{"class":168},[99,49661,49662,49664,49666],{"class":101,"line":1297},[99,49663,31928],{"class":105},[99,49665,33939],{"class":1949},[99,49667,31934],{"class":109},[99,49669,49670],{"class":101,"line":1303},[99,49671,49672],{"class":168},"   # 导入自己的数据集，并进行数据处理\n",[99,49674,49675],{"class":101,"line":1315},[99,49676,47942],{"class":168},[99,49678,49679,49681,49683,49685,49687,49689,49692],{"class":101,"line":1598},[99,49680,47947],{"class":158},[99,49682,155],{"class":105},[99,49684,780],{"class":105},[99,49686,361],{"class":214},[99,49688,668],{"class":158},[99,49690,49691],{"class":47958},"\u002Fdata\u002Ftest",[99,49693,25122],{"class":214},[99,49695,49696],{"class":101,"line":1603},[99,49697,2386],{"emptyLinePlaceholder":26},[99,49699,49700],{"class":101,"line":1609},[99,49701,47970],{"class":168},[99,49703,49704],{"class":101,"line":1614},[99,49705,47975],{"class":168},[99,49707,49708],{"class":101,"line":1628},[99,49709,47980],{"class":168},[99,49711,49712],{"class":101,"line":1633},[99,49713,47985],{"class":168},[99,49715,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744],{"class":101,"line":1639},[99,49717,47990],{"class":109},[99,49719,155],{"class":105},[99,49721,47995],{"class":109},[99,49723,47998],{"class":158},[99,49725,488],{"class":109},[99,49727,48003],{"class":158},[99,49729,488],{"class":109},[99,49731,48008],{"class":158},[99,49733,48011],{"class":109},[99,49735,48014],{"class":158},[99,49737,488],{"class":109},[99,49739,48019],{"class":158},[99,49741,488],{"class":109},[99,49743,48024],{"class":158},[99,49745,4643],{"class":109},[99,49747,49748],{"class":101,"line":1660},[99,49749,48031],{"class":168},[99,49751,49752,49754,49756],{"class":101,"line":1665},[99,49753,48036],{"class":109},[99,49755,155],{"class":105},[99,49757,48041],{"class":109},[99,49759,49760],{"class":101,"line":1679},[99,49761,48046],{"class":168},[99,49763,49764,49766,49768,49770,49772],{"class":101,"line":1684},[99,49765,48051],{"class":109},[99,49767,31482],{"class":158},[99,49769,488],{"class":109},[99,49771,31482],{"class":158},[99,49773,42603],{"class":109},[99,49775,49776],{"class":101,"line":1713},[99,49777,48064],{"class":168},[99,49779,49780],{"class":101,"line":1718},[99,49781,48069],{"class":109},[99,49783,49784],{"class":101,"line":1735},[99,49785,48074],{"class":109},[99,49787,49788],{"class":101,"line":1740},[99,49789,48079],{"class":168},[99,49791,49792],{"class":101,"line":1745},[99,49793,48084],{"class":168},[99,49795,49796],{"class":101,"line":1750},[99,49797,2386],{"emptyLinePlaceholder":26},[99,49799,49800],{"class":101,"line":1764},[99,49801,48093],{"class":168},[99,49803,49804],{"class":101,"line":1769},[99,49805,48098],{"class":168},[99,49807,49808,49810,49812,49814,49816,49818,49820,49822],{"class":101,"line":2563},[99,49809,33946],{"class":109},[99,49811,155],{"class":105},[99,49813,48107],{"class":109},[99,49815,48110],{"class":158},[99,49817,488],{"class":109},[99,49819,48115],{"class":5203},[99,49821,155],{"class":105},[99,49823,48120],{"class":109},[99,49825,49826,49828,49830,49832,49834,49836],{"class":101,"line":2577},[99,49827,34003],{"class":109},[99,49829,155],{"class":105},[99,49831,31515],{"class":109},[99,49833,31518],{"class":5203},[99,49835,155],{"class":105},[99,49837,34014],{"class":109},[99,49839,49840],{"class":101,"line":2585},[99,49841,34019],{"class":168},[99,49843,49844,49846,49848,49850],{"class":101,"line":2590},[99,49845,34024],{"class":5203},[99,49847,155],{"class":105},[99,49849,327],{"class":158},[99,49851,31447],{"class":109},[99,49853,49854,49856,49858,49860],{"class":101,"line":2596},[99,49855,34035],{"class":5203},[99,49857,155],{"class":105},[99,49859,31457],{"class":158},[99,49861,31447],{"class":109},[99,49863,49864,49866,49868,49870],{"class":101,"line":2602},[99,49865,34046],{"class":5203},[99,49867,155],{"class":105},[99,49869,301],{"class":158},[99,49871,116],{"class":109},[99,49873,49874,49876],{"class":101,"line":2607},[99,49875,4076],{"class":105},[99,49877,34059],{"class":109},[99,49879,49880],{"class":101,"line":7935},[99,49881,2386],{"emptyLinePlaceholder":26},[99,49883,49884],{"class":101,"line":7959},[99,49885,34068],{"class":168},[99,49887,49888,49890,49892],{"class":101,"line":7964},[99,49889,31928],{"class":105},[99,49891,34075],{"class":1949},[99,49893,34078],{"class":109},[99,49895,49896],{"class":101,"line":7970},[99,49897,34083],{"class":168},[99,49899,49900,49902,49904,49906,49908,49910,49912],{"class":101,"line":7997},[99,49901,31218],{"class":109},[99,49903,155],{"class":105},[99,49905,31225],{"class":214},[99,49907,1690],{"class":105},[99,49909,31230],{"class":109},[99,49911,1687],{"class":105},[99,49913,34100],{"class":214},[99,49915,49916,49918,49920],{"class":101,"line":8002},[99,49917,31270],{"class":109},[99,49919,155],{"class":105},[99,49921,32270],{"class":109},[99,49923,49924],{"class":101,"line":8008},[99,49925,2386],{"emptyLinePlaceholder":26},[99,49927,49928],{"class":101,"line":8020},[99,49929,34117],{"class":168},[99,49931,49932,49934,49936],{"class":101,"line":8032},[99,49933,34122],{"class":109},[99,49935,155],{"class":105},[99,49937,32323],{"class":158},[99,49939,49940,49942,49944],{"class":101,"line":8044},[99,49941,34131],{"class":109},[99,49943,155],{"class":105},[99,49945,3071],{"class":158},[99,49947,49948],{"class":101,"line":9703},[99,49949,2386],{"emptyLinePlaceholder":26},[99,49951,49952],{"class":101,"line":9728},[99,49953,34144],{"class":168},[99,49955,49956],{"class":101,"line":9751},[99,49957,34149],{"class":168},[99,49959,49960],{"class":101,"line":9775},[99,49961,34154],{"class":168},[99,49963,49964,49966],{"class":101,"line":9780},[99,49965,34159],{"class":105},[99,49967,32865],{"class":109},[99,49969,49970],{"class":101,"line":9785},[99,49971,34166],{"class":168},[99,49973,49974,49976,49978,49980],{"class":101,"line":9790},[99,49975,3389],{"class":105},[99,49977,34173],{"class":109},[99,49979,26032],{"class":105},[99,49981,34178],{"class":109},[99,49983,49984,49986,49988],{"class":101,"line":9799},[99,49985,34183],{"class":109},[99,49987,155],{"class":105},[99,49989,34188],{"class":109},[99,49991,49992,49994,49996],{"class":101,"line":9804},[99,49993,34193],{"class":109},[99,49995,155],{"class":105},[99,49997,34198],{"class":109},[99,49999,50000],{"class":101,"line":9810},[99,50001,34203],{"class":168},[99,50003,50004],{"class":101,"line":9831},[99,50005,32856],{"class":109},[99,50007,50008],{"class":101,"line":9837},[99,50009,34212],{"class":168},[99,50011,50012,50014,50016],{"class":101,"line":9851},[99,50013,32641],{"class":109},[99,50015,155],{"class":105},[99,50017,34221],{"class":109},[99,50019,50020],{"class":101,"line":9857},[99,50021,34226],{"class":168},[99,50023,50024,50026,50028,50030,50032,50034,50036],{"class":101,"line":9884},[99,50025,32658],{"class":109},[99,50027,155],{"class":105},[99,50029,32663],{"class":109},[99,50031,32666],{"class":5203},[99,50033,155],{"class":105},[99,50035,327],{"class":158},[99,50037,116],{"class":109},[99,50039,50040],{"class":101,"line":9893},[99,50041,34247],{"class":168},[99,50043,50044],{"class":101,"line":9899},[99,50045,34252],{"class":168},[99,50047,50048],{"class":101,"line":9907},[99,50049,34257],{"class":168},[99,50051,50052,50054,50056,50058,50060],{"class":101,"line":9912},[99,50053,34262],{"class":109},[99,50055,9464],{"class":105},[99,50057,32768],{"class":109},[99,50059,2935],{"class":105},[99,50061,34271],{"class":109},[99,50063,50064],{"class":101,"line":16591},[99,50065,34276],{"class":168},[99,50067,50068,50070,50072,50074,50076],{"class":101,"line":16597},[99,50069,34281],{"class":109},[99,50071,9464],{"class":105},[99,50073,34286],{"class":109},[99,50075,301],{"class":158},[99,50077,116],{"class":109},[99,50079,50080],{"class":101,"line":16620},[99,50081,2386],{"emptyLinePlaceholder":26},[99,50083,50084],{"class":101,"line":16626},[99,50085,34299],{"class":168},[99,50087,50088,50090,50092,50094,50096],{"class":101,"line":16649},[99,50089,34304],{"class":109},[99,50091,155],{"class":105},[99,50093,34309],{"class":109},[99,50095,694],{"class":105},[99,50097,34314],{"class":109},[99,50099,50100],{"class":101,"line":16663},[99,50101,34319],{"class":168},[99,50103,50104,50106,50108,50110],{"class":101,"line":16683},[99,50105,32432],{"class":158},[99,50107,110],{"class":109},[99,50109,34328],{"class":214},[99,50111,34331],{"class":109},[99,50113,50114],{"class":101,"line":16689},[99,50115,2386],{"emptyLinePlaceholder":26},[99,50117,50118],{"class":101,"line":16700},[99,50119,34340],{"class":168},[99,50121,50122,50124,50126,50128,50130],{"class":101,"line":16723},[99,50123,1517],{"class":105},[99,50125,31201],{"class":158},[99,50127,2935],{"class":105},[99,50129,31206],{"class":214},[99,50131,3725],{"class":109},[99,50133,50134],{"class":101,"line":16745},[99,50135,34357],{"class":168},[99,50137,50138,50140,50142],{"class":101,"line":16750},[99,50139,31270],{"class":109},[99,50141,155],{"class":105},[99,50143,44532],{"class":109},[99,50145,50146],{"class":101,"line":16756},[99,50147,34370],{"class":168},[99,50149,50150],{"class":101,"line":16770},[99,50151,34375],{"class":168},[99,50153,50154,50156,50158],{"class":101,"line":16783},[99,50155,34380],{"class":109},[99,50157,34383],{"class":214},[99,50159,30478],{"class":109},[99,50161,50162],{"class":101,"line":16788},[99,50163,34390],{"class":168},[99,50165,50166,50168,50170],{"class":101,"line":16802},[99,50167,34003],{"class":109},[99,50169,155],{"class":105},[99,50171,34399],{"class":109},[99,50173,50174],{"class":101,"line":16807},[99,50175,34404],{"class":168},[99,50177,50178],{"class":101,"line":16813},[99,50179,34409],{"class":109},[99,50181,50182],{"class":101,"line":16818},[99,50183,2386],{"emptyLinePlaceholder":26},[99,50185,50186],{"class":101,"line":16832},[99,50187,34418],{"class":168},[99,50189,50190],{"class":101,"line":16837},[99,50191,34423],{"class":168},[99,50193,50194,50196,50198,50200,50202,50204,50206],{"class":101,"line":16842},[99,50195,31218],{"class":109},[99,50197,155],{"class":105},[99,50199,31225],{"class":214},[99,50201,1690],{"class":105},[99,50203,31230],{"class":109},[99,50205,1687],{"class":105},[99,50207,34100],{"class":214},[99,50209,50210,50212,50214],{"class":101,"line":16856},[99,50211,31270],{"class":109},[99,50213,155],{"class":105},[99,50215,32270],{"class":109},[99,50217,50218],{"class":101,"line":16868},[99,50219,34452],{"class":168},[99,50221,50222],{"class":101,"line":16873},[99,50223,34457],{"class":168},[99,50225,50226,50228,50230,50232,50235,50237,50240],{"class":101,"line":16886},[99,50227,34462],{"class":109},[99,50229,155],{"class":105},[99,50231,1000],{"class":109},[99,50233,50234],{"class":214},"'猫'",[99,50236,488],{"class":109},[99,50238,50239],{"class":214},"'狗'",[99,50241,33227],{"class":109},[99,50243,50244,50246],{"class":101,"line":16891},[99,50245,34159],{"class":105},[99,50247,32865],{"class":109},[99,50249,50250],{"class":101,"line":16896},[99,50251,34527],{"class":168},[99,50253,50254,50256,50258,50260],{"class":101,"line":16901},[99,50255,3389],{"class":105},[99,50257,34534],{"class":109},[99,50259,26032],{"class":105},[99,50261,34178],{"class":109},[99,50263,50264,50266,50268],{"class":101,"line":16914},[99,50265,32591],{"class":109},[99,50267,155],{"class":105},[99,50269,32596],{"class":109},[99,50271,50272,50274,50276],{"class":101,"line":16919},[99,50273,32606],{"class":109},[99,50275,155],{"class":105},[99,50277,32611],{"class":109},[99,50279,50280],{"class":101,"line":32614},[99,50281,2386],{"emptyLinePlaceholder":26},[99,50283,50284],{"class":101,"line":32620},[99,50285,34563],{"class":168},[99,50287,50288],{"class":101,"line":32626},[99,50289,32856],{"class":109},[99,50291,50292],{"class":101,"line":32632},[99,50293,34572],{"class":168},[99,50295,50296,50298,50300],{"class":101,"line":32638},[99,50297,32641],{"class":109},[99,50299,155],{"class":105},[99,50301,32646],{"class":109},[99,50303,50304],{"class":101,"line":32649},[99,50305,34585],{"class":168},[99,50307,50308,50310,50312,50314,50316,50318,50320],{"class":101,"line":32655},[99,50309,32658],{"class":109},[99,50311,155],{"class":105},[99,50313,32663],{"class":109},[99,50315,32666],{"class":5203},[99,50317,155],{"class":105},[99,50319,327],{"class":158},[99,50321,116],{"class":109},[99,50323,50324],{"class":101,"line":32675},[99,50325,34606],{"class":168},[99,50327,50328,50330,50332],{"class":101,"line":32681},[99,50329,34611],{"class":109},[99,50331,155],{"class":105},[99,50333,34616],{"class":109},[99,50335,50336,50338,50340],{"class":101,"line":32692},[99,50337,34621],{"class":109},[99,50339,155],{"class":105},[99,50341,34626],{"class":109},[99,50343,50344,50346,50348,50350,50352,50354,50356,50358],{"class":101,"line":32698},[99,50345,34631],{"class":158},[99,50347,110],{"class":109},[99,50349,34636],{"class":214},[99,50351,34639],{"class":109},[99,50353,34642],{"class":214},[99,50355,488],{"class":109},[99,50357,34647],{"class":214},[99,50359,34650],{"class":109},[5113,50361,50362],{},"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":21,"searchDepth":22,"depth":22,"links":50364},[50365,50366,50367,50368],{"id":30572,"depth":1165,"text":30573},{"id":37820,"depth":1165,"text":37821},{"id":41253,"depth":1165,"text":41254},{"id":45262,"depth":1165,"text":45263},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30564,"description":23364},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50375,"title":50376,"body":50377,"description":23364,"extension":24,"meta":50384,"navigation":26,"path":50385,"seo":50386,"stem":50387,"__hash__":50388},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50378,"toc":50382},[50379],[10,50380,50376],{"id":50381},"_3yolo模型学习",{"title":21,"searchDepth":22,"depth":22,"links":50383},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50376,"description":23364},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50390,"title":50391,"body":50392,"description":50399,"extension":24,"meta":50400,"navigation":26,"path":50402,"seo":50403,"stem":50404,"__hash__":50405},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50393,"toc":50397},[50394],[14,50395,50396],{},"yolo模型还未补充",{"title":21,"searchDepth":22,"depth":22,"links":50398},[],"深度学习学习",{"category":50401},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50391,"description":50399},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50407,"title":50408,"body":50409,"description":23364,"extension":24,"meta":50434,"navigation":26,"path":50435,"seo":50436,"stem":50437,"__hash__":50438},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50410,"toc":50432},[50411,50414,50417,50422,50429],[10,50412,50408],{"id":50413},"_1工具",[14,50415,50416],{},"提示错误插件：有问题会提前报错",[14,50418,50419],{},[1448,50420],{"alt":21,"src":50421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50423,50424],{},[348,50425,50428],{"href":50426,"rel":50427},"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",[23853],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50430,50431],{},"alt键加上下箭头可以实现语句的移动",{"title":21,"searchDepth":22,"depth":22,"links":50433},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50408,"description":23364},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50440,"title":50441,"body":50442,"description":23364,"extension":24,"meta":53306,"navigation":26,"path":53307,"seo":53308,"stem":53309,"__hash__":53310},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50443,"toc":53257},[50444,50447,50451,50455,50460,50463,50468,50472,50479,50484,50491,50496,50503,50508,50512,50517,50520,50524,50529,50533,50538,50541,50544,50547,50550,50553,50556,50559,50562,50567,50572,50577,50581,50584,50587,50591,50596,50599,50607,50612,50629,50637,50642,50647,50652,50657,50662,50665,50670,50675,50679,50688,50693,50698,50702,50707,50710,50714,50719,50727,50732,50737,50740,50745,50750,50755,50758,50761,50764,50769,50774,50777,50782,50785,50790,50793,50796,50799,50804,50807,50810,50825,50830,50835,50840,50843,50846,50849,50863,50866,50871,50876,50879,50882,50885,50888,50891,50894,50897,50901,50905,50910,50914,50917,50922,50927,50930,50935,50938,50942,50947,50950,50953,50956,50959,50962,50965,50968,50971,50974,50978,50983,50988,50993,50996,50999,51003,51008,51011,51015,51018,51021,51026,51029,51032,51036,51040,51043,51048,51053,51056,51085,51090,51095,51100,51105,51109,51114,51118,51123,51126,51130,51134,51139,51143,51148,51153,51157,51162,51165,51167,51170,51175,51179,51184,51188,51192,51197,51202,51207,51212,51216,51221,51226,51231,51234,51237,51242,51245,51250,51255,51260,51265,51269,52076,52080,52423,52428,52431,52434,52437,52440,52443,52446,52449,52452,52454,52457,52459,52462,52466,52471,52474,52477,52480,52484,52489,52494,52514,52517,52521,52526,52531,52548,52552,52581,52585,52607,52609,52648,52656,52662,52666,52669,52672,52677,52682,52685,52688,52691,52696,52701,52704,52707,52710,52713,52716,52719,52722,52725,52728,52731,52734,52736,52739,52742,52745,52748,52751,52754,52757,52760,52764,52769,52772,52777,52780,52783,52786,52789,52792,52795,52798,52800,52803,52806,52809,52812,52815,52818,52822,52825,52834,52837,52842,52845,52850,52853,52856,52859,52862,52865,52868,52871,52875,52879,52882,52885,52890,52895,52900,52904,52909,52914,52917,52920,52923,52926,52929,52934,52937,52942,52944,52949,52952,52956,52961,52964,52967,52972,52976,52979,52984,52987,52990,53019,53024,53027,53030,53033,53036,53039,53043,53046,53132,53136,53139,53144,53149,53156,53159,53162,53165,53168,53171,53176,53181,53184,53187,53190,53193,53196,53199,53202,53205,53208,53210,53213,53217,53222,53227,53232,53235,53240,53245,53248,53251,53254],[10,50445,50441],{"id":50446},"_2基础语法",[41,50448,50450],{"id":50449},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[70,50452,50454],{"id":50453},"_211-js组成","2.1.1 js组成",[53,50456,50457],{},[56,50458,50459],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50461,50462],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[53,50464,50465],{"start":22},[56,50466,50467],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[70,50469,50471],{"id":50470},"_212-js书写位置","2.1.2 js书写位置",[53,50473,50474],{},[56,50475,50476],{},[259,50477,50478],{},"内部 JavaScript",[14,50480,50481],{},[1448,50482],{"alt":21,"src":50483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[53,50485,50486],{"start":22},[56,50487,50488],{},[259,50489,50490],{},"外部 JavaScript",[14,50492,50493],{},[1448,50494],{"alt":21,"src":50495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[53,50497,50498],{"start":1165},[56,50499,50500],{},[259,50501,50502],{},"内联 JavaScript",[14,50504,50505],{},[1448,50506],{"alt":21,"src":50507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[70,50509,50511],{"id":50510},"_213-javascript注释","2.1.3 JavaScript注释",[14,50513,50514],{},[1448,50515],{"alt":21,"src":50516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50518,50519],{},"alt+shift+a一定要记住！",[70,50521,50523],{"id":50522},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50525,50526],{},[1448,50527],{"alt":21,"src":50528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[70,50530,50532],{"id":50531},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[53,50534,50535],{},[56,50536,50537],{},"输出语法：",[14,50539,50540],{},"①document.write('要出的内容')",[14,50542,50543],{},"向body内输出内容；",[14,50545,50546],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50548,50549],{},"②alert('要出的内容')",[14,50551,50552],{},"页面弹出警告对话框",[14,50554,50555],{},"③console.log('控制台打印')",[14,50557,50558],{},"控制台输出语法，程序员调试使用",[14,50560,50561],{},"输入log就行，自动生成：",[14,50563,50564],{},[1448,50565],{"alt":21,"src":50566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[53,50568,50569],{"start":22},[56,50570,50571],{},"输入语法：",[14,50573,50574],{},[1448,50575],{"alt":21,"src":50576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[70,50578,50580],{"id":50579},"_2116-字面量","21.1.6 字面量",[14,50582,50583],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50585,50586],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[41,50588,50590],{"id":50589},"_22-变量","2.2 变量",[53,50592,50593],{},[56,50594,50595],{},"变量声明",[14,50597,50598],{},"let 变量名",[1117,50600,50601,50604],{},[56,50602,50603],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[56,50605,50606],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[53,50608,50609],{"start":22},[56,50610,50611],{},"变量赋值",[90,50613,50617],{"className":50614,"code":50615,"language":50616,"meta":21,"style":21},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[96,50618,50619,50624],{"__ignoreMap":21},[99,50620,50621],{"class":101,"line":102},[99,50622,50623],{"class":109},"let age\n",[99,50625,50626],{"class":101,"line":22},[99,50627,50628],{"class":109},"age=18\n",[53,50630,50631,50634],{"start":1165},[56,50632,50633],{},"连这些（变量的初始化）：let age=18",[56,50635,50636],{},"更新变量",[14,50638,50639],{},[1448,50640],{"alt":21,"src":50641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[53,50643,50644],{"start":1186},[56,50645,50646],{},"声明多个变量",[14,50648,50649],{},[1448,50650],{"alt":21,"src":50651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[53,50653,50654],{"start":1200},[56,50655,50656],{},"变量命名规则与规范",[14,50658,50659],{},[1448,50660],{"alt":21,"src":50661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50663,50664],{},"遵守小驼峰！",[53,50666,50667],{"start":1206},[56,50668,50669],{},"变量拓展-let和var的区别",[14,50671,50672],{},[1448,50673],{"alt":21,"src":50674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[41,50676,50678],{"id":50677},"_23-数组","2.3 数组",[90,50680,50682],{"className":50614,"code":50681,"language":50616,"meta":21,"style":21},"let arr = []\n",[96,50683,50684],{"__ignoreMap":21},[99,50685,50686],{"class":101,"line":102},[99,50687,50681],{"class":109},[14,50689,50690],{},[1448,50691],{"alt":21,"src":50692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50694,50695],{},[1448,50696],{"alt":21,"src":50697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[41,50699,50701],{"id":50700},"_24-常量","2.4 常量",[14,50703,50704],{},[1448,50705],{"alt":21,"src":50706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50708,50709],{},"const — 类似于 let ，但是变量的值无法被修改",[41,50711,50713],{"id":50712},"_25-数据类型","2.5 数据类型",[14,50715,50716],{},[1448,50717],{"alt":21,"src":50718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[53,50720,50721,50724],{},[56,50722,50723],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[56,50725,50726],{},"算数运算符：",[14,50728,50729],{},[1448,50730],{"alt":21,"src":50731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[53,50733,50734],{"start":1165},[56,50735,50736],{},"数字类型（Number）",[14,50738,50739],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50741,50742],{},[1448,50743],{"alt":21,"src":50744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[53,50746,50747],{"start":1180},[56,50748,50749],{},"字符串类型（string）",[14,50751,50752],{},[1448,50753],{"alt":21,"src":50754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50756,50757],{},"反引号也是可以使用的",[14,50759,50760],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50762,50763],{},"例如：document.write(\"我今年\"+age+\"岁\")",[53,50765,50766],{"start":1186},[56,50767,50768],{},"模板字符串",[14,50770,50771],{},[1448,50772],{"alt":21,"src":50773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50775,50776],{},"类似于python的字符串格式化",[53,50778,50779],{"start":1200},[56,50780,50781],{},"布尔类型",[14,50783,50784],{},"true 和 false",[53,50786,50787],{"start":1206},[56,50788,50789],{},"未定义类型（underfined）",[14,50791,50792],{},"表示没有赋值",[14,50794,50795],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50797,50798],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[53,50800,50801],{"start":1297},[56,50802,50803],{},"null（空类型）",[14,50805,50806],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50808,50809],{},"赋值了，但是内容为空",[90,50811,50813],{"className":50614,"code":50812,"language":50616,"meta":21,"style":21},"typeof null\n输出的是'object'，是一个对象数据类型\n",[96,50814,50815,50820],{"__ignoreMap":21},[99,50816,50817],{"class":101,"line":102},[99,50818,50819],{"class":109},"typeof null\n",[99,50821,50822],{"class":101,"line":22},[99,50823,50824],{"class":109},"输出的是'object'，是一个对象数据类型\n",[53,50826,50827],{"start":1303},[56,50828,50829],{},"控制台检测数据类型",[14,50831,50832],{},[1448,50833],{"alt":21,"src":50834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[53,50836,50837],{"start":1315},[56,50838,50839],{},"类型转换",[14,50841,50842],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50844,50845],{},"转换方式：隐式转换和显示转换",[14,50847,50848],{},"①隐式转换",[1117,50850,50851,50854,50857,50860],{},[56,50852,50853],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[56,50855,50856],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[56,50858,50859],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[56,50861,50862],{},"任何数据和字符串相加结果都是字符串",[14,50864,50865],{},"②显示转换",[14,50867,50868],{},[1448,50869],{"alt":21,"src":50870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50872,50873],{},[1448,50874],{"alt":21,"src":50875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50877,50878],{},"在输入的时候要用好隐式转换，简单写起来",[14,50880,50881],{},"let num = +prompt(’请输入数字：‘)",[14,50883,50884],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50886,50887],{},"console.log(parseInt('12.333px'))",[14,50889,50890],{},"输出为：12",[14,50892,50893],{},"console.log(parseInt('a'a'a12.333px'))",[14,50895,50896],{},"输出：NaN",[41,50898,50900],{"id":50899},"_26-运算符","2.6 运算符",[70,50902,50904],{"id":50903},"_261-赋值运算符","2.6.1 赋值运算符",[14,50906,50907],{},[1448,50908],{"alt":21,"src":50909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[70,50911,50913],{"id":50912},"_262-一元运算符","2.6.2 一元运算符",[14,50915,50916],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50918,50919],{},[1448,50920],{"alt":21,"src":50921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50923,50924],{},[1448,50925],{"alt":21,"src":50926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50928,50929],{},"两者的区别：",[14,50931,50932],{},[1448,50933],{"alt":21,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50936,50937],{},"前置先自加；后置后加，代码执行完之后再加",[70,50939,50941],{"id":50940},"_263-比较运算符","2.6.3 比较运算符",[14,50943,50944],{},[1448,50945],{"alt":21,"src":50946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50948,50949],{},"比较运算符也有隐式转换",[14,50951,50952],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50954,50955],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50957,50958],{},"要使用三等，开发的时候",[14,50960,50961],{},"NaN不等于任何人，包括它自己",[14,50963,50964],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50966,50967],{},"7\u002F10=0.7",[14,50969,50970],{},"最后：0.5+0.2=0.7",[14,50972,50973],{},"字符串比较，比较的是字符对应的ASCII码",[70,50975,50977],{"id":50976},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50979,50980],{},[1448,50981],{"alt":21,"src":50982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,50984,50985],{},[1448,50986],{"alt":21,"src":50987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,50989,50990],{},[1448,50991],{"alt":21,"src":50992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,50994,50995],{},"上述题目选D",[14,50997,50998],{},"与真2假1；或真1假2",[70,51000,51002],{"id":51001},"_265-运算符优先级","2.6.5 运算符优先级",[14,51004,51005],{},[1448,51006],{"alt":21,"src":51007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51009,51010],{},"先算逻辑与，后算逻辑或",[41,51012,51014],{"id":51013},"_27-语句","2.7 语句",[14,51016,51017],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51019,51020],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51022,51023],{},[1448,51024],{"alt":21,"src":51025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51027,51028],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51030,51031],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[70,51033,51035],{"id":51034},"_271-分支语句","2.7.1 分支语句",[21985,51037,51039],{"id":51038},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51041,51042],{},"if语句单行简单的话，可以不写{}，写在一行就行",[53,51044,51045],{},[56,51046,51047],{},"单分支语句",[14,51049,51050],{},[1448,51051],{"alt":21,"src":51052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51054,51055],{},"除了0，所有数字都为真",[90,51057,51059],{"className":50614,"code":51058,"language":50616,"meta":21,"style":21},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[96,51060,51061,51066,51071,51076,51080],{"__ignoreMap":21},[99,51062,51063],{"class":101,"line":102},[99,51064,51065],{"class":109},"if（0) {\n",[99,51067,51068],{"class":101,"line":22},[99,51069,51070],{"class":109},"    let a=1\n",[99,51072,51073],{"class":101,"line":1165},[99,51074,51075],{"class":109},"    alert(typeof a)\n",[99,51077,51078],{"class":101,"line":1180},[99,51079,1551],{"class":109},[99,51081,51082],{"class":101,"line":1186},[99,51083,51084],{"class":109},"不输出，括号为假\n",[53,51086,51087],{"start":22},[56,51088,51089],{},"双分支语句",[14,51091,51092],{},[1448,51093],{"alt":21,"src":51094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[53,51096,51097],{"start":1165},[56,51098,51099],{},"多分支语句",[14,51101,51102],{},[1448,51103],{"alt":21,"src":51104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21985,51106,51108],{"id":51107},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51110,51111],{},[1448,51112],{"alt":21,"src":51113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21985,51115,51117],{"id":51116},"_2713-switch语句","2.7.1.3 switch语句",[14,51119,51120],{},[1448,51121],{"alt":21,"src":51122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51124,51125],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[70,51127,51129],{"id":51128},"_272-循环语句","2.7.2 循环语句",[21985,51131,51133],{"id":51132},"_2721-断点演示","2.7.2.1 断点演示",[14,51135,51136],{},[1448,51137],{"alt":21,"src":51138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21985,51140,51142],{"id":51141},"_2722-while循环","2.7.2.2 while循环",[14,51144,51145],{},[1448,51146],{"alt":21,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51149,51150],{},[1448,51151],{"alt":21,"src":51152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21985,51154,51156],{"id":51155},"_2723-for循环","2.7.2.3 for循环",[14,51158,51159],{},[1448,51160],{"alt":21,"src":51161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51163,51164],{},"for(;;) {",[14,51166,1056],{},[14,51168,51169],{},"表示无限循环",[14,51171,51172],{},[1448,51173],{"alt":21,"src":51174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21985,51176,51178],{"id":51177},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51180,51181],{},[1448,51182],{"alt":21,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[41,51185,51187],{"id":51186},"_28-数组","2.8 数组",[70,51189,51191],{"id":51190},"_281-基础认识","2.8.1 基础认识",[14,51193,51194],{},[1448,51195],{"alt":21,"src":51196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51198,51199],{},[1448,51200],{"alt":21,"src":51201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51203,51204],{},[1448,51205],{"alt":21,"src":51206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51208,51209],{},[1448,51210],{"alt":21,"src":51211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[70,51213,51215],{"id":51214},"_282-操作数组","2.8.2 操作数组",[14,51217,51218],{},[1448,51219],{"alt":21,"src":51220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[53,51222,51223],{},[56,51224,51225],{},"添加元素",[14,51227,51228],{},[1448,51229],{"alt":21,"src":51230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51232,51233],{},"console.log(arr.push('green'))",[14,51235,51236],{},"输出结果：为新数组的长度",[14,51238,51239],{},[1448,51240],{"alt":21,"src":51241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51243,51244],{},"push用的非常多，一定要记住",[53,51246,51247],{},[56,51248,51249],{},"删除元素",[14,51251,51252],{},[1448,51253],{"alt":21,"src":51254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51256,51257],{},[1448,51258],{"alt":21,"src":51259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51261,51262],{},[1448,51263],{"alt":21,"src":51264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[70,51266,51268],{"id":51267},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[90,51270,51272],{"className":50614,"code":51271,"language":50616,"meta":21,"style":21},"\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",[96,51273,51274,51289,51305,51309,51318,51336,51360,51382,51396,51404,51411,51423,51434,51438,51442,51449,51461,51476,51489,51508,51525,51540,51552,51564,51576,51580,51584,51595,51605,51617,51629,51641,51652,51656,51660,51672,51676,51690,51694,51698,51709,51723,51735,51749,51753,51762,51771,51775,51784,51788,51797,51802,51807,51820,51848,51853,51858,51883,51888,51892,51897,51902,51917,51921,51926,51956,51968,51984,52000,52014,52019,52026,52030,52035,52048,52056,52064,52068],{"__ignoreMap":21},[99,51275,51276,51279,51283,51286],{"class":101,"line":102},[99,51277,51278],{"class":109},"\u003C!",[99,51280,51282],{"class":51281},"s9eBZ","DOCTYPE",[99,51284,51285],{"class":1949}," html",[99,51287,51288],{"class":109},">\n",[99,51290,51291,51293,51295,51298,51300,51303],{"class":101,"line":22},[99,51292,1020],{"class":109},[99,51294,50616],{"class":51281},[99,51296,51297],{"class":1949}," lang",[99,51299,155],{"class":109},[99,51301,51302],{"class":214},"\"en\"",[99,51304,51288],{"class":109},[99,51306,51307],{"class":101,"line":1165},[99,51308,2386],{"emptyLinePlaceholder":26},[99,51310,51311,51313,51316],{"class":101,"line":1180},[99,51312,1020],{"class":109},[99,51314,51315],{"class":51281},"head",[99,51317,51288],{"class":109},[99,51319,51320,51323,51326,51329,51331,51334],{"class":101,"line":1186},[99,51321,51322],{"class":109},"    \u003C",[99,51324,51325],{"class":51281},"meta",[99,51327,51328],{"class":1949}," charset",[99,51330,155],{"class":109},[99,51332,51333],{"class":214},"\"UTF-8\"",[99,51335,51288],{"class":109},[99,51337,51338,51340,51342,51345,51347,51350,51353,51355,51358],{"class":101,"line":1200},[99,51339,51322],{"class":109},[99,51341,51325],{"class":51281},[99,51343,51344],{"class":1949}," http-equiv",[99,51346,155],{"class":109},[99,51348,51349],{"class":214},"\"X-UA-Compatible\"",[99,51351,51352],{"class":1949}," content",[99,51354,155],{"class":109},[99,51356,51357],{"class":214},"\"IE=edge\"",[99,51359,51288],{"class":109},[99,51361,51362,51364,51366,51368,51370,51373,51375,51377,51380],{"class":101,"line":1206},[99,51363,51322],{"class":109},[99,51365,51325],{"class":51281},[99,51367,14907],{"class":1949},[99,51369,155],{"class":109},[99,51371,51372],{"class":214},"\"viewport\"",[99,51374,51352],{"class":1949},[99,51376,155],{"class":109},[99,51378,51379],{"class":214},"\"width=device-width, initial-scale=1.0\"",[99,51381,51288],{"class":109},[99,51383,51384,51386,51389,51392,51394],{"class":101,"line":1297},[99,51385,51322],{"class":109},[99,51387,51388],{"class":51281},"title",[99,51390,51391],{"class":109},">Document\u003C\u002F",[99,51393,51388],{"class":51281},[99,51395,51288],{"class":109},[99,51397,51398,51400,51402],{"class":101,"line":1303},[99,51399,51322],{"class":109},[99,51401,5113],{"class":51281},[99,51403,51288],{"class":109},[99,51405,51406,51409],{"class":101,"line":1315},[99,51407,51408],{"class":51281},"        *",[99,51410,15559],{"class":109},[99,51412,51413,51416,51419,51421],{"class":101,"line":1598},[99,51414,51415],{"class":158},"            margin",[99,51417,51418],{"class":109},": ",[99,51420,301],{"class":158},[99,51422,1276],{"class":109},[99,51424,51425,51428,51430,51432],{"class":101,"line":1603},[99,51426,51427],{"class":158},"            padding",[99,51429,51418],{"class":109},[99,51431,301],{"class":158},[99,51433,1276],{"class":109},[99,51435,51436],{"class":101,"line":1609},[99,51437,2515],{"class":109},[99,51439,51440],{"class":101,"line":1614},[99,51441,2386],{"emptyLinePlaceholder":26},[99,51443,51444,51447],{"class":101,"line":1628},[99,51445,51446],{"class":1949},"        .box",[99,51448,15559],{"class":109},[99,51450,51451,51454,51456,51459],{"class":101,"line":1633},[99,51452,51453],{"class":158},"            display",[99,51455,51418],{"class":109},[99,51457,51458],{"class":158},"flex",[99,51460,1276],{"class":109},[99,51462,51463,51466,51468,51471,51474],{"class":101,"line":1639},[99,51464,51465],{"class":158},"            width",[99,51467,51418],{"class":109},[99,51469,51470],{"class":158},"700",[99,51472,51473],{"class":105},"px",[99,51475,1276],{"class":109},[99,51477,51478,51481,51483,51485,51487],{"class":101,"line":1660},[99,51479,51480],{"class":158},"            height",[99,51482,51418],{"class":109},[99,51484,3959],{"class":158},[99,51486,51473],{"class":105},[99,51488,1276],{"class":109},[99,51490,51491,51494,51496,51498,51500,51503,51506],{"class":101,"line":1665},[99,51492,51493],{"class":158},"            border-left",[99,51495,51418],{"class":109},[99,51497,327],{"class":158},[99,51499,51473],{"class":105},[99,51501,51502],{"class":158}," solid",[99,51504,51505],{"class":158}," pink",[99,51507,1276],{"class":109},[99,51509,51510,51513,51515,51517,51519,51521,51523],{"class":101,"line":1679},[99,51511,51512],{"class":158},"            border-bottom",[99,51514,51418],{"class":109},[99,51516,327],{"class":158},[99,51518,51473],{"class":105},[99,51520,51502],{"class":158},[99,51522,51505],{"class":158},[99,51524,1276],{"class":109},[99,51526,51527,51529,51531,51533,51535,51538],{"class":101,"line":1684},[99,51528,51415],{"class":158},[99,51530,51418],{"class":109},[99,51532,766],{"class":158},[99,51534,51473],{"class":105},[99,51536,51537],{"class":158}," auto",[99,51539,1276],{"class":109},[99,51541,51542,51545,51547,51550],{"class":101,"line":1713},[99,51543,51544],{"class":158},"            justify-content",[99,51546,51418],{"class":109},[99,51548,51549],{"class":158},"space-around",[99,51551,1276],{"class":109},[99,51553,51554,51557,51559,51562],{"class":101,"line":1718},[99,51555,51556],{"class":158},"            align-items",[99,51558,51418],{"class":109},[99,51560,51561],{"class":158},"flex-end",[99,51563,1276],{"class":109},[99,51565,51566,51569,51571,51574],{"class":101,"line":1735},[99,51567,51568],{"class":158},"            text-align",[99,51570,51418],{"class":109},[99,51572,51573],{"class":158},"center",[99,51575,1276],{"class":109},[99,51577,51578],{"class":101,"line":1740},[99,51579,2515],{"class":109},[99,51581,51582],{"class":101,"line":1745},[99,51583,2386],{"emptyLinePlaceholder":26},[99,51585,51586,51588,51590,51593],{"class":101,"line":1750},[99,51587,51446],{"class":1949},[99,51589,1070],{"class":105},[99,51591,51592],{"class":51281},"div",[99,51594,15559],{"class":109},[99,51596,51597,51599,51601,51603],{"class":101,"line":1764},[99,51598,51453],{"class":158},[99,51600,51418],{"class":109},[99,51602,51458],{"class":158},[99,51604,1276],{"class":109},[99,51606,51607,51609,51611,51613,51615],{"class":101,"line":1769},[99,51608,51465],{"class":158},[99,51610,51418],{"class":109},[99,51612,766],{"class":158},[99,51614,51473],{"class":105},[99,51616,1276],{"class":109},[99,51618,51619,51622,51624,51627],{"class":101,"line":2563},[99,51620,51621],{"class":158},"            background-color",[99,51623,51418],{"class":109},[99,51625,51626],{"class":158},"pink",[99,51628,1276],{"class":109},[99,51630,51631,51634,51636,51639],{"class":101,"line":2577},[99,51632,51633],{"class":158},"            flex-direction",[99,51635,51418],{"class":109},[99,51637,51638],{"class":158},"column",[99,51640,1276],{"class":109},[99,51642,51643,51645,51647,51650],{"class":101,"line":2585},[99,51644,51544],{"class":158},[99,51646,51418],{"class":109},[99,51648,51649],{"class":158},"space-between",[99,51651,1276],{"class":109},[99,51653,51654],{"class":101,"line":2590},[99,51655,2515],{"class":109},[99,51657,51658],{"class":101,"line":2596},[99,51659,2386],{"emptyLinePlaceholder":26},[99,51661,51662,51664,51667,51670],{"class":101,"line":2602},[99,51663,51446],{"class":1949},[99,51665,51666],{"class":51281}," div",[99,51668,51669],{"class":51281}," span",[99,51671,15559],{"class":109},[99,51673,51674],{"class":101,"line":2607},[99,51675,2386],{"emptyLinePlaceholder":26},[99,51677,51678,51681,51683,51686,51688],{"class":101,"line":7935},[99,51679,51680],{"class":158},"            margin-top",[99,51682,51418],{"class":109},[99,51684,51685],{"class":158},"-20",[99,51687,51473],{"class":105},[99,51689,1276],{"class":109},[99,51691,51692],{"class":101,"line":7959},[99,51693,2515],{"class":109},[99,51695,51696],{"class":101,"line":7964},[99,51697,2386],{"emptyLinePlaceholder":26},[99,51699,51700,51702,51704,51707],{"class":101,"line":7970},[99,51701,51446],{"class":1949},[99,51703,51666],{"class":51281},[99,51705,51706],{"class":51281}," h4",[99,51708,15559],{"class":109},[99,51710,51711,51714,51716,51719,51721],{"class":101,"line":7997},[99,51712,51713],{"class":158},"            margin-bottom",[99,51715,51418],{"class":109},[99,51717,51718],{"class":158},"-35",[99,51720,51473],{"class":105},[99,51722,1276],{"class":109},[99,51724,51725,51727,51729,51731,51733],{"class":101,"line":8002},[99,51726,51465],{"class":158},[99,51728,51418],{"class":109},[99,51730,466],{"class":158},[99,51732,51473],{"class":105},[99,51734,1276],{"class":109},[99,51736,51737,51740,51742,51745,51747],{"class":101,"line":8008},[99,51738,51739],{"class":158},"            margin-left",[99,51741,51418],{"class":109},[99,51743,51744],{"class":158},"-10",[99,51746,51473],{"class":105},[99,51748,1276],{"class":109},[99,51750,51751],{"class":101,"line":8020},[99,51752,2515],{"class":109},[99,51754,51755,51758,51760],{"class":101,"line":8032},[99,51756,51757],{"class":109},"    \u003C\u002F",[99,51759,5113],{"class":51281},[99,51761,51288],{"class":109},[99,51763,51764,51767,51769],{"class":101,"line":8044},[99,51765,51766],{"class":109},"\u003C\u002F",[99,51768,51315],{"class":51281},[99,51770,51288],{"class":109},[99,51772,51773],{"class":101,"line":9703},[99,51774,2386],{"emptyLinePlaceholder":26},[99,51776,51777,51779,51782],{"class":101,"line":9728},[99,51778,1020],{"class":109},[99,51780,51781],{"class":51281},"body",[99,51783,51288],{"class":109},[99,51785,51786],{"class":101,"line":9751},[99,51787,2386],{"emptyLinePlaceholder":26},[99,51789,51790,51792,51795],{"class":101,"line":9775},[99,51791,51322],{"class":109},[99,51793,51794],{"class":51281},"script",[99,51796,51288],{"class":109},[99,51798,51799],{"class":101,"line":9780},[99,51800,51801],{"class":168},"        \u002F\u002F 1. 四次弹框效果\n",[99,51803,51804],{"class":101,"line":9785},[99,51805,51806],{"class":168},"        \u002F\u002F 声明一个新的数组\n",[99,51808,51809,51812,51815,51817],{"class":101,"line":9790},[99,51810,51811],{"class":105},"        let",[99,51813,51814],{"class":109}," arr ",[99,51816,155],{"class":105},[99,51818,51819],{"class":109}," []\n",[99,51821,51822,51824,51826,51829,51831,51833,51835,51837,51839,51842,51844,51846],{"class":101,"line":9799},[99,51823,3389],{"class":105},[99,51825,1644],{"class":109},[99,51827,51828],{"class":105},"let",[99,51830,9425],{"class":109},[99,51832,155],{"class":105},[99,51834,25107],{"class":158},[99,51836,9432],{"class":109},[99,51838,1574],{"class":105},[99,51840,51841],{"class":158}," 4",[99,51843,3200],{"class":109},[99,51845,2278],{"class":105},[99,51847,12429],{"class":109},[99,51849,51850],{"class":101,"line":9804},[99,51851,51852],{"class":168},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[99,51854,51855],{"class":101,"line":9810},[99,51856,51857],{"class":168},"            \u002F\u002F arr.push(num)\n",[99,51859,51860,51863,51866,51868,51871,51873,51876,51878,51881],{"class":101,"line":9831},[99,51861,51862],{"class":109},"            arr.",[99,51864,51865],{"class":1949},"push",[99,51867,110],{"class":109},[99,51869,51870],{"class":1949},"prompt",[99,51872,110],{"class":109},[99,51874,51875],{"class":214},"`请输入第${",[99,51877,551],{"class":109},[99,51879,51880],{"class":214},"}季度的数据:`",[99,51882,30478],{"class":109},[99,51884,51885],{"class":101,"line":9837},[99,51886,51887],{"class":168},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[99,51889,51890],{"class":101,"line":9851},[99,51891,2515],{"class":109},[99,51893,51894],{"class":101,"line":9857},[99,51895,51896],{"class":168},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[99,51898,51899],{"class":101,"line":9884},[99,51900,51901],{"class":168},"        \u002F\u002F 盒子开头\n",[99,51903,51904,51907,51910,51912,51915],{"class":101,"line":9893},[99,51905,51906],{"class":109},"        document.",[99,51908,51909],{"class":1949},"write",[99,51911,110],{"class":109},[99,51913,51914],{"class":214},"` \u003Cdiv class=\"box\">`",[99,51916,116],{"class":109},[99,51918,51919],{"class":101,"line":9899},[99,51920,2386],{"emptyLinePlaceholder":26},[99,51922,51923],{"class":101,"line":9907},[99,51924,51925],{"class":168},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[99,51927,51928,51930,51932,51934,51936,51938,51940,51942,51944,51947,51950,51952,51954],{"class":101,"line":9912},[99,51929,3389],{"class":105},[99,51931,1644],{"class":109},[99,51933,51828],{"class":105},[99,51935,9425],{"class":109},[99,51937,155],{"class":105},[99,51939,4079],{"class":158},[99,51941,9432],{"class":109},[99,51943,1020],{"class":105},[99,51945,51946],{"class":109}," arr.",[99,51948,51949],{"class":158},"length",[99,51951,3200],{"class":109},[99,51953,2278],{"class":105},[99,51955,12429],{"class":109},[99,51957,51958,51961,51963,51965],{"class":101,"line":16591},[99,51959,51960],{"class":109},"            document.",[99,51962,51909],{"class":1949},[99,51964,110],{"class":109},[99,51966,51967],{"class":214},"`\n",[99,51969,51970,51973,51975,51977,51979,51981],{"class":101,"line":16597},[99,51971,51972],{"class":214},"              \u003Cdiv style=\"height: ${",[99,51974,3866],{"class":109},[99,51976,1000],{"class":214},[99,51978,551],{"class":109},[99,51980,1050],{"class":214},[99,51982,51983],{"class":214},"}px;\">\n",[99,51985,51986,51989,51991,51993,51995,51997],{"class":101,"line":16620},[99,51987,51988],{"class":214},"                \u003Cspan>${",[99,51990,3866],{"class":109},[99,51992,1000],{"class":214},[99,51994,551],{"class":109},[99,51996,1050],{"class":214},[99,51998,51999],{"class":214},"}\u003C\u002Fspan>\n",[99,52001,52002,52005,52007,52009,52011],{"class":101,"line":16626},[99,52003,52004],{"class":214},"                \u003Ch4>第${",[99,52006,551],{"class":109},[99,52008,45547],{"class":105},[99,52010,25107],{"class":158},[99,52012,52013],{"class":214},"}季度\u003C\u002Fh4>\n",[99,52015,52016],{"class":101,"line":16649},[99,52017,52018],{"class":214},"              \u003C\u002Fdiv>          \n",[99,52020,52021,52024],{"class":101,"line":16663},[99,52022,52023],{"class":214},"            `",[99,52025,116],{"class":109},[99,52027,52028],{"class":101,"line":16683},[99,52029,2515],{"class":109},[99,52031,52032],{"class":101,"line":16689},[99,52033,52034],{"class":168},"        \u002F\u002F 盒子结尾\n",[99,52036,52037,52039,52041,52043,52046],{"class":101,"line":16700},[99,52038,51906],{"class":109},[99,52040,51909],{"class":1949},[99,52042,110],{"class":109},[99,52044,52045],{"class":214},"` \u003C\u002Fdiv>`",[99,52047,116],{"class":109},[99,52049,52050,52052,52054],{"class":101,"line":16723},[99,52051,51757],{"class":109},[99,52053,51794],{"class":51281},[99,52055,51288],{"class":109},[99,52057,52058,52060,52062],{"class":101,"line":16745},[99,52059,51766],{"class":109},[99,52061,51781],{"class":51281},[99,52063,51288],{"class":109},[99,52065,52066],{"class":101,"line":16750},[99,52067,2386],{"emptyLinePlaceholder":26},[99,52069,52070,52072,52074],{"class":101,"line":16756},[99,52071,51766],{"class":109},[99,52073,50616],{"class":51281},[99,52075,51288],{"class":109},[70,52077,52079],{"id":52078},"_284-冒泡排序","2.8.4 冒泡排序",[90,52081,52083],{"className":50614,"code":52082,"language":50616,"meta":21,"style":21},"\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",[96,52084,52085,52095,52109,52113,52121,52136,52156,52168,52176,52180,52188,52196,52228,52261,52298,52303,52322,52327,52340,52355,52371,52375,52380,52384,52394,52403,52411,52415],{"__ignoreMap":21},[99,52086,52087,52089,52091,52093],{"class":101,"line":102},[99,52088,51278],{"class":109},[99,52090,51282],{"class":51281},[99,52092,51285],{"class":1949},[99,52094,51288],{"class":109},[99,52096,52097,52099,52101,52103,52105,52107],{"class":101,"line":22},[99,52098,1020],{"class":109},[99,52100,50616],{"class":51281},[99,52102,51297],{"class":1949},[99,52104,155],{"class":109},[99,52106,51302],{"class":214},[99,52108,51288],{"class":109},[99,52110,52111],{"class":101,"line":1165},[99,52112,2386],{"emptyLinePlaceholder":26},[99,52114,52115,52117,52119],{"class":101,"line":1180},[99,52116,1020],{"class":109},[99,52118,51315],{"class":51281},[99,52120,51288],{"class":109},[99,52122,52123,52126,52128,52130,52132,52134],{"class":101,"line":1186},[99,52124,52125],{"class":109},"  \u003C",[99,52127,51325],{"class":51281},[99,52129,51328],{"class":1949},[99,52131,155],{"class":109},[99,52133,51333],{"class":214},[99,52135,51288],{"class":109},[99,52137,52138,52140,52142,52144,52146,52148,52150,52152,52154],{"class":101,"line":1200},[99,52139,52125],{"class":109},[99,52141,51325],{"class":51281},[99,52143,14907],{"class":1949},[99,52145,155],{"class":109},[99,52147,51372],{"class":214},[99,52149,51352],{"class":1949},[99,52151,155],{"class":109},[99,52153,51379],{"class":214},[99,52155,51288],{"class":109},[99,52157,52158,52160,52162,52164,52166],{"class":101,"line":1206},[99,52159,52125],{"class":109},[99,52161,51388],{"class":51281},[99,52163,51391],{"class":109},[99,52165,51388],{"class":51281},[99,52167,51288],{"class":109},[99,52169,52170,52172,52174],{"class":101,"line":1297},[99,52171,51766],{"class":109},[99,52173,51315],{"class":51281},[99,52175,51288],{"class":109},[99,52177,52178],{"class":101,"line":1303},[99,52179,2386],{"emptyLinePlaceholder":26},[99,52181,52182,52184,52186],{"class":101,"line":1315},[99,52183,1020],{"class":109},[99,52185,51781],{"class":51281},[99,52187,51288],{"class":109},[99,52189,52190,52192,52194],{"class":101,"line":1598},[99,52191,52125],{"class":109},[99,52193,51794],{"class":51281},[99,52195,51288],{"class":109},[99,52197,52198,52201,52203,52205,52208,52210,52212,52214,52216,52218,52220,52222,52224,52226],{"class":101,"line":1603},[99,52199,52200],{"class":105},"    let",[99,52202,51814],{"class":109},[99,52204,155],{"class":105},[99,52206,52207],{"class":109}," [",[99,52209,429],{"class":158},[99,52211,12422],{"class":109},[99,52213,403],{"class":158},[99,52215,12422],{"class":109},[99,52217,181],{"class":158},[99,52219,12422],{"class":109},[99,52221,187],{"class":158},[99,52223,12422],{"class":109},[99,52225,327],{"class":158},[99,52227,33227],{"class":109},[99,52229,52230,52232,52234,52236,52238,52240,52242,52244,52246,52248,52250,52253,52255,52257,52259],{"class":101,"line":1609},[99,52231,3187],{"class":105},[99,52233,1644],{"class":109},[99,52235,51828],{"class":105},[99,52237,9425],{"class":109},[99,52239,155],{"class":105},[99,52241,4079],{"class":158},[99,52243,9432],{"class":109},[99,52245,1020],{"class":105},[99,52247,51946],{"class":109},[99,52249,51949],{"class":158},[99,52251,52252],{"class":105}," -",[99,52254,25107],{"class":158},[99,52256,3200],{"class":109},[99,52258,2278],{"class":105},[99,52260,12429],{"class":109},[99,52262,52263,52266,52268,52270,52272,52274,52276,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296],{"class":101,"line":1614},[99,52264,52265],{"class":105},"      for",[99,52267,1644],{"class":109},[99,52269,51828],{"class":105},[99,52271,9487],{"class":109},[99,52273,155],{"class":105},[99,52275,4079],{"class":158},[99,52277,9494],{"class":109},[99,52279,1020],{"class":105},[99,52281,51946],{"class":109},[99,52283,51949],{"class":158},[99,52285,52252],{"class":105},[99,52287,9425],{"class":109},[99,52289,642],{"class":105},[99,52291,25107],{"class":158},[99,52293,9501],{"class":109},[99,52295,2278],{"class":105},[99,52297,12429],{"class":109},[99,52299,52300],{"class":101,"line":1628},[99,52301,52302],{"class":168},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[99,52304,52305,52307,52310,52312,52315,52317,52319],{"class":101,"line":1633},[99,52306,2483],{"class":105},[99,52308,52309],{"class":109}," (arr[j] ",[99,52311,1070],{"class":105},[99,52313,52314],{"class":109}," arr[j ",[99,52316,591],{"class":105},[99,52318,25107],{"class":158},[99,52320,52321],{"class":109},"]) {\n",[99,52323,52324],{"class":101,"line":1639},[99,52325,52326],{"class":168},"          \u002F\u002F 交换两个变量\n",[99,52328,52329,52332,52335,52337],{"class":101,"line":1660},[99,52330,52331],{"class":105},"          let",[99,52333,52334],{"class":109}," tmp ",[99,52336,155],{"class":105},[99,52338,52339],{"class":109}," arr[j]\n",[99,52341,52342,52345,52347,52349,52351,52353],{"class":101,"line":1665},[99,52343,52344],{"class":109},"          arr[j] ",[99,52346,155],{"class":105},[99,52348,52314],{"class":109},[99,52350,591],{"class":105},[99,52352,25107],{"class":158},[99,52354,33227],{"class":109},[99,52356,52357,52360,52362,52364,52366,52368],{"class":101,"line":1679},[99,52358,52359],{"class":109},"          arr[j ",[99,52361,591],{"class":105},[99,52363,25107],{"class":158},[99,52365,4429],{"class":109},[99,52367,155],{"class":105},[99,52369,52370],{"class":109}," tmp\n",[99,52372,52373],{"class":101,"line":1684},[99,52374,2515],{"class":109},[99,52376,52377],{"class":101,"line":1713},[99,52378,52379],{"class":109},"      }\n",[99,52381,52382],{"class":101,"line":1718},[99,52383,2173],{"class":109},[99,52385,52386,52389,52391],{"class":101,"line":1735},[99,52387,52388],{"class":109},"    document.",[99,52390,51909],{"class":1949},[99,52392,52393],{"class":109},"(arr)\n",[99,52395,52396,52399,52401],{"class":101,"line":1740},[99,52397,52398],{"class":109},"  \u003C\u002F",[99,52400,51794],{"class":51281},[99,52402,51288],{"class":109},[99,52404,52405,52407,52409],{"class":101,"line":1745},[99,52406,51766],{"class":109},[99,52408,51781],{"class":51281},[99,52410,51288],{"class":109},[99,52412,52413],{"class":101,"line":1750},[99,52414,2386],{"emptyLinePlaceholder":26},[99,52416,52417,52419,52421],{"class":101,"line":1764},[99,52418,51766],{"class":109},[99,52420,50616],{"class":51281},[99,52422,51288],{"class":109},[14,52424,52425],{},[1448,52426],{"alt":21,"src":52427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52429,52430],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52432,52433],{},"let arr = [4, 2, 5, 1, 3]",[14,52435,52436],{},"\u002F\u002F 1.升序排列写法",[14,52438,52439],{},"arr.sort(function (a, b) {",[14,52441,52442],{},"return a - b",[14,52444,52445],{},"})",[14,52447,52448],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52450,52451],{},"\u002F\u002F 降序排列写法",[14,52453,52439],{},[14,52455,52456],{},"return b - a",[14,52458,52445],{},[14,52460,52461],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[41,52463,52465],{"id":52464},"_29-函数","2.9 函数",[14,52467,52468],{},[1448,52469],{"alt":21,"src":52470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52472,52473],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52475,52476],{},"函数的声明用function",[14,52478,52479],{},"函数里边可以嵌套函数",[70,52481,52483],{"id":52482},"_291-函数传参","2.9.1 函数传参",[14,52485,52486],{},[1448,52487],{"alt":21,"src":52488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52490,52491],{},[1448,52492],{"alt":21,"src":52493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1117,52495,52496,52499,52502,52505,52508,52511],{},[56,52497,52498],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[56,52500,52501],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[56,52503,52504],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[56,52506,52507],{},"开发中尽量保持形参和实参个数一致",[56,52509,52510],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[56,52512,52513],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52515,52516],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[70,52518,52520],{"id":52519},"_292-函数的返回值","2.9.2 函数的返回值",[14,52522,52523],{},[1448,52524],{"alt":21,"src":52525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52527,52528],{},[1448,52529],{"alt":21,"src":52530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1117,52532,52533,52536,52539,52542,52545],{},[56,52534,52535],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[56,52537,52538],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[56,52540,52541],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[56,52543,52544],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[56,52546,52547],{},"断点调试:进入函数内部看执行过程F11",[70,52549,52551],{"id":52550},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[90,52553,52555],{"className":50614,"code":52554,"language":50616,"meta":21,"style":21},"    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",[96,52556,52557,52562,52567,52571,52576],{"__ignoreMap":21},[99,52558,52559],{"class":101,"line":102},[99,52560,52561],{"class":109},"    function fn(a, b) {\n",[99,52563,52564],{"class":101,"line":22},[99,52565,52566],{"class":109},"      console.log(a + b);\n",[99,52568,52569],{"class":101,"line":1165},[99,52570,2173],{"class":109},[99,52572,52573],{"class":101,"line":1180},[99,52574,52575],{"class":109},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[99,52577,52578],{"class":101,"line":1186},[99,52579,52580],{"class":109},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[70,52582,52584],{"id":52583},"_294-作用域","2.9.4 作用域",[1117,52586,52587,52593,52598,52601,52604],{},[56,52588,52589,52590],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[259,52591,52592],{},"作用域",[56,52594,52595],{},[259,52596,52597],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[56,52599,52600],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[56,52602,52603],{},"函数内部可以直接所使用全局变量",[56,52605,52606],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52608,14620],{},[90,52610,52612],{"className":50614,"code":52611,"language":50616,"meta":21,"style":21},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[96,52613,52614,52619,52624,52628,52633,52638,52643],{"__ignoreMap":21},[99,52615,52616],{"class":101,"line":102},[99,52617,52618],{"class":109},"    function fun() {\n",[99,52620,52621],{"class":101,"line":22},[99,52622,52623],{"class":109},"      num = 10\n",[99,52625,52626],{"class":101,"line":1165},[99,52627,2173],{"class":109},[99,52629,52630],{"class":101,"line":1180},[99,52631,52632],{"class":109},"    fun()\n",[99,52634,52635],{"class":101,"line":1186},[99,52636,52637],{"class":109},"    console.log(num)\n",[99,52639,52640],{"class":101,"line":1200},[99,52641,52642],{"class":109},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[99,52644,52645],{"class":101,"line":1206},[99,52646,52647],{"class":109},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1117,52649,52650,52653],{},[56,52651,52652],{},"函数内部的形参可以看做是局部变量",[56,52654,52655],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52657,52658,52659],{},"变量访问原则： ",[259,52660,52661],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[70,52663,52665],{"id":52664},"_295-匿名函数","2.9.5 匿名函数",[14,52667,52668],{},"函数可以分为具名函数和匿名函数",[14,52670,52671],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[53,52673,52674],{},[56,52675,52676],{},"函数表达式",[14,52678,52679],{},[1448,52680],{"alt":21,"src":52681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52683,52684],{},"里边也可以写参数",[14,52686,52687],{},"具名函数调用位置可以随意调整；",[14,52689,52690],{},"匿名函数函数表达式形式只能在声明后才可以使用",[53,52692,52693],{"start":22},[56,52694,52695],{},"立即执行函数",[14,52697,52698],{},[1448,52699],{"alt":21,"src":52700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52702,52703],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52705,52706],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52708,52709],{},"(function () {})();",[14,52711,52712],{},"不要落下最后的;",[14,52714,52715],{},"立即执行函数必须要加;",[14,52717,52718],{},"分号写前写后都没问题",[14,52720,52721],{},"写前：",[14,52723,52724],{},"(function() {})()",[14,52726,52727],{},";(function () {})();",[14,52729,52730],{},"写后:",[14,52732,52733],{},"(function() {})();",[14,52735,52709],{},[14,52737,52738],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52740,52741],{},"还有一种写法：",[14,52743,52744],{},"(function(){}());",[14,52746,52747],{},"或者:",[14,52749,52750],{},"!function(){}();",[14,52752,52753],{},"立即执行函数有时候也是可以加名字的：",[14,52755,52756],{},"(function flexible(window,document) {}(window,document));",[14,52758,52759],{},"省一些调用方法",[70,52761,52763],{"id":52762},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52765,52766],{},[1448,52767],{"alt":21,"src":52768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52770,52771],{},"这样就不用非得给x,y初始化了",[14,52773,52774],{},[1448,52775],{"alt":21,"src":52776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52778,52779],{},"代码执行时先看左边",[14,52781,52782],{},"例如：console.log(false && 3+5)",[14,52784,52785],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52787,52788],{},"&&都是真时，就返回最后一个真值",[14,52790,52791],{},"console.log(11 && 22)",[14,52793,52794],{},"输出22",[14,52796,52797],{},"逻辑与：遇真则真",[14,52799,14620],{},[14,52801,52802],{},"let age=1",[14,52804,52805],{},"console.log(11 || age++)",[14,52807,52808],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52810,52811],{},"console.log(11 || 22)",[14,52813,52814],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52816,52817],{},"||如果都是假的话，就取最后一个假的值了",[70,52819,52821],{"id":52820},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52823,52824],{},"显示转换：",[14,52826,52827,52830,52831],{},[259,52828,52829],{},"记忆","： ",[259,52832,52833],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52835,52836],{},"空字符串为假，其他字符串全为真",[14,52838,52839],{},[1448,52840],{"alt":21,"src":52841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52843,52844],{},"隐式转换：",[14,52846,52847],{},[1448,52848],{"alt":21,"src":52849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52851,52852],{},"隐式转换:",[14,52854,52855],{},"null+3=3",[14,52857,52858],{},"undefined+3=NaN",[14,52860,52861],{},"null==undefined 输出true,他两个都当0看",[14,52863,52864],{},"null===undefined 输出false",[14,52866,52867],{},"undefined做任何操作都是NaN",[14,52869,52870],{},"NaN不等于NaN，NaN表示计算错误",[41,52872,52874],{"id":52873},"_210-对象","2.10 对象",[70,52876,52878],{"id":52877},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52880,52881],{},"对象也是一种数据类型，里边的数据是无序的",[14,52883,52884],{},"对象由属性和方法组成",[14,52886,52887],{},[1448,52888],{"alt":21,"src":52889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52891,52892],{},[1448,52893],{"alt":21,"src":52894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52896,52897],{},[1448,52898],{"alt":21,"src":52899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[70,52901,52903],{"id":52902},"_2102-对象属性","2.10.2 对象属性",[14,52905,52906],{},[1448,52907],{"alt":21,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[53,52910,52911],{},[56,52912,52913],{},"查询对象",[14,52915,52916],{},"对象名.属性 goods.uname",[14,52918,52919],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52921,52922],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52924,52925],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52927,52928],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[53,52930,52931],{"start":22},[56,52932,52933],{},"重新赋值",[14,52935,52936],{},"对象名.属性=新值",[53,52938,52939],{"start":1165},[56,52940,52941],{},"增加新数据",[14,52943,52936],{},[53,52945,52946],{"start":1180},[56,52947,52948],{},"删除对象中的属性",[14,52950,52951],{},"delete 对象名.属性",[70,52953,52955],{"id":52954},"_2103-对象方法","2.10.3 对象方法",[14,52957,52958],{},[1448,52959],{"alt":21,"src":52960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52962,52963],{},"后边跟的是匿名函数",[14,52965,52966],{},"对象外面的叫函数；对象内部的叫方法",[14,52968,52969],{},[1448,52970],{"alt":21,"src":52971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[70,52973,52975],{"id":52974},"_2104-遍历对象","2.10.4 遍历对象",[14,52977,52978],{},"理解为加括号的python字典遍历",[14,52980,52981],{},[1448,52982],{"alt":21,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,52985,52986],{},"k是字符串类型",[14,52988,52989],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[90,52991,52993],{"className":50614,"code":52992,"language":50616,"meta":21,"style":21},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[96,52994,52995,53000,53005,53010,53015],{"__ignoreMap":21},[99,52996,52997],{"class":101,"line":102},[99,52998,52999],{"class":109},"   let arr = [1, 2, 3]\n",[99,53001,53002],{"class":101,"line":22},[99,53003,53004],{"class":109},"    for (let k in arr) {\n",[99,53006,53007],{"class":101,"line":1165},[99,53008,53009],{"class":109},"      console.log(k)\n",[99,53011,53012],{"class":101,"line":1180},[99,53013,53014],{"class":109},"      console.log(arr[k])\n",[99,53016,53017],{"class":101,"line":1186},[99,53018,2173],{"class":109},[14,53020,53021],{},[1448,53022],{"alt":21,"src":53023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53025,53026],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53028,53029],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53031,53032],{},"for in 得到的k是属性名",[51794,53034,53035],{},"\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",[14,53037,53038],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[70,53040,53042],{"id":53041},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53044,53045],{},"数组中放对象信息",[90,53047,53051],{"className":53048,"code":53049,"language":53050,"meta":21,"style":21},"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",[96,53052,53053,53061,53066,53071,53076,53081,53086,53091,53096,53101,53106,53111,53116,53120,53124],{"__ignoreMap":21},[99,53054,53055,53057,53059],{"class":101,"line":102},[99,53056,1020],{"class":109},[99,53058,51794],{"class":51281},[99,53060,51288],{"class":109},[99,53062,53063],{"class":101,"line":22},[99,53064,53065],{"class":109},"    let students = [\n",[99,53067,53068],{"class":101,"line":1165},[99,53069,53070],{"class":109},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[99,53072,53073],{"class":101,"line":1180},[99,53074,53075],{"class":109},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[99,53077,53078],{"class":101,"line":1186},[99,53079,53080],{"class":109},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[99,53082,53083],{"class":101,"line":1200},[99,53084,53085],{"class":109},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[99,53087,53088],{"class":101,"line":1206},[99,53089,53090],{"class":109},"    ]\n",[99,53092,53093],{"class":101,"line":1297},[99,53094,53095],{"class":109},"    for (let i = 0; i \u003C students.length; i++) {\n",[99,53097,53098],{"class":101,"line":1303},[99,53099,53100],{"class":109},"      for (let k in students[i]) {\n",[99,53102,53103],{"class":101,"line":1315},[99,53104,53105],{"class":109},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[99,53107,53108],{"class":101,"line":1598},[99,53109,53110],{"class":109},"        \u002F\u002F输出每个人的名字：\n",[99,53112,53113],{"class":101,"line":1603},[99,53114,53115],{"class":109},"        \u002F\u002Fconsole.log(students[i].name)\n",[99,53117,53118],{"class":101,"line":1609},[99,53119,52379],{"class":109},[99,53121,53122],{"class":101,"line":1614},[99,53123,2173],{"class":109},[99,53125,53126,53128,53130],{"class":101,"line":1628},[99,53127,52398],{"class":109},[99,53129,51794],{"class":51281},[99,53131,51288],{"class":109},[70,53133,53135],{"id":53134},"_2106-内置对象","2.10.6 内置对象",[14,53137,53138],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[53,53140,53141],{},[56,53142,53143],{},"数学对象Math",[14,53145,53146],{},[1448,53147],{"alt":21,"src":53148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53150,53151],{},[348,53152,53155],{"href":53153,"rel":53154},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23853],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53157,53158],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53160,53161],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53163,53164],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53166,53167],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53169,53170],{},"null属于对象数据类型",[53,53172,53173],{"start":22},[56,53174,53175],{},"生成任意范围随机数",[14,53177,53178],{},[1448,53179],{"alt":21,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53182,53183],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53185,53186],{},"乘以几就取不到几",[14,53188,53189],{},"取数组中的随机元素：",[14,53191,53192],{},"let arr = ['red', 'green', 'blue']",[14,53194,53195],{},"let random = Math.floor(Math.random() * arr.length)",[14,53197,53198],{},"console.log(arr[random])",[14,53200,53201],{},"这个函数得到的是全闭区间",[14,53203,53204],{},"function getRandom(N, M) {",[14,53206,53207],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53209,1056],{},[14,53211,53212],{},"console.log(getRandom(4, 8))",[70,53214,53216],{"id":53215},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53218,53219],{},[1448,53220],{"alt":21,"src":53221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53223,53224],{},[1448,53225],{"alt":21,"src":53226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53228,53229],{},[1448,53230],{"alt":21,"src":53231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53233,53234],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53236,53237],{},[1448,53238],{"alt":21,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53241,53242],{},[1448,53243],{"alt":21,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53246,53247],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53249,53250],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53252,53253],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5113,53255,53256],{},"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":21,"searchDepth":22,"depth":22,"links":53258},[53259,53267,53268,53269,53270,53271,53278,53282,53288,53297],{"id":50449,"depth":22,"text":50450,"children":53260},[53261,53262,53263,53264,53265,53266],{"id":50453,"depth":1165,"text":50454},{"id":50470,"depth":1165,"text":50471},{"id":50510,"depth":1165,"text":50511},{"id":50522,"depth":1165,"text":50523},{"id":50531,"depth":1165,"text":50532},{"id":50579,"depth":1165,"text":50580},{"id":50589,"depth":22,"text":50590},{"id":50677,"depth":22,"text":50678},{"id":50700,"depth":22,"text":50701},{"id":50712,"depth":22,"text":50713},{"id":50899,"depth":22,"text":50900,"children":53272},[53273,53274,53275,53276,53277],{"id":50903,"depth":1165,"text":50904},{"id":50912,"depth":1165,"text":50913},{"id":50940,"depth":1165,"text":50941},{"id":50976,"depth":1165,"text":50977},{"id":51001,"depth":1165,"text":51002},{"id":51013,"depth":22,"text":51014,"children":53279},[53280,53281],{"id":51034,"depth":1165,"text":51035},{"id":51128,"depth":1165,"text":51129},{"id":51186,"depth":22,"text":51187,"children":53283},[53284,53285,53286,53287],{"id":51190,"depth":1165,"text":51191},{"id":51214,"depth":1165,"text":51215},{"id":51267,"depth":1165,"text":51268},{"id":52078,"depth":1165,"text":52079},{"id":52464,"depth":22,"text":52465,"children":53289},[53290,53291,53292,53293,53294,53295,53296],{"id":52482,"depth":1165,"text":52483},{"id":52519,"depth":1165,"text":52520},{"id":52550,"depth":1165,"text":52551},{"id":52583,"depth":1165,"text":52584},{"id":52664,"depth":1165,"text":52665},{"id":52762,"depth":1165,"text":52763},{"id":52820,"depth":1165,"text":52821},{"id":52873,"depth":22,"text":52874,"children":53298},[53299,53300,53301,53302,53303,53304,53305],{"id":52877,"depth":1165,"text":52878},{"id":52902,"depth":1165,"text":52903},{"id":52954,"depth":1165,"text":52955},{"id":52974,"depth":1165,"text":52975},{"id":53041,"depth":1165,"text":53042},{"id":53134,"depth":1165,"text":53135},{"id":53215,"depth":1165,"text":53216},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50441,"description":23364},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53312,"title":53313,"body":53314,"description":23364,"extension":24,"meta":76654,"navigation":26,"path":76655,"seo":76656,"stem":76657,"__hash__":76658},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53315,"toc":76594},[53316,53319,53322,53325,53330,53333,53336,53339,53343,53347,53353,53358,53366,53373,53376,53380,53385,53390,53395,53398,53401,53412,53415,53419,53422,53425,53430,53435,53440,53443,53446,53538,53541,53546,53549,53554,53557,53560,53565,53568,53573,53577,53580,53594,53598,53603,53606,53609,53613,53618,53621,53625,53629,53634,53638,53643,53646,53649,53652,53655,53658,53661,53666,53671,53699,53702,53705,53708,53713,53716,53719,53722,53725,53729,53758,53762,53767,53772,53775,53778,53781,53786,53901,53906,53911,54072,54077,54080,54084,54089,54094,54097,54100,54103,54106,54109,54112,54115,54118,54121,54124,54127,54130,54133,54136,54138,54141,54144,54147,54152,54156,54553,54556,54562,54566,54571,55853,55858,55861,55864,55867,55872,57068,57072,57078,57083,57086,57091,57096,57100,57104,57109,57112,57117,57120,57123,57127,58035,58038,58042,58263,58266,58269,58272,58498,58501,58725,58728,58732,58737,58740,58743,58971,58974,59007,59010,59014,59019,59023,59026,59029,59032,59035,59038,59041,59044,59049,60329,60333,60336,61429,61433,61436,61439,61442,61445,61449,61452,61455,61457,61465,62946,62950,62953,62956,62959,63168,63171,63175,63179,63184,63189,63192,63195,63200,63204,63209,63212,63321,63325,63330,63335,63338,63341,63345,63350,63355,63360,63363,63366,63377,63380,63385,63390,63393,63396,63469,63473,63478,63481,63483,63494,63498,63503,64829,64832,64835,64838,64840,64843,64846,64849,64852,64855,64858,64861,64864,64867,64870,64873,64876,64878,64880,64883,64887,65981,65984,65987,66003,66017,66020,66025,66031,66036,66040,66044,66049,66053,66058,66500,66505,66508,66512,66517,66520,66523,66527,66532,66536,66541,66546,66550,66555,66560,66563,66568,66573,66577,66582,66587,66691,66694,66698,66703,67069,67072,67075,67078,67081,67084,67087,67090,67093,68389,68393,68398,68403,68406,68409,68412,68415,68417,68422,68427,68430,68434,68439,68444,68449,68452,68455,68458,68461,68464,68469,68472,68476,68481,68486,68490,68495,68498,68503,68506,68509,68512,68515,68518,68523,68526,68529,68532,68535,68539,68544,68547,68551,68556,68559,68562,68566,68595,68598,68602,68606,68611,68615,68620,68623,68626,68629,68632,68635,68638,68641,68644,68647,68650,68653,68656,68659,68662,68666,68671,68676,68679,68683,68687,68692,68695,68699,68702,68705,68710,68715,68720,68725,68730,68733,68736,68741,68746,68750,68755,68758,68763,68766,68769,68772,68775,68780,68783,68792,68796,68801,68804,68807,68811,68814,68819,68823,68826,68832,68838,68842,68868,68871,70432,70435,70931,70934,70939,70944,70949,70953,70958,70963,70968,70972,70977,70980,70983,70986,70989,70993,70996,71001,71004,71009,71013,71018,71021,71026,71031,71036,71039,71042,71047,71052,71055,71058,71062,71065,71070,71073,71078,71081,71086,71091,71096,71099,71104,71169,71172,71183,71187,71192,71364,71368,71373,71376,71379,71382,71386,71397,71401,71404,71409,71414,71417,71420,71423,71426,71429,71431,71434,71437,71440,71445,71448,71453,71456,71460,71463,71466,71480,71484,71487,71542,71547,71550,71553,71558,71561,71565,71570,71700,71704,71709,71714,71795,71800,71804,71807,71812,71817,71823,71826,71829,71832,71836,71841,71844,71855,71859,71876,74923,74927,74930,74933,74936,74957,74961,74964,74972,74975,74980,74983,74986,74991,74996,75000,75021,75025,75030,75033,75036,75039,75042,75046,75051,75054,75058,75063,75066,75071,75074,75079,75082,75087,76290,76294,76299,76302,76307,76591],[10,53317,53313],{"id":53318},"_3web-apis",[14,53320,53321],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53323,53324],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53326,53327],{},[1448,53328],{"alt":21,"src":53329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53331,53332],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53334,53335],{},"建议数组和对象使用 const 来声明",[14,53337,53338],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[41,53340,53342],{"id":53341},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[70,53344,53346],{"id":53345},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53348,53349,53352],{},[96,53350,53351],{},"document"," = HTML 文件解析后的对象化表示；",[14,53354,53355,53357],{},[96,53356,53351],{}," ≠ HTML 文件本身",[14,53359,53360,53365],{},[259,53361,53362],{},[96,53363,53364],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53367,53368,53372],{},[259,53369,53370],{},[96,53371,53351],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53374,53375],{},"document实际上为window.document的简写",[70,53377,53379],{"id":53378},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53381,53382],{},[1448,53383],{"alt":21,"src":53384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53386,53387],{},[1448,53388],{"alt":21,"src":53389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53391,53392],{},[1448,53393],{"alt":21,"src":53394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53396,53397],{},"console.dir()",[14,53399,53400],{},"dir用来打印对象",[1117,53402,53403,53406,53409],{},[56,53404,53405],{},"任何一个标签，都是一个对象",[56,53407,53408],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[56,53410,53411],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53413,53414],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[70,53416,53418],{"id":53417},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53420,53421],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53423,53424],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53426,53427],{},[259,53428,53429],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[53,53431,53432],{},[56,53433,53434],{},"利用CSS选择器来获取标签元素",[14,53436,53437],{},[1448,53438],{"alt":21,"src":53439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53441,53442],{},"里边的选择器必须必须加引号！！！",[14,53444,53445],{},"只选择第一个元素",[90,53447,53449],{"className":53048,"code":53448,"language":53050,"meta":21,"style":21},"\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",[96,53450,53451,53459,53480,53499,53507,53512,53517,53522,53530],{"__ignoreMap":21},[99,53452,53453,53455,53457],{"class":101,"line":102},[99,53454,1020],{"class":109},[99,53456,51781],{"class":51281},[99,53458,51288],{"class":109},[99,53460,53461,53463,53465,53468,53470,53473,53476,53478],{"class":101,"line":22},[99,53462,52125],{"class":109},[99,53464,51592],{"class":51281},[99,53466,53467],{"class":1949}," class",[99,53469,155],{"class":109},[99,53471,53472],{"class":214},"\"box\"",[99,53474,53475],{"class":109},">123\u003C\u002F",[99,53477,51592],{"class":51281},[99,53479,51288],{"class":109},[99,53481,53482,53484,53486,53488,53490,53492,53495,53497],{"class":101,"line":1165},[99,53483,52125],{"class":109},[99,53485,51592],{"class":51281},[99,53487,53467],{"class":1949},[99,53489,155],{"class":109},[99,53491,53472],{"class":214},[99,53493,53494],{"class":109},">456\u003C\u002F",[99,53496,51592],{"class":51281},[99,53498,51288],{"class":109},[99,53500,53501,53503,53505],{"class":101,"line":1180},[99,53502,52125],{"class":109},[99,53504,51794],{"class":51281},[99,53506,51288],{"class":109},[99,53508,53509],{"class":101,"line":1186},[99,53510,53511],{"class":109},"    \u002F\u002F 1.获取匹配的第一个元素\n",[99,53513,53514],{"class":101,"line":1200},[99,53515,53516],{"class":109},"    const box = document.querySelector('div')\n",[99,53518,53519],{"class":101,"line":1206},[99,53520,53521],{"class":109},"    console.dir(box)\n",[99,53523,53524,53526,53528],{"class":101,"line":1297},[99,53525,52398],{"class":109},[99,53527,51794],{"class":51281},[99,53529,51288],{"class":109},[99,53531,53532,53534,53536],{"class":101,"line":1303},[99,53533,51766],{"class":109},[99,53535,51781],{"class":51281},[99,53537,51288],{"class":109},[14,53539,53540],{},"只选123，不选456",[14,53542,53543],{},[1448,53544],{"alt":21,"src":53545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53547,53548],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53550,53551],{},[1448,53552],{"alt":21,"src":53553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53555,53556],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53558,53559],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[53,53561,53562],{"start":22},[56,53563,53564],{},"其他方法来获取标签元素",[14,53566,53567],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53569,53570],{},[1448,53571],{"alt":21,"src":53572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[70,53574,53576],{"id":53575},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53578,53579],{},"设置修改DOM元素内容有两种方式：",[1117,53581,53582,53585,53588,53591],{},[56,53583,53584],{},"元素.innerText=''",[56,53586,53587],{},"元素.innerHTML=''",[56,53589,53590],{},"不写字符串输出数字也是可以的",[56,53592,53593],{},"元素.innerHtml=1",[21985,53595,53597],{"id":53596},"_3131-innertext","3.1.3.1 innerText",[14,53599,53600],{},[1448,53601],{"alt":21,"src":53602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53604,53605],{},"思路：实现了修改盒子中的内容！",[14,53607,53608],{},"它只显示纯文本，不解析标签",[21985,53610,53612],{"id":53611},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53614,53615],{},[1448,53616],{"alt":21,"src":53617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53619,53620],{},"相比于innerText，他的强大之处在于可以解析标签",[70,53622,53624],{"id":53623},"_314-操作元素属性","3.1.4 操作元素属性",[21985,53626,53628],{"id":53627},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53630,53631],{},[1448,53632],{"alt":21,"src":53633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21985,53635,53637],{"id":53636},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53639,53640],{},[1448,53641],{"alt":21,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53644,53645],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53647,53648],{},"div.style.backgroundColor = 'hotpink'",[14,53650,53651],{},"如果按照css的写法，-表示减，就会出错",[14,53653,53654],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53656,53657],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53659,53660],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53662,53663],{},[1448,53664],{"alt":21,"src":53665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53667,53668],{},[1448,53669],{"alt":21,"src":53670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[53,53672,53673,53676,53679,53682,53685,53688],{},[56,53674,53675],{},"className这个方式就是修改很多样式的时候来使用的！",[56,53677,53678],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[56,53680,53681],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[56,53683,53684],{},"className为属性名，如果还用class的话就导致与关键字冲突",[56,53686,53687],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[56,53689,53690,53691,53696],{},"解析标签的时候就变为了",[51592,53692],{"className":53693},[53694,53695],"nav","box",[53697,53698],"br",{},[14,53700,53701],{},"例子：",[51592,53703],{"className":53704},[53694],[51794,53706,53707],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53709,53710],{},[1448,53711],{"alt":21,"src":53712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53714,53715],{},"追加和删除类名用classList",[14,53717,53718],{},"常用于类似于开关的操作",[14,53720,53721],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53723,53724],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21985,53726,53728],{"id":53727},"_3143-牢记点","3.1.4.3 牢记点",[53,53730,53731,53734,53737,53740,53743,53746,53749,53752,53755],{},[56,53732,53733],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[56,53735,53736],{},"使用style属性操作css时不要忘记引号",[56,53738,53739],{},"使用className或者classList时也不要忘记引号",[56,53741,53742],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[56,53744,53745],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[56,53747,53748],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[56,53750,53751],{},"若： let arr=['1','2',3] arr[0]=1",[56,53753,53754],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[56,53756,53757],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[70,53759,53761],{"id":53760},"_315-操作表单元素","3.1.5 操作表单元素",[53,53763,53764],{},[56,53765,53766],{},"天生的属性",[14,53768,53769],{},[1448,53770],{"alt":21,"src":53771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53773,53774],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53776,53777],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53779,53780],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53782,53783],{},[1448,53784],{"alt":21,"src":53785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[90,53787,53789],{"className":50614,"code":53788,"language":50616,"meta":21,"style":21},"在复选框中如果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",[96,53790,53791,53796,53828,53833,53838,53843,53848,53852,53857,53862,53879,53891,53896],{"__ignoreMap":21},[99,53792,53793],{"class":101,"line":102},[99,53794,53795],{"class":109},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[99,53797,53798,53800,53803,53806,53808,53811,53813,53815,53817,53819,53821,53823,53826],{"class":101,"line":22},[99,53799,1020],{"class":109},[99,53801,53802],{"class":51281},"input",[99,53804,53805],{"class":1949}," type",[99,53807,155],{"class":109},[99,53809,53810],{"class":214},"\"checkbox\"",[99,53812,14907],{"class":1949},[99,53814,155],{"class":109},[99,53816,7639],{"class":214},[99,53818,14946],{"class":1949},[99,53820,155],{"class":109},[99,53822,7639],{"class":214},[99,53824,53825],{"class":1949}," checked",[99,53827,51288],{"class":109},[99,53829,53830],{"class":101,"line":1165},[99,53831,53832],{"class":109},"不选的话：\n",[99,53834,53835],{"class":101,"line":1180},[99,53836,53837],{"class":109},"const input = document.querySelector('input')\n",[99,53839,53840],{"class":101,"line":1186},[99,53841,53842],{"class":109},"input.checked=false\n",[99,53844,53845],{"class":101,"line":1200},[99,53846,53847],{"class":109},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[99,53849,53850],{"class":101,"line":1206},[99,53851,2386],{"emptyLinePlaceholder":26},[99,53853,53854],{"class":101,"line":1297},[99,53855,53856],{"class":109},"禁用按钮：\n",[99,53858,53859],{"class":101,"line":1303},[99,53860,53861],{"class":109},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[99,53863,53864,53866,53869,53872,53875,53877],{"class":101,"line":1315},[99,53865,1020],{"class":109},[99,53867,53868],{"class":51281},"button",[99,53870,53871],{"class":1949}," disabled",[99,53873,53874],{"class":109},">点击\u003C\u002F",[99,53876,53868],{"class":51281},[99,53878,51288],{"class":109},[99,53880,53881,53883,53885,53887,53889],{"class":101,"line":1598},[99,53882,1020],{"class":109},[99,53884,53868],{"class":51281},[99,53886,53874],{"class":109},[99,53888,53868],{"class":51281},[99,53890,51288],{"class":109},[99,53892,53893],{"class":101,"line":1603},[99,53894,53895],{"class":109},"const bt = document.querySelector('button')\n",[99,53897,53898],{"class":101,"line":1609},[99,53899,53900],{"class":109},"bt.disabled = false\n",[53,53902,53903],{"start":22},[56,53904,53905],{},"自定义属性",[14,53907,53908],{},[1448,53909],{"alt":21,"src":53910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[90,53912,53914],{"className":53048,"code":53913,"language":53050,"meta":21,"style":21},"\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",[96,53915,53916,53924,53952,53971,53990,54009,54028,54036,54041,54046,54051,54056,54064],{"__ignoreMap":21},[99,53917,53918,53920,53922],{"class":101,"line":102},[99,53919,1020],{"class":109},[99,53921,51781],{"class":51281},[99,53923,51288],{"class":109},[99,53925,53926,53928,53930,53933,53935,53937,53940,53942,53945,53948,53950],{"class":101,"line":22},[99,53927,52125],{"class":109},[99,53929,51592],{"class":51281},[99,53931,53932],{"class":1949}," data-id",[99,53934,155],{"class":109},[99,53936,3664],{"class":214},[99,53938,53939],{"class":1949}," data-spm",[99,53941,155],{"class":109},[99,53943,53944],{"class":214},"\"我不知道\"",[99,53946,53947],{"class":109},">1\u003C\u002F",[99,53949,51592],{"class":51281},[99,53951,51288],{"class":109},[99,53953,53954,53956,53958,53960,53962,53964,53967,53969],{"class":101,"line":1165},[99,53955,52125],{"class":109},[99,53957,51592],{"class":51281},[99,53959,53932],{"class":1949},[99,53961,155],{"class":109},[99,53963,3687],{"class":214},[99,53965,53966],{"class":109},">2\u003C\u002F",[99,53968,51592],{"class":51281},[99,53970,51288],{"class":109},[99,53972,53973,53975,53977,53979,53981,53983,53986,53988],{"class":101,"line":1180},[99,53974,52125],{"class":109},[99,53976,51592],{"class":51281},[99,53978,53932],{"class":1949},[99,53980,155],{"class":109},[99,53982,3700],{"class":214},[99,53984,53985],{"class":109},">3\u003C\u002F",[99,53987,51592],{"class":51281},[99,53989,51288],{"class":109},[99,53991,53992,53994,53996,53998,54000,54002,54005,54007],{"class":101,"line":1186},[99,53993,52125],{"class":109},[99,53995,51592],{"class":51281},[99,53997,53932],{"class":1949},[99,53999,155],{"class":109},[99,54001,3713],{"class":214},[99,54003,54004],{"class":109},">4\u003C\u002F",[99,54006,51592],{"class":51281},[99,54008,51288],{"class":109},[99,54010,54011,54013,54015,54017,54019,54021,54024,54026],{"class":101,"line":1200},[99,54012,52125],{"class":109},[99,54014,51592],{"class":51281},[99,54016,53932],{"class":1949},[99,54018,155],{"class":109},[99,54020,3734],{"class":214},[99,54022,54023],{"class":109},">5\u003C\u002F",[99,54025,51592],{"class":51281},[99,54027,51288],{"class":109},[99,54029,54030,54032,54034],{"class":101,"line":1206},[99,54031,52125],{"class":109},[99,54033,51794],{"class":51281},[99,54035,51288],{"class":109},[99,54037,54038],{"class":101,"line":1297},[99,54039,54040],{"class":109},"    const one = document.querySelector('div')\n",[99,54042,54043],{"class":101,"line":1303},[99,54044,54045],{"class":109},"    console.log(one.dataset)\n",[99,54047,54048],{"class":101,"line":1315},[99,54049,54050],{"class":109},"    console.log(one.dataset.id)\n",[99,54052,54053],{"class":101,"line":1598},[99,54054,54055],{"class":109},"    console.log(one.dataset.spm)\n",[99,54057,54058,54060,54062],{"class":101,"line":1603},[99,54059,52398],{"class":109},[99,54061,51794],{"class":51281},[99,54063,51288],{"class":109},[99,54065,54066,54068,54070],{"class":101,"line":1609},[99,54067,51766],{"class":109},[99,54069,51781],{"class":51281},[99,54071,51288],{"class":109},[14,54073,54074],{},[1448,54075],{"alt":21,"src":54076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54078,54079],{},"document.querySelector选择的是第一个对象（元素）",[70,54081,54083],{"id":54082},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54085,54086],{},[1448,54087],{"alt":21,"src":54088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54090,54091],{},[1448,54092],{"alt":21,"src":54093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54095,54096],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51794,54098,54099],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54101,54102],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51794,54104,54105],{},"\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",[14,54107,54108],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54110,54111],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54113,54114],{},"单位为毫秒！！！",[14,54116,54117],{},"可以搭配匿名函数来用！！！",[14,54119,54120],{},"setInterval(function () {",[14,54122,54123],{},"alert('两秒执行一次')",[14,54125,54126],{},"}, 2000)",[14,54128,54129],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54131,54132],{},"function fn() {",[14,54134,54135],{},"document.write(1)",[14,54137,1056],{},[14,54139,54140],{},"setInterval(fn, 1000)",[14,54142,54143],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54145,54146],{},"setInterval('fn()', 1000)",[14,54148,54149],{},[1448,54150],{"alt":21,"src":54151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21985,54153,54155],{"id":54154},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[90,54157,54159],{"className":50614,"code":54158,"language":50616,"meta":21,"style":21},"\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",[96,54160,54161,54171,54185,54189,54197,54211,54231,54243,54251,54255,54263,54300,54305,54310,54315,54323,54331,54353,54361,54366,54388,54393,54398,54409,54414,54434,54442,54457,54472,54483,54488,54498,54508,54512,54521,54525,54533,54541,54545],{"__ignoreMap":21},[99,54162,54163,54165,54167,54169],{"class":101,"line":102},[99,54164,51278],{"class":109},[99,54166,51282],{"class":51281},[99,54168,51285],{"class":1949},[99,54170,51288],{"class":109},[99,54172,54173,54175,54177,54179,54181,54183],{"class":101,"line":22},[99,54174,1020],{"class":109},[99,54176,50616],{"class":51281},[99,54178,51297],{"class":1949},[99,54180,155],{"class":109},[99,54182,51302],{"class":214},[99,54184,51288],{"class":109},[99,54186,54187],{"class":101,"line":1165},[99,54188,2386],{"emptyLinePlaceholder":26},[99,54190,54191,54193,54195],{"class":101,"line":1180},[99,54192,1020],{"class":109},[99,54194,51315],{"class":51281},[99,54196,51288],{"class":109},[99,54198,54199,54201,54203,54205,54207,54209],{"class":101,"line":1186},[99,54200,52125],{"class":109},[99,54202,51325],{"class":51281},[99,54204,51328],{"class":1949},[99,54206,155],{"class":109},[99,54208,51333],{"class":214},[99,54210,51288],{"class":109},[99,54212,54213,54215,54217,54219,54221,54223,54225,54227,54229],{"class":101,"line":1200},[99,54214,52125],{"class":109},[99,54216,51325],{"class":51281},[99,54218,14907],{"class":1949},[99,54220,155],{"class":109},[99,54222,51372],{"class":214},[99,54224,51352],{"class":1949},[99,54226,155],{"class":109},[99,54228,51379],{"class":214},[99,54230,51288],{"class":109},[99,54232,54233,54235,54237,54239,54241],{"class":101,"line":1206},[99,54234,52125],{"class":109},[99,54236,51388],{"class":51281},[99,54238,51391],{"class":109},[99,54240,51388],{"class":51281},[99,54242,51288],{"class":109},[99,54244,54245,54247,54249],{"class":101,"line":1297},[99,54246,51766],{"class":109},[99,54248,51315],{"class":51281},[99,54250,51288],{"class":109},[99,54252,54253],{"class":101,"line":1303},[99,54254,2386],{"emptyLinePlaceholder":26},[99,54256,54257,54259,54261],{"class":101,"line":1315},[99,54258,1020],{"class":109},[99,54260,51781],{"class":51281},[99,54262,51288],{"class":109},[99,54264,54265,54267,54270,54272,54274,54276,54278,54280,54282,54285,54287,54290,54293,54295,54298],{"class":101,"line":1598},[99,54266,52125],{"class":109},[99,54268,54269],{"class":51281},"textarea",[99,54271,14907],{"class":1949},[99,54273,155],{"class":109},[99,54275,7639],{"class":214},[99,54277,14946],{"class":1949},[99,54279,155],{"class":109},[99,54281,7639],{"class":214},[99,54283,54284],{"class":1949}," cols",[99,54286,155],{"class":109},[99,54288,54289],{"class":214},"\"30\"",[99,54291,54292],{"class":1949}," rows",[99,54294,155],{"class":109},[99,54296,54297],{"class":214},"\"10\"",[99,54299,51288],{"class":109},[99,54301,54302],{"class":101,"line":1603},[99,54303,54304],{"class":109},"        用户注册协议\n",[99,54306,54307],{"class":101,"line":1609},[99,54308,54309],{"class":109},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[99,54311,54312],{"class":101,"line":1614},[99,54313,54314],{"class":109},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[99,54316,54317,54319,54321],{"class":101,"line":1628},[99,54318,51757],{"class":109},[99,54320,54269],{"class":51281},[99,54322,51288],{"class":109},[99,54324,54325,54327,54329],{"class":101,"line":1633},[99,54326,52125],{"class":109},[99,54328,53697],{"class":51281},[99,54330,51288],{"class":109},[99,54332,54333,54335,54337,54339,54341,54344,54346,54349,54351],{"class":101,"line":1639},[99,54334,52125],{"class":109},[99,54336,53868],{"class":51281},[99,54338,53467],{"class":1949},[99,54340,155],{"class":109},[99,54342,54343],{"class":214},"\"btn\"",[99,54345,53871],{"class":1949},[99,54347,54348],{"class":109},">我已经阅读用户协议(5)\u003C\u002F",[99,54350,53868],{"class":51281},[99,54352,51288],{"class":109},[99,54354,54355,54357,54359],{"class":101,"line":1660},[99,54356,52125],{"class":109},[99,54358,51794],{"class":51281},[99,54360,51288],{"class":109},[99,54362,54363],{"class":101,"line":1665},[99,54364,54365],{"class":168},"    \u002F\u002F 1. 获取元素\n",[99,54367,54368,54370,54373,54375,54378,54381,54383,54386],{"class":101,"line":1679},[99,54369,11208],{"class":105},[99,54371,54372],{"class":158}," btn",[99,54374,13551],{"class":105},[99,54376,54377],{"class":109}," document.",[99,54379,54380],{"class":1949},"querySelector",[99,54382,110],{"class":109},[99,54384,54385],{"class":214},"'.btn'",[99,54387,116],{"class":109},[99,54389,54390],{"class":101,"line":1684},[99,54391,54392],{"class":168},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[99,54394,54395],{"class":101,"line":1713},[99,54396,54397],{"class":168},"    \u002F\u002F 2. 倒计时\n",[99,54399,54400,54402,54404,54406],{"class":101,"line":1718},[99,54401,52200],{"class":105},[99,54403,9425],{"class":109},[99,54405,155],{"class":105},[99,54407,54408],{"class":158}," 5\n",[99,54410,54411],{"class":101,"line":1735},[99,54412,54413],{"class":168},"    \u002F\u002F 2.1 开启定时器\n",[99,54415,54416,54418,54421,54423,54426,54428,54431],{"class":101,"line":1740},[99,54417,52200],{"class":105},[99,54419,54420],{"class":109}," n ",[99,54422,155],{"class":105},[99,54424,54425],{"class":1949}," setInterval",[99,54427,110],{"class":109},[99,54429,54430],{"class":105},"function",[99,54432,54433],{"class":109}," () {\n",[99,54435,54436,54439],{"class":101,"line":1745},[99,54437,54438],{"class":109},"      i",[99,54440,54441],{"class":105},"--\n",[99,54443,54444,54447,54449,54452,54454],{"class":101,"line":1750},[99,54445,54446],{"class":109},"      btn.innerHTML ",[99,54448,155],{"class":105},[99,54450,54451],{"class":214}," `我已经阅读用户协议(${",[99,54453,551],{"class":109},[99,54455,54456],{"class":214},"})`\n",[99,54458,54459,54462,54465,54468,54470],{"class":101,"line":1764},[99,54460,54461],{"class":105},"      if",[99,54463,54464],{"class":109}," (i ",[99,54466,54467],{"class":105},"===",[99,54469,4079],{"class":158},[99,54471,12429],{"class":109},[99,54473,54474,54477,54480],{"class":101,"line":1769},[99,54475,54476],{"class":1949},"        clearInterval",[99,54478,54479],{"class":109},"(n)  ",[99,54481,54482],{"class":168},"\u002F\u002F 关闭定时器\n",[99,54484,54485],{"class":101,"line":2563},[99,54486,54487],{"class":168},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[99,54489,54490,54493,54495],{"class":101,"line":2577},[99,54491,54492],{"class":109},"        btn.disabled ",[99,54494,155],{"class":105},[99,54496,54497],{"class":158}," false\n",[99,54499,54500,54503,54505],{"class":101,"line":2585},[99,54501,54502],{"class":109},"        btn.innerHTML ",[99,54504,155],{"class":105},[99,54506,54507],{"class":214}," '同意'\n",[99,54509,54510],{"class":101,"line":2590},[99,54511,52379],{"class":109},[99,54513,54514,54517,54519],{"class":101,"line":2596},[99,54515,54516],{"class":109},"    }, ",[99,54518,6397],{"class":158},[99,54520,116],{"class":109},[99,54522,54523],{"class":101,"line":2602},[99,54524,2386],{"emptyLinePlaceholder":26},[99,54526,54527,54529,54531],{"class":101,"line":2607},[99,54528,52398],{"class":109},[99,54530,51794],{"class":51281},[99,54532,51288],{"class":109},[99,54534,54535,54537,54539],{"class":101,"line":7935},[99,54536,51766],{"class":109},[99,54538,51781],{"class":51281},[99,54540,51288],{"class":109},[99,54542,54543],{"class":101,"line":7959},[99,54544,2386],{"emptyLinePlaceholder":26},[99,54546,54547,54549,54551],{"class":101,"line":7964},[99,54548,51766],{"class":109},[99,54550,50616],{"class":51281},[99,54552,51288],{"class":109},[14,54554,54555],{},"不要一直想着用死循环,避免死循环",[14,54557,54558,54561],{},[96,54559,54560],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21985,54563,54565],{"id":54564},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[53,54567,54568],{},[56,54569,54570],{},"法1",[90,54572,54574],{"className":50614,"code":54573,"language":50616,"meta":21,"style":21},"\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",[96,54575,54576,54586,54600,54604,54612,54626,54646,54658,54666,54672,54683,54694,54698,54702,54709,54721,54725,54729,54736,54748,54762,54775,54789,54793,54797,54804,54815,54826,54837,54849,54861,54873,54877,54881,54889,54899,54912,54924,54937,54941,54945,54952,54962,54974,54986,54997,55008,55018,55030,55042,55046,55050,55059,55071,55083,55111,55124,55128,55132,55139,55150,55154,55162,55170,55174,55182,55196,55211,55235,55243,55258,55271,55279,55300,55312,55324,55336,55348,55360,55372,55384,55393,55401,55409,55417,55429,55452,55471,55490,55509,55528,55547,55566,55586,55590,55610,55629,55649,55670,55681,55698,55708,55718,55728,55733,55738,55743,55748,55773,55786,55790,55813,55817,55825,55833,55841,55845],{"__ignoreMap":21},[99,54577,54578,54580,54582,54584],{"class":101,"line":102},[99,54579,51278],{"class":109},[99,54581,51282],{"class":51281},[99,54583,51285],{"class":1949},[99,54585,51288],{"class":109},[99,54587,54588,54590,54592,54594,54596,54598],{"class":101,"line":22},[99,54589,1020],{"class":109},[99,54591,50616],{"class":51281},[99,54593,51297],{"class":1949},[99,54595,155],{"class":109},[99,54597,51302],{"class":214},[99,54599,51288],{"class":109},[99,54601,54602],{"class":101,"line":1165},[99,54603,2386],{"emptyLinePlaceholder":26},[99,54605,54606,54608,54610],{"class":101,"line":1180},[99,54607,1020],{"class":109},[99,54609,51315],{"class":51281},[99,54611,51288],{"class":109},[99,54613,54614,54616,54618,54620,54622,54624],{"class":101,"line":1186},[99,54615,52125],{"class":109},[99,54617,51325],{"class":51281},[99,54619,51328],{"class":1949},[99,54621,155],{"class":109},[99,54623,51333],{"class":214},[99,54625,51288],{"class":109},[99,54627,54628,54630,54632,54634,54636,54638,54640,54642,54644],{"class":101,"line":1200},[99,54629,52125],{"class":109},[99,54631,51325],{"class":51281},[99,54633,14907],{"class":1949},[99,54635,155],{"class":109},[99,54637,51372],{"class":214},[99,54639,51352],{"class":1949},[99,54641,155],{"class":109},[99,54643,51379],{"class":214},[99,54645,51288],{"class":109},[99,54647,54648,54650,54652,54654,54656],{"class":101,"line":1206},[99,54649,52125],{"class":109},[99,54651,51388],{"class":51281},[99,54653,51391],{"class":109},[99,54655,51388],{"class":51281},[99,54657,51288],{"class":109},[99,54659,54660,54662,54664],{"class":101,"line":1297},[99,54661,52125],{"class":109},[99,54663,5113],{"class":51281},[99,54665,51288],{"class":109},[99,54667,54668,54670],{"class":101,"line":1303},[99,54669,6390],{"class":51281},[99,54671,15559],{"class":109},[99,54673,54674,54677,54679,54681],{"class":101,"line":1315},[99,54675,54676],{"class":158},"      padding",[99,54678,51418],{"class":109},[99,54680,301],{"class":158},[99,54682,1276],{"class":109},[99,54684,54685,54688,54690,54692],{"class":101,"line":1598},[99,54686,54687],{"class":158},"      margin",[99,54689,51418],{"class":109},[99,54691,301],{"class":158},[99,54693,1276],{"class":109},[99,54695,54696],{"class":101,"line":1603},[99,54697,2173],{"class":109},[99,54699,54700],{"class":101,"line":1609},[99,54701,2386],{"emptyLinePlaceholder":26},[99,54703,54704,54707],{"class":101,"line":1614},[99,54705,54706],{"class":51281},"    li",[99,54708,15559],{"class":109},[99,54710,54711,54714,54716,54719],{"class":101,"line":1628},[99,54712,54713],{"class":158},"      list-style",[99,54715,51418],{"class":109},[99,54717,54718],{"class":158},"none",[99,54720,1276],{"class":109},[99,54722,54723],{"class":101,"line":1633},[99,54724,2173],{"class":109},[99,54726,54727],{"class":101,"line":1639},[99,54728,2386],{"emptyLinePlaceholder":26},[99,54730,54731,54734],{"class":101,"line":1660},[99,54732,54733],{"class":1949},"    .box",[99,54735,15559],{"class":109},[99,54737,54738,54741,54743,54746],{"class":101,"line":1665},[99,54739,54740],{"class":158},"      position",[99,54742,51418],{"class":109},[99,54744,54745],{"class":158},"relative",[99,54747,1276],{"class":109},[99,54749,54750,54753,54755,54758,54760],{"class":101,"line":1679},[99,54751,54752],{"class":158},"      width",[99,54754,51418],{"class":109},[99,54756,54757],{"class":158},"976",[99,54759,51473],{"class":105},[99,54761,1276],{"class":109},[99,54763,54764,54767,54769,54771,54773],{"class":101,"line":1684},[99,54765,54766],{"class":158},"      height",[99,54768,51418],{"class":109},[99,54770,1525],{"class":158},[99,54772,51473],{"class":105},[99,54774,1276],{"class":109},[99,54776,54777,54779,54781,54783,54785,54787],{"class":101,"line":1713},[99,54778,54687],{"class":158},[99,54780,51418],{"class":109},[99,54782,421],{"class":158},[99,54784,51473],{"class":105},[99,54786,51537],{"class":158},[99,54788,1276],{"class":109},[99,54790,54791],{"class":101,"line":1718},[99,54792,2173],{"class":109},[99,54794,54795],{"class":101,"line":1735},[99,54796,2386],{"emptyLinePlaceholder":26},[99,54798,54799,54802],{"class":101,"line":1740},[99,54800,54801],{"class":1949},"    .slider-footer",[99,54803,15559],{"class":109},[99,54805,54806,54808,54810,54813],{"class":101,"line":1745},[99,54807,54740],{"class":158},[99,54809,51418],{"class":109},[99,54811,54812],{"class":158},"absolute",[99,54814,1276],{"class":109},[99,54816,54817,54820,54822,54824],{"class":101,"line":1750},[99,54818,54819],{"class":158},"      left",[99,54821,51418],{"class":109},[99,54823,301],{"class":158},[99,54825,1276],{"class":109},[99,54827,54828,54831,54833,54835],{"class":101,"line":1764},[99,54829,54830],{"class":158},"      bottom",[99,54832,51418],{"class":109},[99,54834,301],{"class":158},[99,54836,1276],{"class":109},[99,54838,54839,54841,54843,54845,54847],{"class":101,"line":1769},[99,54840,54752],{"class":158},[99,54842,51418],{"class":109},[99,54844,421],{"class":158},[99,54846,438],{"class":105},[99,54848,1276],{"class":109},[99,54850,54851,54853,54855,54857,54859],{"class":101,"line":2563},[99,54852,54766],{"class":158},[99,54854,51418],{"class":109},[99,54856,685],{"class":158},[99,54858,438],{"class":105},[99,54860,1276],{"class":109},[99,54862,54863,54866,54868,54871],{"class":101,"line":2577},[99,54864,54865],{"class":158},"      background-color",[99,54867,51418],{"class":109},[99,54869,54870],{"class":158},"skyblue",[99,54872,1276],{"class":109},[99,54874,54875],{"class":101,"line":2585},[99,54876,2173],{"class":109},[99,54878,54879],{"class":101,"line":2590},[99,54880,2386],{"emptyLinePlaceholder":26},[99,54882,54883,54885,54887],{"class":101,"line":2596},[99,54884,54801],{"class":1949},[99,54886,6812],{"class":51281},[99,54888,15559],{"class":109},[99,54890,54891,54893,54895,54897],{"class":101,"line":2602},[99,54892,54740],{"class":158},[99,54894,51418],{"class":109},[99,54896,54812],{"class":158},[99,54898,1276],{"class":109},[99,54900,54901,54904,54906,54908,54910],{"class":101,"line":2607},[99,54902,54903],{"class":158},"      font-size",[99,54905,51418],{"class":109},[99,54907,1011],{"class":158},[99,54909,51473],{"class":105},[99,54911,1276],{"class":109},[99,54913,54914,54916,54918,54920,54922],{"class":101,"line":7935},[99,54915,54819],{"class":158},[99,54917,51418],{"class":109},[99,54919,810],{"class":158},[99,54921,51473],{"class":105},[99,54923,1276],{"class":109},[99,54925,54926,54929,54931,54933,54935],{"class":101,"line":7959},[99,54927,54928],{"class":158},"      top",[99,54930,51418],{"class":109},[99,54932,429],{"class":158},[99,54934,51473],{"class":105},[99,54936,1276],{"class":109},[99,54938,54939],{"class":101,"line":7964},[99,54940,2173],{"class":109},[99,54942,54943],{"class":101,"line":7970},[99,54944,2386],{"emptyLinePlaceholder":26},[99,54946,54947,54950],{"class":101,"line":7997},[99,54948,54949],{"class":51281},"    ul",[99,54951,15559],{"class":109},[99,54953,54954,54956,54958,54960],{"class":101,"line":8002},[99,54955,54740],{"class":158},[99,54957,51418],{"class":109},[99,54959,54812],{"class":158},[99,54961,1276],{"class":109},[99,54963,54964,54966,54968,54970,54972],{"class":101,"line":8008},[99,54965,54928],{"class":158},[99,54967,51418],{"class":109},[99,54969,891],{"class":158},[99,54971,51473],{"class":105},[99,54973,1276],{"class":109},[99,54975,54976,54978,54980,54982,54984],{"class":101,"line":8020},[99,54977,54819],{"class":158},[99,54979,51418],{"class":109},[99,54981,810],{"class":158},[99,54983,51473],{"class":105},[99,54985,1276],{"class":109},[99,54987,54988,54991,54993,54995],{"class":101,"line":8032},[99,54989,54990],{"class":158},"      display",[99,54992,51418],{"class":109},[99,54994,51458],{"class":158},[99,54996,1276],{"class":109},[99,54998,54999,55002,55004,55006],{"class":101,"line":8044},[99,55000,55001],{"class":158},"      justify-content",[99,55003,51418],{"class":109},[99,55005,51649],{"class":158},[99,55007,1276],{"class":109},[99,55009,55010,55012,55014,55016],{"class":101,"line":9703},[99,55011,54740],{"class":158},[99,55013,51418],{"class":109},[99,55015,54812],{"class":158},[99,55017,1276],{"class":109},[99,55019,55020,55022,55024,55026,55028],{"class":101,"line":9728},[99,55021,54752],{"class":158},[99,55023,51418],{"class":109},[99,55025,3978],{"class":158},[99,55027,51473],{"class":105},[99,55029,1276],{"class":109},[99,55031,55032,55034,55036,55038,55040],{"class":101,"line":9751},[99,55033,54766],{"class":158},[99,55035,51418],{"class":109},[99,55037,810],{"class":158},[99,55039,51473],{"class":105},[99,55041,1276],{"class":109},[99,55043,55044],{"class":101,"line":9775},[99,55045,2173],{"class":109},[99,55047,55048],{"class":101,"line":9780},[99,55049,2386],{"emptyLinePlaceholder":26},[99,55051,55052,55054,55057],{"class":101,"line":9785},[99,55053,54949],{"class":51281},[99,55055,55056],{"class":51281}," li",[99,55058,15559],{"class":109},[99,55060,55061,55063,55065,55067,55069],{"class":101,"line":9790},[99,55062,54752],{"class":158},[99,55064,51418],{"class":109},[99,55066,810],{"class":158},[99,55068,51473],{"class":105},[99,55070,1276],{"class":109},[99,55072,55073,55075,55077,55079,55081],{"class":101,"line":9799},[99,55074,54766],{"class":158},[99,55076,51418],{"class":109},[99,55078,810],{"class":158},[99,55080,51473],{"class":105},[99,55082,1276],{"class":109},[99,55084,55085,55087,55089,55092,55094,55096,55098,55100,55102,55104,55106,55109],{"class":101,"line":9804},[99,55086,54865],{"class":158},[99,55088,51418],{"class":109},[99,55090,55091],{"class":158},"rgba",[99,55093,110],{"class":109},[99,55095,301],{"class":158},[99,55097,12422],{"class":109},[99,55099,301],{"class":158},[99,55101,12422],{"class":109},[99,55103,301],{"class":158},[99,55105,12422],{"class":109},[99,55107,55108],{"class":158},".4",[99,55110,2705],{"class":109},[99,55112,55113,55116,55118,55120,55122],{"class":101,"line":9810},[99,55114,55115],{"class":158},"      border-radius",[99,55117,51418],{"class":109},[99,55119,556],{"class":158},[99,55121,51473],{"class":105},[99,55123,1276],{"class":109},[99,55125,55126],{"class":101,"line":9831},[99,55127,2173],{"class":109},[99,55129,55130],{"class":101,"line":9837},[99,55131,2386],{"emptyLinePlaceholder":26},[99,55133,55134,55137],{"class":101,"line":9851},[99,55135,55136],{"class":1949},"    .activate",[99,55138,15559],{"class":109},[99,55140,55141,55143,55145,55148],{"class":101,"line":9857},[99,55142,54865],{"class":158},[99,55144,51418],{"class":109},[99,55146,55147],{"class":158},"#f7f7f7",[99,55149,1276],{"class":109},[99,55151,55152],{"class":101,"line":9884},[99,55153,2173],{"class":109},[99,55155,55156,55158,55160],{"class":101,"line":9893},[99,55157,52398],{"class":109},[99,55159,5113],{"class":51281},[99,55161,51288],{"class":109},[99,55163,55164,55166,55168],{"class":101,"line":9899},[99,55165,51766],{"class":109},[99,55167,51315],{"class":51281},[99,55169,51288],{"class":109},[99,55171,55172],{"class":101,"line":9907},[99,55173,2386],{"emptyLinePlaceholder":26},[99,55175,55176,55178,55180],{"class":101,"line":9912},[99,55177,1020],{"class":109},[99,55179,51781],{"class":51281},[99,55181,51288],{"class":109},[99,55183,55184,55186,55188,55190,55192,55194],{"class":101,"line":16591},[99,55185,52125],{"class":109},[99,55187,51592],{"class":51281},[99,55189,53467],{"class":1949},[99,55191,155],{"class":109},[99,55193,53472],{"class":214},[99,55195,51288],{"class":109},[99,55197,55198,55200,55202,55204,55206,55209],{"class":101,"line":16597},[99,55199,51322],{"class":109},[99,55201,51592],{"class":51281},[99,55203,53467],{"class":1949},[99,55205,155],{"class":109},[99,55207,55208],{"class":214},"\"slider-wrapper\"",[99,55210,51288],{"class":109},[99,55212,55213,55216,55218,55221,55223,55226,55229,55231,55233],{"class":101,"line":16620},[99,55214,55215],{"class":109},"      \u003C",[99,55217,1448],{"class":51281},[99,55219,55220],{"class":1949}," src",[99,55222,155],{"class":109},[99,55224,55225],{"class":214},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[99,55227,55228],{"class":1949}," alt",[99,55230,155],{"class":109},[99,55232,7639],{"class":214},[99,55234,51288],{"class":109},[99,55236,55237,55239,55241],{"class":101,"line":16626},[99,55238,51757],{"class":109},[99,55240,51592],{"class":51281},[99,55242,51288],{"class":109},[99,55244,55245,55247,55249,55251,55253,55256],{"class":101,"line":16649},[99,55246,51322],{"class":109},[99,55248,51592],{"class":51281},[99,55250,53467],{"class":1949},[99,55252,155],{"class":109},[99,55254,55255],{"class":214},"\"slider-footer\"",[99,55257,51288],{"class":109},[99,55259,55260,55262,55264,55267,55269],{"class":101,"line":16663},[99,55261,55215],{"class":109},[99,55263,14],{"class":51281},[99,55265,55266],{"class":109},">对人类来说会不会太超前了?\u003C\u002F",[99,55268,14],{"class":51281},[99,55270,51288],{"class":109},[99,55272,55273,55275,55277],{"class":101,"line":16683},[99,55274,55215],{"class":109},[99,55276,1117],{"class":51281},[99,55278,51288],{"class":109},[99,55280,55281,55284,55286,55288,55290,55293,55296,55298],{"class":101,"line":16689},[99,55282,55283],{"class":109},"        \u003C",[99,55285,56],{"class":51281},[99,55287,53467],{"class":1949},[99,55289,155],{"class":109},[99,55291,55292],{"class":214},"\"activate\"",[99,55294,55295],{"class":109},">\u003C\u002F",[99,55297,56],{"class":51281},[99,55299,51288],{"class":109},[99,55301,55302,55304,55306,55308,55310],{"class":101,"line":16700},[99,55303,55283],{"class":109},[99,55305,56],{"class":51281},[99,55307,55295],{"class":109},[99,55309,56],{"class":51281},[99,55311,51288],{"class":109},[99,55313,55314,55316,55318,55320,55322],{"class":101,"line":16723},[99,55315,55283],{"class":109},[99,55317,56],{"class":51281},[99,55319,55295],{"class":109},[99,55321,56],{"class":51281},[99,55323,51288],{"class":109},[99,55325,55326,55328,55330,55332,55334],{"class":101,"line":16745},[99,55327,55283],{"class":109},[99,55329,56],{"class":51281},[99,55331,55295],{"class":109},[99,55333,56],{"class":51281},[99,55335,51288],{"class":109},[99,55337,55338,55340,55342,55344,55346],{"class":101,"line":16750},[99,55339,55283],{"class":109},[99,55341,56],{"class":51281},[99,55343,55295],{"class":109},[99,55345,56],{"class":51281},[99,55347,51288],{"class":109},[99,55349,55350,55352,55354,55356,55358],{"class":101,"line":16756},[99,55351,55283],{"class":109},[99,55353,56],{"class":51281},[99,55355,55295],{"class":109},[99,55357,56],{"class":51281},[99,55359,51288],{"class":109},[99,55361,55362,55364,55366,55368,55370],{"class":101,"line":16770},[99,55363,55283],{"class":109},[99,55365,56],{"class":51281},[99,55367,55295],{"class":109},[99,55369,56],{"class":51281},[99,55371,51288],{"class":109},[99,55373,55374,55376,55378,55380,55382],{"class":101,"line":16783},[99,55375,55283],{"class":109},[99,55377,56],{"class":51281},[99,55379,55295],{"class":109},[99,55381,56],{"class":51281},[99,55383,51288],{"class":109},[99,55385,55386,55389,55391],{"class":101,"line":16788},[99,55387,55388],{"class":109},"      \u003C\u002F",[99,55390,1117],{"class":51281},[99,55392,51288],{"class":109},[99,55394,55395,55397,55399],{"class":101,"line":16802},[99,55396,51757],{"class":109},[99,55398,51592],{"class":51281},[99,55400,51288],{"class":109},[99,55402,55403,55405,55407],{"class":101,"line":16807},[99,55404,52398],{"class":109},[99,55406,51592],{"class":51281},[99,55408,51288],{"class":109},[99,55410,55411,55413,55415],{"class":101,"line":16813},[99,55412,52125],{"class":109},[99,55414,51794],{"class":51281},[99,55416,51288],{"class":109},[99,55418,55419,55421,55424,55426],{"class":101,"line":16818},[99,55420,11208],{"class":105},[99,55422,55423],{"class":158}," arrImage",[99,55425,13551],{"class":105},[99,55427,55428],{"class":109}," [\n",[99,55430,55431,55434,55437,55440,55443,55446,55449],{"class":101,"line":16832},[99,55432,55433],{"class":109},"      { url: ",[99,55435,55436],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[99,55438,55439],{"class":109},", title: ",[99,55441,55442],{"class":214},"'对人类来说会不会太超前了?'",[99,55444,55445],{"class":109},", color: ",[99,55447,55448],{"class":214},"'rgba(100,67,68)'",[99,55450,55451],{"class":109}," },\n",[99,55453,55454,55456,55459,55461,55464,55466,55469],{"class":101,"line":16837},[99,55455,55433],{"class":109},[99,55457,55458],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[99,55460,55439],{"class":109},[99,55462,55463],{"class":214},"'开启剑与雪的黑暗传说!'",[99,55465,55445],{"class":109},[99,55467,55468],{"class":214},"'rgba(43,35,26)'",[99,55470,55451],{"class":109},[99,55472,55473,55475,55478,55480,55483,55485,55488],{"class":101,"line":16842},[99,55474,55433],{"class":109},[99,55476,55477],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[99,55479,55439],{"class":109},[99,55481,55482],{"class":214},"'真正的jo厨出现了!'",[99,55484,55445],{"class":109},[99,55486,55487],{"class":214},"'rgba(36,31,33)'",[99,55489,55451],{"class":109},[99,55491,55492,55494,55497,55499,55502,55504,55507],{"class":101,"line":16856},[99,55493,55433],{"class":109},[99,55495,55496],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[99,55498,55439],{"class":109},[99,55500,55501],{"class":214},"'李玉刚:让世界通过b站看到东方大国文化'",[99,55503,55445],{"class":109},[99,55505,55506],{"class":214},"'rgba(139,98,66)'",[99,55508,55451],{"class":109},[99,55510,55511,55513,55516,55518,55521,55523,55526],{"class":101,"line":16868},[99,55512,55433],{"class":109},[99,55514,55515],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[99,55517,55439],{"class":109},[99,55519,55520],{"class":214},"'快来分享你的寒假日常吧'",[99,55522,55445],{"class":109},[99,55524,55525],{"class":214},"'rgba(67,90,92)'",[99,55527,55451],{"class":109},[99,55529,55530,55532,55535,55537,55540,55542,55545],{"class":101,"line":16873},[99,55531,55433],{"class":109},[99,55533,55534],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[99,55536,55439],{"class":109},[99,55538,55539],{"class":214},"'哔哩哔哩小年YEAR'",[99,55541,55445],{"class":109},[99,55543,55544],{"class":214},"'rgba(166,131,143)'",[99,55546,55451],{"class":109},[99,55548,55549,55551,55554,55556,55559,55561,55564],{"class":101,"line":16886},[99,55550,55433],{"class":109},[99,55552,55553],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[99,55555,55439],{"class":109},[99,55557,55558],{"class":214},"'一站式解决你的电脑配置问题'",[99,55560,55445],{"class":109},[99,55562,55563],{"class":214},"'rgba(53,29,25)'",[99,55565,55451],{"class":109},[99,55567,55568,55570,55573,55575,55578,55580,55583],{"class":101,"line":16891},[99,55569,55433],{"class":109},[99,55571,55572],{"class":214},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[99,55574,55439],{"class":109},[99,55576,55577],{"class":214},"'谁不想和小猫咪贴贴呢?'",[99,55579,55445],{"class":109},[99,55581,55582],{"class":214},"'rgba(99,72,114)'",[99,55584,55585],{"class":109}," }\n",[99,55587,55588],{"class":101,"line":16896},[99,55589,53090],{"class":109},[99,55591,55592,55594,55597,55599,55601,55603,55605,55608],{"class":101,"line":16901},[99,55593,11208],{"class":105},[99,55595,55596],{"class":158}," img",[99,55598,13551],{"class":105},[99,55600,54377],{"class":109},[99,55602,54380],{"class":1949},[99,55604,110],{"class":109},[99,55606,55607],{"class":214},"'.slider-wrapper img'",[99,55609,116],{"class":109},[99,55611,55612,55614,55616,55618,55620,55622,55624,55627],{"class":101,"line":16914},[99,55613,11208],{"class":105},[99,55615,6812],{"class":158},[99,55617,13551],{"class":105},[99,55619,54377],{"class":109},[99,55621,54380],{"class":1949},[99,55623,110],{"class":109},[99,55625,55626],{"class":214},"'.slider-footer p'",[99,55628,116],{"class":109},[99,55630,55631,55633,55636,55638,55640,55642,55644,55647],{"class":101,"line":16919},[99,55632,11208],{"class":105},[99,55634,55635],{"class":158}," color",[99,55637,13551],{"class":105},[99,55639,54377],{"class":109},[99,55641,54380],{"class":1949},[99,55643,110],{"class":109},[99,55645,55646],{"class":214},"'.slider-footer'",[99,55648,116],{"class":109},[99,55650,55651,55653,55656,55658,55660,55663,55665,55668],{"class":101,"line":32614},[99,55652,11208],{"class":105},[99,55654,55655],{"class":158}," lis",[99,55657,13551],{"class":105},[99,55659,54377],{"class":109},[99,55661,55662],{"class":1949},"querySelectorAll",[99,55664,110],{"class":109},[99,55666,55667],{"class":214},"'.slider-footer ul li'",[99,55669,116],{"class":109},[99,55671,55672,55674,55676,55678],{"class":101,"line":32620},[99,55673,52200],{"class":105},[99,55675,9425],{"class":109},[99,55677,155],{"class":105},[99,55679,55680],{"class":158}," 1\n",[99,55682,55683,55685,55688,55690,55692,55694,55696],{"class":101,"line":32626},[99,55684,52200],{"class":105},[99,55686,55687],{"class":109}," timer ",[99,55689,155],{"class":105},[99,55691,54425],{"class":1949},[99,55693,110],{"class":109},[99,55695,54430],{"class":105},[99,55697,54433],{"class":109},[99,55699,55700,55703,55705],{"class":101,"line":32632},[99,55701,55702],{"class":109},"      img.src ",[99,55704,155],{"class":105},[99,55706,55707],{"class":109}," arrImage[i].url\n",[99,55709,55710,55713,55715],{"class":101,"line":32638},[99,55711,55712],{"class":109},"      p.innerHTML ",[99,55714,155],{"class":105},[99,55716,55717],{"class":109}," arrImage[i].title\n",[99,55719,55720,55723,55725],{"class":101,"line":32649},[99,55721,55722],{"class":109},"      color.style.backgroundColor ",[99,55724,155],{"class":105},[99,55726,55727],{"class":109}," arrImage[i].color\n",[99,55729,55730],{"class":101,"line":32655},[99,55731,55732],{"class":168},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[99,55734,55735],{"class":101,"line":32675},[99,55736,55737],{"class":168},"      \u002F\u002F li.classList.add('activate')\n",[99,55739,55740],{"class":101,"line":32681},[99,55741,55742],{"class":168},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[99,55744,55745],{"class":101,"line":32692},[99,55746,55747],{"class":168},"      \u002F\u002F lis[i].classList.remove('activate')\n",[99,55749,55750,55753,55755,55757,55760,55763,55766,55768,55771],{"class":101,"line":32698},[99,55751,55752],{"class":109},"      document.",[99,55754,54380],{"class":1949},[99,55756,110],{"class":109},[99,55758,55759],{"class":214},"'.activate'",[99,55761,55762],{"class":109},")?.classList.",[99,55764,55765],{"class":1949},"toggle",[99,55767,110],{"class":109},[99,55769,55770],{"class":214},"'activate'",[99,55772,116],{"class":109},[99,55774,55775,55778,55780,55782,55784],{"class":101,"line":32704},[99,55776,55777],{"class":109},"      lis[i].classList.",[99,55779,5321],{"class":1949},[99,55781,110],{"class":109},[99,55783,55770],{"class":214},[99,55785,116],{"class":109},[99,55787,55788],{"class":101,"line":32710},[99,55789,2386],{"emptyLinePlaceholder":26},[99,55791,55792,55795,55797,55799,55801,55803,55805,55807,55810],{"class":101,"line":32716},[99,55793,55794],{"class":109},"      i ",[99,55796,155],{"class":105},[99,55798,54464],{"class":109},[99,55800,591],{"class":105},[99,55802,25107],{"class":158},[99,55804,13701],{"class":109},[99,55806,438],{"class":105},[99,55808,55809],{"class":109}," arrImage.",[99,55811,55812],{"class":158},"length\n",[99,55814,55815],{"class":101,"line":32722},[99,55816,2386],{"emptyLinePlaceholder":26},[99,55818,55819,55821,55823],{"class":101,"line":32728},[99,55820,54516],{"class":109},[99,55822,6397],{"class":158},[99,55824,116],{"class":109},[99,55826,55827,55829,55831],{"class":101,"line":32734},[99,55828,52398],{"class":109},[99,55830,51794],{"class":51281},[99,55832,51288],{"class":109},[99,55834,55835,55837,55839],{"class":101,"line":32754},[99,55836,51766],{"class":109},[99,55838,51781],{"class":51281},[99,55840,51288],{"class":109},[99,55842,55843],{"class":101,"line":32760},[99,55844,2386],{"emptyLinePlaceholder":26},[99,55846,55847,55849,55851],{"class":101,"line":32776},[99,55848,51766],{"class":109},[99,55850,50616],{"class":51281},[99,55852,51288],{"class":109},[14,55854,55855],{},[1448,55856],{"alt":21,"src":55857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55859,55860],{},"?.就是短路保护,确保输出正常进行",[14,55862,55863],{},"不要忘记取余%,有时候可以用",[14,55865,55866],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[53,55868,55869],{"start":22},[56,55870,55871],{},"法2",[90,55873,55875],{"className":50614,"code":55874,"language":50616,"meta":21,"style":21},"\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",[96,55876,55877,55887,55901,55905,55913,55927,55947,55959,55967,55973,55983,55993,55997,56001,56007,56017,56021,56025,56031,56041,56053,56065,56079,56083,56087,56093,56103,56113,56123,56135,56147,56157,56161,56165,56173,56183,56195,56207,56219,56223,56227,56233,56243,56255,56267,56277,56287,56297,56309,56321,56325,56329,56337,56349,56361,56387,56399,56403,56407,56413,56423,56427,56435,56443,56447,56455,56469,56483,56503,56511,56525,56537,56545,56563,56575,56587,56599,56611,56623,56635,56647,56655,56663,56671,56679,56690,56706,56722,56738,56754,56770,56786,56802,56818,56822,56827,56845,56863,56873,56878,56883,56894,56900,56915,56924,56928,56933,56942,56947,56956,56961,56966,56971,56994,57024,57028,57036,57040,57048,57056,57060],{"__ignoreMap":21},[99,55878,55879,55881,55883,55885],{"class":101,"line":102},[99,55880,51278],{"class":109},[99,55882,51282],{"class":51281},[99,55884,51285],{"class":1949},[99,55886,51288],{"class":109},[99,55888,55889,55891,55893,55895,55897,55899],{"class":101,"line":22},[99,55890,1020],{"class":109},[99,55892,50616],{"class":51281},[99,55894,51297],{"class":1949},[99,55896,155],{"class":109},[99,55898,51302],{"class":214},[99,55900,51288],{"class":109},[99,55902,55903],{"class":101,"line":1165},[99,55904,2386],{"emptyLinePlaceholder":26},[99,55906,55907,55909,55911],{"class":101,"line":1180},[99,55908,1020],{"class":109},[99,55910,51315],{"class":51281},[99,55912,51288],{"class":109},[99,55914,55915,55917,55919,55921,55923,55925],{"class":101,"line":1186},[99,55916,52125],{"class":109},[99,55918,51325],{"class":51281},[99,55920,51328],{"class":1949},[99,55922,155],{"class":109},[99,55924,51333],{"class":214},[99,55926,51288],{"class":109},[99,55928,55929,55931,55933,55935,55937,55939,55941,55943,55945],{"class":101,"line":1200},[99,55930,52125],{"class":109},[99,55932,51325],{"class":51281},[99,55934,14907],{"class":1949},[99,55936,155],{"class":109},[99,55938,51372],{"class":214},[99,55940,51352],{"class":1949},[99,55942,155],{"class":109},[99,55944,51379],{"class":214},[99,55946,51288],{"class":109},[99,55948,55949,55951,55953,55955,55957],{"class":101,"line":1206},[99,55950,52125],{"class":109},[99,55952,51388],{"class":51281},[99,55954,51391],{"class":109},[99,55956,51388],{"class":51281},[99,55958,51288],{"class":109},[99,55960,55961,55963,55965],{"class":101,"line":1297},[99,55962,52125],{"class":109},[99,55964,5113],{"class":51281},[99,55966,51288],{"class":109},[99,55968,55969,55971],{"class":101,"line":1303},[99,55970,6390],{"class":51281},[99,55972,15559],{"class":109},[99,55974,55975,55977,55979,55981],{"class":101,"line":1315},[99,55976,54676],{"class":158},[99,55978,51418],{"class":109},[99,55980,301],{"class":158},[99,55982,1276],{"class":109},[99,55984,55985,55987,55989,55991],{"class":101,"line":1598},[99,55986,54687],{"class":158},[99,55988,51418],{"class":109},[99,55990,301],{"class":158},[99,55992,1276],{"class":109},[99,55994,55995],{"class":101,"line":1603},[99,55996,2173],{"class":109},[99,55998,55999],{"class":101,"line":1609},[99,56000,2386],{"emptyLinePlaceholder":26},[99,56002,56003,56005],{"class":101,"line":1614},[99,56004,54706],{"class":51281},[99,56006,15559],{"class":109},[99,56008,56009,56011,56013,56015],{"class":101,"line":1628},[99,56010,54713],{"class":158},[99,56012,51418],{"class":109},[99,56014,54718],{"class":158},[99,56016,1276],{"class":109},[99,56018,56019],{"class":101,"line":1633},[99,56020,2173],{"class":109},[99,56022,56023],{"class":101,"line":1639},[99,56024,2386],{"emptyLinePlaceholder":26},[99,56026,56027,56029],{"class":101,"line":1660},[99,56028,54733],{"class":1949},[99,56030,15559],{"class":109},[99,56032,56033,56035,56037,56039],{"class":101,"line":1665},[99,56034,54740],{"class":158},[99,56036,51418],{"class":109},[99,56038,54745],{"class":158},[99,56040,1276],{"class":109},[99,56042,56043,56045,56047,56049,56051],{"class":101,"line":1679},[99,56044,54752],{"class":158},[99,56046,51418],{"class":109},[99,56048,54757],{"class":158},[99,56050,51473],{"class":105},[99,56052,1276],{"class":109},[99,56054,56055,56057,56059,56061,56063],{"class":101,"line":1684},[99,56056,54766],{"class":158},[99,56058,51418],{"class":109},[99,56060,1525],{"class":158},[99,56062,51473],{"class":105},[99,56064,1276],{"class":109},[99,56066,56067,56069,56071,56073,56075,56077],{"class":101,"line":1713},[99,56068,54687],{"class":158},[99,56070,51418],{"class":109},[99,56072,421],{"class":158},[99,56074,51473],{"class":105},[99,56076,51537],{"class":158},[99,56078,1276],{"class":109},[99,56080,56081],{"class":101,"line":1718},[99,56082,2173],{"class":109},[99,56084,56085],{"class":101,"line":1735},[99,56086,2386],{"emptyLinePlaceholder":26},[99,56088,56089,56091],{"class":101,"line":1740},[99,56090,54801],{"class":1949},[99,56092,15559],{"class":109},[99,56094,56095,56097,56099,56101],{"class":101,"line":1745},[99,56096,54740],{"class":158},[99,56098,51418],{"class":109},[99,56100,54812],{"class":158},[99,56102,1276],{"class":109},[99,56104,56105,56107,56109,56111],{"class":101,"line":1750},[99,56106,54819],{"class":158},[99,56108,51418],{"class":109},[99,56110,301],{"class":158},[99,56112,1276],{"class":109},[99,56114,56115,56117,56119,56121],{"class":101,"line":1764},[99,56116,54830],{"class":158},[99,56118,51418],{"class":109},[99,56120,301],{"class":158},[99,56122,1276],{"class":109},[99,56124,56125,56127,56129,56131,56133],{"class":101,"line":1769},[99,56126,54752],{"class":158},[99,56128,51418],{"class":109},[99,56130,421],{"class":158},[99,56132,438],{"class":105},[99,56134,1276],{"class":109},[99,56136,56137,56139,56141,56143,56145],{"class":101,"line":2563},[99,56138,54766],{"class":158},[99,56140,51418],{"class":109},[99,56142,685],{"class":158},[99,56144,438],{"class":105},[99,56146,1276],{"class":109},[99,56148,56149,56151,56153,56155],{"class":101,"line":2577},[99,56150,54865],{"class":158},[99,56152,51418],{"class":109},[99,56154,54870],{"class":158},[99,56156,1276],{"class":109},[99,56158,56159],{"class":101,"line":2585},[99,56160,2173],{"class":109},[99,56162,56163],{"class":101,"line":2590},[99,56164,2386],{"emptyLinePlaceholder":26},[99,56166,56167,56169,56171],{"class":101,"line":2596},[99,56168,54801],{"class":1949},[99,56170,6812],{"class":51281},[99,56172,15559],{"class":109},[99,56174,56175,56177,56179,56181],{"class":101,"line":2602},[99,56176,54740],{"class":158},[99,56178,51418],{"class":109},[99,56180,54812],{"class":158},[99,56182,1276],{"class":109},[99,56184,56185,56187,56189,56191,56193],{"class":101,"line":2607},[99,56186,54903],{"class":158},[99,56188,51418],{"class":109},[99,56190,1011],{"class":158},[99,56192,51473],{"class":105},[99,56194,1276],{"class":109},[99,56196,56197,56199,56201,56203,56205],{"class":101,"line":7935},[99,56198,54819],{"class":158},[99,56200,51418],{"class":109},[99,56202,810],{"class":158},[99,56204,51473],{"class":105},[99,56206,1276],{"class":109},[99,56208,56209,56211,56213,56215,56217],{"class":101,"line":7959},[99,56210,54928],{"class":158},[99,56212,51418],{"class":109},[99,56214,429],{"class":158},[99,56216,51473],{"class":105},[99,56218,1276],{"class":109},[99,56220,56221],{"class":101,"line":7964},[99,56222,2173],{"class":109},[99,56224,56225],{"class":101,"line":7970},[99,56226,2386],{"emptyLinePlaceholder":26},[99,56228,56229,56231],{"class":101,"line":7997},[99,56230,54949],{"class":51281},[99,56232,15559],{"class":109},[99,56234,56235,56237,56239,56241],{"class":101,"line":8002},[99,56236,54740],{"class":158},[99,56238,51418],{"class":109},[99,56240,54812],{"class":158},[99,56242,1276],{"class":109},[99,56244,56245,56247,56249,56251,56253],{"class":101,"line":8008},[99,56246,54928],{"class":158},[99,56248,51418],{"class":109},[99,56250,891],{"class":158},[99,56252,51473],{"class":105},[99,56254,1276],{"class":109},[99,56256,56257,56259,56261,56263,56265],{"class":101,"line":8020},[99,56258,54819],{"class":158},[99,56260,51418],{"class":109},[99,56262,810],{"class":158},[99,56264,51473],{"class":105},[99,56266,1276],{"class":109},[99,56268,56269,56271,56273,56275],{"class":101,"line":8032},[99,56270,54990],{"class":158},[99,56272,51418],{"class":109},[99,56274,51458],{"class":158},[99,56276,1276],{"class":109},[99,56278,56279,56281,56283,56285],{"class":101,"line":8044},[99,56280,55001],{"class":158},[99,56282,51418],{"class":109},[99,56284,51649],{"class":158},[99,56286,1276],{"class":109},[99,56288,56289,56291,56293,56295],{"class":101,"line":9703},[99,56290,54740],{"class":158},[99,56292,51418],{"class":109},[99,56294,54812],{"class":158},[99,56296,1276],{"class":109},[99,56298,56299,56301,56303,56305,56307],{"class":101,"line":9728},[99,56300,54752],{"class":158},[99,56302,51418],{"class":109},[99,56304,3978],{"class":158},[99,56306,51473],{"class":105},[99,56308,1276],{"class":109},[99,56310,56311,56313,56315,56317,56319],{"class":101,"line":9751},[99,56312,54766],{"class":158},[99,56314,51418],{"class":109},[99,56316,810],{"class":158},[99,56318,51473],{"class":105},[99,56320,1276],{"class":109},[99,56322,56323],{"class":101,"line":9775},[99,56324,2173],{"class":109},[99,56326,56327],{"class":101,"line":9780},[99,56328,2386],{"emptyLinePlaceholder":26},[99,56330,56331,56333,56335],{"class":101,"line":9785},[99,56332,54949],{"class":51281},[99,56334,55056],{"class":51281},[99,56336,15559],{"class":109},[99,56338,56339,56341,56343,56345,56347],{"class":101,"line":9790},[99,56340,54752],{"class":158},[99,56342,51418],{"class":109},[99,56344,810],{"class":158},[99,56346,51473],{"class":105},[99,56348,1276],{"class":109},[99,56350,56351,56353,56355,56357,56359],{"class":101,"line":9799},[99,56352,54766],{"class":158},[99,56354,51418],{"class":109},[99,56356,810],{"class":158},[99,56358,51473],{"class":105},[99,56360,1276],{"class":109},[99,56362,56363,56365,56367,56369,56371,56373,56375,56377,56379,56381,56383,56385],{"class":101,"line":9804},[99,56364,54865],{"class":158},[99,56366,51418],{"class":109},[99,56368,55091],{"class":158},[99,56370,110],{"class":109},[99,56372,301],{"class":158},[99,56374,12422],{"class":109},[99,56376,301],{"class":158},[99,56378,12422],{"class":109},[99,56380,301],{"class":158},[99,56382,12422],{"class":109},[99,56384,55108],{"class":158},[99,56386,2705],{"class":109},[99,56388,56389,56391,56393,56395,56397],{"class":101,"line":9810},[99,56390,55115],{"class":158},[99,56392,51418],{"class":109},[99,56394,556],{"class":158},[99,56396,51473],{"class":105},[99,56398,1276],{"class":109},[99,56400,56401],{"class":101,"line":9831},[99,56402,2173],{"class":109},[99,56404,56405],{"class":101,"line":9837},[99,56406,2386],{"emptyLinePlaceholder":26},[99,56408,56409,56411],{"class":101,"line":9851},[99,56410,55136],{"class":1949},[99,56412,15559],{"class":109},[99,56414,56415,56417,56419,56421],{"class":101,"line":9857},[99,56416,54865],{"class":158},[99,56418,51418],{"class":109},[99,56420,55147],{"class":158},[99,56422,1276],{"class":109},[99,56424,56425],{"class":101,"line":9884},[99,56426,2173],{"class":109},[99,56428,56429,56431,56433],{"class":101,"line":9893},[99,56430,52398],{"class":109},[99,56432,5113],{"class":51281},[99,56434,51288],{"class":109},[99,56436,56437,56439,56441],{"class":101,"line":9899},[99,56438,51766],{"class":109},[99,56440,51315],{"class":51281},[99,56442,51288],{"class":109},[99,56444,56445],{"class":101,"line":9907},[99,56446,2386],{"emptyLinePlaceholder":26},[99,56448,56449,56451,56453],{"class":101,"line":9912},[99,56450,1020],{"class":109},[99,56452,51781],{"class":51281},[99,56454,51288],{"class":109},[99,56456,56457,56459,56461,56463,56465,56467],{"class":101,"line":16591},[99,56458,52125],{"class":109},[99,56460,51592],{"class":51281},[99,56462,53467],{"class":1949},[99,56464,155],{"class":109},[99,56466,53472],{"class":214},[99,56468,51288],{"class":109},[99,56470,56471,56473,56475,56477,56479,56481],{"class":101,"line":16597},[99,56472,51322],{"class":109},[99,56474,51592],{"class":51281},[99,56476,53467],{"class":1949},[99,56478,155],{"class":109},[99,56480,55208],{"class":214},[99,56482,51288],{"class":109},[99,56484,56485,56487,56489,56491,56493,56495,56497,56499,56501],{"class":101,"line":16620},[99,56486,55215],{"class":109},[99,56488,1448],{"class":51281},[99,56490,55220],{"class":1949},[99,56492,155],{"class":109},[99,56494,55225],{"class":214},[99,56496,55228],{"class":1949},[99,56498,155],{"class":109},[99,56500,7639],{"class":214},[99,56502,51288],{"class":109},[99,56504,56505,56507,56509],{"class":101,"line":16626},[99,56506,51757],{"class":109},[99,56508,51592],{"class":51281},[99,56510,51288],{"class":109},[99,56512,56513,56515,56517,56519,56521,56523],{"class":101,"line":16649},[99,56514,51322],{"class":109},[99,56516,51592],{"class":51281},[99,56518,53467],{"class":1949},[99,56520,155],{"class":109},[99,56522,55255],{"class":214},[99,56524,51288],{"class":109},[99,56526,56527,56529,56531,56533,56535],{"class":101,"line":16663},[99,56528,55215],{"class":109},[99,56530,14],{"class":51281},[99,56532,55266],{"class":109},[99,56534,14],{"class":51281},[99,56536,51288],{"class":109},[99,56538,56539,56541,56543],{"class":101,"line":16683},[99,56540,55215],{"class":109},[99,56542,1117],{"class":51281},[99,56544,51288],{"class":109},[99,56546,56547,56549,56551,56553,56555,56557,56559,56561],{"class":101,"line":16689},[99,56548,55283],{"class":109},[99,56550,56],{"class":51281},[99,56552,53467],{"class":1949},[99,56554,155],{"class":109},[99,56556,55292],{"class":214},[99,56558,55295],{"class":109},[99,56560,56],{"class":51281},[99,56562,51288],{"class":109},[99,56564,56565,56567,56569,56571,56573],{"class":101,"line":16700},[99,56566,55283],{"class":109},[99,56568,56],{"class":51281},[99,56570,55295],{"class":109},[99,56572,56],{"class":51281},[99,56574,51288],{"class":109},[99,56576,56577,56579,56581,56583,56585],{"class":101,"line":16723},[99,56578,55283],{"class":109},[99,56580,56],{"class":51281},[99,56582,55295],{"class":109},[99,56584,56],{"class":51281},[99,56586,51288],{"class":109},[99,56588,56589,56591,56593,56595,56597],{"class":101,"line":16745},[99,56590,55283],{"class":109},[99,56592,56],{"class":51281},[99,56594,55295],{"class":109},[99,56596,56],{"class":51281},[99,56598,51288],{"class":109},[99,56600,56601,56603,56605,56607,56609],{"class":101,"line":16750},[99,56602,55283],{"class":109},[99,56604,56],{"class":51281},[99,56606,55295],{"class":109},[99,56608,56],{"class":51281},[99,56610,51288],{"class":109},[99,56612,56613,56615,56617,56619,56621],{"class":101,"line":16756},[99,56614,55283],{"class":109},[99,56616,56],{"class":51281},[99,56618,55295],{"class":109},[99,56620,56],{"class":51281},[99,56622,51288],{"class":109},[99,56624,56625,56627,56629,56631,56633],{"class":101,"line":16770},[99,56626,55283],{"class":109},[99,56628,56],{"class":51281},[99,56630,55295],{"class":109},[99,56632,56],{"class":51281},[99,56634,51288],{"class":109},[99,56636,56637,56639,56641,56643,56645],{"class":101,"line":16783},[99,56638,55283],{"class":109},[99,56640,56],{"class":51281},[99,56642,55295],{"class":109},[99,56644,56],{"class":51281},[99,56646,51288],{"class":109},[99,56648,56649,56651,56653],{"class":101,"line":16788},[99,56650,55388],{"class":109},[99,56652,1117],{"class":51281},[99,56654,51288],{"class":109},[99,56656,56657,56659,56661],{"class":101,"line":16802},[99,56658,51757],{"class":109},[99,56660,51592],{"class":51281},[99,56662,51288],{"class":109},[99,56664,56665,56667,56669],{"class":101,"line":16807},[99,56666,52398],{"class":109},[99,56668,51592],{"class":51281},[99,56670,51288],{"class":109},[99,56672,56673,56675,56677],{"class":101,"line":16813},[99,56674,52125],{"class":109},[99,56676,51794],{"class":51281},[99,56678,51288],{"class":109},[99,56680,56681,56683,56686,56688],{"class":101,"line":16818},[99,56682,11208],{"class":105},[99,56684,56685],{"class":158}," sliderData",[99,56687,13551],{"class":105},[99,56689,55428],{"class":109},[99,56691,56692,56694,56696,56698,56700,56702,56704],{"class":101,"line":16832},[99,56693,55433],{"class":109},[99,56695,55436],{"class":214},[99,56697,55439],{"class":109},[99,56699,55442],{"class":214},[99,56701,55445],{"class":109},[99,56703,55448],{"class":214},[99,56705,55451],{"class":109},[99,56707,56708,56710,56712,56714,56716,56718,56720],{"class":101,"line":16837},[99,56709,55433],{"class":109},[99,56711,55458],{"class":214},[99,56713,55439],{"class":109},[99,56715,55463],{"class":214},[99,56717,55445],{"class":109},[99,56719,55468],{"class":214},[99,56721,55451],{"class":109},[99,56723,56724,56726,56728,56730,56732,56734,56736],{"class":101,"line":16842},[99,56725,55433],{"class":109},[99,56727,55477],{"class":214},[99,56729,55439],{"class":109},[99,56731,55482],{"class":214},[99,56733,55445],{"class":109},[99,56735,55487],{"class":214},[99,56737,55451],{"class":109},[99,56739,56740,56742,56744,56746,56748,56750,56752],{"class":101,"line":16856},[99,56741,55433],{"class":109},[99,56743,55496],{"class":214},[99,56745,55439],{"class":109},[99,56747,55501],{"class":214},[99,56749,55445],{"class":109},[99,56751,55506],{"class":214},[99,56753,55451],{"class":109},[99,56755,56756,56758,56760,56762,56764,56766,56768],{"class":101,"line":16868},[99,56757,55433],{"class":109},[99,56759,55515],{"class":214},[99,56761,55439],{"class":109},[99,56763,55520],{"class":214},[99,56765,55445],{"class":109},[99,56767,55525],{"class":214},[99,56769,55451],{"class":109},[99,56771,56772,56774,56776,56778,56780,56782,56784],{"class":101,"line":16873},[99,56773,55433],{"class":109},[99,56775,55534],{"class":214},[99,56777,55439],{"class":109},[99,56779,55539],{"class":214},[99,56781,55445],{"class":109},[99,56783,55544],{"class":214},[99,56785,55451],{"class":109},[99,56787,56788,56790,56792,56794,56796,56798,56800],{"class":101,"line":16886},[99,56789,55433],{"class":109},[99,56791,55553],{"class":214},[99,56793,55439],{"class":109},[99,56795,55558],{"class":214},[99,56797,55445],{"class":109},[99,56799,55563],{"class":214},[99,56801,55451],{"class":109},[99,56803,56804,56806,56808,56810,56812,56814,56816],{"class":101,"line":16891},[99,56805,55433],{"class":109},[99,56807,55572],{"class":214},[99,56809,55439],{"class":109},[99,56811,55577],{"class":214},[99,56813,55445],{"class":109},[99,56815,55582],{"class":214},[99,56817,55585],{"class":109},[99,56819,56820],{"class":101,"line":16896},[99,56821,53090],{"class":109},[99,56823,56824],{"class":101,"line":16901},[99,56825,56826],{"class":168},"    \u002F\u002F 1.获取元素\n",[99,56828,56829,56831,56833,56835,56837,56839,56841,56843],{"class":101,"line":16914},[99,56830,11208],{"class":105},[99,56832,55596],{"class":158},[99,56834,13551],{"class":105},[99,56836,54377],{"class":109},[99,56838,54380],{"class":1949},[99,56840,110],{"class":109},[99,56842,55607],{"class":214},[99,56844,116],{"class":109},[99,56846,56847,56849,56851,56853,56855,56857,56859,56861],{"class":101,"line":16919},[99,56848,11208],{"class":105},[99,56850,6812],{"class":158},[99,56852,13551],{"class":105},[99,56854,54377],{"class":109},[99,56856,54380],{"class":1949},[99,56858,110],{"class":109},[99,56860,55626],{"class":214},[99,56862,116],{"class":109},[99,56864,56865,56867,56869,56871],{"class":101,"line":32614},[99,56866,52200],{"class":105},[99,56868,9425],{"class":109},[99,56870,155],{"class":105},[99,56872,47314],{"class":158},[99,56874,56875],{"class":101,"line":32620},[99,56876,56877],{"class":168},"    \u002F\u002F 2.开启定时器\n",[99,56879,56880],{"class":101,"line":32626},[99,56881,56882],{"class":168},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[99,56884,56885,56888,56890,56892],{"class":101,"line":32632},[99,56886,56887],{"class":1949},"    setInterval",[99,56889,110],{"class":109},[99,56891,54430],{"class":105},[99,56893,54433],{"class":109},[99,56895,56896,56898],{"class":101,"line":32638},[99,56897,54438],{"class":109},[99,56899,2688],{"class":105},[99,56901,56902,56904,56906,56908,56911,56913],{"class":101,"line":32649},[99,56903,54461],{"class":105},[99,56905,54464],{"class":109},[99,56907,1696],{"class":105},[99,56909,56910],{"class":109}," sliderData.",[99,56912,51949],{"class":158},[99,56914,12429],{"class":109},[99,56916,56917,56920,56922],{"class":101,"line":32655},[99,56918,56919],{"class":109},"        i ",[99,56921,155],{"class":105},[99,56923,47314],{"class":158},[99,56925,56926],{"class":101,"line":32675},[99,56927,52379],{"class":109},[99,56929,56930],{"class":101,"line":32681},[99,56931,56932],{"class":168},"      \u002F\u002F 更换图片路径\n",[99,56934,56935,56937,56939],{"class":101,"line":32692},[99,56936,55702],{"class":109},[99,56938,155],{"class":105},[99,56940,56941],{"class":109}," sliderData[i].url\n",[99,56943,56944],{"class":101,"line":32698},[99,56945,56946],{"class":168},"      \u002F\u002F 把文字写到p里面\n",[99,56948,56949,56951,56953],{"class":101,"line":32704},[99,56950,55712],{"class":109},[99,56952,155],{"class":105},[99,56954,56955],{"class":109}," sliderData[i].title\n",[99,56957,56958],{"class":101,"line":32710},[99,56959,56960],{"class":168},"      \u002F\u002F 小圆点\n",[99,56962,56963],{"class":101,"line":32716},[99,56964,56965],{"class":168},"      \u002F\u002F 先删除以前的active\n",[99,56967,56968],{"class":101,"line":32722},[99,56969,56970],{"class":168},"      \u002F\u002F 只让当前li添加active\n",[99,56972,56973,56975,56977,56979,56982,56985,56988,56990,56992],{"class":101,"line":32728},[99,56974,55752],{"class":109},[99,56976,54380],{"class":1949},[99,56978,110],{"class":109},[99,56980,56981],{"class":214},"'.slider-footer .activate'",[99,56983,56984],{"class":109},").classList.",[99,56986,56987],{"class":1949},"remove",[99,56989,110],{"class":109},[99,56991,55770],{"class":214},[99,56993,116],{"class":109},[99,56995,56996,56998,57000,57002,57005,57007,57009,57011,57014,57016,57018,57020,57022],{"class":101,"line":32734},[99,56997,55752],{"class":109},[99,56999,54380],{"class":1949},[99,57001,110],{"class":109},[99,57003,57004],{"class":214},"`.slider-footer ul li:nth-child(${",[99,57006,551],{"class":109},[99,57008,45547],{"class":105},[99,57010,25107],{"class":158},[99,57012,57013],{"class":214},"})`",[99,57015,56984],{"class":109},[99,57017,5321],{"class":1949},[99,57019,110],{"class":109},[99,57021,55770],{"class":214},[99,57023,116],{"class":109},[99,57025,57026],{"class":101,"line":32754},[99,57027,2386],{"emptyLinePlaceholder":26},[99,57029,57030,57032,57034],{"class":101,"line":32760},[99,57031,54516],{"class":109},[99,57033,6397],{"class":158},[99,57035,116],{"class":109},[99,57037,57038],{"class":101,"line":32776},[99,57039,2386],{"emptyLinePlaceholder":26},[99,57041,57042,57044,57046],{"class":101,"line":32782},[99,57043,52398],{"class":109},[99,57045,51794],{"class":51281},[99,57047,51288],{"class":109},[99,57049,57050,57052,57054],{"class":101,"line":32796},[99,57051,51766],{"class":109},[99,57053,51781],{"class":51281},[99,57055,51288],{"class":109},[99,57057,57058],{"class":101,"line":32802},[99,57059,2386],{"emptyLinePlaceholder":26},[99,57061,57062,57064,57066],{"class":101,"line":32817},[99,57063,51766],{"class":109},[99,57065,50616],{"class":51281},[99,57067,51288],{"class":109},[70,57069,57071],{"id":57070},"_317-重要知识点","3.1.7 重要知识点",[14,57073,57074,57075],{},"浏览器在渲染文本时， ",[259,57076,57077],{},"没有空格或换行符就没有“断行点”",[14,57079,57080],{},[1448,57081],{"alt":21,"src":57082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57084,57085],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57087,57088],{},[1448,57089],{"alt":21,"src":57090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57092,57093],{},[1448,57094],{"alt":21,"src":57095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[41,57097,57099],{"id":57098},"_32-dom事件基础","3.2 DOM事件基础",[70,57101,57103],{"id":57102},"_321-事件监听","3.2.1 事件监听",[14,57105,57106],{},[1448,57107],{"alt":21,"src":57108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57110,57111],{},"事件监听有响应的发生",[14,57113,57114],{},[1448,57115],{"alt":21,"src":57116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57118,57119],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57121,57122],{},"对于有名函数,要执行的函数名后边不要加()",[70,57124,57126],{"id":57125},"_322-随机点名案例","3.2.2 随机点名案例",[90,57128,57130],{"className":50614,"code":57129,"language":50616,"meta":21,"style":21},"\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",[96,57131,57132,57142,57156,57160,57168,57182,57202,57214,57222,57228,57238,57248,57252,57256,57263,57274,57278,57282,57288,57300,57314,57324,57336,57349,57353,57357,57364,57368,57381,57393,57405,57409,57413,57417,57424,57434,57438,57442,57451,57463,57475,57490,57494,57502,57510,57514,57522,57535,57549,57562,57582,57590,57605,57625,57645,57653,57657,57665,57670,57706,57726,57731,57750,57755,57766,57771,57782,57787,57806,57821,57826,57852,57862,57871,57876,57892,57897,57902,57907,57922,57926,57930,57935,57954,57971,57979,57984,57999,58003,58007,58015,58023,58027],{"__ignoreMap":21},[99,57133,57134,57136,57138,57140],{"class":101,"line":102},[99,57135,51278],{"class":109},[99,57137,51282],{"class":51281},[99,57139,51285],{"class":1949},[99,57141,51288],{"class":109},[99,57143,57144,57146,57148,57150,57152,57154],{"class":101,"line":22},[99,57145,1020],{"class":109},[99,57147,50616],{"class":51281},[99,57149,51297],{"class":1949},[99,57151,155],{"class":109},[99,57153,51302],{"class":214},[99,57155,51288],{"class":109},[99,57157,57158],{"class":101,"line":1165},[99,57159,2386],{"emptyLinePlaceholder":26},[99,57161,57162,57164,57166],{"class":101,"line":1180},[99,57163,1020],{"class":109},[99,57165,51315],{"class":51281},[99,57167,51288],{"class":109},[99,57169,57170,57172,57174,57176,57178,57180],{"class":101,"line":1186},[99,57171,52125],{"class":109},[99,57173,51325],{"class":51281},[99,57175,51328],{"class":1949},[99,57177,155],{"class":109},[99,57179,51333],{"class":214},[99,57181,51288],{"class":109},[99,57183,57184,57186,57188,57190,57192,57194,57196,57198,57200],{"class":101,"line":1200},[99,57185,52125],{"class":109},[99,57187,51325],{"class":51281},[99,57189,14907],{"class":1949},[99,57191,155],{"class":109},[99,57193,51372],{"class":214},[99,57195,51352],{"class":1949},[99,57197,155],{"class":109},[99,57199,51379],{"class":214},[99,57201,51288],{"class":109},[99,57203,57204,57206,57208,57210,57212],{"class":101,"line":1206},[99,57205,52125],{"class":109},[99,57207,51388],{"class":51281},[99,57209,51391],{"class":109},[99,57211,51388],{"class":51281},[99,57213,51288],{"class":109},[99,57215,57216,57218,57220],{"class":101,"line":1297},[99,57217,52125],{"class":109},[99,57219,5113],{"class":51281},[99,57221,51288],{"class":109},[99,57223,57224,57226],{"class":101,"line":1303},[99,57225,6390],{"class":51281},[99,57227,15559],{"class":109},[99,57229,57230,57232,57234,57236],{"class":101,"line":1315},[99,57231,54687],{"class":158},[99,57233,51418],{"class":109},[99,57235,301],{"class":158},[99,57237,1276],{"class":109},[99,57239,57240,57242,57244,57246],{"class":101,"line":1598},[99,57241,54676],{"class":158},[99,57243,51418],{"class":109},[99,57245,301],{"class":158},[99,57247,1276],{"class":109},[99,57249,57250],{"class":101,"line":1603},[99,57251,2173],{"class":109},[99,57253,57254],{"class":101,"line":1609},[99,57255,2386],{"emptyLinePlaceholder":26},[99,57257,57258,57261],{"class":101,"line":1614},[99,57259,57260],{"class":51281},"    h2",[99,57262,15559],{"class":109},[99,57264,57265,57268,57270,57272],{"class":101,"line":1628},[99,57266,57267],{"class":158},"      text-align",[99,57269,51418],{"class":109},[99,57271,51573],{"class":158},[99,57273,1276],{"class":109},[99,57275,57276],{"class":101,"line":1633},[99,57277,2173],{"class":109},[99,57279,57280],{"class":101,"line":1639},[99,57281,2386],{"emptyLinePlaceholder":26},[99,57283,57284,57286],{"class":101,"line":1660},[99,57285,54733],{"class":1949},[99,57287,15559],{"class":109},[99,57289,57290,57292,57294,57296,57298],{"class":101,"line":1665},[99,57291,54752],{"class":158},[99,57293,51418],{"class":109},[99,57295,1525],{"class":158},[99,57297,51473],{"class":105},[99,57299,1276],{"class":109},[99,57301,57302,57304,57306,57308,57310,57312],{"class":101,"line":1679},[99,57303,54687],{"class":158},[99,57305,51418],{"class":109},[99,57307,766],{"class":158},[99,57309,51473],{"class":105},[99,57311,51537],{"class":158},[99,57313,1276],{"class":109},[99,57315,57316,57318,57320,57322],{"class":101,"line":1684},[99,57317,54990],{"class":158},[99,57319,51418],{"class":109},[99,57321,51458],{"class":158},[99,57323,1276],{"class":109},[99,57325,57326,57328,57330,57332,57334],{"class":101,"line":1713},[99,57327,54903],{"class":158},[99,57329,51418],{"class":109},[99,57331,935],{"class":158},[99,57333,51473],{"class":105},[99,57335,1276],{"class":109},[99,57337,57338,57341,57343,57345,57347],{"class":101,"line":1718},[99,57339,57340],{"class":158},"      line-height",[99,57342,51418],{"class":109},[99,57344,511],{"class":158},[99,57346,51473],{"class":105},[99,57348,1276],{"class":109},[99,57350,57351],{"class":101,"line":1735},[99,57352,2173],{"class":109},[99,57354,57355],{"class":101,"line":1740},[99,57356,2386],{"emptyLinePlaceholder":26},[99,57358,57359,57362],{"class":101,"line":1745},[99,57360,57361],{"class":1949},"    .qs",[99,57363,15559],{"class":109},[99,57365,57366],{"class":101,"line":1750},[99,57367,2386],{"emptyLinePlaceholder":26},[99,57369,57370,57372,57374,57377,57379],{"class":101,"line":1764},[99,57371,54752],{"class":158},[99,57373,51418],{"class":109},[99,57375,57376],{"class":158},"450",[99,57378,51473],{"class":105},[99,57380,1276],{"class":109},[99,57382,57383,57385,57387,57389,57391],{"class":101,"line":1769},[99,57384,54766],{"class":158},[99,57386,51418],{"class":109},[99,57388,511],{"class":158},[99,57390,51473],{"class":105},[99,57392,1276],{"class":109},[99,57394,57395,57398,57400,57403],{"class":101,"line":2563},[99,57396,57397],{"class":158},"      color",[99,57399,51418],{"class":109},[99,57401,57402],{"class":158},"red",[99,57404,1276],{"class":109},[99,57406,57407],{"class":101,"line":2577},[99,57408,2386],{"emptyLinePlaceholder":26},[99,57410,57411],{"class":101,"line":2585},[99,57412,2173],{"class":109},[99,57414,57415],{"class":101,"line":2590},[99,57416,2386],{"emptyLinePlaceholder":26},[99,57418,57419,57422],{"class":101,"line":2596},[99,57420,57421],{"class":1949},"    .btns",[99,57423,15559],{"class":109},[99,57425,57426,57428,57430,57432],{"class":101,"line":2602},[99,57427,57267],{"class":158},[99,57429,51418],{"class":109},[99,57431,51573],{"class":158},[99,57433,1276],{"class":109},[99,57435,57436],{"class":101,"line":2607},[99,57437,2173],{"class":109},[99,57439,57440],{"class":101,"line":7935},[99,57441,2386],{"emptyLinePlaceholder":26},[99,57443,57444,57446,57449],{"class":101,"line":7959},[99,57445,57421],{"class":1949},[99,57447,57448],{"class":51281}," button",[99,57450,15559],{"class":109},[99,57452,57453,57455,57457,57459,57461],{"class":101,"line":7964},[99,57454,54752],{"class":158},[99,57456,51418],{"class":109},[99,57458,927],{"class":158},[99,57460,51473],{"class":105},[99,57462,1276],{"class":109},[99,57464,57465,57467,57469,57471,57473],{"class":101,"line":7970},[99,57466,54766],{"class":158},[99,57468,51418],{"class":109},[99,57470,383],{"class":158},[99,57472,51473],{"class":105},[99,57474,1276],{"class":109},[99,57476,57477,57479,57481,57483,57486,57488],{"class":101,"line":7997},[99,57478,54687],{"class":158},[99,57480,51418],{"class":109},[99,57482,301],{"class":158},[99,57484,57485],{"class":158}," 50",[99,57487,51473],{"class":105},[99,57489,1276],{"class":109},[99,57491,57492],{"class":101,"line":8002},[99,57493,2173],{"class":109},[99,57495,57496,57498,57500],{"class":101,"line":8008},[99,57497,52398],{"class":109},[99,57499,5113],{"class":51281},[99,57501,51288],{"class":109},[99,57503,57504,57506,57508],{"class":101,"line":8020},[99,57505,51766],{"class":109},[99,57507,51315],{"class":51281},[99,57509,51288],{"class":109},[99,57511,57512],{"class":101,"line":8032},[99,57513,2386],{"emptyLinePlaceholder":26},[99,57515,57516,57518,57520],{"class":101,"line":8044},[99,57517,1020],{"class":109},[99,57519,51781],{"class":51281},[99,57521,51288],{"class":109},[99,57523,57524,57526,57528,57531,57533],{"class":101,"line":9703},[99,57525,52125],{"class":109},[99,57527,41],{"class":51281},[99,57529,57530],{"class":109},">随机点名\u003C\u002F",[99,57532,41],{"class":51281},[99,57534,51288],{"class":109},[99,57536,57537,57539,57541,57543,57545,57547],{"class":101,"line":9728},[99,57538,52125],{"class":109},[99,57540,51592],{"class":51281},[99,57542,53467],{"class":1949},[99,57544,155],{"class":109},[99,57546,53472],{"class":214},[99,57548,51288],{"class":109},[99,57550,57551,57553,57555,57558,57560],{"class":101,"line":9751},[99,57552,51322],{"class":109},[99,57554,99],{"class":51281},[99,57556,57557],{"class":109},">名字是：\u003C\u002F",[99,57559,99],{"class":51281},[99,57561,51288],{"class":109},[99,57563,57564,57566,57568,57570,57572,57575,57578,57580],{"class":101,"line":9775},[99,57565,51322],{"class":109},[99,57567,51592],{"class":51281},[99,57569,53467],{"class":1949},[99,57571,155],{"class":109},[99,57573,57574],{"class":214},"\"qs\"",[99,57576,57577],{"class":109},">这里显示姓名\u003C\u002F",[99,57579,51592],{"class":51281},[99,57581,51288],{"class":109},[99,57583,57584,57586,57588],{"class":101,"line":9780},[99,57585,52398],{"class":109},[99,57587,51592],{"class":51281},[99,57589,51288],{"class":109},[99,57591,57592,57594,57596,57598,57600,57603],{"class":101,"line":9785},[99,57593,52125],{"class":109},[99,57595,51592],{"class":51281},[99,57597,53467],{"class":1949},[99,57599,155],{"class":109},[99,57601,57602],{"class":214},"\"btns\"",[99,57604,51288],{"class":109},[99,57606,57607,57609,57611,57613,57615,57618,57621,57623],{"class":101,"line":9790},[99,57608,51322],{"class":109},[99,57610,53868],{"class":51281},[99,57612,53467],{"class":1949},[99,57614,155],{"class":109},[99,57616,57617],{"class":214},"\"start\"",[99,57619,57620],{"class":109},">开始\u003C\u002F",[99,57622,53868],{"class":51281},[99,57624,51288],{"class":109},[99,57626,57627,57629,57631,57633,57635,57638,57641,57643],{"class":101,"line":9799},[99,57628,51322],{"class":109},[99,57630,53868],{"class":51281},[99,57632,53467],{"class":1949},[99,57634,155],{"class":109},[99,57636,57637],{"class":214},"\"end\"",[99,57639,57640],{"class":109},">结束\u003C\u002F",[99,57642,53868],{"class":51281},[99,57644,51288],{"class":109},[99,57646,57647,57649,57651],{"class":101,"line":9804},[99,57648,52398],{"class":109},[99,57650,51592],{"class":51281},[99,57652,51288],{"class":109},[99,57654,57655],{"class":101,"line":9810},[99,57656,2386],{"emptyLinePlaceholder":26},[99,57658,57659,57661,57663],{"class":101,"line":9831},[99,57660,52125],{"class":109},[99,57662,51794],{"class":51281},[99,57664,51288],{"class":109},[99,57666,57667],{"class":101,"line":9837},[99,57668,57669],{"class":168},"    \u002F\u002F 数据数组\n",[99,57671,57672,57674,57677,57679,57681,57684,57686,57689,57691,57694,57696,57699,57701,57704],{"class":101,"line":9851},[99,57673,11208],{"class":105},[99,57675,57676],{"class":158}," arr",[99,57678,13551],{"class":105},[99,57680,52207],{"class":109},[99,57682,57683],{"class":214},"'马超'",[99,57685,12422],{"class":109},[99,57687,57688],{"class":214},"'黄忠'",[99,57690,12422],{"class":109},[99,57692,57693],{"class":214},"'赵云'",[99,57695,12422],{"class":109},[99,57697,57698],{"class":214},"'关羽'",[99,57700,12422],{"class":109},[99,57702,57703],{"class":214},"'张飞'",[99,57705,33227],{"class":109},[99,57707,57708,57710,57713,57715,57717,57719,57721,57724],{"class":101,"line":9857},[99,57709,11208],{"class":105},[99,57711,57712],{"class":158}," qs",[99,57714,13551],{"class":105},[99,57716,54377],{"class":109},[99,57718,54380],{"class":1949},[99,57720,110],{"class":109},[99,57722,57723],{"class":214},"'.qs'",[99,57725,116],{"class":109},[99,57727,57728],{"class":101,"line":9884},[99,57729,57730],{"class":168},"    \u002F\u002F 1.业务1.开始按钮模块\n",[99,57732,57733,57735,57737,57739,57741,57743,57745,57748],{"class":101,"line":9893},[99,57734,11208],{"class":105},[99,57736,4170],{"class":158},[99,57738,13551],{"class":105},[99,57740,54377],{"class":109},[99,57742,54380],{"class":1949},[99,57744,110],{"class":109},[99,57746,57747],{"class":214},"'.start'",[99,57749,116],{"class":109},[99,57751,57752],{"class":101,"line":9899},[99,57753,57754],{"class":168},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[99,57756,57757,57759,57762,57764],{"class":101,"line":9907},[99,57758,52200],{"class":105},[99,57760,57761],{"class":109}," timerId ",[99,57763,155],{"class":105},[99,57765,47314],{"class":158},[99,57767,57768],{"class":101,"line":9912},[99,57769,57770],{"class":168},"    \u002F\u002F 随机号要全局变量\n",[99,57772,57773,57775,57778,57780],{"class":101,"line":16591},[99,57774,52200],{"class":105},[99,57776,57777],{"class":109}," random ",[99,57779,155],{"class":105},[99,57781,47314],{"class":158},[99,57783,57784],{"class":101,"line":16597},[99,57785,57786],{"class":168},"    \u002F\u002F 1.1 添加点击事件\n",[99,57788,57789,57792,57795,57797,57800,57802,57804],{"class":101,"line":16620},[99,57790,57791],{"class":109},"    start.",[99,57793,57794],{"class":1949},"addEventListener",[99,57796,110],{"class":109},[99,57798,57799],{"class":214},"'click'",[99,57801,12422],{"class":109},[99,57803,54430],{"class":105},[99,57805,54433],{"class":109},[99,57807,57808,57811,57813,57815,57817,57819],{"class":101,"line":16626},[99,57809,57810],{"class":109},"      timerId ",[99,57812,155],{"class":105},[99,57814,54425],{"class":1949},[99,57816,110],{"class":109},[99,57818,54430],{"class":105},[99,57820,54433],{"class":109},[99,57822,57823],{"class":101,"line":16649},[99,57824,57825],{"class":168},"        \u002F\u002F 随机数\n",[99,57827,57828,57831,57833,57836,57839,57842,57844,57846,57848,57850],{"class":101,"line":16663},[99,57829,57830],{"class":109},"        random ",[99,57832,155],{"class":105},[99,57834,57835],{"class":1949}," parseInt",[99,57837,57838],{"class":109},"(Math.",[99,57840,57841],{"class":1949},"random",[99,57843,13037],{"class":109},[99,57845,565],{"class":105},[99,57847,51946],{"class":109},[99,57849,51949],{"class":158},[99,57851,116],{"class":109},[99,57853,57854,57857,57859],{"class":101,"line":16683},[99,57855,57856],{"class":109},"        qs.innerHTML ",[99,57858,155],{"class":105},[99,57860,57861],{"class":109}," arr[random]\n",[99,57863,57864,57867,57869],{"class":101,"line":16689},[99,57865,57866],{"class":109},"      }, ",[99,57868,383],{"class":158},[99,57870,116],{"class":109},[99,57872,57873],{"class":101,"line":16700},[99,57874,57875],{"class":168},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[99,57877,57878,57880,57883,57885,57888,57890],{"class":101,"line":16723},[99,57879,54461],{"class":105},[99,57881,57882],{"class":109}," (arr.",[99,57884,51949],{"class":158},[99,57886,57887],{"class":105}," ===",[99,57889,25107],{"class":158},[99,57891,12429],{"class":109},[99,57893,57894],{"class":101,"line":16745},[99,57895,57896],{"class":168},"        \u002F\u002F start.disabled = true\n",[99,57898,57899],{"class":101,"line":16750},[99,57900,57901],{"class":168},"        \u002F\u002F end.disabled = true\n",[99,57903,57904],{"class":101,"line":16756},[99,57905,57906],{"class":168},"        \u002F\u002F 可以合起来写\n",[99,57908,57909,57912,57914,57917,57919],{"class":101,"line":16770},[99,57910,57911],{"class":109},"        start.disabled ",[99,57913,155],{"class":105},[99,57915,57916],{"class":109}," end.disabled ",[99,57918,155],{"class":105},[99,57920,57921],{"class":158}," true\n",[99,57923,57924],{"class":101,"line":16783},[99,57925,52379],{"class":109},[99,57927,57928],{"class":101,"line":16788},[99,57929,33442],{"class":109},[99,57931,57932],{"class":101,"line":16802},[99,57933,57934],{"class":168},"    \u002F\u002F 1.2 关闭按钮模块\n",[99,57936,57937,57939,57941,57943,57945,57947,57949,57952],{"class":101,"line":16807},[99,57938,11208],{"class":105},[99,57940,4186],{"class":158},[99,57942,13551],{"class":105},[99,57944,54377],{"class":109},[99,57946,54380],{"class":1949},[99,57948,110],{"class":109},[99,57950,57951],{"class":214},"'.end'",[99,57953,116],{"class":109},[99,57955,57956,57959,57961,57963,57965,57967,57969],{"class":101,"line":16813},[99,57957,57958],{"class":109},"    end.",[99,57960,57794],{"class":1949},[99,57962,110],{"class":109},[99,57964,57799],{"class":214},[99,57966,12422],{"class":109},[99,57968,54430],{"class":105},[99,57970,54433],{"class":109},[99,57972,57973,57976],{"class":101,"line":16818},[99,57974,57975],{"class":1949},"      clearInterval",[99,57977,57978],{"class":109},"(timerId)\n",[99,57980,57981],{"class":101,"line":16832},[99,57982,57983],{"class":168},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[99,57985,57986,57989,57992,57995,57997],{"class":101,"line":16837},[99,57987,57988],{"class":109},"      arr.",[99,57990,57991],{"class":1949},"splice",[99,57993,57994],{"class":109},"(random, ",[99,57996,327],{"class":158},[99,57998,116],{"class":109},[99,58000,58001],{"class":101,"line":16842},[99,58002,33442],{"class":109},[99,58004,58005],{"class":101,"line":16856},[99,58006,2386],{"emptyLinePlaceholder":26},[99,58008,58009,58011,58013],{"class":101,"line":16868},[99,58010,52398],{"class":109},[99,58012,51794],{"class":51281},[99,58014,51288],{"class":109},[99,58016,58017,58019,58021],{"class":101,"line":16873},[99,58018,51766],{"class":109},[99,58020,51781],{"class":51281},[99,58022,51288],{"class":109},[99,58024,58025],{"class":101,"line":16886},[99,58026,2386],{"emptyLinePlaceholder":26},[99,58028,58029,58031,58033],{"class":101,"line":16891},[99,58030,51766],{"class":109},[99,58032,50616],{"class":51281},[99,58034,51288],{"class":109},[14,58036,58037],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[70,58039,58041],{"id":58040},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[90,58043,58045],{"className":50614,"code":58044,"language":50616,"meta":21,"style":21},"\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",[96,58046,58047,58057,58071,58075,58083,58097,58117,58129,58137,58141,58149,58161,58169,58188,58205,58221,58231,58235,58243,58251,58255],{"__ignoreMap":21},[99,58048,58049,58051,58053,58055],{"class":101,"line":102},[99,58050,51278],{"class":109},[99,58052,51282],{"class":51281},[99,58054,51285],{"class":1949},[99,58056,51288],{"class":109},[99,58058,58059,58061,58063,58065,58067,58069],{"class":101,"line":22},[99,58060,1020],{"class":109},[99,58062,50616],{"class":51281},[99,58064,51297],{"class":1949},[99,58066,155],{"class":109},[99,58068,51302],{"class":214},[99,58070,51288],{"class":109},[99,58072,58073],{"class":101,"line":1165},[99,58074,2386],{"emptyLinePlaceholder":26},[99,58076,58077,58079,58081],{"class":101,"line":1180},[99,58078,1020],{"class":109},[99,58080,51315],{"class":51281},[99,58082,51288],{"class":109},[99,58084,58085,58087,58089,58091,58093,58095],{"class":101,"line":1186},[99,58086,52125],{"class":109},[99,58088,51325],{"class":51281},[99,58090,51328],{"class":1949},[99,58092,155],{"class":109},[99,58094,51333],{"class":214},[99,58096,51288],{"class":109},[99,58098,58099,58101,58103,58105,58107,58109,58111,58113,58115],{"class":101,"line":1200},[99,58100,52125],{"class":109},[99,58102,51325],{"class":51281},[99,58104,14907],{"class":1949},[99,58106,155],{"class":109},[99,58108,51372],{"class":214},[99,58110,51352],{"class":1949},[99,58112,155],{"class":109},[99,58114,51379],{"class":214},[99,58116,51288],{"class":109},[99,58118,58119,58121,58123,58125,58127],{"class":101,"line":1206},[99,58120,52125],{"class":109},[99,58122,51388],{"class":51281},[99,58124,51391],{"class":109},[99,58126,51388],{"class":51281},[99,58128,51288],{"class":109},[99,58130,58131,58133,58135],{"class":101,"line":1297},[99,58132,51766],{"class":109},[99,58134,51315],{"class":51281},[99,58136,51288],{"class":109},[99,58138,58139],{"class":101,"line":1303},[99,58140,2386],{"emptyLinePlaceholder":26},[99,58142,58143,58145,58147],{"class":101,"line":1315},[99,58144,1020],{"class":109},[99,58146,51781],{"class":51281},[99,58148,51288],{"class":109},[99,58150,58151,58153,58155,58157,58159],{"class":101,"line":1598},[99,58152,52125],{"class":109},[99,58154,53868],{"class":51281},[99,58156,53874],{"class":109},[99,58158,53868],{"class":51281},[99,58160,51288],{"class":109},[99,58162,58163,58165,58167],{"class":101,"line":1603},[99,58164,52125],{"class":109},[99,58166,51794],{"class":51281},[99,58168,51288],{"class":109},[99,58170,58171,58173,58175,58177,58179,58181,58183,58186],{"class":101,"line":1609},[99,58172,11208],{"class":105},[99,58174,54372],{"class":158},[99,58176,13551],{"class":105},[99,58178,54377],{"class":109},[99,58180,54380],{"class":1949},[99,58182,110],{"class":109},[99,58184,58185],{"class":214},"'button'",[99,58187,116],{"class":109},[99,58189,58190,58193,58195,58197,58199,58201,58203],{"class":101,"line":1614},[99,58191,58192],{"class":109},"    btn.",[99,58194,57794],{"class":1949},[99,58196,110],{"class":109},[99,58198,57799],{"class":214},[99,58200,12422],{"class":109},[99,58202,54430],{"class":105},[99,58204,54433],{"class":109},[99,58206,58207,58210,58212,58214,58217,58219],{"class":101,"line":1628},[99,58208,58209],{"class":105},"      const",[99,58211,2226],{"class":158},[99,58213,13551],{"class":105},[99,58215,58216],{"class":109}," Math.",[99,58218,57841],{"class":1949},[99,58220,1962],{"class":109},[99,58222,58223,58226,58229],{"class":101,"line":1633},[99,58224,58225],{"class":109},"      console.",[99,58227,58228],{"class":1949},"log",[99,58230,123],{"class":109},[99,58232,58233],{"class":101,"line":1639},[99,58234,33442],{"class":109},[99,58236,58237,58239,58241],{"class":101,"line":1660},[99,58238,52398],{"class":109},[99,58240,51794],{"class":51281},[99,58242,51288],{"class":109},[99,58244,58245,58247,58249],{"class":101,"line":1665},[99,58246,51766],{"class":109},[99,58248,51781],{"class":51281},[99,58250,51288],{"class":109},[99,58252,58253],{"class":101,"line":1679},[99,58254,2386],{"emptyLinePlaceholder":26},[99,58256,58257,58259,58261],{"class":101,"line":1684},[99,58258,51766],{"class":109},[99,58260,50616],{"class":51281},[99,58262,51288],{"class":109},[14,58264,58265],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58267,58268],{},"常量不可以重新赋值",[14,58270,58271],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[90,58273,58275],{"className":50614,"code":58274,"language":50616,"meta":21,"style":21},"\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",[96,58276,58277,58287,58301,58305,58313,58327,58347,58359,58367,58371,58379,58391,58399,58410,58428,58444,58458,58466,58470,58478,58486,58490],{"__ignoreMap":21},[99,58278,58279,58281,58283,58285],{"class":101,"line":102},[99,58280,51278],{"class":109},[99,58282,51282],{"class":51281},[99,58284,51285],{"class":1949},[99,58286,51288],{"class":109},[99,58288,58289,58291,58293,58295,58297,58299],{"class":101,"line":22},[99,58290,1020],{"class":109},[99,58292,50616],{"class":51281},[99,58294,51297],{"class":1949},[99,58296,155],{"class":109},[99,58298,51302],{"class":214},[99,58300,51288],{"class":109},[99,58302,58303],{"class":101,"line":1165},[99,58304,2386],{"emptyLinePlaceholder":26},[99,58306,58307,58309,58311],{"class":101,"line":1180},[99,58308,1020],{"class":109},[99,58310,51315],{"class":51281},[99,58312,51288],{"class":109},[99,58314,58315,58317,58319,58321,58323,58325],{"class":101,"line":1186},[99,58316,52125],{"class":109},[99,58318,51325],{"class":51281},[99,58320,51328],{"class":1949},[99,58322,155],{"class":109},[99,58324,51333],{"class":214},[99,58326,51288],{"class":109},[99,58328,58329,58331,58333,58335,58337,58339,58341,58343,58345],{"class":101,"line":1200},[99,58330,52125],{"class":109},[99,58332,51325],{"class":51281},[99,58334,14907],{"class":1949},[99,58336,155],{"class":109},[99,58338,51372],{"class":214},[99,58340,51352],{"class":1949},[99,58342,155],{"class":109},[99,58344,51379],{"class":214},[99,58346,51288],{"class":109},[99,58348,58349,58351,58353,58355,58357],{"class":101,"line":1206},[99,58350,52125],{"class":109},[99,58352,51388],{"class":51281},[99,58354,51391],{"class":109},[99,58356,51388],{"class":51281},[99,58358,51288],{"class":109},[99,58360,58361,58363,58365],{"class":101,"line":1297},[99,58362,51766],{"class":109},[99,58364,51315],{"class":51281},[99,58366,51288],{"class":109},[99,58368,58369],{"class":101,"line":1303},[99,58370,2386],{"emptyLinePlaceholder":26},[99,58372,58373,58375,58377],{"class":101,"line":1315},[99,58374,1020],{"class":109},[99,58376,51781],{"class":51281},[99,58378,51288],{"class":109},[99,58380,58381,58383,58385,58387,58389],{"class":101,"line":1598},[99,58382,52125],{"class":109},[99,58384,53868],{"class":51281},[99,58386,53874],{"class":109},[99,58388,53868],{"class":51281},[99,58390,51288],{"class":109},[99,58392,58393,58395,58397],{"class":101,"line":1603},[99,58394,52125],{"class":109},[99,58396,51794],{"class":51281},[99,58398,51288],{"class":109},[99,58400,58401,58403,58405,58407],{"class":101,"line":1609},[99,58402,11208],{"class":105},[99,58404,2226],{"class":158},[99,58406,13551],{"class":105},[99,58408,58409],{"class":158}," 10\n",[99,58411,58412,58414,58416,58418,58420,58422,58424,58426],{"class":101,"line":1614},[99,58413,11208],{"class":105},[99,58415,54372],{"class":158},[99,58417,13551],{"class":105},[99,58419,54377],{"class":109},[99,58421,54380],{"class":1949},[99,58423,110],{"class":109},[99,58425,58185],{"class":214},[99,58427,116],{"class":109},[99,58429,58430,58432,58434,58436,58438,58440,58442],{"class":101,"line":1628},[99,58431,58192],{"class":109},[99,58433,57794],{"class":1949},[99,58435,110],{"class":109},[99,58437,57799],{"class":214},[99,58439,12422],{"class":109},[99,58441,54430],{"class":105},[99,58443,54433],{"class":109},[99,58445,58446,58448,58450,58452,58454,58456],{"class":101,"line":1633},[99,58447,58209],{"class":105},[99,58449,2226],{"class":158},[99,58451,13551],{"class":105},[99,58453,58216],{"class":109},[99,58455,57841],{"class":1949},[99,58457,1962],{"class":109},[99,58459,58460,58462,58464],{"class":101,"line":1639},[99,58461,58225],{"class":109},[99,58463,58228],{"class":1949},[99,58465,123],{"class":109},[99,58467,58468],{"class":101,"line":1660},[99,58469,33442],{"class":109},[99,58471,58472,58474,58476],{"class":101,"line":1665},[99,58473,52398],{"class":109},[99,58475,51794],{"class":51281},[99,58477,51288],{"class":109},[99,58479,58480,58482,58484],{"class":101,"line":1679},[99,58481,51766],{"class":109},[99,58483,51781],{"class":51281},[99,58485,51288],{"class":109},[99,58487,58488],{"class":101,"line":1684},[99,58489,2386],{"emptyLinePlaceholder":26},[99,58491,58492,58494,58496],{"class":101,"line":1713},[99,58493,51766],{"class":109},[99,58495,50616],{"class":51281},[99,58497,51288],{"class":109},[14,58499,58500],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[90,58502,58504],{"className":50614,"code":58503,"language":50616,"meta":21,"style":21},"\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",[96,58505,58506,58516,58530,58534,58542,58556,58576,58588,58596,58600,58608,58620,58628,58638,58656,58672,58685,58693,58697,58705,58713,58717],{"__ignoreMap":21},[99,58507,58508,58510,58512,58514],{"class":101,"line":102},[99,58509,51278],{"class":109},[99,58511,51282],{"class":51281},[99,58513,51285],{"class":1949},[99,58515,51288],{"class":109},[99,58517,58518,58520,58522,58524,58526,58528],{"class":101,"line":22},[99,58519,1020],{"class":109},[99,58521,50616],{"class":51281},[99,58523,51297],{"class":1949},[99,58525,155],{"class":109},[99,58527,51302],{"class":214},[99,58529,51288],{"class":109},[99,58531,58532],{"class":101,"line":1165},[99,58533,2386],{"emptyLinePlaceholder":26},[99,58535,58536,58538,58540],{"class":101,"line":1180},[99,58537,1020],{"class":109},[99,58539,51315],{"class":51281},[99,58541,51288],{"class":109},[99,58543,58544,58546,58548,58550,58552,58554],{"class":101,"line":1186},[99,58545,52125],{"class":109},[99,58547,51325],{"class":51281},[99,58549,51328],{"class":1949},[99,58551,155],{"class":109},[99,58553,51333],{"class":214},[99,58555,51288],{"class":109},[99,58557,58558,58560,58562,58564,58566,58568,58570,58572,58574],{"class":101,"line":1200},[99,58559,52125],{"class":109},[99,58561,51325],{"class":51281},[99,58563,14907],{"class":1949},[99,58565,155],{"class":109},[99,58567,51372],{"class":214},[99,58569,51352],{"class":1949},[99,58571,155],{"class":109},[99,58573,51379],{"class":214},[99,58575,51288],{"class":109},[99,58577,58578,58580,58582,58584,58586],{"class":101,"line":1206},[99,58579,52125],{"class":109},[99,58581,51388],{"class":51281},[99,58583,51391],{"class":109},[99,58585,51388],{"class":51281},[99,58587,51288],{"class":109},[99,58589,58590,58592,58594],{"class":101,"line":1297},[99,58591,51766],{"class":109},[99,58593,51315],{"class":51281},[99,58595,51288],{"class":109},[99,58597,58598],{"class":101,"line":1303},[99,58599,2386],{"emptyLinePlaceholder":26},[99,58601,58602,58604,58606],{"class":101,"line":1315},[99,58603,1020],{"class":109},[99,58605,51781],{"class":51281},[99,58607,51288],{"class":109},[99,58609,58610,58612,58614,58616,58618],{"class":101,"line":1598},[99,58611,52125],{"class":109},[99,58613,53868],{"class":51281},[99,58615,53874],{"class":109},[99,58617,53868],{"class":51281},[99,58619,51288],{"class":109},[99,58621,58622,58624,58626],{"class":101,"line":1603},[99,58623,52125],{"class":109},[99,58625,51794],{"class":51281},[99,58627,51288],{"class":109},[99,58629,58630,58632,58634,58636],{"class":101,"line":1609},[99,58631,11208],{"class":105},[99,58633,2226],{"class":158},[99,58635,13551],{"class":105},[99,58637,58409],{"class":158},[99,58639,58640,58642,58644,58646,58648,58650,58652,58654],{"class":101,"line":1614},[99,58641,11208],{"class":105},[99,58643,54372],{"class":158},[99,58645,13551],{"class":105},[99,58647,54377],{"class":109},[99,58649,54380],{"class":1949},[99,58651,110],{"class":109},[99,58653,58185],{"class":214},[99,58655,116],{"class":109},[99,58657,58658,58660,58662,58664,58666,58668,58670],{"class":101,"line":1628},[99,58659,58192],{"class":109},[99,58661,57794],{"class":1949},[99,58663,110],{"class":109},[99,58665,57799],{"class":214},[99,58667,12422],{"class":109},[99,58669,54430],{"class":105},[99,58671,54433],{"class":109},[99,58673,58674,58677,58679,58681,58683],{"class":101,"line":1633},[99,58675,58676],{"class":109},"      num ",[99,58678,155],{"class":105},[99,58680,58216],{"class":109},[99,58682,57841],{"class":1949},[99,58684,1962],{"class":109},[99,58686,58687,58689,58691],{"class":101,"line":1639},[99,58688,58225],{"class":109},[99,58690,58228],{"class":1949},[99,58692,123],{"class":109},[99,58694,58695],{"class":101,"line":1660},[99,58696,33442],{"class":109},[99,58698,58699,58701,58703],{"class":101,"line":1665},[99,58700,52398],{"class":109},[99,58702,51794],{"class":51281},[99,58704,51288],{"class":109},[99,58706,58707,58709,58711],{"class":101,"line":1679},[99,58708,51766],{"class":109},[99,58710,51781],{"class":51281},[99,58712,51288],{"class":109},[99,58714,58715],{"class":101,"line":1684},[99,58716,2386],{"emptyLinePlaceholder":26},[99,58718,58719,58721,58723],{"class":101,"line":1713},[99,58720,51766],{"class":109},[99,58722,50616],{"class":51281},[99,58724,51288],{"class":109},[14,58726,58727],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[70,58729,58731],{"id":58730},"_324-事件监听版本","3.2.4 事件监听版本",[14,58733,58734],{},[1448,58735],{"alt":21,"src":58736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58738,58739],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58741,58742],{},"这种方式会覆盖前边的事件监听:",[90,58744,58746],{"className":50614,"code":58745,"language":50616,"meta":21,"style":21},"\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",[96,58747,58748,58758,58772,58776,58784,58798,58818,58830,58838,58842,58850,58862,58870,58888,58902,58913,58917,58929,58939,58943,58951,58959,58963],{"__ignoreMap":21},[99,58749,58750,58752,58754,58756],{"class":101,"line":102},[99,58751,51278],{"class":109},[99,58753,51282],{"class":51281},[99,58755,51285],{"class":1949},[99,58757,51288],{"class":109},[99,58759,58760,58762,58764,58766,58768,58770],{"class":101,"line":22},[99,58761,1020],{"class":109},[99,58763,50616],{"class":51281},[99,58765,51297],{"class":1949},[99,58767,155],{"class":109},[99,58769,51302],{"class":214},[99,58771,51288],{"class":109},[99,58773,58774],{"class":101,"line":1165},[99,58775,2386],{"emptyLinePlaceholder":26},[99,58777,58778,58780,58782],{"class":101,"line":1180},[99,58779,1020],{"class":109},[99,58781,51315],{"class":51281},[99,58783,51288],{"class":109},[99,58785,58786,58788,58790,58792,58794,58796],{"class":101,"line":1186},[99,58787,52125],{"class":109},[99,58789,51325],{"class":51281},[99,58791,51328],{"class":1949},[99,58793,155],{"class":109},[99,58795,51333],{"class":214},[99,58797,51288],{"class":109},[99,58799,58800,58802,58804,58806,58808,58810,58812,58814,58816],{"class":101,"line":1200},[99,58801,52125],{"class":109},[99,58803,51325],{"class":51281},[99,58805,14907],{"class":1949},[99,58807,155],{"class":109},[99,58809,51372],{"class":214},[99,58811,51352],{"class":1949},[99,58813,155],{"class":109},[99,58815,51379],{"class":214},[99,58817,51288],{"class":109},[99,58819,58820,58822,58824,58826,58828],{"class":101,"line":1206},[99,58821,52125],{"class":109},[99,58823,51388],{"class":51281},[99,58825,51391],{"class":109},[99,58827,51388],{"class":51281},[99,58829,51288],{"class":109},[99,58831,58832,58834,58836],{"class":101,"line":1297},[99,58833,51766],{"class":109},[99,58835,51315],{"class":51281},[99,58837,51288],{"class":109},[99,58839,58840],{"class":101,"line":1303},[99,58841,2386],{"emptyLinePlaceholder":26},[99,58843,58844,58846,58848],{"class":101,"line":1315},[99,58845,1020],{"class":109},[99,58847,51781],{"class":51281},[99,58849,51288],{"class":109},[99,58851,58852,58854,58856,58858,58860],{"class":101,"line":1598},[99,58853,52125],{"class":109},[99,58855,53868],{"class":51281},[99,58857,53874],{"class":109},[99,58859,53868],{"class":51281},[99,58861,51288],{"class":109},[99,58863,58864,58866,58868],{"class":101,"line":1603},[99,58865,52125],{"class":109},[99,58867,51794],{"class":51281},[99,58869,51288],{"class":109},[99,58871,58872,58874,58876,58878,58880,58882,58884,58886],{"class":101,"line":1609},[99,58873,11208],{"class":105},[99,58875,54372],{"class":158},[99,58877,13551],{"class":105},[99,58879,54377],{"class":109},[99,58881,54380],{"class":1949},[99,58883,110],{"class":109},[99,58885,58185],{"class":214},[99,58887,116],{"class":109},[99,58889,58890,58892,58895,58897,58900],{"class":101,"line":1614},[99,58891,58192],{"class":109},[99,58893,58894],{"class":1949},"onclick",[99,58896,13551],{"class":105},[99,58898,58899],{"class":105}," function",[99,58901,54433],{"class":109},[99,58903,58904,58907,58909,58911],{"class":101,"line":1628},[99,58905,58906],{"class":1949},"      alert",[99,58908,110],{"class":109},[99,58910,582],{"class":158},[99,58912,116],{"class":109},[99,58914,58915],{"class":101,"line":1633},[99,58916,2173],{"class":109},[99,58918,58919,58921,58923,58925,58927],{"class":101,"line":1639},[99,58920,58192],{"class":109},[99,58922,58894],{"class":1949},[99,58924,13551],{"class":105},[99,58926,58899],{"class":105},[99,58928,54433],{"class":109},[99,58930,58931,58933,58935,58937],{"class":101,"line":1660},[99,58932,58906],{"class":1949},[99,58934,110],{"class":109},[99,58936,860],{"class":158},[99,58938,116],{"class":109},[99,58940,58941],{"class":101,"line":1665},[99,58942,2173],{"class":109},[99,58944,58945,58947,58949],{"class":101,"line":1679},[99,58946,52398],{"class":109},[99,58948,51794],{"class":51281},[99,58950,51288],{"class":109},[99,58952,58953,58955,58957],{"class":101,"line":1684},[99,58954,51766],{"class":109},[99,58956,51781],{"class":51281},[99,58958,51288],{"class":109},[99,58960,58961],{"class":101,"line":1713},[99,58962,2386],{"emptyLinePlaceholder":26},[99,58964,58965,58967,58969],{"class":101,"line":1718},[99,58966,51766],{"class":109},[99,58968,50616],{"class":51281},[99,58970,51288],{"class":109},[14,58972,58973],{},"只要点击就输出结果为22,前边11被覆盖了",[90,58975,58977],{"className":50614,"code":58976,"language":50616,"meta":21,"style":21},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[96,58978,58979,58984,58989,58993,58998,59003],{"__ignoreMap":21},[99,58980,58981],{"class":101,"line":102},[99,58982,58983],{"class":109},"  btn.addEventListener('click', function () {\n",[99,58985,58986],{"class":101,"line":22},[99,58987,58988],{"class":109},"      alert(11)\n",[99,58990,58991],{"class":101,"line":1165},[99,58992,33442],{"class":109},[99,58994,58995],{"class":101,"line":1180},[99,58996,58997],{"class":109},"    btn.addEventListener('click', function () {\n",[99,58999,59000],{"class":101,"line":1186},[99,59001,59002],{"class":109},"      alert(22)\n",[99,59004,59005],{"class":101,"line":1200},[99,59006,33442],{"class":109},[14,59008,59009],{},"点击第一次输出11,第二次点击为22",[70,59011,59013],{"id":59012},"_325-事件类型","3.2.5 事件类型",[14,59015,59016],{},[1448,59017],{"alt":21,"src":59018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21985,59020,59022],{"id":59021},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59024,59025],{},"补充知识:",[14,59027,59028],{},"轮播图自动播放模块,可以使用",[14,59030,59031],{},"let timerId = setInterval(function () {",[14,59033,59034],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59036,59037],{},"用js方法模拟进行点击事件,click必须加()",[14,59039,59040],{},"next.click()",[14,59042,59043],{},"}, 1000)",[14,59045,59046],{},[1448,59047],{"alt":21,"src":59048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[90,59050,59052],{"className":53048,"code":59051,"language":53050,"meta":21,"style":21},"\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",[96,59053,59054,59058,59068,59082,59086,59094,59109,59129,59149,59162,59170,59175,59180,59184,59188,59193,59198,59203,59208,59212,59216,59221,59226,59231,59235,59239,59244,59248,59253,59258,59262,59266,59271,59276,59281,59286,59291,59295,59299,59304,59309,59314,59319,59324,59328,59332,59337,59342,59347,59352,59357,59362,59367,59372,59377,59382,59386,59390,59395,59400,59404,59408,59413,59418,59422,59427,59432,59436,59440,59445,59449,59454,59459,59463,59468,59472,59476,59481,59486,59491,59496,59501,59506,59511,59515,59519,59523,59528,59533,59538,59543,59547,59555,59563,59567,59575,59590,59604,59625,59633,59647,59660,59675,59694,59706,59718,59730,59742,59754,59766,59778,59786,59801,59825,59849,59857,59865,59873,59881,59886,59891,59896,59901,59906,59911,59916,59921,59926,59931,59935,59940,59945,59950,59955,59960,59965,59970,59975,59980,59984,59989,59994,59999,60004,60009,60014,60019,60024,60029,60034,60039,60044,60048,60052,60057,60062,60067,60071,60076,60081,60086,60091,60096,60100,60105,60109,60113,60117,60121,60125,60129,60134,60139,60144,60149,60154,60159,60164,60169,60174,60178,60182,60187,60192,60197,60202,60207,60211,60216,60221,60226,60231,60236,60241,60245,60249,60254,60258,60263,60267,60272,60277,60282,60287,60292,60297,60301,60309,60317,60321],{"__ignoreMap":21},[99,59055,59056],{"class":101,"line":102},[99,59057,2386],{"emptyLinePlaceholder":26},[99,59059,59060,59062,59064,59066],{"class":101,"line":22},[99,59061,51278],{"class":109},[99,59063,51282],{"class":105},[99,59065,51285],{"class":158},[99,59067,51288],{"class":109},[99,59069,59070,59072,59074,59076,59078,59080],{"class":101,"line":1165},[99,59071,1020],{"class":109},[99,59073,50616],{"class":51281},[99,59075,51297],{"class":1949},[99,59077,155],{"class":109},[99,59079,51302],{"class":214},[99,59081,51288],{"class":109},[99,59083,59084],{"class":101,"line":1180},[99,59085,2386],{"emptyLinePlaceholder":26},[99,59087,59088,59090,59092],{"class":101,"line":1186},[99,59089,1020],{"class":109},[99,59091,51315],{"class":51281},[99,59093,51288],{"class":109},[99,59095,59096,59098,59100,59102,59104,59106],{"class":101,"line":1200},[99,59097,52125],{"class":109},[99,59099,51325],{"class":51281},[99,59101,51328],{"class":1949},[99,59103,155],{"class":109},[99,59105,51333],{"class":214},[99,59107,59108],{"class":109}," \u002F>\n",[99,59110,59111,59113,59115,59117,59119,59121,59123,59125,59127],{"class":101,"line":1206},[99,59112,52125],{"class":109},[99,59114,51325],{"class":51281},[99,59116,51344],{"class":1949},[99,59118,155],{"class":109},[99,59120,51349],{"class":214},[99,59122,51352],{"class":1949},[99,59124,155],{"class":109},[99,59126,51357],{"class":214},[99,59128,59108],{"class":109},[99,59130,59131,59133,59135,59137,59139,59141,59143,59145,59147],{"class":101,"line":1297},[99,59132,52125],{"class":109},[99,59134,51325],{"class":51281},[99,59136,14907],{"class":1949},[99,59138,155],{"class":109},[99,59140,51372],{"class":214},[99,59142,51352],{"class":1949},[99,59144,155],{"class":109},[99,59146,51379],{"class":214},[99,59148,59108],{"class":109},[99,59150,59151,59153,59155,59158,59160],{"class":101,"line":1303},[99,59152,52125],{"class":109},[99,59154,51388],{"class":51281},[99,59156,59157],{"class":109},">轮播图点击切换\u003C\u002F",[99,59159,51388],{"class":51281},[99,59161,51288],{"class":109},[99,59163,59164,59166,59168],{"class":101,"line":1315},[99,59165,52125],{"class":109},[99,59167,5113],{"class":51281},[99,59169,51288],{"class":109},[99,59171,59172],{"class":101,"line":1598},[99,59173,59174],{"class":109},"    * {\n",[99,59176,59177],{"class":101,"line":1603},[99,59178,59179],{"class":109},"      box-sizing: border-box;\n",[99,59181,59182],{"class":101,"line":1609},[99,59183,2173],{"class":109},[99,59185,59186],{"class":101,"line":1614},[99,59187,2386],{"emptyLinePlaceholder":26},[99,59189,59190],{"class":101,"line":1628},[99,59191,59192],{"class":109},"    .slider {\n",[99,59194,59195],{"class":101,"line":1633},[99,59196,59197],{"class":109},"      width: 560px;\n",[99,59199,59200],{"class":101,"line":1639},[99,59201,59202],{"class":109},"      height: 400px;\n",[99,59204,59205],{"class":101,"line":1660},[99,59206,59207],{"class":109},"      overflow: hidden;\n",[99,59209,59210],{"class":101,"line":1665},[99,59211,2173],{"class":109},[99,59213,59214],{"class":101,"line":1679},[99,59215,2386],{"emptyLinePlaceholder":26},[99,59217,59218],{"class":101,"line":1684},[99,59219,59220],{"class":109},"    .slider-wrapper {\n",[99,59222,59223],{"class":101,"line":1713},[99,59224,59225],{"class":109},"      width: 100%;\n",[99,59227,59228],{"class":101,"line":1718},[99,59229,59230],{"class":109},"      height: 320px;\n",[99,59232,59233],{"class":101,"line":1735},[99,59234,2173],{"class":109},[99,59236,59237],{"class":101,"line":1740},[99,59238,2386],{"emptyLinePlaceholder":26},[99,59240,59241],{"class":101,"line":1745},[99,59242,59243],{"class":109},"    .slider-wrapper img {\n",[99,59245,59246],{"class":101,"line":1750},[99,59247,59225],{"class":109},[99,59249,59250],{"class":101,"line":1764},[99,59251,59252],{"class":109},"      height: 100%;\n",[99,59254,59255],{"class":101,"line":1769},[99,59256,59257],{"class":109},"      display: block;\n",[99,59259,59260],{"class":101,"line":2563},[99,59261,2173],{"class":109},[99,59263,59264],{"class":101,"line":2577},[99,59265,2386],{"emptyLinePlaceholder":26},[99,59267,59268],{"class":101,"line":2585},[99,59269,59270],{"class":109},"    .slider-footer {\n",[99,59272,59273],{"class":101,"line":2590},[99,59274,59275],{"class":109},"      height: 80px;\n",[99,59277,59278],{"class":101,"line":2596},[99,59279,59280],{"class":109},"      background-color: rgb(100, 67, 68);\n",[99,59282,59283],{"class":101,"line":2602},[99,59284,59285],{"class":109},"      padding: 12px 12px 0 12px;\n",[99,59287,59288],{"class":101,"line":2607},[99,59289,59290],{"class":109},"      position: relative;\n",[99,59292,59293],{"class":101,"line":7935},[99,59294,2173],{"class":109},[99,59296,59297],{"class":101,"line":7959},[99,59298,2386],{"emptyLinePlaceholder":26},[99,59300,59301],{"class":101,"line":7964},[99,59302,59303],{"class":109},"    .slider-footer .toggle {\n",[99,59305,59306],{"class":101,"line":7970},[99,59307,59308],{"class":109},"      position: absolute;\n",[99,59310,59311],{"class":101,"line":7997},[99,59312,59313],{"class":109},"      right: 0;\n",[99,59315,59316],{"class":101,"line":8002},[99,59317,59318],{"class":109},"      top: 12px;\n",[99,59320,59321],{"class":101,"line":8008},[99,59322,59323],{"class":109},"      display: flex;\n",[99,59325,59326],{"class":101,"line":8020},[99,59327,2173],{"class":109},[99,59329,59330],{"class":101,"line":8032},[99,59331,2386],{"emptyLinePlaceholder":26},[99,59333,59334],{"class":101,"line":8044},[99,59335,59336],{"class":109},"    .slider-footer .toggle button {\n",[99,59338,59339],{"class":101,"line":9703},[99,59340,59341],{"class":109},"      margin-right: 12px;\n",[99,59343,59344],{"class":101,"line":9728},[99,59345,59346],{"class":109},"      width: 28px;\n",[99,59348,59349],{"class":101,"line":9751},[99,59350,59351],{"class":109},"      height: 28px;\n",[99,59353,59354],{"class":101,"line":9775},[99,59355,59356],{"class":109},"      appearance: none;\n",[99,59358,59359],{"class":101,"line":9780},[99,59360,59361],{"class":109},"      border: none;\n",[99,59363,59364],{"class":101,"line":9785},[99,59365,59366],{"class":109},"      background: rgba(255, 255, 255, 0.1);\n",[99,59368,59369],{"class":101,"line":9790},[99,59370,59371],{"class":109},"      color: #fff;\n",[99,59373,59374],{"class":101,"line":9799},[99,59375,59376],{"class":109},"      border-radius: 4px;\n",[99,59378,59379],{"class":101,"line":9804},[99,59380,59381],{"class":109},"      cursor: pointer;\n",[99,59383,59384],{"class":101,"line":9810},[99,59385,2173],{"class":109},[99,59387,59388],{"class":101,"line":9831},[99,59389,2386],{"emptyLinePlaceholder":26},[99,59391,59392],{"class":101,"line":9837},[99,59393,59394],{"class":109},"    .slider-footer .toggle button:hover {\n",[99,59396,59397],{"class":101,"line":9851},[99,59398,59399],{"class":109},"      background: rgba(255, 255, 255, 0.2);\n",[99,59401,59402],{"class":101,"line":9857},[99,59403,2173],{"class":109},[99,59405,59406],{"class":101,"line":9884},[99,59407,2386],{"emptyLinePlaceholder":26},[99,59409,59410],{"class":101,"line":9893},[99,59411,59412],{"class":109},"    .slider-footer p {\n",[99,59414,59415],{"class":101,"line":9899},[99,59416,59417],{"class":109},"      margin: 0;\n",[99,59419,59420],{"class":101,"line":9907},[99,59421,59371],{"class":109},[99,59423,59424],{"class":101,"line":9912},[99,59425,59426],{"class":109},"      font-size: 18px;\n",[99,59428,59429],{"class":101,"line":16591},[99,59430,59431],{"class":109},"      margin-bottom: 10px;\n",[99,59433,59434],{"class":101,"line":16597},[99,59435,2173],{"class":109},[99,59437,59438],{"class":101,"line":16620},[99,59439,2386],{"emptyLinePlaceholder":26},[99,59441,59442],{"class":101,"line":16626},[99,59443,59444],{"class":109},"    .slider-indicator {\n",[99,59446,59447],{"class":101,"line":16649},[99,59448,59417],{"class":109},[99,59450,59451],{"class":101,"line":16663},[99,59452,59453],{"class":109},"      padding: 0;\n",[99,59455,59456],{"class":101,"line":16683},[99,59457,59458],{"class":109},"      list-style: none;\n",[99,59460,59461],{"class":101,"line":16689},[99,59462,59323],{"class":109},[99,59464,59465],{"class":101,"line":16700},[99,59466,59467],{"class":109},"      align-items: center;\n",[99,59469,59470],{"class":101,"line":16723},[99,59471,2173],{"class":109},[99,59473,59474],{"class":101,"line":16745},[99,59475,2386],{"emptyLinePlaceholder":26},[99,59477,59478],{"class":101,"line":16750},[99,59479,59480],{"class":109},"    .slider-indicator li {\n",[99,59482,59483],{"class":101,"line":16756},[99,59484,59485],{"class":109},"      width: 8px;\n",[99,59487,59488],{"class":101,"line":16770},[99,59489,59490],{"class":109},"      height: 8px;\n",[99,59492,59493],{"class":101,"line":16783},[99,59494,59495],{"class":109},"      margin: 4px;\n",[99,59497,59498],{"class":101,"line":16788},[99,59499,59500],{"class":109},"      border-radius: 50%;\n",[99,59502,59503],{"class":101,"line":16802},[99,59504,59505],{"class":109},"      background: #fff;\n",[99,59507,59508],{"class":101,"line":16807},[99,59509,59510],{"class":109},"      opacity: 0.4;\n",[99,59512,59513],{"class":101,"line":16813},[99,59514,59381],{"class":109},[99,59516,59517],{"class":101,"line":16818},[99,59518,2173],{"class":109},[99,59520,59521],{"class":101,"line":16832},[99,59522,2386],{"emptyLinePlaceholder":26},[99,59524,59525],{"class":101,"line":16837},[99,59526,59527],{"class":109},"    .slider-indicator li.active {\n",[99,59529,59530],{"class":101,"line":16842},[99,59531,59532],{"class":109},"      width: 12px;\n",[99,59534,59535],{"class":101,"line":16856},[99,59536,59537],{"class":109},"      height: 12px;\n",[99,59539,59540],{"class":101,"line":16868},[99,59541,59542],{"class":109},"      opacity: 1;\n",[99,59544,59545],{"class":101,"line":16873},[99,59546,2173],{"class":109},[99,59548,59549,59551,59553],{"class":101,"line":16886},[99,59550,52398],{"class":109},[99,59552,5113],{"class":51281},[99,59554,51288],{"class":109},[99,59556,59557,59559,59561],{"class":101,"line":16891},[99,59558,51766],{"class":109},[99,59560,51315],{"class":51281},[99,59562,51288],{"class":109},[99,59564,59565],{"class":101,"line":16896},[99,59566,2386],{"emptyLinePlaceholder":26},[99,59568,59569,59571,59573],{"class":101,"line":16901},[99,59570,1020],{"class":109},[99,59572,51781],{"class":51281},[99,59574,51288],{"class":109},[99,59576,59577,59579,59581,59583,59585,59588],{"class":101,"line":16914},[99,59578,52125],{"class":109},[99,59580,51592],{"class":51281},[99,59582,53467],{"class":1949},[99,59584,155],{"class":109},[99,59586,59587],{"class":214},"\"slider\"",[99,59589,51288],{"class":109},[99,59591,59592,59594,59596,59598,59600,59602],{"class":101,"line":16919},[99,59593,51322],{"class":109},[99,59595,51592],{"class":51281},[99,59597,53467],{"class":1949},[99,59599,155],{"class":109},[99,59601,55208],{"class":214},[99,59603,51288],{"class":109},[99,59605,59606,59608,59610,59612,59614,59617,59619,59621,59623],{"class":101,"line":32614},[99,59607,55215],{"class":109},[99,59609,1448],{"class":51281},[99,59611,55220],{"class":1949},[99,59613,155],{"class":109},[99,59615,59616],{"class":214},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[99,59618,55228],{"class":1949},[99,59620,155],{"class":109},[99,59622,7639],{"class":214},[99,59624,59108],{"class":109},[99,59626,59627,59629,59631],{"class":101,"line":32620},[99,59628,51757],{"class":109},[99,59630,51592],{"class":51281},[99,59632,51288],{"class":109},[99,59634,59635,59637,59639,59641,59643,59645],{"class":101,"line":32626},[99,59636,51322],{"class":109},[99,59638,51592],{"class":51281},[99,59640,53467],{"class":1949},[99,59642,155],{"class":109},[99,59644,55255],{"class":214},[99,59646,51288],{"class":109},[99,59648,59649,59651,59653,59656,59658],{"class":101,"line":32632},[99,59650,55215],{"class":109},[99,59652,14],{"class":51281},[99,59654,59655],{"class":109},">对人类来说会不会太超前了？\u003C\u002F",[99,59657,14],{"class":51281},[99,59659,51288],{"class":109},[99,59661,59662,59664,59666,59668,59670,59673],{"class":101,"line":32638},[99,59663,55215],{"class":109},[99,59665,1117],{"class":51281},[99,59667,53467],{"class":1949},[99,59669,155],{"class":109},[99,59671,59672],{"class":214},"\"slider-indicator\"",[99,59674,51288],{"class":109},[99,59676,59677,59679,59681,59683,59685,59688,59690,59692],{"class":101,"line":32649},[99,59678,55283],{"class":109},[99,59680,56],{"class":51281},[99,59682,53467],{"class":1949},[99,59684,155],{"class":109},[99,59686,59687],{"class":214},"\"active\"",[99,59689,55295],{"class":109},[99,59691,56],{"class":51281},[99,59693,51288],{"class":109},[99,59695,59696,59698,59700,59702,59704],{"class":101,"line":32655},[99,59697,55283],{"class":109},[99,59699,56],{"class":51281},[99,59701,55295],{"class":109},[99,59703,56],{"class":51281},[99,59705,51288],{"class":109},[99,59707,59708,59710,59712,59714,59716],{"class":101,"line":32675},[99,59709,55283],{"class":109},[99,59711,56],{"class":51281},[99,59713,55295],{"class":109},[99,59715,56],{"class":51281},[99,59717,51288],{"class":109},[99,59719,59720,59722,59724,59726,59728],{"class":101,"line":32681},[99,59721,55283],{"class":109},[99,59723,56],{"class":51281},[99,59725,55295],{"class":109},[99,59727,56],{"class":51281},[99,59729,51288],{"class":109},[99,59731,59732,59734,59736,59738,59740],{"class":101,"line":32692},[99,59733,55283],{"class":109},[99,59735,56],{"class":51281},[99,59737,55295],{"class":109},[99,59739,56],{"class":51281},[99,59741,51288],{"class":109},[99,59743,59744,59746,59748,59750,59752],{"class":101,"line":32698},[99,59745,55283],{"class":109},[99,59747,56],{"class":51281},[99,59749,55295],{"class":109},[99,59751,56],{"class":51281},[99,59753,51288],{"class":109},[99,59755,59756,59758,59760,59762,59764],{"class":101,"line":32704},[99,59757,55283],{"class":109},[99,59759,56],{"class":51281},[99,59761,55295],{"class":109},[99,59763,56],{"class":51281},[99,59765,51288],{"class":109},[99,59767,59768,59770,59772,59774,59776],{"class":101,"line":32710},[99,59769,55283],{"class":109},[99,59771,56],{"class":51281},[99,59773,55295],{"class":109},[99,59775,56],{"class":51281},[99,59777,51288],{"class":109},[99,59779,59780,59782,59784],{"class":101,"line":32716},[99,59781,55388],{"class":109},[99,59783,1117],{"class":51281},[99,59785,51288],{"class":109},[99,59787,59788,59790,59792,59794,59796,59799],{"class":101,"line":32722},[99,59789,55215],{"class":109},[99,59791,51592],{"class":51281},[99,59793,53467],{"class":1949},[99,59795,155],{"class":109},[99,59797,59798],{"class":214},"\"toggle\"",[99,59800,51288],{"class":109},[99,59802,59803,59805,59807,59809,59811,59814,59816,59819,59821,59823],{"class":101,"line":32728},[99,59804,55283],{"class":109},[99,59806,53868],{"class":51281},[99,59808,53467],{"class":1949},[99,59810,155],{"class":109},[99,59812,59813],{"class":214},"\"prev\"",[99,59815,1070],{"class":109},[99,59817,59818],{"class":158},"&lt;",[99,59820,51766],{"class":109},[99,59822,53868],{"class":51281},[99,59824,51288],{"class":109},[99,59826,59827,59829,59831,59833,59835,59838,59840,59843,59845,59847],{"class":101,"line":32734},[99,59828,55283],{"class":109},[99,59830,53868],{"class":51281},[99,59832,53467],{"class":1949},[99,59834,155],{"class":109},[99,59836,59837],{"class":214},"\"next\"",[99,59839,1070],{"class":109},[99,59841,59842],{"class":158},"&gt;",[99,59844,51766],{"class":109},[99,59846,53868],{"class":51281},[99,59848,51288],{"class":109},[99,59850,59851,59853,59855],{"class":101,"line":32754},[99,59852,55388],{"class":109},[99,59854,51592],{"class":51281},[99,59856,51288],{"class":109},[99,59858,59859,59861,59863],{"class":101,"line":32760},[99,59860,51757],{"class":109},[99,59862,51592],{"class":51281},[99,59864,51288],{"class":109},[99,59866,59867,59869,59871],{"class":101,"line":32776},[99,59868,52398],{"class":109},[99,59870,51592],{"class":51281},[99,59872,51288],{"class":109},[99,59874,59875,59877,59879],{"class":101,"line":32782},[99,59876,52125],{"class":109},[99,59878,51794],{"class":51281},[99,59880,51288],{"class":109},[99,59882,59883],{"class":101,"line":32796},[99,59884,59885],{"class":109},"    \u002F\u002F 1. 初始数据\n",[99,59887,59888],{"class":101,"line":32802},[99,59889,59890],{"class":109},"    const data = [\n",[99,59892,59893],{"class":101,"line":32817},[99,59894,59895],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[99,59897,59898],{"class":101,"line":32823},[99,59899,59900],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[99,59902,59903],{"class":101,"line":32832},[99,59904,59905],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[99,59907,59908],{"class":101,"line":32838},[99,59909,59910],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[99,59912,59913],{"class":101,"line":32847},[99,59914,59915],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[99,59917,59918],{"class":101,"line":32853},[99,59919,59920],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[99,59922,59923],{"class":101,"line":32859},[99,59924,59925],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[99,59927,59928],{"class":101,"line":32868},[99,59929,59930],{"class":109},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[99,59932,59933],{"class":101,"line":32874},[99,59934,53090],{"class":109},[99,59936,59937],{"class":101,"line":32885},[99,59938,59939],{"class":109},"    \u002F\u002F 获取元素\n",[99,59941,59942],{"class":101,"line":32891},[99,59943,59944],{"class":109},"    const img = document.querySelector('.slider-wrapper img')\n",[99,59946,59947],{"class":101,"line":32910},[99,59948,59949],{"class":109},"    const p = document.querySelector('.slider-footer p')\n",[99,59951,59952],{"class":101,"line":32916},[99,59953,59954],{"class":109},"    const footer = document.querySelector('.slider-footer')\n",[99,59956,59957],{"class":101,"line":32927},[99,59958,59959],{"class":109},"    \u002F\u002F 1. 右按钮业务\n",[99,59961,59962],{"class":101,"line":32933},[99,59963,59964],{"class":109},"    \u002F\u002F 1.1 获取右侧按钮 \n",[99,59966,59967],{"class":101,"line":32953},[99,59968,59969],{"class":109},"    const next = document.querySelector('.next')\n",[99,59971,59972],{"class":101,"line":32969},[99,59973,59974],{"class":109},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[99,59976,59977],{"class":101,"line":32975},[99,59978,59979],{"class":109},"    \u002F\u002F 1.2 注册点击事件\n",[99,59981,59982],{"class":101,"line":32989},[99,59983,2386],{"emptyLinePlaceholder":26},[99,59985,59986],{"class":101,"line":32995},[99,59987,59988],{"class":109},"    next.addEventListener('click', function () {\n",[99,59990,59991],{"class":101,"line":33001},[99,59992,59993],{"class":109},"      \u002F\u002F console.log(11)\n",[99,59995,59996],{"class":101,"line":33012},[99,59997,59998],{"class":109},"      i++\n",[99,60000,60001],{"class":101,"line":33018},[99,60002,60003],{"class":109},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[99,60005,60006],{"class":101,"line":33024},[99,60007,60008],{"class":109},"      \u002F\u002F if (i >= 8) {\n",[99,60010,60011],{"class":101,"line":33034},[99,60012,60013],{"class":109},"      \u002F\u002F   i = 0\n",[99,60015,60016],{"class":101,"line":33040},[99,60017,60018],{"class":109},"      \u002F\u002F }\n",[99,60020,60021],{"class":101,"line":33051},[99,60022,60023],{"class":109},"      i = i >= data.length ? 0 : i\n",[99,60025,60026],{"class":101,"line":33057},[99,60027,60028],{"class":109},"      \u002F\u002F 1.3 得到对应的对象\n",[99,60030,60031],{"class":101,"line":33067},[99,60032,60033],{"class":109},"      \u002F\u002F console.log(data[i])\n",[99,60035,60036],{"class":101,"line":33072},[99,60037,60038],{"class":109},"      \u002F\u002F 调用函数\n",[99,60040,60041],{"class":101,"line":33078},[99,60042,60043],{"class":109},"      toggle()\n",[99,60045,60046],{"class":101,"line":33127},[99,60047,33442],{"class":109},[99,60049,60050],{"class":101,"line":33174},[99,60051,2386],{"emptyLinePlaceholder":26},[99,60053,60054],{"class":101,"line":33179},[99,60055,60056],{"class":109},"    \u002F\u002F 2. 左侧按钮业务\n",[99,60058,60059],{"class":101,"line":33185},[99,60060,60061],{"class":109},"    \u002F\u002F 2.1 获取左侧按钮 \n",[99,60063,60064],{"class":101,"line":33204},[99,60065,60066],{"class":109},"    const prev = document.querySelector('.prev')\n",[99,60068,60069],{"class":101,"line":33210},[99,60070,59979],{"class":109},[99,60072,60073],{"class":101,"line":33230},[99,60074,60075],{"class":109},"    prev.addEventListener('click', function () {\n",[99,60077,60078],{"class":101,"line":33236},[99,60079,60080],{"class":109},"      i--\n",[99,60082,60083],{"class":101,"line":33242},[99,60084,60085],{"class":109},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[99,60087,60088],{"class":101,"line":33252},[99,60089,60090],{"class":109},"      \u002F\u002F if (i \u003C 0) {\n",[99,60092,60093],{"class":101,"line":33257},[99,60094,60095],{"class":109},"      \u002F\u002F   i = 7\n",[99,60097,60098],{"class":101,"line":33263},[99,60099,60018],{"class":109},[99,60101,60102],{"class":101,"line":33279},[99,60103,60104],{"class":109},"      i = i \u003C 0 ? data.length - 1 : i\n",[99,60106,60107],{"class":101,"line":33324},[99,60108,60028],{"class":109},[99,60110,60111],{"class":101,"line":33330},[99,60112,60033],{"class":109},[99,60114,60115],{"class":101,"line":33336},[99,60116,60038],{"class":109},[99,60118,60119],{"class":101,"line":33342},[99,60120,60043],{"class":109},[99,60122,60123],{"class":101,"line":33353},[99,60124,33442],{"class":109},[99,60126,60127],{"class":101,"line":33359},[99,60128,2386],{"emptyLinePlaceholder":26},[99,60130,60131],{"class":101,"line":33365},[99,60132,60133],{"class":109},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[99,60135,60136],{"class":101,"line":33371},[99,60137,60138],{"class":109},"    function toggle() {\n",[99,60140,60141],{"class":101,"line":33389},[99,60142,60143],{"class":109},"      \u002F\u002F 1.4 渲染对应的数据\n",[99,60145,60146],{"class":101,"line":33403},[99,60147,60148],{"class":109},"      img.src = data[i].url\n",[99,60150,60151],{"class":101,"line":33412},[99,60152,60153],{"class":109},"      p.innerHTML = data[i].title\n",[99,60155,60156],{"class":101,"line":33421},[99,60157,60158],{"class":109},"      footer.style.backgroundColor = data[i].color\n",[99,60160,60161],{"class":101,"line":33430},[99,60162,60163],{"class":109},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[99,60165,60166],{"class":101,"line":33439},[99,60167,60168],{"class":109},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[99,60170,60171],{"class":101,"line":33445},[99,60172,60173],{"class":109},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[99,60175,60176],{"class":101,"line":33451},[99,60177,2173],{"class":109},[99,60179,60180],{"class":101,"line":33459},[99,60181,2386],{"emptyLinePlaceholder":26},[99,60183,60184],{"class":101,"line":33464},[99,60185,60186],{"class":109},"    \u002F\u002F 3. 自动播放模块\n",[99,60188,60189],{"class":101,"line":33470},[99,60190,60191],{"class":109},"    let timerId = setInterval(function () {\n",[99,60193,60194],{"class":101,"line":33481},[99,60195,60196],{"class":109},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[99,60198,60199],{"class":101,"line":33487},[99,60200,60201],{"class":109},"      next.click()\n",[99,60203,60204],{"class":101,"line":33507},[99,60205,60206],{"class":109},"    }, 1000)\n",[99,60208,60209],{"class":101,"line":33513},[99,60210,2386],{"emptyLinePlaceholder":26},[99,60212,60213],{"class":101,"line":33519},[99,60214,60215],{"class":109},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[99,60217,60218],{"class":101,"line":33525},[99,60219,60220],{"class":109},"    const slider = document.querySelector('.slider')\n",[99,60222,60223],{"class":101,"line":33542},[99,60224,60225],{"class":109},"    \u002F\u002F 注册事件\n",[99,60227,60228],{"class":101,"line":33548},[99,60229,60230],{"class":109},"    slider.addEventListener('mouseenter', function () {\n",[99,60232,60233],{"class":101,"line":33554},[99,60234,60235],{"class":109},"      \u002F\u002F 停止定时器\n",[99,60237,60238],{"class":101,"line":33560},[99,60239,60240],{"class":109},"      clearInterval(timerId)\n",[99,60242,60243],{"class":101,"line":33566},[99,60244,33442],{"class":109},[99,60246,60247],{"class":101,"line":33572},[99,60248,2386],{"emptyLinePlaceholder":26},[99,60250,60251],{"class":101,"line":33599},[99,60252,60253],{"class":109},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[99,60255,60256],{"class":101,"line":33623},[99,60257,60225],{"class":109},[99,60259,60260],{"class":101,"line":33629},[99,60261,60262],{"class":109},"    slider.addEventListener('mouseleave', function () {\n",[99,60264,60265],{"class":101,"line":33635},[99,60266,60235],{"class":109},[99,60268,60269],{"class":101,"line":33641},[99,60270,60271],{"class":109},"      if (timerId) clearInterval(timerId)\n",[99,60273,60274],{"class":101,"line":33652},[99,60275,60276],{"class":109},"      \u002F\u002F 开启定时器\n",[99,60278,60279],{"class":101,"line":33663},[99,60280,60281],{"class":109},"      timerId = setInterval(function () {\n",[99,60283,60284],{"class":101,"line":33669},[99,60285,60286],{"class":109},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[99,60288,60289],{"class":101,"line":33686},[99,60290,60291],{"class":109},"        next.click()\n",[99,60293,60294],{"class":101,"line":33709},[99,60295,60296],{"class":109},"      }, 1000)\n",[99,60298,60299],{"class":101,"line":33732},[99,60300,33442],{"class":109},[99,60302,60303,60305,60307],{"class":101,"line":33738},[99,60304,52398],{"class":109},[99,60306,51794],{"class":51281},[99,60308,51288],{"class":109},[99,60310,60311,60313,60315],{"class":101,"line":33743},[99,60312,51766],{"class":109},[99,60314,51781],{"class":51281},[99,60316,51288],{"class":109},[99,60318,60319],{"class":101,"line":33752},[99,60320,2386],{"emptyLinePlaceholder":26},[99,60322,60323,60325,60327],{"class":101,"line":33762},[99,60324,51766],{"class":109},[99,60326,50616],{"class":51281},[99,60328,51288],{"class":109},[21985,60330,60332],{"id":60331},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60334,60335],{},"小米搜索框案例：",[90,60337,60339],{"className":50614,"code":60338,"language":50616,"meta":21,"style":21},"\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",[96,60340,60341,60351,60365,60369,60377,60391,60411,60431,60443,60451,60457,60467,60477,60489,60493,60497,60504,60508,60519,60523,60527,60534,60545,60558,60572,60576,60580,60589,60601,60613,60627,60640,60653,60671,60682,60686,60690,60699,60716,60720,60724,60731,60741,60751,60762,60775,60787,60803,60814,60826,60830,60834,60842,60853,60870,60882,60894,60905,60909,60913,60924,60935,60939,60947,60951,60959,60963,60971,60986,61009,61024,61055,61082,61109,61136,61163,61190,61217,61226,61234,61242,61247,61267,61287,61292,61297,61315,61320,61330,61335,61349,61354,61359,61376,61385,61397,61401,61409,61417,61421],{"__ignoreMap":21},[99,60342,60343,60345,60347,60349],{"class":101,"line":102},[99,60344,51278],{"class":109},[99,60346,51282],{"class":51281},[99,60348,51285],{"class":1949},[99,60350,51288],{"class":109},[99,60352,60353,60355,60357,60359,60361,60363],{"class":101,"line":22},[99,60354,1020],{"class":109},[99,60356,50616],{"class":51281},[99,60358,51297],{"class":1949},[99,60360,155],{"class":109},[99,60362,51302],{"class":214},[99,60364,51288],{"class":109},[99,60366,60367],{"class":101,"line":1165},[99,60368,2386],{"emptyLinePlaceholder":26},[99,60370,60371,60373,60375],{"class":101,"line":1180},[99,60372,1020],{"class":109},[99,60374,51315],{"class":51281},[99,60376,51288],{"class":109},[99,60378,60379,60381,60383,60385,60387,60389],{"class":101,"line":1186},[99,60380,51322],{"class":109},[99,60382,51325],{"class":51281},[99,60384,51328],{"class":1949},[99,60386,155],{"class":109},[99,60388,51333],{"class":214},[99,60390,51288],{"class":109},[99,60392,60393,60395,60397,60399,60401,60403,60405,60407,60409],{"class":101,"line":1200},[99,60394,51322],{"class":109},[99,60396,51325],{"class":51281},[99,60398,51344],{"class":1949},[99,60400,155],{"class":109},[99,60402,51349],{"class":214},[99,60404,51352],{"class":1949},[99,60406,155],{"class":109},[99,60408,51357],{"class":214},[99,60410,51288],{"class":109},[99,60412,60413,60415,60417,60419,60421,60423,60425,60427,60429],{"class":101,"line":1206},[99,60414,51322],{"class":109},[99,60416,51325],{"class":51281},[99,60418,14907],{"class":1949},[99,60420,155],{"class":109},[99,60422,51372],{"class":214},[99,60424,51352],{"class":1949},[99,60426,155],{"class":109},[99,60428,51379],{"class":214},[99,60430,51288],{"class":109},[99,60432,60433,60435,60437,60439,60441],{"class":101,"line":1297},[99,60434,51322],{"class":109},[99,60436,51388],{"class":51281},[99,60438,51391],{"class":109},[99,60440,51388],{"class":51281},[99,60442,51288],{"class":109},[99,60444,60445,60447,60449],{"class":101,"line":1303},[99,60446,51322],{"class":109},[99,60448,5113],{"class":51281},[99,60450,51288],{"class":109},[99,60452,60453,60455],{"class":101,"line":1315},[99,60454,51408],{"class":51281},[99,60456,15559],{"class":109},[99,60458,60459,60461,60463,60465],{"class":101,"line":1598},[99,60460,51415],{"class":158},[99,60462,51418],{"class":109},[99,60464,301],{"class":158},[99,60466,1276],{"class":109},[99,60468,60469,60471,60473,60475],{"class":101,"line":1603},[99,60470,51427],{"class":158},[99,60472,51418],{"class":109},[99,60474,301],{"class":158},[99,60476,1276],{"class":109},[99,60478,60479,60482,60484,60487],{"class":101,"line":1609},[99,60480,60481],{"class":158},"            box-sizing",[99,60483,51418],{"class":109},[99,60485,60486],{"class":158},"border-box",[99,60488,1276],{"class":109},[99,60490,60491],{"class":101,"line":1614},[99,60492,2515],{"class":109},[99,60494,60495],{"class":101,"line":1628},[99,60496,2386],{"emptyLinePlaceholder":26},[99,60498,60499,60502],{"class":101,"line":1633},[99,60500,60501],{"class":51281},"        ul",[99,60503,15559],{"class":109},[99,60505,60506],{"class":101,"line":1639},[99,60507,2386],{"emptyLinePlaceholder":26},[99,60509,60510,60513,60515,60517],{"class":101,"line":1660},[99,60511,60512],{"class":158},"            list-style",[99,60514,51418],{"class":109},[99,60516,54718],{"class":158},[99,60518,1276],{"class":109},[99,60520,60521],{"class":101,"line":1665},[99,60522,2515],{"class":109},[99,60524,60525],{"class":101,"line":1679},[99,60526,2386],{"emptyLinePlaceholder":26},[99,60528,60529,60532],{"class":101,"line":1684},[99,60530,60531],{"class":1949},"        .mi",[99,60533,15559],{"class":109},[99,60535,60536,60539,60541,60543],{"class":101,"line":1713},[99,60537,60538],{"class":158},"            position",[99,60540,51418],{"class":109},[99,60542,54745],{"class":158},[99,60544,1276],{"class":109},[99,60546,60547,60549,60551,60554,60556],{"class":101,"line":1718},[99,60548,51465],{"class":158},[99,60550,51418],{"class":109},[99,60552,60553],{"class":158},"223",[99,60555,51473],{"class":105},[99,60557,1276],{"class":109},[99,60559,60560,60562,60564,60566,60568,60570],{"class":101,"line":1735},[99,60561,51415],{"class":158},[99,60563,51418],{"class":109},[99,60565,421],{"class":158},[99,60567,51473],{"class":105},[99,60569,51537],{"class":158},[99,60571,1276],{"class":109},[99,60573,60574],{"class":101,"line":1740},[99,60575,2515],{"class":109},[99,60577,60578],{"class":101,"line":1745},[99,60579,2386],{"emptyLinePlaceholder":26},[99,60581,60582,60584,60587],{"class":101,"line":1750},[99,60583,60531],{"class":1949},[99,60585,60586],{"class":51281}," input",[99,60588,15559],{"class":109},[99,60590,60591,60593,60595,60597,60599],{"class":101,"line":1764},[99,60592,51465],{"class":158},[99,60594,51418],{"class":109},[99,60596,60553],{"class":158},[99,60598,51473],{"class":105},[99,60600,1276],{"class":109},[99,60602,60603,60605,60607,60609,60611],{"class":101,"line":1769},[99,60604,51480],{"class":158},[99,60606,51418],{"class":109},[99,60608,717],{"class":158},[99,60610,51473],{"class":105},[99,60612,1276],{"class":109},[99,60614,60615,60617,60619,60621,60623,60625],{"class":101,"line":2563},[99,60616,51427],{"class":158},[99,60618,51418],{"class":109},[99,60620,301],{"class":158},[99,60622,2024],{"class":158},[99,60624,51473],{"class":105},[99,60626,1276],{"class":109},[99,60628,60629,60632,60634,60636,60638],{"class":101,"line":2577},[99,60630,60631],{"class":158},"            font-size",[99,60633,51418],{"class":109},[99,60635,659],{"class":158},[99,60637,51473],{"class":105},[99,60639,1276],{"class":109},[99,60641,60642,60645,60647,60649,60651],{"class":101,"line":2585},[99,60643,60644],{"class":158},"            line-height",[99,60646,51418],{"class":109},[99,60648,717],{"class":158},[99,60650,51473],{"class":105},[99,60652,1276],{"class":109},[99,60654,60655,60658,60660,60662,60664,60666,60669],{"class":101,"line":2590},[99,60656,60657],{"class":158},"            border",[99,60659,51418],{"class":109},[99,60661,327],{"class":158},[99,60663,51473],{"class":105},[99,60665,51502],{"class":158},[99,60667,60668],{"class":158}," #e0e0e0",[99,60670,1276],{"class":109},[99,60672,60673,60676,60678,60680],{"class":101,"line":2596},[99,60674,60675],{"class":158},"            outline",[99,60677,51418],{"class":109},[99,60679,54718],{"class":158},[99,60681,1276],{"class":109},[99,60683,60684],{"class":101,"line":2602},[99,60685,2515],{"class":109},[99,60687,60688],{"class":101,"line":2607},[99,60689,2386],{"emptyLinePlaceholder":26},[99,60691,60692,60694,60697],{"class":101,"line":7935},[99,60693,60531],{"class":1949},[99,60695,60696],{"class":1949}," .search",[99,60698,15559],{"class":109},[99,60700,60701,60703,60705,60707,60709,60711,60714],{"class":101,"line":7959},[99,60702,60657],{"class":158},[99,60704,51418],{"class":109},[99,60706,327],{"class":158},[99,60708,51473],{"class":105},[99,60710,51502],{"class":158},[99,60712,60713],{"class":158}," #ff6700",[99,60715,1276],{"class":109},[99,60717,60718],{"class":101,"line":7964},[99,60719,2515],{"class":109},[99,60721,60722],{"class":101,"line":7970},[99,60723,2386],{"emptyLinePlaceholder":26},[99,60725,60726,60729],{"class":101,"line":7997},[99,60727,60728],{"class":1949},"        .result-list",[99,60730,15559],{"class":109},[99,60732,60733,60735,60737,60739],{"class":101,"line":8002},[99,60734,51453],{"class":158},[99,60736,51418],{"class":109},[99,60738,54718],{"class":158},[99,60740,1276],{"class":109},[99,60742,60743,60745,60747,60749],{"class":101,"line":8008},[99,60744,60538],{"class":158},[99,60746,51418],{"class":109},[99,60748,54812],{"class":158},[99,60750,1276],{"class":109},[99,60752,60753,60756,60758,60760],{"class":101,"line":8020},[99,60754,60755],{"class":158},"            left",[99,60757,51418],{"class":109},[99,60759,301],{"class":158},[99,60761,1276],{"class":109},[99,60763,60764,60767,60769,60771,60773],{"class":101,"line":8032},[99,60765,60766],{"class":158},"            top",[99,60768,51418],{"class":109},[99,60770,717],{"class":158},[99,60772,51473],{"class":105},[99,60774,1276],{"class":109},[99,60776,60777,60779,60781,60783,60785],{"class":101,"line":8044},[99,60778,51465],{"class":158},[99,60780,51418],{"class":109},[99,60782,60553],{"class":158},[99,60784,51473],{"class":105},[99,60786,1276],{"class":109},[99,60788,60789,60791,60793,60795,60797,60799,60801],{"class":101,"line":9703},[99,60790,60657],{"class":158},[99,60792,51418],{"class":109},[99,60794,327],{"class":158},[99,60796,51473],{"class":105},[99,60798,51502],{"class":158},[99,60800,60713],{"class":158},[99,60802,1276],{"class":109},[99,60804,60805,60808,60810,60812],{"class":101,"line":9728},[99,60806,60807],{"class":158},"            border-top",[99,60809,51418],{"class":109},[99,60811,301],{"class":158},[99,60813,1276],{"class":109},[99,60815,60816,60819,60821,60824],{"class":101,"line":9751},[99,60817,60818],{"class":158},"            background",[99,60820,51418],{"class":109},[99,60822,60823],{"class":158},"#fff",[99,60825,1276],{"class":109},[99,60827,60828],{"class":101,"line":9775},[99,60829,2515],{"class":109},[99,60831,60832],{"class":101,"line":9780},[99,60833,2386],{"emptyLinePlaceholder":26},[99,60835,60836,60838,60840],{"class":101,"line":9785},[99,60837,60728],{"class":1949},[99,60839,1384],{"class":51281},[99,60841,15559],{"class":109},[99,60843,60844,60846,60848,60851],{"class":101,"line":9790},[99,60845,51453],{"class":158},[99,60847,51418],{"class":109},[99,60849,60850],{"class":158},"block",[99,60852,1276],{"class":109},[99,60854,60855,60857,60859,60861,60863,60866,60868],{"class":101,"line":9799},[99,60856,51427],{"class":158},[99,60858,51418],{"class":109},[99,60860,454],{"class":158},[99,60862,51473],{"class":105},[99,60864,60865],{"class":158}," 15",[99,60867,51473],{"class":105},[99,60869,1276],{"class":109},[99,60871,60872,60874,60876,60878,60880],{"class":101,"line":9804},[99,60873,60631],{"class":158},[99,60875,51418],{"class":109},[99,60877,608],{"class":158},[99,60879,51473],{"class":105},[99,60881,1276],{"class":109},[99,60883,60884,60887,60889,60892],{"class":101,"line":9810},[99,60885,60886],{"class":158},"            color",[99,60888,51418],{"class":109},[99,60890,60891],{"class":158},"#424242",[99,60893,1276],{"class":109},[99,60895,60896,60899,60901,60903],{"class":101,"line":9831},[99,60897,60898],{"class":158},"            text-decoration",[99,60900,51418],{"class":109},[99,60902,54718],{"class":158},[99,60904,1276],{"class":109},[99,60906,60907],{"class":101,"line":9837},[99,60908,2515],{"class":109},[99,60910,60911],{"class":101,"line":9851},[99,60912,2386],{"emptyLinePlaceholder":26},[99,60914,60915,60917,60919,60922],{"class":101,"line":9857},[99,60916,60728],{"class":1949},[99,60918,1384],{"class":51281},[99,60920,60921],{"class":1949},":hover",[99,60923,15559],{"class":109},[99,60925,60926,60928,60930,60933],{"class":101,"line":9884},[99,60927,51621],{"class":158},[99,60929,51418],{"class":109},[99,60931,60932],{"class":158},"#eee",[99,60934,1276],{"class":109},[99,60936,60937],{"class":101,"line":9893},[99,60938,2515],{"class":109},[99,60940,60941,60943,60945],{"class":101,"line":9899},[99,60942,51757],{"class":109},[99,60944,5113],{"class":51281},[99,60946,51288],{"class":109},[99,60948,60949],{"class":101,"line":9907},[99,60950,2386],{"emptyLinePlaceholder":26},[99,60952,60953,60955,60957],{"class":101,"line":9912},[99,60954,51766],{"class":109},[99,60956,51315],{"class":51281},[99,60958,51288],{"class":109},[99,60960,60961],{"class":101,"line":16591},[99,60962,2386],{"emptyLinePlaceholder":26},[99,60964,60965,60967,60969],{"class":101,"line":16597},[99,60966,1020],{"class":109},[99,60968,51781],{"class":51281},[99,60970,51288],{"class":109},[99,60972,60973,60975,60977,60979,60981,60984],{"class":101,"line":16620},[99,60974,51322],{"class":109},[99,60976,51592],{"class":51281},[99,60978,53467],{"class":1949},[99,60980,155],{"class":109},[99,60982,60983],{"class":214},"\"mi\"",[99,60985,51288],{"class":109},[99,60987,60988,60990,60992,60994,60996,60999,61002,61004,61007],{"class":101,"line":16626},[99,60989,55283],{"class":109},[99,60991,53802],{"class":51281},[99,60993,53805],{"class":1949},[99,60995,155],{"class":109},[99,60997,60998],{"class":214},"\"search\"",[99,61000,61001],{"class":1949}," placeholder",[99,61003,155],{"class":109},[99,61005,61006],{"class":214},"\"小米笔记本\"",[99,61008,51288],{"class":109},[99,61010,61011,61013,61015,61017,61019,61022],{"class":101,"line":16649},[99,61012,55283],{"class":109},[99,61014,1117],{"class":51281},[99,61016,53467],{"class":1949},[99,61018,155],{"class":109},[99,61020,61021],{"class":214},"\"result-list\"",[99,61023,51288],{"class":109},[99,61025,61026,61029,61031,61034,61036,61039,61041,61044,61047,61049,61051,61053],{"class":101,"line":16663},[99,61027,61028],{"class":109},"            \u003C",[99,61030,56],{"class":51281},[99,61032,61033],{"class":109},">\u003C",[99,61035,348],{"class":51281},[99,61037,61038],{"class":1949}," href",[99,61040,155],{"class":109},[99,61042,61043],{"class":214},"\"#\"",[99,61045,61046],{"class":109},">全部商品\u003C\u002F",[99,61048,348],{"class":51281},[99,61050,55295],{"class":109},[99,61052,56],{"class":51281},[99,61054,51288],{"class":109},[99,61056,61057,61059,61061,61063,61065,61067,61069,61071,61074,61076,61078,61080],{"class":101,"line":16683},[99,61058,61028],{"class":109},[99,61060,56],{"class":51281},[99,61062,61033],{"class":109},[99,61064,348],{"class":51281},[99,61066,61038],{"class":1949},[99,61068,155],{"class":109},[99,61070,61043],{"class":214},[99,61072,61073],{"class":109},">小米11\u003C\u002F",[99,61075,348],{"class":51281},[99,61077,55295],{"class":109},[99,61079,56],{"class":51281},[99,61081,51288],{"class":109},[99,61083,61084,61086,61088,61090,61092,61094,61096,61098,61101,61103,61105,61107],{"class":101,"line":16689},[99,61085,61028],{"class":109},[99,61087,56],{"class":51281},[99,61089,61033],{"class":109},[99,61091,348],{"class":51281},[99,61093,61038],{"class":1949},[99,61095,155],{"class":109},[99,61097,61043],{"class":214},[99,61099,61100],{"class":109},">小米10S\u003C\u002F",[99,61102,348],{"class":51281},[99,61104,55295],{"class":109},[99,61106,56],{"class":51281},[99,61108,51288],{"class":109},[99,61110,61111,61113,61115,61117,61119,61121,61123,61125,61128,61130,61132,61134],{"class":101,"line":16700},[99,61112,61028],{"class":109},[99,61114,56],{"class":51281},[99,61116,61033],{"class":109},[99,61118,348],{"class":51281},[99,61120,61038],{"class":1949},[99,61122,155],{"class":109},[99,61124,61043],{"class":214},[99,61126,61127],{"class":109},">小米笔记本\u003C\u002F",[99,61129,348],{"class":51281},[99,61131,55295],{"class":109},[99,61133,56],{"class":51281},[99,61135,51288],{"class":109},[99,61137,61138,61140,61142,61144,61146,61148,61150,61152,61155,61157,61159,61161],{"class":101,"line":16723},[99,61139,61028],{"class":109},[99,61141,56],{"class":51281},[99,61143,61033],{"class":109},[99,61145,348],{"class":51281},[99,61147,61038],{"class":1949},[99,61149,155],{"class":109},[99,61151,61043],{"class":214},[99,61153,61154],{"class":109},">小米手机\u003C\u002F",[99,61156,348],{"class":51281},[99,61158,55295],{"class":109},[99,61160,56],{"class":51281},[99,61162,51288],{"class":109},[99,61164,61165,61167,61169,61171,61173,61175,61177,61179,61182,61184,61186,61188],{"class":101,"line":16745},[99,61166,61028],{"class":109},[99,61168,56],{"class":51281},[99,61170,61033],{"class":109},[99,61172,348],{"class":51281},[99,61174,61038],{"class":1949},[99,61176,155],{"class":109},[99,61178,61043],{"class":214},[99,61180,61181],{"class":109},">黑鲨4\u003C\u002F",[99,61183,348],{"class":51281},[99,61185,55295],{"class":109},[99,61187,56],{"class":51281},[99,61189,51288],{"class":109},[99,61191,61192,61194,61196,61198,61200,61202,61204,61206,61209,61211,61213,61215],{"class":101,"line":16750},[99,61193,61028],{"class":109},[99,61195,56],{"class":51281},[99,61197,61033],{"class":109},[99,61199,348],{"class":51281},[99,61201,61038],{"class":1949},[99,61203,155],{"class":109},[99,61205,61043],{"class":214},[99,61207,61208],{"class":109},">空调\u003C\u002F",[99,61210,348],{"class":51281},[99,61212,55295],{"class":109},[99,61214,56],{"class":51281},[99,61216,51288],{"class":109},[99,61218,61219,61222,61224],{"class":101,"line":16756},[99,61220,61221],{"class":109},"        \u003C\u002F",[99,61223,1117],{"class":51281},[99,61225,51288],{"class":109},[99,61227,61228,61230,61232],{"class":101,"line":16770},[99,61229,51757],{"class":109},[99,61231,51592],{"class":51281},[99,61233,51288],{"class":109},[99,61235,61236,61238,61240],{"class":101,"line":16783},[99,61237,51322],{"class":109},[99,61239,51794],{"class":51281},[99,61241,51288],{"class":109},[99,61243,61244],{"class":101,"line":16788},[99,61245,61246],{"class":168},"        \u002F\u002F 1. 获取元素\n",[99,61248,61249,61252,61254,61256,61258,61260,61262,61265],{"class":101,"line":16802},[99,61250,61251],{"class":105},"        const",[99,61253,60586],{"class":158},[99,61255,13551],{"class":105},[99,61257,54377],{"class":109},[99,61259,54380],{"class":1949},[99,61261,110],{"class":109},[99,61263,61264],{"class":214},"'[type=search]'",[99,61266,116],{"class":109},[99,61268,61269,61271,61274,61276,61278,61280,61282,61285],{"class":101,"line":16807},[99,61270,61251],{"class":105},[99,61272,61273],{"class":158}," ul",[99,61275,13551],{"class":105},[99,61277,54377],{"class":109},[99,61279,54380],{"class":1949},[99,61281,110],{"class":109},[99,61283,61284],{"class":214},"'.result-list'",[99,61286,116],{"class":109},[99,61288,61289],{"class":101,"line":16813},[99,61290,61291],{"class":168},"        \u002F\u002F console.log(input)\n",[99,61293,61294],{"class":101,"line":16818},[99,61295,61296],{"class":168},"        \u002F\u002F 2. 监听事件 获得焦点\n",[99,61298,61299,61302,61304,61306,61309,61311,61313],{"class":101,"line":16832},[99,61300,61301],{"class":109},"        input.",[99,61303,57794],{"class":1949},[99,61305,110],{"class":109},[99,61307,61308],{"class":214},"'focus'",[99,61310,12422],{"class":109},[99,61312,54430],{"class":105},[99,61314,54433],{"class":109},[99,61316,61317],{"class":101,"line":16837},[99,61318,61319],{"class":168},"            \u002F\u002F ul显示\n",[99,61321,61322,61325,61327],{"class":101,"line":16842},[99,61323,61324],{"class":109},"            ul.style.display ",[99,61326,155],{"class":105},[99,61328,61329],{"class":214}," 'block'\n",[99,61331,61332],{"class":101,"line":16856},[99,61333,61334],{"class":168},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[99,61336,61337,61340,61342,61344,61347],{"class":101,"line":16868},[99,61338,61339],{"class":109},"            input.classList.",[99,61341,5321],{"class":1949},[99,61343,110],{"class":109},[99,61345,61346],{"class":214},"'search'",[99,61348,116],{"class":109},[99,61350,61351],{"class":101,"line":16873},[99,61352,61353],{"class":109},"        })\n",[99,61355,61356],{"class":101,"line":16886},[99,61357,61358],{"class":168},"        \u002F\u002F 3. 监听事件 失去焦点\n",[99,61360,61361,61363,61365,61367,61370,61372,61374],{"class":101,"line":16891},[99,61362,61301],{"class":109},[99,61364,57794],{"class":1949},[99,61366,110],{"class":109},[99,61368,61369],{"class":214},"'blur'",[99,61371,12422],{"class":109},[99,61373,54430],{"class":105},[99,61375,54433],{"class":109},[99,61377,61378,61380,61382],{"class":101,"line":16896},[99,61379,61324],{"class":109},[99,61381,155],{"class":105},[99,61383,61384],{"class":214}," 'none'\n",[99,61386,61387,61389,61391,61393,61395],{"class":101,"line":16901},[99,61388,61339],{"class":109},[99,61390,56987],{"class":1949},[99,61392,110],{"class":109},[99,61394,61346],{"class":214},[99,61396,116],{"class":109},[99,61398,61399],{"class":101,"line":16914},[99,61400,61353],{"class":109},[99,61402,61403,61405,61407],{"class":101,"line":16919},[99,61404,51757],{"class":109},[99,61406,51794],{"class":51281},[99,61408,51288],{"class":109},[99,61410,61411,61413,61415],{"class":101,"line":32614},[99,61412,51766],{"class":109},[99,61414,51781],{"class":51281},[99,61416,51288],{"class":109},[99,61418,61419],{"class":101,"line":32620},[99,61420,2386],{"emptyLinePlaceholder":26},[99,61422,61423,61425,61427],{"class":101,"line":32626},[99,61424,51766],{"class":109},[99,61426,50616],{"class":51281},[99,61428,51288],{"class":109},[21985,61430,61432],{"id":61431},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61434,61435],{},"评论字数统计案例",[14,61437,61438],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61440,61441],{},"牢记focus伪类选择器",[51325,61443],{"charSet":61444},"UTF-8",[51325,61446],{"name":61447,"content":61448},"viewport","width=device-width, initial-scale=1.0",[51388,61450,61451],{},"Document",[5113,61453,61454],{},"\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",[53802,61456],{"type":5174},[1117,61458,61459,61462],{},[56,61460,61461],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[56,61463,61464],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[90,61466,61468],{"className":50614,"code":61467,"language":50616,"meta":21,"style":21},"\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",[96,61469,61470,61480,61494,61498,61506,61520,61540,61560,61573,61581,61588,61601,61615,61625,61635,61639,61643,61650,61662,61674,61686,61698,61727,61740,61744,61748,61757,61768,61780,61791,61802,61814,61825,61837,61853,61865,61869,61873,61884,61895,61905,61917,61921,61925,61933,61944,61954,61965,61977,61990,62002,62014,62018,62022,62031,62043,62054,62067,62078,62092,62096,62100,62107,62119,62131,62141,62145,62149,62158,62170,62180,62184,62188,62199,62209,62228,62241,62245,62249,62259,62269,62273,62277,62288,62299,62311,62323,62327,62331,62342,62353,62367,62371,62375,62386,62396,62408,62412,62420,62428,62432,62440,62455,62474,62514,62527,62535,62549,62569,62577,62592,62615,62633,62648,62668,62688,62708,62716,62724,62732,62740,62760,62780,62785,62802,62811,62815,62820,62836,62844,62848,62853,62870,62875,62900,62904,62908,62913,62918,62926,62934,62938],{"__ignoreMap":21},[99,61471,61472,61474,61476,61478],{"class":101,"line":102},[99,61473,51278],{"class":109},[99,61475,51282],{"class":51281},[99,61477,51285],{"class":1949},[99,61479,51288],{"class":109},[99,61481,61482,61484,61486,61488,61490,61492],{"class":101,"line":22},[99,61483,1020],{"class":109},[99,61485,50616],{"class":51281},[99,61487,51297],{"class":1949},[99,61489,155],{"class":109},[99,61491,51302],{"class":214},[99,61493,51288],{"class":109},[99,61495,61496],{"class":101,"line":1165},[99,61497,2386],{"emptyLinePlaceholder":26},[99,61499,61500,61502,61504],{"class":101,"line":1180},[99,61501,1020],{"class":109},[99,61503,51315],{"class":51281},[99,61505,51288],{"class":109},[99,61507,61508,61510,61512,61514,61516,61518],{"class":101,"line":1186},[99,61509,52125],{"class":109},[99,61511,51325],{"class":51281},[99,61513,51328],{"class":1949},[99,61515,155],{"class":109},[99,61517,51333],{"class":214},[99,61519,51288],{"class":109},[99,61521,61522,61524,61526,61528,61530,61532,61534,61536,61538],{"class":101,"line":1200},[99,61523,52125],{"class":109},[99,61525,51325],{"class":51281},[99,61527,51344],{"class":1949},[99,61529,155],{"class":109},[99,61531,51349],{"class":214},[99,61533,51352],{"class":1949},[99,61535,155],{"class":109},[99,61537,51357],{"class":214},[99,61539,51288],{"class":109},[99,61541,61542,61544,61546,61548,61550,61552,61554,61556,61558],{"class":101,"line":1206},[99,61543,52125],{"class":109},[99,61545,51325],{"class":51281},[99,61547,14907],{"class":1949},[99,61549,155],{"class":109},[99,61551,51372],{"class":214},[99,61553,51352],{"class":1949},[99,61555,155],{"class":109},[99,61557,51379],{"class":214},[99,61559,51288],{"class":109},[99,61561,61562,61564,61566,61569,61571],{"class":101,"line":1297},[99,61563,52125],{"class":109},[99,61565,51388],{"class":51281},[99,61567,61568],{"class":109},">评论回车发布\u003C\u002F",[99,61570,51388],{"class":51281},[99,61572,51288],{"class":109},[99,61574,61575,61577,61579],{"class":101,"line":1303},[99,61576,52125],{"class":109},[99,61578,5113],{"class":51281},[99,61580,51288],{"class":109},[99,61582,61583,61586],{"class":101,"line":1315},[99,61584,61585],{"class":1949},"    .wrapper",[99,61587,15559],{"class":109},[99,61589,61590,61593,61595,61597,61599],{"class":101,"line":1598},[99,61591,61592],{"class":158},"      min-width",[99,61594,51418],{"class":109},[99,61596,3973],{"class":158},[99,61598,51473],{"class":105},[99,61600,1276],{"class":109},[99,61602,61603,61606,61608,61611,61613],{"class":101,"line":1603},[99,61604,61605],{"class":158},"      max-width",[99,61607,51418],{"class":109},[99,61609,61610],{"class":158},"800",[99,61612,51473],{"class":105},[99,61614,1276],{"class":109},[99,61616,61617,61619,61621,61623],{"class":101,"line":1609},[99,61618,54990],{"class":158},[99,61620,51418],{"class":109},[99,61622,51458],{"class":158},[99,61624,1276],{"class":109},[99,61626,61627,61629,61631,61633],{"class":101,"line":1614},[99,61628,55001],{"class":158},[99,61630,51418],{"class":109},[99,61632,51561],{"class":158},[99,61634,1276],{"class":109},[99,61636,61637],{"class":101,"line":1628},[99,61638,2173],{"class":109},[99,61640,61641],{"class":101,"line":1633},[99,61642,2386],{"emptyLinePlaceholder":26},[99,61644,61645,61648],{"class":101,"line":1639},[99,61646,61647],{"class":1949},"    .avatar",[99,61649,15559],{"class":109},[99,61651,61652,61654,61656,61658,61660],{"class":101,"line":1660},[99,61653,54752],{"class":158},[99,61655,51418],{"class":109},[99,61657,717],{"class":158},[99,61659,51473],{"class":105},[99,61661,1276],{"class":109},[99,61663,61664,61666,61668,61670,61672],{"class":101,"line":1665},[99,61665,54766],{"class":158},[99,61667,51418],{"class":109},[99,61669,717],{"class":158},[99,61671,51473],{"class":105},[99,61673,1276],{"class":109},[99,61675,61676,61678,61680,61682,61684],{"class":101,"line":1679},[99,61677,55115],{"class":158},[99,61679,51418],{"class":109},[99,61681,766],{"class":158},[99,61683,438],{"class":105},[99,61685,1276],{"class":109},[99,61687,61688,61691,61693,61696],{"class":101,"line":1684},[99,61689,61690],{"class":158},"      overflow",[99,61692,51418],{"class":109},[99,61694,61695],{"class":158},"hidden",[99,61697,1276],{"class":109},[99,61699,61700,61703,61705,61708,61710,61713,61715,61718,61720,61722,61725],{"class":101,"line":1713},[99,61701,61702],{"class":158},"      background",[99,61704,51418],{"class":109},[99,61706,61707],{"class":158},"url",[99,61709,110],{"class":109},[99,61711,61712],{"class":5203},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[99,61714,13701],{"class":109},[99,61716,61717],{"class":158},"no-repeat",[99,61719,17131],{"class":158},[99,61721,24967],{"class":109},[99,61723,61724],{"class":158},"cover",[99,61726,1276],{"class":109},[99,61728,61729,61732,61734,61736,61738],{"class":101,"line":1718},[99,61730,61731],{"class":158},"      margin-right",[99,61733,51418],{"class":109},[99,61735,810],{"class":158},[99,61737,51473],{"class":105},[99,61739,1276],{"class":109},[99,61741,61742],{"class":101,"line":1735},[99,61743,2173],{"class":109},[99,61745,61746],{"class":101,"line":1740},[99,61747,2386],{"emptyLinePlaceholder":26},[99,61749,61750,61752,61755],{"class":101,"line":1745},[99,61751,61585],{"class":1949},[99,61753,61754],{"class":51281}," textarea",[99,61756,15559],{"class":109},[99,61758,61759,61762,61764,61766],{"class":101,"line":1750},[99,61760,61761],{"class":158},"      outline",[99,61763,51418],{"class":109},[99,61765,54718],{"class":158},[99,61767,1276],{"class":109},[99,61769,61770,61773,61775,61778],{"class":101,"line":1764},[99,61771,61772],{"class":158},"      border-color",[99,61774,51418],{"class":109},[99,61776,61777],{"class":158},"transparent",[99,61779,1276],{"class":109},[99,61781,61782,61785,61787,61789],{"class":101,"line":1769},[99,61783,61784],{"class":158},"      resize",[99,61786,51418],{"class":109},[99,61788,54718],{"class":158},[99,61790,1276],{"class":109},[99,61792,61793,61795,61797,61800],{"class":101,"line":2563},[99,61794,61702],{"class":158},[99,61796,51418],{"class":109},[99,61798,61799],{"class":158},"#f5f5f5",[99,61801,1276],{"class":109},[99,61803,61804,61806,61808,61810,61812],{"class":101,"line":2577},[99,61805,55115],{"class":158},[99,61807,51418],{"class":109},[99,61809,403],{"class":158},[99,61811,51473],{"class":105},[99,61813,1276],{"class":109},[99,61815,61816,61819,61821,61823],{"class":101,"line":2585},[99,61817,61818],{"class":158},"      flex",[99,61820,51418],{"class":109},[99,61822,327],{"class":158},[99,61824,1276],{"class":109},[99,61826,61827,61829,61831,61833,61835],{"class":101,"line":2590},[99,61828,54676],{"class":158},[99,61830,51418],{"class":109},[99,61832,556],{"class":158},[99,61834,51473],{"class":105},[99,61836,1276],{"class":109},[99,61838,61839,61842,61844,61846,61849,61851],{"class":101,"line":2596},[99,61840,61841],{"class":158},"      transition",[99,61843,51418],{"class":109},[99,61845,28102],{"class":158},[99,61847,61848],{"class":158}," 0.5",[99,61850,805],{"class":105},[99,61852,1276],{"class":109},[99,61854,61855,61857,61859,61861,61863],{"class":101,"line":2602},[99,61856,54766],{"class":158},[99,61858,51418],{"class":109},[99,61860,1061],{"class":158},[99,61862,51473],{"class":105},[99,61864,1276],{"class":109},[99,61866,61867],{"class":101,"line":2607},[99,61868,2173],{"class":109},[99,61870,61871],{"class":101,"line":7935},[99,61872,2386],{"emptyLinePlaceholder":26},[99,61874,61875,61877,61879,61882],{"class":101,"line":7959},[99,61876,61585],{"class":1949},[99,61878,61754],{"class":51281},[99,61880,61881],{"class":1949},":focus",[99,61883,15559],{"class":109},[99,61885,61886,61888,61890,61893],{"class":101,"line":7964},[99,61887,61772],{"class":158},[99,61889,51418],{"class":109},[99,61891,61892],{"class":158},"#e4e4e4",[99,61894,1276],{"class":109},[99,61896,61897,61899,61901,61903],{"class":101,"line":7970},[99,61898,61702],{"class":158},[99,61900,51418],{"class":109},[99,61902,60823],{"class":158},[99,61904,1276],{"class":109},[99,61906,61907,61909,61911,61913,61915],{"class":101,"line":7997},[99,61908,54766],{"class":158},[99,61910,51418],{"class":109},[99,61912,766],{"class":158},[99,61914,51473],{"class":105},[99,61916,1276],{"class":109},[99,61918,61919],{"class":101,"line":8002},[99,61920,2173],{"class":109},[99,61922,61923],{"class":101,"line":8008},[99,61924,2386],{"emptyLinePlaceholder":26},[99,61926,61927,61929,61931],{"class":101,"line":8020},[99,61928,61585],{"class":1949},[99,61930,57448],{"class":51281},[99,61932,15559],{"class":109},[99,61934,61935,61937,61939,61942],{"class":101,"line":8032},[99,61936,61702],{"class":158},[99,61938,51418],{"class":109},[99,61940,61941],{"class":158},"#00aeec",[99,61943,1276],{"class":109},[99,61945,61946,61948,61950,61952],{"class":101,"line":8044},[99,61947,57397],{"class":158},[99,61949,51418],{"class":109},[99,61951,60823],{"class":158},[99,61953,1276],{"class":109},[99,61955,61956,61959,61961,61963],{"class":101,"line":9703},[99,61957,61958],{"class":158},"      border",[99,61960,51418],{"class":109},[99,61962,54718],{"class":158},[99,61964,1276],{"class":109},[99,61966,61967,61969,61971,61973,61975],{"class":101,"line":9728},[99,61968,55115],{"class":158},[99,61970,51418],{"class":109},[99,61972,403],{"class":158},[99,61974,51473],{"class":105},[99,61976,1276],{"class":109},[99,61978,61979,61982,61984,61986,61988],{"class":101,"line":9751},[99,61980,61981],{"class":158},"      margin-left",[99,61983,51418],{"class":109},[99,61985,556],{"class":158},[99,61987,51473],{"class":105},[99,61989,1276],{"class":109},[99,61991,61992,61994,61996,61998,62000],{"class":101,"line":9775},[99,61993,54752],{"class":158},[99,61995,51418],{"class":109},[99,61997,466],{"class":158},[99,61999,51473],{"class":105},[99,62001,1276],{"class":109},[99,62003,62004,62007,62009,62012],{"class":101,"line":9780},[99,62005,62006],{"class":158},"      cursor",[99,62008,51418],{"class":109},[99,62010,62011],{"class":158},"pointer",[99,62013,1276],{"class":109},[99,62015,62016],{"class":101,"line":9785},[99,62017,2173],{"class":109},[99,62019,62020],{"class":101,"line":9790},[99,62021,2386],{"emptyLinePlaceholder":26},[99,62023,62024,62026,62029],{"class":101,"line":9799},[99,62025,61585],{"class":1949},[99,62027,62028],{"class":1949}," .total",[99,62030,15559],{"class":109},[99,62032,62033,62035,62037,62039,62041],{"class":101,"line":9804},[99,62034,61731],{"class":158},[99,62036,51418],{"class":109},[99,62038,722],{"class":158},[99,62040,51473],{"class":105},[99,62042,1276],{"class":109},[99,62044,62045,62047,62049,62052],{"class":101,"line":9810},[99,62046,57397],{"class":158},[99,62048,51418],{"class":109},[99,62050,62051],{"class":158},"#999",[99,62053,1276],{"class":109},[99,62055,62056,62059,62061,62063,62065],{"class":101,"line":9831},[99,62057,62058],{"class":158},"      margin-top",[99,62060,51418],{"class":109},[99,62062,429],{"class":158},[99,62064,51473],{"class":105},[99,62066,1276],{"class":109},[99,62068,62069,62072,62074,62076],{"class":101,"line":9837},[99,62070,62071],{"class":158},"      opacity",[99,62073,51418],{"class":109},[99,62075,301],{"class":158},[99,62077,1276],{"class":109},[99,62079,62080,62082,62084,62086,62088,62090],{"class":101,"line":9851},[99,62081,61841],{"class":158},[99,62083,51418],{"class":109},[99,62085,28102],{"class":158},[99,62087,61848],{"class":158},[99,62089,805],{"class":105},[99,62091,1276],{"class":109},[99,62093,62094],{"class":101,"line":9857},[99,62095,2173],{"class":109},[99,62097,62098],{"class":101,"line":9884},[99,62099,2386],{"emptyLinePlaceholder":26},[99,62101,62102,62105],{"class":101,"line":9893},[99,62103,62104],{"class":1949},"    .list",[99,62106,15559],{"class":109},[99,62108,62109,62111,62113,62115,62117],{"class":101,"line":9899},[99,62110,61592],{"class":158},[99,62112,51418],{"class":109},[99,62114,3973],{"class":158},[99,62116,51473],{"class":105},[99,62118,1276],{"class":109},[99,62120,62121,62123,62125,62127,62129],{"class":101,"line":9907},[99,62122,61605],{"class":158},[99,62124,51418],{"class":109},[99,62126,61610],{"class":158},[99,62128,51473],{"class":105},[99,62130,1276],{"class":109},[99,62132,62133,62135,62137,62139],{"class":101,"line":9912},[99,62134,54990],{"class":158},[99,62136,51418],{"class":109},[99,62138,51458],{"class":158},[99,62140,1276],{"class":109},[99,62142,62143],{"class":101,"line":16591},[99,62144,2173],{"class":109},[99,62146,62147],{"class":101,"line":16597},[99,62148,2386],{"emptyLinePlaceholder":26},[99,62150,62151,62153,62156],{"class":101,"line":16620},[99,62152,62104],{"class":1949},[99,62154,62155],{"class":1949}," .item",[99,62157,15559],{"class":109},[99,62159,62160,62162,62164,62166,62168],{"class":101,"line":16626},[99,62161,54752],{"class":158},[99,62163,51418],{"class":109},[99,62165,421],{"class":158},[99,62167,438],{"class":105},[99,62169,1276],{"class":109},[99,62171,62172,62174,62176,62178],{"class":101,"line":16649},[99,62173,54990],{"class":158},[99,62175,51418],{"class":109},[99,62177,51458],{"class":158},[99,62179,1276],{"class":109},[99,62181,62182],{"class":101,"line":16663},[99,62183,2173],{"class":109},[99,62185,62186],{"class":101,"line":16683},[99,62187,2386],{"emptyLinePlaceholder":26},[99,62189,62190,62192,62194,62197],{"class":101,"line":16689},[99,62191,62104],{"class":1949},[99,62193,62155],{"class":1949},[99,62195,62196],{"class":1949}," .info",[99,62198,15559],{"class":109},[99,62200,62201,62203,62205,62207],{"class":101,"line":16700},[99,62202,61818],{"class":158},[99,62204,51418],{"class":109},[99,62206,327],{"class":158},[99,62208,1276],{"class":109},[99,62210,62211,62214,62216,62218,62220,62223,62226],{"class":101,"line":16723},[99,62212,62213],{"class":158},"      border-bottom",[99,62215,51418],{"class":109},[99,62217,327],{"class":158},[99,62219,51473],{"class":105},[99,62221,62222],{"class":158}," dashed",[99,62224,62225],{"class":158}," #e4e4e4",[99,62227,1276],{"class":109},[99,62229,62230,62233,62235,62237,62239],{"class":101,"line":16745},[99,62231,62232],{"class":158},"      padding-bottom",[99,62234,51418],{"class":109},[99,62236,556],{"class":158},[99,62238,51473],{"class":105},[99,62240,1276],{"class":109},[99,62242,62243],{"class":101,"line":16750},[99,62244,2173],{"class":109},[99,62246,62247],{"class":101,"line":16756},[99,62248,2386],{"emptyLinePlaceholder":26},[99,62250,62251,62253,62255,62257],{"class":101,"line":16770},[99,62252,62104],{"class":1949},[99,62254,62155],{"class":1949},[99,62256,6812],{"class":51281},[99,62258,15559],{"class":109},[99,62260,62261,62263,62265,62267],{"class":101,"line":16783},[99,62262,54687],{"class":158},[99,62264,51418],{"class":109},[99,62266,301],{"class":158},[99,62268,1276],{"class":109},[99,62270,62271],{"class":101,"line":16788},[99,62272,2173],{"class":109},[99,62274,62275],{"class":101,"line":16802},[99,62276,2386],{"emptyLinePlaceholder":26},[99,62278,62279,62281,62283,62286],{"class":101,"line":16807},[99,62280,62104],{"class":1949},[99,62282,62155],{"class":1949},[99,62284,62285],{"class":1949}," .name",[99,62287,15559],{"class":109},[99,62289,62290,62292,62294,62297],{"class":101,"line":16813},[99,62291,57397],{"class":158},[99,62293,51418],{"class":109},[99,62295,62296],{"class":158},"#FB7299",[99,62298,1276],{"class":109},[99,62300,62301,62303,62305,62307,62309],{"class":101,"line":16818},[99,62302,54903],{"class":158},[99,62304,51418],{"class":109},[99,62306,659],{"class":158},[99,62308,51473],{"class":105},[99,62310,1276],{"class":109},[99,62312,62313,62316,62318,62321],{"class":101,"line":16832},[99,62314,62315],{"class":158},"      font-weight",[99,62317,51418],{"class":109},[99,62319,62320],{"class":158},"bold",[99,62322,1276],{"class":109},[99,62324,62325],{"class":101,"line":16837},[99,62326,2173],{"class":109},[99,62328,62329],{"class":101,"line":16842},[99,62330,2386],{"emptyLinePlaceholder":26},[99,62332,62333,62335,62337,62340],{"class":101,"line":16856},[99,62334,62104],{"class":1949},[99,62336,62155],{"class":1949},[99,62338,62339],{"class":1949}," .text",[99,62341,15559],{"class":109},[99,62343,62344,62346,62348,62351],{"class":101,"line":16868},[99,62345,57397],{"class":158},[99,62347,51418],{"class":109},[99,62349,62350],{"class":158},"#333",[99,62352,1276],{"class":109},[99,62354,62355,62357,62359,62361,62363,62365],{"class":101,"line":16873},[99,62356,54676],{"class":158},[99,62358,51418],{"class":109},[99,62360,556],{"class":158},[99,62362,51473],{"class":105},[99,62364,4079],{"class":158},[99,62366,1276],{"class":109},[99,62368,62369],{"class":101,"line":16886},[99,62370,2173],{"class":109},[99,62372,62373],{"class":101,"line":16891},[99,62374,2386],{"emptyLinePlaceholder":26},[99,62376,62377,62379,62381,62384],{"class":101,"line":16896},[99,62378,62104],{"class":1949},[99,62380,62155],{"class":1949},[99,62382,62383],{"class":1949}," .time",[99,62385,15559],{"class":109},[99,62387,62388,62390,62392,62394],{"class":101,"line":16901},[99,62389,57397],{"class":158},[99,62391,51418],{"class":109},[99,62393,62051],{"class":158},[99,62395,1276],{"class":109},[99,62397,62398,62400,62402,62404,62406],{"class":101,"line":16914},[99,62399,54903],{"class":158},[99,62401,51418],{"class":109},[99,62403,608],{"class":158},[99,62405,51473],{"class":105},[99,62407,1276],{"class":109},[99,62409,62410],{"class":101,"line":16919},[99,62411,2173],{"class":109},[99,62413,62414,62416,62418],{"class":101,"line":32614},[99,62415,52398],{"class":109},[99,62417,5113],{"class":51281},[99,62419,51288],{"class":109},[99,62421,62422,62424,62426],{"class":101,"line":32620},[99,62423,51766],{"class":109},[99,62425,51315],{"class":51281},[99,62427,51288],{"class":109},[99,62429,62430],{"class":101,"line":32626},[99,62431,2386],{"emptyLinePlaceholder":26},[99,62433,62434,62436,62438],{"class":101,"line":32632},[99,62435,1020],{"class":109},[99,62437,51781],{"class":51281},[99,62439,51288],{"class":109},[99,62441,62442,62444,62446,62448,62450,62453],{"class":101,"line":32638},[99,62443,52125],{"class":109},[99,62445,51592],{"class":51281},[99,62447,53467],{"class":1949},[99,62449,155],{"class":109},[99,62451,62452],{"class":214},"\"wrapper\"",[99,62454,51288],{"class":109},[99,62456,62457,62459,62461,62463,62465,62468,62470,62472],{"class":101,"line":32649},[99,62458,51322],{"class":109},[99,62460,551],{"class":51281},[99,62462,53467],{"class":1949},[99,62464,155],{"class":109},[99,62466,62467],{"class":214},"\"avatar\"",[99,62469,55295],{"class":109},[99,62471,551],{"class":51281},[99,62473,51288],{"class":109},[99,62475,62476,62478,62480,62482,62484,62487,62489,62491,62494,62496,62498,62500,62503,62505,62508,62510,62512],{"class":101,"line":32655},[99,62477,51322],{"class":109},[99,62479,54269],{"class":51281},[99,62481,14946],{"class":1949},[99,62483,155],{"class":109},[99,62485,62486],{"class":214},"\"tx\"",[99,62488,61001],{"class":1949},[99,62490,155],{"class":109},[99,62492,62493],{"class":214},"\"发一条友善的评论\"",[99,62495,54292],{"class":1949},[99,62497,155],{"class":109},[99,62499,3687],{"class":214},[99,62501,62502],{"class":1949}," maxlength",[99,62504,155],{"class":109},[99,62506,62507],{"class":214},"\"200\"",[99,62509,55295],{"class":109},[99,62511,54269],{"class":51281},[99,62513,51288],{"class":109},[99,62515,62516,62518,62520,62523,62525],{"class":101,"line":32675},[99,62517,51322],{"class":109},[99,62519,53868],{"class":51281},[99,62521,62522],{"class":109},">发布\u003C\u002F",[99,62524,53868],{"class":51281},[99,62526,51288],{"class":109},[99,62528,62529,62531,62533],{"class":101,"line":32681},[99,62530,52398],{"class":109},[99,62532,51592],{"class":51281},[99,62534,51288],{"class":109},[99,62536,62537,62539,62541,62543,62545,62547],{"class":101,"line":32692},[99,62538,52125],{"class":109},[99,62540,51592],{"class":51281},[99,62542,53467],{"class":1949},[99,62544,155],{"class":109},[99,62546,62452],{"class":214},[99,62548,51288],{"class":109},[99,62550,62551,62553,62555,62557,62559,62562,62565,62567],{"class":101,"line":32698},[99,62552,51322],{"class":109},[99,62554,99],{"class":51281},[99,62556,53467],{"class":1949},[99,62558,155],{"class":109},[99,62560,62561],{"class":214},"\"total\"",[99,62563,62564],{"class":109},">0\u002F200字\u003C\u002F",[99,62566,99],{"class":51281},[99,62568,51288],{"class":109},[99,62570,62571,62573,62575],{"class":101,"line":32704},[99,62572,52398],{"class":109},[99,62574,51592],{"class":51281},[99,62576,51288],{"class":109},[99,62578,62579,62581,62583,62585,62587,62590],{"class":101,"line":32710},[99,62580,52125],{"class":109},[99,62582,51592],{"class":51281},[99,62584,53467],{"class":1949},[99,62586,155],{"class":109},[99,62588,62589],{"class":214},"\"list\"",[99,62591,51288],{"class":109},[99,62593,62594,62596,62598,62600,62602,62605,62608,62610,62613],{"class":101,"line":32716},[99,62595,51322],{"class":109},[99,62597,51592],{"class":51281},[99,62599,53467],{"class":1949},[99,62601,155],{"class":109},[99,62603,62604],{"class":214},"\"item\"",[99,62606,62607],{"class":1949}," style",[99,62609,155],{"class":109},[99,62611,62612],{"class":214},"\"display: none;\"",[99,62614,51288],{"class":109},[99,62616,62617,62619,62621,62623,62625,62627,62629,62631],{"class":101,"line":32722},[99,62618,55215],{"class":109},[99,62620,551],{"class":51281},[99,62622,53467],{"class":1949},[99,62624,155],{"class":109},[99,62626,62467],{"class":214},[99,62628,55295],{"class":109},[99,62630,551],{"class":51281},[99,62632,51288],{"class":109},[99,62634,62635,62637,62639,62641,62643,62646],{"class":101,"line":32728},[99,62636,55215],{"class":109},[99,62638,51592],{"class":51281},[99,62640,53467],{"class":1949},[99,62642,155],{"class":109},[99,62644,62645],{"class":214},"\"info\"",[99,62647,51288],{"class":109},[99,62649,62650,62652,62654,62656,62658,62661,62664,62666],{"class":101,"line":32734},[99,62651,55283],{"class":109},[99,62653,14],{"class":51281},[99,62655,53467],{"class":1949},[99,62657,155],{"class":109},[99,62659,62660],{"class":214},"\"name\"",[99,62662,62663],{"class":109},">清风徐来\u003C\u002F",[99,62665,14],{"class":51281},[99,62667,51288],{"class":109},[99,62669,62670,62672,62674,62676,62678,62681,62684,62686],{"class":101,"line":32754},[99,62671,55283],{"class":109},[99,62673,14],{"class":51281},[99,62675,53467],{"class":1949},[99,62677,155],{"class":109},[99,62679,62680],{"class":214},"\"text\"",[99,62682,62683],{"class":109},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[99,62685,14],{"class":51281},[99,62687,51288],{"class":109},[99,62689,62690,62692,62694,62696,62698,62701,62704,62706],{"class":101,"line":32760},[99,62691,55283],{"class":109},[99,62693,14],{"class":51281},[99,62695,53467],{"class":1949},[99,62697,155],{"class":109},[99,62699,62700],{"class":214},"\"time\"",[99,62702,62703],{"class":109},">2022-10-10 20:29:21\u003C\u002F",[99,62705,14],{"class":51281},[99,62707,51288],{"class":109},[99,62709,62710,62712,62714],{"class":101,"line":32776},[99,62711,55388],{"class":109},[99,62713,51592],{"class":51281},[99,62715,51288],{"class":109},[99,62717,62718,62720,62722],{"class":101,"line":32782},[99,62719,51757],{"class":109},[99,62721,51592],{"class":51281},[99,62723,51288],{"class":109},[99,62725,62726,62728,62730],{"class":101,"line":32796},[99,62727,52398],{"class":109},[99,62729,51592],{"class":51281},[99,62731,51288],{"class":109},[99,62733,62734,62736,62738],{"class":101,"line":32802},[99,62735,52125],{"class":109},[99,62737,51794],{"class":51281},[99,62739,51288],{"class":109},[99,62741,62742,62744,62747,62749,62751,62753,62755,62758],{"class":101,"line":32817},[99,62743,11208],{"class":105},[99,62745,62746],{"class":158}," tx",[99,62748,13551],{"class":105},[99,62750,54377],{"class":109},[99,62752,54380],{"class":1949},[99,62754,110],{"class":109},[99,62756,62757],{"class":214},"'#tx'",[99,62759,116],{"class":109},[99,62761,62762,62764,62767,62769,62771,62773,62775,62778],{"class":101,"line":32823},[99,62763,11208],{"class":105},[99,62765,62766],{"class":158}," total",[99,62768,13551],{"class":105},[99,62770,54377],{"class":109},[99,62772,54380],{"class":1949},[99,62774,110],{"class":109},[99,62776,62777],{"class":214},"'.total'",[99,62779,116],{"class":109},[99,62781,62782],{"class":101,"line":32832},[99,62783,62784],{"class":168},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[99,62786,62787,62790,62792,62794,62796,62798,62800],{"class":101,"line":32838},[99,62788,62789],{"class":109},"    tx.",[99,62791,57794],{"class":1949},[99,62793,110],{"class":109},[99,62795,61308],{"class":214},[99,62797,12422],{"class":109},[99,62799,54430],{"class":105},[99,62801,54433],{"class":109},[99,62803,62804,62807,62809],{"class":101,"line":32847},[99,62805,62806],{"class":109},"      total.style.opacity ",[99,62808,155],{"class":105},[99,62810,55680],{"class":158},[99,62812,62813],{"class":101,"line":32853},[99,62814,33442],{"class":109},[99,62816,62817],{"class":101,"line":32859},[99,62818,62819],{"class":168},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[99,62821,62822,62824,62826,62828,62830,62832,62834],{"class":101,"line":32868},[99,62823,62789],{"class":109},[99,62825,57794],{"class":1949},[99,62827,110],{"class":109},[99,62829,61369],{"class":214},[99,62831,12422],{"class":109},[99,62833,54430],{"class":105},[99,62835,54433],{"class":109},[99,62837,62838,62840,62842],{"class":101,"line":32874},[99,62839,62806],{"class":109},[99,62841,155],{"class":105},[99,62843,47314],{"class":158},[99,62845,62846],{"class":101,"line":32885},[99,62847,33442],{"class":109},[99,62849,62850],{"class":101,"line":32891},[99,62851,62852],{"class":168},"    \u002F\u002F 3. 检测用户输入\n",[99,62854,62855,62857,62859,62861,62864,62866,62868],{"class":101,"line":32910},[99,62856,62789],{"class":109},[99,62858,57794],{"class":1949},[99,62860,110],{"class":109},[99,62862,62863],{"class":214},"'input'",[99,62865,12422],{"class":109},[99,62867,54430],{"class":105},[99,62869,54433],{"class":109},[99,62871,62872],{"class":101,"line":32916},[99,62873,62874],{"class":168},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[99,62876,62877,62880,62882,62885,62888,62890,62893,62895,62897],{"class":101,"line":32927},[99,62878,62879],{"class":109},"      total.innerHTML ",[99,62881,155],{"class":105},[99,62883,62884],{"class":214}," `${",[99,62886,62887],{"class":109},"tx",[99,62889,668],{"class":214},[99,62891,62892],{"class":109},"value",[99,62894,668],{"class":214},[99,62896,51949],{"class":158},[99,62898,62899],{"class":214},"}\u002F200字`\n",[99,62901,62902],{"class":101,"line":32933},[99,62903,33442],{"class":109},[99,62905,62906],{"class":101,"line":32953},[99,62907,2386],{"emptyLinePlaceholder":26},[99,62909,62910],{"class":101,"line":32969},[99,62911,62912],{"class":168},"    \u002F\u002F const str = 'andy'\n",[99,62914,62915],{"class":101,"line":32975},[99,62916,62917],{"class":168},"    \u002F\u002F console.log(str.length)\n",[99,62919,62920,62922,62924],{"class":101,"line":32989},[99,62921,52398],{"class":109},[99,62923,51794],{"class":51281},[99,62925,51288],{"class":109},[99,62927,62928,62930,62932],{"class":101,"line":32995},[99,62929,51766],{"class":109},[99,62931,51781],{"class":51281},[99,62933,51288],{"class":109},[99,62935,62936],{"class":101,"line":33001},[99,62937,2386],{"emptyLinePlaceholder":26},[99,62939,62940,62942,62944],{"class":101,"line":33012},[99,62941,51766],{"class":109},[99,62943,50616],{"class":51281},[99,62945,51288],{"class":109},[21985,62947,62949],{"id":62948},"_3254-change事件","3.2.5.4 change事件",[14,62951,62952],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62954,62955],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62957,62958],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[90,62960,62962],{"className":50614,"code":62961,"language":50616,"meta":21,"style":21},"\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",[96,62963,62964,62974,62988,62992,63000,63014,63034,63046,63054,63058,63066,63080,63088,63106,63124,63136,63140,63148,63156,63160],{"__ignoreMap":21},[99,62965,62966,62968,62970,62972],{"class":101,"line":102},[99,62967,51278],{"class":109},[99,62969,51282],{"class":51281},[99,62971,51285],{"class":1949},[99,62973,51288],{"class":109},[99,62975,62976,62978,62980,62982,62984,62986],{"class":101,"line":22},[99,62977,1020],{"class":109},[99,62979,50616],{"class":51281},[99,62981,51297],{"class":1949},[99,62983,155],{"class":109},[99,62985,51302],{"class":214},[99,62987,51288],{"class":109},[99,62989,62990],{"class":101,"line":1165},[99,62991,2386],{"emptyLinePlaceholder":26},[99,62993,62994,62996,62998],{"class":101,"line":1180},[99,62995,1020],{"class":109},[99,62997,51315],{"class":51281},[99,62999,51288],{"class":109},[99,63001,63002,63004,63006,63008,63010,63012],{"class":101,"line":1186},[99,63003,52125],{"class":109},[99,63005,51325],{"class":51281},[99,63007,51328],{"class":1949},[99,63009,155],{"class":109},[99,63011,51333],{"class":214},[99,63013,51288],{"class":109},[99,63015,63016,63018,63020,63022,63024,63026,63028,63030,63032],{"class":101,"line":1200},[99,63017,52125],{"class":109},[99,63019,51325],{"class":51281},[99,63021,14907],{"class":1949},[99,63023,155],{"class":109},[99,63025,51372],{"class":214},[99,63027,51352],{"class":1949},[99,63029,155],{"class":109},[99,63031,51379],{"class":214},[99,63033,51288],{"class":109},[99,63035,63036,63038,63040,63042,63044],{"class":101,"line":1206},[99,63037,52125],{"class":109},[99,63039,51388],{"class":51281},[99,63041,51391],{"class":109},[99,63043,51388],{"class":51281},[99,63045,51288],{"class":109},[99,63047,63048,63050,63052],{"class":101,"line":1297},[99,63049,51766],{"class":109},[99,63051,51315],{"class":51281},[99,63053,51288],{"class":109},[99,63055,63056],{"class":101,"line":1303},[99,63057,2386],{"emptyLinePlaceholder":26},[99,63059,63060,63062,63064],{"class":101,"line":1315},[99,63061,1020],{"class":109},[99,63063,51781],{"class":51281},[99,63065,51288],{"class":109},[99,63067,63068,63070,63072,63074,63076,63078],{"class":101,"line":1598},[99,63069,52125],{"class":109},[99,63071,53802],{"class":51281},[99,63073,53805],{"class":1949},[99,63075,155],{"class":109},[99,63077,62680],{"class":214},[99,63079,51288],{"class":109},[99,63081,63082,63084,63086],{"class":101,"line":1603},[99,63083,52125],{"class":109},[99,63085,51794],{"class":51281},[99,63087,51288],{"class":109},[99,63089,63090,63092,63094,63096,63098,63100,63102,63104],{"class":101,"line":1609},[99,63091,11208],{"class":105},[99,63093,60586],{"class":158},[99,63095,13551],{"class":105},[99,63097,54377],{"class":109},[99,63099,54380],{"class":1949},[99,63101,110],{"class":109},[99,63103,62863],{"class":214},[99,63105,116],{"class":109},[99,63107,63108,63111,63113,63115,63118,63120,63122],{"class":101,"line":1614},[99,63109,63110],{"class":109},"    input.",[99,63112,57794],{"class":1949},[99,63114,110],{"class":109},[99,63116,63117],{"class":214},"'change'",[99,63119,12422],{"class":109},[99,63121,54430],{"class":105},[99,63123,54433],{"class":109},[99,63125,63126,63128,63130,63132,63134],{"class":101,"line":1628},[99,63127,58225],{"class":109},[99,63129,58228],{"class":1949},[99,63131,110],{"class":109},[99,63133,703],{"class":158},[99,63135,116],{"class":109},[99,63137,63138],{"class":101,"line":1633},[99,63139,33442],{"class":109},[99,63141,63142,63144,63146],{"class":101,"line":1639},[99,63143,52398],{"class":109},[99,63145,51794],{"class":51281},[99,63147,51288],{"class":109},[99,63149,63150,63152,63154],{"class":101,"line":1660},[99,63151,51766],{"class":109},[99,63153,51781],{"class":51281},[99,63155,51288],{"class":109},[99,63157,63158],{"class":101,"line":1665},[99,63159,2386],{"emptyLinePlaceholder":26},[99,63161,63162,63164,63166],{"class":101,"line":1679},[99,63163,51766],{"class":109},[99,63165,50616],{"class":51281},[99,63167,51288],{"class":109},[14,63169,63170],{},"总结：内容发生改变才回去触发",[70,63172,63174],{"id":63173},"_326-事件对象","3.2.6 事件对象",[21985,63176,63178],{"id":63177},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63180,63181],{},[1448,63182],{"alt":21,"src":63183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63185,63186],{},[1448,63187],{"alt":21,"src":63188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63190,63191],{},"点击一次，就输出了事件对象，它是个对象",[14,63193,63194],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63196,63197],{},[1448,63198],{"alt":21,"src":63199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21985,63201,63203],{"id":63202},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63205,63206],{},[1448,63207],{"alt":21,"src":63208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63210,63211],{},"实现按特殊字符才是实现打印输出效果：",[90,63213,63215],{"className":53048,"code":63214,"language":53050,"meta":21,"style":21},"\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",[96,63216,63217,63225,63230,63244,63252,63257,63262,63267,63272,63277,63282,63287,63292,63297,63301,63305,63313],{"__ignoreMap":21},[99,63218,63219,63221,63223],{"class":101,"line":102},[99,63220,1020],{"class":109},[99,63222,51781],{"class":51281},[99,63224,51288],{"class":109},[99,63226,63227],{"class":101,"line":22},[99,63228,63229],{"class":168},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[99,63231,63232,63234,63236,63238,63240,63242],{"class":101,"line":1165},[99,63233,52125],{"class":109},[99,63235,53802],{"class":51281},[99,63237,53805],{"class":1949},[99,63239,155],{"class":109},[99,63241,62680],{"class":214},[99,63243,51288],{"class":109},[99,63245,63246,63248,63250],{"class":101,"line":1180},[99,63247,52125],{"class":109},[99,63249,51794],{"class":51281},[99,63251,51288],{"class":109},[99,63253,63254],{"class":101,"line":1186},[99,63255,63256],{"class":109},"    \u002F\u002F const btn = document.querySelector('button')\n",[99,63258,63259],{"class":101,"line":1200},[99,63260,63261],{"class":109},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[99,63263,63264],{"class":101,"line":1206},[99,63265,63266],{"class":109},"    \u002F\u002F   console.log(e);\n",[99,63268,63269],{"class":101,"line":1297},[99,63270,63271],{"class":109},"    \u002F\u002F })\n",[99,63273,63274],{"class":101,"line":1303},[99,63275,63276],{"class":109},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[99,63278,63279],{"class":101,"line":1315},[99,63280,63281],{"class":109},"    const input = document.querySelector('input')\n",[99,63283,63284],{"class":101,"line":1598},[99,63285,63286],{"class":109},"    input.addEventListener('keyup', function (e) {\n",[99,63288,63289],{"class":101,"line":1603},[99,63290,63291],{"class":109},"      if (e.key === 'Enter') {\n",[99,63293,63294],{"class":101,"line":1609},[99,63295,63296],{"class":109},"        console.log('我按下了回车键')\n",[99,63298,63299],{"class":101,"line":1614},[99,63300,52379],{"class":109},[99,63302,63303],{"class":101,"line":1628},[99,63304,33442],{"class":109},[99,63306,63307,63309,63311],{"class":101,"line":1633},[99,63308,52398],{"class":109},[99,63310,51794],{"class":51281},[99,63312,51288],{"class":109},[99,63314,63315,63317,63319],{"class":101,"line":1639},[99,63316,51766],{"class":109},[99,63318,51781],{"class":51281},[99,63320,51288],{"class":109},[21985,63322,63324],{"id":63323},"_3263-trim方法","3.2.6.3 trim方法",[14,63326,63327],{},[1448,63328],{"alt":21,"src":63329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63331,63332],{},[1448,63333],{"alt":21,"src":63334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63336,63337],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63339,63340],{},"str.trim()",[70,63342,63344],{"id":63343},"_327-环境对象","3.2.7 环境对象",[14,63346,63347],{},[1448,63348],{"alt":21,"src":63349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63351,63352],{},[1448,63353],{"alt":21,"src":63354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63356,63357],{},[1448,63358],{"alt":21,"src":63359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63361,63362],{},"实际函数调用是window.fn()",[14,63364,63365],{},"普通函数里面this指向的是window",[1117,63367,63368,63371,63374],{},[56,63369,63370],{},"在普通函数下，this指向的是window",[56,63372,63373],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[56,63375,63376],{},"箭头函数没有this",[14,63378,63379],{},"粗略记法就是：谁调用，this就指向谁",[14,63381,63382],{},[1448,63383],{"alt":21,"src":63384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63386,63387],{},[1448,63388],{"alt":21,"src":63389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63391,63392],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63394,63395],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[90,63397,63399],{"className":53048,"code":63398,"language":53050,"meta":21,"style":21},"\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",[96,63400,63401,63409,63421,63429,63434,63439,63444,63449,63453,63461],{"__ignoreMap":21},[99,63402,63403,63405,63407],{"class":101,"line":102},[99,63404,1020],{"class":109},[99,63406,51781],{"class":51281},[99,63408,51288],{"class":109},[99,63410,63411,63413,63415,63417,63419],{"class":101,"line":22},[99,63412,52125],{"class":109},[99,63414,53868],{"class":51281},[99,63416,53874],{"class":109},[99,63418,53868],{"class":51281},[99,63420,51288],{"class":109},[99,63422,63423,63425,63427],{"class":101,"line":1165},[99,63424,52125],{"class":109},[99,63426,51794],{"class":51281},[99,63428,51288],{"class":109},[99,63430,63431],{"class":101,"line":1180},[99,63432,63433],{"class":109},"    const button = document.querySelector('button')\n",[99,63435,63436],{"class":101,"line":1186},[99,63437,63438],{"class":109},"    button.addEventListener('click', function () {\n",[99,63440,63441],{"class":101,"line":1200},[99,63442,63443],{"class":109},"      \u002F\u002F console.log(this);\n",[99,63445,63446],{"class":101,"line":1206},[99,63447,63448],{"class":109},"      this.style.color = 'pink'\n",[99,63450,63451],{"class":101,"line":1297},[99,63452,33442],{"class":109},[99,63454,63455,63457,63459],{"class":101,"line":1303},[99,63456,52398],{"class":109},[99,63458,51794],{"class":51281},[99,63460,51288],{"class":109},[99,63462,63463,63465,63467],{"class":101,"line":1315},[99,63464,51766],{"class":109},[99,63466,51781],{"class":51281},[99,63468,51288],{"class":109},[70,63470,63472],{"id":63471},"_328-回调函数","3.2.8 回调函数",[14,63474,63475],{},[1448,63476],{"alt":21,"src":63477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63479,63480],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63482,11319],{},[1117,63484,63485,63488,63491],{},[56,63486,63487],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[56,63489,63490],{},"回调函数本质还是函数，只不过把它当成参数使用",[56,63492,63493],{},"使用匿名函数做为回调函数比较常见",[70,63495,63497],{"id":63496},"_329-tab栏切换","3.2.9 tab栏切换",[14,63499,63500],{},[1448,63501],{"alt":21,"src":63502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[90,63504,63506],{"className":50614,"code":63505,"language":50616,"meta":21,"style":21},"\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",[96,63507,63508,63518,63532,63536,63544,63558,63578,63598,63611,63619,63625,63635,63645,63649,63653,63660,63673,63686,63698,63714,63718,63722,63729,63741,63753,63765,63775,63785,63789,63793,63802,63814,63825,63837,63841,63845,63853,63863,63873,63883,63887,63891,63901,63915,63927,63931,63935,63947,63958,63975,63985,63989,63993,64008,64019,64029,64033,64037,64044,64059,64063,64067,64075,64085,64089,64093,64102,64112,64116,64124,64132,64136,64144,64159,64174,64187,64195,64229,64256,64283,64310,64337,64345,64353,64368,64405,64440,64475,64510,64545,64553,64561,64569,64574,64579,64599,64604,64633,64638,64643,64661,64666,64671,64676,64698,64703,64719,64723,64728,64733,64754,64759,64788,64792,64797,64801,64809,64817,64821],{"__ignoreMap":21},[99,63509,63510,63512,63514,63516],{"class":101,"line":102},[99,63511,51278],{"class":109},[99,63513,51282],{"class":51281},[99,63515,51285],{"class":1949},[99,63517,51288],{"class":109},[99,63519,63520,63522,63524,63526,63528,63530],{"class":101,"line":22},[99,63521,1020],{"class":109},[99,63523,50616],{"class":51281},[99,63525,51297],{"class":1949},[99,63527,155],{"class":109},[99,63529,51302],{"class":214},[99,63531,51288],{"class":109},[99,63533,63534],{"class":101,"line":1165},[99,63535,2386],{"emptyLinePlaceholder":26},[99,63537,63538,63540,63542],{"class":101,"line":1180},[99,63539,1020],{"class":109},[99,63541,51315],{"class":51281},[99,63543,51288],{"class":109},[99,63545,63546,63548,63550,63552,63554,63556],{"class":101,"line":1186},[99,63547,52125],{"class":109},[99,63549,51325],{"class":51281},[99,63551,51328],{"class":1949},[99,63553,155],{"class":109},[99,63555,51333],{"class":214},[99,63557,59108],{"class":109},[99,63559,63560,63562,63564,63566,63568,63570,63572,63574,63576],{"class":101,"line":1200},[99,63561,52125],{"class":109},[99,63563,51325],{"class":51281},[99,63565,51344],{"class":1949},[99,63567,155],{"class":109},[99,63569,51349],{"class":214},[99,63571,51352],{"class":1949},[99,63573,155],{"class":109},[99,63575,51357],{"class":214},[99,63577,59108],{"class":109},[99,63579,63580,63582,63584,63586,63588,63590,63592,63594,63596],{"class":101,"line":1206},[99,63581,52125],{"class":109},[99,63583,51325],{"class":51281},[99,63585,14907],{"class":1949},[99,63587,155],{"class":109},[99,63589,51372],{"class":214},[99,63591,51352],{"class":1949},[99,63593,155],{"class":109},[99,63595,51379],{"class":214},[99,63597,59108],{"class":109},[99,63599,63600,63602,63604,63607,63609],{"class":101,"line":1297},[99,63601,52125],{"class":109},[99,63603,51388],{"class":51281},[99,63605,63606],{"class":109},">tab栏切换\u003C\u002F",[99,63608,51388],{"class":51281},[99,63610,51288],{"class":109},[99,63612,63613,63615,63617],{"class":101,"line":1303},[99,63614,52125],{"class":109},[99,63616,5113],{"class":51281},[99,63618,51288],{"class":109},[99,63620,63621,63623],{"class":101,"line":1315},[99,63622,6390],{"class":51281},[99,63624,15559],{"class":109},[99,63626,63627,63629,63631,63633],{"class":101,"line":1598},[99,63628,54687],{"class":158},[99,63630,51418],{"class":109},[99,63632,301],{"class":158},[99,63634,1276],{"class":109},[99,63636,63637,63639,63641,63643],{"class":101,"line":1603},[99,63638,54676],{"class":158},[99,63640,51418],{"class":109},[99,63642,301],{"class":158},[99,63644,1276],{"class":109},[99,63646,63647],{"class":101,"line":1609},[99,63648,2173],{"class":109},[99,63650,63651],{"class":101,"line":1614},[99,63652,2386],{"emptyLinePlaceholder":26},[99,63654,63655,63658],{"class":101,"line":1628},[99,63656,63657],{"class":1949},"    .tab",[99,63659,15559],{"class":109},[99,63661,63662,63664,63666,63669,63671],{"class":101,"line":1633},[99,63663,54752],{"class":158},[99,63665,51418],{"class":109},[99,63667,63668],{"class":158},"590",[99,63670,51473],{"class":105},[99,63672,1276],{"class":109},[99,63674,63675,63677,63679,63682,63684],{"class":101,"line":1639},[99,63676,54766],{"class":158},[99,63678,51418],{"class":109},[99,63680,63681],{"class":158},"340",[99,63683,51473],{"class":105},[99,63685,1276],{"class":109},[99,63687,63688,63690,63692,63694,63696],{"class":101,"line":1660},[99,63689,54687],{"class":158},[99,63691,51418],{"class":109},[99,63693,810],{"class":158},[99,63695,51473],{"class":105},[99,63697,1276],{"class":109},[99,63699,63700,63702,63704,63706,63708,63710,63712],{"class":101,"line":1665},[99,63701,61958],{"class":158},[99,63703,51418],{"class":109},[99,63705,327],{"class":158},[99,63707,51473],{"class":105},[99,63709,51502],{"class":158},[99,63711,62225],{"class":158},[99,63713,1276],{"class":109},[99,63715,63716],{"class":101,"line":1679},[99,63717,2173],{"class":109},[99,63719,63720],{"class":101,"line":1684},[99,63721,2386],{"emptyLinePlaceholder":26},[99,63723,63724,63727],{"class":101,"line":1713},[99,63725,63726],{"class":1949},"    .tab-nav",[99,63728,15559],{"class":109},[99,63730,63731,63733,63735,63737,63739],{"class":101,"line":1718},[99,63732,54752],{"class":158},[99,63734,51418],{"class":109},[99,63736,421],{"class":158},[99,63738,438],{"class":105},[99,63740,1276],{"class":109},[99,63742,63743,63745,63747,63749,63751],{"class":101,"line":1735},[99,63744,54766],{"class":158},[99,63746,51418],{"class":109},[99,63748,1017],{"class":158},[99,63750,51473],{"class":105},[99,63752,1276],{"class":109},[99,63754,63755,63757,63759,63761,63763],{"class":101,"line":1740},[99,63756,57340],{"class":158},[99,63758,51418],{"class":109},[99,63760,1017],{"class":158},[99,63762,51473],{"class":105},[99,63764,1276],{"class":109},[99,63766,63767,63769,63771,63773],{"class":101,"line":1745},[99,63768,54990],{"class":158},[99,63770,51418],{"class":109},[99,63772,51458],{"class":158},[99,63774,1276],{"class":109},[99,63776,63777,63779,63781,63783],{"class":101,"line":1750},[99,63778,55001],{"class":158},[99,63780,51418],{"class":109},[99,63782,51649],{"class":158},[99,63784,1276],{"class":109},[99,63786,63787],{"class":101,"line":1764},[99,63788,2173],{"class":109},[99,63790,63791],{"class":101,"line":1769},[99,63792,2386],{"emptyLinePlaceholder":26},[99,63794,63795,63797,63800],{"class":101,"line":2563},[99,63796,63726],{"class":1949},[99,63798,63799],{"class":51281}," h3",[99,63801,15559],{"class":109},[99,63803,63804,63806,63808,63810,63812],{"class":101,"line":2577},[99,63805,54903],{"class":158},[99,63807,51418],{"class":109},[99,63809,910],{"class":158},[99,63811,51473],{"class":105},[99,63813,1276],{"class":109},[99,63815,63816,63818,63820,63823],{"class":101,"line":2585},[99,63817,62315],{"class":158},[99,63819,51418],{"class":109},[99,63821,63822],{"class":158},"normal",[99,63824,1276],{"class":109},[99,63826,63827,63829,63831,63833,63835],{"class":101,"line":2590},[99,63828,61981],{"class":158},[99,63830,51418],{"class":109},[99,63832,810],{"class":158},[99,63834,51473],{"class":105},[99,63836,1276],{"class":109},[99,63838,63839],{"class":101,"line":2596},[99,63840,2173],{"class":109},[99,63842,63843],{"class":101,"line":2602},[99,63844,2386],{"emptyLinePlaceholder":26},[99,63846,63847,63849,63851],{"class":101,"line":2607},[99,63848,63726],{"class":1949},[99,63850,61273],{"class":51281},[99,63852,15559],{"class":109},[99,63854,63855,63857,63859,63861],{"class":101,"line":7935},[99,63856,54713],{"class":158},[99,63858,51418],{"class":109},[99,63860,54718],{"class":158},[99,63862,1276],{"class":109},[99,63864,63865,63867,63869,63871],{"class":101,"line":7959},[99,63866,54990],{"class":158},[99,63868,51418],{"class":109},[99,63870,51458],{"class":158},[99,63872,1276],{"class":109},[99,63874,63875,63877,63879,63881],{"class":101,"line":7964},[99,63876,55001],{"class":158},[99,63878,51418],{"class":109},[99,63880,51561],{"class":158},[99,63882,1276],{"class":109},[99,63884,63885],{"class":101,"line":7970},[99,63886,2173],{"class":109},[99,63888,63889],{"class":101,"line":7997},[99,63890,2386],{"emptyLinePlaceholder":26},[99,63892,63893,63895,63897,63899],{"class":101,"line":8002},[99,63894,63726],{"class":1949},[99,63896,61273],{"class":51281},[99,63898,55056],{"class":51281},[99,63900,15559],{"class":109},[99,63902,63903,63905,63907,63909,63911,63913],{"class":101,"line":8008},[99,63904,54687],{"class":158},[99,63906,51418],{"class":109},[99,63908,301],{"class":158},[99,63910,8937],{"class":158},[99,63912,51473],{"class":105},[99,63914,1276],{"class":109},[99,63916,63917,63919,63921,63923,63925],{"class":101,"line":8020},[99,63918,54903],{"class":158},[99,63920,51418],{"class":109},[99,63922,659],{"class":158},[99,63924,51473],{"class":105},[99,63926,1276],{"class":109},[99,63928,63929],{"class":101,"line":8032},[99,63930,2173],{"class":109},[99,63932,63933],{"class":101,"line":8044},[99,63934,2386],{"emptyLinePlaceholder":26},[99,63936,63937,63939,63941,63943,63945],{"class":101,"line":9703},[99,63938,63726],{"class":1949},[99,63940,61273],{"class":51281},[99,63942,55056],{"class":51281},[99,63944,1384],{"class":51281},[99,63946,15559],{"class":109},[99,63948,63949,63952,63954,63956],{"class":101,"line":9728},[99,63950,63951],{"class":158},"      text-decoration",[99,63953,51418],{"class":109},[99,63955,54718],{"class":158},[99,63957,1276],{"class":109},[99,63959,63960,63962,63964,63966,63968,63970,63973],{"class":101,"line":9751},[99,63961,62213],{"class":158},[99,63963,51418],{"class":109},[99,63965,187],{"class":158},[99,63967,51473],{"class":105},[99,63969,51502],{"class":158},[99,63971,63972],{"class":158}," transparent",[99,63974,1276],{"class":109},[99,63976,63977,63979,63981,63983],{"class":101,"line":9775},[99,63978,57397],{"class":158},[99,63980,51418],{"class":109},[99,63982,62350],{"class":158},[99,63984,1276],{"class":109},[99,63986,63987],{"class":101,"line":9780},[99,63988,2173],{"class":109},[99,63990,63991],{"class":101,"line":9785},[99,63992,2386],{"emptyLinePlaceholder":26},[99,63994,63995,63997,63999,64001,64003,64006],{"class":101,"line":9790},[99,63996,63726],{"class":1949},[99,63998,61273],{"class":51281},[99,64000,55056],{"class":51281},[99,64002,1384],{"class":51281},[99,64004,64005],{"class":1949},".active",[99,64007,15559],{"class":109},[99,64009,64010,64012,64014,64017],{"class":101,"line":9799},[99,64011,61772],{"class":158},[99,64013,51418],{"class":109},[99,64015,64016],{"class":158},"#e1251b",[99,64018,1276],{"class":109},[99,64020,64021,64023,64025,64027],{"class":101,"line":9804},[99,64022,57397],{"class":158},[99,64024,51418],{"class":109},[99,64026,64016],{"class":158},[99,64028,1276],{"class":109},[99,64030,64031],{"class":101,"line":9810},[99,64032,2173],{"class":109},[99,64034,64035],{"class":101,"line":9831},[99,64036,2386],{"emptyLinePlaceholder":26},[99,64038,64039,64042],{"class":101,"line":9837},[99,64040,64041],{"class":1949},"    .tab-content",[99,64043,15559],{"class":109},[99,64045,64046,64048,64050,64052,64055,64057],{"class":101,"line":9851},[99,64047,54676],{"class":158},[99,64049,51418],{"class":109},[99,64051,301],{"class":158},[99,64053,64054],{"class":158}," 16",[99,64056,51473],{"class":105},[99,64058,1276],{"class":109},[99,64060,64061],{"class":101,"line":9857},[99,64062,2173],{"class":109},[99,64064,64065],{"class":101,"line":9884},[99,64066,2386],{"emptyLinePlaceholder":26},[99,64068,64069,64071,64073],{"class":101,"line":9893},[99,64070,64041],{"class":1949},[99,64072,62155],{"class":1949},[99,64074,15559],{"class":109},[99,64076,64077,64079,64081,64083],{"class":101,"line":9899},[99,64078,54990],{"class":158},[99,64080,51418],{"class":109},[99,64082,54718],{"class":158},[99,64084,1276],{"class":109},[99,64086,64087],{"class":101,"line":9907},[99,64088,2173],{"class":109},[99,64090,64091],{"class":101,"line":9912},[99,64092,2386],{"emptyLinePlaceholder":26},[99,64094,64095,64097,64100],{"class":101,"line":16591},[99,64096,64041],{"class":1949},[99,64098,64099],{"class":1949}," .item.active",[99,64101,15559],{"class":109},[99,64103,64104,64106,64108,64110],{"class":101,"line":16597},[99,64105,54990],{"class":158},[99,64107,51418],{"class":109},[99,64109,60850],{"class":158},[99,64111,1276],{"class":109},[99,64113,64114],{"class":101,"line":16620},[99,64115,2173],{"class":109},[99,64117,64118,64120,64122],{"class":101,"line":16626},[99,64119,52398],{"class":109},[99,64121,5113],{"class":51281},[99,64123,51288],{"class":109},[99,64125,64126,64128,64130],{"class":101,"line":16649},[99,64127,51766],{"class":109},[99,64129,51315],{"class":51281},[99,64131,51288],{"class":109},[99,64133,64134],{"class":101,"line":16663},[99,64135,2386],{"emptyLinePlaceholder":26},[99,64137,64138,64140,64142],{"class":101,"line":16683},[99,64139,1020],{"class":109},[99,64141,51781],{"class":51281},[99,64143,51288],{"class":109},[99,64145,64146,64148,64150,64152,64154,64157],{"class":101,"line":16689},[99,64147,52125],{"class":109},[99,64149,51592],{"class":51281},[99,64151,53467],{"class":1949},[99,64153,155],{"class":109},[99,64155,64156],{"class":214},"\"tab\"",[99,64158,51288],{"class":109},[99,64160,64161,64163,64165,64167,64169,64172],{"class":101,"line":16700},[99,64162,51322],{"class":109},[99,64164,51592],{"class":51281},[99,64166,53467],{"class":1949},[99,64168,155],{"class":109},[99,64170,64171],{"class":214},"\"tab-nav\"",[99,64173,51288],{"class":109},[99,64175,64176,64178,64180,64183,64185],{"class":101,"line":16723},[99,64177,55215],{"class":109},[99,64179,70],{"class":51281},[99,64181,64182],{"class":109},">每日特价\u003C\u002F",[99,64184,70],{"class":51281},[99,64186,51288],{"class":109},[99,64188,64189,64191,64193],{"class":101,"line":16745},[99,64190,55215],{"class":109},[99,64192,1117],{"class":51281},[99,64194,51288],{"class":109},[99,64196,64197,64199,64201,64203,64205,64207,64209,64211,64213,64215,64218,64221,64223,64225,64227],{"class":101,"line":16750},[99,64198,55283],{"class":109},[99,64200,56],{"class":51281},[99,64202,61033],{"class":109},[99,64204,348],{"class":51281},[99,64206,53467],{"class":1949},[99,64208,155],{"class":109},[99,64210,59687],{"class":214},[99,64212,61038],{"class":1949},[99,64214,155],{"class":109},[99,64216,64217],{"class":214},"\"javascript:;\"",[99,64219,64220],{"class":109},">精选\u003C\u002F",[99,64222,348],{"class":51281},[99,64224,55295],{"class":109},[99,64226,56],{"class":51281},[99,64228,51288],{"class":109},[99,64230,64231,64233,64235,64237,64239,64241,64243,64245,64248,64250,64252,64254],{"class":101,"line":16756},[99,64232,55283],{"class":109},[99,64234,56],{"class":51281},[99,64236,61033],{"class":109},[99,64238,348],{"class":51281},[99,64240,61038],{"class":1949},[99,64242,155],{"class":109},[99,64244,64217],{"class":214},[99,64246,64247],{"class":109},">美食\u003C\u002F",[99,64249,348],{"class":51281},[99,64251,55295],{"class":109},[99,64253,56],{"class":51281},[99,64255,51288],{"class":109},[99,64257,64258,64260,64262,64264,64266,64268,64270,64272,64275,64277,64279,64281],{"class":101,"line":16770},[99,64259,55283],{"class":109},[99,64261,56],{"class":51281},[99,64263,61033],{"class":109},[99,64265,348],{"class":51281},[99,64267,61038],{"class":1949},[99,64269,155],{"class":109},[99,64271,64217],{"class":214},[99,64273,64274],{"class":109},">百货\u003C\u002F",[99,64276,348],{"class":51281},[99,64278,55295],{"class":109},[99,64280,56],{"class":51281},[99,64282,51288],{"class":109},[99,64284,64285,64287,64289,64291,64293,64295,64297,64299,64302,64304,64306,64308],{"class":101,"line":16783},[99,64286,55283],{"class":109},[99,64288,56],{"class":51281},[99,64290,61033],{"class":109},[99,64292,348],{"class":51281},[99,64294,61038],{"class":1949},[99,64296,155],{"class":109},[99,64298,64217],{"class":214},[99,64300,64301],{"class":109},">个护\u003C\u002F",[99,64303,348],{"class":51281},[99,64305,55295],{"class":109},[99,64307,56],{"class":51281},[99,64309,51288],{"class":109},[99,64311,64312,64314,64316,64318,64320,64322,64324,64326,64329,64331,64333,64335],{"class":101,"line":16788},[99,64313,55283],{"class":109},[99,64315,56],{"class":51281},[99,64317,61033],{"class":109},[99,64319,348],{"class":51281},[99,64321,61038],{"class":1949},[99,64323,155],{"class":109},[99,64325,64217],{"class":214},[99,64327,64328],{"class":109},">预告\u003C\u002F",[99,64330,348],{"class":51281},[99,64332,55295],{"class":109},[99,64334,56],{"class":51281},[99,64336,51288],{"class":109},[99,64338,64339,64341,64343],{"class":101,"line":16802},[99,64340,55388],{"class":109},[99,64342,1117],{"class":51281},[99,64344,51288],{"class":109},[99,64346,64347,64349,64351],{"class":101,"line":16807},[99,64348,51757],{"class":109},[99,64350,51592],{"class":51281},[99,64352,51288],{"class":109},[99,64354,64355,64357,64359,64361,64363,64366],{"class":101,"line":16813},[99,64356,51322],{"class":109},[99,64358,51592],{"class":51281},[99,64360,53467],{"class":1949},[99,64362,155],{"class":109},[99,64364,64365],{"class":214},"\"tab-content\"",[99,64367,51288],{"class":109},[99,64369,64370,64372,64374,64376,64378,64381,64383,64385,64387,64389,64392,64394,64396,64398,64401,64403],{"class":101,"line":16818},[99,64371,55215],{"class":109},[99,64373,51592],{"class":51281},[99,64375,53467],{"class":1949},[99,64377,155],{"class":109},[99,64379,64380],{"class":214},"\"item active\"",[99,64382,61033],{"class":109},[99,64384,1448],{"class":51281},[99,64386,55220],{"class":1949},[99,64388,155],{"class":109},[99,64390,64391],{"class":214},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[99,64393,55228],{"class":1949},[99,64395,155],{"class":109},[99,64397,7639],{"class":214},[99,64399,64400],{"class":109}," \u002F>\u003C\u002F",[99,64402,51592],{"class":51281},[99,64404,51288],{"class":109},[99,64406,64407,64409,64411,64413,64415,64417,64419,64421,64423,64425,64428,64430,64432,64434,64436,64438],{"class":101,"line":16832},[99,64408,55215],{"class":109},[99,64410,51592],{"class":51281},[99,64412,53467],{"class":1949},[99,64414,155],{"class":109},[99,64416,62604],{"class":214},[99,64418,61033],{"class":109},[99,64420,1448],{"class":51281},[99,64422,55220],{"class":1949},[99,64424,155],{"class":109},[99,64426,64427],{"class":214},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[99,64429,55228],{"class":1949},[99,64431,155],{"class":109},[99,64433,7639],{"class":214},[99,64435,64400],{"class":109},[99,64437,51592],{"class":51281},[99,64439,51288],{"class":109},[99,64441,64442,64444,64446,64448,64450,64452,64454,64456,64458,64460,64463,64465,64467,64469,64471,64473],{"class":101,"line":16837},[99,64443,55215],{"class":109},[99,64445,51592],{"class":51281},[99,64447,53467],{"class":1949},[99,64449,155],{"class":109},[99,64451,62604],{"class":214},[99,64453,61033],{"class":109},[99,64455,1448],{"class":51281},[99,64457,55220],{"class":1949},[99,64459,155],{"class":109},[99,64461,64462],{"class":214},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[99,64464,55228],{"class":1949},[99,64466,155],{"class":109},[99,64468,7639],{"class":214},[99,64470,64400],{"class":109},[99,64472,51592],{"class":51281},[99,64474,51288],{"class":109},[99,64476,64477,64479,64481,64483,64485,64487,64489,64491,64493,64495,64498,64500,64502,64504,64506,64508],{"class":101,"line":16842},[99,64478,55215],{"class":109},[99,64480,51592],{"class":51281},[99,64482,53467],{"class":1949},[99,64484,155],{"class":109},[99,64486,62604],{"class":214},[99,64488,61033],{"class":109},[99,64490,1448],{"class":51281},[99,64492,55220],{"class":1949},[99,64494,155],{"class":109},[99,64496,64497],{"class":214},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[99,64499,55228],{"class":1949},[99,64501,155],{"class":109},[99,64503,7639],{"class":214},[99,64505,64400],{"class":109},[99,64507,51592],{"class":51281},[99,64509,51288],{"class":109},[99,64511,64512,64514,64516,64518,64520,64522,64524,64526,64528,64530,64533,64535,64537,64539,64541,64543],{"class":101,"line":16856},[99,64513,55215],{"class":109},[99,64515,51592],{"class":51281},[99,64517,53467],{"class":1949},[99,64519,155],{"class":109},[99,64521,62604],{"class":214},[99,64523,61033],{"class":109},[99,64525,1448],{"class":51281},[99,64527,55220],{"class":1949},[99,64529,155],{"class":109},[99,64531,64532],{"class":214},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[99,64534,55228],{"class":1949},[99,64536,155],{"class":109},[99,64538,7639],{"class":214},[99,64540,64400],{"class":109},[99,64542,51592],{"class":51281},[99,64544,51288],{"class":109},[99,64546,64547,64549,64551],{"class":101,"line":16868},[99,64548,51757],{"class":109},[99,64550,51592],{"class":51281},[99,64552,51288],{"class":109},[99,64554,64555,64557,64559],{"class":101,"line":16873},[99,64556,52398],{"class":109},[99,64558,51592],{"class":51281},[99,64560,51288],{"class":109},[99,64562,64563,64565,64567],{"class":101,"line":16886},[99,64564,52125],{"class":109},[99,64566,51794],{"class":51281},[99,64568,51288],{"class":109},[99,64570,64571],{"class":101,"line":16891},[99,64572,64573],{"class":168},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[99,64575,64576],{"class":101,"line":16896},[99,64577,64578],{"class":168},"    \u002F\u002F 1.1 获取 a 元素 \n",[99,64580,64581,64583,64586,64588,64590,64592,64594,64597],{"class":101,"line":16901},[99,64582,11208],{"class":105},[99,64584,64585],{"class":158}," as",[99,64587,13551],{"class":105},[99,64589,54377],{"class":109},[99,64591,55662],{"class":1949},[99,64593,110],{"class":109},[99,64595,64596],{"class":214},"'.tab-nav a'",[99,64598,116],{"class":109},[99,64600,64601],{"class":101,"line":16914},[99,64602,64603],{"class":168},"    \u002F\u002F console.log(as) \n",[99,64605,64606,64608,64610,64612,64614,64616,64618,64620,64622,64625,64627,64629,64631],{"class":101,"line":16919},[99,64607,3187],{"class":105},[99,64609,1644],{"class":109},[99,64611,51828],{"class":105},[99,64613,9425],{"class":109},[99,64615,155],{"class":105},[99,64617,4079],{"class":158},[99,64619,9432],{"class":109},[99,64621,1020],{"class":105},[99,64623,64624],{"class":109}," as.",[99,64626,51949],{"class":158},[99,64628,3200],{"class":109},[99,64630,2278],{"class":105},[99,64632,12429],{"class":109},[99,64634,64635],{"class":101,"line":32614},[99,64636,64637],{"class":168},"      \u002F\u002F console.log(as[i])\n",[99,64639,64640],{"class":101,"line":32620},[99,64641,64642],{"class":168},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[99,64644,64645,64648,64650,64652,64655,64657,64659],{"class":101,"line":32626},[99,64646,64647],{"class":109},"      as[i].",[99,64649,57794],{"class":1949},[99,64651,110],{"class":109},[99,64653,64654],{"class":214},"'mouseenter'",[99,64656,12422],{"class":109},[99,64658,54430],{"class":105},[99,64660,54433],{"class":109},[99,64662,64663],{"class":101,"line":32632},[99,64664,64665],{"class":168},"        \u002F\u002F console.log('鼠标经过')\n",[99,64667,64668],{"class":101,"line":32638},[99,64669,64670],{"class":168},"        \u002F\u002F 排他思想  \n",[99,64672,64673],{"class":101,"line":32649},[99,64674,64675],{"class":168},"        \u002F\u002F 干掉别人 移除类active\n",[99,64677,64678,64680,64682,64684,64687,64689,64691,64693,64696],{"class":101,"line":32655},[99,64679,51906],{"class":109},[99,64681,54380],{"class":1949},[99,64683,110],{"class":109},[99,64685,64686],{"class":214},"'.tab-nav .active'",[99,64688,56984],{"class":109},[99,64690,56987],{"class":1949},[99,64692,110],{"class":109},[99,64694,64695],{"class":214},"'active'",[99,64697,116],{"class":109},[99,64699,64700],{"class":101,"line":32675},[99,64701,64702],{"class":168},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[99,64704,64705,64708,64711,64713,64715,64717],{"class":101,"line":32681},[99,64706,64707],{"class":158},"        this",[99,64709,64710],{"class":109},".classList.",[99,64712,5321],{"class":1949},[99,64714,110],{"class":109},[99,64716,64695],{"class":214},[99,64718,116],{"class":109},[99,64720,64721],{"class":101,"line":32692},[99,64722,2386],{"emptyLinePlaceholder":26},[99,64724,64725],{"class":101,"line":32698},[99,64726,64727],{"class":168},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[99,64729,64730],{"class":101,"line":32704},[99,64731,64732],{"class":168},"        \u002F\u002F 干掉别人\n",[99,64734,64735,64737,64739,64741,64744,64746,64748,64750,64752],{"class":101,"line":32710},[99,64736,51906],{"class":109},[99,64738,54380],{"class":1949},[99,64740,110],{"class":109},[99,64742,64743],{"class":214},"'.tab-content .active'",[99,64745,56984],{"class":109},[99,64747,56987],{"class":1949},[99,64749,110],{"class":109},[99,64751,64695],{"class":214},[99,64753,116],{"class":109},[99,64755,64756],{"class":101,"line":32716},[99,64757,64758],{"class":168},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[99,64760,64761,64763,64765,64767,64770,64772,64774,64776,64778,64780,64782,64784,64786],{"class":101,"line":32722},[99,64762,51906],{"class":109},[99,64764,54380],{"class":1949},[99,64766,110],{"class":109},[99,64768,64769],{"class":214},"`.tab-content .item:nth-child(${",[99,64771,551],{"class":109},[99,64773,45547],{"class":105},[99,64775,25107],{"class":158},[99,64777,57013],{"class":214},[99,64779,56984],{"class":109},[99,64781,5321],{"class":1949},[99,64783,110],{"class":109},[99,64785,64695],{"class":214},[99,64787,116],{"class":109},[99,64789,64790],{"class":101,"line":32728},[99,64791,2386],{"emptyLinePlaceholder":26},[99,64793,64794],{"class":101,"line":32734},[99,64795,64796],{"class":109},"      })\n",[99,64798,64799],{"class":101,"line":32754},[99,64800,2173],{"class":109},[99,64802,64803,64805,64807],{"class":101,"line":32760},[99,64804,52398],{"class":109},[99,64806,51794],{"class":51281},[99,64808,51288],{"class":109},[99,64810,64811,64813,64815],{"class":101,"line":32776},[99,64812,51766],{"class":109},[99,64814,51781],{"class":51281},[99,64816,51288],{"class":109},[99,64818,64819],{"class":101,"line":32782},[99,64820,2386],{"emptyLinePlaceholder":26},[99,64822,64823,64825,64827],{"class":101,"line":32796},[99,64824,51766],{"class":109},[99,64826,50616],{"class":51281},[99,64828,51288],{"class":109},[14,64830,64831],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64833,64834],{},"在监听事件中，this指向的就是他的调用者",[14,64836,64837],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64839,53701],{},[14,64841,64842],{},"(function () {",[14,64844,64845],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64847,64848],{},"list.addEventListener('click', function (e) {",[14,64850,64851],{},"if (e.target.tagName === 'A') {",[14,64853,64854],{},"\u002F\u002F 排他思想",[14,64856,64857],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64859,64860],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64862,64863],{},"\u002F\u002F console.log(old);",[14,64865,64866],{},"\u002F\u002F 判断",[14,64868,64869],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64871,64872],{},"if (old) old.classList.remove('active')",[14,64874,64875],{},"e.target.classList.add('active')",[14,64877,1056],{},[14,64879,52445],{},[14,64881,64882],{},"})();",[70,64884,64886],{"id":64885},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[90,64888,64890],{"className":50614,"code":64889,"language":50616,"meta":21,"style":21},"\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",[96,64891,64892,64902,64906,64914,64918,64932,64946,64958,64966,64972,64982,64992,64996,65000,65007,65019,65030,65047,65060,65074,65084,65088,65092,65099,65110,65128,65138,65150,65154,65158,65165,65182,65193,65205,65209,65213,65220,65232,65236,65244,65252,65256,65264,65272,65280,65295,65339,65347,65360,65373,65386,65394,65402,65410,65438,65446,65458,65471,65484,65492,65500,65508,65534,65542,65555,65567,65580,65588,65596,65604,65630,65638,65651,65663,65676,65684,65692,65700,65705,65725,65730,65750,65755,65772,65777,65785,65790,65819,65832,65836,65840,65845,65849,65877,65882,65899,65904,65909,65914,65919,65945,65949,65953,65961,65969,65973],{"__ignoreMap":21},[99,64893,64894,64896,64898,64900],{"class":101,"line":102},[99,64895,51278],{"class":109},[99,64897,51282],{"class":51281},[99,64899,51285],{"class":1949},[99,64901,51288],{"class":109},[99,64903,64904],{"class":101,"line":22},[99,64905,2386],{"emptyLinePlaceholder":26},[99,64907,64908,64910,64912],{"class":101,"line":1165},[99,64909,1020],{"class":109},[99,64911,50616],{"class":51281},[99,64913,51288],{"class":109},[99,64915,64916],{"class":101,"line":1180},[99,64917,2386],{"emptyLinePlaceholder":26},[99,64919,64920,64922,64924,64926,64928,64930],{"class":101,"line":1186},[99,64921,1020],{"class":109},[99,64923,51315],{"class":51281},[99,64925,51297],{"class":1949},[99,64927,155],{"class":109},[99,64929,51302],{"class":214},[99,64931,51288],{"class":109},[99,64933,64934,64936,64938,64940,64942,64944],{"class":101,"line":1200},[99,64935,52125],{"class":109},[99,64937,51325],{"class":51281},[99,64939,51328],{"class":1949},[99,64941,155],{"class":109},[99,64943,51333],{"class":214},[99,64945,51288],{"class":109},[99,64947,64948,64950,64952,64954,64956],{"class":101,"line":1206},[99,64949,52125],{"class":109},[99,64951,51388],{"class":51281},[99,64953,55295],{"class":109},[99,64955,51388],{"class":51281},[99,64957,51288],{"class":109},[99,64959,64960,64962,64964],{"class":101,"line":1297},[99,64961,52125],{"class":109},[99,64963,5113],{"class":51281},[99,64965,51288],{"class":109},[99,64967,64968,64970],{"class":101,"line":1303},[99,64969,6390],{"class":51281},[99,64971,15559],{"class":109},[99,64973,64974,64976,64978,64980],{"class":101,"line":1315},[99,64975,54687],{"class":158},[99,64977,51418],{"class":109},[99,64979,301],{"class":158},[99,64981,1276],{"class":109},[99,64983,64984,64986,64988,64990],{"class":101,"line":1598},[99,64985,54676],{"class":158},[99,64987,51418],{"class":109},[99,64989,301],{"class":158},[99,64991,1276],{"class":109},[99,64993,64994],{"class":101,"line":1603},[99,64995,2173],{"class":109},[99,64997,64998],{"class":101,"line":1609},[99,64999,2386],{"emptyLinePlaceholder":26},[99,65001,65002,65005],{"class":101,"line":1614},[99,65003,65004],{"class":51281},"    table",[99,65006,15559],{"class":109},[99,65008,65009,65012,65014,65017],{"class":101,"line":1628},[99,65010,65011],{"class":158},"      border-collapse",[99,65013,51418],{"class":109},[99,65015,65016],{"class":158},"collapse",[99,65018,1276],{"class":109},[99,65020,65021,65024,65026,65028],{"class":101,"line":1633},[99,65022,65023],{"class":158},"      border-spacing",[99,65025,51418],{"class":109},[99,65027,301],{"class":158},[99,65029,1276],{"class":109},[99,65031,65032,65034,65036,65038,65040,65042,65045],{"class":101,"line":1639},[99,65033,61958],{"class":158},[99,65035,51418],{"class":109},[99,65037,327],{"class":158},[99,65039,51473],{"class":105},[99,65041,51502],{"class":158},[99,65043,65044],{"class":158}," #c0c0c0",[99,65046,1276],{"class":109},[99,65048,65049,65051,65053,65056,65058],{"class":101,"line":1660},[99,65050,54752],{"class":158},[99,65052,51418],{"class":109},[99,65054,65055],{"class":158},"500",[99,65057,51473],{"class":105},[99,65059,1276],{"class":109},[99,65061,65062,65064,65066,65068,65070,65072],{"class":101,"line":1665},[99,65063,54687],{"class":158},[99,65065,51418],{"class":109},[99,65067,421],{"class":158},[99,65069,51473],{"class":105},[99,65071,51537],{"class":158},[99,65073,1276],{"class":109},[99,65075,65076,65078,65080,65082],{"class":101,"line":1679},[99,65077,57267],{"class":158},[99,65079,51418],{"class":109},[99,65081,51573],{"class":158},[99,65083,1276],{"class":109},[99,65085,65086],{"class":101,"line":1684},[99,65087,2173],{"class":109},[99,65089,65090],{"class":101,"line":1713},[99,65091,2386],{"emptyLinePlaceholder":26},[99,65093,65094,65097],{"class":101,"line":1718},[99,65095,65096],{"class":51281},"    th",[99,65098,15559],{"class":109},[99,65100,65101,65103,65105,65108],{"class":101,"line":1735},[99,65102,54865],{"class":158},[99,65104,51418],{"class":109},[99,65106,65107],{"class":158},"#09c",[99,65109,1276],{"class":109},[99,65111,65112,65115,65117,65119,65121,65123,65126],{"class":101,"line":1740},[99,65113,65114],{"class":158},"      font",[99,65116,51418],{"class":109},[99,65118,62320],{"class":158},[99,65120,64054],{"class":158},[99,65122,51473],{"class":105},[99,65124,65125],{"class":214}," \"微软雅黑\"",[99,65127,1276],{"class":109},[99,65129,65130,65132,65134,65136],{"class":101,"line":1745},[99,65131,57397],{"class":158},[99,65133,51418],{"class":109},[99,65135,60823],{"class":158},[99,65137,1276],{"class":109},[99,65139,65140,65142,65144,65146,65148],{"class":101,"line":1750},[99,65141,54766],{"class":158},[99,65143,51418],{"class":109},[99,65145,910],{"class":158},[99,65147,51473],{"class":105},[99,65149,1276],{"class":109},[99,65151,65152],{"class":101,"line":1764},[99,65153,2173],{"class":109},[99,65155,65156],{"class":101,"line":1769},[99,65157,2386],{"emptyLinePlaceholder":26},[99,65159,65160,65163],{"class":101,"line":2563},[99,65161,65162],{"class":51281},"    td",[99,65164,15559],{"class":109},[99,65166,65167,65169,65171,65173,65175,65177,65180],{"class":101,"line":2577},[99,65168,61958],{"class":158},[99,65170,51418],{"class":109},[99,65172,327],{"class":158},[99,65174,51473],{"class":105},[99,65176,51502],{"class":158},[99,65178,65179],{"class":158}," #d0d0d0",[99,65181,1276],{"class":109},[99,65183,65184,65186,65188,65191],{"class":101,"line":2585},[99,65185,57397],{"class":158},[99,65187,51418],{"class":109},[99,65189,65190],{"class":158},"#404060",[99,65192,1276],{"class":109},[99,65194,65195,65197,65199,65201,65203],{"class":101,"line":2590},[99,65196,54676],{"class":158},[99,65198,51418],{"class":109},[99,65200,556],{"class":158},[99,65202,51473],{"class":105},[99,65204,1276],{"class":109},[99,65206,65207],{"class":101,"line":2596},[99,65208,2173],{"class":109},[99,65210,65211],{"class":101,"line":2602},[99,65212,2386],{"emptyLinePlaceholder":26},[99,65214,65215,65218],{"class":101,"line":2607},[99,65216,65217],{"class":1949},"    .allCheck",[99,65219,15559],{"class":109},[99,65221,65222,65224,65226,65228,65230],{"class":101,"line":7935},[99,65223,54752],{"class":158},[99,65225,51418],{"class":109},[99,65227,722],{"class":158},[99,65229,51473],{"class":105},[99,65231,1276],{"class":109},[99,65233,65234],{"class":101,"line":7959},[99,65235,2173],{"class":109},[99,65237,65238,65240,65242],{"class":101,"line":7964},[99,65239,52398],{"class":109},[99,65241,5113],{"class":51281},[99,65243,51288],{"class":109},[99,65245,65246,65248,65250],{"class":101,"line":7970},[99,65247,51766],{"class":109},[99,65249,51315],{"class":51281},[99,65251,51288],{"class":109},[99,65253,65254],{"class":101,"line":7997},[99,65255,2386],{"emptyLinePlaceholder":26},[99,65257,65258,65260,65262],{"class":101,"line":8002},[99,65259,1020],{"class":109},[99,65261,51781],{"class":51281},[99,65263,51288],{"class":109},[99,65265,65266,65268,65270],{"class":101,"line":8008},[99,65267,52125],{"class":109},[99,65269,247],{"class":51281},[99,65271,51288],{"class":109},[99,65273,65274,65276,65278],{"class":101,"line":8020},[99,65275,51322],{"class":109},[99,65277,253],{"class":51281},[99,65279,51288],{"class":109},[99,65281,65282,65284,65286,65288,65290,65293],{"class":101,"line":8032},[99,65283,55215],{"class":109},[99,65285,256],{"class":51281},[99,65287,53467],{"class":1949},[99,65289,155],{"class":109},[99,65291,65292],{"class":214},"\"allCheck\"",[99,65294,51288],{"class":109},[99,65296,65297,65299,65301,65303,65305,65307,65309,65311,65313,65315,65317,65320,65323,65325,65327,65329,65332,65335,65337],{"class":101,"line":8044},[99,65298,55283],{"class":109},[99,65300,53802],{"class":51281},[99,65302,53805],{"class":1949},[99,65304,155],{"class":109},[99,65306,53810],{"class":214},[99,65308,14907],{"class":1949},[99,65310,155],{"class":109},[99,65312,7639],{"class":214},[99,65314,14946],{"class":1949},[99,65316,155],{"class":109},[99,65318,65319],{"class":214},"\"checkAll\"",[99,65321,65322],{"class":109},"> \u003C",[99,65324,99],{"class":51281},[99,65326,53467],{"class":1949},[99,65328,155],{"class":109},[99,65330,65331],{"class":214},"\"all\"",[99,65333,65334],{"class":109},">全选\u003C\u002F",[99,65336,99],{"class":51281},[99,65338,51288],{"class":109},[99,65340,65341,65343,65345],{"class":101,"line":9703},[99,65342,55388],{"class":109},[99,65344,256],{"class":51281},[99,65346,51288],{"class":109},[99,65348,65349,65351,65353,65356,65358],{"class":101,"line":9728},[99,65350,55215],{"class":109},[99,65352,256],{"class":51281},[99,65354,65355],{"class":109},">商品\u003C\u002F",[99,65357,256],{"class":51281},[99,65359,51288],{"class":109},[99,65361,65362,65364,65366,65369,65371],{"class":101,"line":9751},[99,65363,55215],{"class":109},[99,65365,256],{"class":51281},[99,65367,65368],{"class":109},">商家\u003C\u002F",[99,65370,256],{"class":51281},[99,65372,51288],{"class":109},[99,65374,65375,65377,65379,65382,65384],{"class":101,"line":9775},[99,65376,55215],{"class":109},[99,65378,256],{"class":51281},[99,65380,65381],{"class":109},">价格\u003C\u002F",[99,65383,256],{"class":51281},[99,65385,51288],{"class":109},[99,65387,65388,65390,65392],{"class":101,"line":9780},[99,65389,51757],{"class":109},[99,65391,253],{"class":51281},[99,65393,51288],{"class":109},[99,65395,65396,65398,65400],{"class":101,"line":9785},[99,65397,51322],{"class":109},[99,65399,253],{"class":51281},[99,65401,51288],{"class":109},[99,65403,65404,65406,65408],{"class":101,"line":9790},[99,65405,55215],{"class":109},[99,65407,299],{"class":51281},[99,65409,51288],{"class":109},[99,65411,65412,65414,65416,65418,65420,65422,65424,65426,65429,65431,65433,65436],{"class":101,"line":9799},[99,65413,55283],{"class":109},[99,65415,53802],{"class":51281},[99,65417,53805],{"class":1949},[99,65419,155],{"class":109},[99,65421,53810],{"class":214},[99,65423,14907],{"class":1949},[99,65425,155],{"class":109},[99,65427,65428],{"class":214},"\"check\"",[99,65430,53467],{"class":1949},[99,65432,155],{"class":109},[99,65434,65435],{"class":214},"\"ck\"",[99,65437,51288],{"class":109},[99,65439,65440,65442,65444],{"class":101,"line":9804},[99,65441,55388],{"class":109},[99,65443,299],{"class":51281},[99,65445,51288],{"class":109},[99,65447,65448,65450,65452,65454,65456],{"class":101,"line":9810},[99,65449,55215],{"class":109},[99,65451,299],{"class":51281},[99,65453,61154],{"class":109},[99,65455,299],{"class":51281},[99,65457,51288],{"class":109},[99,65459,65460,65462,65464,65467,65469],{"class":101,"line":9831},[99,65461,55215],{"class":109},[99,65463,299],{"class":51281},[99,65465,65466],{"class":109},">小米\u003C\u002F",[99,65468,299],{"class":51281},[99,65470,51288],{"class":109},[99,65472,65473,65475,65477,65480,65482],{"class":101,"line":9837},[99,65474,55215],{"class":109},[99,65476,299],{"class":51281},[99,65478,65479],{"class":109},">￥1999\u003C\u002F",[99,65481,299],{"class":51281},[99,65483,51288],{"class":109},[99,65485,65486,65488,65490],{"class":101,"line":9851},[99,65487,51757],{"class":109},[99,65489,253],{"class":51281},[99,65491,51288],{"class":109},[99,65493,65494,65496,65498],{"class":101,"line":9857},[99,65495,51322],{"class":109},[99,65497,253],{"class":51281},[99,65499,51288],{"class":109},[99,65501,65502,65504,65506],{"class":101,"line":9884},[99,65503,55215],{"class":109},[99,65505,299],{"class":51281},[99,65507,51288],{"class":109},[99,65509,65510,65512,65514,65516,65518,65520,65522,65524,65526,65528,65530,65532],{"class":101,"line":9893},[99,65511,55283],{"class":109},[99,65513,53802],{"class":51281},[99,65515,53805],{"class":1949},[99,65517,155],{"class":109},[99,65519,53810],{"class":214},[99,65521,14907],{"class":1949},[99,65523,155],{"class":109},[99,65525,65428],{"class":214},[99,65527,53467],{"class":1949},[99,65529,155],{"class":109},[99,65531,65435],{"class":214},[99,65533,51288],{"class":109},[99,65535,65536,65538,65540],{"class":101,"line":9899},[99,65537,55388],{"class":109},[99,65539,299],{"class":51281},[99,65541,51288],{"class":109},[99,65543,65544,65546,65548,65551,65553],{"class":101,"line":9907},[99,65545,55215],{"class":109},[99,65547,299],{"class":51281},[99,65549,65550],{"class":109},">小米净水器\u003C\u002F",[99,65552,299],{"class":51281},[99,65554,51288],{"class":109},[99,65556,65557,65559,65561,65563,65565],{"class":101,"line":9912},[99,65558,55215],{"class":109},[99,65560,299],{"class":51281},[99,65562,65466],{"class":109},[99,65564,299],{"class":51281},[99,65566,51288],{"class":109},[99,65568,65569,65571,65573,65576,65578],{"class":101,"line":16591},[99,65570,55215],{"class":109},[99,65572,299],{"class":51281},[99,65574,65575],{"class":109},">￥4999\u003C\u002F",[99,65577,299],{"class":51281},[99,65579,51288],{"class":109},[99,65581,65582,65584,65586],{"class":101,"line":16597},[99,65583,51757],{"class":109},[99,65585,253],{"class":51281},[99,65587,51288],{"class":109},[99,65589,65590,65592,65594],{"class":101,"line":16620},[99,65591,51322],{"class":109},[99,65593,253],{"class":51281},[99,65595,51288],{"class":109},[99,65597,65598,65600,65602],{"class":101,"line":16626},[99,65599,55215],{"class":109},[99,65601,299],{"class":51281},[99,65603,51288],{"class":109},[99,65605,65606,65608,65610,65612,65614,65616,65618,65620,65622,65624,65626,65628],{"class":101,"line":16649},[99,65607,55283],{"class":109},[99,65609,53802],{"class":51281},[99,65611,53805],{"class":1949},[99,65613,155],{"class":109},[99,65615,53810],{"class":214},[99,65617,14907],{"class":1949},[99,65619,155],{"class":109},[99,65621,65428],{"class":214},[99,65623,53467],{"class":1949},[99,65625,155],{"class":109},[99,65627,65435],{"class":214},[99,65629,51288],{"class":109},[99,65631,65632,65634,65636],{"class":101,"line":16663},[99,65633,55388],{"class":109},[99,65635,299],{"class":51281},[99,65637,51288],{"class":109},[99,65639,65640,65642,65644,65647,65649],{"class":101,"line":16683},[99,65641,55215],{"class":109},[99,65643,299],{"class":51281},[99,65645,65646],{"class":109},">小米电视\u003C\u002F",[99,65648,299],{"class":51281},[99,65650,51288],{"class":109},[99,65652,65653,65655,65657,65659,65661],{"class":101,"line":16689},[99,65654,55215],{"class":109},[99,65656,299],{"class":51281},[99,65658,65466],{"class":109},[99,65660,299],{"class":51281},[99,65662,51288],{"class":109},[99,65664,65665,65667,65669,65672,65674],{"class":101,"line":16700},[99,65666,55215],{"class":109},[99,65668,299],{"class":51281},[99,65670,65671],{"class":109},">￥5999\u003C\u002F",[99,65673,299],{"class":51281},[99,65675,51288],{"class":109},[99,65677,65678,65680,65682],{"class":101,"line":16723},[99,65679,51757],{"class":109},[99,65681,253],{"class":51281},[99,65683,51288],{"class":109},[99,65685,65686,65688,65690],{"class":101,"line":16745},[99,65687,52398],{"class":109},[99,65689,247],{"class":51281},[99,65691,51288],{"class":109},[99,65693,65694,65696,65698],{"class":101,"line":16750},[99,65695,52125],{"class":109},[99,65697,51794],{"class":51281},[99,65699,51288],{"class":109},[99,65701,65702],{"class":101,"line":16756},[99,65703,65704],{"class":168},"    \u002F\u002F 1. 获取大复选框\n",[99,65706,65707,65709,65712,65714,65716,65718,65720,65723],{"class":101,"line":16770},[99,65708,11208],{"class":105},[99,65710,65711],{"class":158}," checkAll",[99,65713,13551],{"class":105},[99,65715,54377],{"class":109},[99,65717,54380],{"class":1949},[99,65719,110],{"class":109},[99,65721,65722],{"class":214},"'#checkAll'",[99,65724,116],{"class":109},[99,65726,65727],{"class":101,"line":16783},[99,65728,65729],{"class":168},"    \u002F\u002F 2. 获取所有的小复选框\n",[99,65731,65732,65734,65737,65739,65741,65743,65745,65748],{"class":101,"line":16788},[99,65733,11208],{"class":105},[99,65735,65736],{"class":158}," cks",[99,65738,13551],{"class":105},[99,65740,54377],{"class":109},[99,65742,55662],{"class":1949},[99,65744,110],{"class":109},[99,65746,65747],{"class":214},"'.ck'",[99,65749,116],{"class":109},[99,65751,65752],{"class":101,"line":16802},[99,65753,65754],{"class":168},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[99,65756,65757,65760,65762,65764,65766,65768,65770],{"class":101,"line":16807},[99,65758,65759],{"class":109},"    checkAll.",[99,65761,57794],{"class":1949},[99,65763,110],{"class":109},[99,65765,57799],{"class":214},[99,65767,12422],{"class":109},[99,65769,54430],{"class":105},[99,65771,54433],{"class":109},[99,65773,65774],{"class":101,"line":16813},[99,65775,65776],{"class":168},"      \u002F\u002F 得到当前大复选框的选中状态\n",[99,65778,65779,65782],{"class":101,"line":16818},[99,65780,65781],{"class":168},"      \u002F\u002F console.log(checkAll.checked)",[99,65783,65784],{"class":168},"  \u002F\u002F 得到 是 true 或者是 false\n",[99,65786,65787],{"class":101,"line":16832},[99,65788,65789],{"class":168},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[99,65791,65792,65794,65796,65798,65800,65802,65804,65806,65808,65811,65813,65815,65817],{"class":101,"line":16837},[99,65793,52265],{"class":105},[99,65795,1644],{"class":109},[99,65797,51828],{"class":105},[99,65799,9425],{"class":109},[99,65801,155],{"class":105},[99,65803,4079],{"class":158},[99,65805,9432],{"class":109},[99,65807,1020],{"class":105},[99,65809,65810],{"class":109}," cks.",[99,65812,51949],{"class":158},[99,65814,3200],{"class":109},[99,65816,2278],{"class":105},[99,65818,12429],{"class":109},[99,65820,65821,65824,65826,65829],{"class":101,"line":16842},[99,65822,65823],{"class":109},"        cks[i].checked ",[99,65825,155],{"class":105},[99,65827,65828],{"class":158}," this",[99,65830,65831],{"class":109},".checked\n",[99,65833,65834],{"class":101,"line":16856},[99,65835,52379],{"class":109},[99,65837,65838],{"class":101,"line":16868},[99,65839,33442],{"class":109},[99,65841,65842],{"class":101,"line":16873},[99,65843,65844],{"class":168},"    \u002F\u002F 5. 小复选框控制大复选框\n",[99,65846,65847],{"class":101,"line":16886},[99,65848,2386],{"emptyLinePlaceholder":26},[99,65850,65851,65853,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873,65875],{"class":101,"line":16891},[99,65852,3187],{"class":105},[99,65854,1644],{"class":109},[99,65856,51828],{"class":105},[99,65858,9425],{"class":109},[99,65860,155],{"class":105},[99,65862,4079],{"class":158},[99,65864,9432],{"class":109},[99,65866,1020],{"class":105},[99,65868,65810],{"class":109},[99,65870,51949],{"class":158},[99,65872,3200],{"class":109},[99,65874,2278],{"class":105},[99,65876,12429],{"class":109},[99,65878,65879],{"class":101,"line":16896},[99,65880,65881],{"class":168},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[99,65883,65884,65887,65889,65891,65893,65895,65897],{"class":101,"line":16901},[99,65885,65886],{"class":109},"      cks[i].",[99,65888,57794],{"class":1949},[99,65890,110],{"class":109},[99,65892,57799],{"class":214},[99,65894,12422],{"class":109},[99,65896,54430],{"class":105},[99,65898,54433],{"class":109},[99,65900,65901],{"class":101,"line":16914},[99,65902,65903],{"class":168},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[99,65905,65906],{"class":101,"line":16919},[99,65907,65908],{"class":168},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[99,65910,65911],{"class":101,"line":32614},[99,65912,65913],{"class":168},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[99,65915,65916],{"class":101,"line":32620},[99,65917,65918],{"class":168},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[99,65920,65921,65924,65926,65928,65930,65932,65935,65937,65939,65941,65943],{"class":101,"line":32626},[99,65922,65923],{"class":109},"        checkAll.checked ",[99,65925,155],{"class":105},[99,65927,54377],{"class":109},[99,65929,55662],{"class":1949},[99,65931,110],{"class":109},[99,65933,65934],{"class":214},"'.ck:checked'",[99,65936,30807],{"class":109},[99,65938,51949],{"class":158},[99,65940,57887],{"class":105},[99,65942,65810],{"class":109},[99,65944,55812],{"class":158},[99,65946,65947],{"class":101,"line":32632},[99,65948,64796],{"class":109},[99,65950,65951],{"class":101,"line":32638},[99,65952,2173],{"class":109},[99,65954,65955,65957,65959],{"class":101,"line":32649},[99,65956,52398],{"class":109},[99,65958,51794],{"class":51281},[99,65960,51288],{"class":109},[99,65962,65963,65965,65967],{"class":101,"line":32655},[99,65964,51766],{"class":109},[99,65966,51781],{"class":51281},[99,65968,51288],{"class":109},[99,65970,65971],{"class":101,"line":32675},[99,65972,2386],{"emptyLinePlaceholder":26},[99,65974,65975,65977,65979],{"class":101,"line":32681},[99,65976,51766],{"class":109},[99,65978,50616],{"class":51281},[99,65980,51288],{"class":109},[14,65982,65983],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,65985,65986],{},"用好之间比较得到的布尔值！！！",[14,65988,65989,65990,65993,65994,1644,65997,694,65999,66002],{},"在 JS 里访问的时候，",[96,65991,65992],{},"checkbox.checked"," 是一个 ",[259,65995,65996],{},"布尔值",[96,65998,1348],{},[96,66000,66001],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66004,66005,66006,66009,66010],{},"HTML 的 ",[96,66007,66008],{},"checked=\"checked\""," 只是 ",[259,66011,66012,66013,66016],{},"初始值；JS 的 ",[96,66014,66015],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66018,66019],{},"：checked是一个伪类选择器",[14,66021,66022],{},[1448,66023],{"alt":21,"src":66024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66026,66027,66030],{},[66028,66029],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66032,66033],{},[1448,66034],{"alt":21,"src":66035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[41,66037,66039],{"id":66038},"_33-dom事件进阶","3.3 DOM事件进阶",[70,66041,66043],{"id":66042},"_331-事件流","3.3.1 事件流",[14,66045,66046],{},[1448,66047],{"alt":21,"src":66048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21985,66050,66052],{"id":66051},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66054,66055],{},[1448,66056],{"alt":21,"src":66057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[90,66059,66061],{"className":50614,"code":66060,"language":50616,"meta":21,"style":21},"\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",[96,66062,66063,66073,66087,66091,66099,66113,66133,66145,66153,66160,66172,66184,66194,66198,66202,66209,66221,66233,66243,66247,66255,66263,66267,66275,66290,66309,66317,66325,66345,66365,66381,66392,66400,66417,66428,66436,66453,66464,66472,66480,66488,66492],{"__ignoreMap":21},[99,66064,66065,66067,66069,66071],{"class":101,"line":102},[99,66066,51278],{"class":109},[99,66068,51282],{"class":51281},[99,66070,51285],{"class":1949},[99,66072,51288],{"class":109},[99,66074,66075,66077,66079,66081,66083,66085],{"class":101,"line":22},[99,66076,1020],{"class":109},[99,66078,50616],{"class":51281},[99,66080,51297],{"class":1949},[99,66082,155],{"class":109},[99,66084,51302],{"class":214},[99,66086,51288],{"class":109},[99,66088,66089],{"class":101,"line":1165},[99,66090,2386],{"emptyLinePlaceholder":26},[99,66092,66093,66095,66097],{"class":101,"line":1180},[99,66094,1020],{"class":109},[99,66096,51315],{"class":51281},[99,66098,51288],{"class":109},[99,66100,66101,66103,66105,66107,66109,66111],{"class":101,"line":1186},[99,66102,52125],{"class":109},[99,66104,51325],{"class":51281},[99,66106,51328],{"class":1949},[99,66108,155],{"class":109},[99,66110,51333],{"class":214},[99,66112,51288],{"class":109},[99,66114,66115,66117,66119,66121,66123,66125,66127,66129,66131],{"class":101,"line":1200},[99,66116,52125],{"class":109},[99,66118,51325],{"class":51281},[99,66120,14907],{"class":1949},[99,66122,155],{"class":109},[99,66124,51372],{"class":214},[99,66126,51352],{"class":1949},[99,66128,155],{"class":109},[99,66130,51379],{"class":214},[99,66132,51288],{"class":109},[99,66134,66135,66137,66139,66141,66143],{"class":101,"line":1206},[99,66136,52125],{"class":109},[99,66138,51388],{"class":51281},[99,66140,51391],{"class":109},[99,66142,51388],{"class":51281},[99,66144,51288],{"class":109},[99,66146,66147,66149,66151],{"class":101,"line":1297},[99,66148,52125],{"class":109},[99,66150,5113],{"class":51281},[99,66152,51288],{"class":109},[99,66154,66155,66158],{"class":101,"line":1303},[99,66156,66157],{"class":1949},"    .father",[99,66159,15559],{"class":109},[99,66161,66162,66164,66166,66168,66170],{"class":101,"line":1315},[99,66163,54752],{"class":158},[99,66165,51418],{"class":109},[99,66167,65055],{"class":158},[99,66169,51473],{"class":105},[99,66171,1276],{"class":109},[99,66173,66174,66176,66178,66180,66182],{"class":101,"line":1598},[99,66175,54766],{"class":158},[99,66177,51418],{"class":109},[99,66179,65055],{"class":158},[99,66181,51473],{"class":105},[99,66183,1276],{"class":109},[99,66185,66186,66188,66190,66192],{"class":101,"line":1603},[99,66187,54865],{"class":158},[99,66189,51418],{"class":109},[99,66191,51626],{"class":158},[99,66193,1276],{"class":109},[99,66195,66196],{"class":101,"line":1609},[99,66197,2173],{"class":109},[99,66199,66200],{"class":101,"line":1614},[99,66201,2386],{"emptyLinePlaceholder":26},[99,66203,66204,66207],{"class":101,"line":1628},[99,66205,66206],{"class":1949},"    .son",[99,66208,15559],{"class":109},[99,66210,66211,66213,66215,66217,66219],{"class":101,"line":1633},[99,66212,54752],{"class":158},[99,66214,51418],{"class":109},[99,66216,1708],{"class":158},[99,66218,51473],{"class":105},[99,66220,1276],{"class":109},[99,66222,66223,66225,66227,66229,66231],{"class":101,"line":1639},[99,66224,54766],{"class":158},[99,66226,51418],{"class":109},[99,66228,1708],{"class":158},[99,66230,51473],{"class":105},[99,66232,1276],{"class":109},[99,66234,66235,66237,66239,66241],{"class":101,"line":1660},[99,66236,54865],{"class":158},[99,66238,51418],{"class":109},[99,66240,54870],{"class":158},[99,66242,1276],{"class":109},[99,66244,66245],{"class":101,"line":1665},[99,66246,2173],{"class":109},[99,66248,66249,66251,66253],{"class":101,"line":1679},[99,66250,52398],{"class":109},[99,66252,5113],{"class":51281},[99,66254,51288],{"class":109},[99,66256,66257,66259,66261],{"class":101,"line":1684},[99,66258,51766],{"class":109},[99,66260,51315],{"class":51281},[99,66262,51288],{"class":109},[99,66264,66265],{"class":101,"line":1713},[99,66266,2386],{"emptyLinePlaceholder":26},[99,66268,66269,66271,66273],{"class":101,"line":1718},[99,66270,1020],{"class":109},[99,66272,51781],{"class":51281},[99,66274,51288],{"class":109},[99,66276,66277,66279,66281,66283,66285,66288],{"class":101,"line":1735},[99,66278,52125],{"class":109},[99,66280,51592],{"class":51281},[99,66282,53467],{"class":1949},[99,66284,155],{"class":109},[99,66286,66287],{"class":214},"\"father\"",[99,66289,51288],{"class":109},[99,66291,66292,66294,66296,66298,66300,66303,66305,66307],{"class":101,"line":1740},[99,66293,51322],{"class":109},[99,66295,51592],{"class":51281},[99,66297,53467],{"class":1949},[99,66299,155],{"class":109},[99,66301,66302],{"class":214},"\"son\"",[99,66304,55295],{"class":109},[99,66306,51592],{"class":51281},[99,66308,51288],{"class":109},[99,66310,66311,66313,66315],{"class":101,"line":1745},[99,66312,52398],{"class":109},[99,66314,51592],{"class":51281},[99,66316,51288],{"class":109},[99,66318,66319,66321,66323],{"class":101,"line":1750},[99,66320,52125],{"class":109},[99,66322,51794],{"class":51281},[99,66324,51288],{"class":109},[99,66326,66327,66329,66332,66334,66336,66338,66340,66343],{"class":101,"line":1764},[99,66328,11208],{"class":105},[99,66330,66331],{"class":158}," fa",[99,66333,13551],{"class":105},[99,66335,54377],{"class":109},[99,66337,54380],{"class":1949},[99,66339,110],{"class":109},[99,66341,66342],{"class":214},"'.father'",[99,66344,116],{"class":109},[99,66346,66347,66349,66352,66354,66356,66358,66360,66363],{"class":101,"line":1769},[99,66348,11208],{"class":105},[99,66350,66351],{"class":158}," son",[99,66353,13551],{"class":105},[99,66355,54377],{"class":109},[99,66357,54380],{"class":1949},[99,66359,110],{"class":109},[99,66361,66362],{"class":214},"'.son'",[99,66364,116],{"class":109},[99,66366,66367,66369,66371,66373,66375,66377,66379],{"class":101,"line":2563},[99,66368,52388],{"class":109},[99,66370,57794],{"class":1949},[99,66372,110],{"class":109},[99,66374,57799],{"class":214},[99,66376,12422],{"class":109},[99,66378,54430],{"class":105},[99,66380,54433],{"class":109},[99,66382,66383,66385,66387,66390],{"class":101,"line":2577},[99,66384,58906],{"class":1949},[99,66386,110],{"class":109},[99,66388,66389],{"class":214},"'woshiu1'",[99,66391,116],{"class":109},[99,66393,66394,66396,66398],{"class":101,"line":2585},[99,66395,54516],{"class":109},[99,66397,1348],{"class":158},[99,66399,116],{"class":109},[99,66401,66402,66405,66407,66409,66411,66413,66415],{"class":101,"line":2590},[99,66403,66404],{"class":109},"    fa.",[99,66406,57794],{"class":1949},[99,66408,110],{"class":109},[99,66410,57799],{"class":214},[99,66412,12422],{"class":109},[99,66414,54430],{"class":105},[99,66416,54433],{"class":109},[99,66418,66419,66421,66423,66426],{"class":101,"line":2596},[99,66420,58906],{"class":1949},[99,66422,110],{"class":109},[99,66424,66425],{"class":214},"'1'",[99,66427,116],{"class":109},[99,66429,66430,66432,66434],{"class":101,"line":2602},[99,66431,54516],{"class":109},[99,66433,1348],{"class":158},[99,66435,116],{"class":109},[99,66437,66438,66441,66443,66445,66447,66449,66451],{"class":101,"line":2607},[99,66439,66440],{"class":109},"    son.",[99,66442,57794],{"class":1949},[99,66444,110],{"class":109},[99,66446,57799],{"class":214},[99,66448,12422],{"class":109},[99,66450,54430],{"class":105},[99,66452,54433],{"class":109},[99,66454,66455,66457,66459,66462],{"class":101,"line":7935},[99,66456,58906],{"class":1949},[99,66458,110],{"class":109},[99,66460,66461],{"class":214},"'2'",[99,66463,116],{"class":109},[99,66465,66466,66468,66470],{"class":101,"line":7959},[99,66467,54516],{"class":109},[99,66469,1348],{"class":158},[99,66471,116],{"class":109},[99,66473,66474,66476,66478],{"class":101,"line":7964},[99,66475,52398],{"class":109},[99,66477,51794],{"class":51281},[99,66479,51288],{"class":109},[99,66481,66482,66484,66486],{"class":101,"line":7970},[99,66483,51766],{"class":109},[99,66485,51781],{"class":51281},[99,66487,51288],{"class":109},[99,66489,66490],{"class":101,"line":7997},[99,66491,2386],{"emptyLinePlaceholder":26},[99,66493,66494,66496,66498],{"class":101,"line":8002},[99,66495,51766],{"class":109},[99,66497,50616],{"class":51281},[99,66499,51288],{"class":109},[14,66501,66502],{},[1448,66503],{"alt":21,"src":66504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66506,66507],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21985,66509,66511],{"id":66510},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66513,66514],{},[1448,66515],{"alt":21,"src":66516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66518,66519],{},"反着来",[14,66521,66522],{},"注意是同名事件，比如都是‘click’",[21985,66524,66526],{"id":66525},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66528,66529],{},[1448,66530],{"alt":21,"src":66531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21985,66533,66535],{"id":66534},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66537,66538],{},[1448,66539],{"alt":21,"src":66540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66542,66543],{},[1448,66544],{"alt":21,"src":66545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21985,66547,66549],{"id":66548},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[53,66551,66552],{},[56,66553,66554],{},"事件类型的区别",[14,66556,66557],{},[1448,66558],{"alt":21,"src":66559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66561,66562],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[53,66564,66565],{"start":22},[56,66566,66567],{},"注册事件的区别",[14,66569,66570],{},[1448,66571],{"alt":21,"src":66572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21985,66574,66576],{"id":66575},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66578,66579],{},[1448,66580],{"alt":21,"src":66581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66583,66584],{},[1448,66585],{"alt":21,"src":66586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[90,66588,66590],{"className":53048,"code":66589,"language":53050,"meta":21,"style":21},"\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",[96,66591,66592,66600,66617,66640,66648,66653,66658,66663,66667,66675,66683],{"__ignoreMap":21},[99,66593,66594,66596,66598],{"class":101,"line":102},[99,66595,1020],{"class":109},[99,66597,51781],{"class":51281},[99,66599,51288],{"class":109},[99,66601,66602,66604,66607,66610,66612,66615],{"class":101,"line":22},[99,66603,52125],{"class":109},[99,66605,66606],{"class":51281},"form",[99,66608,66609],{"class":1949}," action",[99,66611,155],{"class":109},[99,66613,66614],{"class":214},"\"http:\u002F\u002Fwww.itcast.cn\"",[99,66616,51288],{"class":109},[99,66618,66619,66621,66623,66625,66627,66630,66633,66635,66638],{"class":101,"line":1165},[99,66620,51322],{"class":109},[99,66622,53802],{"class":51281},[99,66624,53805],{"class":1949},[99,66626,155],{"class":109},[99,66628,66629],{"class":214},"\"submit\"",[99,66631,66632],{"class":1949}," value",[99,66634,155],{"class":109},[99,66636,66637],{"class":214},"\"免费注册\"",[99,66639,51288],{"class":109},[99,66641,66642,66644,66646],{"class":101,"line":1180},[99,66643,51322],{"class":109},[99,66645,51794],{"class":51281},[99,66647,51288],{"class":109},[99,66649,66650],{"class":101,"line":1186},[99,66651,66652],{"class":109},"      const form = document.querySelector('form')\n",[99,66654,66655],{"class":101,"line":1200},[99,66656,66657],{"class":109},"      form.addEventListener('submit', function (e) {\n",[99,66659,66660],{"class":101,"line":1206},[99,66661,66662],{"class":109},"        e.preventDefault()\n",[99,66664,66665],{"class":101,"line":1297},[99,66666,64796],{"class":109},[99,66668,66669,66671,66673],{"class":101,"line":1303},[99,66670,51757],{"class":109},[99,66672,51794],{"class":51281},[99,66674,51288],{"class":109},[99,66676,66677,66679,66681],{"class":101,"line":1315},[99,66678,52398],{"class":109},[99,66680,66606],{"class":51281},[99,66682,51288],{"class":109},[99,66684,66685,66687,66689],{"class":101,"line":1598},[99,66686,51766],{"class":109},[99,66688,51781],{"class":51281},[99,66690,51288],{"class":109},[14,66692,66693],{},"点击不在跳转！！！",[70,66695,66697],{"id":66696},"_332-事件委托","3.3.2 事件委托",[14,66699,66700],{},[1448,66701],{"alt":21,"src":66702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[90,66704,66706],{"className":50614,"code":66705,"language":50616,"meta":21,"style":21},"\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",[96,66707,66708,66718,66732,66736,66744,66758,66778,66790,66798,66802,66810,66818,66830,66842,66854,66866,66878,66891,66899,66907,66912,66931,66952,66957,66962,66967,66972,66981,66985,66995,66999,67004,67009,67023,67033,67037,67041,67049,67057,67061],{"__ignoreMap":21},[99,66709,66710,66712,66714,66716],{"class":101,"line":102},[99,66711,51278],{"class":109},[99,66713,51282],{"class":51281},[99,66715,51285],{"class":1949},[99,66717,51288],{"class":109},[99,66719,66720,66722,66724,66726,66728,66730],{"class":101,"line":22},[99,66721,1020],{"class":109},[99,66723,50616],{"class":51281},[99,66725,51297],{"class":1949},[99,66727,155],{"class":109},[99,66729,51302],{"class":214},[99,66731,51288],{"class":109},[99,66733,66734],{"class":101,"line":1165},[99,66735,2386],{"emptyLinePlaceholder":26},[99,66737,66738,66740,66742],{"class":101,"line":1180},[99,66739,1020],{"class":109},[99,66741,51315],{"class":51281},[99,66743,51288],{"class":109},[99,66745,66746,66748,66750,66752,66754,66756],{"class":101,"line":1186},[99,66747,52125],{"class":109},[99,66749,51325],{"class":51281},[99,66751,51328],{"class":1949},[99,66753,155],{"class":109},[99,66755,51333],{"class":214},[99,66757,51288],{"class":109},[99,66759,66760,66762,66764,66766,66768,66770,66772,66774,66776],{"class":101,"line":1200},[99,66761,52125],{"class":109},[99,66763,51325],{"class":51281},[99,66765,14907],{"class":1949},[99,66767,155],{"class":109},[99,66769,51372],{"class":214},[99,66771,51352],{"class":1949},[99,66773,155],{"class":109},[99,66775,51379],{"class":214},[99,66777,51288],{"class":109},[99,66779,66780,66782,66784,66786,66788],{"class":101,"line":1206},[99,66781,52125],{"class":109},[99,66783,51388],{"class":51281},[99,66785,51391],{"class":109},[99,66787,51388],{"class":51281},[99,66789,51288],{"class":109},[99,66791,66792,66794,66796],{"class":101,"line":1297},[99,66793,51766],{"class":109},[99,66795,51315],{"class":51281},[99,66797,51288],{"class":109},[99,66799,66800],{"class":101,"line":1303},[99,66801,2386],{"emptyLinePlaceholder":26},[99,66803,66804,66806,66808],{"class":101,"line":1315},[99,66805,1020],{"class":109},[99,66807,51781],{"class":51281},[99,66809,51288],{"class":109},[99,66811,66812,66814,66816],{"class":101,"line":1598},[99,66813,52125],{"class":109},[99,66815,1117],{"class":51281},[99,66817,51288],{"class":109},[99,66819,66820,66822,66824,66826,66828],{"class":101,"line":1603},[99,66821,51322],{"class":109},[99,66823,56],{"class":51281},[99,66825,53947],{"class":109},[99,66827,56],{"class":51281},[99,66829,51288],{"class":109},[99,66831,66832,66834,66836,66838,66840],{"class":101,"line":1609},[99,66833,51322],{"class":109},[99,66835,56],{"class":51281},[99,66837,53966],{"class":109},[99,66839,56],{"class":51281},[99,66841,51288],{"class":109},[99,66843,66844,66846,66848,66850,66852],{"class":101,"line":1614},[99,66845,51322],{"class":109},[99,66847,56],{"class":51281},[99,66849,53985],{"class":109},[99,66851,56],{"class":51281},[99,66853,51288],{"class":109},[99,66855,66856,66858,66860,66862,66864],{"class":101,"line":1628},[99,66857,51322],{"class":109},[99,66859,56],{"class":51281},[99,66861,54004],{"class":109},[99,66863,56],{"class":51281},[99,66865,51288],{"class":109},[99,66867,66868,66870,66872,66874,66876],{"class":101,"line":1633},[99,66869,51322],{"class":109},[99,66871,56],{"class":51281},[99,66873,54023],{"class":109},[99,66875,56],{"class":51281},[99,66877,51288],{"class":109},[99,66879,66880,66882,66884,66887,66889],{"class":101,"line":1639},[99,66881,51322],{"class":109},[99,66883,14],{"class":51281},[99,66885,66886],{"class":109},">我不需要变色\u003C\u002F",[99,66888,14],{"class":51281},[99,66890,51288],{"class":109},[99,66892,66893,66895,66897],{"class":101,"line":1660},[99,66894,52398],{"class":109},[99,66896,1117],{"class":51281},[99,66898,51288],{"class":109},[99,66900,66901,66903,66905],{"class":101,"line":1665},[99,66902,52125],{"class":109},[99,66904,51794],{"class":51281},[99,66906,51288],{"class":109},[99,66908,66909],{"class":101,"line":1679},[99,66910,66911],{"class":168},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[99,66913,66914,66916,66918,66920,66922,66924,66926,66929],{"class":101,"line":1684},[99,66915,11208],{"class":105},[99,66917,61273],{"class":158},[99,66919,13551],{"class":105},[99,66921,54377],{"class":109},[99,66923,54380],{"class":1949},[99,66925,110],{"class":109},[99,66927,66928],{"class":214},"'ul'",[99,66930,116],{"class":109},[99,66932,66933,66936,66938,66940,66942,66944,66946,66948,66950],{"class":101,"line":1713},[99,66934,66935],{"class":109},"    ul.",[99,66937,57794],{"class":1949},[99,66939,110],{"class":109},[99,66941,57799],{"class":214},[99,66943,12422],{"class":109},[99,66945,54430],{"class":105},[99,66947,1644],{"class":109},[99,66949,184],{"class":5203},[99,66951,12429],{"class":109},[99,66953,66954],{"class":101,"line":1718},[99,66955,66956],{"class":168},"      \u002F\u002F alert(1)\n",[99,66958,66959],{"class":101,"line":1735},[99,66960,66961],{"class":168},"      \u002F\u002F e.target就是我们点击的对象\n",[99,66963,66964],{"class":101,"line":1740},[99,66965,66966],{"class":168},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[99,66968,66969],{"class":101,"line":1745},[99,66970,66971],{"class":168},"      \u002F\u002F e.target.style.color = 'red'\n",[99,66973,66974,66976,66978],{"class":101,"line":1750},[99,66975,58225],{"class":109},[99,66977,58228],{"class":1949},[99,66979,66980],{"class":109},"(e)\n",[99,66982,66983],{"class":101,"line":1764},[99,66984,2386],{"emptyLinePlaceholder":26},[99,66986,66987,66989,66992],{"class":101,"line":1769},[99,66988,58225],{"class":109},[99,66990,66991],{"class":1949},"dir",[99,66993,66994],{"class":109},"(e.target)\n",[99,66996,66997],{"class":101,"line":2563},[99,66998,2386],{"emptyLinePlaceholder":26},[99,67000,67001],{"class":101,"line":2577},[99,67002,67003],{"class":168},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[99,67005,67006],{"class":101,"line":2585},[99,67007,67008],{"class":168},"      \u002F\u002F 通过tagName来进行判断\n",[99,67010,67011,67013,67016,67018,67021],{"class":101,"line":2590},[99,67012,54461],{"class":105},[99,67014,67015],{"class":109}," (e.target.tagName ",[99,67017,54467],{"class":105},[99,67019,67020],{"class":214}," 'LI'",[99,67022,12429],{"class":109},[99,67024,67025,67028,67030],{"class":101,"line":2596},[99,67026,67027],{"class":109},"        e.target.style.color ",[99,67029,155],{"class":105},[99,67031,67032],{"class":214}," 'red'\n",[99,67034,67035],{"class":101,"line":2602},[99,67036,52379],{"class":109},[99,67038,67039],{"class":101,"line":2607},[99,67040,33442],{"class":109},[99,67042,67043,67045,67047],{"class":101,"line":7935},[99,67044,52398],{"class":109},[99,67046,51794],{"class":51281},[99,67048,51288],{"class":109},[99,67050,67051,67053,67055],{"class":101,"line":7959},[99,67052,51766],{"class":109},[99,67054,51781],{"class":51281},[99,67056,51288],{"class":109},[99,67058,67059],{"class":101,"line":7964},[99,67060,2386],{"emptyLinePlaceholder":26},[99,67062,67063,67065,67067],{"class":101,"line":7970},[99,67064,51766],{"class":109},[99,67066,50616],{"class":51281},[99,67068,51288],{"class":109},[14,67070,67071],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67073,67074],{},"if(e.target.ragName==='P') {}",[14,67076,67077],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67079,67080],{},"通过事件委托的方式实现tab栏切换改造：",[14,67082,67083],{},"一定要记住自定义属性！！！！！！",[14,67085,67086],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67088,67089],{},"id是自定义的属性名",[14,67091,67092],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[90,67094,67096],{"className":50614,"code":67095,"language":50616,"meta":21,"style":21},"\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",[96,67097,67098,67108,67122,67126,67134,67148,67168,67188,67200,67208,67214,67224,67234,67238,67242,67248,67260,67272,67284,67300,67304,67308,67314,67326,67338,67350,67360,67370,67374,67378,67386,67398,67408,67420,67424,67428,67436,67446,67456,67466,67470,67474,67484,67498,67510,67514,67518,67530,67540,67556,67566,67570,67574,67588,67598,67608,67612,67616,67622,67636,67640,67644,67652,67662,67666,67670,67679,67689,67693,67701,67709,67713,67721,67735,67749,67761,67769,67808,67840,67872,67904,67936,67944,67952,67966,68000,68034,68068,68102,68136,68144,68152,68160,68165,68170,68189,68194,68214,68222,68227,68240,68261,68274,68278,68283,68288,68301,68321,68349,68353,68357,68361,68369,68377,68381],{"__ignoreMap":21},[99,67099,67100,67102,67104,67106],{"class":101,"line":102},[99,67101,51278],{"class":109},[99,67103,51282],{"class":51281},[99,67105,51285],{"class":1949},[99,67107,51288],{"class":109},[99,67109,67110,67112,67114,67116,67118,67120],{"class":101,"line":22},[99,67111,1020],{"class":109},[99,67113,50616],{"class":51281},[99,67115,51297],{"class":1949},[99,67117,155],{"class":109},[99,67119,51302],{"class":214},[99,67121,51288],{"class":109},[99,67123,67124],{"class":101,"line":1165},[99,67125,2386],{"emptyLinePlaceholder":26},[99,67127,67128,67130,67132],{"class":101,"line":1180},[99,67129,1020],{"class":109},[99,67131,51315],{"class":51281},[99,67133,51288],{"class":109},[99,67135,67136,67138,67140,67142,67144,67146],{"class":101,"line":1186},[99,67137,52125],{"class":109},[99,67139,51325],{"class":51281},[99,67141,51328],{"class":1949},[99,67143,155],{"class":109},[99,67145,51333],{"class":214},[99,67147,59108],{"class":109},[99,67149,67150,67152,67154,67156,67158,67160,67162,67164,67166],{"class":101,"line":1200},[99,67151,52125],{"class":109},[99,67153,51325],{"class":51281},[99,67155,51344],{"class":1949},[99,67157,155],{"class":109},[99,67159,51349],{"class":214},[99,67161,51352],{"class":1949},[99,67163,155],{"class":109},[99,67165,51357],{"class":214},[99,67167,59108],{"class":109},[99,67169,67170,67172,67174,67176,67178,67180,67182,67184,67186],{"class":101,"line":1206},[99,67171,52125],{"class":109},[99,67173,51325],{"class":51281},[99,67175,14907],{"class":1949},[99,67177,155],{"class":109},[99,67179,51372],{"class":214},[99,67181,51352],{"class":1949},[99,67183,155],{"class":109},[99,67185,51379],{"class":214},[99,67187,59108],{"class":109},[99,67189,67190,67192,67194,67196,67198],{"class":101,"line":1297},[99,67191,52125],{"class":109},[99,67193,51388],{"class":51281},[99,67195,63606],{"class":109},[99,67197,51388],{"class":51281},[99,67199,51288],{"class":109},[99,67201,67202,67204,67206],{"class":101,"line":1303},[99,67203,52125],{"class":109},[99,67205,5113],{"class":51281},[99,67207,51288],{"class":109},[99,67209,67210,67212],{"class":101,"line":1315},[99,67211,6390],{"class":51281},[99,67213,15559],{"class":109},[99,67215,67216,67218,67220,67222],{"class":101,"line":1598},[99,67217,54687],{"class":158},[99,67219,51418],{"class":109},[99,67221,301],{"class":158},[99,67223,1276],{"class":109},[99,67225,67226,67228,67230,67232],{"class":101,"line":1603},[99,67227,54676],{"class":158},[99,67229,51418],{"class":109},[99,67231,301],{"class":158},[99,67233,1276],{"class":109},[99,67235,67236],{"class":101,"line":1609},[99,67237,2173],{"class":109},[99,67239,67240],{"class":101,"line":1614},[99,67241,2386],{"emptyLinePlaceholder":26},[99,67243,67244,67246],{"class":101,"line":1628},[99,67245,63657],{"class":1949},[99,67247,15559],{"class":109},[99,67249,67250,67252,67254,67256,67258],{"class":101,"line":1633},[99,67251,54752],{"class":158},[99,67253,51418],{"class":109},[99,67255,63668],{"class":158},[99,67257,51473],{"class":105},[99,67259,1276],{"class":109},[99,67261,67262,67264,67266,67268,67270],{"class":101,"line":1639},[99,67263,54766],{"class":158},[99,67265,51418],{"class":109},[99,67267,63681],{"class":158},[99,67269,51473],{"class":105},[99,67271,1276],{"class":109},[99,67273,67274,67276,67278,67280,67282],{"class":101,"line":1660},[99,67275,54687],{"class":158},[99,67277,51418],{"class":109},[99,67279,810],{"class":158},[99,67281,51473],{"class":105},[99,67283,1276],{"class":109},[99,67285,67286,67288,67290,67292,67294,67296,67298],{"class":101,"line":1665},[99,67287,61958],{"class":158},[99,67289,51418],{"class":109},[99,67291,327],{"class":158},[99,67293,51473],{"class":105},[99,67295,51502],{"class":158},[99,67297,62225],{"class":158},[99,67299,1276],{"class":109},[99,67301,67302],{"class":101,"line":1679},[99,67303,2173],{"class":109},[99,67305,67306],{"class":101,"line":1684},[99,67307,2386],{"emptyLinePlaceholder":26},[99,67309,67310,67312],{"class":101,"line":1713},[99,67311,63726],{"class":1949},[99,67313,15559],{"class":109},[99,67315,67316,67318,67320,67322,67324],{"class":101,"line":1718},[99,67317,54752],{"class":158},[99,67319,51418],{"class":109},[99,67321,421],{"class":158},[99,67323,438],{"class":105},[99,67325,1276],{"class":109},[99,67327,67328,67330,67332,67334,67336],{"class":101,"line":1735},[99,67329,54766],{"class":158},[99,67331,51418],{"class":109},[99,67333,1017],{"class":158},[99,67335,51473],{"class":105},[99,67337,1276],{"class":109},[99,67339,67340,67342,67344,67346,67348],{"class":101,"line":1740},[99,67341,57340],{"class":158},[99,67343,51418],{"class":109},[99,67345,1017],{"class":158},[99,67347,51473],{"class":105},[99,67349,1276],{"class":109},[99,67351,67352,67354,67356,67358],{"class":101,"line":1745},[99,67353,54990],{"class":158},[99,67355,51418],{"class":109},[99,67357,51458],{"class":158},[99,67359,1276],{"class":109},[99,67361,67362,67364,67366,67368],{"class":101,"line":1750},[99,67363,55001],{"class":158},[99,67365,51418],{"class":109},[99,67367,51649],{"class":158},[99,67369,1276],{"class":109},[99,67371,67372],{"class":101,"line":1764},[99,67373,2173],{"class":109},[99,67375,67376],{"class":101,"line":1769},[99,67377,2386],{"emptyLinePlaceholder":26},[99,67379,67380,67382,67384],{"class":101,"line":2563},[99,67381,63726],{"class":1949},[99,67383,63799],{"class":51281},[99,67385,15559],{"class":109},[99,67387,67388,67390,67392,67394,67396],{"class":101,"line":2577},[99,67389,54903],{"class":158},[99,67391,51418],{"class":109},[99,67393,910],{"class":158},[99,67395,51473],{"class":105},[99,67397,1276],{"class":109},[99,67399,67400,67402,67404,67406],{"class":101,"line":2585},[99,67401,62315],{"class":158},[99,67403,51418],{"class":109},[99,67405,63822],{"class":158},[99,67407,1276],{"class":109},[99,67409,67410,67412,67414,67416,67418],{"class":101,"line":2590},[99,67411,61981],{"class":158},[99,67413,51418],{"class":109},[99,67415,810],{"class":158},[99,67417,51473],{"class":105},[99,67419,1276],{"class":109},[99,67421,67422],{"class":101,"line":2596},[99,67423,2173],{"class":109},[99,67425,67426],{"class":101,"line":2602},[99,67427,2386],{"emptyLinePlaceholder":26},[99,67429,67430,67432,67434],{"class":101,"line":2607},[99,67431,63726],{"class":1949},[99,67433,61273],{"class":51281},[99,67435,15559],{"class":109},[99,67437,67438,67440,67442,67444],{"class":101,"line":7935},[99,67439,54713],{"class":158},[99,67441,51418],{"class":109},[99,67443,54718],{"class":158},[99,67445,1276],{"class":109},[99,67447,67448,67450,67452,67454],{"class":101,"line":7959},[99,67449,54990],{"class":158},[99,67451,51418],{"class":109},[99,67453,51458],{"class":158},[99,67455,1276],{"class":109},[99,67457,67458,67460,67462,67464],{"class":101,"line":7964},[99,67459,55001],{"class":158},[99,67461,51418],{"class":109},[99,67463,51561],{"class":158},[99,67465,1276],{"class":109},[99,67467,67468],{"class":101,"line":7970},[99,67469,2173],{"class":109},[99,67471,67472],{"class":101,"line":7997},[99,67473,2386],{"emptyLinePlaceholder":26},[99,67475,67476,67478,67480,67482],{"class":101,"line":8002},[99,67477,63726],{"class":1949},[99,67479,61273],{"class":51281},[99,67481,55056],{"class":51281},[99,67483,15559],{"class":109},[99,67485,67486,67488,67490,67492,67494,67496],{"class":101,"line":8008},[99,67487,54687],{"class":158},[99,67489,51418],{"class":109},[99,67491,301],{"class":158},[99,67493,8937],{"class":158},[99,67495,51473],{"class":105},[99,67497,1276],{"class":109},[99,67499,67500,67502,67504,67506,67508],{"class":101,"line":8020},[99,67501,54903],{"class":158},[99,67503,51418],{"class":109},[99,67505,659],{"class":158},[99,67507,51473],{"class":105},[99,67509,1276],{"class":109},[99,67511,67512],{"class":101,"line":8032},[99,67513,2173],{"class":109},[99,67515,67516],{"class":101,"line":8044},[99,67517,2386],{"emptyLinePlaceholder":26},[99,67519,67520,67522,67524,67526,67528],{"class":101,"line":9703},[99,67521,63726],{"class":1949},[99,67523,61273],{"class":51281},[99,67525,55056],{"class":51281},[99,67527,1384],{"class":51281},[99,67529,15559],{"class":109},[99,67531,67532,67534,67536,67538],{"class":101,"line":9728},[99,67533,63951],{"class":158},[99,67535,51418],{"class":109},[99,67537,54718],{"class":158},[99,67539,1276],{"class":109},[99,67541,67542,67544,67546,67548,67550,67552,67554],{"class":101,"line":9751},[99,67543,62213],{"class":158},[99,67545,51418],{"class":109},[99,67547,187],{"class":158},[99,67549,51473],{"class":105},[99,67551,51502],{"class":158},[99,67553,63972],{"class":158},[99,67555,1276],{"class":109},[99,67557,67558,67560,67562,67564],{"class":101,"line":9775},[99,67559,57397],{"class":158},[99,67561,51418],{"class":109},[99,67563,62350],{"class":158},[99,67565,1276],{"class":109},[99,67567,67568],{"class":101,"line":9780},[99,67569,2173],{"class":109},[99,67571,67572],{"class":101,"line":9785},[99,67573,2386],{"emptyLinePlaceholder":26},[99,67575,67576,67578,67580,67582,67584,67586],{"class":101,"line":9790},[99,67577,63726],{"class":1949},[99,67579,61273],{"class":51281},[99,67581,55056],{"class":51281},[99,67583,1384],{"class":51281},[99,67585,64005],{"class":1949},[99,67587,15559],{"class":109},[99,67589,67590,67592,67594,67596],{"class":101,"line":9799},[99,67591,61772],{"class":158},[99,67593,51418],{"class":109},[99,67595,64016],{"class":158},[99,67597,1276],{"class":109},[99,67599,67600,67602,67604,67606],{"class":101,"line":9804},[99,67601,57397],{"class":158},[99,67603,51418],{"class":109},[99,67605,64016],{"class":158},[99,67607,1276],{"class":109},[99,67609,67610],{"class":101,"line":9810},[99,67611,2173],{"class":109},[99,67613,67614],{"class":101,"line":9831},[99,67615,2386],{"emptyLinePlaceholder":26},[99,67617,67618,67620],{"class":101,"line":9837},[99,67619,64041],{"class":1949},[99,67621,15559],{"class":109},[99,67623,67624,67626,67628,67630,67632,67634],{"class":101,"line":9851},[99,67625,54676],{"class":158},[99,67627,51418],{"class":109},[99,67629,301],{"class":158},[99,67631,64054],{"class":158},[99,67633,51473],{"class":105},[99,67635,1276],{"class":109},[99,67637,67638],{"class":101,"line":9857},[99,67639,2173],{"class":109},[99,67641,67642],{"class":101,"line":9884},[99,67643,2386],{"emptyLinePlaceholder":26},[99,67645,67646,67648,67650],{"class":101,"line":9893},[99,67647,64041],{"class":1949},[99,67649,62155],{"class":1949},[99,67651,15559],{"class":109},[99,67653,67654,67656,67658,67660],{"class":101,"line":9899},[99,67655,54990],{"class":158},[99,67657,51418],{"class":109},[99,67659,54718],{"class":158},[99,67661,1276],{"class":109},[99,67663,67664],{"class":101,"line":9907},[99,67665,2173],{"class":109},[99,67667,67668],{"class":101,"line":9912},[99,67669,2386],{"emptyLinePlaceholder":26},[99,67671,67672,67674,67677],{"class":101,"line":16591},[99,67673,64041],{"class":1949},[99,67675,67676],{"class":1949}," .active",[99,67678,15559],{"class":109},[99,67680,67681,67683,67685,67687],{"class":101,"line":16597},[99,67682,54990],{"class":158},[99,67684,51418],{"class":109},[99,67686,60850],{"class":158},[99,67688,1276],{"class":109},[99,67690,67691],{"class":101,"line":16620},[99,67692,2173],{"class":109},[99,67694,67695,67697,67699],{"class":101,"line":16626},[99,67696,52398],{"class":109},[99,67698,5113],{"class":51281},[99,67700,51288],{"class":109},[99,67702,67703,67705,67707],{"class":101,"line":16649},[99,67704,51766],{"class":109},[99,67706,51315],{"class":51281},[99,67708,51288],{"class":109},[99,67710,67711],{"class":101,"line":16663},[99,67712,2386],{"emptyLinePlaceholder":26},[99,67714,67715,67717,67719],{"class":101,"line":16683},[99,67716,1020],{"class":109},[99,67718,51781],{"class":51281},[99,67720,51288],{"class":109},[99,67722,67723,67725,67727,67729,67731,67733],{"class":101,"line":16689},[99,67724,52125],{"class":109},[99,67726,51592],{"class":51281},[99,67728,53467],{"class":1949},[99,67730,155],{"class":109},[99,67732,64156],{"class":214},[99,67734,51288],{"class":109},[99,67736,67737,67739,67741,67743,67745,67747],{"class":101,"line":16700},[99,67738,51322],{"class":109},[99,67740,51592],{"class":51281},[99,67742,53467],{"class":1949},[99,67744,155],{"class":109},[99,67746,64171],{"class":214},[99,67748,51288],{"class":109},[99,67750,67751,67753,67755,67757,67759],{"class":101,"line":16723},[99,67752,55215],{"class":109},[99,67754,70],{"class":51281},[99,67756,64182],{"class":109},[99,67758,70],{"class":51281},[99,67760,51288],{"class":109},[99,67762,67763,67765,67767],{"class":101,"line":16745},[99,67764,55215],{"class":109},[99,67766,1117],{"class":51281},[99,67768,51288],{"class":109},[99,67770,67771,67773,67775,67777,67779,67781,67783,67785,67787,67789,67791,67793,67795,67798,67800,67802,67804,67806],{"class":101,"line":16750},[99,67772,55283],{"class":109},[99,67774,56],{"class":51281},[99,67776,61033],{"class":109},[99,67778,348],{"class":51281},[99,67780,53467],{"class":1949},[99,67782,155],{"class":109},[99,67784,59687],{"class":214},[99,67786,61038],{"class":1949},[99,67788,155],{"class":109},[99,67790,64217],{"class":214},[99,67792,53932],{"class":1949},[99,67794,155],{"class":109},[99,67796,67797],{"class":214},"\"0\"",[99,67799,64220],{"class":109},[99,67801,348],{"class":51281},[99,67803,55295],{"class":109},[99,67805,56],{"class":51281},[99,67807,51288],{"class":109},[99,67809,67810,67812,67814,67816,67818,67820,67822,67824,67826,67828,67830,67832,67834,67836,67838],{"class":101,"line":16756},[99,67811,55283],{"class":109},[99,67813,56],{"class":51281},[99,67815,61033],{"class":109},[99,67817,348],{"class":51281},[99,67819,61038],{"class":1949},[99,67821,155],{"class":109},[99,67823,64217],{"class":214},[99,67825,53932],{"class":1949},[99,67827,155],{"class":109},[99,67829,3664],{"class":214},[99,67831,64247],{"class":109},[99,67833,348],{"class":51281},[99,67835,55295],{"class":109},[99,67837,56],{"class":51281},[99,67839,51288],{"class":109},[99,67841,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868,67870],{"class":101,"line":16770},[99,67843,55283],{"class":109},[99,67845,56],{"class":51281},[99,67847,61033],{"class":109},[99,67849,348],{"class":51281},[99,67851,61038],{"class":1949},[99,67853,155],{"class":109},[99,67855,64217],{"class":214},[99,67857,53932],{"class":1949},[99,67859,155],{"class":109},[99,67861,3687],{"class":214},[99,67863,64274],{"class":109},[99,67865,348],{"class":51281},[99,67867,55295],{"class":109},[99,67869,56],{"class":51281},[99,67871,51288],{"class":109},[99,67873,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902],{"class":101,"line":16783},[99,67875,55283],{"class":109},[99,67877,56],{"class":51281},[99,67879,61033],{"class":109},[99,67881,348],{"class":51281},[99,67883,61038],{"class":1949},[99,67885,155],{"class":109},[99,67887,64217],{"class":214},[99,67889,53932],{"class":1949},[99,67891,155],{"class":109},[99,67893,3700],{"class":214},[99,67895,64301],{"class":109},[99,67897,348],{"class":51281},[99,67899,55295],{"class":109},[99,67901,56],{"class":51281},[99,67903,51288],{"class":109},[99,67905,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934],{"class":101,"line":16788},[99,67907,55283],{"class":109},[99,67909,56],{"class":51281},[99,67911,61033],{"class":109},[99,67913,348],{"class":51281},[99,67915,61038],{"class":1949},[99,67917,155],{"class":109},[99,67919,64217],{"class":214},[99,67921,53932],{"class":1949},[99,67923,155],{"class":109},[99,67925,3713],{"class":214},[99,67927,64328],{"class":109},[99,67929,348],{"class":51281},[99,67931,55295],{"class":109},[99,67933,56],{"class":51281},[99,67935,51288],{"class":109},[99,67937,67938,67940,67942],{"class":101,"line":16802},[99,67939,55388],{"class":109},[99,67941,1117],{"class":51281},[99,67943,51288],{"class":109},[99,67945,67946,67948,67950],{"class":101,"line":16807},[99,67947,51757],{"class":109},[99,67949,51592],{"class":51281},[99,67951,51288],{"class":109},[99,67953,67954,67956,67958,67960,67962,67964],{"class":101,"line":16813},[99,67955,51322],{"class":109},[99,67957,51592],{"class":51281},[99,67959,53467],{"class":1949},[99,67961,155],{"class":109},[99,67963,64365],{"class":214},[99,67965,51288],{"class":109},[99,67967,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998],{"class":101,"line":16818},[99,67969,55215],{"class":109},[99,67971,51592],{"class":51281},[99,67973,53467],{"class":1949},[99,67975,155],{"class":109},[99,67977,64380],{"class":214},[99,67979,61033],{"class":109},[99,67981,1448],{"class":51281},[99,67983,55220],{"class":1949},[99,67985,155],{"class":109},[99,67987,64391],{"class":214},[99,67989,55228],{"class":1949},[99,67991,155],{"class":109},[99,67993,7639],{"class":214},[99,67995,64400],{"class":109},[99,67997,51592],{"class":51281},[99,67999,51288],{"class":109},[99,68001,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032],{"class":101,"line":16832},[99,68003,55215],{"class":109},[99,68005,51592],{"class":51281},[99,68007,53467],{"class":1949},[99,68009,155],{"class":109},[99,68011,62604],{"class":214},[99,68013,61033],{"class":109},[99,68015,1448],{"class":51281},[99,68017,55220],{"class":1949},[99,68019,155],{"class":109},[99,68021,64427],{"class":214},[99,68023,55228],{"class":1949},[99,68025,155],{"class":109},[99,68027,7639],{"class":214},[99,68029,64400],{"class":109},[99,68031,51592],{"class":51281},[99,68033,51288],{"class":109},[99,68035,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066],{"class":101,"line":16837},[99,68037,55215],{"class":109},[99,68039,51592],{"class":51281},[99,68041,53467],{"class":1949},[99,68043,155],{"class":109},[99,68045,62604],{"class":214},[99,68047,61033],{"class":109},[99,68049,1448],{"class":51281},[99,68051,55220],{"class":1949},[99,68053,155],{"class":109},[99,68055,64462],{"class":214},[99,68057,55228],{"class":1949},[99,68059,155],{"class":109},[99,68061,7639],{"class":214},[99,68063,64400],{"class":109},[99,68065,51592],{"class":51281},[99,68067,51288],{"class":109},[99,68069,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100],{"class":101,"line":16842},[99,68071,55215],{"class":109},[99,68073,51592],{"class":51281},[99,68075,53467],{"class":1949},[99,68077,155],{"class":109},[99,68079,62604],{"class":214},[99,68081,61033],{"class":109},[99,68083,1448],{"class":51281},[99,68085,55220],{"class":1949},[99,68087,155],{"class":109},[99,68089,64497],{"class":214},[99,68091,55228],{"class":1949},[99,68093,155],{"class":109},[99,68095,7639],{"class":214},[99,68097,64400],{"class":109},[99,68099,51592],{"class":51281},[99,68101,51288],{"class":109},[99,68103,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134],{"class":101,"line":16856},[99,68105,55215],{"class":109},[99,68107,51592],{"class":51281},[99,68109,53467],{"class":1949},[99,68111,155],{"class":109},[99,68113,62604],{"class":214},[99,68115,61033],{"class":109},[99,68117,1448],{"class":51281},[99,68119,55220],{"class":1949},[99,68121,155],{"class":109},[99,68123,64532],{"class":214},[99,68125,55228],{"class":1949},[99,68127,155],{"class":109},[99,68129,7639],{"class":214},[99,68131,64400],{"class":109},[99,68133,51592],{"class":51281},[99,68135,51288],{"class":109},[99,68137,68138,68140,68142],{"class":101,"line":16868},[99,68139,51757],{"class":109},[99,68141,51592],{"class":51281},[99,68143,51288],{"class":109},[99,68145,68146,68148,68150],{"class":101,"line":16873},[99,68147,52398],{"class":109},[99,68149,51592],{"class":51281},[99,68151,51288],{"class":109},[99,68153,68154,68156,68158],{"class":101,"line":16886},[99,68155,52125],{"class":109},[99,68157,51794],{"class":51281},[99,68159,51288],{"class":109},[99,68161,68162],{"class":101,"line":16891},[99,68163,68164],{"class":168},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[99,68166,68167],{"class":101,"line":16896},[99,68168,68169],{"class":168},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[99,68171,68172,68174,68176,68178,68180,68182,68184,68187],{"class":101,"line":16901},[99,68173,11208],{"class":105},[99,68175,61273],{"class":158},[99,68177,13551],{"class":105},[99,68179,54377],{"class":109},[99,68181,54380],{"class":1949},[99,68183,110],{"class":109},[99,68185,68186],{"class":214},"'.tab-nav ul'",[99,68188,116],{"class":109},[99,68190,68191],{"class":101,"line":16914},[99,68192,68193],{"class":168},"    \u002F\u002F 2.添加事件\n",[99,68195,68196,68198,68200,68202,68204,68206,68208,68210,68212],{"class":101,"line":16919},[99,68197,66935],{"class":109},[99,68199,57794],{"class":1949},[99,68201,110],{"class":109},[99,68203,57799],{"class":214},[99,68205,12422],{"class":109},[99,68207,54430],{"class":105},[99,68209,1644],{"class":109},[99,68211,184],{"class":5203},[99,68213,12429],{"class":109},[99,68215,68216,68218,68220],{"class":101,"line":32614},[99,68217,58225],{"class":109},[99,68219,66991],{"class":1949},[99,68221,66994],{"class":109},[99,68223,68224],{"class":101,"line":32620},[99,68225,68226],{"class":168},"      \u002F\u002Fe.targer是我们点击的对象\n",[99,68228,68229,68231,68233,68235,68238],{"class":101,"line":32626},[99,68230,54461],{"class":105},[99,68232,67015],{"class":109},[99,68234,54467],{"class":105},[99,68236,68237],{"class":214}," 'A'",[99,68239,12429],{"class":109},[99,68241,68242,68244,68246,68248,68251,68253,68255,68257,68259],{"class":101,"line":32632},[99,68243,51906],{"class":109},[99,68245,54380],{"class":1949},[99,68247,110],{"class":109},[99,68249,68250],{"class":214},"'.active'",[99,68252,56984],{"class":109},[99,68254,56987],{"class":1949},[99,68256,110],{"class":109},[99,68258,64695],{"class":214},[99,68260,116],{"class":109},[99,68262,68263,68266,68268,68270,68272],{"class":101,"line":32638},[99,68264,68265],{"class":109},"        e.target.classList.",[99,68267,5321],{"class":1949},[99,68269,110],{"class":109},[99,68271,64695],{"class":214},[99,68273,116],{"class":109},[99,68275,68276],{"class":101,"line":32649},[99,68277,2386],{"emptyLinePlaceholder":26},[99,68279,68280],{"class":101,"line":32655},[99,68281,68282],{"class":168},"        \u002F\u002F 下面大盒子模块\n",[99,68284,68285],{"class":101,"line":32675},[99,68286,68287],{"class":168},"        \u002F\u002F console.log(e.target.dataset.id)\n",[99,68289,68290,68292,68294,68296,68298],{"class":101,"line":32681},[99,68291,61251],{"class":105},[99,68293,3018],{"class":158},[99,68295,13551],{"class":105},[99,68297,45547],{"class":105},[99,68299,68300],{"class":109},"e.target.dataset.id\n",[99,68302,68303,68305,68307,68309,68311,68313,68315,68317,68319],{"class":101,"line":32692},[99,68304,51906],{"class":109},[99,68306,54380],{"class":1949},[99,68308,110],{"class":109},[99,68310,64743],{"class":214},[99,68312,56984],{"class":109},[99,68314,56987],{"class":1949},[99,68316,110],{"class":109},[99,68318,64695],{"class":214},[99,68320,116],{"class":109},[99,68322,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68347],{"class":101,"line":32698},[99,68324,51906],{"class":109},[99,68326,54380],{"class":1949},[99,68328,110],{"class":109},[99,68330,64769],{"class":214},[99,68332,551],{"class":109},[99,68334,45547],{"class":105},[99,68336,25107],{"class":158},[99,68338,57013],{"class":214},[99,68340,56984],{"class":109},[99,68342,5321],{"class":1949},[99,68344,110],{"class":109},[99,68346,64695],{"class":214},[99,68348,116],{"class":109},[99,68350,68351],{"class":101,"line":32704},[99,68352,2386],{"emptyLinePlaceholder":26},[99,68354,68355],{"class":101,"line":32710},[99,68356,52379],{"class":109},[99,68358,68359],{"class":101,"line":32716},[99,68360,33442],{"class":109},[99,68362,68363,68365,68367],{"class":101,"line":32722},[99,68364,52398],{"class":109},[99,68366,51794],{"class":51281},[99,68368,51288],{"class":109},[99,68370,68371,68373,68375],{"class":101,"line":32728},[99,68372,51766],{"class":109},[99,68374,51781],{"class":51281},[99,68376,51288],{"class":109},[99,68378,68379],{"class":101,"line":32734},[99,68380,2386],{"emptyLinePlaceholder":26},[99,68382,68383,68385,68387],{"class":101,"line":32754},[99,68384,51766],{"class":109},[99,68386,50616],{"class":51281},[99,68388,51288],{"class":109},[70,68390,68392],{"id":68391},"_333-页面加载事件","3.3.3 页面加载事件",[53,68394,68395],{},[56,68396,68397],{},"load",[14,68399,68400],{},[1448,68401],{"alt":21,"src":68402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68404,68405],{},"window代表整个窗口，比document还要大",[14,68407,68408],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68410,68411],{},"img.addEventListener('load', function () {",[14,68413,68414],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68416,52445],{},[53,68418,68419],{"start":22},[56,68420,68421],{},"DOMContentLoaded",[14,68423,68424],{},[1448,68425],{"alt":21,"src":68426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68428,68429],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[70,68431,68433],{"id":68432},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68435,68436],{},[1448,68437],{"alt":21,"src":68438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68440,68441],{},[1448,68442],{"alt":21,"src":68443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68445,68446],{},[1448,68447],{"alt":21,"src":68448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68450,68451],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68453,68454],{},"获得的是数字型数据，不带单位",[14,68456,68457],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68459,68460],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68462,68463],{},"它是通过document.documentElement来获取",[14,68465,68466],{},[1448,68467],{"alt":21,"src":68468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68470,68471],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[70,68473,68475],{"id":68474},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68477,68478],{},[1448,68479],{"alt":21,"src":68480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68482,68483],{},[1448,68484],{"alt":21,"src":68485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[70,68487,68489],{"id":68488},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68491,68492],{},[1448,68493],{"alt":21,"src":68494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68496,68497],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68499,68500],{},[1448,68501],{"alt":21,"src":68502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68504,68505],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68507,68508],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68510,68511],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68513,68514],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68516,68517],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68519,68520],{},[1448,68521],{"alt":21,"src":68522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68524,68525],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68527,68528],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68530,68531],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68533,68534],{},"e.pageX-box.getBoundingClientRect()",[70,68536,68538],{"id":68537},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68540,68541],{},[1448,68542],{"alt":21,"src":68543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68545,68546],{},"这个是相对于视口来说的，它是个方法，不是属性值",[70,68548,68550],{"id":68549},"_338-总结","3.3.8 总结",[14,68552,68553],{},[1448,68554],{"alt":21,"src":68555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68557,68558],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68560,68561],{},"修改盒子的宽高只能通过width和height来实现",[70,68563,68565],{"id":68564},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[90,68567,68569],{"className":50614,"code":68568,"language":50616,"meta":21,"style":21},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[96,68570,68571,68576,68581,68586,68591],{"__ignoreMap":21},[99,68572,68573],{"class":101,"line":102},[99,68574,68575],{"class":109},"\u002F* 页面滑动 *\u002F\n",[99,68577,68578],{"class":101,"line":22},[99,68579,68580],{"class":109},"html {\n",[99,68582,68583],{"class":101,"line":1165},[99,68584,68585],{"class":109},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[99,68587,68588],{"class":101,"line":1180},[99,68589,68590],{"class":109},"  scroll-behavior: smooth;\n",[99,68592,68593],{"class":101,"line":1186},[99,68594,1551],{"class":109},[14,68596,68597],{},"默认是auto",[70,68599,68601],{"id":68600},"_3310-日期对象","3.3.10 日期对象",[21985,68603,68605],{"id":68604},"_33101-实例化","3.3.10.1 实例化",[14,68607,68608],{},[1448,68609],{"alt":21,"src":68610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21985,68612,68614],{"id":68613},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68616,68617],{},[1448,68618],{"alt":21,"src":68619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68621,68622],{},"月份+1",[14,68624,68625],{},"老外认为第一天为0，星期天",[14,68627,68628],{},"方法使用的时候必须要跟括号",[14,68630,68631],{},"快速获得日期",[14,68633,68634],{},"\u002F\u002F 得到年月日",[14,68636,68637],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68639,68640],{},"\u002F\u002F 得到当地日期",[14,68642,68643],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68645,68646],{},"\u002F\u002F 得到当地时间",[14,68648,68649],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68651,68652],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68654,68655],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51794,68657,68658],{},"\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",[14,68660,68661],{},"学会去封装函数！",[21985,68663,68665],{"id":68664},"_33103-时间戳","3.3.10.3 时间戳",[14,68667,68668],{},[1448,68669],{"alt":21,"src":68670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68672,68673],{},[1448,68674],{"alt":21,"src":68675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68677,68678],{},"三种方法记住一个就可以",[70,68680,68682],{"id":68681},"_3311-节点操作","3.3.11 节点操作",[21985,68684,68686],{"id":68685},"_33111-dom节点","3.3.11.1 DOM节点",[14,68688,68689],{},[1448,68690],{"alt":21,"src":68691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68693,68694],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21985,68696,68698],{"id":68697},"_33112-查找节点","3.3.11.2 查找节点",[14,68700,68701],{},"前边的document.querySelector()是获取的元素",[14,68703,68704],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68706,68707],{},[1448,68708],{"alt":21,"src":68709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[53,68711,68712],{},[56,68713,68714],{},"父节点",[14,68716,68717],{},[1448,68718],{"alt":21,"src":68719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[53,68721,68722],{"start":22},[56,68723,68724],{},"子节点",[14,68726,68727],{},[1448,68728],{"alt":21,"src":68729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68731,68732],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68734,68735],{},"children获得的是伪数组，是亲儿子",[53,68737,68738],{"start":1165},[56,68739,68740],{},"兄弟节点",[14,68742,68743],{},[1448,68744],{"alt":21,"src":68745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21985,68747,68749],{"id":68748},"_33113-增加节点","3.3.11.3 增加节点",[14,68751,68752],{},[1448,68753],{"alt":21,"src":68754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68756,68757],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68759,68760],{},[1448,68761],{"alt":21,"src":68762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68764,68765],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68767,68768],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68770,68771],{},"例：",[51794,68773,68774],{},"\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",[14,68776,68777],{},[1448,68778],{"alt":21,"src":68779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68781,68782],{},"false只克隆标签，里边的内容不会克隆过来",[90,68784,68786],{"className":50614,"code":68785,"language":50616,"meta":21,"style":21},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[96,68787,68788],{"__ignoreMap":21},[99,68789,68790],{"class":101,"line":102},[99,68791,68785],{"class":109},[21985,68793,68795],{"id":68794},"_33114-删除节点","3.3.11.4 删除节点",[14,68797,68798],{},[1448,68799],{"alt":21,"src":68800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68802,68803],{},"父亲删儿子",[14,68805,68806],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[70,68808,68810],{"id":68809},"_3312-m端事件","3.3.12 M端事件",[14,68812,68813],{},"M端就是移动端",[14,68815,68816],{},[1448,68817],{"alt":21,"src":68818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[70,68820,68822],{"id":68821},"_3313-插件","3.3.13 插件",[14,68824,68825],{},"要熟悉官网！！！",[14,68827,68828],{},[348,68829,68830],{"href":68830,"rel":68831},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23853],[14,68833,68834],{},[348,68835,68836],{"href":68836,"rel":68837},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23853],[70,68839,68841],{"id":68840},"_3314-学生信息表","3.3.14 学生信息表",[53,68843,68844,68847,68850,68853,68856,68859,68862,68865],{},[56,68845,68846],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[56,68848,68849],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[56,68851,68852],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[56,68854,68855],{},"用好表单元素自带的属性，value,name等",[56,68857,68858],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[56,68860,68861],{},"不要忘记事件对象",[56,68863,68864],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[56,68866,68867],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68869,68870],{},"结构：",[90,68872,68874],{"className":50614,"code":68873,"language":50616,"meta":21,"style":21},"\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",[96,68875,68876,68886,68900,68904,68912,68926,68946,68967,68980,69004,69012,69016,69024,69037,69058,69086,69114,69119,69141,69161,69180,69188,69216,69238,69258,69278,69298,69318,69338,69346,69366,69374,69378,69391,69399,69407,69415,69428,69441,69454,69467,69480,69493,69506,69514,69522,69530,69535,69540,69545,69550,69555,69560,69565,69570,69575,69580,69585,69590,69595,69603,69611,69619,69623,69643,69662,69682,69702,69722,69742,69746,69751,69771,69776,69786,69791,69796,69816,69838,69843,69853,69857,69861,69866,69871,69900,69914,69929,69933,69937,69941,69946,69957,69970,69975,69980,69985,69990,69995,69999,70004,70009,70018,70023,70028,70040,70045,70052,70056,70061,70071,70076,70086,70091,70119,70140,70150,70170,70188,70205,70222,70239,70256,70260,70270,70275,70280,70285,70296,70300,70304,70308,70313,70318,70339,70351,70356,70361,70366,70380,70385,70392,70396,70400,70408,70412,70420,70424],{"__ignoreMap":21},[99,68877,68878,68880,68882,68884],{"class":101,"line":102},[99,68879,51278],{"class":109},[99,68881,51282],{"class":51281},[99,68883,51285],{"class":1949},[99,68885,51288],{"class":109},[99,68887,68888,68890,68892,68894,68896,68898],{"class":101,"line":22},[99,68889,1020],{"class":109},[99,68891,50616],{"class":51281},[99,68893,51297],{"class":1949},[99,68895,155],{"class":109},[99,68897,51302],{"class":214},[99,68899,51288],{"class":109},[99,68901,68902],{"class":101,"line":1165},[99,68903,2386],{"emptyLinePlaceholder":26},[99,68905,68906,68908,68910],{"class":101,"line":1180},[99,68907,1020],{"class":109},[99,68909,51315],{"class":51281},[99,68911,51288],{"class":109},[99,68913,68914,68916,68918,68920,68922,68924],{"class":101,"line":1186},[99,68915,52125],{"class":109},[99,68917,51325],{"class":51281},[99,68919,51328],{"class":1949},[99,68921,155],{"class":109},[99,68923,51333],{"class":214},[99,68925,59108],{"class":109},[99,68927,68928,68930,68932,68934,68936,68938,68940,68942,68944],{"class":101,"line":1200},[99,68929,52125],{"class":109},[99,68931,51325],{"class":51281},[99,68933,14907],{"class":1949},[99,68935,155],{"class":109},[99,68937,51372],{"class":214},[99,68939,51352],{"class":1949},[99,68941,155],{"class":109},[99,68943,51379],{"class":214},[99,68945,59108],{"class":109},[99,68947,68948,68950,68952,68954,68956,68958,68960,68962,68965],{"class":101,"line":1206},[99,68949,52125],{"class":109},[99,68951,51325],{"class":51281},[99,68953,51344],{"class":1949},[99,68955,155],{"class":109},[99,68957,51349],{"class":214},[99,68959,51352],{"class":1949},[99,68961,155],{"class":109},[99,68963,68964],{"class":214},"\"ie=edge\"",[99,68966,59108],{"class":109},[99,68968,68969,68971,68973,68976,68978],{"class":101,"line":1297},[99,68970,52125],{"class":109},[99,68972,51388],{"class":51281},[99,68974,68975],{"class":109},">学生信息管理\u003C\u002F",[99,68977,51388],{"class":51281},[99,68979,51288],{"class":109},[99,68981,68982,68984,68987,68990,68992,68995,68997,68999,69002],{"class":101,"line":1303},[99,68983,52125],{"class":109},[99,68985,68986],{"class":51281},"link",[99,68988,68989],{"class":1949}," rel",[99,68991,155],{"class":109},[99,68993,68994],{"class":214},"\"stylesheet\"",[99,68996,61038],{"class":1949},[99,68998,155],{"class":109},[99,69000,69001],{"class":214},"\"css\u002Findex.css\"",[99,69003,59108],{"class":109},[99,69005,69006,69008,69010],{"class":101,"line":1315},[99,69007,51766],{"class":109},[99,69009,51315],{"class":51281},[99,69011,51288],{"class":109},[99,69013,69014],{"class":101,"line":1598},[99,69015,2386],{"emptyLinePlaceholder":26},[99,69017,69018,69020,69022],{"class":101,"line":1603},[99,69019,1020],{"class":109},[99,69021,51781],{"class":51281},[99,69023,51288],{"class":109},[99,69025,69026,69028,69030,69033,69035],{"class":101,"line":1609},[99,69027,52125],{"class":109},[99,69029,10],{"class":51281},[99,69031,69032],{"class":109},">新增学员\u003C\u002F",[99,69034,10],{"class":51281},[99,69036,51288],{"class":109},[99,69038,69039,69041,69043,69045,69047,69049,69052,69054,69056],{"class":101,"line":1614},[99,69040,52125],{"class":109},[99,69042,66606],{"class":51281},[99,69044,53467],{"class":1949},[99,69046,155],{"class":109},[99,69048,62645],{"class":214},[99,69050,69051],{"class":1949}," autocomplete",[99,69053,155],{"class":109},[99,69055,31757],{"class":214},[99,69057,51288],{"class":109},[99,69059,69060,69063,69065,69067,69069,69071,69073,69075,69078,69080,69082,69084],{"class":101,"line":1628},[99,69061,69062],{"class":109},"    姓名：\u003C",[99,69064,53802],{"class":51281},[99,69066,53805],{"class":1949},[99,69068,155],{"class":109},[99,69070,62680],{"class":214},[99,69072,53467],{"class":1949},[99,69074,155],{"class":109},[99,69076,69077],{"class":214},"\"uname\"",[99,69079,14907],{"class":1949},[99,69081,155],{"class":109},[99,69083,69077],{"class":214},[99,69085,59108],{"class":109},[99,69087,69088,69091,69093,69095,69097,69099,69101,69103,69106,69108,69110,69112],{"class":101,"line":1633},[99,69089,69090],{"class":109},"    年龄：\u003C",[99,69092,53802],{"class":51281},[99,69094,53805],{"class":1949},[99,69096,155],{"class":109},[99,69098,62680],{"class":214},[99,69100,53467],{"class":1949},[99,69102,155],{"class":109},[99,69104,69105],{"class":214},"\"age\"",[99,69107,14907],{"class":1949},[99,69109,155],{"class":109},[99,69111,69105],{"class":214},[99,69113,59108],{"class":109},[99,69115,69116],{"class":101,"line":1639},[99,69117,69118],{"class":109},"    性别:\n",[99,69120,69121,69123,69126,69128,69130,69133,69135,69137,69139],{"class":101,"line":1660},[99,69122,51322],{"class":109},[99,69124,69125],{"class":51281},"select",[99,69127,14907],{"class":1949},[99,69129,155],{"class":109},[99,69131,69132],{"class":214},"\"gender\"",[99,69134,53467],{"class":1949},[99,69136,155],{"class":109},[99,69138,69132],{"class":214},[99,69140,51288],{"class":109},[99,69142,69143,69145,69148,69150,69152,69154,69157,69159],{"class":101,"line":1665},[99,69144,55215],{"class":109},[99,69146,69147],{"class":51281},"option",[99,69149,66632],{"class":1949},[99,69151,155],{"class":109},[99,69153,9948],{"class":214},[99,69155,69156],{"class":109},">男\u003C\u002F",[99,69158,69147],{"class":51281},[99,69160,51288],{"class":109},[99,69162,69163,69165,69167,69169,69171,69173,69176,69178],{"class":101,"line":1679},[99,69164,55215],{"class":109},[99,69166,69147],{"class":51281},[99,69168,66632],{"class":1949},[99,69170,155],{"class":109},[99,69172,10017],{"class":214},[99,69174,69175],{"class":109},">女\u003C\u002F",[99,69177,69147],{"class":51281},[99,69179,51288],{"class":109},[99,69181,69182,69184,69186],{"class":101,"line":1684},[99,69183,51757],{"class":109},[99,69185,69125],{"class":51281},[99,69187,51288],{"class":109},[99,69189,69190,69193,69195,69197,69199,69201,69203,69205,69208,69210,69212,69214],{"class":101,"line":1713},[99,69191,69192],{"class":109},"    薪资：\u003C",[99,69194,53802],{"class":51281},[99,69196,53805],{"class":1949},[99,69198,155],{"class":109},[99,69200,62680],{"class":214},[99,69202,53467],{"class":1949},[99,69204,155],{"class":109},[99,69206,69207],{"class":214},"\"salary\"",[99,69209,14907],{"class":1949},[99,69211,155],{"class":109},[99,69213,69207],{"class":214},[99,69215,59108],{"class":109},[99,69217,69218,69221,69223,69225,69227,69230,69232,69234,69236],{"class":101,"line":1718},[99,69219,69220],{"class":109},"    就业城市：\u003C",[99,69222,69125],{"class":51281},[99,69224,14907],{"class":1949},[99,69226,155],{"class":109},[99,69228,69229],{"class":214},"\"city\"",[99,69231,53467],{"class":1949},[99,69233,155],{"class":109},[99,69235,69229],{"class":214},[99,69237,51288],{"class":109},[99,69239,69240,69242,69244,69246,69248,69251,69254,69256],{"class":101,"line":1735},[99,69241,55215],{"class":109},[99,69243,69147],{"class":51281},[99,69245,66632],{"class":1949},[99,69247,155],{"class":109},[99,69249,69250],{"class":214},"\"北京\"",[99,69252,69253],{"class":109},">北京\u003C\u002F",[99,69255,69147],{"class":51281},[99,69257,51288],{"class":109},[99,69259,69260,69262,69264,69266,69268,69271,69274,69276],{"class":101,"line":1740},[99,69261,55215],{"class":109},[99,69263,69147],{"class":51281},[99,69265,66632],{"class":1949},[99,69267,155],{"class":109},[99,69269,69270],{"class":214},"\"上海\"",[99,69272,69273],{"class":109},">上海\u003C\u002F",[99,69275,69147],{"class":51281},[99,69277,51288],{"class":109},[99,69279,69280,69282,69284,69286,69288,69291,69294,69296],{"class":101,"line":1745},[99,69281,55215],{"class":109},[99,69283,69147],{"class":51281},[99,69285,66632],{"class":1949},[99,69287,155],{"class":109},[99,69289,69290],{"class":214},"\"广州\"",[99,69292,69293],{"class":109},">广州\u003C\u002F",[99,69295,69147],{"class":51281},[99,69297,51288],{"class":109},[99,69299,69300,69302,69304,69306,69308,69311,69314,69316],{"class":101,"line":1750},[99,69301,55215],{"class":109},[99,69303,69147],{"class":51281},[99,69305,66632],{"class":1949},[99,69307,155],{"class":109},[99,69309,69310],{"class":214},"\"深圳\"",[99,69312,69313],{"class":109},">深圳\u003C\u002F",[99,69315,69147],{"class":51281},[99,69317,51288],{"class":109},[99,69319,69320,69322,69324,69326,69328,69331,69334,69336],{"class":101,"line":1764},[99,69321,55215],{"class":109},[99,69323,69147],{"class":51281},[99,69325,66632],{"class":1949},[99,69327,155],{"class":109},[99,69329,69330],{"class":214},"\"曹县\"",[99,69332,69333],{"class":109},">曹县\u003C\u002F",[99,69335,69147],{"class":51281},[99,69337,51288],{"class":109},[99,69339,69340,69342,69344],{"class":101,"line":1769},[99,69341,51757],{"class":109},[99,69343,69125],{"class":51281},[99,69345,51288],{"class":109},[99,69347,69348,69350,69352,69354,69356,69359,69362,69364],{"class":101,"line":2563},[99,69349,51322],{"class":109},[99,69351,53868],{"class":51281},[99,69353,53467],{"class":1949},[99,69355,155],{"class":109},[99,69357,69358],{"class":214},"\"add\"",[99,69360,69361],{"class":109},">录入\u003C\u002F",[99,69363,53868],{"class":51281},[99,69365,51288],{"class":109},[99,69367,69368,69370,69372],{"class":101,"line":2577},[99,69369,52398],{"class":109},[99,69371,66606],{"class":51281},[99,69373,51288],{"class":109},[99,69375,69376],{"class":101,"line":2585},[99,69377,2386],{"emptyLinePlaceholder":26},[99,69379,69380,69382,69384,69387,69389],{"class":101,"line":2590},[99,69381,52125],{"class":109},[99,69383,10],{"class":51281},[99,69385,69386],{"class":109},">就业榜\u003C\u002F",[99,69388,10],{"class":51281},[99,69390,51288],{"class":109},[99,69392,69393,69395,69397],{"class":101,"line":2596},[99,69394,52125],{"class":109},[99,69396,247],{"class":51281},[99,69398,51288],{"class":109},[99,69400,69401,69403,69405],{"class":101,"line":2602},[99,69402,51322],{"class":109},[99,69404,250],{"class":51281},[99,69406,51288],{"class":109},[99,69408,69409,69411,69413],{"class":101,"line":2607},[99,69410,55215],{"class":109},[99,69412,253],{"class":51281},[99,69414,51288],{"class":109},[99,69416,69417,69419,69421,69424,69426],{"class":101,"line":7935},[99,69418,55283],{"class":109},[99,69420,256],{"class":51281},[99,69422,69423],{"class":109},">序号\u003C\u002F",[99,69425,256],{"class":51281},[99,69427,51288],{"class":109},[99,69429,69430,69432,69434,69437,69439],{"class":101,"line":7959},[99,69431,55283],{"class":109},[99,69433,256],{"class":51281},[99,69435,69436],{"class":109},">姓名\u003C\u002F",[99,69438,256],{"class":51281},[99,69440,51288],{"class":109},[99,69442,69443,69445,69447,69450,69452],{"class":101,"line":7964},[99,69444,55283],{"class":109},[99,69446,256],{"class":51281},[99,69448,69449],{"class":109},">年龄\u003C\u002F",[99,69451,256],{"class":51281},[99,69453,51288],{"class":109},[99,69455,69456,69458,69460,69463,69465],{"class":101,"line":7970},[99,69457,55283],{"class":109},[99,69459,256],{"class":51281},[99,69461,69462],{"class":109},">性别\u003C\u002F",[99,69464,256],{"class":51281},[99,69466,51288],{"class":109},[99,69468,69469,69471,69473,69476,69478],{"class":101,"line":7997},[99,69470,55283],{"class":109},[99,69472,256],{"class":51281},[99,69474,69475],{"class":109},">薪资\u003C\u002F",[99,69477,256],{"class":51281},[99,69479,51288],{"class":109},[99,69481,69482,69484,69486,69489,69491],{"class":101,"line":8002},[99,69483,55283],{"class":109},[99,69485,256],{"class":51281},[99,69487,69488],{"class":109},">就业城市\u003C\u002F",[99,69490,256],{"class":51281},[99,69492,51288],{"class":109},[99,69494,69495,69497,69499,69502,69504],{"class":101,"line":8008},[99,69496,55283],{"class":109},[99,69498,256],{"class":51281},[99,69500,69501],{"class":109},">操作\u003C\u002F",[99,69503,256],{"class":51281},[99,69505,51288],{"class":109},[99,69507,69508,69510,69512],{"class":101,"line":8020},[99,69509,55388],{"class":109},[99,69511,253],{"class":51281},[99,69513,51288],{"class":109},[99,69515,69516,69518,69520],{"class":101,"line":8032},[99,69517,51757],{"class":109},[99,69519,250],{"class":51281},[99,69521,51288],{"class":109},[99,69523,69524,69526,69528],{"class":101,"line":8044},[99,69525,51322],{"class":109},[99,69527,294],{"class":51281},[99,69529,51288],{"class":109},[99,69531,69532],{"class":101,"line":9703},[99,69533,69534],{"class":168},"      \u003C!-- \n",[99,69536,69537],{"class":101,"line":9728},[99,69538,69539],{"class":168},"        \u003Ctr>\n",[99,69541,69542],{"class":101,"line":9751},[99,69543,69544],{"class":168},"          \u003Ctd>1001\u003C\u002Ftd>\n",[99,69546,69547],{"class":101,"line":9775},[99,69548,69549],{"class":168},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[99,69551,69552],{"class":101,"line":9780},[99,69553,69554],{"class":168},"          \u003Ctd>19\u003C\u002Ftd>\n",[99,69556,69557],{"class":101,"line":9785},[99,69558,69559],{"class":168},"          \u003Ctd>男\u003C\u002Ftd>\n",[99,69561,69562],{"class":101,"line":9790},[99,69563,69564],{"class":168},"          \u003Ctd>15000\u003C\u002Ftd>\n",[99,69566,69567],{"class":101,"line":9799},[99,69568,69569],{"class":168},"          \u003Ctd>上海\u003C\u002Ftd>\n",[99,69571,69572],{"class":101,"line":9804},[99,69573,69574],{"class":168},"          \u003Ctd>\n",[99,69576,69577],{"class":101,"line":9810},[99,69578,69579],{"class":168},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[99,69581,69582],{"class":101,"line":9831},[99,69583,69584],{"class":168},"          \u003C\u002Ftd>\n",[99,69586,69587],{"class":101,"line":9837},[99,69588,69589],{"class":168},"        \u003C\u002Ftr> \n",[99,69591,69592],{"class":101,"line":9851},[99,69593,69594],{"class":168},"        -->\n",[99,69596,69597,69599,69601],{"class":101,"line":9857},[99,69598,51757],{"class":109},[99,69600,294],{"class":51281},[99,69602,51288],{"class":109},[99,69604,69605,69607,69609],{"class":101,"line":9884},[99,69606,52398],{"class":109},[99,69608,247],{"class":51281},[99,69610,51288],{"class":109},[99,69612,69613,69615,69617],{"class":101,"line":9893},[99,69614,52125],{"class":109},[99,69616,51794],{"class":51281},[99,69618,51288],{"class":109},[99,69620,69621],{"class":101,"line":9899},[99,69622,59939],{"class":168},[99,69624,69625,69627,69630,69632,69634,69636,69638,69641],{"class":101,"line":9907},[99,69626,11208],{"class":105},[99,69628,69629],{"class":158}," uname",[99,69631,13551],{"class":105},[99,69633,54377],{"class":109},[99,69635,54380],{"class":1949},[99,69637,110],{"class":109},[99,69639,69640],{"class":214},"'.uname'",[99,69642,116],{"class":109},[99,69644,69645,69647,69649,69651,69653,69655,69657,69660],{"class":101,"line":9912},[99,69646,11208],{"class":105},[99,69648,15676],{"class":158},[99,69650,13551],{"class":105},[99,69652,54377],{"class":109},[99,69654,54380],{"class":1949},[99,69656,110],{"class":109},[99,69658,69659],{"class":214},"'.age'",[99,69661,116],{"class":109},[99,69663,69664,69666,69669,69671,69673,69675,69677,69680],{"class":101,"line":16591},[99,69665,11208],{"class":105},[99,69667,69668],{"class":158}," gender",[99,69670,13551],{"class":105},[99,69672,54377],{"class":109},[99,69674,54380],{"class":1949},[99,69676,110],{"class":109},[99,69678,69679],{"class":214},"'.gender'",[99,69681,116],{"class":109},[99,69683,69684,69686,69689,69691,69693,69695,69697,69700],{"class":101,"line":16597},[99,69685,11208],{"class":105},[99,69687,69688],{"class":158}," salary",[99,69690,13551],{"class":105},[99,69692,54377],{"class":109},[99,69694,54380],{"class":1949},[99,69696,110],{"class":109},[99,69698,69699],{"class":214},"'.salary'",[99,69701,116],{"class":109},[99,69703,69704,69706,69709,69711,69713,69715,69717,69720],{"class":101,"line":16620},[99,69705,11208],{"class":105},[99,69707,69708],{"class":158}," city",[99,69710,13551],{"class":105},[99,69712,54377],{"class":109},[99,69714,54380],{"class":1949},[99,69716,110],{"class":109},[99,69718,69719],{"class":214},"'.city'",[99,69721,116],{"class":109},[99,69723,69724,69726,69729,69731,69733,69735,69737,69740],{"class":101,"line":16626},[99,69725,11208],{"class":105},[99,69727,69728],{"class":158}," tbody",[99,69730,13551],{"class":105},[99,69732,54377],{"class":109},[99,69734,54380],{"class":1949},[99,69736,110],{"class":109},[99,69738,69739],{"class":214},"'tbody'",[99,69741,116],{"class":109},[99,69743,69744],{"class":101,"line":16649},[99,69745,2386],{"emptyLinePlaceholder":26},[99,69747,69748],{"class":101,"line":16663},[99,69749,69750],{"class":168},"    \u002F\u002F 获取所有带有name属性的元素\n",[99,69752,69753,69755,69758,69760,69762,69764,69766,69769],{"class":101,"line":16683},[99,69754,11208],{"class":105},[99,69756,69757],{"class":158}," items",[99,69759,13551],{"class":105},[99,69761,54377],{"class":109},[99,69763,55662],{"class":1949},[99,69765,110],{"class":109},[99,69767,69768],{"class":214},"'[name]'",[99,69770,116],{"class":109},[99,69772,69773],{"class":101,"line":16689},[99,69774,69775],{"class":168},"    \u002F\u002F 声明一个空的数组\n",[99,69777,69778,69780,69782,69784],{"class":101,"line":16700},[99,69779,11208],{"class":105},[99,69781,57676],{"class":158},[99,69783,13551],{"class":105},[99,69785,51819],{"class":109},[99,69787,69788],{"class":101,"line":16723},[99,69789,69790],{"class":168},"    \u002F\u002F 1.录入模块\n",[99,69792,69793],{"class":101,"line":16745},[99,69794,69795],{"class":168},"    \u002F\u002F 1.1这是一个表单提交事件\n",[99,69797,69798,69800,69803,69805,69807,69809,69811,69814],{"class":101,"line":16750},[99,69799,11208],{"class":105},[99,69801,69802],{"class":158}," info",[99,69804,13551],{"class":105},[99,69806,54377],{"class":109},[99,69808,54380],{"class":1949},[99,69810,110],{"class":109},[99,69812,69813],{"class":214},"'.info'",[99,69815,116],{"class":109},[99,69817,69818,69821,69823,69825,69828,69830,69832,69834,69836],{"class":101,"line":16756},[99,69819,69820],{"class":109},"    info.",[99,69822,57794],{"class":1949},[99,69824,110],{"class":109},[99,69826,69827],{"class":214},"'submit'",[99,69829,12422],{"class":109},[99,69831,54430],{"class":105},[99,69833,1644],{"class":109},[99,69835,184],{"class":5203},[99,69837,12429],{"class":109},[99,69839,69840],{"class":101,"line":16770},[99,69841,69842],{"class":168},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[99,69844,69845,69848,69851],{"class":101,"line":16783},[99,69846,69847],{"class":109},"      e.",[99,69849,69850],{"class":1949},"preventDefault",[99,69852,1962],{"class":109},[99,69854,69855],{"class":101,"line":16788},[99,69856,59993],{"class":168},[99,69858,69859],{"class":101,"line":16802},[99,69860,2386],{"emptyLinePlaceholder":26},[99,69862,69863],{"class":101,"line":16807},[99,69864,69865],{"class":168},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[99,69867,69868],{"class":101,"line":16813},[99,69869,69870],{"class":168},"      \u002F\u002F 先遍历循环\n",[99,69872,69873,69875,69877,69879,69881,69883,69885,69887,69889,69892,69894,69896,69898],{"class":101,"line":16818},[99,69874,52265],{"class":105},[99,69876,1644],{"class":109},[99,69878,51828],{"class":105},[99,69880,9425],{"class":109},[99,69882,155],{"class":105},[99,69884,4079],{"class":158},[99,69886,9432],{"class":109},[99,69888,1020],{"class":105},[99,69890,69891],{"class":109}," items.",[99,69893,51949],{"class":158},[99,69895,3200],{"class":109},[99,69897,2278],{"class":105},[99,69899,12429],{"class":109},[99,69901,69902,69904,69907,69909,69912],{"class":101,"line":16832},[99,69903,2483],{"class":105},[99,69905,69906],{"class":109}," (items[i].value ",[99,69908,54467],{"class":105},[99,69910,69911],{"class":214}," ''",[99,69913,12429],{"class":109},[99,69915,69916,69919,69922,69924,69927],{"class":101,"line":16837},[99,69917,69918],{"class":105},"          return",[99,69920,69921],{"class":1949}," alert",[99,69923,110],{"class":109},[99,69925,69926],{"class":214},"'输入内容不能为空'",[99,69928,116],{"class":109},[99,69930,69931],{"class":101,"line":16842},[99,69932,2515],{"class":109},[99,69934,69935],{"class":101,"line":16856},[99,69936,52379],{"class":109},[99,69938,69939],{"class":101,"line":16868},[99,69940,2386],{"emptyLinePlaceholder":26},[99,69942,69943],{"class":101,"line":16873},[99,69944,69945],{"class":168},"      \u002F\u002F 创建新的对象\n",[99,69947,69948,69950,69953,69955],{"class":101,"line":16886},[99,69949,58209],{"class":105},[99,69951,69952],{"class":158}," obj",[99,69954,13551],{"class":105},[99,69956,15559],{"class":109},[99,69958,69959,69962,69964,69966,69968],{"class":101,"line":16891},[99,69960,69961],{"class":109},"        stuID: arr.",[99,69963,51949],{"class":158},[99,69965,45547],{"class":105},[99,69967,25107],{"class":158},[99,69969,31447],{"class":109},[99,69971,69972],{"class":101,"line":16896},[99,69973,69974],{"class":109},"        uname: uname.value,\n",[99,69976,69977],{"class":101,"line":16901},[99,69978,69979],{"class":109},"        age: age.value,\n",[99,69981,69982],{"class":101,"line":16914},[99,69983,69984],{"class":109},"        gender: gender.value,\n",[99,69986,69987],{"class":101,"line":16919},[99,69988,69989],{"class":109},"        salary: salary.value,\n",[99,69991,69992],{"class":101,"line":32614},[99,69993,69994],{"class":109},"        city: city.value\n",[99,69996,69997],{"class":101,"line":32620},[99,69998,52379],{"class":109},[99,70000,70001],{"class":101,"line":32626},[99,70002,70003],{"class":168},"      \u002F\u002F console.log(obj);\n",[99,70005,70006],{"class":101,"line":32632},[99,70007,70008],{"class":168},"      \u002F\u002F 追加到数组里面\n",[99,70010,70011,70013,70015],{"class":101,"line":32638},[99,70012,57988],{"class":109},[99,70014,51865],{"class":1949},[99,70016,70017],{"class":109},"(obj)\n",[99,70019,70020],{"class":101,"line":32649},[99,70021,70022],{"class":168},"      \u002F\u002F console.log(arr);\n",[99,70024,70025],{"class":101,"line":32655},[99,70026,70027],{"class":168},"      \u002F\u002F 清空表单  reset重置表单\n",[99,70029,70030,70033,70035,70038],{"class":101,"line":32675},[99,70031,70032],{"class":158},"      this",[99,70034,668],{"class":109},[99,70036,70037],{"class":1949},"reset",[99,70039,1962],{"class":109},[99,70041,70042],{"class":101,"line":32681},[99,70043,70044],{"class":168},"      \u002F\u002F 调用渲染函数\n",[99,70046,70047,70050],{"class":101,"line":32692},[99,70048,70049],{"class":1949},"      render",[99,70051,1962],{"class":109},[99,70053,70054],{"class":101,"line":32698},[99,70055,33442],{"class":109},[99,70057,70058],{"class":101,"line":32704},[99,70059,70060],{"class":168},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[99,70062,70063,70066,70069],{"class":101,"line":32710},[99,70064,70065],{"class":105},"    function",[99,70067,70068],{"class":1949}," render",[99,70070,10840],{"class":109},[99,70072,70073],{"class":101,"line":32716},[99,70074,70075],{"class":168},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[99,70077,70078,70081,70083],{"class":101,"line":32722},[99,70079,70080],{"class":109},"      tbody.innerHTML ",[99,70082,155],{"class":105},[99,70084,70085],{"class":214}," ''\n",[99,70087,70088],{"class":101,"line":32728},[99,70089,70090],{"class":168},"      \u002F\u002F 遍历数组\n",[99,70092,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111,70113,70115,70117],{"class":101,"line":32734},[99,70094,52265],{"class":105},[99,70096,1644],{"class":109},[99,70098,51828],{"class":105},[99,70100,9425],{"class":109},[99,70102,155],{"class":105},[99,70104,4079],{"class":158},[99,70106,9432],{"class":109},[99,70108,1020],{"class":105},[99,70110,51946],{"class":109},[99,70112,51949],{"class":158},[99,70114,3200],{"class":109},[99,70116,2278],{"class":105},[99,70118,12429],{"class":109},[99,70120,70121,70123,70126,70128,70130,70133,70135,70138],{"class":101,"line":32754},[99,70122,61251],{"class":105},[99,70124,70125],{"class":158}," tr",[99,70127,13551],{"class":105},[99,70129,54377],{"class":109},[99,70131,70132],{"class":1949},"createElement",[99,70134,110],{"class":109},[99,70136,70137],{"class":214},"'tr'",[99,70139,116],{"class":109},[99,70141,70142,70145,70147],{"class":101,"line":32760},[99,70143,70144],{"class":109},"        tr.innerHTML ",[99,70146,155],{"class":105},[99,70148,70149],{"class":214}," `\n",[99,70151,70152,70155,70157,70159,70161,70164,70167],{"class":101,"line":32776},[99,70153,70154],{"class":214},"        \u003Ctd>${",[99,70156,3866],{"class":109},[99,70158,1000],{"class":214},[99,70160,551],{"class":109},[99,70162,70163],{"class":214},"].",[99,70165,70166],{"class":109},"stuID",[99,70168,70169],{"class":214},"}\u003C\u002Ftd>\n",[99,70171,70172,70175,70177,70179,70181,70183,70186],{"class":101,"line":32782},[99,70173,70174],{"class":214},"          \u003Ctd>${",[99,70176,3866],{"class":109},[99,70178,1000],{"class":214},[99,70180,551],{"class":109},[99,70182,70163],{"class":214},[99,70184,70185],{"class":109},"uname",[99,70187,70169],{"class":214},[99,70189,70190,70192,70194,70196,70198,70200,70203],{"class":101,"line":32796},[99,70191,70174],{"class":214},[99,70193,3866],{"class":109},[99,70195,1000],{"class":214},[99,70197,551],{"class":109},[99,70199,70163],{"class":214},[99,70201,70202],{"class":109},"age",[99,70204,70169],{"class":214},[99,70206,70207,70209,70211,70213,70215,70217,70220],{"class":101,"line":32802},[99,70208,70174],{"class":214},[99,70210,3866],{"class":109},[99,70212,1000],{"class":214},[99,70214,551],{"class":109},[99,70216,70163],{"class":214},[99,70218,70219],{"class":109},"gender",[99,70221,70169],{"class":214},[99,70223,70224,70226,70228,70230,70232,70234,70237],{"class":101,"line":32817},[99,70225,70174],{"class":214},[99,70227,3866],{"class":109},[99,70229,1000],{"class":214},[99,70231,551],{"class":109},[99,70233,70163],{"class":214},[99,70235,70236],{"class":109},"salary",[99,70238,70169],{"class":214},[99,70240,70241,70243,70245,70247,70249,70251,70254],{"class":101,"line":32823},[99,70242,70174],{"class":214},[99,70244,3866],{"class":109},[99,70246,1000],{"class":214},[99,70248,551],{"class":109},[99,70250,70163],{"class":214},[99,70252,70253],{"class":109},"city",[99,70255,70169],{"class":214},[99,70257,70258],{"class":101,"line":32832},[99,70259,69574],{"class":214},[99,70261,70262,70265,70267],{"class":101,"line":32838},[99,70263,70264],{"class":214},"            \u003Ca href=\"javascript:\" data-id=${",[99,70266,551],{"class":109},[99,70268,70269],{"class":214},"}>删除\u003C\u002Fa>\n",[99,70271,70272],{"class":101,"line":32847},[99,70273,70274],{"class":214},"          \u003C\u002Ftd> \n",[99,70276,70277],{"class":101,"line":32853},[99,70278,70279],{"class":214},"          `\n",[99,70281,70282],{"class":101,"line":32859},[99,70283,70284],{"class":168},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[99,70286,70287,70290,70293],{"class":101,"line":32868},[99,70288,70289],{"class":109},"        tbody.",[99,70291,70292],{"class":1949},"appendChild",[99,70294,70295],{"class":109},"(tr)\n",[99,70297,70298],{"class":101,"line":32874},[99,70299,52379],{"class":109},[99,70301,70302],{"class":101,"line":32885},[99,70303,2173],{"class":109},[99,70305,70306],{"class":101,"line":32891},[99,70307,2386],{"emptyLinePlaceholder":26},[99,70309,70310],{"class":101,"line":32910},[99,70311,70312],{"class":168},"    \u002F\u002F 3.删除委托\n",[99,70314,70315],{"class":101,"line":32916},[99,70316,70317],{"class":168},"    \u002F\u002F 3.1 事件委托 tbody\n",[99,70319,70320,70323,70325,70327,70329,70331,70333,70335,70337],{"class":101,"line":32927},[99,70321,70322],{"class":109},"    tbody.",[99,70324,57794],{"class":1949},[99,70326,110],{"class":109},[99,70328,57799],{"class":214},[99,70330,12422],{"class":109},[99,70332,54430],{"class":105},[99,70334,1644],{"class":109},[99,70336,184],{"class":5203},[99,70338,12429],{"class":109},[99,70340,70341,70343,70345,70347,70349],{"class":101,"line":32933},[99,70342,54461],{"class":105},[99,70344,67015],{"class":109},[99,70346,54467],{"class":105},[99,70348,68237],{"class":214},[99,70350,12429],{"class":109},[99,70352,70353],{"class":101,"line":32953},[99,70354,70355],{"class":168},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[99,70357,70358],{"class":101,"line":32969},[99,70359,70360],{"class":168},"        \u002F\u002F console.log(e.target.dataset.id);\n",[99,70362,70363],{"class":101,"line":32975},[99,70364,70365],{"class":168},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[99,70367,70368,70371,70373,70376,70378],{"class":101,"line":32989},[99,70369,70370],{"class":109},"        arr.",[99,70372,57991],{"class":1949},[99,70374,70375],{"class":109},"(e.target.dataset.id, ",[99,70377,327],{"class":158},[99,70379,116],{"class":109},[99,70381,70382],{"class":101,"line":32995},[99,70383,70384],{"class":168},"        \u002F\u002F 重新渲染一次\n",[99,70386,70387,70390],{"class":101,"line":33001},[99,70388,70389],{"class":1949},"        render",[99,70391,1962],{"class":109},[99,70393,70394],{"class":101,"line":33012},[99,70395,52379],{"class":109},[99,70397,70398],{"class":101,"line":33018},[99,70399,33442],{"class":109},[99,70401,70402,70404,70406],{"class":101,"line":33024},[99,70403,52398],{"class":109},[99,70405,51794],{"class":51281},[99,70407,51288],{"class":109},[99,70409,70410],{"class":101,"line":33034},[99,70411,2386],{"emptyLinePlaceholder":26},[99,70413,70414,70416,70418],{"class":101,"line":33040},[99,70415,51766],{"class":109},[99,70417,51781],{"class":51281},[99,70419,51288],{"class":109},[99,70421,70422],{"class":101,"line":33051},[99,70423,2386],{"emptyLinePlaceholder":26},[99,70425,70426,70428,70430],{"class":101,"line":33057},[99,70427,51766],{"class":109},[99,70429,50616],{"class":51281},[99,70431,51288],{"class":109},[14,70433,70434],{},"样式：",[90,70436,70440],{"className":70437,"code":70438,"language":70439,"meta":21,"style":21},"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",[96,70441,70442,70447,70457,70466,70470,70474,70479,70489,70494,70498,70503,70513,70518,70527,70531,70535,70540,70545,70555,70565,70570,70574,70579,70588,70598,70603,70613,70623,70627,70632,70640,70644,70649,70654,70659,70667,70676,70680,70685,70694,70698,70703,70712,70716,70721,70730,70739,70747,70751,70756,70765,70775,70784,70794,70800,70809,70819,70829,70833,70838,70847,70855,70865,70873,70882,70891,70901,70909,70913,70918,70927],{"__ignoreMap":21},[99,70443,70444],{"class":101,"line":102},[99,70445,70446],{"class":109},"* {\n",[99,70448,70449,70452,70454],{"class":101,"line":22},[99,70450,70451],{"class":51281},"  margin",[99,70453,51418],{"class":109},[99,70455,70456],{"class":214},"0;\n",[99,70458,70459,70462,70464],{"class":101,"line":1165},[99,70460,70461],{"class":214},"  padding",[99,70463,51418],{"class":109},[99,70465,70456],{"class":214},[99,70467,70468],{"class":101,"line":1180},[99,70469,1551],{"class":109},[99,70471,70472],{"class":101,"line":1186},[99,70473,2386],{"emptyLinePlaceholder":26},[99,70475,70476],{"class":101,"line":1200},[99,70477,70478],{"class":214},"a {\n",[99,70480,70481,70484,70486],{"class":101,"line":1206},[99,70482,70483],{"class":51281},"  text-decoration",[99,70485,51418],{"class":109},[99,70487,70488],{"class":214},"none;\n",[99,70490,70491],{"class":101,"line":1297},[99,70492,70493],{"class":214},"  color:#721c24;\n",[99,70495,70496],{"class":101,"line":1303},[99,70497,1551],{"class":109},[99,70499,70500],{"class":101,"line":1315},[99,70501,70502],{"class":214},"h1 {\n",[99,70504,70505,70508,70510],{"class":101,"line":1598},[99,70506,70507],{"class":51281},"  text-align",[99,70509,51418],{"class":109},[99,70511,70512],{"class":214},"center;\n",[99,70514,70515],{"class":101,"line":1603},[99,70516,70517],{"class":214},"  color:#333;\n",[99,70519,70520,70522,70524],{"class":101,"line":1609},[99,70521,70451],{"class":51281},[99,70523,51418],{"class":109},[99,70525,70526],{"class":214},"20px 0;\n",[99,70528,70529],{"class":101,"line":1614},[99,70530,2660],{"class":109},[99,70532,70533],{"class":101,"line":1628},[99,70534,1551],{"class":109},[99,70536,70537],{"class":101,"line":1633},[99,70538,70539],{"class":214},"table {\n",[99,70541,70542],{"class":101,"line":1639},[99,70543,70544],{"class":214},"  margin:0 auto;\n",[99,70546,70547,70550,70552],{"class":101,"line":1660},[99,70548,70549],{"class":51281},"  width",[99,70551,51418],{"class":109},[99,70553,70554],{"class":214},"800px;\n",[99,70556,70557,70560,70562],{"class":101,"line":1665},[99,70558,70559],{"class":51281},"  border-collapse",[99,70561,51418],{"class":109},[99,70563,70564],{"class":214},"collapse;\n",[99,70566,70567],{"class":101,"line":1679},[99,70568,70569],{"class":214},"  color:#004085;\n",[99,70571,70572],{"class":101,"line":1684},[99,70573,1551],{"class":109},[99,70575,70576],{"class":101,"line":1713},[99,70577,70578],{"class":214},"th {\n",[99,70580,70581,70583,70585],{"class":101,"line":1718},[99,70582,70461],{"class":51281},[99,70584,51418],{"class":109},[99,70586,70587],{"class":214},"10px;\n",[99,70589,70590,70593,70595],{"class":101,"line":1735},[99,70591,70592],{"class":51281},"  background",[99,70594,51418],{"class":109},[99,70596,70597],{"class":168},"#cfe5ff;\n",[99,70599,70600],{"class":101,"line":1740},[99,70601,70602],{"class":109},"  \n",[99,70604,70605,70608,70610],{"class":101,"line":1745},[99,70606,70607],{"class":51281},"  font-size",[99,70609,51418],{"class":109},[99,70611,70612],{"class":214},"20px;\n",[99,70614,70615,70618,70620],{"class":101,"line":1750},[99,70616,70617],{"class":51281},"  font-weight",[99,70619,51418],{"class":109},[99,70621,70622],{"class":214},"400;\n",[99,70624,70625],{"class":101,"line":1764},[99,70626,1551],{"class":109},[99,70628,70629],{"class":101,"line":1769},[99,70630,70631],{"class":214},"td,th {\n",[99,70633,70634,70637],{"class":101,"line":2563},[99,70635,70636],{"class":214},"  border:1px solid",[99,70638,70639],{"class":168}," #b8daff;\n",[99,70641,70642],{"class":101,"line":2577},[99,70643,1551],{"class":109},[99,70645,70646],{"class":101,"line":2585},[99,70647,70648],{"class":214},"td {\n",[99,70650,70651],{"class":101,"line":2590},[99,70652,70653],{"class":214},"  padding:10px;\n",[99,70655,70656],{"class":101,"line":2596},[99,70657,70658],{"class":214},"  color:#666;\n",[99,70660,70661,70663,70665],{"class":101,"line":2602},[99,70662,70507],{"class":51281},[99,70664,51418],{"class":109},[99,70666,70512],{"class":214},[99,70668,70669,70671,70673],{"class":101,"line":2607},[99,70670,70607],{"class":51281},[99,70672,51418],{"class":109},[99,70674,70675],{"class":214},"16px;\n",[99,70677,70678],{"class":101,"line":7935},[99,70679,1551],{"class":109},[99,70681,70682],{"class":101,"line":7959},[99,70683,70684],{"class":214},"tbody tr {\n",[99,70686,70687,70689,70691],{"class":101,"line":7964},[99,70688,70592],{"class":51281},[99,70690,51418],{"class":109},[99,70692,70693],{"class":168},"#fff;\n",[99,70695,70696],{"class":101,"line":7970},[99,70697,1551],{"class":109},[99,70699,70700],{"class":101,"line":7997},[99,70701,70702],{"class":214},"tbody tr:hover {\n",[99,70704,70705,70707,70709],{"class":101,"line":8002},[99,70706,70592],{"class":51281},[99,70708,51418],{"class":109},[99,70710,70711],{"class":168},"#e1ecf8;\n",[99,70713,70714],{"class":101,"line":8008},[99,70715,1551],{"class":109},[99,70717,70718],{"class":101,"line":8020},[99,70719,70720],{"class":214},".info {\n",[99,70722,70723,70725,70727],{"class":101,"line":8032},[99,70724,70549],{"class":51281},[99,70726,51418],{"class":109},[99,70728,70729],{"class":214},"900px;\n",[99,70731,70732,70734,70736],{"class":101,"line":8044},[99,70733,70451],{"class":51281},[99,70735,51418],{"class":109},[99,70737,70738],{"class":214},"50px auto;\n",[99,70740,70741,70743,70745],{"class":101,"line":9703},[99,70742,70507],{"class":51281},[99,70744,51418],{"class":109},[99,70746,70512],{"class":214},[99,70748,70749],{"class":101,"line":9728},[99,70750,1551],{"class":109},[99,70752,70753],{"class":101,"line":9751},[99,70754,70755],{"class":214},".info  input, .info select {\n",[99,70757,70758,70760,70762],{"class":101,"line":9775},[99,70759,70549],{"class":51281},[99,70761,51418],{"class":109},[99,70763,70764],{"class":214},"80px;\n",[99,70766,70767,70770,70772],{"class":101,"line":9780},[99,70768,70769],{"class":51281},"  height",[99,70771,51418],{"class":109},[99,70773,70774],{"class":214},"27px;\n",[99,70776,70777,70780,70782],{"class":101,"line":9785},[99,70778,70779],{"class":51281},"  outline",[99,70781,51418],{"class":109},[99,70783,70488],{"class":214},[99,70785,70786,70789,70791],{"class":101,"line":9790},[99,70787,70788],{"class":51281},"  border-radius",[99,70790,51418],{"class":109},[99,70792,70793],{"class":214},"5px;\n",[99,70795,70796,70798],{"class":101,"line":9799},[99,70797,70636],{"class":214},[99,70799,70639],{"class":168},[99,70801,70802,70805,70807],{"class":101,"line":9804},[99,70803,70804],{"class":51281},"  padding-left",[99,70806,51418],{"class":109},[99,70808,70793],{"class":214},[99,70810,70811,70814,70816],{"class":101,"line":9810},[99,70812,70813],{"class":51281},"  box-sizing",[99,70815,51418],{"class":109},[99,70817,70818],{"class":214},"border-box;\n",[99,70820,70821,70824,70826],{"class":101,"line":9831},[99,70822,70823],{"class":51281},"  margin-right",[99,70825,51418],{"class":109},[99,70827,70828],{"class":214},"15px;\n",[99,70830,70831],{"class":101,"line":9837},[99,70832,1551],{"class":109},[99,70834,70835],{"class":101,"line":9851},[99,70836,70837],{"class":214},".info button {\n",[99,70839,70840,70842,70844],{"class":101,"line":9857},[99,70841,70549],{"class":51281},[99,70843,51418],{"class":109},[99,70845,70846],{"class":214},"60px;\n",[99,70848,70849,70851,70853],{"class":101,"line":9884},[99,70850,70769],{"class":51281},[99,70852,51418],{"class":109},[99,70854,70774],{"class":214},[99,70856,70857,70860,70862],{"class":101,"line":9893},[99,70858,70859],{"class":51281},"  background-color",[99,70861,51418],{"class":109},[99,70863,70864],{"class":168},"#004085;\n",[99,70866,70867,70869,70871],{"class":101,"line":9899},[99,70868,70779],{"class":51281},[99,70870,51418],{"class":109},[99,70872,70488],{"class":214},[99,70874,70875,70878,70880],{"class":101,"line":9907},[99,70876,70877],{"class":51281},"  border",[99,70879,51418],{"class":109},[99,70881,70456],{"class":214},[99,70883,70884,70887,70889],{"class":101,"line":9912},[99,70885,70886],{"class":51281},"  color",[99,70888,51418],{"class":109},[99,70890,70693],{"class":168},[99,70892,70893,70896,70898],{"class":101,"line":16591},[99,70894,70895],{"class":51281},"  cursor",[99,70897,51418],{"class":109},[99,70899,70900],{"class":214},"pointer;\n",[99,70902,70903,70905,70907],{"class":101,"line":16597},[99,70904,70788],{"class":51281},[99,70906,51418],{"class":109},[99,70908,70793],{"class":214},[99,70910,70911],{"class":101,"line":16620},[99,70912,1551],{"class":109},[99,70914,70915],{"class":101,"line":16626},[99,70916,70917],{"class":214},".info .age {\n",[99,70919,70920,70922,70924],{"class":101,"line":16649},[99,70921,70549],{"class":51281},[99,70923,51418],{"class":109},[99,70925,70926],{"class":214},"50px;\n",[99,70928,70929],{"class":101,"line":16663},[99,70930,1551],{"class":109},[14,70932,70933],{},"思路：",[14,70935,70936],{},[1448,70937],{"alt":21,"src":70938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70940,70941],{},[1448,70942],{"alt":21,"src":70943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70945,70946],{},[1448,70947],{"alt":21,"src":70948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[70,70950,70952],{"id":70951},"_3315-重绘回流","3.3.15 重绘回流",[14,70954,70955],{},[1448,70956],{"alt":21,"src":70957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70959,70960],{},[1448,70961],{"alt":21,"src":70962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70964,70965],{},[1448,70966],{"alt":21,"src":70967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[41,70969,70971],{"id":70970},"_34-bom","3.4 BOM",[14,70973,70974],{},[1448,70975],{"alt":21,"src":70976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70978,70979],{},"平时写的document省略了window而已，实际上是window.document",[14,70981,70982],{},"函数也是这样，调用的时候实际为window.fn()",[14,70984,70985],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,70987,70988],{},"window大部分情况下可以省略",[70,70990,70992],{"id":70991},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,70994,70995],{},"只执行一次",[14,70997,70998],{},[1448,70999],{"alt":21,"src":71000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71002,71003],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71005,71006],{},[1448,71007],{"alt":21,"src":71008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[70,71010,71012],{"id":71011},"_342-js执行机制","3.4.2 JS执行机制",[14,71014,71015],{},[1448,71016],{"alt":21,"src":71017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71019,71020],{},"两个的结果都是1111 3333 2222",[14,71022,71023],{},[1448,71024],{"alt":21,"src":71025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71027,71028],{},[1448,71029],{"alt":21,"src":71030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71032,71033],{},[1448,71034],{"alt":21,"src":71035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71037,71038],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71040,71041],{},"工作流程：",[14,71043,71044],{},[1448,71045],{"alt":21,"src":71046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71048,71049],{},[1448,71050],{"alt":21,"src":71051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71053,71054],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71056,71057],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[70,71059,71061],{"id":71060},"_343-location对象","3.4.3 location对象",[14,71063,71064],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71066,71067],{},[1448,71068],{"alt":21,"src":71069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71071,71072],{},"href可以跳转页面",[53,71074,71075],{},[56,71076,71077],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71079,71080],{},"search得到提交信息之后网站后边的地址",[14,71082,71083],{},[1448,71084],{"alt":21,"src":71085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71087,71088],{},[1448,71089],{"alt":21,"src":71090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[53,71092,71093],{"start":22},[56,71094,71095],{},"hash:这个获取单页面应用#后边的地址",[14,71097,71098],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71100,71101],{},[1448,71102],{"alt":21,"src":71103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[90,71105,71107],{"className":53048,"code":71106,"language":53050,"meta":21,"style":21},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[96,71108,71109,71129,71149],{"__ignoreMap":21},[99,71110,71111,71113,71115,71117,71119,71122,71125,71127],{"class":101,"line":102},[99,71112,52125],{"class":109},[99,71114,348],{"class":51281},[99,71116,61038],{"class":1949},[99,71118,155],{"class":109},[99,71120,71121],{"class":214},"\"#\u002Fmy\"",[99,71123,71124],{"class":109},">我的\u003C\u002F",[99,71126,348],{"class":51281},[99,71128,51288],{"class":109},[99,71130,71131,71133,71135,71137,71139,71142,71145,71147],{"class":101,"line":22},[99,71132,52125],{"class":109},[99,71134,348],{"class":51281},[99,71136,61038],{"class":1949},[99,71138,155],{"class":109},[99,71140,71141],{"class":214},"\"#\u002Ffriend\"",[99,71143,71144],{"class":109},">关注\u003C\u002F",[99,71146,348],{"class":51281},[99,71148,51288],{"class":109},[99,71150,71151,71153,71155,71157,71159,71162,71165,71167],{"class":101,"line":1165},[99,71152,52125],{"class":109},[99,71154,348],{"class":51281},[99,71156,61038],{"class":1949},[99,71158,155],{"class":109},[99,71160,71161],{"class":214},"\"#\u002Fdownload\"",[99,71163,71164],{"class":109},">下载\u003C\u002F",[99,71166,348],{"class":51281},[99,71168,51288],{"class":109},[14,71170,71171],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[53,71173,71174],{"start":1165},[56,71175,71176,71177,71179,71180,71182],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53697,71178],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53697,71181],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[70,71184,71186],{"id":71185},"_345-navigator对象","3.4.5 navigator对象",[14,71188,71189],{},[1448,71190],{"alt":21,"src":71191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[90,71193,71197],{"className":71194,"code":71195,"language":71196,"meta":21,"style":21},"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",[96,71198,71199,71204,71215,71227,71232,71283,71324,71329,71342,71354,71359],{"__ignoreMap":21},[99,71200,71201],{"class":101,"line":102},[99,71202,71203],{"class":168},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[99,71205,71206,71208,71210,71212],{"class":101,"line":22},[99,71207,336],{"class":105},[99,71209,110],{"class":109},[99,71211,54430],{"class":105},[99,71213,71214],{"class":109}," () { \n",[99,71216,71217,71219,71222,71224],{"class":101,"line":1165},[99,71218,6779],{"class":105},[99,71220,71221],{"class":158}," userAgent",[99,71223,13551],{"class":105},[99,71225,71226],{"class":109}," navigator.userAgent \n",[99,71228,71229],{"class":101,"line":1180},[99,71230,71231],{"class":168},"\u002F\u002F 验证是否为Android或iPhone \n",[99,71233,71234,71236,71239,71241,71244,71247,71249,71251,71254,71256,71259,71263,71265,71267,71269,71272,71274,71276,71278,71280],{"class":101,"line":1186},[99,71235,6779],{"class":105},[99,71237,71238],{"class":158}," android",[99,71240,13551],{"class":105},[99,71242,71243],{"class":109}," userAgent.",[99,71245,71246],{"class":1949},"match",[99,71248,110],{"class":109},[99,71250,694],{"class":214},[99,71252,71253],{"class":47958},"(Android);",[99,71255,1096],{"class":105},[99,71257,71258],{"class":158},"[\\s",[99,71260,71262],{"class":71261},"snhLl","\\\u002F",[99,71264,1050],{"class":158},[99,71266,591],{"class":105},[99,71268,110],{"class":47958},[99,71270,71271],{"class":158},"[\\d.]",[99,71273,591],{"class":105},[99,71275,539],{"class":47958},[99,71277,1096],{"class":105},[99,71279,694],{"class":214},[99,71281,71282],{"class":109},") \n",[99,71284,71285,71287,71290,71292,71294,71296,71298,71300,71303,71306,71309,71311,71313,71316,71318,71320,71322],{"class":101,"line":1200},[99,71286,6779],{"class":105},[99,71288,71289],{"class":158}," iphone",[99,71291,13551],{"class":105},[99,71293,71243],{"class":109},[99,71295,71246],{"class":1949},[99,71297,110],{"class":109},[99,71299,694],{"class":214},[99,71301,71302],{"class":47958},"(iPhone",[99,71304,71305],{"class":158},"\\s",[99,71307,71308],{"class":47958},"OS)",[99,71310,71305],{"class":158},[99,71312,110],{"class":47958},[99,71314,71315],{"class":158},"[\\d_]",[99,71317,591],{"class":105},[99,71319,539],{"class":47958},[99,71321,694],{"class":214},[99,71323,71282],{"class":109},[99,71325,71326],{"class":101,"line":1206},[99,71327,71328],{"class":168},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[99,71330,71331,71333,71336,71339],{"class":101,"line":1297},[99,71332,1517],{"class":105},[99,71334,71335],{"class":109}," (android ",[99,71337,71338],{"class":105},"||",[99,71340,71341],{"class":109}," iphone) { \n",[99,71343,71344,71347,71349,71352],{"class":101,"line":1303},[99,71345,71346],{"class":109},"location.href ",[99,71348,155],{"class":105},[99,71350,71351],{"class":214}," 'http:\u002F\u002Fm.itcast.cn'",[99,71353,2660],{"class":109},[99,71355,71356],{"class":101,"line":1315},[99,71357,71358],{"class":109},"} \n",[99,71360,71361],{"class":101,"line":1598},[99,71362,71363],{"class":109},"})()\n",[70,71365,71367],{"id":71366},"_346-histroy对象","3.4.6 histroy对象",[14,71369,71370],{},[1448,71371],{"alt":21,"src":71372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71374,71375],{},"浏览器地址的前进与后退!!!",[14,71377,71378],{},"history.back() 等效于 history.go(-1)",[14,71380,71381],{},"history.forward() 等效于 history.go(1)",[41,71383,71385],{"id":71384},"_35-本地存储","3.5 本地存储",[53,71387,71388,71391,71394],{},[56,71389,71390],{},"数据存储在用户浏览器中",[56,71392,71393],{},"设置、读取方便、甚至页面刷新不丢失数据",[56,71395,71396],{},"容量较大，sessionStorage和localStorage约 5M 左右",[70,71398,71400],{"id":71399},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71402,71403],{},"只能存储字符串",[14,71405,71406],{},[1448,71407],{"alt":21,"src":71408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71410,71411],{},[1448,71412],{"alt":21,"src":71413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71415,71416],{},"键值对要加引号,不然就会当变量来看了",[14,71418,71419],{},"localStorage.setItem('uname', 'pink')",[14,71421,71422],{},"刷新之后信息不再丢失",[14,71424,71425],{},"操作key,value会跟着变",[14,71427,71428],{},"删除只删除键就可以,即名字",[14,71430,71419],{},[14,71432,71433],{},"改:",[14,71435,71436],{},"localStorage.setItem('uname','red')",[14,71438,71439],{},"有这个键就是改,没有这个键就是改",[14,71441,71442],{},[1448,71443],{"alt":21,"src":71444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71446,71447],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71449,71450],{},[1448,71451],{"alt":21,"src":71452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71454,71455],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[70,71457,71459],{"id":71458},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71461,71462],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71464,71465],{},"特性:",[53,71467,71468,71471,71474,71477],{},[56,71469,71470],{},"生命周期为关闭浏览器窗口",[56,71472,71473],{},"在同一个窗口(页面)下数据可以共享",[56,71475,71476],{},"以键值对的形式存储使用",[56,71478,71479],{},"用法跟localStorage 基本相同",[70,71481,71483],{"id":71482},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71485,71486],{},"本地只能存储字符串,无法直接存储复杂数据类型",[90,71488,71490],{"className":53048,"code":71489,"language":53050,"meta":21,"style":21},"\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",[96,71491,71492,71500,71505,71510,71515,71520,71524,71529,71534],{"__ignoreMap":21},[99,71493,71494,71496,71498],{"class":101,"line":102},[99,71495,1020],{"class":109},[99,71497,51794],{"class":51281},[99,71499,51288],{"class":109},[99,71501,71502],{"class":101,"line":22},[99,71503,71504],{"class":109},"    const obj = {\n",[99,71506,71507],{"class":101,"line":1165},[99,71508,71509],{"class":109},"      uname: 'pink老师',\n",[99,71511,71512],{"class":101,"line":1180},[99,71513,71514],{"class":109},"      age: 18,\n",[99,71516,71517],{"class":101,"line":1186},[99,71518,71519],{"class":109},"      gender: '女'\n",[99,71521,71522],{"class":101,"line":1200},[99,71523,2173],{"class":109},[99,71525,71526],{"class":101,"line":1206},[99,71527,71528],{"class":109},"    \u002F\u002F 存储复杂数据类型\n",[99,71530,71531],{"class":101,"line":1297},[99,71532,71533],{"class":109},"    localStorage.setItem('obj', obj)\n",[99,71535,71536,71538,71540],{"class":101,"line":1303},[99,71537,52398],{"class":109},[99,71539,51794],{"class":51281},[99,71541,51288],{"class":109},[14,71543,71544],{},[1448,71545],{"alt":21,"src":71546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71548,71549],{},"如果获取一下数据:",[14,71551,71552],{},"log(localStorage.getItem('obj'))",[14,71554,71555],{},[1448,71556],{"alt":21,"src":71557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71559,71560],{},"发现直接存对象是使用不了的!!!",[21985,71562,71564],{"id":71563},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71566,71567],{},[1448,71568],{"alt":21,"src":71569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[90,71571,71573],{"className":50614,"code":71572,"language":50616,"meta":21,"style":21},"\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",[96,71574,71575,71583,71593,71603,71612,71620,71624,71628,71654,71673,71681,71685,71690,71695],{"__ignoreMap":21},[99,71576,71577,71579,71581],{"class":101,"line":102},[99,71578,1020],{"class":109},[99,71580,51794],{"class":51281},[99,71582,51288],{"class":109},[99,71584,71585,71587,71589,71591],{"class":101,"line":22},[99,71586,11208],{"class":105},[99,71588,69952],{"class":158},[99,71590,13551],{"class":105},[99,71592,15559],{"class":109},[99,71594,71595,71598,71601],{"class":101,"line":1165},[99,71596,71597],{"class":109},"      uname: ",[99,71599,71600],{"class":214},"'pink老师'",[99,71602,31447],{"class":109},[99,71604,71605,71608,71610],{"class":101,"line":1180},[99,71606,71607],{"class":109},"      age: ",[99,71609,760],{"class":158},[99,71611,31447],{"class":109},[99,71613,71614,71617],{"class":101,"line":1186},[99,71615,71616],{"class":109},"      gender: ",[99,71618,71619],{"class":214},"'女'\n",[99,71621,71622],{"class":101,"line":1200},[99,71623,2173],{"class":109},[99,71625,71626],{"class":101,"line":1206},[99,71627,71528],{"class":168},[99,71629,71630,71633,71636,71638,71641,71643,71646,71648,71651],{"class":101,"line":1297},[99,71631,71632],{"class":109},"  localStorage.",[99,71634,71635],{"class":1949},"setItem",[99,71637,110],{"class":109},[99,71639,71640],{"class":214},"'obj'",[99,71642,12422],{"class":109},[99,71644,71645],{"class":158},"JSON",[99,71647,668],{"class":109},[99,71649,71650],{"class":1949},"stringify",[99,71652,71653],{"class":109},"(obj))\n",[99,71655,71656,71659,71661,71664,71667,71669,71671],{"class":101,"line":1303},[99,71657,71658],{"class":109},"  console.",[99,71660,58228],{"class":1949},[99,71662,71663],{"class":109},"(localStorage.",[99,71665,71666],{"class":1949},"getItem",[99,71668,110],{"class":109},[99,71670,71640],{"class":214},[99,71672,30478],{"class":109},[99,71674,71675,71677,71679],{"class":101,"line":1315},[99,71676,52398],{"class":109},[99,71678,51794],{"class":51281},[99,71680,51288],{"class":109},[99,71682,71683],{"class":101,"line":1598},[99,71684,70602],{"class":109},[99,71686,71687],{"class":101,"line":1603},[99,71688,71689],{"class":109},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[99,71691,71692],{"class":101,"line":1609},[99,71693,71694],{"class":109},"  类型是字符串的\n",[99,71696,71697],{"class":101,"line":1614},[99,71698,71699],{"class":109},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21985,71701,71703],{"id":71702},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71705,71706],{},[1448,71707],{"alt":21,"src":71708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71710,71711],{},[1448,71712],{"alt":21,"src":71713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[90,71715,71717],{"className":53048,"code":71716,"language":53050,"meta":21,"style":21},"  \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",[96,71718,71719,71727,71731,71735,71739,71743,71747,71752,71757,71762,71767,71772,71777,71782,71787],{"__ignoreMap":21},[99,71720,71721,71723,71725],{"class":101,"line":102},[99,71722,52125],{"class":109},[99,71724,51794],{"class":51281},[99,71726,51288],{"class":109},[99,71728,71729],{"class":101,"line":22},[99,71730,71504],{"class":109},[99,71732,71733],{"class":101,"line":1165},[99,71734,71509],{"class":109},[99,71736,71737],{"class":101,"line":1180},[99,71738,71514],{"class":109},[99,71740,71741],{"class":101,"line":1186},[99,71742,71519],{"class":109},[99,71744,71745],{"class":101,"line":1200},[99,71746,2173],{"class":109},[99,71748,71749],{"class":101,"line":1206},[99,71750,71751],{"class":109},"    \u002F\u002F 1.存储复杂数据类型\n",[99,71753,71754],{"class":101,"line":1297},[99,71755,71756],{"class":109},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[99,71758,71759],{"class":101,"line":1303},[99,71760,71761],{"class":109},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[99,71763,71764],{"class":101,"line":1315},[99,71765,71766],{"class":109},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[99,71768,71769],{"class":101,"line":1598},[99,71770,71771],{"class":109},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[99,71773,71774],{"class":101,"line":1603},[99,71775,71776],{"class":109},"    \u002F\u002F 取\n",[99,71778,71779],{"class":101,"line":1609},[99,71780,71781],{"class":109},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[99,71783,71784],{"class":101,"line":1614},[99,71785,71786],{"class":109},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[99,71788,71789,71791,71793],{"class":101,"line":1628},[99,71790,52398],{"class":109},[99,71792,51794],{"class":51281},[99,71794,51288],{"class":109},[14,71796,71797],{},[1448,71798],{"alt":21,"src":71799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[70,71801,71803],{"id":71802},"_356-数组map方法","3.5.6 数组map方法",[14,71805,71806],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71808,71809],{},[1448,71810],{"alt":21,"src":71811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71813,71814],{},[1448,71815],{"alt":21,"src":71816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71818,71819,71822],{},[259,71820,71821],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71824,71825],{},"map有返回值，但是forEach没有返回值",[14,71827,71828],{},"map是个方法。用的时候要加 ()",[14,71830,71831],{},"map返回的是一个数组",[70,71833,71835],{"id":71834},"_357-数组中join方法","3.5.7 数组中join方法",[14,71837,71838],{},[1448,71839],{"alt":21,"src":71840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71842,71843],{},"类似于python中拼接字符串一样！",[53,71845,71846,71849,71852],{},[56,71847,71848],{},"小括号为空则逗号分开",[56,71850,71851],{},"小括号为空字符串 ''，则元素之间没有分隔符",[56,71853,71854],{},"小括号用啥符号就用进行分割",[70,71856,71858],{"id":71857},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[53,71860,71861,71864,71867,71870,71873],{},[56,71862,71863],{},"记住本地时间获取快速方式：new Date().toDateString()",[56,71865,71866],{},"尽量减少DOM操作，用好map+join的渲染方式",[56,71868,71869],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[56,71871,71872],{},"return可以实现函数的结束",[56,71874,71875],{},"禁止跳转是 preventDefault() 不要忘记",[90,71877,71879],{"className":50614,"code":71878,"language":50616,"meta":21,"style":21},"\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",[96,71880,71881,71891,71905,71909,71917,71931,71951,71963,71971,71977,71987,71997,72001,72005,72011,72021,72033,72037,72041,72048,72060,72074,72084,72088,72092,72099,72106,72113,72125,72137,72147,72159,72163,72167,72174,72181,72193,72205,72215,72227,72257,72261,72265,72272,72284,72296,72320,72330,72340,72344,72348,72356,72367,72379,72391,72403,72420,72432,72444,72448,72452,72459,72471,72483,72495,72506,72524,72537,72549,72573,72584,72588,72592,72600,72610,72614,72618,72624,72636,72647,72657,72661,72665,72671,72693,72697,72701,72707,72713,72725,72735,72747,72777,72790,72807,72811,72815,72826,72848,72858,72862,72866,72879,72889,72901,72913,72925,72937,72947,72957,72967,72978,72991,72995,73003,73011,73015,73023,73036,73056,73089,73122,73155,73181,73199,73217,73225,73251,73269,73287,73305,73323,73341,73349,73357,73375,73383,73412,73420,73428,73436,73449,73461,73473,73485,73497,73509,73522,73534,73542,73550,73558,73563,73568,73572,73576,73580,73584,73588,73592,73597,73602,73607,73612,73620,73628,73636,73641,73646,73651,73656,73661,73666,73671,73676,73681,73686,73691,73696,73701,73706,73710,73715,73720,73730,73739,73743,73748,73757,73773,73815,73855,73894,73959,73967,73971,73976,73994,74002,74007,74012,74042,74048,74053,74066,74078,74090,74102,74114,74126,74138,74142,74152,74156,74161,74166,74170,74179,74183,74188,74193,74212,74217,74237,74241,74246,74250,74255,74273,74291,74309,74328,74347,74366,74371,74377,74398,74404,74413,74419,74425,74431,74458,74471,74476,74486,74492,74498,74504,74510,74515,74521,74527,74533,74539,74572,74577,74582,74587,74592,74598,74604,74610,74621,74626,74632,74639,74653,74659,74683,74688,74693,74699,74705,74726,74732,74745,74751,74757,74763,74769,74774,74780,74786,74792,74810,74824,74830,74838,74844,74866,74871,74876,74881,74886,74891,74900,74909,74914],{"__ignoreMap":21},[99,71882,71883,71885,71887,71889],{"class":101,"line":102},[99,71884,51278],{"class":109},[99,71886,51282],{"class":51281},[99,71888,51285],{"class":1949},[99,71890,51288],{"class":109},[99,71892,71893,71895,71897,71899,71901,71903],{"class":101,"line":22},[99,71894,1020],{"class":109},[99,71896,50616],{"class":51281},[99,71898,51297],{"class":1949},[99,71900,155],{"class":109},[99,71902,51302],{"class":214},[99,71904,51288],{"class":109},[99,71906,71907],{"class":101,"line":1165},[99,71908,2386],{"emptyLinePlaceholder":26},[99,71910,71911,71913,71915],{"class":101,"line":1180},[99,71912,1020],{"class":109},[99,71914,51315],{"class":51281},[99,71916,51288],{"class":109},[99,71918,71919,71921,71923,71925,71927,71929],{"class":101,"line":1186},[99,71920,52125],{"class":109},[99,71922,51325],{"class":51281},[99,71924,51328],{"class":1949},[99,71926,155],{"class":109},[99,71928,51333],{"class":214},[99,71930,51288],{"class":109},[99,71932,71933,71935,71937,71939,71941,71943,71945,71947,71949],{"class":101,"line":1200},[99,71934,52125],{"class":109},[99,71936,51325],{"class":51281},[99,71938,14907],{"class":1949},[99,71940,155],{"class":109},[99,71942,51372],{"class":214},[99,71944,51352],{"class":1949},[99,71946,155],{"class":109},[99,71948,51379],{"class":214},[99,71950,51288],{"class":109},[99,71952,71953,71955,71957,71959,71961],{"class":101,"line":1206},[99,71954,52125],{"class":109},[99,71956,51388],{"class":51281},[99,71958,51391],{"class":109},[99,71960,51388],{"class":51281},[99,71962,51288],{"class":109},[99,71964,71965,71967,71969],{"class":101,"line":1297},[99,71966,52125],{"class":109},[99,71968,5113],{"class":51281},[99,71970,51288],{"class":109},[99,71972,71973,71975],{"class":101,"line":1303},[99,71974,6390],{"class":51281},[99,71976,15559],{"class":109},[99,71978,71979,71981,71983,71985],{"class":101,"line":1315},[99,71980,54676],{"class":158},[99,71982,51418],{"class":109},[99,71984,301],{"class":158},[99,71986,1276],{"class":109},[99,71988,71989,71991,71993,71995],{"class":101,"line":1598},[99,71990,54687],{"class":158},[99,71992,51418],{"class":109},[99,71994,301],{"class":158},[99,71996,1276],{"class":109},[99,71998,71999],{"class":101,"line":1603},[99,72000,2173],{"class":109},[99,72002,72003],{"class":101,"line":1609},[99,72004,2386],{"emptyLinePlaceholder":26},[99,72006,72007,72009],{"class":101,"line":1614},[99,72008,57260],{"class":51281},[99,72010,15559],{"class":109},[99,72012,72013,72015,72017,72019],{"class":101,"line":1628},[99,72014,57267],{"class":158},[99,72016,51418],{"class":109},[99,72018,51573],{"class":158},[99,72020,1276],{"class":109},[99,72022,72023,72025,72027,72029,72031],{"class":101,"line":1633},[99,72024,62058],{"class":158},[99,72026,51418],{"class":109},[99,72028,810],{"class":158},[99,72030,51473],{"class":105},[99,72032,1276],{"class":109},[99,72034,72035],{"class":101,"line":1639},[99,72036,2173],{"class":109},[99,72038,72039],{"class":101,"line":1660},[99,72040,2386],{"emptyLinePlaceholder":26},[99,72042,72043,72046],{"class":101,"line":1665},[99,72044,72045],{"class":1949},"    .info",[99,72047,15559],{"class":109},[99,72049,72050,72052,72054,72056,72058],{"class":101,"line":1679},[99,72051,54752],{"class":158},[99,72053,51418],{"class":109},[99,72055,51470],{"class":158},[99,72057,51473],{"class":105},[99,72059,1276],{"class":109},[99,72061,72062,72064,72066,72068,72070,72072],{"class":101,"line":1684},[99,72063,54687],{"class":158},[99,72065,51418],{"class":109},[99,72067,556],{"class":158},[99,72069,51473],{"class":105},[99,72071,51537],{"class":158},[99,72073,1276],{"class":109},[99,72075,72076,72078,72080,72082],{"class":101,"line":1713},[99,72077,57267],{"class":158},[99,72079,51418],{"class":109},[99,72081,51573],{"class":158},[99,72083,1276],{"class":109},[99,72085,72086],{"class":101,"line":1718},[99,72087,2173],{"class":109},[99,72089,72090],{"class":101,"line":1735},[99,72091,2386],{"emptyLinePlaceholder":26},[99,72093,72094,72097],{"class":101,"line":1740},[99,72095,72096],{"class":1949},"    .uname",[99,72098,31447],{"class":109},[99,72100,72101,72104],{"class":101,"line":1745},[99,72102,72103],{"class":1949},"    .age",[99,72105,31447],{"class":109},[99,72107,72108,72111],{"class":101,"line":1750},[99,72109,72110],{"class":1949},"    .salary",[99,72112,15559],{"class":109},[99,72114,72115,72117,72119,72121,72123],{"class":101,"line":1764},[99,72116,54752],{"class":158},[99,72118,51418],{"class":109},[99,72120,421],{"class":158},[99,72122,51473],{"class":105},[99,72124,1276],{"class":109},[99,72126,72127,72129,72131,72133,72135],{"class":101,"line":1769},[99,72128,54766],{"class":158},[99,72130,51418],{"class":109},[99,72132,810],{"class":158},[99,72134,51473],{"class":105},[99,72136,1276],{"class":109},[99,72138,72139,72141,72143,72145],{"class":101,"line":2563},[99,72140,61761],{"class":158},[99,72142,51418],{"class":109},[99,72144,54718],{"class":158},[99,72146,1276],{"class":109},[99,72148,72149,72151,72153,72155,72157],{"class":101,"line":2577},[99,72150,61731],{"class":158},[99,72152,51418],{"class":109},[99,72154,685],{"class":158},[99,72156,51473],{"class":105},[99,72158,1276],{"class":109},[99,72160,72161],{"class":101,"line":2585},[99,72162,2173],{"class":109},[99,72164,72165],{"class":101,"line":2590},[99,72166,2386],{"emptyLinePlaceholder":26},[99,72168,72169,72172],{"class":101,"line":2596},[99,72170,72171],{"class":1949},"    .gender",[99,72173,31447],{"class":109},[99,72175,72176,72179],{"class":101,"line":2602},[99,72177,72178],{"class":1949},"    .city",[99,72180,15559],{"class":109},[99,72182,72183,72185,72187,72189,72191],{"class":101,"line":2607},[99,72184,54752],{"class":158},[99,72186,51418],{"class":109},[99,72188,421],{"class":158},[99,72190,51473],{"class":105},[99,72192,1276],{"class":109},[99,72194,72195,72197,72199,72201,72203],{"class":101,"line":7935},[99,72196,54766],{"class":158},[99,72198,51418],{"class":109},[99,72200,935],{"class":158},[99,72202,51473],{"class":105},[99,72204,1276],{"class":109},[99,72206,72207,72209,72211,72213],{"class":101,"line":7959},[99,72208,61761],{"class":158},[99,72210,51418],{"class":109},[99,72212,54718],{"class":158},[99,72214,1276],{"class":109},[99,72216,72217,72219,72221,72223,72225],{"class":101,"line":7964},[99,72218,61731],{"class":158},[99,72220,51418],{"class":109},[99,72222,685],{"class":158},[99,72224,51473],{"class":105},[99,72226,1276],{"class":109},[99,72228,72229,72231,72233,72235,72237,72239,72242,72244,72246,72248,72251,72253,72255],{"class":101,"line":7970},[99,72230,61958],{"class":158},[99,72232,51418],{"class":109},[99,72234,327],{"class":158},[99,72236,51473],{"class":105},[99,72238,51502],{"class":158},[99,72240,72241],{"class":158}," rgb",[99,72243,110],{"class":109},[99,72245,1708],{"class":158},[99,72247,12422],{"class":109},[99,72249,72250],{"class":158},"197",[99,72252,12422],{"class":109},[99,72254,72250],{"class":158},[99,72256,2705],{"class":109},[99,72258,72259],{"class":101,"line":7997},[99,72260,2173],{"class":109},[99,72262,72263],{"class":101,"line":8002},[99,72264,2386],{"emptyLinePlaceholder":26},[99,72266,72267,72270],{"class":101,"line":8008},[99,72268,72269],{"class":51281},"    button",[99,72271,15559],{"class":109},[99,72273,72274,72276,72278,72280,72282],{"class":101,"line":8020},[99,72275,54766],{"class":158},[99,72277,51418],{"class":109},[99,72279,935],{"class":158},[99,72281,51473],{"class":105},[99,72283,1276],{"class":109},[99,72285,72286,72288,72290,72292,72294],{"class":101,"line":8032},[99,72287,54752],{"class":158},[99,72289,51418],{"class":109},[99,72291,594],{"class":158},[99,72293,51473],{"class":105},[99,72295,1276],{"class":109},[99,72297,72298,72300,72302,72305,72307,72309,72311,72314,72316,72318],{"class":101,"line":8044},[99,72299,54865],{"class":158},[99,72301,51418],{"class":109},[99,72303,72304],{"class":158},"rgb",[99,72306,110],{"class":109},[99,72308,1079],{"class":158},[99,72310,12422],{"class":109},[99,72312,72313],{"class":158},"187",[99,72315,12422],{"class":109},[99,72317,409],{"class":158},[99,72319,2705],{"class":109},[99,72321,72322,72324,72326,72328],{"class":101,"line":9703},[99,72323,57397],{"class":158},[99,72325,51418],{"class":109},[99,72327,60823],{"class":158},[99,72329,1276],{"class":109},[99,72331,72332,72334,72336,72338],{"class":101,"line":9728},[99,72333,61958],{"class":158},[99,72335,51418],{"class":109},[99,72337,301],{"class":158},[99,72339,1276],{"class":109},[99,72341,72342],{"class":101,"line":9751},[99,72343,2173],{"class":109},[99,72345,72346],{"class":101,"line":9775},[99,72347,2386],{"emptyLinePlaceholder":26},[99,72349,72350,72352,72354],{"class":101,"line":9780},[99,72351,72269],{"class":51281},[99,72353,51669],{"class":51281},[99,72355,15559],{"class":109},[99,72357,72358,72360,72362,72365],{"class":101,"line":9785},[99,72359,54990],{"class":158},[99,72361,51418],{"class":109},[99,72363,72364],{"class":158},"inline-block",[99,72366,1276],{"class":109},[99,72368,72369,72371,72373,72375,72377],{"class":101,"line":9790},[99,72370,54752],{"class":158},[99,72372,51418],{"class":109},[99,72374,556],{"class":158},[99,72376,51473],{"class":105},[99,72378,1276],{"class":109},[99,72380,72381,72383,72385,72387,72389],{"class":101,"line":9799},[99,72382,54766],{"class":158},[99,72384,51418],{"class":109},[99,72386,556],{"class":158},[99,72388,51473],{"class":105},[99,72390,1276],{"class":109},[99,72392,72393,72395,72397,72399,72401],{"class":101,"line":9804},[99,72394,57340],{"class":158},[99,72396,51418],{"class":109},[99,72398,582],{"class":158},[99,72400,51473],{"class":105},[99,72402,1276],{"class":109},[99,72404,72405,72407,72409,72411,72413,72415,72418],{"class":101,"line":9810},[99,72406,61958],{"class":158},[99,72408,51418],{"class":109},[99,72410,327],{"class":158},[99,72412,51473],{"class":105},[99,72414,51502],{"class":158},[99,72416,72417],{"class":158}," #fff",[99,72419,1276],{"class":109},[99,72421,72422,72424,72426,72428,72430],{"class":101,"line":9831},[99,72423,55115],{"class":158},[99,72425,51418],{"class":109},[99,72427,429],{"class":158},[99,72429,51473],{"class":105},[99,72431,1276],{"class":109},[99,72433,72434,72436,72438,72440,72442],{"class":101,"line":9837},[99,72435,61731],{"class":158},[99,72437,51418],{"class":109},[99,72439,327],{"class":158},[99,72441,51473],{"class":105},[99,72443,1276],{"class":109},[99,72445,72446],{"class":101,"line":9851},[99,72447,2173],{"class":109},[99,72449,72450],{"class":101,"line":9857},[99,72451,2386],{"emptyLinePlaceholder":26},[99,72453,72454,72457],{"class":101,"line":9884},[99,72455,72456],{"class":1949},"    .total",[99,72458,15559],{"class":109},[99,72460,72461,72463,72465,72467,72469],{"class":101,"line":9893},[99,72462,54752],{"class":158},[99,72464,51418],{"class":109},[99,72466,61610],{"class":158},[99,72468,51473],{"class":105},[99,72470,1276],{"class":109},[99,72472,72473,72475,72477,72479,72481],{"class":101,"line":9899},[99,72474,54766],{"class":158},[99,72476,51418],{"class":109},[99,72478,511],{"class":158},[99,72480,51473],{"class":105},[99,72482,1276],{"class":109},[99,72484,72485,72487,72489,72491,72493],{"class":101,"line":9907},[99,72486,57340],{"class":158},[99,72488,51418],{"class":109},[99,72490,511],{"class":158},[99,72492,51473],{"class":105},[99,72494,1276],{"class":109},[99,72496,72497,72499,72501,72504],{"class":101,"line":9912},[99,72498,57267],{"class":158},[99,72500,51418],{"class":109},[99,72502,72503],{"class":158},"right",[99,72505,1276],{"class":109},[99,72507,72508,72510,72512,72514,72516,72518,72520,72522],{"class":101,"line":16591},[99,72509,54687],{"class":158},[99,72511,51418],{"class":109},[99,72513,511],{"class":158},[99,72515,51473],{"class":105},[99,72517,51537],{"class":158},[99,72519,2024],{"class":158},[99,72521,51473],{"class":105},[99,72523,1276],{"class":109},[99,72525,72526,72529,72531,72533,72535],{"class":101,"line":16597},[99,72527,72528],{"class":158},"      padding-right",[99,72530,51418],{"class":109},[99,72532,556],{"class":158},[99,72534,51473],{"class":105},[99,72536,1276],{"class":109},[99,72538,72539,72541,72543,72545,72547],{"class":101,"line":16620},[99,72540,54903],{"class":158},[99,72542,51418],{"class":109},[99,72544,633],{"class":158},[99,72546,51473],{"class":105},[99,72548,1276],{"class":109},[99,72550,72551,72553,72555,72557,72559,72562,72564,72567,72569,72571],{"class":101,"line":16626},[99,72552,54865],{"class":158},[99,72554,51418],{"class":109},[99,72556,72304],{"class":158},[99,72558,110],{"class":109},[99,72560,72561],{"class":158},"237",[99,72563,12422],{"class":109},[99,72565,72566],{"class":158},"235",[99,72568,12422],{"class":109},[99,72570,72566],{"class":158},[99,72572,2705],{"class":109},[99,72574,72575,72578,72580,72582],{"class":101,"line":16649},[99,72576,72577],{"class":158},"      box-sizing",[99,72579,51418],{"class":109},[99,72581,60486],{"class":158},[99,72583,1276],{"class":109},[99,72585,72586],{"class":101,"line":16663},[99,72587,2173],{"class":109},[99,72589,72590],{"class":101,"line":16683},[99,72591,2386],{"emptyLinePlaceholder":26},[99,72593,72594,72596,72598],{"class":101,"line":16689},[99,72595,72456],{"class":1949},[99,72597,51669],{"class":51281},[99,72599,15559],{"class":109},[99,72601,72602,72604,72606,72608],{"class":101,"line":16700},[99,72603,57397],{"class":158},[99,72605,51418],{"class":109},[99,72607,57402],{"class":158},[99,72609,1276],{"class":109},[99,72611,72612],{"class":101,"line":16723},[99,72613,2173],{"class":109},[99,72615,72616],{"class":101,"line":16745},[99,72617,2386],{"emptyLinePlaceholder":26},[99,72619,72620,72622],{"class":101,"line":16750},[99,72621,65004],{"class":51281},[99,72623,15559],{"class":109},[99,72625,72626,72628,72630,72632,72634],{"class":101,"line":16756},[99,72627,54752],{"class":158},[99,72629,51418],{"class":109},[99,72631,61610],{"class":158},[99,72633,51473],{"class":105},[99,72635,1276],{"class":109},[99,72637,72638,72640,72642,72645],{"class":101,"line":16770},[99,72639,54687],{"class":158},[99,72641,51418],{"class":109},[99,72643,72644],{"class":158},"auto",[99,72646,1276],{"class":109},[99,72648,72649,72651,72653,72655],{"class":101,"line":16783},[99,72650,65011],{"class":158},[99,72652,51418],{"class":109},[99,72654,65016],{"class":158},[99,72656,1276],{"class":109},[99,72658,72659],{"class":101,"line":16788},[99,72660,2173],{"class":109},[99,72662,72663],{"class":101,"line":16802},[99,72664,2386],{"emptyLinePlaceholder":26},[99,72666,72667,72669],{"class":101,"line":16807},[99,72668,65096],{"class":51281},[99,72670,15559],{"class":109},[99,72672,72673,72675,72677,72679,72681,72683,72685,72687,72689,72691],{"class":101,"line":16813},[99,72674,54865],{"class":158},[99,72676,51418],{"class":109},[99,72678,72304],{"class":158},[99,72680,110],{"class":109},[99,72682,72561],{"class":158},[99,72684,12422],{"class":109},[99,72686,72566],{"class":158},[99,72688,12422],{"class":109},[99,72690,72566],{"class":158},[99,72692,2705],{"class":109},[99,72694,72695],{"class":101,"line":16818},[99,72696,2173],{"class":109},[99,72698,72699],{"class":101,"line":16832},[99,72700,2386],{"emptyLinePlaceholder":26},[99,72702,72703,72705],{"class":101,"line":16837},[99,72704,65096],{"class":51281},[99,72706,31447],{"class":109},[99,72708,72709,72711],{"class":101,"line":16842},[99,72710,65162],{"class":51281},[99,72712,15559],{"class":109},[99,72714,72715,72717,72719,72721,72723],{"class":101,"line":16856},[99,72716,54766],{"class":158},[99,72718,51418],{"class":109},[99,72720,383],{"class":158},[99,72722,51473],{"class":105},[99,72724,1276],{"class":109},[99,72726,72727,72729,72731,72733],{"class":101,"line":16868},[99,72728,57267],{"class":158},[99,72730,51418],{"class":109},[99,72732,23724],{"class":158},[99,72734,1276],{"class":109},[99,72736,72737,72739,72741,72743,72745],{"class":101,"line":16873},[99,72738,54903],{"class":158},[99,72740,51418],{"class":109},[99,72742,659],{"class":158},[99,72744,51473],{"class":105},[99,72746,1276],{"class":109},[99,72748,72749,72751,72753,72755,72757,72759,72761,72763,72766,72768,72771,72773,72775],{"class":101,"line":16886},[99,72750,61958],{"class":158},[99,72752,51418],{"class":109},[99,72754,327],{"class":158},[99,72756,51473],{"class":105},[99,72758,51502],{"class":158},[99,72760,72241],{"class":158},[99,72762,110],{"class":109},[99,72764,72765],{"class":158},"228",[99,72767,12422],{"class":109},[99,72769,72770],{"class":158},"225",[99,72772,12422],{"class":109},[99,72774,72770],{"class":158},[99,72776,2705],{"class":109},[99,72778,72779,72782,72784,72786,72788],{"class":101,"line":16891},[99,72780,72781],{"class":158},"      padding-left",[99,72783,51418],{"class":109},[99,72785,429],{"class":158},[99,72787,51473],{"class":105},[99,72789,1276],{"class":109},[99,72791,72792,72794,72796,72798,72801,72803,72805],{"class":101,"line":16896},[99,72793,61841],{"class":158},[99,72795,51418],{"class":109},[99,72797,28102],{"class":158},[99,72799,72800],{"class":158}," linear",[99,72802,61848],{"class":158},[99,72804,805],{"class":105},[99,72806,1276],{"class":109},[99,72808,72809],{"class":101,"line":16901},[99,72810,2173],{"class":109},[99,72812,72813],{"class":101,"line":16914},[99,72814,2386],{"emptyLinePlaceholder":26},[99,72816,72817,72820,72822,72824],{"class":101,"line":16919},[99,72818,72819],{"class":51281},"    tbody",[99,72821,70125],{"class":51281},[99,72823,60921],{"class":1949},[99,72825,15559],{"class":109},[99,72827,72828,72830,72832,72834,72836,72838,72840,72842,72844,72846],{"class":101,"line":32614},[99,72829,54865],{"class":158},[99,72831,51418],{"class":109},[99,72833,72304],{"class":158},[99,72835,110],{"class":109},[99,72837,72561],{"class":158},[99,72839,12422],{"class":109},[99,72841,72566],{"class":158},[99,72843,12422],{"class":109},[99,72845,72566],{"class":158},[99,72847,2705],{"class":109},[99,72849,72850,72852,72854,72856],{"class":101,"line":32620},[99,72851,62006],{"class":158},[99,72853,51418],{"class":109},[99,72855,62011],{"class":158},[99,72857,1276],{"class":109},[99,72859,72860],{"class":101,"line":32626},[99,72861,2173],{"class":109},[99,72863,72864],{"class":101,"line":32632},[99,72865,2386],{"emptyLinePlaceholder":26},[99,72867,72868,72870,72872,72875,72877],{"class":101,"line":32638},[99,72869,72819],{"class":51281},[99,72871,70125],{"class":51281},[99,72873,72874],{"class":51281}," td",[99,72876,1384],{"class":51281},[99,72878,15559],{"class":109},[99,72880,72881,72883,72885,72887],{"class":101,"line":32649},[99,72882,54990],{"class":158},[99,72884,51418],{"class":109},[99,72886,60850],{"class":158},[99,72888,1276],{"class":109},[99,72890,72891,72893,72895,72897,72899],{"class":101,"line":32655},[99,72892,54752],{"class":158},[99,72894,51418],{"class":109},[99,72896,1017],{"class":158},[99,72898,51473],{"class":105},[99,72900,1276],{"class":109},[99,72902,72903,72905,72907,72909,72911],{"class":101,"line":32675},[99,72904,54766],{"class":158},[99,72906,51418],{"class":109},[99,72908,935],{"class":158},[99,72910,51473],{"class":105},[99,72912,1276],{"class":109},[99,72914,72915,72917,72919,72921,72923],{"class":101,"line":32681},[99,72916,57340],{"class":158},[99,72918,51418],{"class":109},[99,72920,935],{"class":158},[99,72922,51473],{"class":105},[99,72924,1276],{"class":109},[99,72926,72927,72929,72931,72933,72935],{"class":101,"line":32692},[99,72928,62058],{"class":158},[99,72930,51418],{"class":109},[99,72932,187],{"class":158},[99,72934,51473],{"class":105},[99,72936,1276],{"class":109},[99,72938,72939,72941,72943,72945],{"class":101,"line":32698},[99,72940,57397],{"class":158},[99,72942,51418],{"class":109},[99,72944,60823],{"class":158},[99,72946,1276],{"class":109},[99,72948,72949,72951,72953,72955],{"class":101,"line":32704},[99,72950,57267],{"class":158},[99,72952,51418],{"class":109},[99,72954,51573],{"class":158},[99,72956,1276],{"class":109},[99,72958,72959,72961,72963,72965],{"class":101,"line":32710},[99,72960,63951],{"class":158},[99,72962,51418],{"class":109},[99,72964,54718],{"class":158},[99,72966,1276],{"class":109},[99,72968,72969,72971,72973,72976],{"class":101,"line":32716},[99,72970,54865],{"class":158},[99,72972,51418],{"class":109},[99,72974,72975],{"class":158},"orange",[99,72977,1276],{"class":109},[99,72979,72980,72982,72984,72987,72989],{"class":101,"line":32722},[99,72981,55115],{"class":158},[99,72983,51418],{"class":109},[99,72985,72986],{"class":158},"12.5",[99,72988,51473],{"class":105},[99,72990,1276],{"class":109},[99,72992,72993],{"class":101,"line":32728},[99,72994,2173],{"class":109},[99,72996,72997,72999,73001],{"class":101,"line":32734},[99,72998,52398],{"class":109},[99,73000,5113],{"class":51281},[99,73002,51288],{"class":109},[99,73004,73005,73007,73009],{"class":101,"line":32754},[99,73006,51766],{"class":109},[99,73008,51315],{"class":51281},[99,73010,51288],{"class":109},[99,73012,73013],{"class":101,"line":32760},[99,73014,2386],{"emptyLinePlaceholder":26},[99,73016,73017,73019,73021],{"class":101,"line":32776},[99,73018,1020],{"class":109},[99,73020,51781],{"class":51281},[99,73022,51288],{"class":109},[99,73024,73025,73027,73029,73032,73034],{"class":101,"line":32782},[99,73026,52125],{"class":109},[99,73028,41],{"class":51281},[99,73030,73031],{"class":109},">学生就业统计表\u003C\u002F",[99,73033,41],{"class":51281},[99,73035,51288],{"class":109},[99,73037,73038,73040,73042,73044,73046,73048,73050,73052,73054],{"class":101,"line":32796},[99,73039,52125],{"class":109},[99,73041,66606],{"class":51281},[99,73043,53467],{"class":1949},[99,73045,155],{"class":109},[99,73047,62645],{"class":214},[99,73049,69051],{"class":1949},[99,73051,155],{"class":109},[99,73053,31757],{"class":214},[99,73055,51288],{"class":109},[99,73057,73058,73060,73062,73064,73066,73068,73070,73072,73074,73076,73078,73081,73083,73085,73087],{"class":101,"line":32802},[99,73059,51322],{"class":109},[99,73061,53802],{"class":51281},[99,73063,53805],{"class":1949},[99,73065,155],{"class":109},[99,73067,62680],{"class":214},[99,73069,14907],{"class":1949},[99,73071,155],{"class":109},[99,73073,69077],{"class":214},[99,73075,61001],{"class":1949},[99,73077,155],{"class":109},[99,73079,73080],{"class":214},"\"姓名\"",[99,73082,53467],{"class":1949},[99,73084,155],{"class":109},[99,73086,69077],{"class":214},[99,73088,51288],{"class":109},[99,73090,73091,73093,73095,73097,73099,73101,73103,73105,73107,73109,73111,73114,73116,73118,73120],{"class":101,"line":32817},[99,73092,51322],{"class":109},[99,73094,53802],{"class":51281},[99,73096,53805],{"class":1949},[99,73098,155],{"class":109},[99,73100,62680],{"class":214},[99,73102,14907],{"class":1949},[99,73104,155],{"class":109},[99,73106,69105],{"class":214},[99,73108,61001],{"class":1949},[99,73110,155],{"class":109},[99,73112,73113],{"class":214},"\"年龄\"",[99,73115,53467],{"class":1949},[99,73117,155],{"class":109},[99,73119,69105],{"class":214},[99,73121,51288],{"class":109},[99,73123,73124,73126,73128,73130,73132,73134,73136,73138,73140,73142,73144,73147,73149,73151,73153],{"class":101,"line":32823},[99,73125,51322],{"class":109},[99,73127,53802],{"class":51281},[99,73129,53805],{"class":1949},[99,73131,155],{"class":109},[99,73133,62680],{"class":214},[99,73135,14907],{"class":1949},[99,73137,155],{"class":109},[99,73139,69207],{"class":214},[99,73141,61001],{"class":1949},[99,73143,155],{"class":109},[99,73145,73146],{"class":214},"\"薪资\"",[99,73148,53467],{"class":1949},[99,73150,155],{"class":109},[99,73152,69207],{"class":214},[99,73154,51288],{"class":109},[99,73156,73157,73159,73161,73163,73165,73167,73169,73171,73173,73175,73177,73179],{"class":101,"line":32832},[99,73158,51322],{"class":109},[99,73160,69125],{"class":51281},[99,73162,14907],{"class":1949},[99,73164,155],{"class":109},[99,73166,69132],{"class":214},[99,73168,14946],{"class":1949},[99,73170,155],{"class":109},[99,73172,7639],{"class":214},[99,73174,53467],{"class":1949},[99,73176,155],{"class":109},[99,73178,69132],{"class":214},[99,73180,51288],{"class":109},[99,73182,73183,73185,73187,73189,73191,73193,73195,73197],{"class":101,"line":32838},[99,73184,55215],{"class":109},[99,73186,69147],{"class":51281},[99,73188,66632],{"class":1949},[99,73190,155],{"class":109},[99,73192,9948],{"class":214},[99,73194,69156],{"class":109},[99,73196,69147],{"class":51281},[99,73198,51288],{"class":109},[99,73200,73201,73203,73205,73207,73209,73211,73213,73215],{"class":101,"line":32847},[99,73202,55215],{"class":109},[99,73204,69147],{"class":51281},[99,73206,66632],{"class":1949},[99,73208,155],{"class":109},[99,73210,10017],{"class":214},[99,73212,69175],{"class":109},[99,73214,69147],{"class":51281},[99,73216,51288],{"class":109},[99,73218,73219,73221,73223],{"class":101,"line":32853},[99,73220,51757],{"class":109},[99,73222,69125],{"class":51281},[99,73224,51288],{"class":109},[99,73226,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245,73247,73249],{"class":101,"line":32859},[99,73228,51322],{"class":109},[99,73230,69125],{"class":51281},[99,73232,14907],{"class":1949},[99,73234,155],{"class":109},[99,73236,69229],{"class":214},[99,73238,14946],{"class":1949},[99,73240,155],{"class":109},[99,73242,7639],{"class":214},[99,73244,53467],{"class":1949},[99,73246,155],{"class":109},[99,73248,69229],{"class":214},[99,73250,51288],{"class":109},[99,73252,73253,73255,73257,73259,73261,73263,73265,73267],{"class":101,"line":32868},[99,73254,55215],{"class":109},[99,73256,69147],{"class":51281},[99,73258,66632],{"class":1949},[99,73260,155],{"class":109},[99,73262,69250],{"class":214},[99,73264,69253],{"class":109},[99,73266,69147],{"class":51281},[99,73268,51288],{"class":109},[99,73270,73271,73273,73275,73277,73279,73281,73283,73285],{"class":101,"line":32874},[99,73272,55215],{"class":109},[99,73274,69147],{"class":51281},[99,73276,66632],{"class":1949},[99,73278,155],{"class":109},[99,73280,69270],{"class":214},[99,73282,69273],{"class":109},[99,73284,69147],{"class":51281},[99,73286,51288],{"class":109},[99,73288,73289,73291,73293,73295,73297,73299,73301,73303],{"class":101,"line":32885},[99,73290,55215],{"class":109},[99,73292,69147],{"class":51281},[99,73294,66632],{"class":1949},[99,73296,155],{"class":109},[99,73298,69290],{"class":214},[99,73300,69293],{"class":109},[99,73302,69147],{"class":51281},[99,73304,51288],{"class":109},[99,73306,73307,73309,73311,73313,73315,73317,73319,73321],{"class":101,"line":32891},[99,73308,55215],{"class":109},[99,73310,69147],{"class":51281},[99,73312,66632],{"class":1949},[99,73314,155],{"class":109},[99,73316,69310],{"class":214},[99,73318,69313],{"class":109},[99,73320,69147],{"class":51281},[99,73322,51288],{"class":109},[99,73324,73325,73327,73329,73331,73333,73335,73337,73339],{"class":101,"line":32910},[99,73326,55215],{"class":109},[99,73328,69147],{"class":51281},[99,73330,66632],{"class":1949},[99,73332,155],{"class":109},[99,73334,69330],{"class":214},[99,73336,69333],{"class":109},[99,73338,69147],{"class":51281},[99,73340,51288],{"class":109},[99,73342,73343,73345,73347],{"class":101,"line":32916},[99,73344,51757],{"class":109},[99,73346,69125],{"class":51281},[99,73348,51288],{"class":109},[99,73350,73351,73353,73355],{"class":101,"line":32927},[99,73352,51322],{"class":109},[99,73354,53868],{"class":51281},[99,73356,51288],{"class":109},[99,73358,73359,73361,73363,73366,73368,73371,73373],{"class":101,"line":32933},[99,73360,55215],{"class":109},[99,73362,99],{"class":51281},[99,73364,73365],{"class":109},">+\u003C\u002F",[99,73367,99],{"class":51281},[99,73369,73370],{"class":109},">添加\u003C\u002F",[99,73372,53868],{"class":51281},[99,73374,51288],{"class":109},[99,73376,73377,73379,73381],{"class":101,"line":32953},[99,73378,52398],{"class":109},[99,73380,66606],{"class":51281},[99,73382,51288],{"class":109},[99,73384,73385,73387,73389,73391,73393,73395,73398,73400,73403,73405,73408,73410],{"class":101,"line":32969},[99,73386,52125],{"class":109},[99,73388,51592],{"class":51281},[99,73390,53467],{"class":1949},[99,73392,155],{"class":109},[99,73394,62561],{"class":214},[99,73396,73397],{"class":109},">共有数据 \u003C",[99,73399,99],{"class":51281},[99,73401,73402],{"class":109},">0\u003C\u002F",[99,73404,99],{"class":51281},[99,73406,73407],{"class":109},"> 条\u003C\u002F",[99,73409,51592],{"class":51281},[99,73411,51288],{"class":109},[99,73413,73414,73416,73418],{"class":101,"line":32975},[99,73415,52125],{"class":109},[99,73417,247],{"class":51281},[99,73419,51288],{"class":109},[99,73421,73422,73424,73426],{"class":101,"line":32989},[99,73423,51322],{"class":109},[99,73425,250],{"class":51281},[99,73427,51288],{"class":109},[99,73429,73430,73432,73434],{"class":101,"line":32995},[99,73431,55215],{"class":109},[99,73433,253],{"class":51281},[99,73435,51288],{"class":109},[99,73437,73438,73440,73442,73445,73447],{"class":101,"line":33001},[99,73439,55283],{"class":109},[99,73441,256],{"class":51281},[99,73443,73444],{"class":109},">ID\u003C\u002F",[99,73446,256],{"class":51281},[99,73448,51288],{"class":109},[99,73450,73451,73453,73455,73457,73459],{"class":101,"line":33012},[99,73452,55283],{"class":109},[99,73454,256],{"class":51281},[99,73456,69436],{"class":109},[99,73458,256],{"class":51281},[99,73460,51288],{"class":109},[99,73462,73463,73465,73467,73469,73471],{"class":101,"line":33018},[99,73464,55283],{"class":109},[99,73466,256],{"class":51281},[99,73468,69449],{"class":109},[99,73470,256],{"class":51281},[99,73472,51288],{"class":109},[99,73474,73475,73477,73479,73481,73483],{"class":101,"line":33024},[99,73476,55283],{"class":109},[99,73478,256],{"class":51281},[99,73480,69462],{"class":109},[99,73482,256],{"class":51281},[99,73484,51288],{"class":109},[99,73486,73487,73489,73491,73493,73495],{"class":101,"line":33034},[99,73488,55283],{"class":109},[99,73490,256],{"class":51281},[99,73492,69475],{"class":109},[99,73494,256],{"class":51281},[99,73496,51288],{"class":109},[99,73498,73499,73501,73503,73505,73507],{"class":101,"line":33040},[99,73500,55283],{"class":109},[99,73502,256],{"class":51281},[99,73504,69488],{"class":109},[99,73506,256],{"class":51281},[99,73508,51288],{"class":109},[99,73510,73511,73513,73515,73518,73520],{"class":101,"line":33051},[99,73512,55283],{"class":109},[99,73514,256],{"class":51281},[99,73516,73517],{"class":109},">录入时间\u003C\u002F",[99,73519,256],{"class":51281},[99,73521,51288],{"class":109},[99,73523,73524,73526,73528,73530,73532],{"class":101,"line":33057},[99,73525,55283],{"class":109},[99,73527,256],{"class":51281},[99,73529,69501],{"class":109},[99,73531,256],{"class":51281},[99,73533,51288],{"class":109},[99,73535,73536,73538,73540],{"class":101,"line":33067},[99,73537,55388],{"class":109},[99,73539,253],{"class":51281},[99,73541,51288],{"class":109},[99,73543,73544,73546,73548],{"class":101,"line":33072},[99,73545,51757],{"class":109},[99,73547,250],{"class":51281},[99,73549,51288],{"class":109},[99,73551,73552,73554,73556],{"class":101,"line":33078},[99,73553,51322],{"class":109},[99,73555,294],{"class":51281},[99,73557,51288],{"class":109},[99,73559,73560],{"class":101,"line":33127},[99,73561,73562],{"class":168},"      \u003C!-- \u003Ctr>\n",[99,73564,73565],{"class":101,"line":33174},[99,73566,73567],{"class":168},"        \u003Ctd>1\u003C\u002Ftd>\n",[99,73569,73570],{"class":101,"line":33179},[99,73571,73567],{"class":168},[99,73573,73574],{"class":101,"line":33185},[99,73575,73567],{"class":168},[99,73577,73578],{"class":101,"line":33204},[99,73579,73567],{"class":168},[99,73581,73582],{"class":101,"line":33210},[99,73583,73567],{"class":168},[99,73585,73586],{"class":101,"line":33230},[99,73587,73567],{"class":168},[99,73589,73590],{"class":101,"line":33236},[99,73591,73567],{"class":168},[99,73593,73594],{"class":101,"line":33242},[99,73595,73596],{"class":168},"        \u003Ctd>\n",[99,73598,73599],{"class":101,"line":33252},[99,73600,73601],{"class":168},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[99,73603,73604],{"class":101,"line":33257},[99,73605,73606],{"class":168},"        \u003C\u002Ftd>\n",[99,73608,73609],{"class":101,"line":33263},[99,73610,73611],{"class":168},"      \u003C\u002Ftr> -->\n",[99,73613,73614,73616,73618],{"class":101,"line":33279},[99,73615,51757],{"class":109},[99,73617,294],{"class":51281},[99,73619,51288],{"class":109},[99,73621,73622,73624,73626],{"class":101,"line":33324},[99,73623,52398],{"class":109},[99,73625,247],{"class":51281},[99,73627,51288],{"class":109},[99,73629,73630,73632,73634],{"class":101,"line":33330},[99,73631,52125],{"class":109},[99,73633,51794],{"class":51281},[99,73635,51288],{"class":109},[99,73637,73638],{"class":101,"line":33336},[99,73639,73640],{"class":168},"    \u002F\u002F const initData = [{\n",[99,73642,73643],{"class":101,"line":33342},[99,73644,73645],{"class":168},"    \u002F\u002F   unameId: 1,\n",[99,73647,73648],{"class":101,"line":33353},[99,73649,73650],{"class":168},"    \u002F\u002F   uname: '华晨宇',\n",[99,73652,73653],{"class":101,"line":33359},[99,73654,73655],{"class":168},"    \u002F\u002F   age: 22,\n",[99,73657,73658],{"class":101,"line":33365},[99,73659,73660],{"class":168},"    \u002F\u002F   salary: 12000,\n",[99,73662,73663],{"class":101,"line":33371},[99,73664,73665],{"class":168},"    \u002F\u002F   gender: '男',\n",[99,73667,73668],{"class":101,"line":33389},[99,73669,73670],{"class":168},"    \u002F\u002F   city: '北京',\n",[99,73672,73673],{"class":101,"line":33403},[99,73674,73675],{"class":168},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[99,73677,73678],{"class":101,"line":33412},[99,73679,73680],{"class":168},"    \u002F\u002F }]\n",[99,73682,73683],{"class":101,"line":33421},[99,73684,73685],{"class":168},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[99,73687,73688],{"class":101,"line":33430},[99,73689,73690],{"class":168},"    \u002F\u002F 1.渲染业务\n",[99,73692,73693],{"class":101,"line":33439},[99,73694,73695],{"class":168},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[99,73697,73698],{"class":101,"line":33445},[99,73699,73700],{"class":168},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[99,73702,73703],{"class":101,"line":33451},[99,73704,73705],{"class":168},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[99,73707,73708],{"class":101,"line":33459},[99,73709,2386],{"emptyLinePlaceholder":26},[99,73711,73712],{"class":101,"line":33464},[99,73713,73714],{"class":168},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[99,73716,73717],{"class":101,"line":33470},[99,73718,73719],{"class":168},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[99,73721,73722,73724,73726,73728],{"class":101,"line":33481},[99,73723,11208],{"class":105},[99,73725,57676],{"class":158},[99,73727,13551],{"class":105},[99,73729,51819],{"class":109},[99,73731,73732,73735,73737],{"class":101,"line":33487},[99,73733,73734],{"class":109},"    console.",[99,73736,58228],{"class":1949},[99,73738,52393],{"class":109},[99,73740,73741],{"class":101,"line":33507},[99,73742,2386],{"emptyLinePlaceholder":26},[99,73744,73745],{"class":101,"line":33513},[99,73746,73747],{"class":168},"    \u002F\u002F 时间函数\n",[99,73749,73750,73752,73755],{"class":101,"line":33519},[99,73751,70065],{"class":105},[99,73753,73754],{"class":1949}," getTime",[99,73756,10840],{"class":109},[99,73758,73759,73761,73764,73766,73768,73771],{"class":101,"line":33525},[99,73760,58209],{"class":105},[99,73762,73763],{"class":158}," date",[99,73765,13551],{"class":105},[99,73767,11565],{"class":105},[99,73769,73770],{"class":1949}," Date",[99,73772,1962],{"class":109},[99,73774,73775,73777,73779,73781,73784,73787,73789,73791,73793,73796,73799,73801,73803,73805,73807,73809,73811,73813],{"class":101,"line":33542},[99,73776,58209],{"class":105},[99,73778,16078],{"class":158},[99,73780,13551],{"class":105},[99,73782,73783],{"class":109}," date.",[99,73785,73786],{"class":1949},"getHours",[99,73788,13037],{"class":109},[99,73790,1020],{"class":105},[99,73792,2024],{"class":158},[99,73794,73795],{"class":105}," ?",[99,73797,73798],{"class":214}," '0'",[99,73800,45547],{"class":105},[99,73802,73783],{"class":109},[99,73804,73786],{"class":1949},[99,73806,13037],{"class":109},[99,73808,969],{"class":105},[99,73810,73783],{"class":109},[99,73812,73786],{"class":1949},[99,73814,1962],{"class":109},[99,73816,73817,73819,73822,73824,73826,73829,73831,73833,73835,73837,73839,73841,73843,73845,73847,73849,73851,73853],{"class":101,"line":33548},[99,73818,58209],{"class":105},[99,73820,73821],{"class":158}," m",[99,73823,13551],{"class":105},[99,73825,73783],{"class":109},[99,73827,73828],{"class":1949},"getMinutes",[99,73830,13037],{"class":109},[99,73832,1020],{"class":105},[99,73834,2024],{"class":158},[99,73836,73795],{"class":105},[99,73838,73798],{"class":214},[99,73840,45547],{"class":105},[99,73842,73783],{"class":109},[99,73844,73828],{"class":1949},[99,73846,13037],{"class":109},[99,73848,969],{"class":105},[99,73850,73783],{"class":109},[99,73852,73828],{"class":1949},[99,73854,1962],{"class":109},[99,73856,73857,73859,73861,73863,73865,73868,73870,73872,73874,73876,73878,73880,73882,73884,73886,73888,73890,73892],{"class":101,"line":33554},[99,73858,58209],{"class":105},[99,73860,8415],{"class":158},[99,73862,13551],{"class":105},[99,73864,73783],{"class":109},[99,73866,73867],{"class":1949},"getSeconds",[99,73869,13037],{"class":109},[99,73871,1020],{"class":105},[99,73873,2024],{"class":158},[99,73875,73795],{"class":105},[99,73877,73798],{"class":214},[99,73879,45547],{"class":105},[99,73881,73783],{"class":109},[99,73883,73867],{"class":1949},[99,73885,13037],{"class":109},[99,73887,969],{"class":105},[99,73889,73783],{"class":109},[99,73891,73867],{"class":1949},[99,73893,1962],{"class":109},[99,73895,73896,73898,73901,73903,73905,73908,73910,73913,73915,73918,73920,73922,73925,73927,73929,73931,73933,73935,73937,73940,73942,73945,73947,73950,73952,73954,73956],{"class":101,"line":33560},[99,73897,58209],{"class":105},[99,73899,73900],{"class":158}," str",[99,73902,13551],{"class":105},[99,73904,62884],{"class":214},[99,73906,73907],{"class":109},"date",[99,73909,668],{"class":214},[99,73911,73912],{"class":1949},"getFullYear",[99,73914,2413],{"class":214},[99,73916,73917],{"class":214},"}\u002F${",[99,73919,73907],{"class":109},[99,73921,668],{"class":214},[99,73923,73924],{"class":1949},"getMonth",[99,73926,13037],{"class":214},[99,73928,591],{"class":105},[99,73930,25107],{"class":158},[99,73932,73917],{"class":214},[99,73934,73907],{"class":109},[99,73936,668],{"class":214},[99,73938,73939],{"class":1949},"getDate",[99,73941,2413],{"class":214},[99,73943,73944],{"class":214},"} ${",[99,73946,525],{"class":109},[99,73948,73949],{"class":214},"}:${",[99,73951,654],{"class":109},[99,73953,73949],{"class":214},[99,73955,805],{"class":109},[99,73957,73958],{"class":214},"}`\n",[99,73960,73961,73964],{"class":101,"line":33566},[99,73962,73963],{"class":105},"      return",[99,73965,73966],{"class":109}," str\n",[99,73968,73969],{"class":101,"line":33572},[99,73970,2173],{"class":109},[99,73972,73973],{"class":101,"line":33599},[99,73974,73975],{"class":168},"    \u002F\u002F 渲染函数\n",[99,73977,73978,73980,73982,73984,73986,73988,73990,73992],{"class":101,"line":33623},[99,73979,11208],{"class":105},[99,73981,69728],{"class":158},[99,73983,13551],{"class":105},[99,73985,54377],{"class":109},[99,73987,54380],{"class":1949},[99,73989,110],{"class":109},[99,73991,69739],{"class":214},[99,73993,116],{"class":109},[99,73995,73996,73998,74000],{"class":101,"line":33629},[99,73997,70065],{"class":105},[99,73999,70068],{"class":1949},[99,74001,10840],{"class":109},[99,74003,74004],{"class":101,"line":33635},[99,74005,74006],{"class":168},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[99,74008,74009],{"class":101,"line":33641},[99,74010,74011],{"class":168},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[99,74013,74014,74016,74019,74021,74023,74026,74028,74030,74032,74035,74037,74040],{"class":101,"line":33652},[99,74015,58209],{"class":105},[99,74017,74018],{"class":158}," trArr",[99,74020,13551],{"class":105},[99,74022,51946],{"class":109},[99,74024,74025],{"class":1949},"map",[99,74027,110],{"class":109},[99,74029,54430],{"class":105},[99,74031,1644],{"class":109},[99,74033,74034],{"class":5203},"ele",[99,74036,12422],{"class":109},[99,74038,74039],{"class":5203},"index",[99,74041,12429],{"class":109},[99,74043,74044,74046],{"class":101,"line":33663},[99,74045,14739],{"class":105},[99,74047,70149],{"class":214},[99,74049,74050],{"class":101,"line":33669},[99,74051,74052],{"class":214},"      \u003Ctr>\n",[99,74054,74055,74057,74059,74061,74064],{"class":101,"line":33686},[99,74056,70154],{"class":214},[99,74058,74034],{"class":109},[99,74060,668],{"class":214},[99,74062,74063],{"class":109},"unameId",[99,74065,70169],{"class":214},[99,74067,74068,74070,74072,74074,74076],{"class":101,"line":33709},[99,74069,70154],{"class":214},[99,74071,74034],{"class":109},[99,74073,668],{"class":214},[99,74075,70185],{"class":109},[99,74077,70169],{"class":214},[99,74079,74080,74082,74084,74086,74088],{"class":101,"line":33732},[99,74081,70154],{"class":214},[99,74083,74034],{"class":109},[99,74085,668],{"class":214},[99,74087,70202],{"class":109},[99,74089,70169],{"class":214},[99,74091,74092,74094,74096,74098,74100],{"class":101,"line":33738},[99,74093,70154],{"class":214},[99,74095,74034],{"class":109},[99,74097,668],{"class":214},[99,74099,70219],{"class":109},[99,74101,70169],{"class":214},[99,74103,74104,74106,74108,74110,74112],{"class":101,"line":33743},[99,74105,70154],{"class":214},[99,74107,74034],{"class":109},[99,74109,668],{"class":214},[99,74111,70236],{"class":109},[99,74113,70169],{"class":214},[99,74115,74116,74118,74120,74122,74124],{"class":101,"line":33752},[99,74117,70154],{"class":214},[99,74119,74034],{"class":109},[99,74121,668],{"class":214},[99,74123,70253],{"class":109},[99,74125,70169],{"class":214},[99,74127,74128,74130,74132,74134,74136],{"class":101,"line":33762},[99,74129,70154],{"class":214},[99,74131,74034],{"class":109},[99,74133,668],{"class":214},[99,74135,2373],{"class":109},[99,74137,70169],{"class":214},[99,74139,74140],{"class":101,"line":33768},[99,74141,73596],{"class":214},[99,74143,74144,74147,74149],{"class":101,"line":33773},[99,74145,74146],{"class":214},"          \u003Ca href=\"#\" data-id=\"${",[99,74148,74039],{"class":109},[99,74150,74151],{"class":214},"}\">删除\u003C\u002Fa>\n",[99,74153,74154],{"class":101,"line":33779},[99,74155,73606],{"class":214},[99,74157,74158],{"class":101,"line":33792},[99,74159,74160],{"class":214},"      \u003C\u002Ftr>\n",[99,74162,74163],{"class":101,"line":33798},[99,74164,74165],{"class":214},"  `\n",[99,74167,74168],{"class":101,"line":33809},[99,74169,64796],{"class":109},[99,74171,74172,74174,74176],{"class":101,"line":33820},[99,74173,58225],{"class":109},[99,74175,58228],{"class":1949},[99,74177,74178],{"class":109},"(trArr)\n",[99,74180,74181],{"class":101,"line":33839},[99,74182,2386],{"emptyLinePlaceholder":26},[99,74184,74185],{"class":101,"line":49499},[99,74186,74187],{"class":168},"      \u002F\u002F (2) 把数组转换为字符串join\n",[99,74189,74190],{"class":101,"line":49504},[99,74191,74192],{"class":168},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[99,74194,74195,74197,74199,74202,74205,74207,74210],{"class":101,"line":49513},[99,74196,70080],{"class":109},[99,74198,155],{"class":105},[99,74200,74201],{"class":109}," trArr.",[99,74203,74204],{"class":1949},"join",[99,74206,110],{"class":109},[99,74208,74209],{"class":214},"''",[99,74211,116],{"class":109},[99,74213,74214],{"class":101,"line":49522},[99,74215,74216],{"class":168},"      \u002F\u002F 显示共有几条\n",[99,74218,74219,74221,74223,74225,74228,74231,74233,74235],{"class":101,"line":49527},[99,74220,55752],{"class":109},[99,74222,54380],{"class":1949},[99,74224,110],{"class":109},[99,74226,74227],{"class":214},"'.total span'",[99,74229,74230],{"class":109},").innerHTML ",[99,74232,155],{"class":105},[99,74234,51946],{"class":109},[99,74236,55812],{"class":158},[99,74238,74239],{"class":101,"line":49532},[99,74240,2173],{"class":109},[99,74242,74243],{"class":101,"line":49537},[99,74244,74245],{"class":168},"    \u002F\u002F render()\n",[99,74247,74248],{"class":101,"line":49550},[99,74249,2386],{"emptyLinePlaceholder":26},[99,74251,74252],{"class":101,"line":49555},[99,74253,74254],{"class":168},"    \u002F\u002F 获取DOM对象\n",[99,74256,74257,74259,74261,74263,74265,74267,74269,74271],{"class":101,"line":49564},[99,74258,11208],{"class":105},[99,74260,69802],{"class":158},[99,74262,13551],{"class":105},[99,74264,54377],{"class":109},[99,74266,54380],{"class":1949},[99,74268,110],{"class":109},[99,74270,69813],{"class":214},[99,74272,116],{"class":109},[99,74274,74275,74277,74279,74281,74283,74285,74287,74289],{"class":101,"line":49573},[99,74276,11208],{"class":105},[99,74278,69629],{"class":158},[99,74280,13551],{"class":105},[99,74282,54377],{"class":109},[99,74284,54380],{"class":1949},[99,74286,110],{"class":109},[99,74288,69640],{"class":214},[99,74290,116],{"class":109},[99,74292,74293,74295,74297,74299,74301,74303,74305,74307],{"class":101,"line":49590},[99,74294,11208],{"class":105},[99,74296,15676],{"class":158},[99,74298,13551],{"class":105},[99,74300,54377],{"class":109},[99,74302,54380],{"class":1949},[99,74304,110],{"class":109},[99,74306,69659],{"class":214},[99,74308,116],{"class":109},[99,74310,74312,74314,74316,74318,74320,74322,74324,74326],{"class":101,"line":74311},231,[99,74313,11208],{"class":105},[99,74315,69688],{"class":158},[99,74317,13551],{"class":105},[99,74319,54377],{"class":109},[99,74321,54380],{"class":1949},[99,74323,110],{"class":109},[99,74325,69699],{"class":214},[99,74327,116],{"class":109},[99,74329,74331,74333,74335,74337,74339,74341,74343,74345],{"class":101,"line":74330},232,[99,74332,11208],{"class":105},[99,74334,69668],{"class":158},[99,74336,13551],{"class":105},[99,74338,54377],{"class":109},[99,74340,54380],{"class":1949},[99,74342,110],{"class":109},[99,74344,69679],{"class":214},[99,74346,116],{"class":109},[99,74348,74350,74352,74354,74356,74358,74360,74362,74364],{"class":101,"line":74349},233,[99,74351,11208],{"class":105},[99,74353,69708],{"class":158},[99,74355,13551],{"class":105},[99,74357,54377],{"class":109},[99,74359,54380],{"class":1949},[99,74361,110],{"class":109},[99,74363,69719],{"class":214},[99,74365,116],{"class":109},[99,74367,74369],{"class":101,"line":74368},234,[99,74370,2386],{"emptyLinePlaceholder":26},[99,74372,74374],{"class":101,"line":74373},235,[99,74375,74376],{"class":168},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[99,74378,74380,74382,74384,74386,74388,74390,74392,74394,74396],{"class":101,"line":74379},236,[99,74381,69820],{"class":109},[99,74383,57794],{"class":1949},[99,74385,110],{"class":109},[99,74387,69827],{"class":214},[99,74389,12422],{"class":109},[99,74391,54430],{"class":105},[99,74393,1644],{"class":109},[99,74395,184],{"class":5203},[99,74397,12429],{"class":109},[99,74399,74401],{"class":101,"line":74400},237,[99,74402,74403],{"class":168},"      \u002F\u002F 禁止浏览器跳转\n",[99,74405,74407,74409,74411],{"class":101,"line":74406},238,[99,74408,69847],{"class":109},[99,74410,69850],{"class":1949},[99,74412,1962],{"class":109},[99,74414,74416],{"class":101,"line":74415},239,[99,74417,74418],{"class":168},"      \u002F\u002F 非空判断\n",[99,74420,74422],{"class":101,"line":74421},240,[99,74423,74424],{"class":168},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[99,74426,74428],{"class":101,"line":74427},241,[99,74429,74430],{"class":168},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[99,74432,74434,74436,74438,74440,74443,74445,74448,74451,74453,74455],{"class":101,"line":74433},242,[99,74435,54461],{"class":105},[99,74437,1644],{"class":109},[99,74439,336],{"class":105},[99,74441,74442],{"class":109},"uname.value ",[99,74444,71338],{"class":105},[99,74446,74447],{"class":105}," !",[99,74449,74450],{"class":109},"age.value ",[99,74452,71338],{"class":105},[99,74454,74447],{"class":105},[99,74456,74457],{"class":109},"salary.value) {\n",[99,74459,74461,74463,74465,74467,74469],{"class":101,"line":74460},243,[99,74462,14739],{"class":105},[99,74464,69921],{"class":1949},[99,74466,110],{"class":109},[99,74468,69926],{"class":214},[99,74470,116],{"class":109},[99,74472,74474],{"class":101,"line":74473},244,[99,74475,52379],{"class":109},[99,74477,74479,74481,74483],{"class":101,"line":74478},245,[99,74480,57988],{"class":109},[99,74482,51865],{"class":1949},[99,74484,74485],{"class":109},"({\n",[99,74487,74489],{"class":101,"line":74488},246,[99,74490,74491],{"class":168},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[99,74493,74495],{"class":101,"line":74494},247,[99,74496,74497],{"class":168},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[99,74499,74501],{"class":101,"line":74500},248,[99,74502,74503],{"class":168},"        \u002F\u002F 对象的序号应为数组长度+1\n",[99,74505,74507],{"class":101,"line":74506},249,[99,74508,74509],{"class":168},"        \u002F\u002F unameId: arr.length + 1,\n",[99,74511,74513],{"class":101,"line":74512},250,[99,74514,2386],{"emptyLinePlaceholder":26},[99,74516,74518],{"class":101,"line":74517},251,[99,74519,74520],{"class":168},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[99,74522,74524],{"class":101,"line":74523},252,[99,74525,74526],{"class":168},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[99,74528,74530],{"class":101,"line":74529},253,[99,74531,74532],{"class":168},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[99,74534,74536],{"class":101,"line":74535},254,[99,74537,74538],{"class":168},"        \u002F\u002F 0当假看\n",[99,74540,74542,74545,74547,74549,74552,74554,74556,74558,74561,74563,74565,74568,74570],{"class":101,"line":74541},255,[99,74543,74544],{"class":109},"        unameId: arr.",[99,74546,51949],{"class":158},[99,74548,73795],{"class":105},[99,74550,74551],{"class":109}," arr[arr.",[99,74553,51949],{"class":158},[99,74555,52252],{"class":105},[99,74557,25107],{"class":158},[99,74559,74560],{"class":109},"].unameId ",[99,74562,591],{"class":105},[99,74564,25107],{"class":158},[99,74566,74567],{"class":105}," :",[99,74569,25107],{"class":158},[99,74571,31447],{"class":109},[99,74573,74575],{"class":101,"line":74574},256,[99,74576,69974],{"class":109},[99,74578,74580],{"class":101,"line":74579},257,[99,74581,69979],{"class":109},[99,74583,74585],{"class":101,"line":74584},258,[99,74586,69989],{"class":109},[99,74588,74590],{"class":101,"line":74589},259,[99,74591,69984],{"class":109},[99,74593,74595],{"class":101,"line":74594},260,[99,74596,74597],{"class":109},"        city: city.value,\n",[99,74599,74601],{"class":101,"line":74600},261,[99,74602,74603],{"class":168},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[99,74605,74607],{"class":101,"line":74606},262,[99,74608,74609],{"class":168},"        \u002F\u002F time: new Date().toDateString()\n",[99,74611,74613,74616,74619],{"class":101,"line":74612},263,[99,74614,74615],{"class":109},"        time: ",[99,74617,74618],{"class":1949},"getTime",[99,74620,1962],{"class":109},[99,74622,74624],{"class":101,"line":74623},264,[99,74625,64796],{"class":109},[99,74627,74629],{"class":101,"line":74628},265,[99,74630,74631],{"class":168},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[99,74633,74635,74637],{"class":101,"line":74634},266,[99,74636,70049],{"class":1949},[99,74638,1962],{"class":109},[99,74640,74642,74644,74646,74648,74650],{"class":101,"line":74641},267,[99,74643,70032],{"class":158},[99,74645,668],{"class":109},[99,74647,70037],{"class":1949},[99,74649,13037],{"class":109},[99,74651,74652],{"class":168},"\u002F\u002F重置表单\n",[99,74654,74656],{"class":101,"line":74655},268,[99,74657,74658],{"class":168},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[99,74660,74662,74665,74667,74669,74672,74674,74676,74678,74680],{"class":101,"line":74661},269,[99,74663,74664],{"class":109},"      localStorage.",[99,74666,71635],{"class":1949},[99,74668,110],{"class":109},[99,74670,74671],{"class":214},"'data'",[99,74673,12422],{"class":109},[99,74675,71645],{"class":158},[99,74677,668],{"class":109},[99,74679,71650],{"class":1949},[99,74681,74682],{"class":109},"(arr))\n",[99,74684,74686],{"class":101,"line":74685},270,[99,74687,33442],{"class":109},[99,74689,74691],{"class":101,"line":74690},271,[99,74692,2386],{"emptyLinePlaceholder":26},[99,74694,74696],{"class":101,"line":74695},272,[99,74697,74698],{"class":168},"    \u002F\u002F 3.删除业务\n",[99,74700,74702],{"class":101,"line":74701},273,[99,74703,74704],{"class":168},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[99,74706,74708,74710,74712,74714,74716,74718,74720,74722,74724],{"class":101,"line":74707},274,[99,74709,70322],{"class":109},[99,74711,57794],{"class":1949},[99,74713,110],{"class":109},[99,74715,57799],{"class":214},[99,74717,12422],{"class":109},[99,74719,54430],{"class":105},[99,74721,1644],{"class":109},[99,74723,184],{"class":5203},[99,74725,12429],{"class":109},[99,74727,74729],{"class":101,"line":74728},275,[99,74730,74731],{"class":168},"      \u002F\u002F 判断是否点击的是删除按钮\n",[99,74733,74735,74737,74739,74741,74743],{"class":101,"line":74734},276,[99,74736,54461],{"class":105},[99,74738,67015],{"class":109},[99,74740,54467],{"class":105},[99,74742,68237],{"class":214},[99,74744,12429],{"class":109},[99,74746,74748],{"class":101,"line":74747},277,[99,74749,74750],{"class":168},"        \u002F\u002F alert(1)\n",[99,74752,74754],{"class":101,"line":74753},278,[99,74755,74756],{"class":168},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[99,74758,74760],{"class":101,"line":74759},279,[99,74761,74762],{"class":168},"        \u002F\u002F console.log(e.target)\n",[99,74764,74766],{"class":101,"line":74765},280,[99,74767,74768],{"class":168},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[99,74770,74772],{"class":101,"line":74771},281,[99,74773,2386],{"emptyLinePlaceholder":26},[99,74775,74777],{"class":101,"line":74776},282,[99,74778,74779],{"class":168},"        \u002F\u002F 确认框，确然是否真的要删除\n",[99,74781,74783],{"class":101,"line":74782},283,[99,74784,74785],{"class":168},"        \u002F\u002F confirm()为确认框\n",[99,74787,74789],{"class":101,"line":74788},284,[99,74790,74791],{"class":168},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[99,74793,74795,74797,74799,74802,74804,74807],{"class":101,"line":74794},285,[99,74796,2483],{"class":105},[99,74798,1644],{"class":109},[99,74800,74801],{"class":1949},"confirm",[99,74803,110],{"class":109},[99,74805,74806],{"class":214},"'您确定要删除这条数据吗？'",[99,74808,74809],{"class":109},")) {\n",[99,74811,74813,74816,74818,74820,74822],{"class":101,"line":74812},286,[99,74814,74815],{"class":109},"          arr.",[99,74817,57991],{"class":1949},[99,74819,70375],{"class":109},[99,74821,327],{"class":158},[99,74823,116],{"class":109},[99,74825,74827],{"class":101,"line":74826},287,[99,74828,74829],{"class":168},"          \u002F\u002F 3.4 重新渲染页面\n",[99,74831,74833,74836],{"class":101,"line":74832},288,[99,74834,74835],{"class":1949},"          render",[99,74837,1962],{"class":109},[99,74839,74841],{"class":101,"line":74840},289,[99,74842,74843],{"class":168},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[99,74845,74847,74850,74852,74854,74856,74858,74860,74862,74864],{"class":101,"line":74846},290,[99,74848,74849],{"class":109},"          localStorage.",[99,74851,71635],{"class":1949},[99,74853,110],{"class":109},[99,74855,74671],{"class":214},[99,74857,12422],{"class":109},[99,74859,71645],{"class":158},[99,74861,668],{"class":109},[99,74863,71650],{"class":1949},[99,74865,74682],{"class":109},[99,74867,74869],{"class":101,"line":74868},291,[99,74870,2515],{"class":109},[99,74872,74874],{"class":101,"line":74873},292,[99,74875,52379],{"class":109},[99,74877,74879],{"class":101,"line":74878},293,[99,74880,2386],{"emptyLinePlaceholder":26},[99,74882,74884],{"class":101,"line":74883},294,[99,74885,33442],{"class":109},[99,74887,74889],{"class":101,"line":74888},295,[99,74890,2386],{"emptyLinePlaceholder":26},[99,74892,74894,74896,74898],{"class":101,"line":74893},296,[99,74895,52398],{"class":109},[99,74897,51794],{"class":51281},[99,74899,51288],{"class":109},[99,74901,74903,74905,74907],{"class":101,"line":74902},297,[99,74904,51766],{"class":109},[99,74906,51781],{"class":51281},[99,74908,51288],{"class":109},[99,74910,74912],{"class":101,"line":74911},298,[99,74913,2386],{"emptyLinePlaceholder":26},[99,74915,74917,74919,74921],{"class":101,"line":74916},299,[99,74918,51766],{"class":109},[99,74920,50616],{"class":51281},[99,74922,51288],{"class":109},[41,74924,74926],{"id":74925},"_36-正则表达式","3.6 正则表达式",[14,74928,74929],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74931,74932],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74934,74935],{},"正则表达式的作用：",[1117,74937,74938,74945,74951],{},[56,74939,74940,74941,74944],{},"表单验证（ ",[259,74942,74943],{},"匹配"," ）",[56,74946,74947,74948,74944],{},"过滤敏感词（ ",[259,74949,74950],{},"替换",[56,74952,74953,74954,74944],{},"字符串中提取我们想要的部分（ ",[259,74955,74956],{},"提取",[70,74958,74960],{"id":74959},"_361-语法","3.6.1 语法",[14,74962,74963],{},"正则表达式使用步骤：",[53,74965,74966,74969],{},[56,74967,74968],{},"定义规则",[56,74970,74971],{},"查找是否匹配",[14,74973,74974],{},"正则表达式里边不需要写引号",[14,74976,74977],{},[1448,74978],{"alt":21,"src":74979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,74981,74982],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,74984,74985],{},"reg.test(str)",[14,74987,74988],{},[1448,74989],{"alt":21,"src":74990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,74992,74993],{},[1448,74994],{"alt":21,"src":74995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[70,74997,74999],{"id":74998},"_362-元字符","3.6.2 元字符",[53,75001,75002,75005,75008,75011,75018],{},[56,75003,75004],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[56,75006,75007],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[56,75009,75010],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[56,75012,75013,75014],{},"正则验证工具：",[348,75015,75016],{"href":75016,"rel":75017},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23853],[56,75019,75020],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21985,75022,75024],{"id":75023},"_3621-边界符","3.6.2.1 边界符",[14,75026,75027],{},[1448,75028],{"alt":21,"src":75029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75031,75032],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75034,75035],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75037,75038],{},"只匹配一次",[14,75040,75041],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21985,75043,75045],{"id":75044},"_3622-量词","3.6.2.2 量词",[14,75047,75048],{},[1448,75049],{"alt":21,"src":75050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75052,75053],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21985,75055,75057],{"id":75056},"_3623-元字符","3.6.2.3 元字符",[14,75059,75060],{},[1448,75061],{"alt":21,"src":75062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75064,75065],{},"匹配的是a或b或c []只选一个",[14,75067,75068],{},[1448,75069],{"alt":21,"src":75070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75072,75073],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75075,75076],{},[1448,75077],{"alt":21,"src":75078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75080,75081],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75083,75084],{},[1448,75085],{"alt":21,"src":75086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[90,75088,75090],{"className":50614,"code":75089,"language":50616,"meta":21,"style":21},"\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",[96,75091,75092,75102,75116,75120,75128,75142,75162,75174,75182,75186,75194,75202,75207,75238,75265,75293,75297,75302,75330,75361,75366,75371,75402,75434,75466,75470,75475,75506,75536,75566,75570,75575,75606,75637,75667,75697,75701,75706,75739,75743,75748,75779,75810,75814,75819,75850,75880,75911,75915,75920,75952,75983,76014,76041,76072,76104,76137,76168,76199,76231,76262,76270,76278,76282],{"__ignoreMap":21},[99,75093,75094,75096,75098,75100],{"class":101,"line":102},[99,75095,51278],{"class":109},[99,75097,51282],{"class":51281},[99,75099,51285],{"class":1949},[99,75101,51288],{"class":109},[99,75103,75104,75106,75108,75110,75112,75114],{"class":101,"line":22},[99,75105,1020],{"class":109},[99,75107,50616],{"class":51281},[99,75109,51297],{"class":1949},[99,75111,155],{"class":109},[99,75113,51302],{"class":214},[99,75115,51288],{"class":109},[99,75117,75118],{"class":101,"line":1165},[99,75119,2386],{"emptyLinePlaceholder":26},[99,75121,75122,75124,75126],{"class":101,"line":1180},[99,75123,1020],{"class":109},[99,75125,51315],{"class":51281},[99,75127,51288],{"class":109},[99,75129,75130,75132,75134,75136,75138,75140],{"class":101,"line":1186},[99,75131,52125],{"class":109},[99,75133,51325],{"class":51281},[99,75135,51328],{"class":1949},[99,75137,155],{"class":109},[99,75139,51333],{"class":214},[99,75141,51288],{"class":109},[99,75143,75144,75146,75148,75150,75152,75154,75156,75158,75160],{"class":101,"line":1200},[99,75145,52125],{"class":109},[99,75147,51325],{"class":51281},[99,75149,14907],{"class":1949},[99,75151,155],{"class":109},[99,75153,51372],{"class":214},[99,75155,51352],{"class":1949},[99,75157,155],{"class":109},[99,75159,51379],{"class":214},[99,75161,51288],{"class":109},[99,75163,75164,75166,75168,75170,75172],{"class":101,"line":1206},[99,75165,52125],{"class":109},[99,75167,51388],{"class":51281},[99,75169,51391],{"class":109},[99,75171,51388],{"class":51281},[99,75173,51288],{"class":109},[99,75175,75176,75178,75180],{"class":101,"line":1297},[99,75177,51766],{"class":109},[99,75179,51315],{"class":51281},[99,75181,51288],{"class":109},[99,75183,75184],{"class":101,"line":1303},[99,75185,2386],{"emptyLinePlaceholder":26},[99,75187,75188,75190,75192],{"class":101,"line":1315},[99,75189,1020],{"class":109},[99,75191,51781],{"class":51281},[99,75193,51288],{"class":109},[99,75195,75196,75198,75200],{"class":101,"line":1598},[99,75197,52125],{"class":109},[99,75199,51794],{"class":51281},[99,75201,51288],{"class":109},[99,75203,75204],{"class":101,"line":1603},[99,75205,75206],{"class":168},"    \u002F\u002F 元字符中\n",[99,75208,75209,75211,75213,75215,75217,75220,75222,75224,75227,75229,75232,75235],{"class":101,"line":1609},[99,75210,73734],{"class":109},[99,75212,58228],{"class":1949},[99,75214,110],{"class":109},[99,75216,694],{"class":214},[99,75218,75219],{"class":47958},"哈",[99,75221,694],{"class":214},[99,75223,668],{"class":109},[99,75225,75226],{"class":1949},"test",[99,75228,110],{"class":109},[99,75230,75231],{"class":214},"'哈'",[99,75233,75234],{"class":109},"))  ",[99,75236,75237],{"class":168},"\u002F\u002Ftrue\n",[99,75239,75240,75242,75244,75246,75248,75250,75252,75254,75256,75258,75261,75263],{"class":101,"line":1614},[99,75241,73734],{"class":109},[99,75243,58228],{"class":1949},[99,75245,110],{"class":109},[99,75247,694],{"class":214},[99,75249,75219],{"class":47958},[99,75251,694],{"class":214},[99,75253,668],{"class":109},[99,75255,75226],{"class":1949},[99,75257,110],{"class":109},[99,75259,75260],{"class":214},"'哈哈'",[99,75262,75234],{"class":109},[99,75264,75237],{"class":168},[99,75266,75267,75269,75271,75273,75275,75277,75279,75281,75283,75285,75288,75291],{"class":101,"line":1628},[99,75268,73734],{"class":109},[99,75270,58228],{"class":1949},[99,75272,110],{"class":109},[99,75274,694],{"class":214},[99,75276,75219],{"class":47958},[99,75278,694],{"class":214},[99,75280,668],{"class":109},[99,75282,75226],{"class":1949},[99,75284,110],{"class":109},[99,75286,75287],{"class":214},"'二哈'",[99,75289,75290],{"class":109},"))   ",[99,75292,75237],{"class":168},[99,75294,75295],{"class":101,"line":1633},[99,75296,2386],{"emptyLinePlaceholder":26},[99,75298,75299],{"class":101,"line":1639},[99,75300,75301],{"class":168},"    \u002F\u002F 1.边界符\n",[99,75303,75304,75306,75308,75310,75312,75314,75316,75318,75320,75322,75324,75326,75328],{"class":101,"line":1660},[99,75305,73734],{"class":109},[99,75307,58228],{"class":1949},[99,75309,110],{"class":109},[99,75311,694],{"class":214},[99,75313,1076],{"class":105},[99,75315,75219],{"class":47958},[99,75317,694],{"class":214},[99,75319,668],{"class":109},[99,75321,75226],{"class":1949},[99,75323,110],{"class":109},[99,75325,75231],{"class":214},[99,75327,75234],{"class":109},[99,75329,75237],{"class":168},[99,75331,75332,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358],{"class":101,"line":1665},[99,75333,73734],{"class":109},[99,75335,58228],{"class":1949},[99,75337,110],{"class":109},[99,75339,694],{"class":214},[99,75341,1076],{"class":105},[99,75343,75219],{"class":47958},[99,75345,412],{"class":105},[99,75347,694],{"class":214},[99,75349,668],{"class":109},[99,75351,75226],{"class":1949},[99,75353,110],{"class":109},[99,75355,75260],{"class":214},[99,75357,75234],{"class":109},[99,75359,75360],{"class":168},"\u002F\u002Ffalse\n",[99,75362,75363],{"class":101,"line":1679},[99,75364,75365],{"class":168},"    \u002F\u002F 2.量词\n",[99,75367,75368],{"class":101,"line":1684},[99,75369,75370],{"class":168},"    \u002F\u002F 量词 * 类似于 >= 0\n",[99,75372,75373,75375,75377,75379,75381,75383,75385,75388,75390,75392,75394,75396,75398,75400],{"class":101,"line":1713},[99,75374,73734],{"class":109},[99,75376,58228],{"class":1949},[99,75378,110],{"class":109},[99,75380,694],{"class":214},[99,75382,1076],{"class":105},[99,75384,75219],{"class":47958},[99,75386,75387],{"class":105},"*$",[99,75389,694],{"class":214},[99,75391,668],{"class":109},[99,75393,75226],{"class":1949},[99,75395,110],{"class":109},[99,75397,75260],{"class":214},[99,75399,75234],{"class":109},[99,75401,75237],{"class":168},[99,75403,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75424,75426,75429,75431],{"class":101,"line":1718},[99,75405,73734],{"class":109},[99,75407,58228],{"class":1949},[99,75409,110],{"class":109},[99,75411,694],{"class":214},[99,75413,1076],{"class":105},[99,75415,75219],{"class":47958},[99,75417,75387],{"class":105},[99,75419,694],{"class":214},[99,75421,668],{"class":109},[99,75423,75226],{"class":1949},[99,75425,110],{"class":109},[99,75427,75428],{"class":214},"'二哈好傻'",[99,75430,75234],{"class":109},[99,75432,75433],{"class":168},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[99,75435,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458,75461,75463],{"class":101,"line":1735},[99,75437,73734],{"class":109},[99,75439,58228],{"class":1949},[99,75441,110],{"class":109},[99,75443,694],{"class":214},[99,75445,1076],{"class":105},[99,75447,75219],{"class":47958},[99,75449,75387],{"class":105},[99,75451,694],{"class":214},[99,75453,668],{"class":109},[99,75455,75226],{"class":1949},[99,75457,110],{"class":109},[99,75459,75460],{"class":214},"'哈好哈'",[99,75462,75290],{"class":109},[99,75464,75465],{"class":168},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[99,75467,75468],{"class":101,"line":1740},[99,75469,2386],{"emptyLinePlaceholder":26},[99,75471,75472],{"class":101,"line":1745},[99,75473,75474],{"class":168},"    \u002F\u002F +类似于>=1\n",[99,75476,75477,75479,75481,75483,75485,75487,75489,75492,75494,75496,75498,75500,75502,75504],{"class":101,"line":1750},[99,75478,73734],{"class":109},[99,75480,58228],{"class":1949},[99,75482,110],{"class":109},[99,75484,694],{"class":214},[99,75486,1076],{"class":105},[99,75488,75219],{"class":47958},[99,75490,75491],{"class":105},"+$",[99,75493,694],{"class":214},[99,75495,668],{"class":109},[99,75497,75226],{"class":1949},[99,75499,110],{"class":109},[99,75501,75260],{"class":214},[99,75503,75234],{"class":109},[99,75505,75237],{"class":168},[99,75507,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530,75532,75534],{"class":101,"line":1764},[99,75509,73734],{"class":109},[99,75511,58228],{"class":1949},[99,75513,110],{"class":109},[99,75515,694],{"class":214},[99,75517,1076],{"class":105},[99,75519,75219],{"class":47958},[99,75521,75491],{"class":105},[99,75523,694],{"class":214},[99,75525,668],{"class":109},[99,75527,75226],{"class":1949},[99,75529,110],{"class":109},[99,75531,75428],{"class":214},[99,75533,75234],{"class":109},[99,75535,75433],{"class":168},[99,75537,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564],{"class":101,"line":1769},[99,75539,73734],{"class":109},[99,75541,58228],{"class":1949},[99,75543,110],{"class":109},[99,75545,694],{"class":214},[99,75547,1076],{"class":105},[99,75549,75219],{"class":47958},[99,75551,75491],{"class":105},[99,75553,694],{"class":214},[99,75555,668],{"class":109},[99,75557,75226],{"class":1949},[99,75559,110],{"class":109},[99,75561,75460],{"class":214},[99,75563,75290],{"class":109},[99,75565,75360],{"class":168},[99,75567,75568],{"class":101,"line":2563},[99,75569,2386],{"emptyLinePlaceholder":26},[99,75571,75572],{"class":101,"line":2577},[99,75573,75574],{"class":168},"    \u002F\u002F ?类似于0次或一次\n",[99,75576,75577,75579,75581,75583,75585,75587,75590,75592,75594,75596,75598,75600,75602,75604],{"class":101,"line":2585},[99,75578,73734],{"class":109},[99,75580,58228],{"class":1949},[99,75582,110],{"class":109},[99,75584,694],{"class":214},[99,75586,1076],{"class":105},[99,75588,75589],{"class":47958},"哈？",[99,75591,412],{"class":105},[99,75593,694],{"class":214},[99,75595,668],{"class":109},[99,75597,75226],{"class":1949},[99,75599,110],{"class":109},[99,75601,74209],{"class":214},[99,75603,75290],{"class":109},[99,75605,75237],{"class":168},[99,75607,75608,75610,75612,75614,75616,75618,75620,75623,75625,75627,75629,75631,75633,75635],{"class":101,"line":2590},[99,75609,73734],{"class":109},[99,75611,58228],{"class":1949},[99,75613,110],{"class":109},[99,75615,694],{"class":214},[99,75617,1076],{"class":105},[99,75619,75219],{"class":47958},[99,75621,75622],{"class":105},"?$",[99,75624,694],{"class":214},[99,75626,668],{"class":109},[99,75628,75226],{"class":1949},[99,75630,110],{"class":109},[99,75632,75260],{"class":214},[99,75634,75234],{"class":109},[99,75636,75360],{"class":168},[99,75638,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661,75663,75665],{"class":101,"line":2596},[99,75640,73734],{"class":109},[99,75642,58228],{"class":1949},[99,75644,110],{"class":109},[99,75646,694],{"class":214},[99,75648,1076],{"class":105},[99,75650,75219],{"class":47958},[99,75652,75622],{"class":105},[99,75654,694],{"class":214},[99,75656,668],{"class":109},[99,75658,75226],{"class":1949},[99,75660,110],{"class":109},[99,75662,75428],{"class":214},[99,75664,75234],{"class":109},[99,75666,75433],{"class":168},[99,75668,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695],{"class":101,"line":2602},[99,75670,73734],{"class":109},[99,75672,58228],{"class":1949},[99,75674,110],{"class":109},[99,75676,694],{"class":214},[99,75678,1076],{"class":105},[99,75680,75219],{"class":47958},[99,75682,75622],{"class":105},[99,75684,694],{"class":214},[99,75686,668],{"class":109},[99,75688,75226],{"class":1949},[99,75690,110],{"class":109},[99,75692,75460],{"class":214},[99,75694,75234],{"class":109},[99,75696,75360],{"class":168},[99,75698,75699],{"class":101,"line":2607},[99,75700,2386],{"emptyLinePlaceholder":26},[99,75702,75703],{"class":101,"line":7935},[99,75704,75705],{"class":168},"    \u002F\u002F {n}写几，就必须出现几次\n",[99,75707,75708,75710,75712,75714,75716,75718,75720,75723,75725,75727,75729,75731,75734,75737],{"class":101,"line":7959},[99,75709,73734],{"class":109},[99,75711,58228],{"class":1949},[99,75713,110],{"class":109},[99,75715,694],{"class":214},[99,75717,1076],{"class":105},[99,75719,75219],{"class":47958},[99,75721,75722],{"class":105},"{4}$",[99,75724,694],{"class":214},[99,75726,668],{"class":109},[99,75728,75226],{"class":1949},[99,75730,110],{"class":109},[99,75732,75733],{"class":214},"'哈哈哈哈'",[99,75735,75736],{"class":109},")) ",[99,75738,75237],{"class":168},[99,75740,75741],{"class":101,"line":7964},[99,75742,2386],{"emptyLinePlaceholder":26},[99,75744,75745],{"class":101,"line":7970},[99,75746,75747],{"class":168},"    \u002F\u002F {n,}大于等于n次\n",[99,75749,75750,75752,75754,75756,75758,75760,75762,75765,75767,75769,75771,75773,75775,75777],{"class":101,"line":7997},[99,75751,73734],{"class":109},[99,75753,58228],{"class":1949},[99,75755,110],{"class":109},[99,75757,694],{"class":214},[99,75759,1076],{"class":105},[99,75761,75219],{"class":47958},[99,75763,75764],{"class":105},"{4,}$",[99,75766,694],{"class":214},[99,75768,668],{"class":109},[99,75770,75226],{"class":1949},[99,75772,110],{"class":109},[99,75774,75733],{"class":214},[99,75776,75736],{"class":109},[99,75778,75237],{"class":168},[99,75780,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799,75801,75803,75806,75808],{"class":101,"line":8002},[99,75782,73734],{"class":109},[99,75784,58228],{"class":1949},[99,75786,110],{"class":109},[99,75788,694],{"class":214},[99,75790,1076],{"class":105},[99,75792,75219],{"class":47958},[99,75794,75764],{"class":105},[99,75796,694],{"class":214},[99,75798,668],{"class":109},[99,75800,75226],{"class":1949},[99,75802,110],{"class":109},[99,75804,75805],{"class":214},"'哈哈哈哈哈'",[99,75807,75736],{"class":109},[99,75809,75237],{"class":168},[99,75811,75812],{"class":101,"line":8008},[99,75813,2386],{"emptyLinePlaceholder":26},[99,75815,75816],{"class":101,"line":8020},[99,75817,75818],{"class":168},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[99,75820,75821,75823,75825,75827,75829,75831,75833,75836,75838,75840,75842,75844,75846,75848],{"class":101,"line":8032},[99,75822,73734],{"class":109},[99,75824,58228],{"class":1949},[99,75826,110],{"class":109},[99,75828,694],{"class":214},[99,75830,1076],{"class":105},[99,75832,75219],{"class":47958},[99,75834,75835],{"class":105},"{4,6}$",[99,75837,694],{"class":214},[99,75839,668],{"class":109},[99,75841,75226],{"class":1949},[99,75843,110],{"class":109},[99,75845,75733],{"class":214},[99,75847,75736],{"class":109},[99,75849,75237],{"class":168},[99,75851,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878],{"class":101,"line":8044},[99,75853,73734],{"class":109},[99,75855,58228],{"class":1949},[99,75857,110],{"class":109},[99,75859,694],{"class":214},[99,75861,1076],{"class":105},[99,75863,75219],{"class":47958},[99,75865,75835],{"class":105},[99,75867,694],{"class":214},[99,75869,668],{"class":109},[99,75871,75226],{"class":1949},[99,75873,110],{"class":109},[99,75875,75805],{"class":214},[99,75877,75736],{"class":109},[99,75879,75237],{"class":168},[99,75881,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75907,75909],{"class":101,"line":9703},[99,75883,73734],{"class":109},[99,75885,58228],{"class":1949},[99,75887,110],{"class":109},[99,75889,694],{"class":214},[99,75891,1076],{"class":105},[99,75893,75219],{"class":47958},[99,75895,75835],{"class":105},[99,75897,694],{"class":214},[99,75899,668],{"class":109},[99,75901,75226],{"class":1949},[99,75903,110],{"class":109},[99,75905,75906],{"class":214},"'哈哈哈哈哈哈哈'",[99,75908,75736],{"class":109},[99,75910,75360],{"class":168},[99,75912,75913],{"class":101,"line":9728},[99,75914,2386],{"emptyLinePlaceholder":26},[99,75916,75917],{"class":101,"line":9751},[99,75918,75919],{"class":168},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[99,75921,75922,75924,75926,75928,75930,75932,75935,75937,75939,75941,75943,75945,75948,75950],{"class":101,"line":9775},[99,75923,73734],{"class":109},[99,75925,58228],{"class":1949},[99,75927,110],{"class":109},[99,75929,694],{"class":214},[99,75931,1076],{"class":105},[99,75933,75934],{"class":158},"[abc]",[99,75936,412],{"class":105},[99,75938,694],{"class":214},[99,75940,668],{"class":109},[99,75942,75226],{"class":1949},[99,75944,110],{"class":109},[99,75946,75947],{"class":214},"'a'",[99,75949,75234],{"class":109},[99,75951,75237],{"class":168},[99,75953,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75979,75981],{"class":101,"line":9780},[99,75955,73734],{"class":109},[99,75957,58228],{"class":1949},[99,75959,110],{"class":109},[99,75961,694],{"class":214},[99,75963,1076],{"class":105},[99,75965,75934],{"class":158},[99,75967,412],{"class":105},[99,75969,694],{"class":214},[99,75971,668],{"class":109},[99,75973,75226],{"class":1949},[99,75975,110],{"class":109},[99,75977,75978],{"class":214},"'b'",[99,75980,75234],{"class":109},[99,75982,75237],{"class":168},[99,75984,75985,75987,75989,75991,75993,75995,75997,75999,76001,76003,76005,76007,76010,76012],{"class":101,"line":9785},[99,75986,73734],{"class":109},[99,75988,58228],{"class":1949},[99,75990,110],{"class":109},[99,75992,694],{"class":214},[99,75994,1076],{"class":105},[99,75996,75934],{"class":158},[99,75998,412],{"class":105},[99,76000,694],{"class":214},[99,76002,668],{"class":109},[99,76004,75226],{"class":1949},[99,76006,110],{"class":109},[99,76008,76009],{"class":214},"'c'",[99,76011,75234],{"class":109},[99,76013,75237],{"class":168},[99,76015,76016,76018,76020,76022,76024,76026,76028,76030,76032,76034,76037,76039],{"class":101,"line":9790},[99,76017,73734],{"class":109},[99,76019,58228],{"class":1949},[99,76021,110],{"class":109},[99,76023,694],{"class":214},[99,76025,75934],{"class":158},[99,76027,694],{"class":214},[99,76029,668],{"class":109},[99,76031,75226],{"class":1949},[99,76033,110],{"class":109},[99,76035,76036],{"class":214},"'ab'",[99,76038,75234],{"class":109},[99,76040,75237],{"class":168},[99,76042,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065,76067,76069],{"class":101,"line":9799},[99,76044,73734],{"class":109},[99,76046,58228],{"class":1949},[99,76048,110],{"class":109},[99,76050,694],{"class":214},[99,76052,1076],{"class":105},[99,76054,75934],{"class":158},[99,76056,412],{"class":105},[99,76058,694],{"class":214},[99,76060,668],{"class":109},[99,76062,75226],{"class":1949},[99,76064,110],{"class":109},[99,76066,76036],{"class":214},[99,76068,75234],{"class":109},[99,76070,76071],{"class":168},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[99,76073,76074,76076,76078,76080,76082,76084,76086,76089,76091,76093,76095,76097,76099,76101],{"class":101,"line":9804},[99,76075,73734],{"class":109},[99,76077,58228],{"class":1949},[99,76079,110],{"class":109},[99,76081,694],{"class":214},[99,76083,1076],{"class":105},[99,76085,75934],{"class":158},[99,76087,76088],{"class":105},"{2}$",[99,76090,694],{"class":214},[99,76092,668],{"class":109},[99,76094,75226],{"class":1949},[99,76096,110],{"class":109},[99,76098,76036],{"class":214},[99,76100,75234],{"class":109},[99,76102,76103],{"class":168},"\u002F\u002Ftrue   可以选两个\n",[99,76105,76106,76108,76110,76112,76114,76116,76119,76121,76123,76125,76127,76129,76132,76134],{"class":101,"line":9810},[99,76107,73734],{"class":109},[99,76109,58228],{"class":1949},[99,76111,110],{"class":109},[99,76113,694],{"class":214},[99,76115,1076],{"class":105},[99,76117,76118],{"class":158},"[a-z]",[99,76120,412],{"class":105},[99,76122,694],{"class":214},[99,76124,668],{"class":109},[99,76126,75226],{"class":1949},[99,76128,110],{"class":109},[99,76130,76131],{"class":214},"'p'",[99,76133,75290],{"class":109},[99,76135,76136],{"class":168},"\u002F\u002Ftrue   依然只能选一个\n",[99,76138,76139,76141,76143,76145,76147,76149,76152,76154,76156,76158,76160,76162,76164,76166],{"class":101,"line":9831},[99,76140,73734],{"class":109},[99,76142,58228],{"class":1949},[99,76144,110],{"class":109},[99,76146,694],{"class":214},[99,76148,1076],{"class":105},[99,76150,76151],{"class":158},"[A-Z]",[99,76153,412],{"class":105},[99,76155,694],{"class":214},[99,76157,668],{"class":109},[99,76159,75226],{"class":1949},[99,76161,110],{"class":109},[99,76163,76131],{"class":214},[99,76165,75290],{"class":109},[99,76167,75360],{"class":168},[99,76169,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76195,76197],{"class":101,"line":9837},[99,76171,73734],{"class":109},[99,76173,58228],{"class":1949},[99,76175,110],{"class":109},[99,76177,694],{"class":214},[99,76179,1076],{"class":105},[99,76181,76151],{"class":158},[99,76183,412],{"class":105},[99,76185,694],{"class":214},[99,76187,668],{"class":109},[99,76189,75226],{"class":1949},[99,76191,110],{"class":109},[99,76193,76194],{"class":214},"'P'",[99,76196,75290],{"class":109},[99,76198,75237],{"class":168},[99,76200,76201,76203,76205,76207,76209,76211,76214,76216,76218,76220,76222,76224,76227,76229],{"class":101,"line":9851},[99,76202,73734],{"class":109},[99,76204,58228],{"class":1949},[99,76206,110],{"class":109},[99,76208,694],{"class":214},[99,76210,1076],{"class":105},[99,76212,76213],{"class":158},"[0-9]",[99,76215,412],{"class":105},[99,76217,694],{"class":214},[99,76219,668],{"class":109},[99,76221,75226],{"class":1949},[99,76223,110],{"class":109},[99,76225,76226],{"class":214},"'0'",[99,76228,75290],{"class":109},[99,76230,75237],{"class":168},[99,76232,76233,76235,76237,76239,76241,76243,76246,76248,76250,76252,76254,76256,76258,76260],{"class":101,"line":9857},[99,76234,73734],{"class":109},[99,76236,58228],{"class":1949},[99,76238,110],{"class":109},[99,76240,694],{"class":214},[99,76242,1076],{"class":105},[99,76244,76245],{"class":158},"[a-zA-Z0-9]",[99,76247,412],{"class":105},[99,76249,694],{"class":214},[99,76251,668],{"class":109},[99,76253,75226],{"class":1949},[99,76255,110],{"class":109},[99,76257,76131],{"class":214},[99,76259,75234],{"class":109},[99,76261,75237],{"class":168},[99,76263,76264,76266,76268],{"class":101,"line":9884},[99,76265,52398],{"class":109},[99,76267,51794],{"class":51281},[99,76269,51288],{"class":109},[99,76271,76272,76274,76276],{"class":101,"line":9893},[99,76273,51766],{"class":109},[99,76275,51781],{"class":51281},[99,76277,51288],{"class":109},[99,76279,76280],{"class":101,"line":9899},[99,76281,2386],{"emptyLinePlaceholder":26},[99,76283,76284,76286,76288],{"class":101,"line":9907},[99,76285,51766],{"class":109},[99,76287,50616],{"class":51281},[99,76289,51288],{"class":109},[21985,76291,76293],{"id":76292},"_3624-修饰符","3.6.2.4 修饰符",[14,76295,76296],{},[1448,76297],{"alt":21,"src":76298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76300,76301],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76303,76304],{},[1448,76305],{"alt":21,"src":76306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[90,76308,76310],{"className":50614,"code":76309,"language":50616,"meta":21,"style":21},"\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",[96,76311,76312,76322,76336,76344,76358,76378,76390,76398,76406,76414,76446,76477,76482,76514,76525,76558,76567,76575,76583],{"__ignoreMap":21},[99,76313,76314,76316,76318,76320],{"class":101,"line":102},[99,76315,51278],{"class":109},[99,76317,51282],{"class":51281},[99,76319,51285],{"class":1949},[99,76321,51288],{"class":109},[99,76323,76324,76326,76328,76330,76332,76334],{"class":101,"line":22},[99,76325,1020],{"class":109},[99,76327,50616],{"class":51281},[99,76329,51297],{"class":1949},[99,76331,155],{"class":109},[99,76333,51302],{"class":214},[99,76335,51288],{"class":109},[99,76337,76338,76340,76342],{"class":101,"line":1165},[99,76339,1020],{"class":109},[99,76341,51315],{"class":51281},[99,76343,51288],{"class":109},[99,76345,76346,76348,76350,76352,76354,76356],{"class":101,"line":1180},[99,76347,52125],{"class":109},[99,76349,51325],{"class":51281},[99,76351,51328],{"class":1949},[99,76353,155],{"class":109},[99,76355,51333],{"class":214},[99,76357,51288],{"class":109},[99,76359,76360,76362,76364,76366,76368,76370,76372,76374,76376],{"class":101,"line":1186},[99,76361,52125],{"class":109},[99,76363,51325],{"class":51281},[99,76365,14907],{"class":1949},[99,76367,155],{"class":109},[99,76369,51372],{"class":214},[99,76371,51352],{"class":1949},[99,76373,155],{"class":109},[99,76375,51379],{"class":214},[99,76377,51288],{"class":109},[99,76379,76380,76382,76384,76386,76388],{"class":101,"line":1200},[99,76381,52125],{"class":109},[99,76383,51388],{"class":51281},[99,76385,51391],{"class":109},[99,76387,51388],{"class":51281},[99,76389,51288],{"class":109},[99,76391,76392,76394,76396],{"class":101,"line":1206},[99,76393,51766],{"class":109},[99,76395,51315],{"class":51281},[99,76397,51288],{"class":109},[99,76399,76400,76402,76404],{"class":101,"line":1297},[99,76401,1020],{"class":109},[99,76403,51781],{"class":51281},[99,76405,51288],{"class":109},[99,76407,76408,76410,76412],{"class":101,"line":1303},[99,76409,52125],{"class":109},[99,76411,51794],{"class":51281},[99,76413,51288],{"class":109},[99,76415,76416,76418,76420,76422,76424,76426,76429,76431,76433,76435,76437,76439,76442,76444],{"class":101,"line":1315},[99,76417,73734],{"class":109},[99,76419,58228],{"class":1949},[99,76421,110],{"class":109},[99,76423,694],{"class":214},[99,76425,1076],{"class":105},[99,76427,76428],{"class":47958},"java",[99,76430,412],{"class":105},[99,76432,694],{"class":214},[99,76434,668],{"class":109},[99,76436,75226],{"class":1949},[99,76438,110],{"class":109},[99,76440,76441],{"class":214},"'java'",[99,76443,75736],{"class":109},[99,76445,75237],{"class":168},[99,76447,76448,76450,76452,76454,76456,76458,76460,76462,76464,76466,76468,76470,76473,76475],{"class":101,"line":1598},[99,76449,73734],{"class":109},[99,76451,58228],{"class":1949},[99,76453,110],{"class":109},[99,76455,694],{"class":214},[99,76457,1076],{"class":105},[99,76459,76428],{"class":47958},[99,76461,412],{"class":105},[99,76463,694],{"class":214},[99,76465,668],{"class":109},[99,76467,75226],{"class":1949},[99,76469,110],{"class":109},[99,76471,76472],{"class":214},"'Java'",[99,76474,75736],{"class":109},[99,76476,75360],{"class":168},[99,76478,76479],{"class":101,"line":1603},[99,76480,76481],{"class":168},"    \u002F\u002F 不区分大小写、\n",[99,76483,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506,76508,76510,76512],{"class":101,"line":1609},[99,76485,73734],{"class":109},[99,76487,58228],{"class":1949},[99,76489,110],{"class":109},[99,76491,694],{"class":214},[99,76493,1076],{"class":105},[99,76495,76428],{"class":47958},[99,76497,412],{"class":105},[99,76499,694],{"class":214},[99,76501,551],{"class":105},[99,76503,668],{"class":109},[99,76505,75226],{"class":1949},[99,76507,110],{"class":109},[99,76509,76472],{"class":214},[99,76511,75736],{"class":109},[99,76513,75237],{"class":168},[99,76515,76516,76518,76520,76522],{"class":101,"line":1614},[99,76517,11208],{"class":105},[99,76519,73900],{"class":158},[99,76521,13551],{"class":105},[99,76523,76524],{"class":214}," 'java是一门编程语言，学完java工资很高'\n",[99,76526,76527,76529,76532,76534,76537,76540,76542,76544,76546,76548,76551,76553,76556],{"class":101,"line":1628},[99,76528,11208],{"class":105},[99,76530,76531],{"class":158}," result",[99,76533,13551],{"class":105},[99,76535,76536],{"class":109}," str.",[99,76538,76539],{"class":1949},"replace",[99,76541,110],{"class":109},[99,76543,694],{"class":214},[99,76545,76428],{"class":47958},[99,76547,694],{"class":214},[99,76549,76550],{"class":105},"ig",[99,76552,12422],{"class":109},[99,76554,76555],{"class":214},"'前端'",[99,76557,116],{"class":109},[99,76559,76560,76562,76564],{"class":101,"line":1633},[99,76561,73734],{"class":109},[99,76563,58228],{"class":1949},[99,76565,76566],{"class":109},"(result)\n",[99,76568,76569,76571,76573],{"class":101,"line":1639},[99,76570,52398],{"class":109},[99,76572,51794],{"class":51281},[99,76574,51288],{"class":109},[99,76576,76577,76579,76581],{"class":101,"line":1660},[99,76578,51766],{"class":109},[99,76580,51781],{"class":51281},[99,76582,51288],{"class":109},[99,76584,76585,76587,76589],{"class":101,"line":1665},[99,76586,51766],{"class":109},[99,76588,50616],{"class":51281},[99,76590,51288],{"class":109},[5113,76592,76593],{},"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":21,"searchDepth":22,"depth":22,"links":76595},[76596,76606,76618,76635,76642,76650],{"id":53341,"depth":22,"text":53342,"children":76597},[76598,76599,76600,76601,76602,76603,76604,76605],{"id":53345,"depth":1165,"text":53346},{"id":53378,"depth":1165,"text":53379},{"id":53417,"depth":1165,"text":53418},{"id":53575,"depth":1165,"text":53576},{"id":53623,"depth":1165,"text":53624},{"id":53760,"depth":1165,"text":53761},{"id":54082,"depth":1165,"text":54083},{"id":57070,"depth":1165,"text":57071},{"id":57098,"depth":22,"text":57099,"children":76607},[76608,76609,76610,76611,76612,76613,76614,76615,76616,76617],{"id":57102,"depth":1165,"text":57103},{"id":57125,"depth":1165,"text":57126},{"id":58040,"depth":1165,"text":58041},{"id":58730,"depth":1165,"text":58731},{"id":59012,"depth":1165,"text":59013},{"id":63173,"depth":1165,"text":63174},{"id":63343,"depth":1165,"text":63344},{"id":63471,"depth":1165,"text":63472},{"id":63496,"depth":1165,"text":63497},{"id":64885,"depth":1165,"text":64886},{"id":66038,"depth":22,"text":66039,"children":76619},[76620,76621,76622,76623,76624,76625,76626,76627,76628,76629,76630,76631,76632,76633,76634],{"id":66042,"depth":1165,"text":66043},{"id":66696,"depth":1165,"text":66697},{"id":68391,"depth":1165,"text":68392},{"id":68432,"depth":1165,"text":68433},{"id":68474,"depth":1165,"text":68475},{"id":68488,"depth":1165,"text":68489},{"id":68537,"depth":1165,"text":68538},{"id":68549,"depth":1165,"text":68550},{"id":68564,"depth":1165,"text":68565},{"id":68600,"depth":1165,"text":68601},{"id":68681,"depth":1165,"text":68682},{"id":68809,"depth":1165,"text":68810},{"id":68821,"depth":1165,"text":68822},{"id":68840,"depth":1165,"text":68841},{"id":70951,"depth":1165,"text":70952},{"id":70970,"depth":22,"text":70971,"children":76636},[76637,76638,76639,76640,76641],{"id":70991,"depth":1165,"text":70992},{"id":71011,"depth":1165,"text":71012},{"id":71060,"depth":1165,"text":71061},{"id":71185,"depth":1165,"text":71186},{"id":71366,"depth":1165,"text":71367},{"id":71384,"depth":22,"text":71385,"children":76643},[76644,76645,76646,76647,76648,76649],{"id":71399,"depth":1165,"text":71400},{"id":71458,"depth":1165,"text":71459},{"id":71482,"depth":1165,"text":71483},{"id":71802,"depth":1165,"text":71803},{"id":71834,"depth":1165,"text":71835},{"id":71857,"depth":1165,"text":71858},{"id":74925,"depth":22,"text":74926,"children":76651},[76652,76653],{"id":74959,"depth":1165,"text":74960},{"id":74998,"depth":1165,"text":74999},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53313,"description":23364},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76660,"title":76661,"body":76662,"description":23364,"extension":24,"meta":92799,"navigation":26,"path":92800,"seo":92801,"stem":92802,"__hash__":92803},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76663,"toc":92735},[76664,76667,76670,76674,76678,76683,76688,76699,76703,76708,76711,76715,76718,76723,76727,76731,76734,76739,76742,76746,76749,76757,76760,76764,76769,76774,76777,76781,76786,76791,76794,76798,76803,76806,76811,76814,76819,76822,76827,76832,76835,76838,76842,76847,76852,76855,76859,76863,76866,76869,76872,76876,76880,76885,76890,76893,76897,76902,76907,76910,76913,76916,76919,76922,76925,76928,76931,76934,76939,76943,76948,76953,76956,76959,76962,76965,76968,76971,76974,76977,76981,76985,76988,76991,76994,76999,77001,77004,77007,77010,77013,77016,77019,77022,77025,77028,77031,77034,77037,77040,77045,77050,77055,77058,77062,77065,77070,77074,77076,77087,77092,77193,77196,77199,77202,77205,77208,77211,77214,77217,77219,77222,77225,77228,77231,77234,77236,77239,77242,77245,77248,77251,77254,77256,77259,77261,77263,77266,77270,77274,77277,77280,77283,77286,77289,77292,77295,77298,77301,77306,77426,77429,77432,77437,77440,77443,77446,77449,77454,77457,77460,77463,77466,77471,77474,77574,77639,77713,77717,77720,77723,77727,77730,77744,77773,77776,77779,77782,77785,77788,77791,77794,77796,77799,77802,77805,77808,77812,77817,77821,77826,77901,77904,78087,78090,78093,78096,78099,78102,78104,78107,78110,78113,78116,78119,78122,78124,78128,78131,78136,78139,78142,78145,78148,78150,78155,78158,78161,78164,78167,78169,78174,78177,78180,78182,78184,78187,78191,78194,78197,78202,78205,78208,78211,78261,78266,78270,78275,78278,78347,78350,78359,78363,78368,78371,78374,78382,78385,78402,80204,80208,80212,80217,80220,80224,80230,80236,80388,80393,80398,80401,80404,80407,80410,80413,80416,80419,80422,80425,80428,80431,80434,80439,80443,80446,80457,80461,80466,80469,80472,80475,80478,80481,80483,80486,80489,80492,80495,80497,80514,80517,80521,80524,80529,80534,80537,80540,80544,80547,80550,80559,80562,80566,80569,80574,80579,80646,80650,80653,80656,80661,80666,80752,80757,80761,80764,80767,80782,80785,80790,80794,80799,80908,80911,80922,81072,81076,81081,81190,81194,81199,81204,81209,81212,81219,81239,81275,81439,81444,81447,81452,81459,81462,81465,81468,81527,81583,81639,81643,81648,81963,81966,81970,81973,81978,82087,82092,82096,82101,82105,82176,82180,82182,82185,82188,82226,82502,82506,82523,82589,82623,82627,82630,82635,82664,82671,82680,82685,82700,82705,82714,82717,82854,82858,82920,82924,82929,83174,83178,83183,83186,83189,83192,83195,83199,83204,84785,84789,84793,84799,84802,84807,84811,84814,84819,84822,84833,84837,84842,84846,84851,84856,84859,84864,84868,84872,84875,84880,84885,84888,84891,84894,85016,85021,85123,85126,85129,85133,85138,85310,85315,85319,85322,85327,85393,85398,85401,85532,85535,85540,85543,85546,85637,85642,85645,85648,85651,85654,85659,85664,85667,85672,85677,85682,85686,85689,85692,85697,85702,85707,85712,85766,85769,85772,85777,85780,85783,85788,85793,85798,85802,85807,85821,85826,85829,85834,85838,85843,85848,85853,85858,85863,85868,85873,85878,85881,85885,85890,85893,85896,85899,85904,85909,85912,85915,85919,85922,85925,85930,85935,85940,85945,85948,85953,85958,86019,86024,86027,86032,87273,87278,87282,87286,87291,87294,87299,87304,87307,87312,87314,87319,87323,87326,87329,87340,87344,87349,87354,87409,87414,87419,87424,87635,87640,87644,87649,87652,87654,87657,87660,88107,88112,88119,88125,88128,88131,88395,88400,88404,88669,88674,88678,88683,88688,88693,88698,89029,89032,89037,89042,89045,89049,89053,89058,89063,89068,89073,89078,89083,89087,89090,89095,89100,89103,89177,89182,89187,89192,89194,89197,89567,89572,89577,89582,89585,89588,89690,89695,89700,89803,89807,89812,89816,89820,89825,89830,89833,89838,89841,89844,90237,90242,90245,90248,90251,90254,90774,90778,90783,90788,90793,90796,90801,90804,90807,91189,91194,91196,91198,91201,91204,91716,91720,91781,91784,91787,91790,91794,91797,91802,91807,92732],[10,76665,76661],{"id":76666},"_4js进阶",[14,76668,76669],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[41,76671,76673],{"id":76672},"_41-作用域","4.1 作用域",[70,76675,76677],{"id":76676},"_411-局部作用域","4.1.1 局部作用域",[14,76679,76680],{},[1448,76681],{"alt":21,"src":76682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76684,76685],{},[1448,76686],{"alt":21,"src":76687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1117,76689,76690,76693,76696],{},[56,76691,76692],{},"函数作用域在函数内部",[56,76694,76695],{},"块级作用域在{}",[56,76697,76698],{},"对象的那个{}不是作用域，不是块作用域",[70,76700,76702],{"id":76701},"_412-全局作用域","4.1.2 全局作用域",[14,76704,76705],{},[1448,76706],{"alt":21,"src":76707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76709,76710],{},"window.a=10不要这样写",[70,76712,76714],{"id":76713},"_413-作用域链","4.1.3 作用域链",[14,76716,76717],{},"变量查找机制",[14,76719,76720],{},[1448,76721],{"alt":21,"src":76722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[41,76724,76726],{"id":76725},"_42-垃圾回收机制","4.2 垃圾回收机制",[70,76728,76730],{"id":76729},"_421-大体介绍","4.2.1 大体介绍",[14,76732,76733],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76735,76736],{},[1448,76737],{"alt":21,"src":76738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76740,76741],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[70,76743,76745],{"id":76744},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76747,76748],{},"堆栈空间分配区别：",[53,76750,76751,76754],{},[56,76752,76753],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[56,76755,76756],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76758,76759],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21985,76761,76763],{"id":76762},"_4221-引用计数","4.2.2.1 引用计数",[14,76765,76766],{},[1448,76767],{"alt":21,"src":76768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76770,76771],{},[1448,76772],{"alt":21,"src":76773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76775,76776],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21985,76778,76780],{"id":76779},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76782,76783],{},[1448,76784],{"alt":21,"src":76785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76787,76788],{},[1448,76789],{"alt":21,"src":76790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76792,76793],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[41,76795,76797],{"id":76796},"_43-闭包","4.3 闭包",[14,76799,76800],{},[1448,76801],{"alt":21,"src":76802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76804,76805],{},"闭包：内层函数+外层函数的变量",[14,76807,76808],{},[1448,76809],{"alt":21,"src":76810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76812,76813],{},"closure就是闭包",[14,76815,76816],{},[1448,76817],{"alt":21,"src":76818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76820,76821],{},"内层函数必须包含外层函数的变量才是闭包",[14,76823,76824],{},[1448,76825],{"alt":21,"src":76826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76828,76829],{},[1448,76830],{"alt":21,"src":76831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76833,76834],{},"闭包可能会引起内存泄漏",[14,76836,76837],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[41,76839,76841],{"id":76840},"_44-变量提升","4.4 变量提升",[14,76843,76844],{},[1448,76845],{"alt":21,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76848,76849],{},[1448,76850],{"alt":21,"src":76851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76853,76854],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[41,76856,76858],{"id":76857},"_45-函数进阶","4.5 函数进阶",[70,76860,76862],{"id":76861},"_451-函数提升","4.5.1 函数提升",[14,76864,76865],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76867,76868],{},"只提升函数声明，不提升函数调用",[51794,76870,76871],{},"\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",[70,76873,76875],{"id":76874},"_452-函数参数","4.5.2 函数参数",[21985,76877,76879],{"id":76878},"_4521-动态参数","4.5.2.1 动态参数",[14,76881,76882],{},[1448,76883],{"alt":21,"src":76884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76886,76887],{},[1448,76888],{"alt":21,"src":76889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76891,76892],{},"箭头函数里边没有arguments",[21985,76894,76896],{"id":76895},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76898,76899],{},[1448,76900],{"alt":21,"src":76901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76903,76904],{},[1448,76905],{"alt":21,"src":76906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76908,76909],{},"剩余参数使用的时候不需要写...",[14,76911,76912],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76914,76915],{},"  function getSum(a,b,...arr) {",[14,76917,76918],{},"  console.log(11)",[14,76920,76921],{},"  }",[14,76923,76924],{},"  getSum(1,2,3,4)",[14,76926,76927],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76929,76930],{},"  getSum(1,2)",[14,76932,76933],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76935,76936],{},[1448,76937],{"alt":21,"src":76938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21985,76940,76942],{"id":76941},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76944,76945],{},[1448,76946],{"alt":21,"src":76947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76949,76950],{},[1448,76951],{"alt":21,"src":76952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76954,76955],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76957,76958],{},"展开运算符可以用于数组之间的合并：",[14,76960,76961],{},"const arr1 = [1, 2, 3]",[14,76963,76964],{},"const arr2 = [3, 4, 5]",[14,76966,76967],{},"const arr = [...arr1, ...arr2]",[14,76969,76970],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76972,76973],{},"剩余参数：函数参数使用，得到真数组",[14,76975,76976],{},"展开运算符：数组中使用，数组展开",[70,76978,76980],{"id":76979},"_453-箭头函数","4.5.3 箭头函数",[21985,76982,76984],{"id":76983},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,76986,76987],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,76989,76990],{},"它不是万能的！！！",[14,76992,76993],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,76995,76996],{},[1448,76997],{"alt":21,"src":76998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77000,139],{},[14,77002,77003],{},"① 只有一个形参的时候，可以省略小括号：",[14,77005,77006],{},"const fn=x=>{console.log(x)}",[14,77008,77009],{},"② 只有一行代码时可以省略大括号：",[14,77011,77012],{},"const fn=x=>console.log(11)",[14,77014,77015],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77017,77018],{},"const fn=x=>x+x",[14,77020,77021],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77023,77024],{},"⑤ 阻止表单默认提交：",[14,77026,77027],{},"const form = document.querySelector('form')",[14,77029,77030],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77032,77033],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77035,77036],{},"const fn=uname=>({uname:uname})",[14,77038,77039],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77041,77042],{},[1448,77043],{"alt":21,"src":77044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77046,77047],{},[1448,77048],{"alt":21,"src":77049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77051,77052],{},[1448,77053],{"alt":21,"src":77054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77056,77057],{},"一定不要忘记用()，有()就理解为自带return",[21985,77059,77061],{"id":77060},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77063,77064],{},"箭头函数是没有动态参数的arguments",[14,77066,77067],{},[1448,77068],{"alt":21,"src":77069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21985,77071,77073],{"id":77072},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77075,11319],{},[53,77077,77078,77081,77084],{},[56,77079,77080],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[56,77082,77083],{},"事件回调函数使用箭头函数时，this 为全局的 window",[56,77085,77086],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77088,77089],{},[1448,77090],{"alt":21,"src":77091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[90,77093,77095],{"className":53048,"code":77094,"language":53050,"meta":21,"style":21},"  \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",[96,77096,77097,77105,77110,77115,77120,77125,77130,77134,77139,77143,77147,77152,77157,77162,77166,77170,77175,77180,77185],{"__ignoreMap":21},[99,77098,77099,77101,77103],{"class":101,"line":102},[99,77100,52125],{"class":109},[99,77102,51794],{"class":51281},[99,77104,51288],{"class":109},[99,77106,77107],{"class":101,"line":22},[99,77108,77109],{"class":109},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[99,77111,77112],{"class":101,"line":1165},[99,77113,77114],{"class":109},"    console.log(this) \u002F\u002F指向window\n",[99,77116,77117],{"class":101,"line":1180},[99,77118,77119],{"class":109},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[99,77121,77122],{"class":101,"line":1186},[99,77123,77124],{"class":109},"    function fn() {\n",[99,77126,77127],{"class":101,"line":1200},[99,77128,77129],{"class":109},"      console.log(this)  \u002F\u002F指向window\n",[99,77131,77132],{"class":101,"line":1206},[99,77133,2173],{"class":109},[99,77135,77136],{"class":101,"line":1297},[99,77137,77138],{"class":109},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[99,77140,77141],{"class":101,"line":1303},[99,77142,2386],{"emptyLinePlaceholder":26},[99,77144,77145],{"class":101,"line":1315},[99,77146,71504],{"class":109},[99,77148,77149],{"class":101,"line":1598},[99,77150,77151],{"class":109},"      name: 'andy',\n",[99,77153,77154],{"class":101,"line":1603},[99,77155,77156],{"class":109},"      sayHai: function () {\n",[99,77158,77159],{"class":101,"line":1609},[99,77160,77161],{"class":109},"        console.log(this)\n",[99,77163,77164],{"class":101,"line":1614},[99,77165,52379],{"class":109},[99,77167,77168],{"class":101,"line":1628},[99,77169,2173],{"class":109},[99,77171,77172],{"class":101,"line":1633},[99,77173,77174],{"class":109},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[99,77176,77177],{"class":101,"line":1639},[99,77178,77179],{"class":109},"    \u002F\u002F 2.箭头函数的this\n",[99,77181,77182],{"class":101,"line":1660},[99,77183,77184],{"class":109},"    const fn = () => console.log(this)\n",[99,77186,77187,77189,77191],{"class":101,"line":1665},[99,77188,52398],{"class":109},[99,77190,51794],{"class":51281},[99,77192,51288],{"class":109},[14,77194,77195],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77197,77198],{},"const fn = () => console.log(this)",[14,77200,77201],{},"fn() \u002F\u002F指向window",[14,77203,77204],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77206,77207],{},"①",[14,77209,77210],{},"const obj = {",[14,77212,77213],{},"uname: 'pink老师',",[14,77215,77216],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77218,1056],{},[14,77220,77221],{},"调用对象里边的函数",[14,77223,77224],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77226,77227],{},"obj.sayHai()",[14,77229,77230],{},"②",[14,77232,77233],{},"const obj1 = {",[14,77235,77213],{},[14,77237,77238],{},"sayHai: function () {",[14,77240,77241],{},"let i = 10",[14,77243,77244],{},"const count = () => {",[14,77246,77247],{},"console.log(this)",[14,77249,77250],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77252,77253],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77255,1056],{},[14,77257,77258],{},"count()",[14,77260,1056],{},[14,77262,1056],{},[14,77264,77265],{},"obj1.sayHai()",[41,77267,77269],{"id":77268},"_46-解构赋值","4.6 解构赋值",[70,77271,77273],{"id":77272},"_461-数组解构","4.6.1 数组解构",[14,77275,77276],{},"以前要是使用数组中的值的话：",[14,77278,77279],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77281,77282],{},"const arr=[100,60,80]",[14,77284,77285],{},"const max=arr[0]",[14,77287,77288],{},"const min=arr[1]",[14,77290,77291],{},"const avg=arr[2]",[14,77293,77294],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77296,77297],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77299,77300],{},"这个写法就类似于上边的那种用很多const的方法",[14,77302,77303],{},[1448,77304],{"alt":21,"src":77305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[90,77307,77309],{"className":50614,"code":77308,"language":50616,"meta":21,"style":21},"①变量之间交换值:\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",[96,77310,77311,77316,77321,77326,77331,77336,77340,77344,77349,77353,77358,77363,77367,77372,77377,77388,77398,77403,77408,77413,77417,77421],{"__ignoreMap":21},[99,77312,77313],{"class":101,"line":102},[99,77314,77315],{"class":109},"①变量之间交换值:\n",[99,77317,77318],{"class":101,"line":22},[99,77319,77320],{"class":109},"let a=1\n",[99,77322,77323],{"class":101,"line":1165},[99,77324,77325],{"class":109},"let b=2;\n",[99,77327,77328],{"class":101,"line":1180},[99,77329,77330],{"class":109},"必须加这行代码，不然就会报错\n",[99,77332,77333],{"class":101,"line":1186},[99,77334,77335],{"class":109},"[b,a]=[a,b]\n",[99,77337,77338],{"class":101,"line":1200},[99,77339,2386],{"emptyLinePlaceholder":26},[99,77341,77342],{"class":101,"line":1206},[99,77343,2386],{"emptyLinePlaceholder":26},[99,77345,77346],{"class":101,"line":1297},[99,77347,77348],{"class":109},"可以写成下面的方式：\n",[99,77350,77351],{"class":101,"line":1303},[99,77352,77320],{"class":109},[99,77354,77355],{"class":101,"line":1315},[99,77356,77357],{"class":109},"let b=2\n",[99,77359,77360],{"class":101,"line":1598},[99,77361,77362],{"class":109},";[b,a]=[a,b]\n",[99,77364,77365],{"class":101,"line":1603},[99,77366,2386],{"emptyLinePlaceholder":26},[99,77368,77369],{"class":101,"line":1609},[99,77370,77371],{"class":109},"②排序\n",[99,77373,77374],{"class":101,"line":1614},[99,77375,77376],{"class":109},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[99,77378,77379,77382,77385],{"class":101,"line":1628},[99,77380,77381],{"class":109},"for (let i = 0; i ",[99,77383,1020],{"class":77384},"s7hpK",[99,77386,77387],{"class":109}," arr1.length; i++) {\n",[99,77389,77390,77393,77395],{"class":101,"line":1633},[99,77391,77392],{"class":109},"   for (let j = 0; j ",[99,77394,1020],{"class":77384},[99,77396,77397],{"class":109}," arr1.length - 1; j++) {\n",[99,77399,77400],{"class":101,"line":1639},[99,77401,77402],{"class":109},"      if (arr1[j] > arr1[j + 1]) {\n",[99,77404,77405],{"class":101,"line":1660},[99,77406,77407],{"class":109},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[99,77409,77410],{"class":101,"line":1665},[99,77411,77412],{"class":109},"       }\n",[99,77414,77415],{"class":101,"line":1679},[99,77416,4295],{"class":109},[99,77418,77419],{"class":101,"line":1684},[99,77420,1551],{"class":109},[99,77422,77423],{"class":101,"line":1713},[99,77424,77425],{"class":109},"console.log(arr1)\n",[14,77427,77428],{},"数组解构的细节：",[14,77430,77431],{},"①变量多，单元值少",[14,77433,77434],{},[1448,77435],{"alt":21,"src":77436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77438,77439],{},"防止出现undefined的方法：",[14,77441,77442],{},"const [a=0,b=0] =[1]",[14,77444,77445],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77447,77448],{},"②变量少，单元值多",[14,77450,77451],{},[1448,77452],{"alt":21,"src":77453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77455,77456],{},"此时可以使用剩余参数来接收多余的值",[14,77458,77459],{},"const [a,b,...c]=[1,2,3,4]",[14,77461,77462],{},"console.log(c) 输出[3,4]",[14,77464,77465],{},"③可以按需导入，忽略某些返回值",[14,77467,77468],{},[1448,77469],{"alt":21,"src":77470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77472,77473],{},"④支持多维数组的结构",[90,77475,77479],{"className":77476,"code":77477,"language":77478,"meta":21,"style":21},"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",[96,77480,77481,77509,77525,77540,77555],{"__ignoreMap":21},[99,77482,77483,77485,77487,77489,77491,77493,77495,77497,77500,77502,77504,77506],{"class":101,"line":102},[99,77484,6779],{"class":105},[99,77486,51814],{"class":109},[99,77488,155],{"class":105},[99,77490,52207],{"class":109},[99,77492,327],{"class":158},[99,77494,12422],{"class":109},[99,77496,187],{"class":158},[99,77498,77499],{"class":109},", [",[99,77501,181],{"class":158},[99,77503,12422],{"class":109},[99,77505,403],{"class":158},[99,77507,77508],{"class":109},"]]\n",[99,77510,77511,77514,77516,77518,77520,77522],{"class":101,"line":22},[99,77512,77513],{"class":109},"console.",[99,77515,58228],{"class":1949},[99,77517,3837],{"class":109},[99,77519,301],{"class":158},[99,77521,4202],{"class":109},[99,77523,77524],{"class":168},"  \u002F\u002F1\n",[99,77526,77527,77529,77531,77533,77535,77537],{"class":101,"line":1165},[99,77528,77513],{"class":109},[99,77530,58228],{"class":1949},[99,77532,3837],{"class":109},[99,77534,327],{"class":158},[99,77536,4202],{"class":109},[99,77538,77539],{"class":168},"  \u002F\u002F2\n",[99,77541,77542,77544,77546,77548,77550,77552],{"class":101,"line":1180},[99,77543,77513],{"class":109},[99,77545,58228],{"class":1949},[99,77547,3837],{"class":109},[99,77549,187],{"class":158},[99,77551,4202],{"class":109},[99,77553,77554],{"class":168},"  \u002F\u002F[3,4]\n",[99,77556,77557,77559,77561,77563,77565,77567,77569,77571],{"class":101,"line":1186},[99,77558,77513],{"class":109},[99,77560,58228],{"class":1949},[99,77562,3837],{"class":109},[99,77564,187],{"class":158},[99,77566,4887],{"class":109},[99,77568,301],{"class":158},[99,77570,4202],{"class":109},[99,77572,77573],{"class":168},"  \u002F\u002F3\n",[90,77575,77577],{"className":77476,"code":77576,"language":77478,"meta":21,"style":21},"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",[96,77578,77579,77606,77617,77628],{"__ignoreMap":21},[99,77580,77581,77583,77586,77588,77590,77592,77594,77596,77598,77600,77602,77604],{"class":101,"line":102},[99,77582,6779],{"class":105},[99,77584,77585],{"class":109}," [a, b, c] ",[99,77587,155],{"class":105},[99,77589,52207],{"class":109},[99,77591,327],{"class":158},[99,77593,12422],{"class":109},[99,77595,187],{"class":158},[99,77597,77499],{"class":109},[99,77599,181],{"class":158},[99,77601,12422],{"class":109},[99,77603,403],{"class":158},[99,77605,77508],{"class":109},[99,77607,77608,77610,77612,77615],{"class":101,"line":22},[99,77609,77513],{"class":109},[99,77611,58228],{"class":1949},[99,77613,77614],{"class":109},"(a)",[99,77616,77524],{"class":168},[99,77618,77619,77621,77623,77626],{"class":101,"line":1165},[99,77620,77513],{"class":109},[99,77622,58228],{"class":1949},[99,77624,77625],{"class":109},"(b)",[99,77627,77539],{"class":168},[99,77629,77630,77632,77634,77637],{"class":101,"line":1180},[99,77631,77513],{"class":109},[99,77633,58228],{"class":1949},[99,77635,77636],{"class":109},"(c)",[99,77638,77554],{"class":168},[90,77640,77642],{"className":77476,"code":77641,"language":77478,"meta":21,"style":21},"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",[96,77643,77644,77671,77681,77691,77701],{"__ignoreMap":21},[99,77645,77646,77648,77651,77653,77655,77657,77659,77661,77663,77665,77667,77669],{"class":101,"line":102},[99,77647,6779],{"class":105},[99,77649,77650],{"class":109}," [a, b, [c, d]] ",[99,77652,155],{"class":105},[99,77654,52207],{"class":109},[99,77656,327],{"class":158},[99,77658,12422],{"class":109},[99,77660,187],{"class":158},[99,77662,77499],{"class":109},[99,77664,181],{"class":158},[99,77666,12422],{"class":109},[99,77668,403],{"class":158},[99,77670,77508],{"class":109},[99,77672,77673,77675,77677,77679],{"class":101,"line":22},[99,77674,77513],{"class":109},[99,77676,58228],{"class":1949},[99,77678,77614],{"class":109},[99,77680,77524],{"class":168},[99,77682,77683,77685,77687,77689],{"class":101,"line":1165},[99,77684,77513],{"class":109},[99,77686,58228],{"class":1949},[99,77688,77625],{"class":109},[99,77690,77539],{"class":168},[99,77692,77693,77695,77697,77699],{"class":101,"line":1180},[99,77694,77513],{"class":109},[99,77696,58228],{"class":1949},[99,77698,77636],{"class":109},[99,77700,77573],{"class":168},[99,77702,77703,77705,77707,77710],{"class":101,"line":1186},[99,77704,77513],{"class":109},[99,77706,58228],{"class":1949},[99,77708,77709],{"class":109},"(d)",[99,77711,77712],{"class":168},"  \u002F\u002F4\n",[70,77714,77716],{"id":77715},"_462-对象解构","4.6.2 对象解构",[14,77718,77719],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77721,77722],{},"用的非常非常多！！！！！！",[21985,77724,77726],{"id":77725},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77728,77729],{},"基本语法：",[53,77731,77732,77735,77738,77741],{},[56,77733,77734],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[56,77736,77737],{},"对象属性的值将被赋值给与属性名相同的变量",[56,77739,77740],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[56,77742,77743],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[90,77745,77747],{"className":50614,"code":77746,"language":50616,"meta":21,"style":21},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[96,77748,77749,77754,77759,77764,77768],{"__ignoreMap":21},[99,77750,77751],{"class":101,"line":102},[99,77752,77753],{"class":109},"const obj = {\n",[99,77755,77756],{"class":101,"line":22},[99,77757,77758],{"class":109},"   uname: 'pink老师',\n",[99,77760,77761],{"class":101,"line":1165},[99,77762,77763],{"class":109},"   age: 18,\n",[99,77765,77766],{"class":101,"line":1180},[99,77767,1551],{"class":109},[99,77769,77770],{"class":101,"line":1186},[99,77771,77772],{"class":109},"const { uname, age } = obj\n",[14,77774,77775],{},"上方代码这样写等价于：",[14,77777,77778],{},"const uname等价于obj.uname",[14,77780,77781],{},"变量名可以重新改名：",[14,77783,77784],{},"const uname='red老师'",[14,77786,77787],{},"const user={",[14,77789,77790],{},"  uname:'pink老师',",[14,77792,77793],{},"  age:18",[14,77795,1056],{},[14,77797,77798],{},"const {uname,age}=user",[14,77800,77801],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77803,77804],{},"const {旧变量名：新变量名}=对象",[14,77806,77807],{},"const {uname:username,age}=user",[21985,77809,77811],{"id":77810},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77813,77814],{},[1448,77815],{"alt":21,"src":77816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21985,77818,77820],{"id":77819},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77822,77823],{},[1448,77824],{"alt":21,"src":77825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[90,77827,77829],{"className":53048,"code":77828,"language":53050,"meta":21,"style":21},"  \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",[96,77830,77831,77839,77844,77849,77854,77859,77864,77869,77874,77879,77883,77888,77893],{"__ignoreMap":21},[99,77832,77833,77835,77837],{"class":101,"line":102},[99,77834,52125],{"class":109},[99,77836,51794],{"class":51281},[99,77838,51288],{"class":109},[99,77840,77841],{"class":101,"line":22},[99,77842,77843],{"class":109},"    const pig = {\n",[99,77845,77846],{"class":101,"line":1165},[99,77847,77848],{"class":109},"      name: '佩奇',\n",[99,77850,77851],{"class":101,"line":1180},[99,77852,77853],{"class":109},"      family: {\n",[99,77855,77856],{"class":101,"line":1186},[99,77857,77858],{"class":109},"        mother: '猪妈妈',\n",[99,77860,77861],{"class":101,"line":1200},[99,77862,77863],{"class":109},"        father: '猪爸爸',\n",[99,77865,77866],{"class":101,"line":1206},[99,77867,77868],{"class":109},"        sister: '乔治'\n",[99,77870,77871],{"class":101,"line":1297},[99,77872,77873],{"class":109},"      },\n",[99,77875,77876],{"class":101,"line":1303},[99,77877,77878],{"class":109},"      age: 6\n",[99,77880,77881],{"class":101,"line":1315},[99,77882,2173],{"class":109},[99,77884,77885],{"class":101,"line":1598},[99,77886,77887],{"class":109},"    \u002F\u002F 多级对象解构\n",[99,77889,77890],{"class":101,"line":1603},[99,77891,77892],{"class":109},"    const { name, family: { mother, father, sister }, age } = pig\n",[99,77894,77895,77897,77899],{"class":101,"line":1609},[99,77896,52398],{"class":109},[99,77898,51794],{"class":51281},[99,77900,51288],{"class":109},[14,77902,77903],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[90,77905,77908],{"className":77906,"code":77907,"language":76428,"meta":21,"style":21},"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",[96,77909,77910,77915,77926,77938,77950,77959,77963,77974,77986,77996,78001,78005,78015,78026,78035,78039,78043,78054,78065,78074,78078,78083],{"__ignoreMap":21},[99,77911,77912],{"class":101,"line":102},[99,77913,77914],{"class":168},"    \u002F\u002F 这是后台传递过来的数据\n",[99,77916,77917,77919,77922,77924],{"class":101,"line":22},[99,77918,11208],{"class":105},[99,77920,77921],{"class":109}," msg ",[99,77923,155],{"class":105},[99,77925,15559],{"class":109},[99,77927,77928,77931,77933,77936],{"class":101,"line":1165},[99,77929,77930],{"class":214},"      \"code\"",[99,77932,969],{"class":105},[99,77934,77935],{"class":158}," 200",[99,77937,31447],{"class":109},[99,77939,77940,77943,77945,77948],{"class":101,"line":1180},[99,77941,77942],{"class":214},"      \"msg\"",[99,77944,969],{"class":105},[99,77946,77947],{"class":214}," \"获取新闻列表成功\"",[99,77949,31447],{"class":109},[99,77951,77952,77955,77957],{"class":101,"line":1186},[99,77953,77954],{"class":214},"      \"data\"",[99,77956,969],{"class":105},[99,77958,55428],{"class":109},[99,77960,77961],{"class":101,"line":1200},[99,77962,2496],{"class":109},[99,77964,77965,77968,77970,77972],{"class":101,"line":1206},[99,77966,77967],{"class":214},"          \"id\"",[99,77969,969],{"class":105},[99,77971,25107],{"class":158},[99,77973,31447],{"class":109},[99,77975,77976,77979,77981,77984],{"class":101,"line":1297},[99,77977,77978],{"class":214},"          \"title\"",[99,77980,969],{"class":105},[99,77982,77983],{"class":214}," \"5G商用自己，三大运用商收入下降\"",[99,77985,31447],{"class":109},[99,77987,77988,77991,77993],{"class":101,"line":1303},[99,77989,77990],{"class":214},"          \"count\"",[99,77992,969],{"class":105},[99,77994,77995],{"class":158}," 58\n",[99,77997,77998],{"class":101,"line":1315},[99,77999,78000],{"class":109},"        },\n",[99,78002,78003],{"class":101,"line":1598},[99,78004,2496],{"class":109},[99,78006,78007,78009,78011,78013],{"class":101,"line":1603},[99,78008,77967],{"class":214},[99,78010,969],{"class":105},[99,78012,14742],{"class":158},[99,78014,31447],{"class":109},[99,78016,78017,78019,78021,78024],{"class":101,"line":1609},[99,78018,77978],{"class":214},[99,78020,969],{"class":105},[99,78022,78023],{"class":214}," \"国际媒体头条速览\"",[99,78025,31447],{"class":109},[99,78027,78028,78030,78032],{"class":101,"line":1614},[99,78029,77990],{"class":214},[99,78031,969],{"class":105},[99,78033,78034],{"class":158}," 56\n",[99,78036,78037],{"class":101,"line":1628},[99,78038,78000],{"class":109},[99,78040,78041],{"class":101,"line":1633},[99,78042,2496],{"class":109},[99,78044,78045,78047,78049,78052],{"class":101,"line":1639},[99,78046,77967],{"class":214},[99,78048,969],{"class":105},[99,78050,78051],{"class":158}," 3",[99,78053,31447],{"class":109},[99,78055,78056,78058,78060,78063],{"class":101,"line":1660},[99,78057,77978],{"class":214},[99,78059,969],{"class":105},[99,78061,78062],{"class":214}," \"乌克兰和俄罗斯持续冲突\"",[99,78064,31447],{"class":109},[99,78066,78067,78069,78071],{"class":101,"line":1665},[99,78068,77990],{"class":214},[99,78070,969],{"class":105},[99,78072,78073],{"class":158}," 1669\n",[99,78075,78076],{"class":101,"line":1679},[99,78077,78000],{"class":109},[99,78079,78080],{"class":101,"line":1684},[99,78081,78082],{"class":109},"      ]\n",[99,78084,78085],{"class":101,"line":1713},[99,78086,2173],{"class":109},[14,78088,78089],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78091,78092],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78094,78095],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78097,78098],{},"function({data}) {",[14,78100,78101],{},"console.log(data)",[14,78103,1056],{},[14,78105,78106],{},"render(msg)",[14,78108,78109],{},"实参传递给形参的时候解构了",[14,78111,78112],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78114,78115],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78117,78118],{},"function render({data:mydata}) {",[14,78120,78121],{},"  console.log(data)",[14,78123,1056],{},[70,78125,78127],{"id":78126},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78129,78130],{},"有两种情况：一个是数组结构，一个是立即执行函数",[53,78132,78133],{},[56,78134,78135],{},"如果对一个数组进行遍历，有两种方式：",[14,78137,78138],{},"①法1",[14,78140,78141],{},"const arr=[1,2,3]",[14,78143,78144],{},"arr.map(function(item,index) {",[14,78146,78147],{},"  console.log(item)",[14,78149,52445],{},[14,78151,78152],{},[1448,78153],{"alt":21,"src":78154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78156,78157],{},"②法2",[14,78159,78160],{},"const str='pink'",[14,78162,78163],{},"[1,2,3].map(function(item,index) {",[14,78165,78166],{},"console.log(item)",[14,78168,52445],{},[14,78170,78171],{},[1448,78172],{"alt":21,"src":78173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78175,78176],{},"此时会报错",[14,78178,78179],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78181,78166],{},[14,78183,52445],{},[14,78185,78186],{},"内部会当成这样处理，所以我们用分号进行隔开",[41,78188,78190],{"id":78189},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78192,78193],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78195,78196],{},"可以理解为加强版的for循环",[14,78198,78199],{},[1448,78200],{"alt":21,"src":78201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78203,78204],{},"里边不写return，不返回数组，只遍历不返回",[14,78206,78207],{},"map是返回数组",[14,78209,78210],{},"forEach主要用于遍历数组对象",[90,78212,78214],{"className":53048,"code":78213,"language":53050,"meta":21,"style":21},"  \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",[96,78215,78216,78224,78229,78234,78239,78244,78248,78253],{"__ignoreMap":21},[99,78217,78218,78220,78222],{"class":101,"line":102},[99,78219,52125],{"class":109},[99,78221,51794],{"class":51281},[99,78223,51288],{"class":109},[99,78225,78226],{"class":101,"line":22},[99,78227,78228],{"class":109},"    const arr = ['red', 'green', 'pink']\n",[99,78230,78231],{"class":101,"line":1165},[99,78232,78233],{"class":109},"    const result = arr.forEach(function (item, index) {\n",[99,78235,78236],{"class":101,"line":1180},[99,78237,78238],{"class":109},"      console.log(item)\n",[99,78240,78241],{"class":101,"line":1186},[99,78242,78243],{"class":109},"      console.log(index)\n",[99,78245,78246],{"class":101,"line":1200},[99,78247,33442],{"class":109},[99,78249,78250],{"class":101,"line":1206},[99,78251,78252],{"class":109},"    console.log(result)\n",[99,78254,78255,78257,78259],{"class":101,"line":1297},[99,78256,52398],{"class":109},[99,78258,51794],{"class":51281},[99,78260,51288],{"class":109},[14,78262,78263],{},[1448,78264],{"alt":21,"src":78265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[41,78267,78269],{"id":78268},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78271,78272],{},[1448,78273],{"alt":21,"src":78274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78276,78277],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[90,78279,78281],{"className":53048,"code":78280,"language":53050,"meta":21,"style":21},"\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",[96,78282,78283,78291,78299,78304,78309,78313,78317,78322,78326,78331,78339],{"__ignoreMap":21},[99,78284,78285,78287,78289],{"class":101,"line":102},[99,78286,1020],{"class":109},[99,78288,51781],{"class":51281},[99,78290,51288],{"class":109},[99,78292,78293,78295,78297],{"class":101,"line":22},[99,78294,52125],{"class":109},[99,78296,51794],{"class":51281},[99,78298,51288],{"class":109},[99,78300,78301],{"class":101,"line":1165},[99,78302,78303],{"class":109},"    const arr = [10, 20, 30]\n",[99,78305,78306],{"class":101,"line":1180},[99,78307,78308],{"class":109},"    const newArr = arr.filter(function (item, index) {\n",[99,78310,78311],{"class":101,"line":1186},[99,78312,78238],{"class":109},[99,78314,78315],{"class":101,"line":1200},[99,78316,78243],{"class":109},[99,78318,78319],{"class":101,"line":1206},[99,78320,78321],{"class":109},"      return item >= 20\n",[99,78323,78324],{"class":101,"line":1297},[99,78325,33442],{"class":109},[99,78327,78328],{"class":101,"line":1303},[99,78329,78330],{"class":109},"    console.log(newArr)\n",[99,78332,78333,78335,78337],{"class":101,"line":1315},[99,78334,52398],{"class":109},[99,78336,51794],{"class":51281},[99,78338,51288],{"class":109},[99,78340,78341,78343,78345],{"class":101,"line":1598},[99,78342,51766],{"class":109},[99,78344,51781],{"class":51281},[99,78346,51288],{"class":109},[14,78348,78349],{},"这个也可以写成箭头函数：",[90,78351,78353],{"className":50614,"code":78352,"language":50616,"meta":21,"style":21},"const newArr = arr.filter(item => item >= 20)\n",[96,78354,78355],{"__ignoreMap":21},[99,78356,78357],{"class":101,"line":102},[99,78358,78352],{"class":109},[41,78360,78362],{"id":78361},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78364,78365],{},[1448,78366],{"alt":21,"src":78367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78369,78370],{},"步骤：",[14,78372,78373],{},"①：渲染页面模块",[1117,78375,78376,78379],{},[56,78377,78378],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[56,78380,78381],{},"用forEach+字符串的形式",[14,78383,78384],{},"②：点击不同需求，显示不同页面内容",[1117,78386,78387,78390,78393,78396,78399],{},[56,78388,78389],{},"点击采取事件委托方式 .filter",[56,78391,78392],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[56,78394,78395],{},"筛选条件是根据点击的 data-index 来判断",[56,78397,78398],{},"可以使用对象解构，把事件对象解构",[56,78400,78401],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[90,78403,78405],{"className":50614,"code":78404,"language":50616,"meta":21,"style":21},"\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",[96,78406,78407,78417,78431,78435,78443,78457,78477,78489,78497,78503,78513,78523,78533,78537,78541,78547,78560,78572,78582,78594,78598,78602,78609,78622,78634,78651,78669,78682,78686,78690,78702,78712,78716,78720,78727,78768,78795,78805,78809,78813,78821,78833,78837,78841,78849,78861,78873,78884,78888,78892,78901,78913,78924,78928,78932,78941,78953,78965,78969,78973,78980,78990,79002,79014,79029,79033,79037,79045,79061,79071,79081,79091,79103,79107,79111,79121,79132,79142,79146,79154,79162,79166,79174,79189,79215,79240,79265,79284,79292,79306,79311,79316,79321,79326,79331,79339,79347,79352,79363,79368,79378,79388,79398,79408,79412,79416,79425,79434,79443,79452,79456,79460,79469,79478,79487,79496,79500,79504,79513,79522,79531,79540,79544,79548,79557,79566,79575,79584,79588,79592,79601,79610,79619,79628,79632,79636,79645,79654,79663,79672,79676,79680,79689,79698,79706,79715,79719,79723,79727,79732,79744,79749,79761,79765,79782,79810,79819,79824,79834,79844,79853,79858,79863,79867,79872,79889,79893,79898,79906,79911,79938,79943,79963,79968,79980,79985,79990,79995,80006,80020,80057,80075,80108,80125,80149,80153,80158,80164,80168,80172,80176,80184,80192,80196],{"__ignoreMap":21},[99,78408,78409,78411,78413,78415],{"class":101,"line":102},[99,78410,51278],{"class":109},[99,78412,51282],{"class":51281},[99,78414,51285],{"class":1949},[99,78416,51288],{"class":109},[99,78418,78419,78421,78423,78425,78427,78429],{"class":101,"line":22},[99,78420,1020],{"class":109},[99,78422,50616],{"class":51281},[99,78424,51297],{"class":1949},[99,78426,155],{"class":109},[99,78428,51302],{"class":214},[99,78430,51288],{"class":109},[99,78432,78433],{"class":101,"line":1165},[99,78434,2386],{"emptyLinePlaceholder":26},[99,78436,78437,78439,78441],{"class":101,"line":1180},[99,78438,1020],{"class":109},[99,78440,51315],{"class":51281},[99,78442,51288],{"class":109},[99,78444,78445,78447,78449,78451,78453,78455],{"class":101,"line":1186},[99,78446,52125],{"class":109},[99,78448,51325],{"class":51281},[99,78450,51328],{"class":1949},[99,78452,155],{"class":109},[99,78454,51333],{"class":214},[99,78456,51288],{"class":109},[99,78458,78459,78461,78463,78465,78467,78469,78471,78473,78475],{"class":101,"line":1200},[99,78460,52125],{"class":109},[99,78462,51325],{"class":51281},[99,78464,14907],{"class":1949},[99,78466,155],{"class":109},[99,78468,51372],{"class":214},[99,78470,51352],{"class":1949},[99,78472,155],{"class":109},[99,78474,51379],{"class":214},[99,78476,51288],{"class":109},[99,78478,78479,78481,78483,78485,78487],{"class":101,"line":1206},[99,78480,52125],{"class":109},[99,78482,51388],{"class":51281},[99,78484,51391],{"class":109},[99,78486,51388],{"class":51281},[99,78488,51288],{"class":109},[99,78490,78491,78493,78495],{"class":101,"line":1297},[99,78492,52125],{"class":109},[99,78494,5113],{"class":51281},[99,78496,51288],{"class":109},[99,78498,78499,78501],{"class":101,"line":1303},[99,78500,6390],{"class":51281},[99,78502,15559],{"class":109},[99,78504,78505,78507,78509,78511],{"class":101,"line":1315},[99,78506,54676],{"class":158},[99,78508,51418],{"class":109},[99,78510,301],{"class":158},[99,78512,1276],{"class":109},[99,78514,78515,78517,78519,78521],{"class":101,"line":1598},[99,78516,54687],{"class":158},[99,78518,51418],{"class":109},[99,78520,301],{"class":158},[99,78522,1276],{"class":109},[99,78524,78525,78527,78529,78531],{"class":101,"line":1603},[99,78526,72577],{"class":158},[99,78528,51418],{"class":109},[99,78530,60486],{"class":158},[99,78532,1276],{"class":109},[99,78534,78535],{"class":101,"line":1609},[99,78536,2173],{"class":109},[99,78538,78539],{"class":101,"line":1614},[99,78540,2386],{"emptyLinePlaceholder":26},[99,78542,78543,78545],{"class":101,"line":1628},[99,78544,62104],{"class":1949},[99,78546,15559],{"class":109},[99,78548,78549,78551,78553,78556,78558],{"class":101,"line":1633},[99,78550,54752],{"class":158},[99,78552,51418],{"class":109},[99,78554,78555],{"class":158},"990",[99,78557,51473],{"class":105},[99,78559,1276],{"class":109},[99,78561,78562,78564,78566,78568,78570],{"class":101,"line":1639},[99,78563,54687],{"class":158},[99,78565,51418],{"class":109},[99,78567,301],{"class":158},[99,78569,51537],{"class":158},[99,78571,1276],{"class":109},[99,78573,78574,78576,78578,78580],{"class":101,"line":1660},[99,78575,54990],{"class":158},[99,78577,51418],{"class":109},[99,78579,51458],{"class":158},[99,78581,1276],{"class":109},[99,78583,78584,78587,78589,78592],{"class":101,"line":1665},[99,78585,78586],{"class":158},"      flex-wrap",[99,78588,51418],{"class":109},[99,78590,78591],{"class":158},"wrap",[99,78593,1276],{"class":109},[99,78595,78596],{"class":101,"line":1679},[99,78597,2173],{"class":109},[99,78599,78600],{"class":101,"line":1684},[99,78601,2386],{"emptyLinePlaceholder":26},[99,78603,78604,78607],{"class":101,"line":1713},[99,78605,78606],{"class":1949},"    .item",[99,78608,15559],{"class":109},[99,78610,78611,78613,78615,78618,78620],{"class":101,"line":1718},[99,78612,54752],{"class":158},[99,78614,51418],{"class":109},[99,78616,78617],{"class":158},"240",[99,78619,51473],{"class":105},[99,78621,1276],{"class":109},[99,78623,78624,78626,78628,78630,78632],{"class":101,"line":1735},[99,78625,61981],{"class":158},[99,78627,51418],{"class":109},[99,78629,556],{"class":158},[99,78631,51473],{"class":105},[99,78633,1276],{"class":109},[99,78635,78636,78638,78640,78642,78644,78647,78649],{"class":101,"line":1740},[99,78637,54676],{"class":158},[99,78639,51418],{"class":109},[99,78641,810],{"class":158},[99,78643,51473],{"class":105},[99,78645,78646],{"class":158}," 30",[99,78648,51473],{"class":105},[99,78650,1276],{"class":109},[99,78652,78653,78655,78657,78659,78662,78665,78667],{"class":101,"line":1745},[99,78654,61841],{"class":158},[99,78656,51418],{"class":109},[99,78658,28102],{"class":158},[99,78660,78661],{"class":158}," ease",[99,78663,78664],{"class":158}," .5",[99,78666,805],{"class":105},[99,78668,1276],{"class":109},[99,78670,78671,78674,78676,78678,78680],{"class":101,"line":1750},[99,78672,78673],{"class":158},"      margin-bottom",[99,78675,51418],{"class":109},[99,78677,810],{"class":158},[99,78679,51473],{"class":105},[99,78681,1276],{"class":109},[99,78683,78684],{"class":101,"line":1764},[99,78685,2173],{"class":109},[99,78687,78688],{"class":101,"line":1769},[99,78689,2386],{"emptyLinePlaceholder":26},[99,78691,78692,78695,78697,78700],{"class":101,"line":2563},[99,78693,78694],{"class":1949},"    .item:nth-child",[99,78696,110],{"class":109},[99,78698,78699],{"class":158},"4n",[99,78701,12429],{"class":109},[99,78703,78704,78706,78708,78710],{"class":101,"line":2577},[99,78705,61981],{"class":158},[99,78707,51418],{"class":109},[99,78709,301],{"class":158},[99,78711,1276],{"class":109},[99,78713,78714],{"class":101,"line":2585},[99,78715,2173],{"class":109},[99,78717,78718],{"class":101,"line":2590},[99,78719,2386],{"emptyLinePlaceholder":26},[99,78721,78722,78725],{"class":101,"line":2596},[99,78723,78724],{"class":1949},"    .item:hover",[99,78726,15559],{"class":109},[99,78728,78729,78732,78734,78736,78738,78740,78742,78744,78746,78749,78751,78753,78755,78757,78759,78761,78763,78766],{"class":101,"line":2602},[99,78730,78731],{"class":158},"      box-shadow",[99,78733,51418],{"class":109},[99,78735,301],{"class":158},[99,78737,51473],{"class":105},[99,78739,4079],{"class":158},[99,78741,51473],{"class":105},[99,78743,2134],{"class":158},[99,78745,51473],{"class":105},[99,78747,78748],{"class":158}," rgba",[99,78750,110],{"class":109},[99,78752,301],{"class":158},[99,78754,12422],{"class":109},[99,78756,301],{"class":158},[99,78758,12422],{"class":109},[99,78760,301],{"class":158},[99,78762,12422],{"class":109},[99,78764,78765],{"class":158},".2",[99,78767,2705],{"class":109},[99,78769,78770,78773,78775,78778,78780,78782,78784,78787,78789,78791,78793],{"class":101,"line":2607},[99,78771,78772],{"class":158},"      transform",[99,78774,51418],{"class":109},[99,78776,78777],{"class":158},"translate3d",[99,78779,110],{"class":109},[99,78781,301],{"class":158},[99,78783,12422],{"class":109},[99,78785,78786],{"class":158},"-4",[99,78788,51473],{"class":105},[99,78790,12422],{"class":109},[99,78792,301],{"class":158},[99,78794,2705],{"class":109},[99,78796,78797,78799,78801,78803],{"class":101,"line":7935},[99,78798,62006],{"class":158},[99,78800,51418],{"class":109},[99,78802,62011],{"class":158},[99,78804,1276],{"class":109},[99,78806,78807],{"class":101,"line":7959},[99,78808,2173],{"class":109},[99,78810,78811],{"class":101,"line":7964},[99,78812,2386],{"emptyLinePlaceholder":26},[99,78814,78815,78817,78819],{"class":101,"line":7970},[99,78816,78606],{"class":1949},[99,78818,55596],{"class":51281},[99,78820,15559],{"class":109},[99,78822,78823,78825,78827,78829,78831],{"class":101,"line":7997},[99,78824,54752],{"class":158},[99,78826,51418],{"class":109},[99,78828,421],{"class":158},[99,78830,438],{"class":105},[99,78832,1276],{"class":109},[99,78834,78835],{"class":101,"line":8002},[99,78836,2173],{"class":109},[99,78838,78839],{"class":101,"line":8008},[99,78840,2386],{"emptyLinePlaceholder":26},[99,78842,78843,78845,78847],{"class":101,"line":8020},[99,78844,78606],{"class":1949},[99,78846,62285],{"class":1949},[99,78848,15559],{"class":109},[99,78850,78851,78853,78855,78857,78859],{"class":101,"line":8032},[99,78852,54903],{"class":158},[99,78854,51418],{"class":109},[99,78856,760],{"class":158},[99,78858,51473],{"class":105},[99,78860,1276],{"class":109},[99,78862,78863,78865,78867,78869,78871],{"class":101,"line":8044},[99,78864,78673],{"class":158},[99,78866,51418],{"class":109},[99,78868,556],{"class":158},[99,78870,51473],{"class":105},[99,78872,1276],{"class":109},[99,78874,78875,78877,78879,78882],{"class":101,"line":9703},[99,78876,57397],{"class":158},[99,78878,51418],{"class":109},[99,78880,78881],{"class":158},"#666",[99,78883,1276],{"class":109},[99,78885,78886],{"class":101,"line":9728},[99,78887,2173],{"class":109},[99,78889,78890],{"class":101,"line":9751},[99,78891,2386],{"emptyLinePlaceholder":26},[99,78893,78894,78896,78899],{"class":101,"line":9775},[99,78895,78606],{"class":1949},[99,78897,78898],{"class":1949}," .price",[99,78900,15559],{"class":109},[99,78902,78903,78905,78907,78909,78911],{"class":101,"line":9780},[99,78904,54903],{"class":158},[99,78906,51418],{"class":109},[99,78908,860],{"class":158},[99,78910,51473],{"class":105},[99,78912,1276],{"class":109},[99,78914,78915,78917,78919,78922],{"class":101,"line":9785},[99,78916,57397],{"class":158},[99,78918,51418],{"class":109},[99,78920,78921],{"class":158},"firebrick",[99,78923,1276],{"class":109},[99,78925,78926],{"class":101,"line":9790},[99,78927,2173],{"class":109},[99,78929,78930],{"class":101,"line":9799},[99,78931,2386],{"emptyLinePlaceholder":26},[99,78933,78934,78936,78939],{"class":101,"line":9804},[99,78935,78606],{"class":1949},[99,78937,78938],{"class":1949}," .price::before",[99,78940,15559],{"class":109},[99,78942,78943,78946,78948,78951],{"class":101,"line":9810},[99,78944,78945],{"class":158},"      content",[99,78947,51418],{"class":109},[99,78949,78950],{"class":214},"'￥'",[99,78952,1276],{"class":109},[99,78954,78955,78957,78959,78961,78963],{"class":101,"line":9831},[99,78956,54903],{"class":158},[99,78958,51418],{"class":109},[99,78960,659],{"class":158},[99,78962,51473],{"class":105},[99,78964,1276],{"class":109},[99,78966,78967],{"class":101,"line":9837},[99,78968,2173],{"class":109},[99,78970,78971],{"class":101,"line":9851},[99,78972,2386],{"emptyLinePlaceholder":26},[99,78974,78975,78978],{"class":101,"line":9857},[99,78976,78977],{"class":1949},"    .filter",[99,78979,15559],{"class":109},[99,78981,78982,78984,78986,78988],{"class":101,"line":9884},[99,78983,54990],{"class":158},[99,78985,51418],{"class":109},[99,78987,51458],{"class":158},[99,78989,1276],{"class":109},[99,78991,78992,78994,78996,78998,79000],{"class":101,"line":9893},[99,78993,54752],{"class":158},[99,78995,51418],{"class":109},[99,78997,78555],{"class":158},[99,78999,51473],{"class":105},[99,79001,1276],{"class":109},[99,79003,79004,79006,79008,79010,79012],{"class":101,"line":9899},[99,79005,54687],{"class":158},[99,79007,51418],{"class":109},[99,79009,301],{"class":158},[99,79011,51537],{"class":158},[99,79013,1276],{"class":109},[99,79015,79016,79018,79020,79022,79024,79026],{"class":101,"line":9907},[99,79017,54676],{"class":158},[99,79019,51418],{"class":109},[99,79021,766],{"class":158},[99,79023,51473],{"class":105},[99,79025,78646],{"class":158},[99,79027,79028],{"class":105},"px\n",[99,79030,79031],{"class":101,"line":9912},[99,79032,2173],{"class":109},[99,79034,79035],{"class":101,"line":16591},[99,79036,2386],{"emptyLinePlaceholder":26},[99,79038,79039,79041,79043],{"class":101,"line":16597},[99,79040,78977],{"class":1949},[99,79042,1384],{"class":51281},[99,79044,15559],{"class":109},[99,79046,79047,79049,79051,79053,79055,79057,79059],{"class":101,"line":16620},[99,79048,54676],{"class":158},[99,79050,51418],{"class":109},[99,79052,556],{"class":158},[99,79054,51473],{"class":105},[99,79056,8937],{"class":158},[99,79058,51473],{"class":105},[99,79060,1276],{"class":109},[99,79062,79063,79065,79067,79069],{"class":101,"line":16626},[99,79064,61702],{"class":158},[99,79066,51418],{"class":109},[99,79068,61799],{"class":158},[99,79070,1276],{"class":109},[99,79072,79073,79075,79077,79079],{"class":101,"line":16649},[99,79074,57397],{"class":158},[99,79076,51418],{"class":109},[99,79078,78881],{"class":158},[99,79080,1276],{"class":109},[99,79082,79083,79085,79087,79089],{"class":101,"line":16663},[99,79084,63951],{"class":158},[99,79086,51418],{"class":109},[99,79088,54718],{"class":158},[99,79090,1276],{"class":109},[99,79092,79093,79095,79097,79099,79101],{"class":101,"line":16683},[99,79094,61731],{"class":158},[99,79096,51418],{"class":109},[99,79098,810],{"class":158},[99,79100,51473],{"class":105},[99,79102,1276],{"class":109},[99,79104,79105],{"class":101,"line":16689},[99,79106,2173],{"class":109},[99,79108,79109],{"class":101,"line":16700},[99,79110,2386],{"emptyLinePlaceholder":26},[99,79112,79113,79115,79117,79119],{"class":101,"line":16723},[99,79114,78977],{"class":1949},[99,79116,1384],{"class":51281},[99,79118,61881],{"class":1949},[99,79120,15559],{"class":109},[99,79122,79123,79125,79127,79130],{"class":101,"line":16745},[99,79124,54865],{"class":158},[99,79126,51418],{"class":109},[99,79128,79129],{"class":158},"#05943c",[99,79131,1276],{"class":109},[99,79133,79134,79136,79138,79140],{"class":101,"line":16750},[99,79135,57397],{"class":158},[99,79137,51418],{"class":109},[99,79139,60823],{"class":158},[99,79141,1276],{"class":109},[99,79143,79144],{"class":101,"line":16756},[99,79145,2173],{"class":109},[99,79147,79148,79150,79152],{"class":101,"line":16770},[99,79149,52398],{"class":109},[99,79151,5113],{"class":51281},[99,79153,51288],{"class":109},[99,79155,79156,79158,79160],{"class":101,"line":16783},[99,79157,51766],{"class":109},[99,79159,51315],{"class":51281},[99,79161,51288],{"class":109},[99,79163,79164],{"class":101,"line":16788},[99,79165,2386],{"emptyLinePlaceholder":26},[99,79167,79168,79170,79172],{"class":101,"line":16802},[99,79169,1020],{"class":109},[99,79171,51781],{"class":51281},[99,79173,51288],{"class":109},[99,79175,79176,79178,79180,79182,79184,79187],{"class":101,"line":16807},[99,79177,52125],{"class":109},[99,79179,51592],{"class":51281},[99,79181,53467],{"class":1949},[99,79183,155],{"class":109},[99,79185,79186],{"class":214},"\"filter\"",[99,79188,51288],{"class":109},[99,79190,79191,79193,79195,79197,79199,79201,79204,79206,79208,79211,79213],{"class":101,"line":16813},[99,79192,51322],{"class":109},[99,79194,348],{"class":51281},[99,79196,61038],{"class":1949},[99,79198,155],{"class":109},[99,79200,61043],{"class":214},[99,79202,79203],{"class":1949}," data-index",[99,79205,155],{"class":109},[99,79207,3664],{"class":214},[99,79209,79210],{"class":109},">0-100元\u003C\u002F",[99,79212,348],{"class":51281},[99,79214,51288],{"class":109},[99,79216,79217,79219,79221,79223,79225,79227,79229,79231,79233,79236,79238],{"class":101,"line":16818},[99,79218,51322],{"class":109},[99,79220,348],{"class":51281},[99,79222,61038],{"class":1949},[99,79224,155],{"class":109},[99,79226,61043],{"class":214},[99,79228,79203],{"class":1949},[99,79230,155],{"class":109},[99,79232,3687],{"class":214},[99,79234,79235],{"class":109},">100-300元\u003C\u002F",[99,79237,348],{"class":51281},[99,79239,51288],{"class":109},[99,79241,79242,79244,79246,79248,79250,79252,79254,79256,79258,79261,79263],{"class":101,"line":16832},[99,79243,51322],{"class":109},[99,79245,348],{"class":51281},[99,79247,61038],{"class":1949},[99,79249,155],{"class":109},[99,79251,61043],{"class":214},[99,79253,79203],{"class":1949},[99,79255,155],{"class":109},[99,79257,3700],{"class":214},[99,79259,79260],{"class":109},">300元以上\u003C\u002F",[99,79262,348],{"class":51281},[99,79264,51288],{"class":109},[99,79266,79267,79269,79271,79273,79275,79277,79280,79282],{"class":101,"line":16837},[99,79268,51322],{"class":109},[99,79270,348],{"class":51281},[99,79272,61038],{"class":1949},[99,79274,155],{"class":109},[99,79276,61043],{"class":214},[99,79278,79279],{"class":109},">全部区间\u003C\u002F",[99,79281,348],{"class":51281},[99,79283,51288],{"class":109},[99,79285,79286,79288,79290],{"class":101,"line":16842},[99,79287,52398],{"class":109},[99,79289,51592],{"class":51281},[99,79291,51288],{"class":109},[99,79293,79294,79296,79298,79300,79302,79304],{"class":101,"line":16856},[99,79295,52125],{"class":109},[99,79297,51592],{"class":51281},[99,79299,53467],{"class":1949},[99,79301,155],{"class":109},[99,79303,62589],{"class":214},[99,79305,51288],{"class":109},[99,79307,79308],{"class":101,"line":16868},[99,79309,79310],{"class":168},"    \u003C!-- \u003Cdiv class=\"item\">\n",[99,79312,79313],{"class":101,"line":16873},[99,79314,79315],{"class":168},"      \u003Cimg src=\"\" alt=\"\">\n",[99,79317,79318],{"class":101,"line":16886},[99,79319,79320],{"class":168},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[99,79322,79323],{"class":101,"line":16891},[99,79324,79325],{"class":168},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[99,79327,79328],{"class":101,"line":16896},[99,79329,79330],{"class":168},"    \u003C\u002Fdiv> -->\n",[99,79332,79333,79335,79337],{"class":101,"line":16901},[99,79334,52398],{"class":109},[99,79336,51592],{"class":51281},[99,79338,51288],{"class":109},[99,79340,79341,79343,79345],{"class":101,"line":16914},[99,79342,52125],{"class":109},[99,79344,51794],{"class":51281},[99,79346,51288],{"class":109},[99,79348,79349],{"class":101,"line":16919},[99,79350,79351],{"class":168},"    \u002F\u002F 2. 初始化数据\n",[99,79353,79354,79356,79359,79361],{"class":101,"line":32614},[99,79355,11208],{"class":105},[99,79357,79358],{"class":158}," goodsList",[99,79360,13551],{"class":105},[99,79362,55428],{"class":109},[99,79364,79365],{"class":101,"line":32620},[99,79366,79367],{"class":109},"      {\n",[99,79369,79370,79373,79376],{"class":101,"line":32626},[99,79371,79372],{"class":109},"        id: ",[99,79374,79375],{"class":214},"'4001172'",[99,79377,31447],{"class":109},[99,79379,79380,79383,79386],{"class":101,"line":32632},[99,79381,79382],{"class":109},"        name: ",[99,79384,79385],{"class":214},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[99,79387,31447],{"class":109},[99,79389,79390,79393,79396],{"class":101,"line":32638},[99,79391,79392],{"class":109},"        price: ",[99,79394,79395],{"class":214},"'289.00'",[99,79397,31447],{"class":109},[99,79399,79400,79403,79406],{"class":101,"line":32649},[99,79401,79402],{"class":109},"        picture: ",[99,79404,79405],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[99,79407,31447],{"class":109},[99,79409,79410],{"class":101,"line":32655},[99,79411,77873],{"class":109},[99,79413,79414],{"class":101,"line":32675},[99,79415,79367],{"class":109},[99,79417,79418,79420,79423],{"class":101,"line":32681},[99,79419,79372],{"class":109},[99,79421,79422],{"class":214},"'4001594'",[99,79424,31447],{"class":109},[99,79426,79427,79429,79432],{"class":101,"line":32692},[99,79428,79382],{"class":109},[99,79430,79431],{"class":214},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[99,79433,31447],{"class":109},[99,79435,79436,79438,79441],{"class":101,"line":32698},[99,79437,79392],{"class":109},[99,79439,79440],{"class":214},"'288.00'",[99,79442,31447],{"class":109},[99,79444,79445,79447,79450],{"class":101,"line":32704},[99,79446,79402],{"class":109},[99,79448,79449],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[99,79451,31447],{"class":109},[99,79453,79454],{"class":101,"line":32710},[99,79455,77873],{"class":109},[99,79457,79458],{"class":101,"line":32716},[99,79459,79367],{"class":109},[99,79461,79462,79464,79467],{"class":101,"line":32722},[99,79463,79372],{"class":109},[99,79465,79466],{"class":214},"'4001009'",[99,79468,31447],{"class":109},[99,79470,79471,79473,79476],{"class":101,"line":32728},[99,79472,79382],{"class":109},[99,79474,79475],{"class":214},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[99,79477,31447],{"class":109},[99,79479,79480,79482,79485],{"class":101,"line":32734},[99,79481,79392],{"class":109},[99,79483,79484],{"class":214},"'109.00'",[99,79486,31447],{"class":109},[99,79488,79489,79491,79494],{"class":101,"line":32754},[99,79490,79402],{"class":109},[99,79492,79493],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[99,79495,31447],{"class":109},[99,79497,79498],{"class":101,"line":32760},[99,79499,77873],{"class":109},[99,79501,79502],{"class":101,"line":32776},[99,79503,79367],{"class":109},[99,79505,79506,79508,79511],{"class":101,"line":32782},[99,79507,79372],{"class":109},[99,79509,79510],{"class":214},"'4001874'",[99,79512,31447],{"class":109},[99,79514,79515,79517,79520],{"class":101,"line":32796},[99,79516,79382],{"class":109},[99,79518,79519],{"class":214},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[99,79521,31447],{"class":109},[99,79523,79524,79526,79529],{"class":101,"line":32802},[99,79525,79392],{"class":109},[99,79527,79528],{"class":214},"'488.00'",[99,79530,31447],{"class":109},[99,79532,79533,79535,79538],{"class":101,"line":32817},[99,79534,79402],{"class":109},[99,79536,79537],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[99,79539,31447],{"class":109},[99,79541,79542],{"class":101,"line":32823},[99,79543,77873],{"class":109},[99,79545,79546],{"class":101,"line":32832},[99,79547,79367],{"class":109},[99,79549,79550,79552,79555],{"class":101,"line":32838},[99,79551,79372],{"class":109},[99,79553,79554],{"class":214},"'4001649'",[99,79556,31447],{"class":109},[99,79558,79559,79561,79564],{"class":101,"line":32847},[99,79560,79382],{"class":109},[99,79562,79563],{"class":214},"'大师监制龙泉青瓷茶叶罐'",[99,79565,31447],{"class":109},[99,79567,79568,79570,79573],{"class":101,"line":32853},[99,79569,79392],{"class":109},[99,79571,79572],{"class":214},"'139.00'",[99,79574,31447],{"class":109},[99,79576,79577,79579,79582],{"class":101,"line":32859},[99,79578,79402],{"class":109},[99,79580,79581],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[99,79583,31447],{"class":109},[99,79585,79586],{"class":101,"line":32868},[99,79587,77873],{"class":109},[99,79589,79590],{"class":101,"line":32874},[99,79591,79367],{"class":109},[99,79593,79594,79596,79599],{"class":101,"line":32885},[99,79595,79372],{"class":109},[99,79597,79598],{"class":214},"'3997185'",[99,79600,31447],{"class":109},[99,79602,79603,79605,79608],{"class":101,"line":32891},[99,79604,79382],{"class":109},[99,79606,79607],{"class":214},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[99,79609,31447],{"class":109},[99,79611,79612,79614,79617],{"class":101,"line":32910},[99,79613,79392],{"class":109},[99,79615,79616],{"class":214},"'108.00'",[99,79618,31447],{"class":109},[99,79620,79621,79623,79626],{"class":101,"line":32916},[99,79622,79402],{"class":109},[99,79624,79625],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[99,79627,31447],{"class":109},[99,79629,79630],{"class":101,"line":32927},[99,79631,77873],{"class":109},[99,79633,79634],{"class":101,"line":32933},[99,79635,79367],{"class":109},[99,79637,79638,79640,79643],{"class":101,"line":32953},[99,79639,79372],{"class":109},[99,79641,79642],{"class":214},"'3997403'",[99,79644,31447],{"class":109},[99,79646,79647,79649,79652],{"class":101,"line":32969},[99,79648,79382],{"class":109},[99,79650,79651],{"class":214},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[99,79653,31447],{"class":109},[99,79655,79656,79658,79661],{"class":101,"line":32975},[99,79657,79392],{"class":109},[99,79659,79660],{"class":214},"'100.00'",[99,79662,31447],{"class":109},[99,79664,79665,79667,79670],{"class":101,"line":32989},[99,79666,79402],{"class":109},[99,79668,79669],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[99,79671,31447],{"class":109},[99,79673,79674],{"class":101,"line":32995},[99,79675,77873],{"class":109},[99,79677,79678],{"class":101,"line":33001},[99,79679,79367],{"class":109},[99,79681,79682,79684,79687],{"class":101,"line":33012},[99,79683,79372],{"class":109},[99,79685,79686],{"class":214},"'3998274'",[99,79688,31447],{"class":109},[99,79690,79691,79693,79696],{"class":101,"line":33018},[99,79692,79382],{"class":109},[99,79694,79695],{"class":214},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[99,79697,31447],{"class":109},[99,79699,79700,79702,79704],{"class":101,"line":33024},[99,79701,79392],{"class":109},[99,79703,79572],{"class":214},[99,79705,31447],{"class":109},[99,79707,79708,79710,79713],{"class":101,"line":33034},[99,79709,79402],{"class":109},[99,79711,79712],{"class":214},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[99,79714,31447],{"class":109},[99,79716,79717],{"class":101,"line":33040},[99,79718,77873],{"class":109},[99,79720,79721],{"class":101,"line":33051},[99,79722,53090],{"class":109},[99,79724,79725],{"class":101,"line":33057},[99,79726,2386],{"emptyLinePlaceholder":26},[99,79728,79729],{"class":101,"line":33067},[99,79730,79731],{"class":168},"    \u002F\u002F 1.渲染函数\n",[99,79733,79734,79736,79738,79740,79742],{"class":101,"line":33072},[99,79735,70065],{"class":105},[99,79737,70068],{"class":1949},[99,79739,110],{"class":109},[99,79741,3866],{"class":5203},[99,79743,12429],{"class":109},[99,79745,79746],{"class":101,"line":33078},[99,79747,79748],{"class":168},"      \u002F\u002F 声明空字符串\n",[99,79750,79751,79754,79757,79759],{"class":101,"line":33127},[99,79752,79753],{"class":105},"      let",[99,79755,79756],{"class":109}," str ",[99,79758,155],{"class":105},[99,79760,70085],{"class":214},[99,79762,79763],{"class":101,"line":33174},[99,79764,70090],{"class":168},[99,79766,79767,79769,79772,79774,79777,79780],{"class":101,"line":33179},[99,79768,57988],{"class":109},[99,79770,79771],{"class":1949},"forEach",[99,79773,110],{"class":109},[99,79775,79776],{"class":5203},"item",[99,79778,79779],{"class":105}," =>",[99,79781,15559],{"class":109},[99,79783,79784,79786,79789,79792,79794,79797,79799,79802,79805,79807],{"class":101,"line":33185},[99,79785,61251],{"class":105},[99,79787,79788],{"class":109}," { ",[99,79790,79791],{"class":158},"name",[99,79793,12422],{"class":109},[99,79795,79796],{"class":158},"price",[99,79798,12422],{"class":109},[99,79800,79801],{"class":158},"picture",[99,79803,79804],{"class":109}," } ",[99,79806,155],{"class":105},[99,79808,79809],{"class":109}," item\n",[99,79811,79812,79815,79817],{"class":101,"line":33204},[99,79813,79814],{"class":109},"        str ",[99,79816,9464],{"class":105},[99,79818,70149],{"class":214},[99,79820,79821],{"class":101,"line":33210},[99,79822,79823],{"class":214},"          \u003Cdiv class=\"item\">\n",[99,79825,79826,79829,79831],{"class":101,"line":33230},[99,79827,79828],{"class":214},"            \u003Cimg src=\"${",[99,79830,79801],{"class":109},[99,79832,79833],{"class":214},"}\" alt=\"\">\n",[99,79835,79836,79839,79841],{"class":101,"line":33236},[99,79837,79838],{"class":214},"            \u003Cp class=\"name\">${",[99,79840,79791],{"class":109},[99,79842,79843],{"class":214},"}\u003C\u002Fp>\n",[99,79845,79846,79849,79851],{"class":101,"line":33242},[99,79847,79848],{"class":214},"            \u003Cp class=\"price\">${",[99,79850,79796],{"class":109},[99,79852,79843],{"class":214},[99,79854,79855],{"class":101,"line":33252},[99,79856,79857],{"class":214},"          \u003C\u002Fdiv>\n",[99,79859,79860],{"class":101,"line":33257},[99,79861,79862],{"class":214},"        `\n",[99,79864,79865],{"class":101,"line":33263},[99,79866,64796],{"class":109},[99,79868,79869],{"class":101,"line":33279},[99,79870,79871],{"class":168},"      \u002F\u002F 追加给List\n",[99,79873,79874,79876,79878,79880,79883,79885,79887],{"class":101,"line":33324},[99,79875,55752],{"class":109},[99,79877,54380],{"class":1949},[99,79879,110],{"class":109},[99,79881,79882],{"class":214},"'.list'",[99,79884,74230],{"class":109},[99,79886,155],{"class":105},[99,79888,73966],{"class":109},[99,79890,79891],{"class":101,"line":33330},[99,79892,2173],{"class":109},[99,79894,79895],{"class":101,"line":33336},[99,79896,79897],{"class":168},"    \u002F\u002F 页面一打开就需要渲染\n",[99,79899,79900,79903],{"class":101,"line":33342},[99,79901,79902],{"class":1949},"    render",[99,79904,79905],{"class":109},"(goodsList)\n",[99,79907,79908],{"class":101,"line":33353},[99,79909,79910],{"class":168},"    \u002F\u002F 2.过滤筛选\n",[99,79912,79913,79915,79917,79919,79922,79924,79926,79928,79930,79932,79934,79936],{"class":101,"line":33359},[99,79914,52388],{"class":109},[99,79916,54380],{"class":1949},[99,79918,110],{"class":109},[99,79920,79921],{"class":214},"'.filter'",[99,79923,30807],{"class":109},[99,79925,57794],{"class":1949},[99,79927,110],{"class":109},[99,79929,57799],{"class":214},[99,79931,12422],{"class":109},[99,79933,184],{"class":5203},[99,79935,79779],{"class":105},[99,79937,15559],{"class":109},[99,79939,79940],{"class":101,"line":33365},[99,79941,79942],{"class":168},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[99,79944,79945,79947,79949,79952,79954,79956,79958,79960],{"class":101,"line":33371},[99,79946,58209],{"class":105},[99,79948,79788],{"class":109},[99,79950,79951],{"class":158},"tagName",[99,79953,12422],{"class":109},[99,79955,31518],{"class":158},[99,79957,79804],{"class":109},[99,79959,155],{"class":105},[99,79961,79962],{"class":109}," e.target\n",[99,79964,79965],{"class":101,"line":33389},[99,79966,79967],{"class":168},"      \u002F\u002F 判断\n",[99,79969,79970,79972,79974,79976,79978],{"class":101,"line":33403},[99,79971,54461],{"class":105},[99,79973,67015],{"class":109},[99,79975,54467],{"class":105},[99,79977,68237],{"class":214},[99,79979,12429],{"class":109},[99,79981,79982],{"class":101,"line":33412},[99,79983,79984],{"class":168},"        \u002F\u002F console.log(11)\n",[99,79986,79987],{"class":101,"line":33421},[99,79988,79989],{"class":168},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[99,79991,79992],{"class":101,"line":33430},[99,79993,79994],{"class":168},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[99,79996,79997,79999,80001,80003],{"class":101,"line":33439},[99,79998,51811],{"class":105},[99,80000,51814],{"class":109},[99,80002,155],{"class":105},[99,80004,80005],{"class":109}," goodsList\n",[99,80007,80008,80010,80013,80015,80018],{"class":101,"line":33445},[99,80009,2483],{"class":105},[99,80011,80012],{"class":109}," (dataset.index ",[99,80014,54467],{"class":105},[99,80016,80017],{"class":214}," '1'",[99,80019,12429],{"class":109},[99,80021,80022,80025,80027,80030,80033,80035,80037,80039,80042,80044,80046,80049,80051,80053,80055],{"class":101,"line":33451},[99,80023,80024],{"class":109},"          arr ",[99,80026,155],{"class":105},[99,80028,80029],{"class":109}," goodsList.",[99,80031,80032],{"class":1949},"filter",[99,80034,110],{"class":109},[99,80036,79776],{"class":5203},[99,80038,79779],{"class":105},[99,80040,80041],{"class":109}," item.price ",[99,80043,1696],{"class":105},[99,80045,4079],{"class":158},[99,80047,80048],{"class":105}," &&",[99,80050,80041],{"class":109},[99,80052,1574],{"class":105},[99,80054,5741],{"class":158},[99,80056,116],{"class":109},[99,80058,80059,80062,80064,80066,80068,80070,80073],{"class":101,"line":33459},[99,80060,80061],{"class":109},"        } ",[99,80063,1687],{"class":105},[99,80065,1690],{"class":105},[99,80067,80012],{"class":109},[99,80069,54467],{"class":105},[99,80071,80072],{"class":214}," '2'",[99,80074,12429],{"class":109},[99,80076,80077,80079,80081,80083,80085,80087,80089,80091,80093,80095,80097,80099,80101,80103,80106],{"class":101,"line":33464},[99,80078,80024],{"class":109},[99,80080,155],{"class":105},[99,80082,80029],{"class":109},[99,80084,80032],{"class":1949},[99,80086,110],{"class":109},[99,80088,79776],{"class":5203},[99,80090,79779],{"class":105},[99,80092,80041],{"class":109},[99,80094,1696],{"class":105},[99,80096,5741],{"class":158},[99,80098,80048],{"class":105},[99,80100,80041],{"class":109},[99,80102,1574],{"class":105},[99,80104,80105],{"class":158}," 300",[99,80107,116],{"class":109},[99,80109,80110,80112,80114,80116,80118,80120,80123],{"class":101,"line":33470},[99,80111,80061],{"class":109},[99,80113,1687],{"class":105},[99,80115,1690],{"class":105},[99,80117,80012],{"class":109},[99,80119,54467],{"class":105},[99,80121,80122],{"class":214}," '3'",[99,80124,12429],{"class":109},[99,80126,80127,80129,80131,80133,80135,80137,80139,80141,80143,80145,80147],{"class":101,"line":33481},[99,80128,80024],{"class":109},[99,80130,155],{"class":105},[99,80132,80029],{"class":109},[99,80134,80032],{"class":1949},[99,80136,110],{"class":109},[99,80138,79776],{"class":5203},[99,80140,79779],{"class":105},[99,80142,80041],{"class":109},[99,80144,1696],{"class":105},[99,80146,80105],{"class":158},[99,80148,116],{"class":109},[99,80150,80151],{"class":101,"line":33487},[99,80152,2515],{"class":109},[99,80154,80155],{"class":101,"line":33507},[99,80156,80157],{"class":168},"        \u002F\u002F 渲染函数\n",[99,80159,80160,80162],{"class":101,"line":33513},[99,80161,70389],{"class":1949},[99,80163,52393],{"class":109},[99,80165,80166],{"class":101,"line":33519},[99,80167,52379],{"class":109},[99,80169,80170],{"class":101,"line":33525},[99,80171,2386],{"emptyLinePlaceholder":26},[99,80173,80174],{"class":101,"line":33542},[99,80175,33442],{"class":109},[99,80177,80178,80180,80182],{"class":101,"line":33548},[99,80179,52398],{"class":109},[99,80181,51794],{"class":51281},[99,80183,51288],{"class":109},[99,80185,80186,80188,80190],{"class":101,"line":33554},[99,80187,51766],{"class":109},[99,80189,51781],{"class":51281},[99,80191,51288],{"class":109},[99,80193,80194],{"class":101,"line":33560},[99,80195,2386],{"emptyLinePlaceholder":26},[99,80197,80198,80200,80202],{"class":101,"line":33566},[99,80199,51766],{"class":109},[99,80201,50616],{"class":51281},[99,80203,51288],{"class":109},[41,80205,80207],{"id":80206},"_410-深入了解对象","4.10 深入了解对象",[70,80209,80211],{"id":80210},"_4101-创建对象","4.10.1 创建对象",[14,80213,80214],{},[1448,80215],{"alt":21,"src":80216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80218,80219],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[70,80221,80223],{"id":80222},"_4102-构造函数","4.10.2 构造函数",[14,80225,80226,80229],{},[259,80227,80228],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80231,80232,80235],{},[259,80233,80234],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[90,80237,80239],{"className":50614,"code":80238,"language":50616,"meta":21,"style":21},"\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",[96,80240,80241,80249,80254,80275,80288,80300,80312,80316,80321,80348,80353,80380],{"__ignoreMap":21},[99,80242,80243,80245,80247],{"class":101,"line":102},[99,80244,1020],{"class":109},[99,80246,51794],{"class":51281},[99,80248,51288],{"class":109},[99,80250,80251],{"class":101,"line":22},[99,80252,80253],{"class":168},"\u002F\u002F例：\n",[99,80255,80256,80258,80261,80263,80265,80267,80269,80271,80273],{"class":101,"line":1165},[99,80257,54430],{"class":105},[99,80259,80260],{"class":1949}," Pig",[99,80262,110],{"class":109},[99,80264,79791],{"class":5203},[99,80266,488],{"class":109},[99,80268,70202],{"class":5203},[99,80270,488],{"class":109},[99,80272,70219],{"class":5203},[99,80274,12429],{"class":109},[99,80276,80277,80280,80283,80285],{"class":101,"line":1180},[99,80278,80279],{"class":158},"    this",[99,80281,80282],{"class":109},".name",[99,80284,155],{"class":105},[99,80286,80287],{"class":109},"name\n",[99,80289,80290,80292,80295,80297],{"class":101,"line":1186},[99,80291,80279],{"class":158},[99,80293,80294],{"class":109},".age",[99,80296,155],{"class":105},[99,80298,80299],{"class":109},"age\n",[99,80301,80302,80304,80307,80309],{"class":101,"line":1200},[99,80303,80279],{"class":158},[99,80305,80306],{"class":109},".gender",[99,80308,155],{"class":105},[99,80310,80311],{"class":109},"gender    \n",[99,80313,80314],{"class":101,"line":1206},[99,80315,1551],{"class":109},[99,80317,80318],{"class":101,"line":1297},[99,80319,80320],{"class":168},"\u002F\u002F创建佩奇对象\n",[99,80322,80323,80325,80328,80330,80332,80334,80337,80339,80341,80343,80346],{"class":101,"line":1303},[99,80324,6779],{"class":105},[99,80326,80327],{"class":158}," Peppa",[99,80329,11704],{"class":105},[99,80331,80260],{"class":1949},[99,80333,110],{"class":109},[99,80335,80336],{"class":214},"'佩奇'",[99,80338,488],{"class":109},[99,80340,454],{"class":158},[99,80342,488],{"class":109},[99,80344,80345],{"class":214},"'女'",[99,80347,116],{"class":109},[99,80349,80350],{"class":101,"line":1315},[99,80351,80352],{"class":168},"\u002F\u002F创建乔治对象\n",[99,80354,80355,80357,80360,80362,80364,80366,80369,80371,80373,80375,80378],{"class":101,"line":1598},[99,80356,6779],{"class":105},[99,80358,80359],{"class":158}," George",[99,80361,11704],{"class":105},[99,80363,80260],{"class":1949},[99,80365,110],{"class":109},[99,80367,80368],{"class":214},"'乔治'",[99,80370,488],{"class":109},[99,80372,181],{"class":158},[99,80374,488],{"class":109},[99,80376,80377],{"class":214},"'男'",[99,80379,116],{"class":109},[99,80381,80382,80384,80386],{"class":101,"line":1603},[99,80383,51766],{"class":109},[99,80385,51794],{"class":51281},[99,80387,51288],{"class":109},[14,80389,80390],{},[1448,80391],{"alt":21,"src":80392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80394,80395],{},[1448,80396],{"alt":21,"src":80397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80399,80400],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80402,80403],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80405,80406],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80408,80409],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80411,80412],{},"这里用等号是因为：对象.属性=值",[14,80414,80415],{},"①利用对象字面量创建对象",[14,80417,80418],{},"const o={",[14,80420,80421],{},"name:'pink'",[14,80423,80424],{},"} ②利用new Object创建对象",[14,80426,80427],{},"const o=new Object({name:'pink'})",[14,80429,80430],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80432,80433],{},"构造函数创建对象的执行过程：",[14,80435,80436],{},[1448,80437],{"alt":21,"src":80438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[70,80440,80442],{"id":80441},"_4103-实例成员","4.10.3 实例成员",[14,80444,80445],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[53,80447,80448,80451,80454],{},[56,80449,80450],{},"实例对象的属性和方法即为实例成员",[56,80452,80453],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[56,80455,80456],{},"构造函数创建的实例对象彼此独立互不影响",[70,80458,80460],{"id":80459},"_4104-静态成员","4.10.4 静态成员",[14,80462,80463],{},[1448,80464],{"alt":21,"src":80465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80467,80468],{},"静态成员有Date.now() Math.PI Math.random()",[14,80470,80471],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80473,80474],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80476,80477],{},"function Pig(name) n {",[14,80479,80480],{},"this.name=name",[14,80482,1056],{},[14,80484,80485],{},"Pig.eyes=2",[14,80487,80488],{},"Pig.sayHai=function () { console.log(this) }",[14,80490,80491],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80493,80494],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80496,11319],{},[53,80498,80499,80502,80505,80508,80511],{},[56,80500,80501],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[56,80503,80504],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[56,80506,80507],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[56,80509,80510],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[56,80512,80513],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80515,80516],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[70,80518,80520],{"id":80519},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80522,80523],{},"内置构造函数包含：",[14,80525,80526],{},[1448,80527],{"alt":21,"src":80528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80530,80531],{},[1448,80532],{"alt":21,"src":80533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80535,80536],{},"这些基本数据类型，js对他们进行了包装",[51794,80538,80539],{},"\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",[21985,80541,80543],{"id":80542},"_41051-object","4.10.5.1 Object",[14,80545,80546],{},"Object 是内置的构造函数，用于创建普通对象",[14,80548,80549],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[90,80551,80553],{"className":50614,"code":80552,"language":50616,"meta":21,"style":21},"const user=new Object({name:'小明',age:15})\n",[96,80554,80555],{"__ignoreMap":21},[99,80556,80557],{"class":101,"line":102},[99,80558,80552],{"class":109},[14,80560,80561],{},"三个常用的静态方法：",[22897,80563,80565],{"id":80564},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80567,80568],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80570,80571],{},[1448,80572],{"alt":21,"src":80573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80575,80576],{},[1448,80577],{"alt":21,"src":80578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[90,80580,80582],{"className":53048,"code":80581,"language":53050,"meta":21,"style":21},"\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",[96,80583,80584,80592,80600,80605,80610,80615,80620,80625,80630,80638],{"__ignoreMap":21},[99,80585,80586,80588,80590],{"class":101,"line":102},[99,80587,1020],{"class":109},[99,80589,51781],{"class":51281},[99,80591,51288],{"class":109},[99,80593,80594,80596,80598],{"class":101,"line":22},[99,80595,52125],{"class":109},[99,80597,51794],{"class":51281},[99,80599,51288],{"class":109},[99,80601,80602],{"class":101,"line":1165},[99,80603,80604],{"class":109},"    const o = { name: 'pink', age: 6 }\n",[99,80606,80607],{"class":101,"line":1180},[99,80608,80609],{"class":109},"    \u002F\u002F 获得所有属性名\n",[99,80611,80612],{"class":101,"line":1186},[99,80613,80614],{"class":109},"    const arr = Object.keys(o)\n",[99,80616,80617],{"class":101,"line":1200},[99,80618,80619],{"class":109},"    console.log(arr)\n",[99,80621,80622],{"class":101,"line":1206},[99,80623,80624],{"class":109},"    \u002F\u002F 获得所有属性值\n",[99,80626,80627],{"class":101,"line":1297},[99,80628,80629],{"class":109},"    console.log(Object.values(o))\n",[99,80631,80632,80634,80636],{"class":101,"line":1303},[99,80633,52398],{"class":109},[99,80635,51794],{"class":51281},[99,80637,51288],{"class":109},[99,80639,80640,80642,80644],{"class":101,"line":1315},[99,80641,51766],{"class":109},[99,80643,51781],{"class":51281},[99,80645,51288],{"class":109},[22897,80647,80649],{"id":80648},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80651,80652],{},"Object.assign(oo,o)",[14,80654,80655],{},"后的东西添加给前 是追加",[14,80657,80658],{},[1448,80659],{"alt":21,"src":80660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80662,80663],{},[1448,80664],{"alt":21,"src":80665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[90,80667,80669],{"className":53048,"code":80668,"language":53050,"meta":21,"style":21},"\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",[96,80670,80671,80679,80687,80691,80695,80699,80703,80707,80711,80716,80721,80726,80731,80736,80744],{"__ignoreMap":21},[99,80672,80673,80675,80677],{"class":101,"line":102},[99,80674,1020],{"class":109},[99,80676,51781],{"class":51281},[99,80678,51288],{"class":109},[99,80680,80681,80683,80685],{"class":101,"line":22},[99,80682,52125],{"class":109},[99,80684,51794],{"class":51281},[99,80686,51288],{"class":109},[99,80688,80689],{"class":101,"line":1165},[99,80690,80604],{"class":109},[99,80692,80693],{"class":101,"line":1180},[99,80694,80609],{"class":109},[99,80696,80697],{"class":101,"line":1186},[99,80698,80614],{"class":109},[99,80700,80701],{"class":101,"line":1200},[99,80702,80619],{"class":109},[99,80704,80705],{"class":101,"line":1206},[99,80706,80624],{"class":109},[99,80708,80709],{"class":101,"line":1297},[99,80710,80629],{"class":109},[99,80712,80713],{"class":101,"line":1303},[99,80714,80715],{"class":109},"    const oo = {}\n",[99,80717,80718],{"class":101,"line":1315},[99,80719,80720],{"class":109},"    Object.assign(oo, o)\n",[99,80722,80723],{"class":101,"line":1598},[99,80724,80725],{"class":109},"    console.log(oo)\n",[99,80727,80728],{"class":101,"line":1603},[99,80729,80730],{"class":109},"    Object.assign(o, { gender: '女' })\n",[99,80732,80733],{"class":101,"line":1609},[99,80734,80735],{"class":109},"    console.log(o)\n",[99,80737,80738,80740,80742],{"class":101,"line":1614},[99,80739,52398],{"class":109},[99,80741,51794],{"class":51281},[99,80743,51288],{"class":109},[99,80745,80746,80748,80750],{"class":101,"line":1628},[99,80747,51766],{"class":109},[99,80749,51781],{"class":51281},[99,80751,51288],{"class":109},[14,80753,80754],{},[1448,80755],{"alt":21,"src":80756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21985,80758,80760],{"id":80759},"_41052-array","4.10.5.2 Array",[14,80762,80763],{},"Array 是内置的构造函数，用于创建数组",[14,80765,80766],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[90,80768,80770],{"className":50614,"code":80769,"language":50616,"meta":21,"style":21},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[96,80771,80772,80777],{"__ignoreMap":21},[99,80773,80774],{"class":101,"line":102},[99,80775,80776],{"class":109},"const arr=new Array(3,5)\n",[99,80778,80779],{"class":101,"line":22},[99,80780,80781],{"class":109},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80783,80784],{},"Array的实例方法，这个方法是实例成员",[14,80786,80787],{},[1448,80788],{"alt":21,"src":80789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22897,80791,80793],{"id":80792},"_410521-reduce","4.10.5.2.1 reduce",[14,80795,80796],{},[1448,80797],{"alt":21,"src":80798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[90,80800,80802],{"className":53048,"code":80801,"language":53050,"meta":21,"style":21},"\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",[96,80803,80804,80812,80820,80825,80830,80835,80840,80844,80849,80854,80859,80863,80868,80873,80877,80882,80887,80892,80900],{"__ignoreMap":21},[99,80805,80806,80808,80810],{"class":101,"line":102},[99,80807,1020],{"class":109},[99,80809,51781],{"class":51281},[99,80811,51288],{"class":109},[99,80813,80814,80816,80818],{"class":101,"line":22},[99,80815,52125],{"class":109},[99,80817,51794],{"class":51281},[99,80819,51288],{"class":109},[99,80821,80822],{"class":101,"line":1165},[99,80823,80824],{"class":109},"    const arr = [1, 5, 8]\n",[99,80826,80827],{"class":101,"line":1180},[99,80828,80829],{"class":109},"    \u002F\u002F 1.没有初始值\n",[99,80831,80832],{"class":101,"line":1186},[99,80833,80834],{"class":109},"    const total = arr.reduce(function (prev, current) {\n",[99,80836,80837],{"class":101,"line":1200},[99,80838,80839],{"class":109},"      return prev + current\n",[99,80841,80842],{"class":101,"line":1206},[99,80843,33442],{"class":109},[99,80845,80846],{"class":101,"line":1297},[99,80847,80848],{"class":109},"    console.log(total)   \u002F\u002F14\n",[99,80850,80851],{"class":101,"line":1303},[99,80852,80853],{"class":109},"    \u002F\u002F 2.有初始值\n",[99,80855,80856],{"class":101,"line":1315},[99,80857,80858],{"class":109},"    const total1 = arr.reduce(function (prev, current) {\n",[99,80860,80861],{"class":101,"line":1598},[99,80862,80839],{"class":109},[99,80864,80865],{"class":101,"line":1603},[99,80866,80867],{"class":109},"    }, 10)\n",[99,80869,80870],{"class":101,"line":1609},[99,80871,80872],{"class":109},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[99,80874,80875],{"class":101,"line":1614},[99,80876,2386],{"emptyLinePlaceholder":26},[99,80878,80879],{"class":101,"line":1628},[99,80880,80881],{"class":109},"    \u002F\u002F 3.箭头函数写法\n",[99,80883,80884],{"class":101,"line":1633},[99,80885,80886],{"class":109},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[99,80888,80889],{"class":101,"line":1639},[99,80890,80891],{"class":109},"    console.log(total2)   \u002F\u002F24\n",[99,80893,80894,80896,80898],{"class":101,"line":1660},[99,80895,52398],{"class":109},[99,80897,51794],{"class":51281},[99,80899,51288],{"class":109},[99,80901,80902,80904,80906],{"class":101,"line":1665},[99,80903,51766],{"class":109},[99,80905,51781],{"class":51281},[99,80907,51288],{"class":109},[14,80909,80910],{},"执行过程：",[53,80912,80913,80916,80919],{},[56,80914,80915],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[56,80917,80918],{},"每一次循环，把返回值给作为下一次循环的上一次值",[56,80920,80921],{},"如果有起始值，则起始值作为上一次值",[90,80923,80925],{"className":53048,"code":80924,"language":53050,"meta":21,"style":21},"\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",[96,80926,80927,80935,80943,80947,80951,80955,80959,80963,80967,80972,80977,80982,80987,80992,80996,81000,81004,81008,81012,81016,81021,81025,81030,81034,81039,81044,81048,81052,81056,81064],{"__ignoreMap":21},[99,80928,80929,80931,80933],{"class":101,"line":102},[99,80930,1020],{"class":109},[99,80932,51781],{"class":51281},[99,80934,51288],{"class":109},[99,80936,80937,80939,80941],{"class":101,"line":22},[99,80938,52125],{"class":109},[99,80940,51794],{"class":51281},[99,80942,51288],{"class":109},[99,80944,80945],{"class":101,"line":1165},[99,80946,80824],{"class":109},[99,80948,80949],{"class":101,"line":1180},[99,80950,80829],{"class":109},[99,80952,80953],{"class":101,"line":1186},[99,80954,80834],{"class":109},[99,80956,80957],{"class":101,"line":1200},[99,80958,80839],{"class":109},[99,80960,80961],{"class":101,"line":1206},[99,80962,33442],{"class":109},[99,80964,80965],{"class":101,"line":1297},[99,80966,80848],{"class":109},[99,80968,80969],{"class":101,"line":1303},[99,80970,80971],{"class":109},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[99,80973,80974],{"class":101,"line":1315},[99,80975,80976],{"class":109},"    \u002F\u002F     1              5                    6\n",[99,80978,80979],{"class":101,"line":1598},[99,80980,80981],{"class":109},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[99,80983,80984],{"class":101,"line":1603},[99,80985,80986],{"class":109},"    \u002F\u002F     6              8                    14\n",[99,80988,80989],{"class":101,"line":1609},[99,80990,80991],{"class":109},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[99,80993,80994],{"class":101,"line":1614},[99,80995,80853],{"class":109},[99,80997,80998],{"class":101,"line":1628},[99,80999,80858],{"class":109},[99,81001,81002],{"class":101,"line":1633},[99,81003,80839],{"class":109},[99,81005,81006],{"class":101,"line":1639},[99,81007,80867],{"class":109},[99,81009,81010],{"class":101,"line":1660},[99,81011,80872],{"class":109},[99,81013,81014],{"class":101,"line":1665},[99,81015,80971],{"class":109},[99,81017,81018],{"class":101,"line":1679},[99,81019,81020],{"class":109},"    \u002F\u002F     10             1                     11\n",[99,81022,81023],{"class":101,"line":1684},[99,81024,80981],{"class":109},[99,81026,81027],{"class":101,"line":1713},[99,81028,81029],{"class":109},"    \u002F\u002F     11             5                    16\n",[99,81031,81032],{"class":101,"line":1718},[99,81033,80981],{"class":109},[99,81035,81036],{"class":101,"line":1735},[99,81037,81038],{"class":109},"    \u002F\u002F     16             8                    24\n",[99,81040,81041],{"class":101,"line":1740},[99,81042,81043],{"class":109},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[99,81045,81046],{"class":101,"line":1745},[99,81047,80881],{"class":109},[99,81049,81050],{"class":101,"line":1750},[99,81051,80886],{"class":109},[99,81053,81054],{"class":101,"line":1764},[99,81055,80891],{"class":109},[99,81057,81058,81060,81062],{"class":101,"line":1769},[99,81059,52398],{"class":109},[99,81061,51794],{"class":51281},[99,81063,51288],{"class":109},[99,81065,81066,81068,81070],{"class":101,"line":2563},[99,81067,51766],{"class":109},[99,81069,51781],{"class":51281},[99,81071,51288],{"class":109},[22897,81073,81075],{"id":81074},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81077,81078],{},[1448,81079],{"alt":21,"src":81080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[90,81082,81084],{"className":53048,"code":81083,"language":53050,"meta":21,"style":21},"\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",[96,81085,81086,81094,81102,81107,81112,81117,81122,81126,81131,81136,81141,81146,81151,81156,81160,81165,81169,81174,81182],{"__ignoreMap":21},[99,81087,81088,81090,81092],{"class":101,"line":102},[99,81089,1020],{"class":109},[99,81091,51781],{"class":51281},[99,81093,51288],{"class":109},[99,81095,81096,81098,81100],{"class":101,"line":22},[99,81097,52125],{"class":109},[99,81099,51794],{"class":51281},[99,81101,51288],{"class":109},[99,81103,81104],{"class":101,"line":1165},[99,81105,81106],{"class":109},"    const arr = [\n",[99,81108,81109],{"class":101,"line":1180},[99,81110,81111],{"class":109},"      { name: '张三', salary: 10000 },\n",[99,81113,81114],{"class":101,"line":1186},[99,81115,81116],{"class":109},"      { name: '李四', salary: 10000 },\n",[99,81118,81119],{"class":101,"line":1200},[99,81120,81121],{"class":109},"      { name: '王五', salary: 10000 }\n",[99,81123,81124],{"class":101,"line":1206},[99,81125,53090],{"class":109},[99,81127,81128],{"class":101,"line":1297},[99,81129,81130],{"class":109},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[99,81132,81133],{"class":101,"line":1303},[99,81134,81135],{"class":109},"    \u002F\u002F prev是累计值\n",[99,81137,81138],{"class":101,"line":1315},[99,81139,81140],{"class":109},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[99,81142,81143],{"class":101,"line":1598},[99,81144,81145],{"class":109},"    console.log(total)\n",[99,81147,81148],{"class":101,"line":1603},[99,81149,81150],{"class":109},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[99,81152,81153],{"class":101,"line":1609},[99,81154,81155],{"class":109},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[99,81157,81158],{"class":101,"line":1614},[99,81159,81150],{"class":109},[99,81161,81162],{"class":101,"line":1628},[99,81163,81164],{"class":109},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[99,81166,81167],{"class":101,"line":1633},[99,81168,81150],{"class":109},[99,81170,81171],{"class":101,"line":1639},[99,81172,81173],{"class":109},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[99,81175,81176,81178,81180],{"class":101,"line":1660},[99,81177,52398],{"class":109},[99,81179,51794],{"class":51281},[99,81181,51288],{"class":109},[99,81183,81184,81186,81188],{"class":101,"line":1665},[99,81185,51766],{"class":109},[99,81187,51781],{"class":51281},[99,81189,51288],{"class":109},[22897,81191,81193],{"id":81192},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81195,81196],{},[1448,81197],{"alt":21,"src":81198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81200,81201],{},[1448,81202],{"alt":21,"src":81203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[53,81205,81206],{},[56,81207,81208],{},"find()",[14,81210,81211],{},"循环查找，找到第一个就ok",[14,81213,81214],{},[348,81215,81218],{"href":81216,"rel":81217},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23853],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[90,81220,81222],{"className":50614,"code":81221,"language":50616,"meta":21,"style":21},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[96,81223,81224,81229,81234],{"__ignoreMap":21},[99,81225,81226],{"class":101,"line":102},[99,81227,81228],{"class":109},"const array1 = [5, 12, 8, 130, 44]\n",[99,81230,81231],{"class":101,"line":22},[99,81232,81233],{"class":109},"const found = array1.find((element) => element > 10)\n",[99,81235,81236],{"class":101,"line":1165},[99,81237,81238],{"class":109},"console.log(found)  \u002F\u002F12\n",[14,81240,81241,81243,81244,81249,81250,81253,81254,81256,81257,81262,81263,81265,81266,81268,81269,81271,81272],{},[96,81242,81208],{}," 方法是一个",[348,81245,81248],{"href":81246,"rel":81247},"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",[23853],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[96,81251,81252],{},"callbackFn"," 函数，直到 ",[96,81255,81252],{}," 返回一个",[348,81258,81261],{"href":81259,"rel":81260},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23853],"真值","。然后 ",[96,81264,81208],{}," 返回该元素并停止迭代数组。如果 ",[96,81267,81252],{}," 从未返回真值，则 ",[96,81270,81208],{}," 返回 ",[96,81273,81274],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[90,81276,81278],{"className":53048,"code":81277,"language":53050,"meta":21,"style":21},"\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",[96,81279,81280,81288,81296,81301,81306,81311,81315,81320,81325,81329,81334,81339,81343,81347,81352,81357,81361,81365,81370,81375,81380,81385,81390,81394,81399,81404,81409,81414,81418,81423,81431],{"__ignoreMap":21},[99,81281,81282,81284,81286],{"class":101,"line":102},[99,81283,1020],{"class":109},[99,81285,51781],{"class":51281},[99,81287,51288],{"class":109},[99,81289,81290,81292,81294],{"class":101,"line":22},[99,81291,52125],{"class":109},[99,81293,51794],{"class":51281},[99,81295,51288],{"class":109},[99,81297,81298],{"class":101,"line":1165},[99,81299,81300],{"class":109},"    const arr = ['red', 'blue', 'green']\n",[99,81302,81303],{"class":101,"line":1180},[99,81304,81305],{"class":109},"    const found = arr.find(item => item === 'pink')\n",[99,81307,81308],{"class":101,"line":1186},[99,81309,81310],{"class":109},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[99,81312,81313],{"class":101,"line":1200},[99,81314,2386],{"emptyLinePlaceholder":26},[99,81316,81317],{"class":101,"line":1206},[99,81318,81319],{"class":109},"    \u002F\u002F 使用场景，用于查找数据\n",[99,81321,81322],{"class":101,"line":1297},[99,81323,81324],{"class":109},"    const arr1 = [\n",[99,81326,81327],{"class":101,"line":1303},[99,81328,79367],{"class":109},[99,81330,81331],{"class":101,"line":1315},[99,81332,81333],{"class":109},"        name: '小米',\n",[99,81335,81336],{"class":101,"line":1598},[99,81337,81338],{"class":109},"        price: 1999\n",[99,81340,81341],{"class":101,"line":1603},[99,81342,77873],{"class":109},[99,81344,81345],{"class":101,"line":1609},[99,81346,79367],{"class":109},[99,81348,81349],{"class":101,"line":1614},[99,81350,81351],{"class":109},"        name: '华为',\n",[99,81353,81354],{"class":101,"line":1628},[99,81355,81356],{"class":109},"        price: 3999\n",[99,81358,81359],{"class":101,"line":1633},[99,81360,52379],{"class":109},[99,81362,81363],{"class":101,"line":1639},[99,81364,53090],{"class":109},[99,81366,81367],{"class":101,"line":1660},[99,81368,81369],{"class":109},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[99,81371,81372],{"class":101,"line":1665},[99,81373,81374],{"class":109},"    \u002F\u002F const found1 = arr1.find(item => {\n",[99,81376,81377],{"class":101,"line":1679},[99,81378,81379],{"class":109},"    \u002F\u002F   if (item.name === '小米') {\n",[99,81381,81382],{"class":101,"line":1684},[99,81383,81384],{"class":109},"    \u002F\u002F     return item\n",[99,81386,81387],{"class":101,"line":1713},[99,81388,81389],{"class":109},"    \u002F\u002F   }\n",[99,81391,81392],{"class":101,"line":1718},[99,81393,63271],{"class":109},[99,81395,81396],{"class":101,"line":1735},[99,81397,81398],{"class":109},"    \u002F\u002F 另一种写法\n",[99,81400,81401],{"class":101,"line":1740},[99,81402,81403],{"class":109},"    const found1 = arr1.find(item => {\n",[99,81405,81406],{"class":101,"line":1745},[99,81407,81408],{"class":109},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[99,81410,81411],{"class":101,"line":1750},[99,81412,81413],{"class":109},"      return item.name = '小米'\n",[99,81415,81416],{"class":101,"line":1764},[99,81417,33442],{"class":109},[99,81419,81420],{"class":101,"line":1769},[99,81421,81422],{"class":109},"    console.log(found1)\n",[99,81424,81425,81427,81429],{"class":101,"line":2563},[99,81426,52398],{"class":109},[99,81428,51794],{"class":51281},[99,81430,51288],{"class":109},[99,81432,81433,81435,81437],{"class":101,"line":2577},[99,81434,51766],{"class":109},[99,81436,51781],{"class":51281},[99,81438,51288],{"class":109},[14,81440,81441],{},[1448,81442],{"alt":21,"src":81443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81445,81446],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[53,81448,81449],{"start":22},[56,81450,81451],{},"every()返回的是布尔值",[14,81453,81454],{},[348,81455,81458],{"href":81456,"rel":81457},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23853],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81460,81461],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81463,81464],{},"some是只有有一个就没问题",[14,81466,81467],{},"every是必须全是才行",[90,81469,81473],{"className":81470,"code":81471,"language":81472,"meta":21,"style":21},"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",[96,81474,81475,81491,81505,81509,81518],{"__ignoreMap":21},[99,81476,81477,81479,81482,81484,81486,81489],{"class":101,"line":102},[99,81478,54430],{"class":105},[99,81480,81481],{"class":109}," isBigEnough(element, ",[99,81483,74039],{"class":105},[99,81485,12422],{"class":109},[99,81487,81488],{"class":105},"array",[99,81490,12429],{"class":109},[99,81492,81493,81496,81499,81501,81503],{"class":101,"line":22},[99,81494,81495],{"class":105},"  return",[99,81497,81498],{"class":109}," element ",[99,81500,1696],{"class":105},[99,81502,2024],{"class":158},[99,81504,1276],{"class":109},[99,81506,81507],{"class":101,"line":1165},[99,81508,1551],{"class":109},[99,81510,81511,81514,81516],{"class":101,"line":1180},[99,81512,81513],{"class":109},"[12, 5, 8, 130, 44].every(isBigEnough); ",[99,81515,33310],{"class":105},[99,81517,54497],{"class":109},[99,81519,81520,81523,81525],{"class":101,"line":1186},[99,81521,81522],{"class":109},"[12, 54, 18, 130, 44].every(isBigEnough); ",[99,81524,33310],{"class":105},[99,81526,57921],{"class":109},[90,81528,81530],{"className":53048,"code":81529,"language":53050,"meta":21,"style":21},"\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",[96,81531,81532,81540,81548,81553,81557,81562,81567,81575],{"__ignoreMap":21},[99,81533,81534,81536,81538],{"class":101,"line":102},[99,81535,1020],{"class":109},[99,81537,51781],{"class":51281},[99,81539,51288],{"class":109},[99,81541,81542,81544,81546],{"class":101,"line":22},[99,81543,52125],{"class":109},[99,81545,51794],{"class":51281},[99,81547,51288],{"class":109},[99,81549,81550],{"class":101,"line":1165},[99,81551,81552],{"class":109},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[99,81554,81555],{"class":101,"line":1180},[99,81556,78303],{"class":109},[99,81558,81559],{"class":101,"line":1186},[99,81560,81561],{"class":109},"    const flag = arr.every(item => item >= 10)\n",[99,81563,81564],{"class":101,"line":1200},[99,81565,81566],{"class":109},"    console.log(flag)    \u002F\u002Ftrue\n",[99,81568,81569,81571,81573],{"class":101,"line":1206},[99,81570,52398],{"class":109},[99,81572,51794],{"class":51281},[99,81574,51288],{"class":109},[99,81576,81577,81579,81581],{"class":101,"line":1297},[99,81578,51766],{"class":109},[99,81580,51781],{"class":51281},[99,81582,51288],{"class":109},[90,81584,81586],{"className":53048,"code":81585,"language":53050,"meta":21,"style":21},"\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",[96,81587,81588,81596,81604,81608,81613,81618,81623,81631],{"__ignoreMap":21},[99,81589,81590,81592,81594],{"class":101,"line":102},[99,81591,1020],{"class":109},[99,81593,51781],{"class":51281},[99,81595,51288],{"class":109},[99,81597,81598,81600,81602],{"class":101,"line":22},[99,81599,52125],{"class":109},[99,81601,51794],{"class":51281},[99,81603,51288],{"class":109},[99,81605,81606],{"class":101,"line":1165},[99,81607,81552],{"class":109},[99,81609,81610],{"class":101,"line":1180},[99,81611,81612],{"class":109},"    const arr = [10, 0, 5]\n",[99,81614,81615],{"class":101,"line":1186},[99,81616,81617],{"class":109},"    const flag = arr.some(item => item >= 10)\n",[99,81619,81620],{"class":101,"line":1200},[99,81621,81622],{"class":109},"    console.log(flag)   \u002F\u002Ftrue\n",[99,81624,81625,81627,81629],{"class":101,"line":1206},[99,81626,52398],{"class":109},[99,81628,51794],{"class":51281},[99,81630,51288],{"class":109},[99,81632,81633,81635,81637],{"class":101,"line":1297},[99,81634,51766],{"class":109},[99,81636,51781],{"class":51281},[99,81638,51288],{"class":109},[22897,81640,81642],{"id":81641},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81644,81645],{},[1448,81646],{"alt":21,"src":81647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[90,81649,81651],{"className":50614,"code":81650,"language":50616,"meta":21,"style":21},"\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",[96,81652,81653,81663,81677,81681,81689,81703,81723,81735,81743,81750,81762,81774,81786,81798,81808,81818,81822,81830,81838,81842,81850,81862,81870,81892,81897,81902,81935,81943,81951,81955],{"__ignoreMap":21},[99,81654,81655,81657,81659,81661],{"class":101,"line":102},[99,81656,51278],{"class":109},[99,81658,51282],{"class":51281},[99,81660,51285],{"class":1949},[99,81662,51288],{"class":109},[99,81664,81665,81667,81669,81671,81673,81675],{"class":101,"line":22},[99,81666,1020],{"class":109},[99,81668,50616],{"class":51281},[99,81670,51297],{"class":1949},[99,81672,155],{"class":109},[99,81674,51302],{"class":214},[99,81676,51288],{"class":109},[99,81678,81679],{"class":101,"line":1165},[99,81680,2386],{"emptyLinePlaceholder":26},[99,81682,81683,81685,81687],{"class":101,"line":1180},[99,81684,1020],{"class":109},[99,81686,51315],{"class":51281},[99,81688,51288],{"class":109},[99,81690,81691,81693,81695,81697,81699,81701],{"class":101,"line":1186},[99,81692,52125],{"class":109},[99,81694,51325],{"class":51281},[99,81696,51328],{"class":1949},[99,81698,155],{"class":109},[99,81700,51333],{"class":214},[99,81702,51288],{"class":109},[99,81704,81705,81707,81709,81711,81713,81715,81717,81719,81721],{"class":101,"line":1200},[99,81706,52125],{"class":109},[99,81708,51325],{"class":51281},[99,81710,14907],{"class":1949},[99,81712,155],{"class":109},[99,81714,51372],{"class":214},[99,81716,51352],{"class":1949},[99,81718,155],{"class":109},[99,81720,51379],{"class":214},[99,81722,51288],{"class":109},[99,81724,81725,81727,81729,81731,81733],{"class":101,"line":1206},[99,81726,52125],{"class":109},[99,81728,51388],{"class":51281},[99,81730,51391],{"class":109},[99,81732,51388],{"class":51281},[99,81734,51288],{"class":109},[99,81736,81737,81739,81741],{"class":101,"line":1297},[99,81738,52125],{"class":109},[99,81740,5113],{"class":51281},[99,81742,51288],{"class":109},[99,81744,81745,81748],{"class":101,"line":1303},[99,81746,81747],{"class":51281},"    div",[99,81749,15559],{"class":109},[99,81751,81752,81754,81756,81758,81760],{"class":101,"line":1315},[99,81753,54752],{"class":158},[99,81755,51418],{"class":109},[99,81757,1708],{"class":158},[99,81759,51473],{"class":105},[99,81761,1276],{"class":109},[99,81763,81764,81766,81768,81770,81772],{"class":101,"line":1598},[99,81765,54766],{"class":158},[99,81767,51418],{"class":109},[99,81769,511],{"class":158},[99,81771,51473],{"class":105},[99,81773,1276],{"class":109},[99,81775,81776,81778,81780,81782,81784],{"class":101,"line":1603},[99,81777,57340],{"class":158},[99,81779,51418],{"class":109},[99,81781,511],{"class":158},[99,81783,51473],{"class":105},[99,81785,1276],{"class":109},[99,81787,81788,81790,81792,81794,81796],{"class":101,"line":1609},[99,81789,65114],{"class":158},[99,81791,51418],{"class":109},[99,81793,608],{"class":158},[99,81795,51473],{"class":105},[99,81797,1276],{"class":109},[99,81799,81800,81802,81804,81806],{"class":101,"line":1614},[99,81801,57267],{"class":158},[99,81803,51418],{"class":109},[99,81805,51573],{"class":158},[99,81807,1276],{"class":109},[99,81809,81810,81812,81814,81816],{"class":101,"line":1628},[99,81811,54865],{"class":158},[99,81813,51418],{"class":109},[99,81815,51626],{"class":158},[99,81817,1276],{"class":109},[99,81819,81820],{"class":101,"line":1633},[99,81821,2173],{"class":109},[99,81823,81824,81826,81828],{"class":101,"line":1639},[99,81825,52398],{"class":109},[99,81827,5113],{"class":51281},[99,81829,51288],{"class":109},[99,81831,81832,81834,81836],{"class":101,"line":1660},[99,81833,51766],{"class":109},[99,81835,51315],{"class":51281},[99,81837,51288],{"class":109},[99,81839,81840],{"class":101,"line":1665},[99,81841,2386],{"emptyLinePlaceholder":26},[99,81843,81844,81846,81848],{"class":101,"line":1679},[99,81845,1020],{"class":109},[99,81847,51781],{"class":51281},[99,81849,51288],{"class":109},[99,81851,81852,81854,81856,81858,81860],{"class":101,"line":1684},[99,81853,52125],{"class":109},[99,81855,51592],{"class":51281},[99,81857,55295],{"class":109},[99,81859,51592],{"class":51281},[99,81861,51288],{"class":109},[99,81863,81864,81866,81868],{"class":101,"line":1713},[99,81865,52125],{"class":109},[99,81867,51794],{"class":51281},[99,81869,51288],{"class":109},[99,81871,81872,81874,81877,81879,81882,81885,81887,81890],{"class":101,"line":1718},[99,81873,11208],{"class":105},[99,81875,81876],{"class":158}," spec",[99,81878,13551],{"class":105},[99,81880,81881],{"class":109}," { size: ",[99,81883,81884],{"class":214},"'40cm*40cm'",[99,81886,55445],{"class":109},[99,81888,81889],{"class":214},"'黑色'",[99,81891,55585],{"class":109},[99,81893,81894],{"class":101,"line":1735},[99,81895,81896],{"class":168},"    \u002F\u002F const arr = Object.values(spec)\n",[99,81898,81899],{"class":101,"line":1740},[99,81900,81901],{"class":168},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[99,81903,81904,81906,81908,81910,81913,81915,81917,81920,81923,81926,81928,81930,81933],{"class":101,"line":1745},[99,81905,52388],{"class":109},[99,81907,54380],{"class":1949},[99,81909,110],{"class":109},[99,81911,81912],{"class":214},"'div'",[99,81914,74230],{"class":109},[99,81916,155],{"class":105},[99,81918,81919],{"class":109}," Object.",[99,81921,81922],{"class":1949},"values",[99,81924,81925],{"class":109},"(spec).",[99,81927,74204],{"class":1949},[99,81929,110],{"class":109},[99,81931,81932],{"class":214},"'\u002F'",[99,81934,116],{"class":109},[99,81936,81937,81939,81941],{"class":101,"line":1750},[99,81938,52398],{"class":109},[99,81940,51794],{"class":51281},[99,81942,51288],{"class":109},[99,81944,81945,81947,81949],{"class":101,"line":1764},[99,81946,51766],{"class":109},[99,81948,51781],{"class":51281},[99,81950,51288],{"class":109},[99,81952,81953],{"class":101,"line":1769},[99,81954,2386],{"emptyLinePlaceholder":26},[99,81956,81957,81959,81961],{"class":101,"line":2563},[99,81958,51766],{"class":109},[99,81960,50616],{"class":51281},[99,81962,51288],{"class":109},[14,81964,81965],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22897,81967,81969],{"id":81968},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81971,81972],{},"静态方法，将伪数组转换为真数组",[14,81974,81975],{},[1448,81976],{"alt":21,"src":81977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[90,81979,81981],{"className":53048,"code":81980,"language":53050,"meta":21,"style":21},"\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",[96,81982,81983,81991,81999,82011,82023,82035,82043,82051,82056,82061,82066,82071,82079],{"__ignoreMap":21},[99,81984,81985,81987,81989],{"class":101,"line":102},[99,81986,1020],{"class":109},[99,81988,51781],{"class":51281},[99,81990,51288],{"class":109},[99,81992,81993,81995,81997],{"class":101,"line":22},[99,81994,52125],{"class":109},[99,81996,1117],{"class":51281},[99,81998,51288],{"class":109},[99,82000,82001,82003,82005,82007,82009],{"class":101,"line":1165},[99,82002,51322],{"class":109},[99,82004,56],{"class":51281},[99,82006,55295],{"class":109},[99,82008,56],{"class":51281},[99,82010,51288],{"class":109},[99,82012,82013,82015,82017,82019,82021],{"class":101,"line":1180},[99,82014,51322],{"class":109},[99,82016,56],{"class":51281},[99,82018,55295],{"class":109},[99,82020,56],{"class":51281},[99,82022,51288],{"class":109},[99,82024,82025,82027,82029,82031,82033],{"class":101,"line":1186},[99,82026,51322],{"class":109},[99,82028,56],{"class":51281},[99,82030,55295],{"class":109},[99,82032,56],{"class":51281},[99,82034,51288],{"class":109},[99,82036,82037,82039,82041],{"class":101,"line":1200},[99,82038,52398],{"class":109},[99,82040,1117],{"class":51281},[99,82042,51288],{"class":109},[99,82044,82045,82047,82049],{"class":101,"line":1206},[99,82046,52125],{"class":109},[99,82048,51794],{"class":51281},[99,82050,51288],{"class":109},[99,82052,82053],{"class":101,"line":1297},[99,82054,82055],{"class":109},"    const lis = document.querySelectorAll('li')\n",[99,82057,82058],{"class":101,"line":1303},[99,82059,82060],{"class":109},"    const liss = Array.from(lis)\n",[99,82062,82063],{"class":101,"line":1315},[99,82064,82065],{"class":109},"    liss.pop()\n",[99,82067,82068],{"class":101,"line":1598},[99,82069,82070],{"class":109},"    console.log(liss)\n",[99,82072,82073,82075,82077],{"class":101,"line":1603},[99,82074,52398],{"class":109},[99,82076,51794],{"class":51281},[99,82078,51288],{"class":109},[99,82080,82081,82083,82085],{"class":101,"line":1609},[99,82082,51766],{"class":109},[99,82084,51781],{"class":51281},[99,82086,51288],{"class":109},[14,82088,82089],{},[1448,82090],{"alt":21,"src":82091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21985,82093,82095],{"id":82094},"_41053-string","4.10.5.3 String",[14,82097,82098],{},[1448,82099],{"alt":21,"src":82100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22897,82102,82104],{"id":82103},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[90,82106,82108],{"className":53048,"code":82107,"language":53050,"meta":21,"style":21},"\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",[96,82109,82110,82118,82126,82131,82136,82141,82145,82150,82155,82160,82168],{"__ignoreMap":21},[99,82111,82112,82114,82116],{"class":101,"line":102},[99,82113,1020],{"class":109},[99,82115,51781],{"class":51281},[99,82117,51288],{"class":109},[99,82119,82120,82122,82124],{"class":101,"line":22},[99,82121,52125],{"class":109},[99,82123,51794],{"class":51281},[99,82125,51288],{"class":109},[99,82127,82128],{"class":101,"line":1165},[99,82129,82130],{"class":109},"    \u002F\u002F 把字符串转化为数组\n",[99,82132,82133],{"class":101,"line":1180},[99,82134,82135],{"class":109},"    const str = 'pink,red'\n",[99,82137,82138],{"class":101,"line":1186},[99,82139,82140],{"class":109},"    const arr = str.split(',')\n",[99,82142,82143],{"class":101,"line":1200},[99,82144,80619],{"class":109},[99,82146,82147],{"class":101,"line":1206},[99,82148,82149],{"class":109},"    const str1 = '2025-8-25'\n",[99,82151,82152],{"class":101,"line":1297},[99,82153,82154],{"class":109},"    const arr1 = str1.split('-')\n",[99,82156,82157],{"class":101,"line":1303},[99,82158,82159],{"class":109},"    console.log(arr1)\n",[99,82161,82162,82164,82166],{"class":101,"line":1315},[99,82163,52398],{"class":109},[99,82165,51794],{"class":51281},[99,82167,51288],{"class":109},[99,82169,82170,82172,82174],{"class":101,"line":1598},[99,82171,51766],{"class":109},[99,82173,51781],{"class":51281},[99,82175,51288],{"class":109},[22897,82177,82179],{"id":82178},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82181,5168],{},[14,82183,82184],{},"substring(indexStart)",[14,82186,82187],{},"substring(indexStart, indexEnd)",[1117,82189,82190,82201,82213,82223],{},[56,82191,82192,82193,82196,82197,82200],{},"如果省略了 ",[96,82194,82195],{},"indexEnd","，则 ",[96,82198,82199],{},"substring()"," 提取字符直到字符串的末尾",[56,82202,82203,82204,82207,82208,82196,82210,82212],{},"如果 ",[96,82205,82206],{},"indexStart"," 等于 ",[96,82209,82195],{},[96,82211,82199],{}," 返回一个空字符串",[56,82214,82203,82215,82217,82218,82196,82220,82222],{},[96,82216,82206],{}," 大于 ",[96,82219,82195],{},[96,82221,82199],{}," 的效果就像交换了这两个参数一样",[56,82224,82225],{},"结束的索引号不包含想要截取的部分",[90,82227,82229],{"className":81470,"code":82228,"language":81472,"meta":21,"style":21},"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",[96,82230,82231,82243,82247,82281,82311,82315,82346,82350,82377,82407,82437,82441,82472],{"__ignoreMap":21},[99,82232,82233,82236,82238,82241],{"class":101,"line":102},[99,82234,82235],{"class":109},"const anyString ",[99,82237,155],{"class":105},[99,82239,82240],{"class":214}," \"Mozilla\"",[99,82242,1276],{"class":109},[99,82244,82245],{"class":101,"line":22},[99,82246,2386],{"emptyLinePlaceholder":26},[99,82248,82249,82252,82254,82256,82258,82261,82263,82266,82268,82270,82272,82274,82276,82278],{"class":101,"line":1165},[99,82250,82251],{"class":158},"console",[99,82253,668],{"class":109},[99,82255,58228],{"class":158},[99,82257,110],{"class":109},[99,82259,82260],{"class":158},"anyString",[99,82262,668],{"class":109},[99,82264,82265],{"class":158},"substring",[99,82267,110],{"class":109},[99,82269,301],{"class":158},[99,82271,12422],{"class":109},[99,82273,327],{"class":158},[99,82275,75234],{"class":109},[99,82277,33310],{"class":105},[99,82279,82280],{"class":214}," 'M'\n",[99,82282,82283,82285,82287,82289,82291,82293,82295,82297,82299,82301,82303,82305,82307,82309],{"class":101,"line":1180},[99,82284,82251],{"class":158},[99,82286,668],{"class":109},[99,82288,58228],{"class":158},[99,82290,110],{"class":109},[99,82292,82260],{"class":158},[99,82294,668],{"class":109},[99,82296,82265],{"class":158},[99,82298,110],{"class":109},[99,82300,327],{"class":158},[99,82302,12422],{"class":109},[99,82304,301],{"class":158},[99,82306,75234],{"class":109},[99,82308,33310],{"class":105},[99,82310,82280],{"class":214},[99,82312,82313],{"class":101,"line":1186},[99,82314,2386],{"emptyLinePlaceholder":26},[99,82316,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339,82341,82343],{"class":101,"line":1200},[99,82318,82251],{"class":158},[99,82320,668],{"class":109},[99,82322,58228],{"class":158},[99,82324,110],{"class":109},[99,82326,82260],{"class":158},[99,82328,668],{"class":109},[99,82330,82265],{"class":158},[99,82332,110],{"class":109},[99,82334,301],{"class":158},[99,82336,12422],{"class":109},[99,82338,454],{"class":158},[99,82340,75234],{"class":109},[99,82342,33310],{"class":105},[99,82344,82345],{"class":214}," 'Mozill'\n",[99,82347,82348],{"class":101,"line":1206},[99,82349,2386],{"emptyLinePlaceholder":26},[99,82351,82352,82354,82356,82358,82360,82362,82364,82366,82368,82370,82372,82374],{"class":101,"line":1297},[99,82353,82251],{"class":158},[99,82355,668],{"class":109},[99,82357,58228],{"class":158},[99,82359,110],{"class":109},[99,82361,82260],{"class":158},[99,82363,668],{"class":109},[99,82365,82265],{"class":158},[99,82367,110],{"class":109},[99,82369,403],{"class":158},[99,82371,75234],{"class":109},[99,82373,33310],{"class":105},[99,82375,82376],{"class":214}," 'lla'\n",[99,82378,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401,82403,82405],{"class":101,"line":1303},[99,82380,82251],{"class":158},[99,82382,668],{"class":109},[99,82384,58228],{"class":158},[99,82386,110],{"class":109},[99,82388,82260],{"class":158},[99,82390,668],{"class":109},[99,82392,82265],{"class":158},[99,82394,110],{"class":109},[99,82396,403],{"class":158},[99,82398,12422],{"class":109},[99,82400,479],{"class":158},[99,82402,75290],{"class":109},[99,82404,33310],{"class":105},[99,82406,82376],{"class":214},[99,82408,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435],{"class":101,"line":1315},[99,82410,82251],{"class":158},[99,82412,668],{"class":109},[99,82414,58228],{"class":158},[99,82416,110],{"class":109},[99,82418,82260],{"class":158},[99,82420,668],{"class":109},[99,82422,82265],{"class":158},[99,82424,110],{"class":109},[99,82426,479],{"class":158},[99,82428,12422],{"class":109},[99,82430,403],{"class":158},[99,82432,75234],{"class":109},[99,82434,33310],{"class":105},[99,82436,82376],{"class":214},[99,82438,82439],{"class":101,"line":1598},[99,82440,2386],{"emptyLinePlaceholder":26},[99,82442,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469],{"class":101,"line":1603},[99,82444,82251],{"class":158},[99,82446,668],{"class":109},[99,82448,58228],{"class":158},[99,82450,110],{"class":109},[99,82452,82260],{"class":158},[99,82454,668],{"class":109},[99,82456,82265],{"class":158},[99,82458,110],{"class":109},[99,82460,301],{"class":158},[99,82462,12422],{"class":109},[99,82464,479],{"class":158},[99,82466,75234],{"class":109},[99,82468,33310],{"class":105},[99,82470,82471],{"class":214}," 'Mozilla'\n",[99,82473,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496,82498,82500],{"class":101,"line":1609},[99,82475,82251],{"class":158},[99,82477,668],{"class":109},[99,82479,58228],{"class":158},[99,82481,110],{"class":109},[99,82483,82260],{"class":158},[99,82485,668],{"class":109},[99,82487,82265],{"class":158},[99,82489,110],{"class":109},[99,82491,301],{"class":158},[99,82493,12422],{"class":109},[99,82495,556],{"class":158},[99,82497,75234],{"class":109},[99,82499,33310],{"class":105},[99,82501,82471],{"class":214},[22897,82503,82505],{"id":82504},"_410533-startswith","4.10.5.3.3 startsWith",[14,82507,82508,82511,82512,82517,82518,82520,82521],{},[96,82509,82510],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[259,82513,82514],{},[96,82515,82516],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[96,82519,1348],{}," 或 ",[96,82522,66001],{},[90,82524,82526],{"className":77476,"code":82525,"language":77478,"meta":21,"style":21},"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",[96,82527,82528,82540,82559,82564,82584],{"__ignoreMap":21},[99,82529,82530,82532,82535,82537],{"class":101,"line":102},[99,82531,6779],{"class":105},[99,82533,82534],{"class":109}," str1 ",[99,82536,155],{"class":105},[99,82538,82539],{"class":214}," \"Saturday night plans\"\n",[99,82541,82542,82544,82546,82549,82552,82554,82557],{"class":101,"line":22},[99,82543,77513],{"class":109},[99,82545,58228],{"class":1949},[99,82547,82548],{"class":109},"(str1.",[99,82550,82551],{"class":1949},"startsWith",[99,82553,110],{"class":109},[99,82555,82556],{"class":214},"\"Sat\"",[99,82558,30478],{"class":109},[99,82560,82561],{"class":101,"line":1165},[99,82562,82563],{"class":168},"\u002F\u002F Expected output: true\n",[99,82565,82566,82568,82570,82572,82574,82576,82578,82580,82582],{"class":101,"line":1180},[99,82567,77513],{"class":109},[99,82569,58228],{"class":1949},[99,82571,82548],{"class":109},[99,82573,82551],{"class":1949},[99,82575,110],{"class":109},[99,82577,82556],{"class":214},[99,82579,12422],{"class":109},[99,82581,181],{"class":158},[99,82583,30478],{"class":109},[99,82585,82586],{"class":101,"line":1186},[99,82587,82588],{"class":168},"\u002F\u002F Expected output: false\n",[90,82590,82592],{"className":50614,"code":82591,"language":50616,"meta":21,"style":21},"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",[96,82593,82594,82599,82604,82608,82613,82618],{"__ignoreMap":21},[99,82595,82596],{"class":101,"line":102},[99,82597,82598],{"class":109},"startsWith(searchString)\n",[99,82600,82601],{"class":101,"line":22},[99,82602,82603],{"class":109},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[99,82605,82606],{"class":101,"line":1165},[99,82607,2386],{"emptyLinePlaceholder":26},[99,82609,82610],{"class":101,"line":1180},[99,82611,82612],{"class":109},"const str3 = 'pink老师上课中'\n",[99,82614,82615],{"class":101,"line":1186},[99,82616,82617],{"class":109},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[99,82619,82620],{"class":101,"line":1200},[99,82621,82622],{"class":109},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22897,82624,82626],{"id":82625},"_410534-includes","4.10.5.3.4 includes",[14,82628,82629],{},"includes(searchString) includes(searchString, position)",[53,82631,82632],{},[56,82633,82634],{},"searchString:",[14,82636,82637,82638,82640,82641,82646,82647,82652,82653,21487,82656,82659,82660,82663],{},"一个要在 ",[96,82639,1285],{}," 中查找的字符串。",[348,82642,82645],{"href":82643,"rel":82644},"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",[23853],"不能是正则表达式","。所有非正则表达式的值都会被",[348,82648,82651],{"href":82649,"rel":82650},"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",[23853],"强制转换为字符串","，因此如果该参数被省略或传入 ",[96,82654,82655],{},"undefined",[96,82657,82658],{},"includes()"," 方法会在字符串中搜索 ",[96,82661,82662],{},"\"undefined\"","，这通常不是你想要的",[53,82665,82666],{"start":22},[56,82667,82668,969],{},[96,82669,82670],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82672,82673,82674,82677,82678],{},"在字符串中开始搜索 ",[96,82675,82676],{},"searchString"," 的位置。默认值为 ",[96,82679,301],{},[53,82681,82682],{"start":1165},[56,82683,82684],{},"返回值：",[14,82686,82687,82688,82690,82691,82695,82696],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[96,82689,82676],{}," 为空字符串的情况），则返回 ",[259,82692,82693],{},[96,82694,1348],{}," ，否则返回 ",[259,82697,82698],{},[96,82699,66001],{},[53,82701,82702],{"start":1180},[56,82703,82704],{},"异常：",[14,82706,82203,82707,13782,82709,82713],{},[96,82708,82676],{},[348,82710,82712],{"href":82643,"rel":82711},[23853],"是一个正则表达式","，则会抛出",[14,82715,82716],{},"只要是有就是true，不需要非得以谁开头结尾",[90,82718,82720],{"className":77476,"code":82719,"language":77478,"meta":21,"style":21},"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",[96,82721,82722,82733,82756,82775,82795,82817,82836],{"__ignoreMap":21},[99,82723,82724,82726,82728,82730],{"class":101,"line":102},[99,82725,6779],{"class":105},[99,82727,79756],{"class":109},[99,82729,155],{"class":105},[99,82731,82732],{"class":214}," \"To be, or not to be, that is the question.\"\n",[99,82734,82735,82737,82739,82742,82745,82747,82750,82753],{"class":101,"line":22},[99,82736,77513],{"class":109},[99,82738,58228],{"class":1949},[99,82740,82741],{"class":109},"(str.",[99,82743,82744],{"class":1949},"includes",[99,82746,110],{"class":109},[99,82748,82749],{"class":214},"\"To be\"",[99,82751,82752],{"class":109},"))",[99,82754,82755],{"class":168},"  \u002F\u002F true\n",[99,82757,82758,82760,82762,82764,82766,82768,82771,82773],{"class":101,"line":1165},[99,82759,77513],{"class":109},[99,82761,58228],{"class":1949},[99,82763,82741],{"class":109},[99,82765,82744],{"class":1949},[99,82767,110],{"class":109},[99,82769,82770],{"class":214},"\"question\"",[99,82772,82752],{"class":109},[99,82774,82755],{"class":168},[99,82776,82777,82779,82781,82783,82785,82787,82790,82792],{"class":101,"line":1180},[99,82778,77513],{"class":109},[99,82780,58228],{"class":1949},[99,82782,82741],{"class":109},[99,82784,82744],{"class":1949},[99,82786,110],{"class":109},[99,82788,82789],{"class":214},"\"nonexistent\"",[99,82791,82752],{"class":109},[99,82793,82794],{"class":168},"  \u002F\u002F false\n",[99,82796,82797,82799,82801,82803,82805,82807,82809,82811,82813,82815],{"class":101,"line":1186},[99,82798,77513],{"class":109},[99,82800,58228],{"class":1949},[99,82802,82741],{"class":109},[99,82804,82744],{"class":1949},[99,82806,110],{"class":109},[99,82808,82749],{"class":214},[99,82810,12422],{"class":109},[99,82812,327],{"class":158},[99,82814,82752],{"class":109},[99,82816,82794],{"class":168},[99,82818,82819,82821,82823,82825,82827,82829,82832,82834],{"class":101,"line":1200},[99,82820,77513],{"class":109},[99,82822,58228],{"class":1949},[99,82824,82741],{"class":109},[99,82826,82744],{"class":1949},[99,82828,110],{"class":109},[99,82830,82831],{"class":214},"\"TO BE\"",[99,82833,82752],{"class":109},[99,82835,82794],{"class":168},[99,82837,82838,82840,82842,82844,82846,82848,82850,82852],{"class":101,"line":1206},[99,82839,77513],{"class":109},[99,82841,58228],{"class":1949},[99,82843,82741],{"class":109},[99,82845,82744],{"class":1949},[99,82847,110],{"class":109},[99,82849,7639],{"class":214},[99,82851,82752],{"class":109},[99,82853,82755],{"class":168},[22897,82855,82857],{"id":82856},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[90,82859,82861],{"className":53048,"code":82860,"language":53050,"meta":21,"style":21},"\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",[96,82862,82863,82871,82879,82884,82889,82894,82899,82904,82912],{"__ignoreMap":21},[99,82864,82865,82867,82869],{"class":101,"line":102},[99,82866,1020],{"class":109},[99,82868,51781],{"class":51281},[99,82870,51288],{"class":109},[99,82872,82873,82875,82877],{"class":101,"line":22},[99,82874,52125],{"class":109},[99,82876,51794],{"class":51281},[99,82878,51288],{"class":109},[99,82880,82881],{"class":101,"line":1165},[99,82882,82883],{"class":109},"    const num = 10\n",[99,82885,82886],{"class":101,"line":1180},[99,82887,82888],{"class":109},"    \u002F\u002F 强制转换\n",[99,82890,82891],{"class":101,"line":1186},[99,82892,82893],{"class":109},"    console.log(String(num))\n",[99,82895,82896],{"class":101,"line":1200},[99,82897,82898],{"class":109},"    \u002F\u002F toString()方法转换\n",[99,82900,82901],{"class":101,"line":1206},[99,82902,82903],{"class":109},"    console.log(num.toString())\n",[99,82905,82906,82908,82910],{"class":101,"line":1297},[99,82907,52398],{"class":109},[99,82909,51794],{"class":51281},[99,82911,51288],{"class":109},[99,82913,82914,82916,82918],{"class":101,"line":1303},[99,82915,51766],{"class":109},[99,82917,51781],{"class":51281},[99,82919,51288],{"class":109},[22897,82921,82923],{"id":82922},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82925,82926],{},[1448,82927],{"alt":21,"src":82928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[90,82930,82932],{"className":50614,"code":82931,"language":50616,"meta":21,"style":21},"\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",[96,82933,82934,82944,82958,82962,82970,82984,83004,83016,83024,83028,83036,83048,83056,83068,83073,83078,83083,83130,83146,83154,83162,83166],{"__ignoreMap":21},[99,82935,82936,82938,82940,82942],{"class":101,"line":102},[99,82937,51278],{"class":109},[99,82939,51282],{"class":51281},[99,82941,51285],{"class":1949},[99,82943,51288],{"class":109},[99,82945,82946,82948,82950,82952,82954,82956],{"class":101,"line":22},[99,82947,1020],{"class":109},[99,82949,50616],{"class":51281},[99,82951,51297],{"class":1949},[99,82953,155],{"class":109},[99,82955,51302],{"class":214},[99,82957,51288],{"class":109},[99,82959,82960],{"class":101,"line":1165},[99,82961,2386],{"emptyLinePlaceholder":26},[99,82963,82964,82966,82968],{"class":101,"line":1180},[99,82965,1020],{"class":109},[99,82967,51315],{"class":51281},[99,82969,51288],{"class":109},[99,82971,82972,82974,82976,82978,82980,82982],{"class":101,"line":1186},[99,82973,52125],{"class":109},[99,82975,51325],{"class":51281},[99,82977,51328],{"class":1949},[99,82979,155],{"class":109},[99,82981,51333],{"class":214},[99,82983,51288],{"class":109},[99,82985,82986,82988,82990,82992,82994,82996,82998,83000,83002],{"class":101,"line":1200},[99,82987,52125],{"class":109},[99,82989,51325],{"class":51281},[99,82991,14907],{"class":1949},[99,82993,155],{"class":109},[99,82995,51372],{"class":214},[99,82997,51352],{"class":1949},[99,82999,155],{"class":109},[99,83001,51379],{"class":214},[99,83003,51288],{"class":109},[99,83005,83006,83008,83010,83012,83014],{"class":101,"line":1206},[99,83007,52125],{"class":109},[99,83009,51388],{"class":51281},[99,83011,51391],{"class":109},[99,83013,51388],{"class":51281},[99,83015,51288],{"class":109},[99,83017,83018,83020,83022],{"class":101,"line":1297},[99,83019,51766],{"class":109},[99,83021,51315],{"class":51281},[99,83023,51288],{"class":109},[99,83025,83026],{"class":101,"line":1303},[99,83027,2386],{"emptyLinePlaceholder":26},[99,83029,83030,83032,83034],{"class":101,"line":1315},[99,83031,1020],{"class":109},[99,83033,51781],{"class":51281},[99,83035,51288],{"class":109},[99,83037,83038,83040,83042,83044,83046],{"class":101,"line":1598},[99,83039,52125],{"class":109},[99,83041,51592],{"class":51281},[99,83043,55295],{"class":109},[99,83045,51592],{"class":51281},[99,83047,51288],{"class":109},[99,83049,83050,83052,83054],{"class":101,"line":1603},[99,83051,52125],{"class":109},[99,83053,51794],{"class":51281},[99,83055,51288],{"class":109},[99,83057,83058,83060,83063,83065],{"class":101,"line":1609},[99,83059,11208],{"class":105},[99,83061,83062],{"class":158}," gift",[99,83064,13551],{"class":105},[99,83066,83067],{"class":214}," '50g的茶叶，清洗球'\n",[99,83069,83070],{"class":101,"line":1614},[99,83071,83072],{"class":168},"    \u002F\u002F 1.把字符串拆分为数组\n",[99,83074,83075],{"class":101,"line":1628},[99,83076,83077],{"class":168},"    \u002F\u002F console.log(gift.split(','))\n",[99,83079,83080],{"class":101,"line":1633},[99,83081,83082],{"class":168},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[99,83084,83085,83087,83089,83091,83094,83097,83099,83102,83104,83106,83108,83110,83112,83115,83117,83120,83122,83124,83126,83128],{"class":101,"line":1639},[99,83086,11208],{"class":105},[99,83088,73900],{"class":158},[99,83090,13551],{"class":105},[99,83092,83093],{"class":109}," gift.",[99,83095,83096],{"class":1949},"split",[99,83098,110],{"class":109},[99,83100,83101],{"class":214},"'，'",[99,83103,30807],{"class":109},[99,83105,74025],{"class":1949},[99,83107,110],{"class":109},[99,83109,79776],{"class":5203},[99,83111,79779],{"class":105},[99,83113,83114],{"class":214}," `\u003Cspan>【赠品】${",[99,83116,79776],{"class":109},[99,83118,83119],{"class":214},"}\u003C\u002Fspan>\u003Cbr>`",[99,83121,30807],{"class":109},[99,83123,74204],{"class":1949},[99,83125,110],{"class":109},[99,83127,74209],{"class":214},[99,83129,116],{"class":109},[99,83131,83132,83134,83136,83138,83140,83142,83144],{"class":101,"line":1660},[99,83133,52388],{"class":109},[99,83135,54380],{"class":1949},[99,83137,110],{"class":109},[99,83139,81912],{"class":214},[99,83141,74230],{"class":109},[99,83143,155],{"class":105},[99,83145,73966],{"class":109},[99,83147,83148,83150,83152],{"class":101,"line":1665},[99,83149,52398],{"class":109},[99,83151,51794],{"class":51281},[99,83153,51288],{"class":109},[99,83155,83156,83158,83160],{"class":101,"line":1679},[99,83157,51766],{"class":109},[99,83159,51781],{"class":51281},[99,83161,51288],{"class":109},[99,83163,83164],{"class":101,"line":1684},[99,83165,2386],{"emptyLinePlaceholder":26},[99,83167,83168,83170,83172],{"class":101,"line":1713},[99,83169,51766],{"class":109},[99,83171,50616],{"class":51281},[99,83173,51288],{"class":109},[21985,83175,83177],{"id":83176},"_41054-number","4.10.5.4 Number",[14,83179,83180],{},[1448,83181],{"alt":21,"src":83182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83184,83185],{},"整数也可以进行toFixed来保留小数",[14,83187,83188],{},"比如：",[14,83190,83191],{},"const price=10",[14,83193,83194],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21985,83196,83198],{"id":83197},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83200,83201],{},[1448,83202],{"alt":21,"src":83203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[90,83205,83207],{"className":50614,"code":83206,"language":50616,"meta":21,"style":21},"\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",[96,83208,83209,83219,83233,83237,83245,83259,83279,83291,83299,83305,83315,83325,83335,83339,83343,83349,83361,83375,83379,83383,83389,83401,83417,83427,83443,83447,83451,83457,83467,83477,83481,83485,83493,83505,83517,83529,83533,83537,83545,83557,83561,83565,83576,83586,83598,83610,83620,83624,83628,83636,83645,83657,83667,83677,83681,83685,83693,83702,83709,83719,83731,83735,83739,83748,83758,83769,83781,83793,83797,83801,83810,83820,83831,83835,83839,83845,83857,83869,83879,83889,83907,83919,83923,83927,83936,83948,83958,83968,83980,83984,83992,84000,84004,84012,84026,84034,84048,84076,84084,84092,84102,84106,84114,84122,84131,84139,84148,84158,84162,84166,84174,84182,84191,84199,84207,84220,84224,84228,84236,84244,84253,84261,84269,84284,84288,84292,84300,84308,84317,84325,84333,84347,84355,84359,84363,84368,84394,84399,84436,84441,84464,84469,84523,84528,84564,84568,84574,84579,84588,84602,84611,84630,84639,84649,84654,84659,84672,84677,84731,84757,84765,84773,84777],{"__ignoreMap":21},[99,83210,83211,83213,83215,83217],{"class":101,"line":102},[99,83212,51278],{"class":109},[99,83214,51282],{"class":51281},[99,83216,51285],{"class":1949},[99,83218,51288],{"class":109},[99,83220,83221,83223,83225,83227,83229,83231],{"class":101,"line":22},[99,83222,1020],{"class":109},[99,83224,50616],{"class":51281},[99,83226,51297],{"class":1949},[99,83228,155],{"class":109},[99,83230,51302],{"class":214},[99,83232,51288],{"class":109},[99,83234,83235],{"class":101,"line":1165},[99,83236,2386],{"emptyLinePlaceholder":26},[99,83238,83239,83241,83243],{"class":101,"line":1180},[99,83240,1020],{"class":109},[99,83242,51315],{"class":51281},[99,83244,51288],{"class":109},[99,83246,83247,83249,83251,83253,83255,83257],{"class":101,"line":1186},[99,83248,52125],{"class":109},[99,83250,51325],{"class":51281},[99,83252,51328],{"class":1949},[99,83254,155],{"class":109},[99,83256,51333],{"class":214},[99,83258,51288],{"class":109},[99,83260,83261,83263,83265,83267,83269,83271,83273,83275,83277],{"class":101,"line":1200},[99,83262,52125],{"class":109},[99,83264,51325],{"class":51281},[99,83266,14907],{"class":1949},[99,83268,155],{"class":109},[99,83270,51372],{"class":214},[99,83272,51352],{"class":1949},[99,83274,155],{"class":109},[99,83276,51379],{"class":214},[99,83278,51288],{"class":109},[99,83280,83281,83283,83285,83287,83289],{"class":101,"line":1206},[99,83282,52125],{"class":109},[99,83284,51388],{"class":51281},[99,83286,51391],{"class":109},[99,83288,51388],{"class":51281},[99,83290,51288],{"class":109},[99,83292,83293,83295,83297],{"class":101,"line":1297},[99,83294,52125],{"class":109},[99,83296,5113],{"class":51281},[99,83298,51288],{"class":109},[99,83300,83301,83303],{"class":101,"line":1303},[99,83302,6390],{"class":51281},[99,83304,15559],{"class":109},[99,83306,83307,83309,83311,83313],{"class":101,"line":1315},[99,83308,54676],{"class":158},[99,83310,51418],{"class":109},[99,83312,301],{"class":158},[99,83314,1276],{"class":109},[99,83316,83317,83319,83321,83323],{"class":101,"line":1598},[99,83318,54687],{"class":158},[99,83320,51418],{"class":109},[99,83322,301],{"class":158},[99,83324,1276],{"class":109},[99,83326,83327,83329,83331,83333],{"class":101,"line":1603},[99,83328,72577],{"class":158},[99,83330,51418],{"class":109},[99,83332,60486],{"class":158},[99,83334,1276],{"class":109},[99,83336,83337],{"class":101,"line":1609},[99,83338,2173],{"class":109},[99,83340,83341],{"class":101,"line":1614},[99,83342,2386],{"emptyLinePlaceholder":26},[99,83344,83345,83347],{"class":101,"line":1628},[99,83346,62104],{"class":1949},[99,83348,15559],{"class":109},[99,83350,83351,83353,83355,83357,83359],{"class":101,"line":1633},[99,83352,54752],{"class":158},[99,83354,51418],{"class":109},[99,83356,78555],{"class":158},[99,83358,51473],{"class":105},[99,83360,1276],{"class":109},[99,83362,83363,83365,83367,83369,83371,83373],{"class":101,"line":1639},[99,83364,54687],{"class":158},[99,83366,51418],{"class":109},[99,83368,421],{"class":158},[99,83370,51473],{"class":105},[99,83372,51537],{"class":158},[99,83374,1276],{"class":109},[99,83376,83377],{"class":101,"line":1660},[99,83378,2173],{"class":109},[99,83380,83381],{"class":101,"line":1665},[99,83382,2386],{"emptyLinePlaceholder":26},[99,83384,83385,83387],{"class":101,"line":1679},[99,83386,78606],{"class":1949},[99,83388,15559],{"class":109},[99,83390,83391,83393,83395,83397,83399],{"class":101,"line":1684},[99,83392,54676],{"class":158},[99,83394,51418],{"class":109},[99,83396,685],{"class":158},[99,83398,51473],{"class":105},[99,83400,1276],{"class":109},[99,83402,83403,83405,83407,83409,83411,83413,83415],{"class":101,"line":1713},[99,83404,61841],{"class":158},[99,83406,51418],{"class":109},[99,83408,28102],{"class":158},[99,83410,78661],{"class":158},[99,83412,78664],{"class":158},[99,83414,805],{"class":105},[99,83416,1276],{"class":109},[99,83418,83419,83421,83423,83425],{"class":101,"line":1718},[99,83420,54990],{"class":158},[99,83422,51418],{"class":109},[99,83424,51458],{"class":158},[99,83426,1276],{"class":109},[99,83428,83429,83431,83433,83435,83437,83439,83441],{"class":101,"line":1735},[99,83430,61958],{"class":158},[99,83432,51418],{"class":109},[99,83434,327],{"class":158},[99,83436,51473],{"class":105},[99,83438,51502],{"class":158},[99,83440,62225],{"class":158},[99,83442,1276],{"class":109},[99,83444,83445],{"class":101,"line":1740},[99,83446,2173],{"class":109},[99,83448,83449],{"class":101,"line":1745},[99,83450,2386],{"emptyLinePlaceholder":26},[99,83452,83453,83455],{"class":101,"line":1750},[99,83454,78724],{"class":1949},[99,83456,15559],{"class":109},[99,83458,83459,83461,83463,83465],{"class":101,"line":1764},[99,83460,62006],{"class":158},[99,83462,51418],{"class":109},[99,83464,62011],{"class":158},[99,83466,1276],{"class":109},[99,83468,83469,83471,83473,83475],{"class":101,"line":1769},[99,83470,54865],{"class":158},[99,83472,51418],{"class":109},[99,83474,61799],{"class":158},[99,83476,1276],{"class":109},[99,83478,83479],{"class":101,"line":2563},[99,83480,2173],{"class":109},[99,83482,83483],{"class":101,"line":2577},[99,83484,2386],{"emptyLinePlaceholder":26},[99,83486,83487,83489,83491],{"class":101,"line":2585},[99,83488,78606],{"class":1949},[99,83490,55596],{"class":51281},[99,83492,15559],{"class":109},[99,83494,83495,83497,83499,83501,83503],{"class":101,"line":2590},[99,83496,54752],{"class":158},[99,83498,51418],{"class":109},[99,83500,722],{"class":158},[99,83502,51473],{"class":105},[99,83504,1276],{"class":109},[99,83506,83507,83509,83511,83513,83515],{"class":101,"line":2596},[99,83508,54766],{"class":158},[99,83510,51418],{"class":109},[99,83512,722],{"class":158},[99,83514,51473],{"class":105},[99,83516,1276],{"class":109},[99,83518,83519,83521,83523,83525,83527],{"class":101,"line":2602},[99,83520,61731],{"class":158},[99,83522,51418],{"class":109},[99,83524,429],{"class":158},[99,83526,51473],{"class":105},[99,83528,1276],{"class":109},[99,83530,83531],{"class":101,"line":2607},[99,83532,2173],{"class":109},[99,83534,83535],{"class":101,"line":7935},[99,83536,2386],{"emptyLinePlaceholder":26},[99,83538,83539,83541,83543],{"class":101,"line":7959},[99,83540,78606],{"class":1949},[99,83542,62285],{"class":1949},[99,83544,15559],{"class":109},[99,83546,83547,83549,83551,83553,83555],{"class":101,"line":7964},[99,83548,54752],{"class":158},[99,83550,51418],{"class":109},[99,83552,1708],{"class":158},[99,83554,51473],{"class":105},[99,83556,1276],{"class":109},[99,83558,83559],{"class":101,"line":7970},[99,83560,2173],{"class":109},[99,83562,83563],{"class":101,"line":7997},[99,83564,2386],{"emptyLinePlaceholder":26},[99,83566,83567,83569,83571,83574],{"class":101,"line":8002},[99,83568,78606],{"class":1949},[99,83570,62285],{"class":1949},[99,83572,83573],{"class":1949}," .tag",[99,83575,15559],{"class":109},[99,83577,83578,83580,83582,83584],{"class":101,"line":8008},[99,83579,54990],{"class":158},[99,83581,51418],{"class":109},[99,83583,60850],{"class":158},[99,83585,1276],{"class":109},[99,83587,83588,83590,83592,83594,83596],{"class":101,"line":8020},[99,83589,54676],{"class":158},[99,83591,51418],{"class":109},[99,83593,187],{"class":158},[99,83595,51473],{"class":105},[99,83597,1276],{"class":109},[99,83599,83600,83602,83604,83606,83608],{"class":101,"line":8032},[99,83601,54903],{"class":158},[99,83603,51418],{"class":109},[99,83605,608],{"class":158},[99,83607,51473],{"class":105},[99,83609,1276],{"class":109},[99,83611,83612,83614,83616,83618],{"class":101,"line":8044},[99,83613,57397],{"class":158},[99,83615,51418],{"class":109},[99,83617,62051],{"class":158},[99,83619,1276],{"class":109},[99,83621,83622],{"class":101,"line":9703},[99,83623,2173],{"class":109},[99,83625,83626],{"class":101,"line":9728},[99,83627,2386],{"emptyLinePlaceholder":26},[99,83629,83630,83632,83634],{"class":101,"line":9751},[99,83631,78606],{"class":1949},[99,83633,78898],{"class":1949},[99,83635,31447],{"class":109},[99,83637,83638,83640,83643],{"class":101,"line":9775},[99,83639,78606],{"class":1949},[99,83641,83642],{"class":1949}," .sub-total",[99,83644,15559],{"class":109},[99,83646,83647,83649,83651,83653,83655],{"class":101,"line":9780},[99,83648,54903],{"class":158},[99,83650,51418],{"class":109},[99,83652,760],{"class":158},[99,83654,51473],{"class":105},[99,83656,1276],{"class":109},[99,83658,83659,83661,83663,83665],{"class":101,"line":9785},[99,83660,57397],{"class":158},[99,83662,51418],{"class":109},[99,83664,78921],{"class":158},[99,83666,1276],{"class":109},[99,83668,83669,83671,83673,83675],{"class":101,"line":9790},[99,83670,61818],{"class":158},[99,83672,51418],{"class":109},[99,83674,327],{"class":158},[99,83676,1276],{"class":109},[99,83678,83679],{"class":101,"line":9799},[99,83680,2173],{"class":109},[99,83682,83683],{"class":101,"line":9804},[99,83684,2386],{"emptyLinePlaceholder":26},[99,83686,83687,83689,83691],{"class":101,"line":9810},[99,83688,78606],{"class":1949},[99,83690,78938],{"class":1949},[99,83692,31447],{"class":109},[99,83694,83695,83697,83700],{"class":101,"line":9831},[99,83696,78606],{"class":1949},[99,83698,83699],{"class":1949}," .sub-total::before",[99,83701,31447],{"class":109},[99,83703,83704,83707],{"class":101,"line":9837},[99,83705,83706],{"class":1949},"    .amount::before",[99,83708,15559],{"class":109},[99,83710,83711,83713,83715,83717],{"class":101,"line":9851},[99,83712,78945],{"class":158},[99,83714,51418],{"class":109},[99,83716,78950],{"class":214},[99,83718,1276],{"class":109},[99,83720,83721,83723,83725,83727,83729],{"class":101,"line":9857},[99,83722,54903],{"class":158},[99,83724,51418],{"class":109},[99,83726,608],{"class":158},[99,83728,51473],{"class":105},[99,83730,1276],{"class":109},[99,83732,83733],{"class":101,"line":9884},[99,83734,2173],{"class":109},[99,83736,83737],{"class":101,"line":9893},[99,83738,2386],{"emptyLinePlaceholder":26},[99,83740,83741,83743,83746],{"class":101,"line":9899},[99,83742,78606],{"class":1949},[99,83744,83745],{"class":1949}," .spec",[99,83747,15559],{"class":109},[99,83749,83750,83752,83754,83756],{"class":101,"line":9907},[99,83751,61818],{"class":158},[99,83753,51418],{"class":109},[99,83755,187],{"class":158},[99,83757,1276],{"class":109},[99,83759,83760,83762,83764,83767],{"class":101,"line":9912},[99,83761,57397],{"class":158},[99,83763,51418],{"class":109},[99,83765,83766],{"class":158},"#888",[99,83768,1276],{"class":109},[99,83770,83771,83773,83775,83777,83779],{"class":101,"line":16591},[99,83772,54903],{"class":158},[99,83774,51418],{"class":109},[99,83776,659],{"class":158},[99,83778,51473],{"class":105},[99,83780,1276],{"class":109},[99,83782,83783,83785,83787,83789,83791],{"class":101,"line":16597},[99,83784,61981],{"class":158},[99,83786,51418],{"class":109},[99,83788,810],{"class":158},[99,83790,51473],{"class":105},[99,83792,1276],{"class":109},[99,83794,83795],{"class":101,"line":16620},[99,83796,2173],{"class":109},[99,83798,83799],{"class":101,"line":16626},[99,83800,2386],{"emptyLinePlaceholder":26},[99,83802,83803,83805,83808],{"class":101,"line":16649},[99,83804,78606],{"class":1949},[99,83806,83807],{"class":1949}," .count",[99,83809,15559],{"class":109},[99,83811,83812,83814,83816,83818],{"class":101,"line":16663},[99,83813,61818],{"class":158},[99,83815,51418],{"class":109},[99,83817,327],{"class":158},[99,83819,1276],{"class":109},[99,83821,83822,83824,83826,83829],{"class":101,"line":16683},[99,83823,57397],{"class":158},[99,83825,51418],{"class":109},[99,83827,83828],{"class":158},"#aaa",[99,83830,1276],{"class":109},[99,83832,83833],{"class":101,"line":16689},[99,83834,2173],{"class":109},[99,83836,83837],{"class":101,"line":16700},[99,83838,2386],{"emptyLinePlaceholder":26},[99,83840,83841,83843],{"class":101,"line":16723},[99,83842,72456],{"class":1949},[99,83844,15559],{"class":109},[99,83846,83847,83849,83851,83853,83855],{"class":101,"line":16745},[99,83848,54752],{"class":158},[99,83850,51418],{"class":109},[99,83852,78555],{"class":158},[99,83854,51473],{"class":105},[99,83856,1276],{"class":109},[99,83858,83859,83861,83863,83865,83867],{"class":101,"line":16750},[99,83860,54687],{"class":158},[99,83862,51418],{"class":109},[99,83864,301],{"class":158},[99,83866,51537],{"class":158},[99,83868,1276],{"class":109},[99,83870,83871,83873,83875,83877],{"class":101,"line":16756},[99,83872,54990],{"class":158},[99,83874,51418],{"class":109},[99,83876,51458],{"class":158},[99,83878,1276],{"class":109},[99,83880,83881,83883,83885,83887],{"class":101,"line":16770},[99,83882,55001],{"class":158},[99,83884,51418],{"class":109},[99,83886,51561],{"class":158},[99,83888,1276],{"class":109},[99,83890,83891,83894,83896,83898,83900,83902,83905],{"class":101,"line":16783},[99,83892,83893],{"class":158},"      border-top",[99,83895,51418],{"class":109},[99,83897,327],{"class":158},[99,83899,51473],{"class":105},[99,83901,51502],{"class":158},[99,83903,83904],{"class":158}," #4e4e4e",[99,83906,1276],{"class":109},[99,83908,83909,83911,83913,83915,83917],{"class":101,"line":16788},[99,83910,54676],{"class":158},[99,83912,51418],{"class":109},[99,83914,810],{"class":158},[99,83916,51473],{"class":105},[99,83918,1276],{"class":109},[99,83920,83921],{"class":101,"line":16802},[99,83922,2173],{"class":109},[99,83924,83925],{"class":101,"line":16807},[99,83926,2386],{"emptyLinePlaceholder":26},[99,83928,83929,83931,83934],{"class":101,"line":16813},[99,83930,72456],{"class":1949},[99,83932,83933],{"class":1949}," .amount",[99,83935,15559],{"class":109},[99,83937,83938,83940,83942,83944,83946],{"class":101,"line":16818},[99,83939,54903],{"class":158},[99,83941,51418],{"class":109},[99,83943,760],{"class":158},[99,83945,51473],{"class":105},[99,83947,1276],{"class":109},[99,83949,83950,83952,83954,83956],{"class":101,"line":16832},[99,83951,57397],{"class":158},[99,83953,51418],{"class":109},[99,83955,78921],{"class":158},[99,83957,1276],{"class":109},[99,83959,83960,83962,83964,83966],{"class":101,"line":16837},[99,83961,62315],{"class":158},[99,83963,51418],{"class":109},[99,83965,51470],{"class":158},[99,83967,1276],{"class":109},[99,83969,83970,83972,83974,83976,83978],{"class":101,"line":16842},[99,83971,61731],{"class":158},[99,83973,51418],{"class":109},[99,83975,766],{"class":158},[99,83977,51473],{"class":105},[99,83979,1276],{"class":109},[99,83981,83982],{"class":101,"line":16856},[99,83983,2173],{"class":109},[99,83985,83986,83988,83990],{"class":101,"line":16868},[99,83987,52398],{"class":109},[99,83989,5113],{"class":51281},[99,83991,51288],{"class":109},[99,83993,83994,83996,83998],{"class":101,"line":16873},[99,83995,51766],{"class":109},[99,83997,51315],{"class":51281},[99,83999,51288],{"class":109},[99,84001,84002],{"class":101,"line":16886},[99,84003,2386],{"emptyLinePlaceholder":26},[99,84005,84006,84008,84010],{"class":101,"line":16891},[99,84007,1020],{"class":109},[99,84009,51781],{"class":51281},[99,84011,51288],{"class":109},[99,84013,84014,84016,84018,84020,84022,84024],{"class":101,"line":16896},[99,84015,52125],{"class":109},[99,84017,51592],{"class":51281},[99,84019,53467],{"class":1949},[99,84021,155],{"class":109},[99,84023,62589],{"class":214},[99,84025,51288],{"class":109},[99,84027,84028,84030,84032],{"class":101,"line":16901},[99,84029,52398],{"class":109},[99,84031,51592],{"class":51281},[99,84033,51288],{"class":109},[99,84035,84036,84038,84040,84042,84044,84046],{"class":101,"line":16914},[99,84037,52125],{"class":109},[99,84039,51592],{"class":51281},[99,84041,53467],{"class":1949},[99,84043,155],{"class":109},[99,84045,62561],{"class":214},[99,84047,51288],{"class":109},[99,84049,84050,84052,84054,84057,84059,84061,84063,84066,84068,84070,84072,84074],{"class":101,"line":16919},[99,84051,51322],{"class":109},[99,84053,51592],{"class":51281},[99,84055,84056],{"class":109},">合计：\u003C",[99,84058,99],{"class":51281},[99,84060,53467],{"class":1949},[99,84062,155],{"class":109},[99,84064,84065],{"class":214},"\"amount\"",[99,84067,55295],{"class":109},[99,84069,99],{"class":51281},[99,84071,55295],{"class":109},[99,84073,51592],{"class":51281},[99,84075,51288],{"class":109},[99,84077,84078,84080,84082],{"class":101,"line":32614},[99,84079,52398],{"class":109},[99,84081,51592],{"class":51281},[99,84083,51288],{"class":109},[99,84085,84086,84088,84090],{"class":101,"line":32620},[99,84087,52125],{"class":109},[99,84089,51794],{"class":51281},[99,84091,51288],{"class":109},[99,84093,84094,84096,84098,84100],{"class":101,"line":32626},[99,84095,11208],{"class":105},[99,84097,79358],{"class":158},[99,84099,13551],{"class":105},[99,84101,55428],{"class":109},[99,84103,84104],{"class":101,"line":32632},[99,84105,79367],{"class":109},[99,84107,84108,84110,84112],{"class":101,"line":32638},[99,84109,79372],{"class":109},[99,84111,79375],{"class":214},[99,84113,31447],{"class":109},[99,84115,84116,84118,84120],{"class":101,"line":32649},[99,84117,79382],{"class":109},[99,84119,79385],{"class":214},[99,84121,31447],{"class":109},[99,84123,84124,84126,84129],{"class":101,"line":32655},[99,84125,79392],{"class":109},[99,84127,84128],{"class":158},"289.9",[99,84130,31447],{"class":109},[99,84132,84133,84135,84137],{"class":101,"line":32675},[99,84134,79402],{"class":109},[99,84136,79405],{"class":214},[99,84138,31447],{"class":109},[99,84140,84141,84144,84146],{"class":101,"line":32681},[99,84142,84143],{"class":109},"        count: ",[99,84145,187],{"class":158},[99,84147,31447],{"class":109},[99,84149,84150,84153,84156],{"class":101,"line":32692},[99,84151,84152],{"class":109},"        spec: { color: ",[99,84154,84155],{"class":214},"'白色'",[99,84157,55585],{"class":109},[99,84159,84160],{"class":101,"line":32698},[99,84161,77873],{"class":109},[99,84163,84164],{"class":101,"line":32704},[99,84165,79367],{"class":109},[99,84167,84168,84170,84172],{"class":101,"line":32710},[99,84169,79372],{"class":109},[99,84171,79466],{"class":214},[99,84173,31447],{"class":109},[99,84175,84176,84178,84180],{"class":101,"line":32716},[99,84177,79382],{"class":109},[99,84179,79475],{"class":214},[99,84181,31447],{"class":109},[99,84183,84184,84186,84189],{"class":101,"line":32722},[99,84185,79392],{"class":109},[99,84187,84188],{"class":158},"109.8",[99,84190,31447],{"class":109},[99,84192,84193,84195,84197],{"class":101,"line":32728},[99,84194,79402],{"class":109},[99,84196,79493],{"class":214},[99,84198,31447],{"class":109},[99,84200,84201,84203,84205],{"class":101,"line":32734},[99,84202,84143],{"class":109},[99,84204,181],{"class":158},[99,84206,31447],{"class":109},[99,84208,84209,84212,84214,84216,84218],{"class":101,"line":32754},[99,84210,84211],{"class":109},"        spec: { size: ",[99,84213,81884],{"class":214},[99,84215,55445],{"class":109},[99,84217,81889],{"class":214},[99,84219,55585],{"class":109},[99,84221,84222],{"class":101,"line":32760},[99,84223,77873],{"class":109},[99,84225,84226],{"class":101,"line":32776},[99,84227,79367],{"class":109},[99,84229,84230,84232,84234],{"class":101,"line":32782},[99,84231,79372],{"class":109},[99,84233,79510],{"class":214},[99,84235,31447],{"class":109},[99,84237,84238,84240,84242],{"class":101,"line":32796},[99,84239,79382],{"class":109},[99,84241,79519],{"class":214},[99,84243,31447],{"class":109},[99,84245,84246,84248,84251],{"class":101,"line":32802},[99,84247,79392],{"class":109},[99,84249,84250],{"class":158},"488",[99,84252,31447],{"class":109},[99,84254,84255,84257,84259],{"class":101,"line":32817},[99,84256,79402],{"class":109},[99,84258,79537],{"class":214},[99,84260,31447],{"class":109},[99,84262,84263,84265,84267],{"class":101,"line":32823},[99,84264,84143],{"class":109},[99,84266,327],{"class":158},[99,84268,31447],{"class":109},[99,84270,84271,84273,84276,84279,84282],{"class":101,"line":32832},[99,84272,84152],{"class":109},[99,84274,84275],{"class":214},"'青色'",[99,84277,84278],{"class":109},", sum: ",[99,84280,84281],{"class":214},"'一大四小'",[99,84283,55585],{"class":109},[99,84285,84286],{"class":101,"line":32838},[99,84287,77873],{"class":109},[99,84289,84290],{"class":101,"line":32847},[99,84291,79367],{"class":109},[99,84293,84294,84296,84298],{"class":101,"line":32853},[99,84295,79372],{"class":109},[99,84297,79554],{"class":214},[99,84299,31447],{"class":109},[99,84301,84302,84304,84306],{"class":101,"line":32859},[99,84303,79382],{"class":109},[99,84305,79563],{"class":214},[99,84307,31447],{"class":109},[99,84309,84310,84312,84315],{"class":101,"line":32868},[99,84311,79392],{"class":109},[99,84313,84314],{"class":158},"139",[99,84316,31447],{"class":109},[99,84318,84319,84321,84323],{"class":101,"line":32874},[99,84320,79402],{"class":109},[99,84322,79581],{"class":214},[99,84324,31447],{"class":109},[99,84326,84327,84329,84331],{"class":101,"line":32885},[99,84328,84143],{"class":109},[99,84330,327],{"class":158},[99,84332,31447],{"class":109},[99,84334,84335,84337,84340,84342,84345],{"class":101,"line":32891},[99,84336,84211],{"class":109},[99,84338,84339],{"class":214},"'小号'",[99,84341,55445],{"class":109},[99,84343,84344],{"class":214},"'紫色'",[99,84346,55451],{"class":109},[99,84348,84349,84352],{"class":101,"line":32910},[99,84350,84351],{"class":109},"        gift: ",[99,84353,84354],{"class":214},"'50g茶叶,清洗球'\n",[99,84356,84357],{"class":101,"line":32916},[99,84358,52379],{"class":109},[99,84360,84361],{"class":101,"line":32927},[99,84362,53090],{"class":109},[99,84364,84365],{"class":101,"line":32933},[99,84366,84367],{"class":168},"    \u002F\u002F  1.根据数据渲染页面\n",[99,84369,84370,84372,84374,84376,84378,84380,84382,84384,84386,84388,84390,84392],{"class":101,"line":32953},[99,84371,52388],{"class":109},[99,84373,54380],{"class":1949},[99,84375,110],{"class":109},[99,84377,79882],{"class":214},[99,84379,74230],{"class":109},[99,84381,155],{"class":105},[99,84383,80029],{"class":109},[99,84385,74025],{"class":1949},[99,84387,110],{"class":109},[99,84389,79776],{"class":5203},[99,84391,79779],{"class":105},[99,84393,15559],{"class":109},[99,84395,84396],{"class":101,"line":32969},[99,84397,84398],{"class":168},"      \u002F\u002F 对象解构\n",[99,84400,84401,84403,84405,84407,84409,84411,84413,84416,84418,84420,84422,84425,84427,84430,84432,84434],{"class":101,"line":32975},[99,84402,58209],{"class":105},[99,84404,79788],{"class":109},[99,84406,79801],{"class":158},[99,84408,12422],{"class":109},[99,84410,79791],{"class":158},[99,84412,12422],{"class":109},[99,84414,84415],{"class":158},"count",[99,84417,12422],{"class":109},[99,84419,79796],{"class":158},[99,84421,12422],{"class":109},[99,84423,84424],{"class":158},"spec",[99,84426,12422],{"class":109},[99,84428,84429],{"class":158},"gift",[99,84431,79804],{"class":109},[99,84433,155],{"class":105},[99,84435,79809],{"class":109},[99,84437,84438],{"class":101,"line":32989},[99,84439,84440],{"class":168},"      \u002F\u002F 规格文字模块处理\n",[99,84442,84443,84445,84448,84450,84452,84454,84456,84458,84460,84462],{"class":101,"line":32995},[99,84444,58209],{"class":105},[99,84446,84447],{"class":158}," text",[99,84449,13551],{"class":105},[99,84451,81919],{"class":109},[99,84453,81922],{"class":1949},[99,84455,81925],{"class":109},[99,84457,74204],{"class":1949},[99,84459,110],{"class":109},[99,84461,81932],{"class":214},[99,84463,116],{"class":109},[99,84465,84466],{"class":101,"line":33001},[99,84467,84468],{"class":168},"      \u002F\u002F 处理赠品模块\n",[99,84470,84471,84473,84475,84477,84480,84482,84484,84486,84488,84491,84493,84495,84497,84499,84501,84504,84506,84509,84511,84513,84515,84517,84519,84521],{"class":101,"line":33012},[99,84472,58209],{"class":105},[99,84474,73900],{"class":158},[99,84476,13551],{"class":105},[99,84478,84479],{"class":109}," gift ",[99,84481,1096],{"class":105},[99,84483,83093],{"class":109},[99,84485,83096],{"class":1949},[99,84487,110],{"class":109},[99,84489,84490],{"class":214},"','",[99,84492,30807],{"class":109},[99,84494,74025],{"class":1949},[99,84496,110],{"class":109},[99,84498,79776],{"class":5203},[99,84500,79779],{"class":105},[99,84502,84503],{"class":214}," `\u003Cspan class=\"tag\">【赠品】${",[99,84505,79776],{"class":109},[99,84507,84508],{"class":214},"}\u003C\u002Fspan>`",[99,84510,30807],{"class":109},[99,84512,74204],{"class":1949},[99,84514,110],{"class":109},[99,84516,74209],{"class":214},[99,84518,13701],{"class":109},[99,84520,969],{"class":105},[99,84522,70085],{"class":214},[99,84524,84525],{"class":101,"line":33018},[99,84526,84527],{"class":168},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[99,84529,84530,84532,84535,84537,84540,84542,84544,84546,84549,84551,84553,84555,84558,84560,84562],{"class":101,"line":33024},[99,84531,58209],{"class":105},[99,84533,84534],{"class":158}," subtotal",[99,84536,13551],{"class":105},[99,84538,84539],{"class":109}," ((price ",[99,84541,565],{"class":105},[99,84543,5741],{"class":158},[99,84545,6505],{"class":105},[99,84547,84548],{"class":109}," count) ",[99,84550,694],{"class":105},[99,84552,5741],{"class":158},[99,84554,30807],{"class":109},[99,84556,84557],{"class":1949},"toFixed",[99,84559,110],{"class":109},[99,84561,187],{"class":158},[99,84563,116],{"class":109},[99,84565,84566],{"class":101,"line":33034},[99,84567,2386],{"emptyLinePlaceholder":26},[99,84569,84570,84572],{"class":101,"line":33040},[99,84571,73963],{"class":105},[99,84573,70149],{"class":214},[99,84575,84576],{"class":101,"line":33051},[99,84577,84578],{"class":214},"        \u003Cdiv class=\"item\">\n",[99,84580,84581,84584,84586],{"class":101,"line":33057},[99,84582,84583],{"class":214},"          \u003Cimg src=\"${",[99,84585,79801],{"class":109},[99,84587,79833],{"class":214},[99,84589,84590,84593,84595,84598,84600],{"class":101,"line":33067},[99,84591,84592],{"class":214},"          \u003Cp class=\"name\">${",[99,84594,79791],{"class":109},[99,84596,84597],{"class":214},"}${",[99,84599,1285],{"class":109},[99,84601,79843],{"class":214},[99,84603,84604,84607,84609],{"class":101,"line":33072},[99,84605,84606],{"class":214},"          \u003Cp class=\"spec\">${",[99,84608,5174],{"class":109},[99,84610,79843],{"class":214},[99,84612,84613,84616,84618,84620,84622,84624,84626,84628],{"class":101,"line":33078},[99,84614,84615],{"class":214},"          \u003Cp class=\"price\">${",[99,84617,79796],{"class":109},[99,84619,668],{"class":214},[99,84621,84557],{"class":1949},[99,84623,110],{"class":214},[99,84625,187],{"class":158},[99,84627,539],{"class":214},[99,84629,79843],{"class":214},[99,84631,84632,84635,84637],{"class":101,"line":33127},[99,84633,84634],{"class":214},"          \u003Cp class=\"count\">x${",[99,84636,84415],{"class":109},[99,84638,79843],{"class":214},[99,84640,84641,84644,84647],{"class":101,"line":33174},[99,84642,84643],{"class":214},"          \u003Cp class=\"sub-total\">${",[99,84645,84646],{"class":109},"subtotal",[99,84648,79843],{"class":214},[99,84650,84651],{"class":101,"line":33179},[99,84652,84653],{"class":214},"        \u003C\u002Fdiv> \n",[99,84655,84656],{"class":101,"line":33185},[99,84657,84658],{"class":214},"             `\n",[99,84660,84661,84664,84666,84668,84670],{"class":101,"line":33204},[99,84662,84663],{"class":109},"    }).",[99,84665,74204],{"class":1949},[99,84667,110],{"class":109},[99,84669,74209],{"class":214},[99,84671,116],{"class":109},[99,84673,84674],{"class":101,"line":33210},[99,84675,84676],{"class":168},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[99,84678,84679,84681,84683,84685,84687,84690,84692,84695,84697,84699,84701,84704,84707,84709,84712,84714,84716,84718,84721,84723,84725,84727,84729],{"class":101,"line":33230},[99,84680,11208],{"class":105},[99,84682,62766],{"class":158},[99,84684,13551],{"class":105},[99,84686,80029],{"class":109},[99,84688,84689],{"class":1949},"reduce",[99,84691,2362],{"class":109},[99,84693,84694],{"class":5203},"prev",[99,84696,12422],{"class":109},[99,84698,79776],{"class":5203},[99,84700,13701],{"class":109},[99,84702,84703],{"class":105},"=>",[99,84705,84706],{"class":109}," prev ",[99,84708,591],{"class":105},[99,84710,84711],{"class":109}," (item.price ",[99,84713,565],{"class":105},[99,84715,5741],{"class":158},[99,84717,6505],{"class":105},[99,84719,84720],{"class":109}," item.count) ",[99,84722,694],{"class":105},[99,84724,5741],{"class":158},[99,84726,12422],{"class":109},[99,84728,301],{"class":158},[99,84730,116],{"class":109},[99,84732,84733,84735,84737,84739,84742,84744,84746,84749,84751,84753,84755],{"class":101,"line":33236},[99,84734,52388],{"class":109},[99,84736,54380],{"class":1949},[99,84738,110],{"class":109},[99,84740,84741],{"class":214},"'.amount'",[99,84743,74230],{"class":109},[99,84745,155],{"class":105},[99,84747,84748],{"class":109}," total.",[99,84750,84557],{"class":1949},[99,84752,110],{"class":109},[99,84754,187],{"class":158},[99,84756,116],{"class":109},[99,84758,84759,84761,84763],{"class":101,"line":33242},[99,84760,52398],{"class":109},[99,84762,51794],{"class":51281},[99,84764,51288],{"class":109},[99,84766,84767,84769,84771],{"class":101,"line":33252},[99,84768,51766],{"class":109},[99,84770,51781],{"class":51281},[99,84772,51288],{"class":109},[99,84774,84775],{"class":101,"line":33257},[99,84776,2386],{"emptyLinePlaceholder":26},[99,84778,84779,84781,84783],{"class":101,"line":33263},[99,84780,51766],{"class":109},[99,84782,50616],{"class":51281},[99,84784,51288],{"class":109},[41,84786,84788],{"id":84787},"_411-编程思想","4.11 编程思想",[70,84790,84792],{"id":84791},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84794,84795,84798],{},[259,84796,84797],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84800,84801],{},"调用就可以了",[14,84803,84804],{},[1448,84805],{"alt":21,"src":84806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[70,84808,84810],{"id":84809},"_4112-面向对象","4.11.2 面向对象",[14,84812,84813],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84815,84816],{},[1448,84817],{"alt":21,"src":84818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84820,84821],{},"面向对象的特性：",[1117,84823,84824,84827,84830],{},[56,84825,84826],{},"封装性",[56,84828,84829],{},"继承性",[56,84831,84832],{},"多态性",[70,84834,84836],{"id":84835},"_4113-两者比较","4.11.3 两者比较",[14,84838,84839],{},[1448,84840],{"alt":21,"src":84841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[41,84843,84845],{"id":84844},"_412-构造函数回顾","4.12 构造函数回顾",[14,84847,84848],{},[1448,84849],{"alt":21,"src":84850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84852,84853],{},[1448,84854],{"alt":21,"src":84855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84857,84858],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84860,84861],{},[1448,84862],{"alt":21,"src":84863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[41,84865,84867],{"id":84866},"_413-原型","4.13 原型",[70,84869,84871],{"id":84870},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84873,84874],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84876,84877],{},[1448,84878],{"alt":21,"src":84879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84881,84882],{},[1448,84883],{"alt":21,"src":84884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84886,84887],{},"原型是构造函数的属性，它也是一个对象",[14,84889,84890],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84892,84893],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[90,84895,84897],{"className":53048,"code":84896,"language":53050,"meta":21,"style":21},"\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",[96,84898,84899,84907,84912,84920,84925,84930,84935,84940,84945,84949,84953,84957,84962,84967,84971,84976,84981,84986,84991,84996,85000,85008],{"__ignoreMap":21},[99,84900,84901,84903,84905],{"class":101,"line":102},[99,84902,1020],{"class":109},[99,84904,51781],{"class":51281},[99,84906,51288],{"class":109},[99,84908,84909],{"class":101,"line":22},[99,84910,84911],{"class":168},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[99,84913,84914,84916,84918],{"class":101,"line":1165},[99,84915,52125],{"class":109},[99,84917,51794],{"class":51281},[99,84919,51288],{"class":109},[99,84921,84922],{"class":101,"line":1180},[99,84923,84924],{"class":109},"    function Star(uname, age) {\n",[99,84926,84927],{"class":101,"line":1186},[99,84928,84929],{"class":109},"      this.uname = uname,\n",[99,84931,84932],{"class":101,"line":1200},[99,84933,84934],{"class":109},"        this.age = age\n",[99,84936,84937],{"class":101,"line":1206},[99,84938,84939],{"class":109},"      \u002F\u002F this.sing = function () {\n",[99,84941,84942],{"class":101,"line":1297},[99,84943,84944],{"class":109},"      \u002F\u002F   console.log('唱歌')\n",[99,84946,84947],{"class":101,"line":1303},[99,84948,2386],{"emptyLinePlaceholder":26},[99,84950,84951],{"class":101,"line":1315},[99,84952,60018],{"class":109},[99,84954,84955],{"class":101,"line":1598},[99,84956,2173],{"class":109},[99,84958,84959],{"class":101,"line":1603},[99,84960,84961],{"class":109},"    Star.prototype.sing = function () {\n",[99,84963,84964],{"class":101,"line":1609},[99,84965,84966],{"class":109},"      console.log('唱歌')\n",[99,84968,84969],{"class":101,"line":1614},[99,84970,2173],{"class":109},[99,84972,84973],{"class":101,"line":1628},[99,84974,84975],{"class":109},"    \u002F\u002F console.dir(Star.prototype)\n",[99,84977,84978],{"class":101,"line":1633},[99,84979,84980],{"class":109},"    const pink = new Star('pink', 18)\n",[99,84982,84983],{"class":101,"line":1639},[99,84984,84985],{"class":109},"    const red = new Star('red', 20)\n",[99,84987,84988],{"class":101,"line":1660},[99,84989,84990],{"class":109},"    pink.sing()\n",[99,84992,84993],{"class":101,"line":1665},[99,84994,84995],{"class":109},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[99,84997,84998],{"class":101,"line":1679},[99,84999,2386],{"emptyLinePlaceholder":26},[99,85001,85002,85004,85006],{"class":101,"line":1684},[99,85003,52398],{"class":109},[99,85005,51794],{"class":51281},[99,85007,51288],{"class":109},[99,85009,85010,85012,85014],{"class":101,"line":1713},[99,85011,51766],{"class":109},[99,85013,51781],{"class":51281},[99,85015,51288],{"class":109},[14,85017,85018],{},[1448,85019],{"alt":21,"src":85020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[90,85022,85024],{"className":53048,"code":85023,"language":53050,"meta":21,"style":21},"\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",[96,85025,85026,85034,85042,85047,85052,85057,85062,85066,85071,85076,85081,85085,85090,85094,85098,85103,85107,85115],{"__ignoreMap":21},[99,85027,85028,85030,85032],{"class":101,"line":102},[99,85029,1020],{"class":109},[99,85031,51781],{"class":51281},[99,85033,51288],{"class":109},[99,85035,85036,85038,85040],{"class":101,"line":22},[99,85037,52125],{"class":109},[99,85039,51794],{"class":51281},[99,85041,51288],{"class":109},[99,85043,85044],{"class":101,"line":1165},[99,85045,85046],{"class":109},"    let that\n",[99,85048,85049],{"class":101,"line":1180},[99,85050,85051],{"class":109},"    function Star(uname) {\n",[99,85053,85054],{"class":101,"line":1186},[99,85055,85056],{"class":109},"      this.uname = uname\n",[99,85058,85059],{"class":101,"line":1200},[99,85060,85061],{"class":109},"      that = this\n",[99,85063,85064],{"class":101,"line":1206},[99,85065,2173],{"class":109},[99,85067,85068],{"class":101,"line":1297},[99,85069,85070],{"class":109},"    \u002F\u002F 实例对象是 ldh\n",[99,85072,85073],{"class":101,"line":1303},[99,85074,85075],{"class":109},"    const ldh = new Star('刘德华')\n",[99,85077,85078],{"class":101,"line":1315},[99,85079,85080],{"class":109},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[99,85082,85083],{"class":101,"line":1598},[99,85084,2386],{"emptyLinePlaceholder":26},[99,85086,85087],{"class":101,"line":1603},[99,85088,85089],{"class":109},"    Star.sing = function () {\n",[99,85091,85092],{"class":101,"line":1609},[99,85093,84966],{"class":109},[99,85095,85096],{"class":101,"line":1614},[99,85097,2173],{"class":109},[99,85099,85100],{"class":101,"line":1628},[99,85101,85102],{"class":109},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[99,85104,85105],{"class":101,"line":1633},[99,85106,2386],{"emptyLinePlaceholder":26},[99,85108,85109,85111,85113],{"class":101,"line":1639},[99,85110,52398],{"class":109},[99,85112,51794],{"class":51281},[99,85114,51288],{"class":109},[99,85116,85117,85119,85121],{"class":101,"line":1660},[99,85118,51766],{"class":109},[99,85120,51781],{"class":51281},[99,85122,51288],{"class":109},[14,85124,85125],{},"构造函数的this指向的是实例对象；",[14,85127,85128],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[70,85130,85132],{"id":85131},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85134,85135],{},[1448,85136],{"alt":21,"src":85137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[90,85139,85141],{"className":53048,"code":85140,"language":53050,"meta":21,"style":21},"\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",[96,85142,85143,85151,85159,85164,85169,85174,85179,85184,85189,85194,85199,85204,85209,85213,85218,85223,85228,85233,85237,85242,85247,85252,85257,85261,85266,85271,85276,85281,85285,85290,85294,85302],{"__ignoreMap":21},[99,85144,85145,85147,85149],{"class":101,"line":102},[99,85146,1020],{"class":109},[99,85148,51781],{"class":51281},[99,85150,51288],{"class":109},[99,85152,85153,85155,85157],{"class":101,"line":22},[99,85154,52125],{"class":109},[99,85156,51794],{"class":51281},[99,85158,51288],{"class":109},[99,85160,85161],{"class":101,"line":1165},[99,85162,85163],{"class":109},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[99,85165,85166],{"class":101,"line":1180},[99,85167,85168],{"class":109},"    const arr = [1, 2, 3]\n",[99,85170,85171],{"class":101,"line":1186},[99,85172,85173],{"class":109},"    \u002F\u002F 自己定义数组的扩展方法\n",[99,85175,85176],{"class":101,"line":1200},[99,85177,85178],{"class":109},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[99,85180,85181],{"class":101,"line":1206},[99,85182,85183],{"class":109},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[99,85185,85186],{"class":101,"line":1297},[99,85187,85188],{"class":109},"    \u002F\u002F ①.最大值\n",[99,85190,85191],{"class":101,"line":1303},[99,85192,85193],{"class":109},"    Array.prototype.max = function () {\n",[99,85195,85196],{"class":101,"line":1315},[99,85197,85198],{"class":109},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[99,85200,85201],{"class":101,"line":1598},[99,85202,85203],{"class":109},"      return Math.max(...this)\n",[99,85205,85206],{"class":101,"line":1603},[99,85207,85208],{"class":109},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[99,85210,85211],{"class":101,"line":1609},[99,85212,2173],{"class":109},[99,85214,85215],{"class":101,"line":1614},[99,85216,85217],{"class":109},"    console.log(arr.max())\n",[99,85219,85220],{"class":101,"line":1628},[99,85221,85222],{"class":109},"    \u002F\u002F ②最小值\n",[99,85224,85225],{"class":101,"line":1633},[99,85226,85227],{"class":109},"    Array.prototype.min = function () {\n",[99,85229,85230],{"class":101,"line":1639},[99,85231,85232],{"class":109},"      return Math.min(...this)\n",[99,85234,85235],{"class":101,"line":1660},[99,85236,2173],{"class":109},[99,85238,85239],{"class":101,"line":1665},[99,85240,85241],{"class":109},"    console.log(arr.min())\n",[99,85243,85244],{"class":101,"line":1679},[99,85245,85246],{"class":109},"    \u002F\u002F③求和\n",[99,85248,85249],{"class":101,"line":1684},[99,85250,85251],{"class":109},"    Array.prototype.sum = function () {\n",[99,85253,85254],{"class":101,"line":1713},[99,85255,85256],{"class":109},"      return this.reduce((prev, current) => prev + current, 0)\n",[99,85258,85259],{"class":101,"line":1718},[99,85260,2173],{"class":109},[99,85262,85263],{"class":101,"line":1735},[99,85264,85265],{"class":109},"    console.log(arr.sum())\n",[99,85267,85268],{"class":101,"line":1740},[99,85269,85270],{"class":109},"    \u002F\u002F ③排序\n",[99,85272,85273],{"class":101,"line":1745},[99,85274,85275],{"class":109},"    Array.prototype.rever = function () {\n",[99,85277,85278],{"class":101,"line":1750},[99,85279,85280],{"class":109},"      return this.reverse()\n",[99,85282,85283],{"class":101,"line":1764},[99,85284,2173],{"class":109},[99,85286,85287],{"class":101,"line":1769},[99,85288,85289],{"class":109},"    console.log(arr.rever())\n",[99,85291,85292],{"class":101,"line":2563},[99,85293,2386],{"emptyLinePlaceholder":26},[99,85295,85296,85298,85300],{"class":101,"line":2577},[99,85297,52398],{"class":109},[99,85299,51794],{"class":51281},[99,85301,51288],{"class":109},[99,85303,85304,85306,85308],{"class":101,"line":2585},[99,85305,51766],{"class":109},[99,85307,51781],{"class":51281},[99,85309,51288],{"class":109},[14,85311,85312],{},[1448,85313],{"alt":21,"src":85314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[70,85316,85318],{"id":85317},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85320,85321],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85323,85324],{},[1448,85325],{"alt":21,"src":85326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[90,85328,85330],{"className":53048,"code":85329,"language":53050,"meta":21,"style":21},"\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",[96,85331,85332,85340,85348,85353,85358,85362,85367,85372,85377,85385],{"__ignoreMap":21},[99,85333,85334,85336,85338],{"class":101,"line":102},[99,85335,1020],{"class":109},[99,85337,51781],{"class":51281},[99,85339,51288],{"class":109},[99,85341,85342,85344,85346],{"class":101,"line":22},[99,85343,52125],{"class":109},[99,85345,51794],{"class":51281},[99,85347,51288],{"class":109},[99,85349,85350],{"class":101,"line":1165},[99,85351,85352],{"class":109},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[99,85354,85355],{"class":101,"line":1180},[99,85356,85357],{"class":109},"    function Star() {\n",[99,85359,85360],{"class":101,"line":1186},[99,85361,2173],{"class":109},[99,85363,85364],{"class":101,"line":1200},[99,85365,85366],{"class":109},"    const ldh = new Star()\n",[99,85368,85369],{"class":101,"line":1206},[99,85370,85371],{"class":109},"    console.log(Star.prototype)\n",[99,85373,85374],{"class":101,"line":1297},[99,85375,85376],{"class":109},"    console.log(Star.prototype.constructor === Star)\n",[99,85378,85379,85381,85383],{"class":101,"line":1303},[99,85380,52398],{"class":109},[99,85382,51794],{"class":51281},[99,85384,51288],{"class":109},[99,85386,85387,85389,85391],{"class":101,"line":1315},[99,85388,51766],{"class":109},[99,85390,51781],{"class":51281},[99,85392,51288],{"class":109},[14,85394,85395],{},[1448,85396],{"alt":21,"src":85397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85399,85400],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[90,85402,85404],{"className":53048,"code":85403,"language":53050,"meta":21,"style":21},"  \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",[96,85405,85406,85414,85418,85422,85426,85431,85436,85441,85445,85450,85455,85460,85465,85470,85475,85479,85483,85488,85493,85498,85502,85507,85512,85516,85520,85524],{"__ignoreMap":21},[99,85407,85408,85410,85412],{"class":101,"line":102},[99,85409,52125],{"class":109},[99,85411,51794],{"class":51281},[99,85413,51288],{"class":109},[99,85415,85416],{"class":101,"line":22},[99,85417,85352],{"class":109},[99,85419,85420],{"class":101,"line":1165},[99,85421,85357],{"class":109},[99,85423,85424],{"class":101,"line":1180},[99,85425,2173],{"class":109},[99,85427,85428],{"class":101,"line":1186},[99,85429,85430],{"class":109},"    \u002F\u002F const ldh = new Star()\n",[99,85432,85433],{"class":101,"line":1200},[99,85434,85435],{"class":109},"    \u002F\u002F console.log(Star.prototype)\n",[99,85437,85438],{"class":101,"line":1206},[99,85439,85440],{"class":109},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[99,85442,85443],{"class":101,"line":1297},[99,85444,2386],{"emptyLinePlaceholder":26},[99,85446,85447],{"class":101,"line":1303},[99,85448,85449],{"class":109},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[99,85451,85452],{"class":101,"line":1315},[99,85453,85454],{"class":109},"    \u002F\u002F Star.prototype.sing = function () {\n",[99,85456,85457],{"class":101,"line":1598},[99,85458,85459],{"class":109},"    \u002F\u002F   console.log('唱歌')\n",[99,85461,85462],{"class":101,"line":1603},[99,85463,85464],{"class":109},"    \u002F\u002F }\n",[99,85466,85467],{"class":101,"line":1609},[99,85468,85469],{"class":109},"    \u002F\u002F Star.prototype.dance = function () {\n",[99,85471,85472],{"class":101,"line":1614},[99,85473,85474],{"class":109},"    \u002F\u002F   console.log('跳舞')\n",[99,85476,85477],{"class":101,"line":1628},[99,85478,85464],{"class":109},[99,85480,85481],{"class":101,"line":1633},[99,85482,85371],{"class":109},[99,85484,85485],{"class":101,"line":1639},[99,85486,85487],{"class":109},"    Star.prototype = {\n",[99,85489,85490],{"class":101,"line":1660},[99,85491,85492],{"class":109},"      sing: function () {\n",[99,85494,85495],{"class":101,"line":1665},[99,85496,85497],{"class":109},"        console.log('唱歌')\n",[99,85499,85500],{"class":101,"line":1679},[99,85501,77873],{"class":109},[99,85503,85504],{"class":101,"line":1684},[99,85505,85506],{"class":109},"      dance: function () {\n",[99,85508,85509],{"class":101,"line":1713},[99,85510,85511],{"class":109},"        console.log('跳舞')\n",[99,85513,85514],{"class":101,"line":1718},[99,85515,52379],{"class":109},[99,85517,85518],{"class":101,"line":1735},[99,85519,2173],{"class":109},[99,85521,85522],{"class":101,"line":1740},[99,85523,85371],{"class":109},[99,85525,85526,85528,85530],{"class":101,"line":1745},[99,85527,52398],{"class":109},[99,85529,51794],{"class":51281},[99,85531,51288],{"class":109},[14,85533,85534],{},"进行输出结果后会发现：",[14,85536,85537],{},[1448,85538],{"alt":21,"src":85539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85541,85542],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85544,85545],{},"所以，要重新指回创造这个原型对象的构造函数",[90,85547,85549],{"className":71194,"code":85548,"language":71196,"meta":21,"style":21},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[96,85550,85551,85565,85570,85575,85586,85599,85604,85615,85629,85633],{"__ignoreMap":21},[99,85552,85553,85556,85558,85561,85563],{"class":101,"line":102},[99,85554,85555],{"class":158},"Star",[99,85557,668],{"class":109},[99,85559,85560],{"class":158},"prototype",[99,85562,13551],{"class":105},[99,85564,15559],{"class":109},[99,85566,85567],{"class":101,"line":22},[99,85568,85569],{"class":168},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[99,85571,85572],{"class":101,"line":1165},[99,85573,85574],{"class":109},"  constructor: Star,\n",[99,85576,85577,85580,85582,85584],{"class":101,"line":1180},[99,85578,85579],{"class":1949},"  sing",[99,85581,51418],{"class":109},[99,85583,54430],{"class":105},[99,85585,54433],{"class":109},[99,85587,85588,85590,85592,85594,85597],{"class":101,"line":1186},[99,85589,73734],{"class":109},[99,85591,58228],{"class":1949},[99,85593,110],{"class":109},[99,85595,85596],{"class":214},"'唱歌'",[99,85598,116],{"class":109},[99,85600,85601],{"class":101,"line":1200},[99,85602,85603],{"class":109},"   },\n",[99,85605,85606,85609,85611,85613],{"class":101,"line":1206},[99,85607,85608],{"class":1949},"   dance",[99,85610,51418],{"class":109},[99,85612,54430],{"class":105},[99,85614,54433],{"class":109},[99,85616,85617,85620,85622,85624,85627],{"class":101,"line":1297},[99,85618,85619],{"class":109},"     console.",[99,85621,58228],{"class":1949},[99,85623,110],{"class":109},[99,85625,85626],{"class":214},"'跳舞'",[99,85628,116],{"class":109},[99,85630,85631],{"class":101,"line":1303},[99,85632,4295],{"class":109},[99,85634,85635],{"class":101,"line":1315},[99,85636,1551],{"class":109},[14,85638,85639],{},[1448,85640],{"alt":21,"src":85641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85643,85644],{},"总结1：",[14,85646,85647],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85649,85650],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85652,85653],{},"constructor指的是他的来源",[14,85655,85656],{},[1448,85657],{"alt":21,"src":85658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85660,85661],{},[1448,85662],{"alt":21,"src":85663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85665,85666],{},"总结2：",[14,85668,85669],{},[1448,85670],{"alt":21,"src":85671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85673,85674],{},[1448,85675],{"alt":21,"src":85676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85678,85679],{},[1448,85680],{"alt":21,"src":85681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[70,85683,85685],{"id":85684},"_4134-对象原型","4.13.4 对象原型",[14,85687,85688],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85690,85691],{},"对象原型就是__proto__这个属性",[14,85693,85694],{},[1448,85695],{"alt":21,"src":85696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85698,85699],{},[1448,85700],{"alt":21,"src":85701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85703,85704],{},[1448,85705],{"alt":21,"src":85706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85708,85709],{},[1448,85710],{"alt":21,"src":85711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[90,85713,85715],{"className":53048,"code":85714,"language":53050,"meta":21,"style":21},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[96,85716,85717,85725,85733,85737,85741,85745,85750,85758],{"__ignoreMap":21},[99,85718,85719,85721,85723],{"class":101,"line":102},[99,85720,1020],{"class":109},[99,85722,51781],{"class":51281},[99,85724,51288],{"class":109},[99,85726,85727,85729,85731],{"class":101,"line":22},[99,85728,52125],{"class":109},[99,85730,51794],{"class":51281},[99,85732,51288],{"class":109},[99,85734,85735],{"class":101,"line":1165},[99,85736,85357],{"class":109},[99,85738,85739],{"class":101,"line":1180},[99,85740,2173],{"class":109},[99,85742,85743],{"class":101,"line":1186},[99,85744,85366],{"class":109},[99,85746,85747],{"class":101,"line":1200},[99,85748,85749],{"class":109},"    console.log(ldh)\n",[99,85751,85752,85754,85756],{"class":101,"line":1206},[99,85753,52398],{"class":109},[99,85755,51794],{"class":51281},[99,85757,51288],{"class":109},[99,85759,85760,85762,85764],{"class":101,"line":1297},[99,85761,51766],{"class":109},[99,85763,51781],{"class":51281},[99,85765,51288],{"class":109},[14,85767,85768],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85770,85771],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85773,85774],{},[1448,85775],{"alt":21,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85778,85779],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85781,85782],{},"对象原型指向原型对象",[14,85784,85785],{},[1448,85786],{"alt":21,"src":85787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85789,85790],{},[1448,85791],{"alt":21,"src":85792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85794,85795],{},[1448,85796],{"alt":21,"src":85797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[70,85799,85801],{"id":85800},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85803,85804],{},[1448,85805],{"alt":21,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[53,85808,85809,85812,85815,85818],{},[56,85810,85811],{},"构造函数通过new的形式实例化得到实例对象",[56,85813,85814],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[56,85816,85817],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[56,85819,85820],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85822,85823],{},[1448,85824],{"alt":21,"src":85825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85827,85828],{},"题目梳理：",[14,85830,85831],{},[1448,85832],{"alt":21,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[70,85835,85837],{"id":85836},"_4136-原型继承","4.13.6 原型继承",[14,85839,85840],{},[1448,85841],{"alt":21,"src":85842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85844,85845],{},[1448,85846],{"alt":21,"src":85847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85849,85850],{},[1448,85851],{"alt":21,"src":85852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85854,85855],{},[1448,85856],{"alt":21,"src":85857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85859,85860],{},[1448,85861],{"alt":21,"src":85862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85864,85865],{},[1448,85866],{"alt":21,"src":85867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85869,85870],{},[1448,85871],{"alt":21,"src":85872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85874,85875],{},[1448,85876],{"alt":21,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85879,85880],{},"回顾：构造函数每次new得到对象都是不同的",[70,85882,85884],{"id":85883},"_4137-原型链","4.13.7 原型链",[14,85886,85887],{},[1448,85888],{"alt":21,"src":85889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85891,85892],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85894,85895],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85897,85898],{},"大哥是Object",[14,85900,85901],{},[1448,85902],{"alt":21,"src":85903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85905,85906],{},[1448,85907],{"alt":21,"src":85908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85910,85911],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85913,85914],{},"万物皆对象",[70,85916,85918],{"id":85917},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85920,85921],{},"模态框",[14,85923,85924],{},"以后遇见这个效果直接使用这个就行",[14,85926,85927],{},[1448,85928],{"alt":21,"src":85929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85931,85932],{},[1448,85933],{"alt":21,"src":85934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85936,85937],{},[1448,85938],{"alt":21,"src":85939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85941,85942],{},[1448,85943],{"alt":21,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85946,85947],{},"补充知识点：",[53,85949,85950],{},[56,85951,85952],{},"append()",[14,85954,85955],{},[1448,85956],{"alt":21,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[90,85959,85961],{"className":50614,"code":85960,"language":50616,"meta":21,"style":21},"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",[96,85962,85963,85968,85973,85978,85982,85986,85990,85995,86000,86005,86009],{"__ignoreMap":21},[99,85964,85965],{"class":101,"line":102},[99,85966,85967],{"class":109},"append(param1)\n",[99,85969,85970],{"class":101,"line":22},[99,85971,85972],{"class":109},"append(param1, param2)\n",[99,85974,85975],{"class":101,"line":1165},[99,85976,85977],{"class":109},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[99,85979,85980],{"class":101,"line":1180},[99,85981,2386],{"emptyLinePlaceholder":26},[99,85983,85984],{"class":101,"line":1186},[99,85985,2386],{"emptyLinePlaceholder":26},[99,85987,85988],{"class":101,"line":1200},[99,85989,2386],{"emptyLinePlaceholder":26},[99,85991,85992],{"class":101,"line":1206},[99,85993,85994],{"class":109},"let div = document.createElement(\"div\");\n",[99,85996,85997],{"class":101,"line":1297},[99,85998,85999],{"class":109},"let p = document.createElement(\"p\");\n",[99,86001,86002],{"class":101,"line":1303},[99,86003,86004],{"class":109},"div.append(p);\n",[99,86006,86007],{"class":101,"line":1315},[99,86008,2386],{"emptyLinePlaceholder":26},[99,86010,86011,86014,86016],{"class":101,"line":1598},[99,86012,86013],{"class":109},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[99,86015,14],{"class":51281},[99,86017,86018],{"class":109},"> ]\n",[53,86020,86021],{"start":22},[56,86022,86023],{},"remove()",[14,86025,86026],{},"自己删自己",[14,86028,86029],{},[1448,86030],{"alt":21,"src":86031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[90,86033,86035],{"className":50614,"code":86034,"language":50616,"meta":21,"style":21},"\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",[96,86036,86037,86047,86061,86065,86073,86087,86107,86119,86127,86134,86146,86159,86194,86206,86217,86229,86241,86253,86280,86290,86294,86298,86307,86319,86333,86343,86355,86359,86363,86373,86384,86394,86404,86417,86430,86440,86444,86448,86457,86467,86479,86483,86487,86496,86506,86516,86528,86532,86536,86546,86562,86573,86583,86593,86605,86617,86629,86633,86637,86650,86661,86665,86673,86681,86685,86693,86713,86733,86741,86746,86772,86777,86782,86801,86806,86818,86823,86834,86844,86854,86859,86864,86868,86873,86878,86883,86903,86908,86928,86933,86947,86952,86957,86962,86978,86982,86987,87016,87021,87026,87031,87042,87046,87050,87054,87059,87084,87089,87114,87119,87128,87132,87137,87162,87166,87191,87195,87204,87208,87213,87231,87241,87245,87253,87261,87265],{"__ignoreMap":21},[99,86038,86039,86041,86043,86045],{"class":101,"line":102},[99,86040,51278],{"class":109},[99,86042,51282],{"class":51281},[99,86044,51285],{"class":1949},[99,86046,51288],{"class":109},[99,86048,86049,86051,86053,86055,86057,86059],{"class":101,"line":22},[99,86050,1020],{"class":109},[99,86052,50616],{"class":51281},[99,86054,51297],{"class":1949},[99,86056,155],{"class":109},[99,86058,51302],{"class":214},[99,86060,51288],{"class":109},[99,86062,86063],{"class":101,"line":1165},[99,86064,2386],{"emptyLinePlaceholder":26},[99,86066,86067,86069,86071],{"class":101,"line":1180},[99,86068,1020],{"class":109},[99,86070,51315],{"class":51281},[99,86072,51288],{"class":109},[99,86074,86075,86077,86079,86081,86083,86085],{"class":101,"line":1186},[99,86076,52125],{"class":109},[99,86078,51325],{"class":51281},[99,86080,51328],{"class":1949},[99,86082,155],{"class":109},[99,86084,51333],{"class":214},[99,86086,51288],{"class":109},[99,86088,86089,86091,86093,86095,86097,86099,86101,86103,86105],{"class":101,"line":1200},[99,86090,52125],{"class":109},[99,86092,51325],{"class":51281},[99,86094,14907],{"class":1949},[99,86096,155],{"class":109},[99,86098,51372],{"class":214},[99,86100,51352],{"class":1949},[99,86102,155],{"class":109},[99,86104,51379],{"class":214},[99,86106,51288],{"class":109},[99,86108,86109,86111,86113,86115,86117],{"class":101,"line":1206},[99,86110,52125],{"class":109},[99,86112,51388],{"class":51281},[99,86114,51391],{"class":109},[99,86116,51388],{"class":51281},[99,86118,51288],{"class":109},[99,86120,86121,86123,86125],{"class":101,"line":1297},[99,86122,52125],{"class":109},[99,86124,5113],{"class":51281},[99,86126,51288],{"class":109},[99,86128,86129,86132],{"class":101,"line":1303},[99,86130,86131],{"class":1949},"    .modal",[99,86133,15559],{"class":109},[99,86135,86136,86138,86140,86142,86144],{"class":101,"line":1315},[99,86137,54752],{"class":158},[99,86139,51418],{"class":109},[99,86141,3959],{"class":158},[99,86143,51473],{"class":105},[99,86145,1276],{"class":109},[99,86147,86148,86151,86153,86155,86157],{"class":101,"line":1598},[99,86149,86150],{"class":158},"      min-height",[99,86152,51418],{"class":109},[99,86154,421],{"class":158},[99,86156,51473],{"class":105},[99,86158,1276],{"class":109},[99,86160,86161,86163,86165,86167,86169,86171,86173,86175,86177,86179,86181,86183,86185,86187,86189,86192],{"class":101,"line":1603},[99,86162,78731],{"class":158},[99,86164,51418],{"class":109},[99,86166,301],{"class":158},[99,86168,4079],{"class":158},[99,86170,2024],{"class":158},[99,86172,51473],{"class":105},[99,86174,78748],{"class":158},[99,86176,110],{"class":109},[99,86178,301],{"class":158},[99,86180,12422],{"class":109},[99,86182,301],{"class":158},[99,86184,12422],{"class":109},[99,86186,301],{"class":158},[99,86188,12422],{"class":109},[99,86190,86191],{"class":158},"0.1",[99,86193,2705],{"class":109},[99,86195,86196,86198,86200,86202,86204],{"class":101,"line":1609},[99,86197,55115],{"class":158},[99,86199,51418],{"class":109},[99,86201,403],{"class":158},[99,86203,51473],{"class":105},[99,86205,1276],{"class":109},[99,86207,86208,86210,86212,86215],{"class":101,"line":1614},[99,86209,54740],{"class":158},[99,86211,51418],{"class":109},[99,86213,86214],{"class":158},"fixed",[99,86216,1276],{"class":109},[99,86218,86219,86222,86224,86227],{"class":101,"line":1628},[99,86220,86221],{"class":158},"      z-index",[99,86223,51418],{"class":109},[99,86225,86226],{"class":158},"999",[99,86228,1276],{"class":109},[99,86230,86231,86233,86235,86237,86239],{"class":101,"line":1633},[99,86232,54819],{"class":158},[99,86234,51418],{"class":109},[99,86236,766],{"class":158},[99,86238,438],{"class":105},[99,86240,1276],{"class":109},[99,86242,86243,86245,86247,86249,86251],{"class":101,"line":1639},[99,86244,54928],{"class":158},[99,86246,51418],{"class":109},[99,86248,766],{"class":158},[99,86250,438],{"class":105},[99,86252,1276],{"class":109},[99,86254,86255,86257,86259,86261,86263,86266,86268,86270,86272,86274,86276,86278],{"class":101,"line":1660},[99,86256,78772],{"class":158},[99,86258,51418],{"class":109},[99,86260,78777],{"class":158},[99,86262,110],{"class":109},[99,86264,86265],{"class":158},"-50",[99,86267,438],{"class":105},[99,86269,12422],{"class":109},[99,86271,86265],{"class":158},[99,86273,438],{"class":105},[99,86275,12422],{"class":109},[99,86277,301],{"class":158},[99,86279,2705],{"class":109},[99,86281,86282,86284,86286,86288],{"class":101,"line":1665},[99,86283,54865],{"class":158},[99,86285,51418],{"class":109},[99,86287,60823],{"class":158},[99,86289,1276],{"class":109},[99,86291,86292],{"class":101,"line":1679},[99,86293,2173],{"class":109},[99,86295,86296],{"class":101,"line":1684},[99,86297,2386],{"emptyLinePlaceholder":26},[99,86299,86300,86302,86305],{"class":101,"line":1713},[99,86301,86131],{"class":1949},[99,86303,86304],{"class":1949}," .header",[99,86306,15559],{"class":109},[99,86308,86309,86311,86313,86315,86317],{"class":101,"line":1718},[99,86310,57340],{"class":158},[99,86312,51418],{"class":109},[99,86314,511],{"class":158},[99,86316,51473],{"class":105},[99,86318,1276],{"class":109},[99,86320,86321,86323,86325,86327,86329,86331],{"class":101,"line":1735},[99,86322,54676],{"class":158},[99,86324,51418],{"class":109},[99,86326,301],{"class":158},[99,86328,2024],{"class":158},[99,86330,51473],{"class":105},[99,86332,1276],{"class":109},[99,86334,86335,86337,86339,86341],{"class":101,"line":1740},[99,86336,54740],{"class":158},[99,86338,51418],{"class":109},[99,86340,54745],{"class":158},[99,86342,1276],{"class":109},[99,86344,86345,86347,86349,86351,86353],{"class":101,"line":1745},[99,86346,54903],{"class":158},[99,86348,51418],{"class":109},[99,86350,810],{"class":158},[99,86352,51473],{"class":105},[99,86354,1276],{"class":109},[99,86356,86357],{"class":101,"line":1750},[99,86358,2173],{"class":109},[99,86360,86361],{"class":101,"line":1764},[99,86362,2386],{"emptyLinePlaceholder":26},[99,86364,86365,86367,86369,86371],{"class":101,"line":1769},[99,86366,86131],{"class":1949},[99,86368,86304],{"class":1949},[99,86370,3018],{"class":51281},[99,86372,15559],{"class":109},[99,86374,86375,86378,86380,86382],{"class":101,"line":2563},[99,86376,86377],{"class":158},"      font-style",[99,86379,51418],{"class":109},[99,86381,63822],{"class":158},[99,86383,1276],{"class":109},[99,86385,86386,86388,86390,86392],{"class":101,"line":2577},[99,86387,57397],{"class":158},[99,86389,51418],{"class":109},[99,86391,62051],{"class":158},[99,86393,1276],{"class":109},[99,86395,86396,86398,86400,86402],{"class":101,"line":2585},[99,86397,54740],{"class":158},[99,86399,51418],{"class":109},[99,86401,54812],{"class":158},[99,86403,1276],{"class":109},[99,86405,86406,86409,86411,86413,86415],{"class":101,"line":2590},[99,86407,86408],{"class":158},"      right",[99,86410,51418],{"class":109},[99,86412,685],{"class":158},[99,86414,51473],{"class":105},[99,86416,1276],{"class":109},[99,86418,86419,86421,86423,86426,86428],{"class":101,"line":2596},[99,86420,54928],{"class":158},[99,86422,51418],{"class":109},[99,86424,86425],{"class":158},"-2",[99,86427,51473],{"class":105},[99,86429,1276],{"class":109},[99,86431,86432,86434,86436,86438],{"class":101,"line":2602},[99,86433,62006],{"class":158},[99,86435,51418],{"class":109},[99,86437,62011],{"class":158},[99,86439,1276],{"class":109},[99,86441,86442],{"class":101,"line":2607},[99,86443,2173],{"class":109},[99,86445,86446],{"class":101,"line":7935},[99,86447,2386],{"emptyLinePlaceholder":26},[99,86449,86450,86452,86455],{"class":101,"line":7959},[99,86451,86131],{"class":1949},[99,86453,86454],{"class":1949}," .body",[99,86456,15559],{"class":109},[99,86458,86459,86461,86463,86465],{"class":101,"line":7964},[99,86460,57267],{"class":158},[99,86462,51418],{"class":109},[99,86464,51573],{"class":158},[99,86466,1276],{"class":109},[99,86468,86469,86471,86473,86475,86477],{"class":101,"line":7970},[99,86470,54676],{"class":158},[99,86472,51418],{"class":109},[99,86474,556],{"class":158},[99,86476,51473],{"class":105},[99,86478,1276],{"class":109},[99,86480,86481],{"class":101,"line":7997},[99,86482,2173],{"class":109},[99,86484,86485],{"class":101,"line":8002},[99,86486,2386],{"emptyLinePlaceholder":26},[99,86488,86489,86491,86494],{"class":101,"line":8008},[99,86490,86131],{"class":1949},[99,86492,86493],{"class":1949}," .footer",[99,86495,15559],{"class":109},[99,86497,86498,86500,86502,86504],{"class":101,"line":8020},[99,86499,54990],{"class":158},[99,86501,51418],{"class":109},[99,86503,51458],{"class":158},[99,86505,1276],{"class":109},[99,86507,86508,86510,86512,86514],{"class":101,"line":8032},[99,86509,55001],{"class":158},[99,86511,51418],{"class":109},[99,86513,51561],{"class":158},[99,86515,1276],{"class":109},[99,86517,86518,86520,86522,86524,86526],{"class":101,"line":8044},[99,86519,54676],{"class":158},[99,86521,51418],{"class":109},[99,86523,556],{"class":158},[99,86525,51473],{"class":105},[99,86527,1276],{"class":109},[99,86529,86530],{"class":101,"line":9703},[99,86531,2173],{"class":109},[99,86533,86534],{"class":101,"line":9728},[99,86535,2386],{"emptyLinePlaceholder":26},[99,86537,86538,86540,86542,86544],{"class":101,"line":9751},[99,86539,86131],{"class":1949},[99,86541,86493],{"class":1949},[99,86543,1384],{"class":51281},[99,86545,15559],{"class":109},[99,86547,86548,86550,86552,86554,86556,86558,86560],{"class":101,"line":9775},[99,86549,54676],{"class":158},[99,86551,51418],{"class":109},[99,86553,181],{"class":158},[99,86555,51473],{"class":105},[99,86557,2069],{"class":158},[99,86559,51473],{"class":105},[99,86561,1276],{"class":109},[99,86563,86564,86566,86568,86571],{"class":101,"line":9780},[99,86565,61702],{"class":158},[99,86567,51418],{"class":109},[99,86569,86570],{"class":158},"#ccc",[99,86572,1276],{"class":109},[99,86574,86575,86577,86579,86581],{"class":101,"line":9785},[99,86576,63951],{"class":158},[99,86578,51418],{"class":109},[99,86580,54718],{"class":158},[99,86582,1276],{"class":109},[99,86584,86585,86587,86589,86591],{"class":101,"line":9790},[99,86586,57397],{"class":158},[99,86588,51418],{"class":109},[99,86590,60823],{"class":158},[99,86592,1276],{"class":109},[99,86594,86595,86597,86599,86601,86603],{"class":101,"line":9799},[99,86596,55115],{"class":158},[99,86598,51418],{"class":109},[99,86600,187],{"class":158},[99,86602,51473],{"class":105},[99,86604,1276],{"class":109},[99,86606,86607,86609,86611,86613,86615],{"class":101,"line":9804},[99,86608,61731],{"class":158},[99,86610,51418],{"class":109},[99,86612,556],{"class":158},[99,86614,51473],{"class":105},[99,86616,1276],{"class":109},[99,86618,86619,86621,86623,86625,86627],{"class":101,"line":9810},[99,86620,54903],{"class":158},[99,86622,51418],{"class":109},[99,86624,659],{"class":158},[99,86626,51473],{"class":105},[99,86628,1276],{"class":109},[99,86630,86631],{"class":101,"line":9831},[99,86632,2173],{"class":109},[99,86634,86635],{"class":101,"line":9837},[99,86636,2386],{"emptyLinePlaceholder":26},[99,86638,86639,86641,86643,86645,86648],{"class":101,"line":9851},[99,86640,86131],{"class":1949},[99,86642,86493],{"class":1949},[99,86644,1384],{"class":51281},[99,86646,86647],{"class":1949},".submit",[99,86649,15559],{"class":109},[99,86651,86652,86654,86656,86659],{"class":101,"line":9857},[99,86653,54865],{"class":158},[99,86655,51418],{"class":109},[99,86657,86658],{"class":158},"#369",[99,86660,1276],{"class":109},[99,86662,86663],{"class":101,"line":9884},[99,86664,2173],{"class":109},[99,86666,86667,86669,86671],{"class":101,"line":9893},[99,86668,52398],{"class":109},[99,86670,5113],{"class":51281},[99,86672,51288],{"class":109},[99,86674,86675,86677,86679],{"class":101,"line":9899},[99,86676,51766],{"class":109},[99,86678,51315],{"class":51281},[99,86680,51288],{"class":109},[99,86682,86683],{"class":101,"line":9907},[99,86684,2386],{"emptyLinePlaceholder":26},[99,86686,86687,86689,86691],{"class":101,"line":9912},[99,86688,1020],{"class":109},[99,86690,51781],{"class":51281},[99,86692,51288],{"class":109},[99,86694,86695,86697,86699,86701,86703,86706,86709,86711],{"class":101,"line":16591},[99,86696,52125],{"class":109},[99,86698,53868],{"class":51281},[99,86700,14946],{"class":1949},[99,86702,155],{"class":109},[99,86704,86705],{"class":214},"\"delete\"",[99,86707,86708],{"class":109},">删除\u003C\u002F",[99,86710,53868],{"class":51281},[99,86712,51288],{"class":109},[99,86714,86715,86717,86719,86721,86723,86726,86729,86731],{"class":101,"line":16597},[99,86716,52125],{"class":109},[99,86718,53868],{"class":51281},[99,86720,14946],{"class":1949},[99,86722,155],{"class":109},[99,86724,86725],{"class":214},"\"login\"",[99,86727,86728],{"class":109},">登录\u003C\u002F",[99,86730,53868],{"class":51281},[99,86732,51288],{"class":109},[99,86734,86735,86737,86739],{"class":101,"line":16620},[99,86736,52125],{"class":109},[99,86738,51794],{"class":51281},[99,86740,51288],{"class":109},[99,86742,86743],{"class":101,"line":16626},[99,86744,86745],{"class":168},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[99,86747,86748,86750,86753,86755,86757,86759,86761,86763,86766,86768,86770],{"class":101,"line":16649},[99,86749,70065],{"class":105},[99,86751,86752],{"class":1949}," Modal",[99,86754,110],{"class":109},[99,86756,51388],{"class":5203},[99,86758,13551],{"class":105},[99,86760,69911],{"class":214},[99,86762,12422],{"class":109},[99,86764,86765],{"class":5203},"message",[99,86767,13551],{"class":105},[99,86769,69911],{"class":214},[99,86771,12429],{"class":109},[99,86773,86774],{"class":101,"line":16663},[99,86775,86776],{"class":168},"      \u002F\u002F 创建Model 模态框盒子\n",[99,86778,86779],{"class":101,"line":16683},[99,86780,86781],{"class":168},"      \u002F\u002F 1.1 创建div标签\n",[99,86783,86784,86786,86789,86791,86793,86795,86797,86799],{"class":101,"line":16689},[99,86785,70032],{"class":158},[99,86787,86788],{"class":109},".modalBox ",[99,86790,155],{"class":105},[99,86792,54377],{"class":109},[99,86794,70132],{"class":1949},[99,86796,110],{"class":109},[99,86798,81912],{"class":214},[99,86800,116],{"class":109},[99,86802,86803],{"class":101,"line":16700},[99,86804,86805],{"class":168},"      \u002F\u002F 1.2 给div 添加类名为model\n",[99,86807,86808,86810,86813,86815],{"class":101,"line":16723},[99,86809,70032],{"class":158},[99,86811,86812],{"class":109},".modalBox.className ",[99,86814,155],{"class":105},[99,86816,86817],{"class":214}," 'modal'\n",[99,86819,86820],{"class":101,"line":16745},[99,86821,86822],{"class":168},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[99,86824,86825,86827,86830,86832],{"class":101,"line":16750},[99,86826,70032],{"class":158},[99,86828,86829],{"class":109},".modalBox.innerHTML ",[99,86831,155],{"class":105},[99,86833,70149],{"class":214},[99,86835,86836,86839,86841],{"class":101,"line":16756},[99,86837,86838],{"class":214},"        \u003Cdiv class=\"header\">${",[99,86840,51388],{"class":109},[99,86842,86843],{"class":214},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[99,86845,86846,86849,86851],{"class":101,"line":16770},[99,86847,86848],{"class":214},"        \u003Cdiv class=\"body\">${",[99,86850,86765],{"class":109},[99,86852,86853],{"class":214},"}\u003C\u002Fdiv>\n",[99,86855,86856],{"class":101,"line":16783},[99,86857,86858],{"class":214},"      `\n",[99,86860,86861],{"class":101,"line":16788},[99,86862,86863],{"class":168},"      \u002F\u002F console.log(this.modalBox)\n",[99,86865,86866],{"class":101,"line":16802},[99,86867,2173],{"class":109},[99,86869,86870],{"class":101,"line":16807},[99,86871,86872],{"class":168},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[99,86874,86875],{"class":101,"line":16813},[99,86876,86877],{"class":168},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[99,86879,86880],{"class":101,"line":16818},[99,86881,86882],{"class":168},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[99,86884,86885,86888,86890,86892,86894,86897,86899,86901],{"class":101,"line":16832},[99,86886,86887],{"class":158},"    Modal",[99,86889,668],{"class":109},[99,86891,85560],{"class":158},[99,86893,668],{"class":109},[99,86895,86896],{"class":1949},"open",[99,86898,13551],{"class":105},[99,86900,58899],{"class":105},[99,86902,54433],{"class":109},[99,86904,86905],{"class":101,"line":16837},[99,86906,86907],{"class":168},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[99,86909,86910,86912,86915,86917,86919,86921,86923,86926],{"class":101,"line":16842},[99,86911,58209],{"class":105},[99,86913,86914],{"class":158}," box",[99,86916,13551],{"class":105},[99,86918,54377],{"class":109},[99,86920,54380],{"class":1949},[99,86922,110],{"class":109},[99,86924,86925],{"class":214},"'.modal'",[99,86927,116],{"class":109},[99,86929,86930],{"class":101,"line":16856},[99,86931,86932],{"class":168},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[99,86934,86935,86938,86940,86943,86945],{"class":101,"line":16868},[99,86936,86937],{"class":109},"      box ",[99,86939,1701],{"class":105},[99,86941,86942],{"class":109}," box.",[99,86944,56987],{"class":1949},[99,86946,1962],{"class":109},[99,86948,86949],{"class":101,"line":16873},[99,86950,86951],{"class":168},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[99,86953,86954],{"class":101,"line":16886},[99,86955,86956],{"class":168},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[99,86958,86959],{"class":101,"line":16891},[99,86960,86961],{"class":168},"      \u002F\u002F append可以增加对象\n",[99,86963,86964,86967,86970,86972,86975],{"class":101,"line":16896},[99,86965,86966],{"class":109},"      document.body.",[99,86968,86969],{"class":1949},"append",[99,86971,110],{"class":109},[99,86973,86974],{"class":158},"this",[99,86976,86977],{"class":109},".modalBox)\n",[99,86979,86980],{"class":101,"line":16901},[99,86981,2386],{"emptyLinePlaceholder":26},[99,86983,86984],{"class":101,"line":16914},[99,86985,86986],{"class":168},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[99,86988,86989,86991,86994,86996,86998,87001,87003,87005,87007,87009,87012,87014],{"class":101,"line":16919},[99,86990,70032],{"class":158},[99,86992,86993],{"class":109},".modalBox.",[99,86995,54380],{"class":1949},[99,86997,110],{"class":109},[99,86999,87000],{"class":214},"'i'",[99,87002,30807],{"class":109},[99,87004,57794],{"class":1949},[99,87006,110],{"class":109},[99,87008,57799],{"class":214},[99,87010,87011],{"class":109},", () ",[99,87013,84703],{"class":105},[99,87015,15559],{"class":109},[99,87017,87018],{"class":101,"line":32614},[99,87019,87020],{"class":168},"        \u002F\u002F 这个地方需要用到箭头函数\n",[99,87022,87023],{"class":101,"line":32620},[99,87024,87025],{"class":168},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[99,87027,87028],{"class":101,"line":32626},[99,87029,87030],{"class":168},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[99,87032,87033,87035,87037,87040],{"class":101,"line":32632},[99,87034,64707],{"class":158},[99,87036,668],{"class":109},[99,87038,87039],{"class":1949},"close",[99,87041,1962],{"class":109},[99,87043,87044],{"class":101,"line":32638},[99,87045,64796],{"class":109},[99,87047,87048],{"class":101,"line":32649},[99,87049,2173],{"class":109},[99,87051,87052],{"class":101,"line":32655},[99,87053,2386],{"emptyLinePlaceholder":26},[99,87055,87056],{"class":101,"line":32675},[99,87057,87058],{"class":168},"    \u002F\u002F 测试一下 点击 删除按钮\n",[99,87060,87061,87063,87065,87067,87070,87072,87074,87076,87078,87080,87082],{"class":101,"line":32681},[99,87062,52388],{"class":109},[99,87064,54380],{"class":1949},[99,87066,110],{"class":109},[99,87068,87069],{"class":214},"'#delete'",[99,87071,30807],{"class":109},[99,87073,57794],{"class":1949},[99,87075,110],{"class":109},[99,87077,57799],{"class":214},[99,87079,87011],{"class":109},[99,87081,84703],{"class":105},[99,87083,15559],{"class":109},[99,87085,87086],{"class":101,"line":32692},[99,87087,87088],{"class":168},"      \u002F\u002F 先调用Model构造函数\n",[99,87090,87091,87093,87096,87098,87100,87102,87104,87107,87109,87112],{"class":101,"line":32698},[99,87092,58209],{"class":105},[99,87094,87095],{"class":158}," del",[99,87097,13551],{"class":105},[99,87099,11565],{"class":105},[99,87101,86752],{"class":1949},[99,87103,110],{"class":109},[99,87105,87106],{"class":214},"'温馨的提示'",[99,87108,12422],{"class":109},[99,87110,87111],{"class":214},"'您没有删除权限操作'",[99,87113,116],{"class":109},[99,87115,87116],{"class":101,"line":32704},[99,87117,87118],{"class":168},"      \u002F\u002F 实例对象调用open方法\n",[99,87120,87121,87124,87126],{"class":101,"line":32710},[99,87122,87123],{"class":109},"      del.",[99,87125,86896],{"class":1949},[99,87127,1962],{"class":109},[99,87129,87130],{"class":101,"line":32716},[99,87131,33442],{"class":109},[99,87133,87134],{"class":101,"line":32722},[99,87135,87136],{"class":168},"    \u002F\u002F 测试一下 点击 登录按钮\n",[99,87138,87139,87141,87143,87145,87148,87150,87152,87154,87156,87158,87160],{"class":101,"line":32728},[99,87140,52388],{"class":109},[99,87142,54380],{"class":1949},[99,87144,110],{"class":109},[99,87146,87147],{"class":214},"'#login'",[99,87149,30807],{"class":109},[99,87151,57794],{"class":1949},[99,87153,110],{"class":109},[99,87155,57799],{"class":214},[99,87157,87011],{"class":109},[99,87159,84703],{"class":105},[99,87161,15559],{"class":109},[99,87163,87164],{"class":101,"line":32734},[99,87165,87088],{"class":168},[99,87167,87168,87170,87173,87175,87177,87179,87181,87184,87186,87189],{"class":101,"line":32754},[99,87169,58209],{"class":105},[99,87171,87172],{"class":158}," log",[99,87174,13551],{"class":105},[99,87176,11565],{"class":105},[99,87178,86752],{"class":1949},[99,87180,110],{"class":109},[99,87182,87183],{"class":214},"'友情提示'",[99,87185,12422],{"class":109},[99,87187,87188],{"class":214},"'您还没有登录呢'",[99,87190,116],{"class":109},[99,87192,87193],{"class":101,"line":32760},[99,87194,87118],{"class":168},[99,87196,87197,87200,87202],{"class":101,"line":32776},[99,87198,87199],{"class":109},"      log.",[99,87201,86896],{"class":1949},[99,87203,1962],{"class":109},[99,87205,87206],{"class":101,"line":32782},[99,87207,33442],{"class":109},[99,87209,87210],{"class":101,"line":32796},[99,87211,87212],{"class":168},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[99,87214,87215,87217,87219,87221,87223,87225,87227,87229],{"class":101,"line":32802},[99,87216,86887],{"class":158},[99,87218,668],{"class":109},[99,87220,85560],{"class":158},[99,87222,668],{"class":109},[99,87224,87039],{"class":1949},[99,87226,13551],{"class":105},[99,87228,58899],{"class":105},[99,87230,54433],{"class":109},[99,87232,87233,87235,87237,87239],{"class":101,"line":32817},[99,87234,70032],{"class":158},[99,87236,86993],{"class":109},[99,87238,56987],{"class":1949},[99,87240,1962],{"class":109},[99,87242,87243],{"class":101,"line":32823},[99,87244,2173],{"class":109},[99,87246,87247,87249,87251],{"class":101,"line":32832},[99,87248,52398],{"class":109},[99,87250,51794],{"class":51281},[99,87252,51288],{"class":109},[99,87254,87255,87257,87259],{"class":101,"line":32838},[99,87256,51766],{"class":109},[99,87258,51781],{"class":51281},[99,87260,51288],{"class":109},[99,87262,87263],{"class":101,"line":32847},[99,87264,2386],{"emptyLinePlaceholder":26},[99,87266,87267,87269,87271],{"class":101,"line":32853},[99,87268,51766],{"class":109},[99,87270,50616],{"class":51281},[99,87272,51288],{"class":109},[14,87274,87275],{},[1448,87276],{"alt":21,"src":87277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[41,87279,87281],{"id":87280},"_414-深浅拷贝","4.14 深浅拷贝",[70,87283,87285],{"id":87284},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87287,87288],{},[1448,87289],{"alt":21,"src":87290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87292,87293],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87295,87296],{},[1448,87297],{"alt":21,"src":87298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87300,87301],{},[1448,87302],{"alt":21,"src":87303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87305,87306],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87308,87309],{},[1448,87310],{"alt":21,"src":87311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87313,11319],{},[14,87315,87316],{},[1448,87317],{"alt":21,"src":87318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[70,87320,87322],{"id":87321},"_4142-深拷贝","4.14.2 深拷贝",[14,87324,87325],{},"深拷贝：拷贝的是对象，不是地址",[14,87327,87328],{},"常用的三种方法：",[53,87330,87331,87334,87337],{},[56,87332,87333],{},"通过递归实现深拷贝",[56,87335,87336],{},"lodash\u002FcloneDeep",[56,87338,87339],{},"通过JSON.stringify()实现",[21985,87341,87343],{"id":87342},"_41421-递归函数","4.14.2.1 递归函数",[14,87345,87346],{},[1448,87347],{"alt":21,"src":87348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[53,87350,87351],{},[56,87352,87353],{},"死递归占溢出：",[90,87355,87357],{"className":53048,"code":87356,"language":53050,"meta":21,"style":21},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[96,87358,87359,87367,87375,87379,87384,87388,87393,87401],{"__ignoreMap":21},[99,87360,87361,87363,87365],{"class":101,"line":102},[99,87362,1020],{"class":109},[99,87364,51781],{"class":51281},[99,87366,51288],{"class":109},[99,87368,87369,87371,87373],{"class":101,"line":22},[99,87370,52125],{"class":109},[99,87372,51794],{"class":51281},[99,87374,51288],{"class":109},[99,87376,87377],{"class":101,"line":1165},[99,87378,77124],{"class":109},[99,87380,87381],{"class":101,"line":1180},[99,87382,87383],{"class":109},"      fn()\n",[99,87385,87386],{"class":101,"line":1186},[99,87387,2173],{"class":109},[99,87389,87390],{"class":101,"line":1200},[99,87391,87392],{"class":109},"    fn()\n",[99,87394,87395,87397,87399],{"class":101,"line":1206},[99,87396,52398],{"class":109},[99,87398,51794],{"class":51281},[99,87400,51288],{"class":109},[99,87402,87403,87405,87407],{"class":101,"line":1297},[99,87404,51766],{"class":109},[99,87406,51781],{"class":51281},[99,87408,51288],{"class":109},[53,87410,87411],{"start":22},[56,87412,87413],{},"递归函数要加判断条件：",[14,87415,87416],{},[1448,87417],{"alt":21,"src":87418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[53,87420,87421],{"start":1165},[56,87422,87423],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[90,87425,87427],{"className":50614,"code":87426,"language":50616,"meta":21,"style":21},"\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",[96,87428,87429,87439,87453,87457,87465,87479,87499,87511,87519,87523,87531,87543,87551,87559,87584,87596,87600,87607,87615,87623,87627],{"__ignoreMap":21},[99,87430,87431,87433,87435,87437],{"class":101,"line":102},[99,87432,51278],{"class":109},[99,87434,51282],{"class":51281},[99,87436,51285],{"class":1949},[99,87438,51288],{"class":109},[99,87440,87441,87443,87445,87447,87449,87451],{"class":101,"line":22},[99,87442,1020],{"class":109},[99,87444,50616],{"class":51281},[99,87446,51297],{"class":1949},[99,87448,155],{"class":109},[99,87450,51302],{"class":214},[99,87452,51288],{"class":109},[99,87454,87455],{"class":101,"line":1165},[99,87456,2386],{"emptyLinePlaceholder":26},[99,87458,87459,87461,87463],{"class":101,"line":1180},[99,87460,1020],{"class":109},[99,87462,51315],{"class":51281},[99,87464,51288],{"class":109},[99,87466,87467,87469,87471,87473,87475,87477],{"class":101,"line":1186},[99,87468,52125],{"class":109},[99,87470,51325],{"class":51281},[99,87472,51328],{"class":1949},[99,87474,155],{"class":109},[99,87476,51333],{"class":214},[99,87478,51288],{"class":109},[99,87480,87481,87483,87485,87487,87489,87491,87493,87495,87497],{"class":101,"line":1200},[99,87482,52125],{"class":109},[99,87484,51325],{"class":51281},[99,87486,14907],{"class":1949},[99,87488,155],{"class":109},[99,87490,51372],{"class":214},[99,87492,51352],{"class":1949},[99,87494,155],{"class":109},[99,87496,51379],{"class":214},[99,87498,51288],{"class":109},[99,87500,87501,87503,87505,87507,87509],{"class":101,"line":1206},[99,87502,52125],{"class":109},[99,87504,51388],{"class":51281},[99,87506,51391],{"class":109},[99,87508,51388],{"class":51281},[99,87510,51288],{"class":109},[99,87512,87513,87515,87517],{"class":101,"line":1297},[99,87514,51766],{"class":109},[99,87516,51315],{"class":51281},[99,87518,51288],{"class":109},[99,87520,87521],{"class":101,"line":1303},[99,87522,2386],{"emptyLinePlaceholder":26},[99,87524,87525,87527,87529],{"class":101,"line":1315},[99,87526,1020],{"class":109},[99,87528,51781],{"class":51281},[99,87530,51288],{"class":109},[99,87532,87533,87535,87537,87539,87541],{"class":101,"line":1598},[99,87534,52125],{"class":109},[99,87536,51592],{"class":51281},[99,87538,55295],{"class":109},[99,87540,51592],{"class":51281},[99,87542,51288],{"class":109},[99,87544,87545,87547,87549],{"class":101,"line":1603},[99,87546,52125],{"class":109},[99,87548,51794],{"class":51281},[99,87550,51288],{"class":109},[99,87552,87553,87555,87557],{"class":101,"line":1609},[99,87554,70065],{"class":105},[99,87556,73754],{"class":1949},[99,87558,10840],{"class":109},[99,87560,87561,87563,87565,87567,87569,87571,87573,87575,87577,87579,87582],{"class":101,"line":1614},[99,87562,55752],{"class":109},[99,87564,54380],{"class":1949},[99,87566,110],{"class":109},[99,87568,81912],{"class":214},[99,87570,74230],{"class":109},[99,87572,155],{"class":105},[99,87574,11565],{"class":105},[99,87576,73770],{"class":1949},[99,87578,17248],{"class":109},[99,87580,87581],{"class":1949},"toLocaleString",[99,87583,1962],{"class":109},[99,87585,87586,87589,87592,87594],{"class":101,"line":1628},[99,87587,87588],{"class":1949},"      setTimeout",[99,87590,87591],{"class":109},"(getTime, ",[99,87593,6397],{"class":158},[99,87595,116],{"class":109},[99,87597,87598],{"class":101,"line":1633},[99,87599,2173],{"class":109},[99,87601,87602,87605],{"class":101,"line":1639},[99,87603,87604],{"class":1949},"    getTime",[99,87606,1962],{"class":109},[99,87608,87609,87611,87613],{"class":101,"line":1660},[99,87610,52398],{"class":109},[99,87612,51794],{"class":51281},[99,87614,51288],{"class":109},[99,87616,87617,87619,87621],{"class":101,"line":1665},[99,87618,51766],{"class":109},[99,87620,51781],{"class":51281},[99,87622,51288],{"class":109},[99,87624,87625],{"class":101,"line":1679},[99,87626,2386],{"emptyLinePlaceholder":26},[99,87628,87629,87631,87633],{"class":101,"line":1684},[99,87630,51766],{"class":109},[99,87632,50616],{"class":51281},[99,87634,51288],{"class":109},[14,87636,87637],{},[1448,87638],{"alt":21,"src":87639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[53,87641,87642],{"start":1180},[56,87643,87333],{},[14,87645,87646],{},[1448,87647],{"alt":21,"src":87648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87650,87651],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87653,39170],{},[14,87655,87656],{},"这个是简易版的递归函数深拷贝",[14,87658,87659],{},"一定要注意先数组再对象，因为万物皆可对象",[90,87661,87663],{"className":50614,"code":87662,"language":50616,"meta":21,"style":21},"\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",[96,87664,87665,87675,87689,87693,87701,87715,87735,87747,87755,87759,87767,87775,87785,87794,87802,87818,87822,87830,87834,87838,87850,87855,87874,87890,87895,87900,87905,87920,87925,87930,87939,87947,87964,87972,87978,87986,87991,87996,88005,88009,88013,88017,88028,88037,88047,88061,88071,88079,88087,88095,88099],{"__ignoreMap":21},[99,87666,87667,87669,87671,87673],{"class":101,"line":102},[99,87668,51278],{"class":109},[99,87670,51282],{"class":51281},[99,87672,51285],{"class":1949},[99,87674,51288],{"class":109},[99,87676,87677,87679,87681,87683,87685,87687],{"class":101,"line":22},[99,87678,1020],{"class":109},[99,87680,50616],{"class":51281},[99,87682,51297],{"class":1949},[99,87684,155],{"class":109},[99,87686,51302],{"class":214},[99,87688,51288],{"class":109},[99,87690,87691],{"class":101,"line":1165},[99,87692,2386],{"emptyLinePlaceholder":26},[99,87694,87695,87697,87699],{"class":101,"line":1180},[99,87696,1020],{"class":109},[99,87698,51315],{"class":51281},[99,87700,51288],{"class":109},[99,87702,87703,87705,87707,87709,87711,87713],{"class":101,"line":1186},[99,87704,52125],{"class":109},[99,87706,51325],{"class":51281},[99,87708,51328],{"class":1949},[99,87710,155],{"class":109},[99,87712,51333],{"class":214},[99,87714,51288],{"class":109},[99,87716,87717,87719,87721,87723,87725,87727,87729,87731,87733],{"class":101,"line":1200},[99,87718,52125],{"class":109},[99,87720,51325],{"class":51281},[99,87722,14907],{"class":1949},[99,87724,155],{"class":109},[99,87726,51372],{"class":214},[99,87728,51352],{"class":1949},[99,87730,155],{"class":109},[99,87732,51379],{"class":214},[99,87734,51288],{"class":109},[99,87736,87737,87739,87741,87743,87745],{"class":101,"line":1206},[99,87738,52125],{"class":109},[99,87740,51388],{"class":51281},[99,87742,51391],{"class":109},[99,87744,51388],{"class":51281},[99,87746,51288],{"class":109},[99,87748,87749,87751,87753],{"class":101,"line":1297},[99,87750,51766],{"class":109},[99,87752,51315],{"class":51281},[99,87754,51288],{"class":109},[99,87756,87757],{"class":101,"line":1303},[99,87758,2386],{"emptyLinePlaceholder":26},[99,87760,87761,87763,87765],{"class":101,"line":1315},[99,87762,1020],{"class":109},[99,87764,51781],{"class":51281},[99,87766,51288],{"class":109},[99,87768,87769,87771,87773],{"class":101,"line":1598},[99,87770,52125],{"class":109},[99,87772,51794],{"class":51281},[99,87774,51288],{"class":109},[99,87776,87777,87779,87781,87783],{"class":101,"line":1603},[99,87778,11208],{"class":105},[99,87780,69952],{"class":158},[99,87782,13551],{"class":105},[99,87784,15559],{"class":109},[99,87786,87787,87789,87792],{"class":101,"line":1609},[99,87788,71597],{"class":109},[99,87790,87791],{"class":214},"'pink'",[99,87793,31447],{"class":109},[99,87795,87796,87798,87800],{"class":101,"line":1614},[99,87797,71607],{"class":109},[99,87799,760],{"class":158},[99,87801,31447],{"class":109},[99,87803,87804,87807,87810,87812,87815],{"class":101,"line":1628},[99,87805,87806],{"class":109},"      hobby: [",[99,87808,87809],{"class":214},"'乒乓球'",[99,87811,12422],{"class":109},[99,87813,87814],{"class":214},"'足球'",[99,87816,87817],{"class":109},"],\n",[99,87819,87820],{"class":101,"line":1633},[99,87821,77853],{"class":109},[99,87823,87824,87827],{"class":101,"line":1639},[99,87825,87826],{"class":109},"        baby: ",[99,87828,87829],{"class":214},"'小pink'\n",[99,87831,87832],{"class":101,"line":1660},[99,87833,52379],{"class":109},[99,87835,87836],{"class":101,"line":1665},[99,87837,2173],{"class":109},[99,87839,87840,87842,87845,87847],{"class":101,"line":1679},[99,87841,11208],{"class":105},[99,87843,87844],{"class":158}," o",[99,87846,13551],{"class":105},[99,87848,87849],{"class":109}," {}\n",[99,87851,87852],{"class":101,"line":1684},[99,87853,87854],{"class":168},"    \u002F\u002F 拷贝函数\n",[99,87856,87857,87859,87862,87864,87867,87869,87872],{"class":101,"line":1713},[99,87858,70065],{"class":105},[99,87860,87861],{"class":1949}," deepCopy",[99,87863,110],{"class":109},[99,87865,87866],{"class":5203},"newObj",[99,87868,12422],{"class":109},[99,87870,87871],{"class":5203},"oldObj",[99,87873,12429],{"class":109},[99,87875,87876,87878,87880,87882,87885,87887],{"class":101,"line":1718},[99,87877,52265],{"class":105},[99,87879,1644],{"class":109},[99,87881,51828],{"class":105},[99,87883,87884],{"class":109}," k ",[99,87886,26032],{"class":105},[99,87888,87889],{"class":109}," oldObj) {\n",[99,87891,87892],{"class":101,"line":1735},[99,87893,87894],{"class":168},"        \u002F\u002F 处理数组的问题\n",[99,87896,87897],{"class":101,"line":1740},[99,87898,87899],{"class":168},"        \u002F\u002F 判断是否属于数组\n",[99,87901,87902],{"class":101,"line":1745},[99,87903,87904],{"class":168},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[99,87906,87907,87909,87912,87915,87918],{"class":101,"line":1750},[99,87908,2483],{"class":105},[99,87910,87911],{"class":109}," (oldObj[k] ",[99,87913,87914],{"class":105},"instanceof",[99,87916,87917],{"class":1949}," Array",[99,87919,12429],{"class":109},[99,87921,87922],{"class":101,"line":1764},[99,87923,87924],{"class":168},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[99,87926,87927],{"class":101,"line":1769},[99,87928,87929],{"class":168},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[99,87931,87932,87935,87937],{"class":101,"line":2563},[99,87933,87934],{"class":109},"          newObj[k] ",[99,87936,155],{"class":105},[99,87938,51819],{"class":109},[99,87940,87941,87944],{"class":101,"line":2577},[99,87942,87943],{"class":1949},"          deepCopy",[99,87945,87946],{"class":109},"(newObj[k], oldObj[k])\n",[99,87948,87949,87951,87953,87955,87957,87959,87962],{"class":101,"line":2585},[99,87950,80061],{"class":109},[99,87952,1687],{"class":105},[99,87954,1690],{"class":105},[99,87956,87911],{"class":109},[99,87958,87914],{"class":105},[99,87960,87961],{"class":1949}," Object",[99,87963,12429],{"class":109},[99,87965,87966,87968,87970],{"class":101,"line":2590},[99,87967,87934],{"class":109},[99,87969,155],{"class":105},[99,87971,87849],{"class":109},[99,87973,87974,87976],{"class":101,"line":2596},[99,87975,87943],{"class":1949},[99,87977,87946],{"class":109},[99,87979,87980,87982,87984],{"class":101,"line":2602},[99,87981,80061],{"class":109},[99,87983,1687],{"class":105},[99,87985,15559],{"class":109},[99,87987,87988],{"class":101,"line":2607},[99,87989,87990],{"class":168},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[99,87992,87993],{"class":101,"line":7935},[99,87994,87995],{"class":168},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[99,87997,87998,88000,88002],{"class":101,"line":7959},[99,87999,87934],{"class":109},[99,88001,155],{"class":105},[99,88003,88004],{"class":109}," oldObj[k]\n",[99,88006,88007],{"class":101,"line":7964},[99,88008,2515],{"class":109},[99,88010,88011],{"class":101,"line":7970},[99,88012,52379],{"class":109},[99,88014,88015],{"class":101,"line":7997},[99,88016,2173],{"class":109},[99,88018,88019,88022,88025],{"class":101,"line":8002},[99,88020,88021],{"class":1949},"    deepCopy",[99,88023,88024],{"class":109},"(o, obj) ",[99,88026,88027],{"class":168},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[99,88029,88030,88032,88034],{"class":101,"line":8008},[99,88031,73734],{"class":109},[99,88033,58228],{"class":1949},[99,88035,88036],{"class":109},"(o)\n",[99,88038,88039,88042,88044],{"class":101,"line":8020},[99,88040,88041],{"class":109},"    o.age ",[99,88043,155],{"class":105},[99,88045,88046],{"class":158}," 20\n",[99,88048,88049,88052,88054,88056,88058],{"class":101,"line":8032},[99,88050,88051],{"class":109},"    o.hobby[",[99,88053,301],{"class":158},[99,88055,4429],{"class":109},[99,88057,155],{"class":105},[99,88059,88060],{"class":214}," '篮球'\n",[99,88062,88063,88066,88068],{"class":101,"line":8044},[99,88064,88065],{"class":109},"    o.family ",[99,88067,155],{"class":105},[99,88069,88070],{"class":214}," '老pink'\n",[99,88072,88073,88075,88077],{"class":101,"line":9703},[99,88074,73734],{"class":109},[99,88076,58228],{"class":1949},[99,88078,70017],{"class":109},[99,88080,88081,88083,88085],{"class":101,"line":9728},[99,88082,52398],{"class":109},[99,88084,51794],{"class":51281},[99,88086,51288],{"class":109},[99,88088,88089,88091,88093],{"class":101,"line":9751},[99,88090,51766],{"class":109},[99,88092,51781],{"class":51281},[99,88094,51288],{"class":109},[99,88096,88097],{"class":101,"line":9775},[99,88098,2386],{"emptyLinePlaceholder":26},[99,88100,88101,88103,88105],{"class":101,"line":9780},[99,88102,51766],{"class":109},[99,88104,50616],{"class":51281},[99,88106,51288],{"class":109},[14,88108,88109],{},[1448,88110],{"alt":21,"src":88111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21985,88113,88115,88116],{"id":88114},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[259,88117,88118],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88120,88121],{},[348,88122,88123],{"href":88123,"rel":88124},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23853],[14,88126,88127],{},"lodash里边的方法都要加上一个下划线_",[14,88129,88130],{},"_.cloneDeep()",[90,88132,88134],{"className":50614,"code":88133,"language":50616,"meta":21,"style":21},"\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",[96,88135,88136,88146,88160,88164,88172,88186,88206,88218,88226,88230,88238,88243,88262,88270,88280,88288,88296,88308,88312,88318,88322,88326,88342,88350,88359,88367,88375,88383,88387],{"__ignoreMap":21},[99,88137,88138,88140,88142,88144],{"class":101,"line":102},[99,88139,51278],{"class":109},[99,88141,51282],{"class":51281},[99,88143,51285],{"class":1949},[99,88145,51288],{"class":109},[99,88147,88148,88150,88152,88154,88156,88158],{"class":101,"line":22},[99,88149,1020],{"class":109},[99,88151,50616],{"class":51281},[99,88153,51297],{"class":1949},[99,88155,155],{"class":109},[99,88157,51302],{"class":214},[99,88159,51288],{"class":109},[99,88161,88162],{"class":101,"line":1165},[99,88163,2386],{"emptyLinePlaceholder":26},[99,88165,88166,88168,88170],{"class":101,"line":1180},[99,88167,1020],{"class":109},[99,88169,51315],{"class":51281},[99,88171,51288],{"class":109},[99,88173,88174,88176,88178,88180,88182,88184],{"class":101,"line":1186},[99,88175,52125],{"class":109},[99,88177,51325],{"class":51281},[99,88179,51328],{"class":1949},[99,88181,155],{"class":109},[99,88183,51333],{"class":214},[99,88185,51288],{"class":109},[99,88187,88188,88190,88192,88194,88196,88198,88200,88202,88204],{"class":101,"line":1200},[99,88189,52125],{"class":109},[99,88191,51325],{"class":51281},[99,88193,14907],{"class":1949},[99,88195,155],{"class":109},[99,88197,51372],{"class":214},[99,88199,51352],{"class":1949},[99,88201,155],{"class":109},[99,88203,51379],{"class":214},[99,88205,51288],{"class":109},[99,88207,88208,88210,88212,88214,88216],{"class":101,"line":1206},[99,88209,52125],{"class":109},[99,88211,51388],{"class":51281},[99,88213,51391],{"class":109},[99,88215,51388],{"class":51281},[99,88217,51288],{"class":109},[99,88219,88220,88222,88224],{"class":101,"line":1297},[99,88221,51766],{"class":109},[99,88223,51315],{"class":51281},[99,88225,51288],{"class":109},[99,88227,88228],{"class":101,"line":1303},[99,88229,2386],{"emptyLinePlaceholder":26},[99,88231,88232,88234,88236],{"class":101,"line":1315},[99,88233,1020],{"class":109},[99,88235,51781],{"class":51281},[99,88237,51288],{"class":109},[99,88239,88240],{"class":101,"line":1598},[99,88241,88242],{"class":168},"  \u003C!-- 先引用这个库 -->\n",[99,88244,88245,88247,88249,88251,88253,88256,88258,88260],{"class":101,"line":1603},[99,88246,52125],{"class":109},[99,88248,51794],{"class":51281},[99,88250,55220],{"class":1949},[99,88252,155],{"class":109},[99,88254,88255],{"class":214},"\"lodash.min.js\"",[99,88257,55295],{"class":109},[99,88259,51794],{"class":51281},[99,88261,51288],{"class":109},[99,88263,88264,88266,88268],{"class":101,"line":1609},[99,88265,52125],{"class":109},[99,88267,51794],{"class":51281},[99,88269,51288],{"class":109},[99,88271,88272,88274,88276,88278],{"class":101,"line":1614},[99,88273,11208],{"class":105},[99,88275,69952],{"class":158},[99,88277,13551],{"class":105},[99,88279,15559],{"class":109},[99,88281,88282,88284,88286],{"class":101,"line":1628},[99,88283,71597],{"class":109},[99,88285,87791],{"class":214},[99,88287,31447],{"class":109},[99,88289,88290,88292,88294],{"class":101,"line":1633},[99,88291,71607],{"class":109},[99,88293,760],{"class":158},[99,88295,31447],{"class":109},[99,88297,88298,88300,88302,88304,88306],{"class":101,"line":1639},[99,88299,87806],{"class":109},[99,88301,87809],{"class":214},[99,88303,12422],{"class":109},[99,88305,87814],{"class":214},[99,88307,87817],{"class":109},[99,88309,88310],{"class":101,"line":1660},[99,88311,77853],{"class":109},[99,88313,88314,88316],{"class":101,"line":1665},[99,88315,87826],{"class":109},[99,88317,87829],{"class":214},[99,88319,88320],{"class":101,"line":1679},[99,88321,52379],{"class":109},[99,88323,88324],{"class":101,"line":1684},[99,88325,2173],{"class":109},[99,88327,88328,88330,88332,88334,88337,88340],{"class":101,"line":1713},[99,88329,11208],{"class":105},[99,88331,87844],{"class":158},[99,88333,13551],{"class":105},[99,88335,88336],{"class":109}," _.",[99,88338,88339],{"class":1949},"cloneDeep",[99,88341,70017],{"class":109},[99,88343,88344,88346,88348],{"class":101,"line":1718},[99,88345,73734],{"class":109},[99,88347,58228],{"class":1949},[99,88349,88036],{"class":109},[99,88351,88352,88355,88357],{"class":101,"line":1735},[99,88353,88354],{"class":109},"    o.family.baby ",[99,88356,155],{"class":105},[99,88358,88070],{"class":214},[99,88360,88361,88363,88365],{"class":101,"line":1740},[99,88362,73734],{"class":109},[99,88364,58228],{"class":1949},[99,88366,70017],{"class":109},[99,88368,88369,88371,88373],{"class":101,"line":1745},[99,88370,52398],{"class":109},[99,88372,51794],{"class":51281},[99,88374,51288],{"class":109},[99,88376,88377,88379,88381],{"class":101,"line":1750},[99,88378,51766],{"class":109},[99,88380,51781],{"class":51281},[99,88382,51288],{"class":109},[99,88384,88385],{"class":101,"line":1764},[99,88386,2386],{"emptyLinePlaceholder":26},[99,88388,88389,88391,88393],{"class":101,"line":1769},[99,88390,51766],{"class":109},[99,88392,50616],{"class":51281},[99,88394,51288],{"class":109},[14,88396,88397],{},[1448,88398],{"alt":21,"src":88399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21985,88401,88403],{"id":88402},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[90,88405,88407],{"className":50614,"code":88406,"language":50616,"meta":21,"style":21},"\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",[96,88408,88409,88419,88433,88437,88445,88459,88479,88491,88499,88503,88511,88519,88529,88537,88545,88557,88561,88567,88571,88575,88580,88585,88590,88616,88624,88633,88641,88649,88657,88661],{"__ignoreMap":21},[99,88410,88411,88413,88415,88417],{"class":101,"line":102},[99,88412,51278],{"class":109},[99,88414,51282],{"class":51281},[99,88416,51285],{"class":1949},[99,88418,51288],{"class":109},[99,88420,88421,88423,88425,88427,88429,88431],{"class":101,"line":22},[99,88422,1020],{"class":109},[99,88424,50616],{"class":51281},[99,88426,51297],{"class":1949},[99,88428,155],{"class":109},[99,88430,51302],{"class":214},[99,88432,51288],{"class":109},[99,88434,88435],{"class":101,"line":1165},[99,88436,2386],{"emptyLinePlaceholder":26},[99,88438,88439,88441,88443],{"class":101,"line":1180},[99,88440,1020],{"class":109},[99,88442,51315],{"class":51281},[99,88444,51288],{"class":109},[99,88446,88447,88449,88451,88453,88455,88457],{"class":101,"line":1186},[99,88448,52125],{"class":109},[99,88450,51325],{"class":51281},[99,88452,51328],{"class":1949},[99,88454,155],{"class":109},[99,88456,51333],{"class":214},[99,88458,51288],{"class":109},[99,88460,88461,88463,88465,88467,88469,88471,88473,88475,88477],{"class":101,"line":1200},[99,88462,52125],{"class":109},[99,88464,51325],{"class":51281},[99,88466,14907],{"class":1949},[99,88468,155],{"class":109},[99,88470,51372],{"class":214},[99,88472,51352],{"class":1949},[99,88474,155],{"class":109},[99,88476,51379],{"class":214},[99,88478,51288],{"class":109},[99,88480,88481,88483,88485,88487,88489],{"class":101,"line":1206},[99,88482,52125],{"class":109},[99,88484,51388],{"class":51281},[99,88486,51391],{"class":109},[99,88488,51388],{"class":51281},[99,88490,51288],{"class":109},[99,88492,88493,88495,88497],{"class":101,"line":1297},[99,88494,51766],{"class":109},[99,88496,51315],{"class":51281},[99,88498,51288],{"class":109},[99,88500,88501],{"class":101,"line":1303},[99,88502,2386],{"emptyLinePlaceholder":26},[99,88504,88505,88507,88509],{"class":101,"line":1315},[99,88506,1020],{"class":109},[99,88508,51781],{"class":51281},[99,88510,51288],{"class":109},[99,88512,88513,88515,88517],{"class":101,"line":1598},[99,88514,52125],{"class":109},[99,88516,51794],{"class":51281},[99,88518,51288],{"class":109},[99,88520,88521,88523,88525,88527],{"class":101,"line":1603},[99,88522,11208],{"class":105},[99,88524,69952],{"class":158},[99,88526,13551],{"class":105},[99,88528,15559],{"class":109},[99,88530,88531,88533,88535],{"class":101,"line":1609},[99,88532,71597],{"class":109},[99,88534,87791],{"class":214},[99,88536,31447],{"class":109},[99,88538,88539,88541,88543],{"class":101,"line":1614},[99,88540,71607],{"class":109},[99,88542,760],{"class":158},[99,88544,31447],{"class":109},[99,88546,88547,88549,88551,88553,88555],{"class":101,"line":1628},[99,88548,87806],{"class":109},[99,88550,87809],{"class":214},[99,88552,12422],{"class":109},[99,88554,87814],{"class":214},[99,88556,87817],{"class":109},[99,88558,88559],{"class":101,"line":1633},[99,88560,77853],{"class":109},[99,88562,88563,88565],{"class":101,"line":1639},[99,88564,87826],{"class":109},[99,88566,87829],{"class":214},[99,88568,88569],{"class":101,"line":1660},[99,88570,52379],{"class":109},[99,88572,88573],{"class":101,"line":1665},[99,88574,2173],{"class":109},[99,88576,88577],{"class":101,"line":1679},[99,88578,88579],{"class":168},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[99,88581,88582],{"class":101,"line":1684},[99,88583,88584],{"class":168},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[99,88586,88587],{"class":101,"line":1713},[99,88588,88589],{"class":168},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[99,88591,88592,88594,88596,88598,88601,88603,88606,88608,88610,88612,88614],{"class":101,"line":1718},[99,88593,11208],{"class":105},[99,88595,87844],{"class":158},[99,88597,13551],{"class":105},[99,88599,88600],{"class":158}," JSON",[99,88602,668],{"class":109},[99,88604,88605],{"class":1949},"parse",[99,88607,110],{"class":109},[99,88609,71645],{"class":158},[99,88611,668],{"class":109},[99,88613,71650],{"class":1949},[99,88615,71653],{"class":109},[99,88617,88618,88620,88622],{"class":101,"line":1735},[99,88619,73734],{"class":109},[99,88621,58228],{"class":1949},[99,88623,88036],{"class":109},[99,88625,88626,88628,88630],{"class":101,"line":1740},[99,88627,88354],{"class":109},[99,88629,155],{"class":105},[99,88631,88632],{"class":214}," '123'\n",[99,88634,88635,88637,88639],{"class":101,"line":1745},[99,88636,73734],{"class":109},[99,88638,58228],{"class":1949},[99,88640,70017],{"class":109},[99,88642,88643,88645,88647],{"class":101,"line":1750},[99,88644,52398],{"class":109},[99,88646,51794],{"class":51281},[99,88648,51288],{"class":109},[99,88650,88651,88653,88655],{"class":101,"line":1764},[99,88652,51766],{"class":109},[99,88654,51781],{"class":51281},[99,88656,51288],{"class":109},[99,88658,88659],{"class":101,"line":1769},[99,88660,2386],{"emptyLinePlaceholder":26},[99,88662,88663,88665,88667],{"class":101,"line":2563},[99,88664,51766],{"class":109},[99,88666,50616],{"class":51281},[99,88668,51288],{"class":109},[14,88670,88671],{},[1448,88672],{"alt":21,"src":88673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[41,88675,88677],{"id":88676},"_415-异常处理","4.15 异常处理",[53,88679,88680],{},[56,88681,88682],{},"throw抛异常",[14,88684,88685],{},[1448,88686],{"alt":21,"src":88687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[53,88689,88690],{"start":22},[56,88691,88692],{},"try\u002Fcatch 捕获错误信息",[14,88694,88695],{},[1448,88696],{"alt":21,"src":88697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[90,88699,88701],{"className":50614,"code":88700,"language":50616,"meta":21,"style":21},"\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",[96,88702,88703,88713,88727,88731,88739,88753,88773,88785,88793,88797,88805,88817,88825,88834,88841,88846,88865,88874,88885,88890,88900,88905,88910,88915,88932,88936,88941,88948,88960,88964,88976,88980,88984,88989,88994,89001,89009,89017,89021],{"__ignoreMap":21},[99,88704,88705,88707,88709,88711],{"class":101,"line":102},[99,88706,51278],{"class":109},[99,88708,51282],{"class":51281},[99,88710,51285],{"class":1949},[99,88712,51288],{"class":109},[99,88714,88715,88717,88719,88721,88723,88725],{"class":101,"line":22},[99,88716,1020],{"class":109},[99,88718,50616],{"class":51281},[99,88720,51297],{"class":1949},[99,88722,155],{"class":109},[99,88724,51302],{"class":214},[99,88726,51288],{"class":109},[99,88728,88729],{"class":101,"line":1165},[99,88730,2386],{"emptyLinePlaceholder":26},[99,88732,88733,88735,88737],{"class":101,"line":1180},[99,88734,1020],{"class":109},[99,88736,51315],{"class":51281},[99,88738,51288],{"class":109},[99,88740,88741,88743,88745,88747,88749,88751],{"class":101,"line":1186},[99,88742,52125],{"class":109},[99,88744,51325],{"class":51281},[99,88746,51328],{"class":1949},[99,88748,155],{"class":109},[99,88750,51333],{"class":214},[99,88752,51288],{"class":109},[99,88754,88755,88757,88759,88761,88763,88765,88767,88769,88771],{"class":101,"line":1200},[99,88756,52125],{"class":109},[99,88758,51325],{"class":51281},[99,88760,14907],{"class":1949},[99,88762,155],{"class":109},[99,88764,51372],{"class":214},[99,88766,51352],{"class":1949},[99,88768,155],{"class":109},[99,88770,51379],{"class":214},[99,88772,51288],{"class":109},[99,88774,88775,88777,88779,88781,88783],{"class":101,"line":1206},[99,88776,52125],{"class":109},[99,88778,51388],{"class":51281},[99,88780,51391],{"class":109},[99,88782,51388],{"class":51281},[99,88784,51288],{"class":109},[99,88786,88787,88789,88791],{"class":101,"line":1297},[99,88788,51766],{"class":109},[99,88790,51315],{"class":51281},[99,88792,51288],{"class":109},[99,88794,88795],{"class":101,"line":1303},[99,88796,2386],{"emptyLinePlaceholder":26},[99,88798,88799,88801,88803],{"class":101,"line":1315},[99,88800,1020],{"class":109},[99,88802,51781],{"class":51281},[99,88804,51288],{"class":109},[99,88806,88807,88809,88811,88813,88815],{"class":101,"line":1598},[99,88808,52125],{"class":109},[99,88810,14],{"class":51281},[99,88812,53475],{"class":109},[99,88814,14],{"class":51281},[99,88816,51288],{"class":109},[99,88818,88819,88821,88823],{"class":101,"line":1603},[99,88820,52125],{"class":109},[99,88822,51794],{"class":51281},[99,88824,51288],{"class":109},[99,88826,88827,88829,88832],{"class":101,"line":1609},[99,88828,70065],{"class":105},[99,88830,88831],{"class":1949}," fn",[99,88833,10840],{"class":109},[99,88835,88836,88839],{"class":101,"line":1614},[99,88837,88838],{"class":105},"      try",[99,88840,15559],{"class":109},[99,88842,88843],{"class":101,"line":1628},[99,88844,88845],{"class":168},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[99,88847,88848,88850,88852,88854,88856,88858,88860,88863],{"class":101,"line":1633},[99,88849,61251],{"class":105},[99,88851,6812],{"class":158},[99,88853,13551],{"class":105},[99,88855,54377],{"class":109},[99,88857,54380],{"class":1949},[99,88859,110],{"class":109},[99,88861,88862],{"class":214},"'.p'",[99,88864,116],{"class":109},[99,88866,88867,88870,88872],{"class":101,"line":1639},[99,88868,88869],{"class":109},"        p.style.color ",[99,88871,155],{"class":105},[99,88873,67032],{"class":214},[99,88875,88876,88879,88882],{"class":101,"line":1660},[99,88877,88878],{"class":109},"      } ",[99,88880,88881],{"class":105},"catch",[99,88883,88884],{"class":109}," (err) {\n",[99,88886,88887],{"class":101,"line":1665},[99,88888,88889],{"class":168},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[99,88891,88892,88895,88897],{"class":101,"line":1679},[99,88893,88894],{"class":109},"        console.",[99,88896,58228],{"class":1949},[99,88898,88899],{"class":109},"(err.message)\n",[99,88901,88902],{"class":101,"line":1684},[99,88903,88904],{"class":168},"        \u002F\u002F 想要中断程序，需要加return\n",[99,88906,88907],{"class":101,"line":1713},[99,88908,88909],{"class":168},"        \u002F\u002F return\n",[99,88911,88912],{"class":101,"line":1718},[99,88913,88914],{"class":168},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[99,88916,88917,88920,88922,88925,88927,88930],{"class":101,"line":1735},[99,88918,88919],{"class":105},"        throw",[99,88921,11565],{"class":105},[99,88923,88924],{"class":1949}," Error",[99,88926,110],{"class":109},[99,88928,88929],{"class":214},"'你看看，选择器错误了吧'",[99,88931,116],{"class":109},[99,88933,88934],{"class":101,"line":1740},[99,88935,52379],{"class":109},[99,88937,88938],{"class":101,"line":1745},[99,88939,88940],{"class":168},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[99,88942,88943,88946],{"class":101,"line":1750},[99,88944,88945],{"class":105},"      finally",[99,88947,15559],{"class":109},[99,88949,88950,88953,88955,88958],{"class":101,"line":1764},[99,88951,88952],{"class":1949},"        alert",[99,88954,110],{"class":109},[99,88956,88957],{"class":214},"'弹出对话框'",[99,88959,116],{"class":109},[99,88961,88962],{"class":101,"line":1769},[99,88963,52379],{"class":109},[99,88965,88966,88968,88970,88972,88974],{"class":101,"line":2563},[99,88967,58225],{"class":109},[99,88969,58228],{"class":1949},[99,88971,110],{"class":109},[99,88973,582],{"class":158},[99,88975,116],{"class":109},[99,88977,88978],{"class":101,"line":2577},[99,88979,2386],{"emptyLinePlaceholder":26},[99,88981,88982],{"class":101,"line":2585},[99,88983,2173],{"class":109},[99,88985,88986],{"class":101,"line":2590},[99,88987,88988],{"class":168},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[99,88990,88991],{"class":101,"line":2596},[99,88992,88993],{"class":168},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[99,88995,88996,88999],{"class":101,"line":2602},[99,88997,88998],{"class":1949},"    fn",[99,89000,1962],{"class":109},[99,89002,89003,89005,89007],{"class":101,"line":2607},[99,89004,52398],{"class":109},[99,89006,51794],{"class":51281},[99,89008,51288],{"class":109},[99,89010,89011,89013,89015],{"class":101,"line":7935},[99,89012,51766],{"class":109},[99,89014,51781],{"class":51281},[99,89016,51288],{"class":109},[99,89018,89019],{"class":101,"line":7959},[99,89020,2386],{"emptyLinePlaceholder":26},[99,89022,89023,89025,89027],{"class":101,"line":7964},[99,89024,51766],{"class":109},[99,89026,50616],{"class":51281},[99,89028,51288],{"class":109},[14,89030,89031],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[53,89033,89034],{"start":1165},[56,89035,89036],{},"debugger",[14,89038,89039],{},[1448,89040],{"alt":21,"src":89041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89043,89044],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[41,89046,89048],{"id":89047},"_416-处理this","4.16 处理this",[70,89050,89052],{"id":89051},"_4161-this的指向","4.16.1 this的指向",[53,89054,89055],{},[56,89056,89057],{},"普通函数的this",[14,89059,89060],{},[1448,89061],{"alt":21,"src":89062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[53,89064,89065],{"start":22},[56,89066,89067],{},"箭头函数的this",[14,89069,89070],{},[1448,89071],{"alt":21,"src":89072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89074,89075],{},[1448,89076],{"alt":21,"src":89077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89079,89080],{},[1448,89081],{"alt":21,"src":89082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[70,89084,89086],{"id":89085},"_4162-this的改变","4.16.2 this的改变",[14,89088,89089],{},"call() apply() bind()",[53,89091,89092],{},[56,89093,89094],{},"call()",[14,89096,89097],{},[1448,89098],{"alt":21,"src":89099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89101,89102],{},"两个作用：①调用函数；②改变this指向",[90,89104,89106],{"className":53048,"code":89105,"language":53050,"meta":21,"style":21},"\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",[96,89107,89108,89116,89124,89128,89133,89137,89142,89147,89152,89156,89161,89169],{"__ignoreMap":21},[99,89109,89110,89112,89114],{"class":101,"line":102},[99,89111,1020],{"class":109},[99,89113,51781],{"class":51281},[99,89115,51288],{"class":109},[99,89117,89118,89120,89122],{"class":101,"line":22},[99,89119,52125],{"class":109},[99,89121,51794],{"class":51281},[99,89123,51288],{"class":109},[99,89125,89126],{"class":101,"line":1165},[99,89127,71504],{"class":109},[99,89129,89130],{"class":101,"line":1180},[99,89131,89132],{"class":109},"      uname: 'pink'\n",[99,89134,89135],{"class":101,"line":1186},[99,89136,2173],{"class":109},[99,89138,89139],{"class":101,"line":1200},[99,89140,89141],{"class":109},"    function fn(x, y) {\n",[99,89143,89144],{"class":101,"line":1206},[99,89145,89146],{"class":109},"      console.log(this)  \u002F\u002Fwindow\n",[99,89148,89149],{"class":101,"line":1297},[99,89150,89151],{"class":109},"      console.log(x + y)\n",[99,89153,89154],{"class":101,"line":1303},[99,89155,2173],{"class":109},[99,89157,89158],{"class":101,"line":1315},[99,89159,89160],{"class":109},"    fn.call(obj, 1, 2)\n",[99,89162,89163,89165,89167],{"class":101,"line":1598},[99,89164,52398],{"class":109},[99,89166,51794],{"class":51281},[99,89168,51288],{"class":109},[99,89170,89171,89173,89175],{"class":101,"line":1603},[99,89172,51766],{"class":109},[99,89174,51781],{"class":51281},[99,89176,51288],{"class":109},[14,89178,89179],{},[1448,89180],{"alt":21,"src":89181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[53,89183,89184],{"start":22},[56,89185,89186],{},"apply()",[14,89188,89189],{},[1448,89190],{"alt":21,"src":89191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89193,89102],{},[14,89195,89196],{},"call传递的是普通参数，而apply必须传递的是数组",[90,89198,89200],{"className":50614,"code":89199,"language":50616,"meta":21,"style":21},"\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",[96,89201,89202,89212,89226,89230,89238,89252,89272,89284,89292,89296,89304,89312,89322,89329,89333,89338,89354,89366,89380,89384,89389,89408,89413,89417,89422,89427,89435,89440,89462,89467,89483,89499,89511,89515,89520,89539,89547,89555,89559],{"__ignoreMap":21},[99,89203,89204,89206,89208,89210],{"class":101,"line":102},[99,89205,51278],{"class":109},[99,89207,51282],{"class":51281},[99,89209,51285],{"class":1949},[99,89211,51288],{"class":109},[99,89213,89214,89216,89218,89220,89222,89224],{"class":101,"line":22},[99,89215,1020],{"class":109},[99,89217,50616],{"class":51281},[99,89219,51297],{"class":1949},[99,89221,155],{"class":109},[99,89223,51302],{"class":214},[99,89225,51288],{"class":109},[99,89227,89228],{"class":101,"line":1165},[99,89229,2386],{"emptyLinePlaceholder":26},[99,89231,89232,89234,89236],{"class":101,"line":1180},[99,89233,1020],{"class":109},[99,89235,51315],{"class":51281},[99,89237,51288],{"class":109},[99,89239,89240,89242,89244,89246,89248,89250],{"class":101,"line":1186},[99,89241,52125],{"class":109},[99,89243,51325],{"class":51281},[99,89245,51328],{"class":1949},[99,89247,155],{"class":109},[99,89249,51333],{"class":214},[99,89251,51288],{"class":109},[99,89253,89254,89256,89258,89260,89262,89264,89266,89268,89270],{"class":101,"line":1200},[99,89255,52125],{"class":109},[99,89257,51325],{"class":51281},[99,89259,14907],{"class":1949},[99,89261,155],{"class":109},[99,89263,51372],{"class":214},[99,89265,51352],{"class":1949},[99,89267,155],{"class":109},[99,89269,51379],{"class":214},[99,89271,51288],{"class":109},[99,89273,89274,89276,89278,89280,89282],{"class":101,"line":1206},[99,89275,52125],{"class":109},[99,89277,51388],{"class":51281},[99,89279,51391],{"class":109},[99,89281,51388],{"class":51281},[99,89283,51288],{"class":109},[99,89285,89286,89288,89290],{"class":101,"line":1297},[99,89287,51766],{"class":109},[99,89289,51315],{"class":51281},[99,89291,51288],{"class":109},[99,89293,89294],{"class":101,"line":1303},[99,89295,2386],{"emptyLinePlaceholder":26},[99,89297,89298,89300,89302],{"class":101,"line":1315},[99,89299,1020],{"class":109},[99,89301,51781],{"class":51281},[99,89303,51288],{"class":109},[99,89305,89306,89308,89310],{"class":101,"line":1598},[99,89307,52125],{"class":109},[99,89309,51794],{"class":51281},[99,89311,51288],{"class":109},[99,89313,89314,89316,89318,89320],{"class":101,"line":1603},[99,89315,11208],{"class":105},[99,89317,69952],{"class":158},[99,89319,13551],{"class":105},[99,89321,15559],{"class":109},[99,89323,89324,89326],{"class":101,"line":1609},[99,89325,71607],{"class":109},[99,89327,89328],{"class":158},"18\n",[99,89330,89331],{"class":101,"line":1614},[99,89332,2173],{"class":109},[99,89334,89335],{"class":101,"line":1628},[99,89336,89337],{"class":168},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[99,89339,89340,89342,89344,89346,89348,89350,89352],{"class":101,"line":1633},[99,89341,70065],{"class":105},[99,89343,88831],{"class":1949},[99,89345,110],{"class":109},[99,89347,930],{"class":5203},[99,89349,12422],{"class":109},[99,89351,955],{"class":5203},[99,89353,12429],{"class":109},[99,89355,89356,89358,89360,89362,89364],{"class":101,"line":1639},[99,89357,58225],{"class":109},[99,89359,58228],{"class":1949},[99,89361,110],{"class":109},[99,89363,86974],{"class":158},[99,89365,116],{"class":109},[99,89367,89368,89370,89372,89375,89377],{"class":101,"line":1660},[99,89369,58225],{"class":109},[99,89371,58228],{"class":1949},[99,89373,89374],{"class":109},"(x ",[99,89376,591],{"class":105},[99,89378,89379],{"class":109}," y)\n",[99,89381,89382],{"class":101,"line":1665},[99,89383,2173],{"class":109},[99,89385,89386],{"class":101,"line":1679},[99,89387,89388],{"class":168},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[99,89390,89391,89394,89397,89400,89402,89404,89406],{"class":101,"line":1684},[99,89392,89393],{"class":109},"    fn.",[99,89395,89396],{"class":1949},"apply",[99,89398,89399],{"class":109},"(obj, [",[99,89401,327],{"class":158},[99,89403,12422],{"class":109},[99,89405,187],{"class":158},[99,89407,4643],{"class":109},[99,89409,89410],{"class":101,"line":1713},[99,89411,89412],{"class":168},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[99,89414,89415],{"class":101,"line":1718},[99,89416,2386],{"emptyLinePlaceholder":26},[99,89418,89419],{"class":101,"line":1735},[99,89420,89421],{"class":168},"    \u002F\u002F 使用场景：求数组最大值\n",[99,89423,89424],{"class":101,"line":1740},[99,89425,89426],{"class":168},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[99,89428,89429,89432],{"class":101,"line":1745},[99,89430,89431],{"class":168},"    \u002F\u002F console.log(max)",[99,89433,89434],{"class":168},"   \u002F\u002F3\n",[99,89436,89437],{"class":101,"line":1750},[99,89438,89439],{"class":168},"    \u002F\u002F 指向空或者Math都是可以的\n",[99,89441,89442,89444,89446,89448,89450,89452,89454,89456,89458,89460],{"class":101,"line":1764},[99,89443,11208],{"class":105},[99,89445,57676],{"class":158},[99,89447,13551],{"class":105},[99,89449,52207],{"class":109},[99,89451,421],{"class":158},[99,89453,12422],{"class":109},[99,89455,614],{"class":158},[99,89457,12422],{"class":109},[99,89459,645],{"class":158},[99,89461,33227],{"class":109},[99,89463,89464],{"class":101,"line":1769},[99,89465,89466],{"class":168},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[99,89468,89469,89471,89473,89475,89478,89480],{"class":101,"line":2563},[99,89470,11208],{"class":105},[99,89472,5938],{"class":158},[99,89474,13551],{"class":105},[99,89476,89477],{"class":109}," Math.max.",[99,89479,89396],{"class":1949},[99,89481,89482],{"class":109},"(Math, arr)\n",[99,89484,89485,89487,89490,89492,89495,89497],{"class":101,"line":2577},[99,89486,11208],{"class":105},[99,89488,89489],{"class":158}," min",[99,89491,13551],{"class":105},[99,89493,89494],{"class":109}," Math.min.",[99,89496,89396],{"class":1949},[99,89498,89482],{"class":109},[99,89500,89501,89503,89505,89508],{"class":101,"line":2585},[99,89502,73734],{"class":109},[99,89504,58228],{"class":1949},[99,89506,89507],{"class":109},"(max, min)     ",[99,89509,89510],{"class":168},"\u002F\u002F100,4\n",[99,89512,89513],{"class":101,"line":2590},[99,89514,2386],{"emptyLinePlaceholder":26},[99,89516,89517],{"class":101,"line":2596},[99,89518,89519],{"class":168},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[99,89521,89522,89524,89526,89529,89531,89533,89536],{"class":101,"line":2602},[99,89523,73734],{"class":109},[99,89525,58228],{"class":1949},[99,89527,89528],{"class":109},"(Max.",[99,89530,6002],{"class":1949},[99,89532,110],{"class":109},[99,89534,89535],{"class":105},"...",[99,89537,89538],{"class":109},"arr))\n",[99,89540,89541,89543,89545],{"class":101,"line":2607},[99,89542,52398],{"class":109},[99,89544,51794],{"class":51281},[99,89546,51288],{"class":109},[99,89548,89549,89551,89553],{"class":101,"line":7935},[99,89550,51766],{"class":109},[99,89552,51781],{"class":51281},[99,89554,51288],{"class":109},[99,89556,89557],{"class":101,"line":7959},[99,89558,2386],{"emptyLinePlaceholder":26},[99,89560,89561,89563,89565],{"class":101,"line":7964},[99,89562,51766],{"class":109},[99,89564,50616],{"class":51281},[99,89566,51288],{"class":109},[14,89568,89569],{},[1448,89570],{"alt":21,"src":89571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[53,89573,89574],{"start":1165},[56,89575,89576],{},"bind()",[14,89578,89579],{},[1448,89580],{"alt":21,"src":89581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89583,89584],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89586,89587],{},"bind的语法跟call很相似",[90,89589,89591],{"className":53048,"code":89590,"language":53050,"meta":21,"style":21},"\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",[96,89592,89593,89601,89609,89613,89618,89622,89626,89631,89635,89640,89645,89650,89655,89660,89665,89670,89674,89682],{"__ignoreMap":21},[99,89594,89595,89597,89599],{"class":101,"line":102},[99,89596,1020],{"class":109},[99,89598,51781],{"class":51281},[99,89600,51288],{"class":109},[99,89602,89603,89605,89607],{"class":101,"line":22},[99,89604,52125],{"class":109},[99,89606,51794],{"class":51281},[99,89608,51288],{"class":109},[99,89610,89611],{"class":101,"line":1165},[99,89612,71504],{"class":109},[99,89614,89615],{"class":101,"line":1180},[99,89616,89617],{"class":109},"      age: 18\n",[99,89619,89620],{"class":101,"line":1186},[99,89621,2173],{"class":109},[99,89623,89624],{"class":101,"line":1200},[99,89625,77124],{"class":109},[99,89627,89628],{"class":101,"line":1206},[99,89629,89630],{"class":109},"      console.log(this)\n",[99,89632,89633],{"class":101,"line":1297},[99,89634,2173],{"class":109},[99,89636,89637],{"class":101,"line":1303},[99,89638,89639],{"class":109},"    \u002F\u002F 1.bind 不会调用函数\n",[99,89641,89642],{"class":101,"line":1315},[99,89643,89644],{"class":109},"    \u002F\u002F 2.bind能改变this的指向\n",[99,89646,89647],{"class":101,"line":1598},[99,89648,89649],{"class":109},"    fn.bind()\n",[99,89651,89652],{"class":101,"line":1603},[99,89653,89654],{"class":109},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[99,89656,89657],{"class":101,"line":1609},[99,89658,89659],{"class":109},"    const fun = fn.bind(obj)\n",[99,89661,89662],{"class":101,"line":1614},[99,89663,89664],{"class":109},"    \u002F\u002F console.log(fun)\n",[99,89666,89667],{"class":101,"line":1628},[99,89668,89669],{"class":109},"    \u002F\u002F 调用,查看this的指向\n",[99,89671,89672],{"class":101,"line":1633},[99,89673,52632],{"class":109},[99,89675,89676,89678,89680],{"class":101,"line":1639},[99,89677,52398],{"class":109},[99,89679,51794],{"class":51281},[99,89681,51288],{"class":109},[99,89683,89684,89686,89688],{"class":101,"line":1660},[99,89685,51766],{"class":109},[99,89687,51781],{"class":51281},[99,89689,51288],{"class":109},[14,89691,89692],{},[1448,89693],{"alt":21,"src":89694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[53,89696,89697],{"start":1180},[56,89698,89699],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[90,89701,89703],{"className":53048,"code":89702,"language":53050,"meta":21,"style":21},"\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",[96,89704,89705,89713,89726,89734,89739,89743,89748,89753,89758,89763,89768,89773,89778,89783,89787,89795],{"__ignoreMap":21},[99,89706,89707,89709,89711],{"class":101,"line":102},[99,89708,1020],{"class":109},[99,89710,51781],{"class":51281},[99,89712,51288],{"class":109},[99,89714,89715,89717,89719,89722,89724],{"class":101,"line":22},[99,89716,52125],{"class":109},[99,89718,53868],{"class":51281},[99,89720,89721],{"class":109},">禁用\u003C\u002F",[99,89723,53868],{"class":51281},[99,89725,51288],{"class":109},[99,89727,89728,89730,89732],{"class":101,"line":1165},[99,89729,52125],{"class":109},[99,89731,51794],{"class":51281},[99,89733,51288],{"class":109},[99,89735,89736],{"class":101,"line":1180},[99,89737,89738],{"class":109},"    const btn = document.querySelector('button')\n",[99,89740,89741],{"class":101,"line":1186},[99,89742,58997],{"class":109},[99,89744,89745],{"class":101,"line":1200},[99,89746,89747],{"class":109},"      this.disabled = true\n",[99,89749,89750],{"class":101,"line":1206},[99,89751,89752],{"class":109},"      \u002F\u002F 定时器是window进行调用的\n",[99,89754,89755],{"class":101,"line":1297},[99,89756,89757],{"class":109},"      setTimeout(function () {\n",[99,89759,89760],{"class":101,"line":1303},[99,89761,89762],{"class":109},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[99,89764,89765],{"class":101,"line":1315},[99,89766,89767],{"class":109},"        this.disabled = false\n",[99,89769,89770],{"class":101,"line":1598},[99,89771,89772],{"class":109},"      }.bind(this), 2000)\n",[99,89774,89775],{"class":101,"line":1603},[99,89776,89777],{"class":109},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[99,89779,89780],{"class":101,"line":1609},[99,89781,89782],{"class":109},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[99,89784,89785],{"class":101,"line":1614},[99,89786,33442],{"class":109},[99,89788,89789,89791,89793],{"class":101,"line":1628},[99,89790,52398],{"class":109},[99,89792,51794],{"class":51281},[99,89794,51288],{"class":109},[99,89796,89797,89799,89801],{"class":101,"line":1633},[99,89798,51766],{"class":109},[99,89800,51781],{"class":51281},[99,89802,51288],{"class":109},[53,89804,89805],{"start":1186},[56,89806,21940],{},[14,89808,89809],{},[1448,89810],{"alt":21,"src":89811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[41,89813,89815],{"id":89814},"_417-性能优化","4.17 性能优化",[70,89817,89819],{"id":89818},"_4171-防抖","4.17.1 防抖",[14,89821,89822],{},[1448,89823],{"alt":21,"src":89824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89826,89827],{},[259,89828,89829],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89831,89832],{},"防抖实现方式：",[1117,89834,89835],{},[56,89836,89837],{},"lodash 提供了防抖处理",[14,89839,89840],{},"_.debounce(func,[wait=0],[options={}])",[14,89842,89843],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[90,89845,89847],{"className":50614,"code":89846,"language":50616,"meta":21,"style":21},"\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",[96,89848,89849,89859,89873,89877,89885,89899,89919,89931,89939,89945,89955,89967,89979,89990,90002,90012,90022,90035,90039,90047,90055,90059,90067,90085,90103,90111,90130,90140,90149,90160,90165,90169,90174,90179,90184,90209,90217,90225,90229],{"__ignoreMap":21},[99,89850,89851,89853,89855,89857],{"class":101,"line":102},[99,89852,51278],{"class":109},[99,89854,51282],{"class":51281},[99,89856,51285],{"class":1949},[99,89858,51288],{"class":109},[99,89860,89861,89863,89865,89867,89869,89871],{"class":101,"line":22},[99,89862,1020],{"class":109},[99,89864,50616],{"class":51281},[99,89866,51297],{"class":1949},[99,89868,155],{"class":109},[99,89870,51302],{"class":214},[99,89872,51288],{"class":109},[99,89874,89875],{"class":101,"line":1165},[99,89876,2386],{"emptyLinePlaceholder":26},[99,89878,89879,89881,89883],{"class":101,"line":1180},[99,89880,1020],{"class":109},[99,89882,51315],{"class":51281},[99,89884,51288],{"class":109},[99,89886,89887,89889,89891,89893,89895,89897],{"class":101,"line":1186},[99,89888,52125],{"class":109},[99,89890,51325],{"class":51281},[99,89892,51328],{"class":1949},[99,89894,155],{"class":109},[99,89896,51333],{"class":214},[99,89898,51288],{"class":109},[99,89900,89901,89903,89905,89907,89909,89911,89913,89915,89917],{"class":101,"line":1200},[99,89902,52125],{"class":109},[99,89904,51325],{"class":51281},[99,89906,14907],{"class":1949},[99,89908,155],{"class":109},[99,89910,51372],{"class":214},[99,89912,51352],{"class":1949},[99,89914,155],{"class":109},[99,89916,51379],{"class":214},[99,89918,51288],{"class":109},[99,89920,89921,89923,89925,89927,89929],{"class":101,"line":1206},[99,89922,52125],{"class":109},[99,89924,51388],{"class":51281},[99,89926,51391],{"class":109},[99,89928,51388],{"class":51281},[99,89930,51288],{"class":109},[99,89932,89933,89935,89937],{"class":101,"line":1297},[99,89934,52125],{"class":109},[99,89936,5113],{"class":51281},[99,89938,51288],{"class":109},[99,89940,89941,89943],{"class":101,"line":1303},[99,89942,54733],{"class":1949},[99,89944,15559],{"class":109},[99,89946,89947,89949,89951,89953],{"class":101,"line":1315},[99,89948,72577],{"class":158},[99,89950,51418],{"class":109},[99,89952,60486],{"class":158},[99,89954,1276],{"class":109},[99,89956,89957,89959,89961,89963,89965],{"class":101,"line":1598},[99,89958,54752],{"class":158},[99,89960,51418],{"class":109},[99,89962,1708],{"class":158},[99,89964,51473],{"class":105},[99,89966,1276],{"class":109},[99,89968,89969,89971,89973,89975,89977],{"class":101,"line":1603},[99,89970,54766],{"class":158},[99,89972,51418],{"class":109},[99,89974,1708],{"class":158},[99,89976,51473],{"class":105},[99,89978,1276],{"class":109},[99,89980,89981,89983,89985,89988],{"class":101,"line":1609},[99,89982,54865],{"class":158},[99,89984,51418],{"class":109},[99,89986,89987],{"class":158},"gray",[99,89989,1276],{"class":109},[99,89991,89992,89994,89996,89998,90000],{"class":101,"line":1614},[99,89993,54903],{"class":158},[99,89995,51418],{"class":109},[99,89997,935],{"class":158},[99,89999,51473],{"class":105},[99,90001,1276],{"class":109},[99,90003,90004,90006,90008,90010],{"class":101,"line":1628},[99,90005,57397],{"class":158},[99,90007,51418],{"class":109},[99,90009,60823],{"class":158},[99,90011,1276],{"class":109},[99,90013,90014,90016,90018,90020],{"class":101,"line":1633},[99,90015,57267],{"class":158},[99,90017,51418],{"class":109},[99,90019,51573],{"class":158},[99,90021,1276],{"class":109},[99,90023,90024,90027,90029,90031,90033],{"class":101,"line":1639},[99,90025,90026],{"class":158},"      padding-top",[99,90028,51418],{"class":109},[99,90030,429],{"class":158},[99,90032,51473],{"class":105},[99,90034,1276],{"class":109},[99,90036,90037],{"class":101,"line":1660},[99,90038,2173],{"class":109},[99,90040,90041,90043,90045],{"class":101,"line":1665},[99,90042,52398],{"class":109},[99,90044,5113],{"class":51281},[99,90046,51288],{"class":109},[99,90048,90049,90051,90053],{"class":101,"line":1679},[99,90050,51766],{"class":109},[99,90052,51315],{"class":51281},[99,90054,51288],{"class":109},[99,90056,90057],{"class":101,"line":1684},[99,90058,2386],{"emptyLinePlaceholder":26},[99,90060,90061,90063,90065],{"class":101,"line":1713},[99,90062,1020],{"class":109},[99,90064,51781],{"class":51281},[99,90066,51288],{"class":109},[99,90068,90069,90071,90073,90075,90077,90079,90081,90083],{"class":101,"line":1718},[99,90070,52125],{"class":109},[99,90072,51592],{"class":51281},[99,90074,53467],{"class":1949},[99,90076,155],{"class":109},[99,90078,53472],{"class":214},[99,90080,55295],{"class":109},[99,90082,51592],{"class":51281},[99,90084,51288],{"class":109},[99,90086,90087,90089,90091,90093,90095,90097,90099,90101],{"class":101,"line":1735},[99,90088,52125],{"class":109},[99,90090,51794],{"class":51281},[99,90092,55220],{"class":1949},[99,90094,155],{"class":109},[99,90096,88255],{"class":214},[99,90098,55295],{"class":109},[99,90100,51794],{"class":51281},[99,90102,51288],{"class":109},[99,90104,90105,90107,90109],{"class":101,"line":1740},[99,90106,52125],{"class":109},[99,90108,51794],{"class":51281},[99,90110,51288],{"class":109},[99,90112,90113,90115,90117,90119,90121,90123,90125,90128],{"class":101,"line":1745},[99,90114,11208],{"class":105},[99,90116,86914],{"class":158},[99,90118,13551],{"class":105},[99,90120,54377],{"class":109},[99,90122,54380],{"class":1949},[99,90124,110],{"class":109},[99,90126,90127],{"class":214},"'.box'",[99,90129,116],{"class":109},[99,90131,90132,90134,90136,90138],{"class":101,"line":1750},[99,90133,52200],{"class":105},[99,90135,9425],{"class":109},[99,90137,155],{"class":105},[99,90139,47314],{"class":158},[99,90141,90142,90144,90147],{"class":101,"line":1764},[99,90143,70065],{"class":105},[99,90145,90146],{"class":1949}," mouseMove",[99,90148,10840],{"class":109},[99,90150,90151,90154,90156,90158],{"class":101,"line":1769},[99,90152,90153],{"class":109},"      box.innerHTML ",[99,90155,155],{"class":105},[99,90157,3018],{"class":109},[99,90159,2688],{"class":105},[99,90161,90162],{"class":101,"line":2563},[99,90163,90164],{"class":168},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[99,90166,90167],{"class":101,"line":2577},[99,90168,2173],{"class":109},[99,90170,90171],{"class":101,"line":2585},[99,90172,90173],{"class":168},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[99,90175,90176],{"class":101,"line":2590},[99,90177,90178],{"class":168},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[99,90180,90181],{"class":101,"line":2596},[99,90182,90183],{"class":168},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[99,90185,90186,90189,90191,90193,90196,90199,90202,90205,90207],{"class":101,"line":2602},[99,90187,90188],{"class":109},"    box.",[99,90190,57794],{"class":1949},[99,90192,110],{"class":109},[99,90194,90195],{"class":214},"'mousemove'",[99,90197,90198],{"class":109},", _.",[99,90200,90201],{"class":1949},"debounce",[99,90203,90204],{"class":109},"(mouseMove, ",[99,90206,65055],{"class":158},[99,90208,30478],{"class":109},[99,90210,90211,90213,90215],{"class":101,"line":2607},[99,90212,52398],{"class":109},[99,90214,51794],{"class":51281},[99,90216,51288],{"class":109},[99,90218,90219,90221,90223],{"class":101,"line":7935},[99,90220,51766],{"class":109},[99,90222,51781],{"class":51281},[99,90224,51288],{"class":109},[99,90226,90227],{"class":101,"line":7959},[99,90228,2386],{"emptyLinePlaceholder":26},[99,90230,90231,90233,90235],{"class":101,"line":7964},[99,90232,51766],{"class":109},[99,90234,50616],{"class":51281},[99,90236,51288],{"class":109},[1117,90238,90239],{},[56,90240,90241],{},"手写一个防抖函数来处理",[14,90243,90244],{},"防抖的核心就是利用定时器来实现的：",[14,90246,90247],{},"①声明一个定时器变量",[14,90249,90250],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90252,90253],{},"③如果没有定时器则开启定时器，记得存到变量里面",[90,90255,90257],{"className":50614,"code":90256,"language":50616,"meta":21,"style":21},"\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",[96,90258,90259,90269,90283,90287,90295,90309,90329,90341,90349,90355,90365,90377,90389,90399,90411,90421,90431,90443,90447,90455,90463,90467,90475,90493,90511,90519,90537,90547,90555,90565,90569,90573,90577,90582,90587,90592,90597,90602,90607,90625,90632,90637,90645,90650,90663,90679,90689,90694,90698,90702,90722,90726,90731,90736,90741,90746,90754,90762,90766],{"__ignoreMap":21},[99,90260,90261,90263,90265,90267],{"class":101,"line":102},[99,90262,51278],{"class":109},[99,90264,51282],{"class":51281},[99,90266,51285],{"class":1949},[99,90268,51288],{"class":109},[99,90270,90271,90273,90275,90277,90279,90281],{"class":101,"line":22},[99,90272,1020],{"class":109},[99,90274,50616],{"class":51281},[99,90276,51297],{"class":1949},[99,90278,155],{"class":109},[99,90280,51302],{"class":214},[99,90282,51288],{"class":109},[99,90284,90285],{"class":101,"line":1165},[99,90286,2386],{"emptyLinePlaceholder":26},[99,90288,90289,90291,90293],{"class":101,"line":1180},[99,90290,1020],{"class":109},[99,90292,51315],{"class":51281},[99,90294,51288],{"class":109},[99,90296,90297,90299,90301,90303,90305,90307],{"class":101,"line":1186},[99,90298,52125],{"class":109},[99,90300,51325],{"class":51281},[99,90302,51328],{"class":1949},[99,90304,155],{"class":109},[99,90306,51333],{"class":214},[99,90308,51288],{"class":109},[99,90310,90311,90313,90315,90317,90319,90321,90323,90325,90327],{"class":101,"line":1200},[99,90312,52125],{"class":109},[99,90314,51325],{"class":51281},[99,90316,14907],{"class":1949},[99,90318,155],{"class":109},[99,90320,51372],{"class":214},[99,90322,51352],{"class":1949},[99,90324,155],{"class":109},[99,90326,51379],{"class":214},[99,90328,51288],{"class":109},[99,90330,90331,90333,90335,90337,90339],{"class":101,"line":1206},[99,90332,52125],{"class":109},[99,90334,51388],{"class":51281},[99,90336,51391],{"class":109},[99,90338,51388],{"class":51281},[99,90340,51288],{"class":109},[99,90342,90343,90345,90347],{"class":101,"line":1297},[99,90344,52125],{"class":109},[99,90346,5113],{"class":51281},[99,90348,51288],{"class":109},[99,90350,90351,90353],{"class":101,"line":1303},[99,90352,54733],{"class":1949},[99,90354,15559],{"class":109},[99,90356,90357,90359,90361,90363],{"class":101,"line":1315},[99,90358,72577],{"class":158},[99,90360,51418],{"class":109},[99,90362,60486],{"class":158},[99,90364,1276],{"class":109},[99,90366,90367,90369,90371,90373,90375],{"class":101,"line":1598},[99,90368,54752],{"class":158},[99,90370,51418],{"class":109},[99,90372,1708],{"class":158},[99,90374,51473],{"class":105},[99,90376,1276],{"class":109},[99,90378,90379,90381,90383,90385,90387],{"class":101,"line":1603},[99,90380,54766],{"class":158},[99,90382,51418],{"class":109},[99,90384,1708],{"class":158},[99,90386,51473],{"class":105},[99,90388,1276],{"class":109},[99,90390,90391,90393,90395,90397],{"class":101,"line":1609},[99,90392,54865],{"class":158},[99,90394,51418],{"class":109},[99,90396,89987],{"class":158},[99,90398,1276],{"class":109},[99,90400,90401,90403,90405,90407,90409],{"class":101,"line":1614},[99,90402,54903],{"class":158},[99,90404,51418],{"class":109},[99,90406,935],{"class":158},[99,90408,51473],{"class":105},[99,90410,1276],{"class":109},[99,90412,90413,90415,90417,90419],{"class":101,"line":1628},[99,90414,57397],{"class":158},[99,90416,51418],{"class":109},[99,90418,60823],{"class":158},[99,90420,1276],{"class":109},[99,90422,90423,90425,90427,90429],{"class":101,"line":1633},[99,90424,57267],{"class":158},[99,90426,51418],{"class":109},[99,90428,51573],{"class":158},[99,90430,1276],{"class":109},[99,90432,90433,90435,90437,90439,90441],{"class":101,"line":1639},[99,90434,90026],{"class":158},[99,90436,51418],{"class":109},[99,90438,429],{"class":158},[99,90440,51473],{"class":105},[99,90442,1276],{"class":109},[99,90444,90445],{"class":101,"line":1660},[99,90446,2173],{"class":109},[99,90448,90449,90451,90453],{"class":101,"line":1665},[99,90450,52398],{"class":109},[99,90452,5113],{"class":51281},[99,90454,51288],{"class":109},[99,90456,90457,90459,90461],{"class":101,"line":1679},[99,90458,51766],{"class":109},[99,90460,51315],{"class":51281},[99,90462,51288],{"class":109},[99,90464,90465],{"class":101,"line":1684},[99,90466,2386],{"emptyLinePlaceholder":26},[99,90468,90469,90471,90473],{"class":101,"line":1713},[99,90470,1020],{"class":109},[99,90472,51781],{"class":51281},[99,90474,51288],{"class":109},[99,90476,90477,90479,90481,90483,90485,90487,90489,90491],{"class":101,"line":1718},[99,90478,52125],{"class":109},[99,90480,51592],{"class":51281},[99,90482,53467],{"class":1949},[99,90484,155],{"class":109},[99,90486,53472],{"class":214},[99,90488,55295],{"class":109},[99,90490,51592],{"class":51281},[99,90492,51288],{"class":109},[99,90494,90495,90497,90499,90501,90503,90505,90507,90509],{"class":101,"line":1735},[99,90496,52125],{"class":109},[99,90498,51794],{"class":51281},[99,90500,55220],{"class":1949},[99,90502,155],{"class":109},[99,90504,88255],{"class":214},[99,90506,55295],{"class":109},[99,90508,51794],{"class":51281},[99,90510,51288],{"class":109},[99,90512,90513,90515,90517],{"class":101,"line":1740},[99,90514,52125],{"class":109},[99,90516,51794],{"class":51281},[99,90518,51288],{"class":109},[99,90520,90521,90523,90525,90527,90529,90531,90533,90535],{"class":101,"line":1745},[99,90522,11208],{"class":105},[99,90524,86914],{"class":158},[99,90526,13551],{"class":105},[99,90528,54377],{"class":109},[99,90530,54380],{"class":1949},[99,90532,110],{"class":109},[99,90534,90127],{"class":214},[99,90536,116],{"class":109},[99,90538,90539,90541,90543,90545],{"class":101,"line":1750},[99,90540,52200],{"class":105},[99,90542,9425],{"class":109},[99,90544,155],{"class":105},[99,90546,47314],{"class":158},[99,90548,90549,90551,90553],{"class":101,"line":1764},[99,90550,70065],{"class":105},[99,90552,90146],{"class":1949},[99,90554,10840],{"class":109},[99,90556,90557,90559,90561,90563],{"class":101,"line":1769},[99,90558,90153],{"class":109},[99,90560,155],{"class":105},[99,90562,3018],{"class":109},[99,90564,2688],{"class":105},[99,90566,90567],{"class":101,"line":2563},[99,90568,90164],{"class":168},[99,90570,90571],{"class":101,"line":2577},[99,90572,2173],{"class":109},[99,90574,90575],{"class":101,"line":2585},[99,90576,90173],{"class":168},[99,90578,90579],{"class":101,"line":2590},[99,90580,90581],{"class":168},"    \u002F\u002F 手写防抖函数\n",[99,90583,90584],{"class":101,"line":2596},[99,90585,90586],{"class":168},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[99,90588,90589],{"class":101,"line":2602},[99,90590,90591],{"class":168},"    \u002F\u002F 1.声明定时器变量\n",[99,90593,90594],{"class":101,"line":2607},[99,90595,90596],{"class":168},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[99,90598,90599],{"class":101,"line":7935},[99,90600,90601],{"class":168},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[99,90603,90604],{"class":101,"line":7959},[99,90605,90606],{"class":168},"    \u002F\u002F 4.定时器里面写函数调用\n",[99,90608,90609,90611,90614,90616,90619,90621,90623],{"class":101,"line":7964},[99,90610,70065],{"class":105},[99,90612,90613],{"class":1949}," debounce",[99,90615,110],{"class":109},[99,90617,90618],{"class":5203},"fn",[99,90620,12422],{"class":109},[99,90622,830],{"class":5203},[99,90624,12429],{"class":109},[99,90626,90627,90629],{"class":101,"line":7970},[99,90628,79753],{"class":105},[99,90630,90631],{"class":109}," timer\n",[99,90633,90634],{"class":101,"line":7997},[99,90635,90636],{"class":168},"      \u002F\u002F return 返回一个匿名函数\n",[99,90638,90639,90641,90643],{"class":101,"line":8002},[99,90640,73963],{"class":105},[99,90642,58899],{"class":105},[99,90644,54433],{"class":109},[99,90646,90647],{"class":101,"line":8008},[99,90648,90649],{"class":168},"        \u002F\u002F 这里边写第二三四步\n",[99,90651,90652,90654,90657,90660],{"class":101,"line":8020},[99,90653,2483],{"class":105},[99,90655,90656],{"class":109}," (timer) ",[99,90658,90659],{"class":1949},"clearTimeout",[99,90661,90662],{"class":109},"(timer)\n",[99,90664,90665,90668,90670,90673,90675,90677],{"class":101,"line":8032},[99,90666,90667],{"class":109},"        timer ",[99,90669,155],{"class":105},[99,90671,90672],{"class":1949}," setTimeout",[99,90674,110],{"class":109},[99,90676,54430],{"class":105},[99,90678,54433],{"class":109},[99,90680,90681,90684,90686],{"class":101,"line":8044},[99,90682,90683],{"class":1949},"          fn",[99,90685,13037],{"class":109},[99,90687,90688],{"class":168},"\u002F\u002F加小括号调用fn }, t)\n",[99,90690,90691],{"class":101,"line":9703},[99,90692,90693],{"class":109},"        }, t)\n",[99,90695,90696],{"class":101,"line":9728},[99,90697,52379],{"class":109},[99,90699,90700],{"class":101,"line":9751},[99,90701,2173],{"class":109},[99,90703,90704,90706,90708,90710,90712,90714,90716,90718,90720],{"class":101,"line":9775},[99,90705,90188],{"class":109},[99,90707,57794],{"class":1949},[99,90709,110],{"class":109},[99,90711,90195],{"class":214},[99,90713,12422],{"class":109},[99,90715,90201],{"class":1949},[99,90717,90204],{"class":109},[99,90719,65055],{"class":158},[99,90721,30478],{"class":109},[99,90723,90724],{"class":101,"line":9780},[99,90725,2386],{"emptyLinePlaceholder":26},[99,90727,90728],{"class":101,"line":9785},[99,90729,90730],{"class":168},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[99,90732,90733],{"class":101,"line":9790},[99,90734,90735],{"class":168},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[99,90737,90738],{"class":101,"line":9799},[99,90739,90740],{"class":168},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[99,90742,90743],{"class":101,"line":9804},[99,90744,90745],{"class":168},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[99,90747,90748,90750,90752],{"class":101,"line":9810},[99,90749,52398],{"class":109},[99,90751,51794],{"class":51281},[99,90753,51288],{"class":109},[99,90755,90756,90758,90760],{"class":101,"line":9831},[99,90757,51766],{"class":109},[99,90759,51781],{"class":51281},[99,90761,51288],{"class":109},[99,90763,90764],{"class":101,"line":9837},[99,90765,2386],{"emptyLinePlaceholder":26},[99,90767,90768,90770,90772],{"class":101,"line":9851},[99,90769,51766],{"class":109},[99,90771,50616],{"class":51281},[99,90773,51288],{"class":109},[70,90775,90777],{"id":90776},"_4172-节流","4.17.2 节流",[14,90779,90780],{},[1448,90781],{"alt":21,"src":90782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90784,90785],{},[1448,90786],{"alt":21,"src":90787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90789,90790],{},[259,90791,90792],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90794,90795],{},"实现方式：",[1117,90797,90798],{},[56,90799,90800],{},"lodash 提供的节流函数来处理",[14,90802,90803],{},"_.throttle(func,[wait=0],[options=])",[14,90805,90806],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[90,90808,90810],{"className":50614,"code":90809,"language":50616,"meta":21,"style":21},"\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",[96,90811,90812,90822,90836,90840,90848,90862,90882,90894,90902,90908,90918,90930,90942,90952,90964,90974,90984,90996,91000,91008,91016,91020,91028,91046,91064,91072,91090,91100,91108,91118,91122,91126,91130,91135,91140,91161,91169,91177,91181],{"__ignoreMap":21},[99,90813,90814,90816,90818,90820],{"class":101,"line":102},[99,90815,51278],{"class":109},[99,90817,51282],{"class":51281},[99,90819,51285],{"class":1949},[99,90821,51288],{"class":109},[99,90823,90824,90826,90828,90830,90832,90834],{"class":101,"line":22},[99,90825,1020],{"class":109},[99,90827,50616],{"class":51281},[99,90829,51297],{"class":1949},[99,90831,155],{"class":109},[99,90833,51302],{"class":214},[99,90835,51288],{"class":109},[99,90837,90838],{"class":101,"line":1165},[99,90839,2386],{"emptyLinePlaceholder":26},[99,90841,90842,90844,90846],{"class":101,"line":1180},[99,90843,1020],{"class":109},[99,90845,51315],{"class":51281},[99,90847,51288],{"class":109},[99,90849,90850,90852,90854,90856,90858,90860],{"class":101,"line":1186},[99,90851,52125],{"class":109},[99,90853,51325],{"class":51281},[99,90855,51328],{"class":1949},[99,90857,155],{"class":109},[99,90859,51333],{"class":214},[99,90861,51288],{"class":109},[99,90863,90864,90866,90868,90870,90872,90874,90876,90878,90880],{"class":101,"line":1200},[99,90865,52125],{"class":109},[99,90867,51325],{"class":51281},[99,90869,14907],{"class":1949},[99,90871,155],{"class":109},[99,90873,51372],{"class":214},[99,90875,51352],{"class":1949},[99,90877,155],{"class":109},[99,90879,51379],{"class":214},[99,90881,51288],{"class":109},[99,90883,90884,90886,90888,90890,90892],{"class":101,"line":1206},[99,90885,52125],{"class":109},[99,90887,51388],{"class":51281},[99,90889,51391],{"class":109},[99,90891,51388],{"class":51281},[99,90893,51288],{"class":109},[99,90895,90896,90898,90900],{"class":101,"line":1297},[99,90897,52125],{"class":109},[99,90899,5113],{"class":51281},[99,90901,51288],{"class":109},[99,90903,90904,90906],{"class":101,"line":1303},[99,90905,54733],{"class":1949},[99,90907,15559],{"class":109},[99,90909,90910,90912,90914,90916],{"class":101,"line":1315},[99,90911,72577],{"class":158},[99,90913,51418],{"class":109},[99,90915,60486],{"class":158},[99,90917,1276],{"class":109},[99,90919,90920,90922,90924,90926,90928],{"class":101,"line":1598},[99,90921,54752],{"class":158},[99,90923,51418],{"class":109},[99,90925,1708],{"class":158},[99,90927,51473],{"class":105},[99,90929,1276],{"class":109},[99,90931,90932,90934,90936,90938,90940],{"class":101,"line":1603},[99,90933,54766],{"class":158},[99,90935,51418],{"class":109},[99,90937,1708],{"class":158},[99,90939,51473],{"class":105},[99,90941,1276],{"class":109},[99,90943,90944,90946,90948,90950],{"class":101,"line":1609},[99,90945,54865],{"class":158},[99,90947,51418],{"class":109},[99,90949,89987],{"class":158},[99,90951,1276],{"class":109},[99,90953,90954,90956,90958,90960,90962],{"class":101,"line":1614},[99,90955,54903],{"class":158},[99,90957,51418],{"class":109},[99,90959,935],{"class":158},[99,90961,51473],{"class":105},[99,90963,1276],{"class":109},[99,90965,90966,90968,90970,90972],{"class":101,"line":1628},[99,90967,57397],{"class":158},[99,90969,51418],{"class":109},[99,90971,60823],{"class":158},[99,90973,1276],{"class":109},[99,90975,90976,90978,90980,90982],{"class":101,"line":1633},[99,90977,57267],{"class":158},[99,90979,51418],{"class":109},[99,90981,51573],{"class":158},[99,90983,1276],{"class":109},[99,90985,90986,90988,90990,90992,90994],{"class":101,"line":1639},[99,90987,90026],{"class":158},[99,90989,51418],{"class":109},[99,90991,429],{"class":158},[99,90993,51473],{"class":105},[99,90995,1276],{"class":109},[99,90997,90998],{"class":101,"line":1660},[99,90999,2173],{"class":109},[99,91001,91002,91004,91006],{"class":101,"line":1665},[99,91003,52398],{"class":109},[99,91005,5113],{"class":51281},[99,91007,51288],{"class":109},[99,91009,91010,91012,91014],{"class":101,"line":1679},[99,91011,51766],{"class":109},[99,91013,51315],{"class":51281},[99,91015,51288],{"class":109},[99,91017,91018],{"class":101,"line":1684},[99,91019,2386],{"emptyLinePlaceholder":26},[99,91021,91022,91024,91026],{"class":101,"line":1713},[99,91023,1020],{"class":109},[99,91025,51781],{"class":51281},[99,91027,51288],{"class":109},[99,91029,91030,91032,91034,91036,91038,91040,91042,91044],{"class":101,"line":1718},[99,91031,52125],{"class":109},[99,91033,51592],{"class":51281},[99,91035,53467],{"class":1949},[99,91037,155],{"class":109},[99,91039,53472],{"class":214},[99,91041,55295],{"class":109},[99,91043,51592],{"class":51281},[99,91045,51288],{"class":109},[99,91047,91048,91050,91052,91054,91056,91058,91060,91062],{"class":101,"line":1735},[99,91049,52125],{"class":109},[99,91051,51794],{"class":51281},[99,91053,55220],{"class":1949},[99,91055,155],{"class":109},[99,91057,88255],{"class":214},[99,91059,55295],{"class":109},[99,91061,51794],{"class":51281},[99,91063,51288],{"class":109},[99,91065,91066,91068,91070],{"class":101,"line":1740},[99,91067,52125],{"class":109},[99,91069,51794],{"class":51281},[99,91071,51288],{"class":109},[99,91073,91074,91076,91078,91080,91082,91084,91086,91088],{"class":101,"line":1745},[99,91075,11208],{"class":105},[99,91077,86914],{"class":158},[99,91079,13551],{"class":105},[99,91081,54377],{"class":109},[99,91083,54380],{"class":1949},[99,91085,110],{"class":109},[99,91087,90127],{"class":214},[99,91089,116],{"class":109},[99,91091,91092,91094,91096,91098],{"class":101,"line":1750},[99,91093,52200],{"class":105},[99,91095,9425],{"class":109},[99,91097,155],{"class":105},[99,91099,47314],{"class":158},[99,91101,91102,91104,91106],{"class":101,"line":1764},[99,91103,70065],{"class":105},[99,91105,90146],{"class":1949},[99,91107,10840],{"class":109},[99,91109,91110,91112,91114,91116],{"class":101,"line":1769},[99,91111,90153],{"class":109},[99,91113,155],{"class":105},[99,91115,3018],{"class":109},[99,91117,2688],{"class":105},[99,91119,91120],{"class":101,"line":2563},[99,91121,90164],{"class":168},[99,91123,91124],{"class":101,"line":2577},[99,91125,2173],{"class":109},[99,91127,91128],{"class":101,"line":2585},[99,91129,90173],{"class":168},[99,91131,91132],{"class":101,"line":2590},[99,91133,91134],{"class":168},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[99,91136,91137],{"class":101,"line":2596},[99,91138,91139],{"class":168},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[99,91141,91142,91144,91146,91148,91150,91152,91155,91157,91159],{"class":101,"line":2602},[99,91143,90188],{"class":109},[99,91145,57794],{"class":1949},[99,91147,110],{"class":109},[99,91149,90195],{"class":214},[99,91151,90198],{"class":109},[99,91153,91154],{"class":1949},"throttle",[99,91156,90204],{"class":109},[99,91158,65055],{"class":158},[99,91160,30478],{"class":109},[99,91162,91163,91165,91167],{"class":101,"line":2607},[99,91164,52398],{"class":109},[99,91166,51794],{"class":51281},[99,91168,51288],{"class":109},[99,91170,91171,91173,91175],{"class":101,"line":7935},[99,91172,51766],{"class":109},[99,91174,51781],{"class":51281},[99,91176,51288],{"class":109},[99,91178,91179],{"class":101,"line":7959},[99,91180,2386],{"emptyLinePlaceholder":26},[99,91182,91183,91185,91187],{"class":101,"line":7964},[99,91184,51766],{"class":109},[99,91186,50616],{"class":51281},[99,91188,51288],{"class":109},[1117,91190,91191],{},[56,91192,91193],{},"手写一个节流函数来处理",[14,91195,70933],{},[14,91197,90247],{},[14,91199,91200],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91202,91203],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[90,91205,91207],{"className":50614,"code":91206,"language":50616,"meta":21,"style":21},"\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",[96,91208,91209,91219,91233,91237,91245,91259,91279,91291,91299,91305,91315,91327,91339,91349,91361,91371,91381,91393,91397,91405,91413,91417,91425,91443,91461,91469,91487,91497,91505,91515,91519,91523,91527,91532,91537,91542,91547,91552,91557,91574,91580,91588,91599,91614,91621,91626,91631,91641,91646,91651,91656,91660,91664,91668,91688,91696,91704,91708],{"__ignoreMap":21},[99,91210,91211,91213,91215,91217],{"class":101,"line":102},[99,91212,51278],{"class":109},[99,91214,51282],{"class":51281},[99,91216,51285],{"class":1949},[99,91218,51288],{"class":109},[99,91220,91221,91223,91225,91227,91229,91231],{"class":101,"line":22},[99,91222,1020],{"class":109},[99,91224,50616],{"class":51281},[99,91226,51297],{"class":1949},[99,91228,155],{"class":109},[99,91230,51302],{"class":214},[99,91232,51288],{"class":109},[99,91234,91235],{"class":101,"line":1165},[99,91236,2386],{"emptyLinePlaceholder":26},[99,91238,91239,91241,91243],{"class":101,"line":1180},[99,91240,1020],{"class":109},[99,91242,51315],{"class":51281},[99,91244,51288],{"class":109},[99,91246,91247,91249,91251,91253,91255,91257],{"class":101,"line":1186},[99,91248,52125],{"class":109},[99,91250,51325],{"class":51281},[99,91252,51328],{"class":1949},[99,91254,155],{"class":109},[99,91256,51333],{"class":214},[99,91258,51288],{"class":109},[99,91260,91261,91263,91265,91267,91269,91271,91273,91275,91277],{"class":101,"line":1200},[99,91262,52125],{"class":109},[99,91264,51325],{"class":51281},[99,91266,14907],{"class":1949},[99,91268,155],{"class":109},[99,91270,51372],{"class":214},[99,91272,51352],{"class":1949},[99,91274,155],{"class":109},[99,91276,51379],{"class":214},[99,91278,51288],{"class":109},[99,91280,91281,91283,91285,91287,91289],{"class":101,"line":1206},[99,91282,52125],{"class":109},[99,91284,51388],{"class":51281},[99,91286,51391],{"class":109},[99,91288,51388],{"class":51281},[99,91290,51288],{"class":109},[99,91292,91293,91295,91297],{"class":101,"line":1297},[99,91294,52125],{"class":109},[99,91296,5113],{"class":51281},[99,91298,51288],{"class":109},[99,91300,91301,91303],{"class":101,"line":1303},[99,91302,54733],{"class":1949},[99,91304,15559],{"class":109},[99,91306,91307,91309,91311,91313],{"class":101,"line":1315},[99,91308,72577],{"class":158},[99,91310,51418],{"class":109},[99,91312,60486],{"class":158},[99,91314,1276],{"class":109},[99,91316,91317,91319,91321,91323,91325],{"class":101,"line":1598},[99,91318,54752],{"class":158},[99,91320,51418],{"class":109},[99,91322,1708],{"class":158},[99,91324,51473],{"class":105},[99,91326,1276],{"class":109},[99,91328,91329,91331,91333,91335,91337],{"class":101,"line":1603},[99,91330,54766],{"class":158},[99,91332,51418],{"class":109},[99,91334,1708],{"class":158},[99,91336,51473],{"class":105},[99,91338,1276],{"class":109},[99,91340,91341,91343,91345,91347],{"class":101,"line":1609},[99,91342,54865],{"class":158},[99,91344,51418],{"class":109},[99,91346,89987],{"class":158},[99,91348,1276],{"class":109},[99,91350,91351,91353,91355,91357,91359],{"class":101,"line":1614},[99,91352,54903],{"class":158},[99,91354,51418],{"class":109},[99,91356,935],{"class":158},[99,91358,51473],{"class":105},[99,91360,1276],{"class":109},[99,91362,91363,91365,91367,91369],{"class":101,"line":1628},[99,91364,57397],{"class":158},[99,91366,51418],{"class":109},[99,91368,60823],{"class":158},[99,91370,1276],{"class":109},[99,91372,91373,91375,91377,91379],{"class":101,"line":1633},[99,91374,57267],{"class":158},[99,91376,51418],{"class":109},[99,91378,51573],{"class":158},[99,91380,1276],{"class":109},[99,91382,91383,91385,91387,91389,91391],{"class":101,"line":1639},[99,91384,90026],{"class":158},[99,91386,51418],{"class":109},[99,91388,429],{"class":158},[99,91390,51473],{"class":105},[99,91392,1276],{"class":109},[99,91394,91395],{"class":101,"line":1660},[99,91396,2173],{"class":109},[99,91398,91399,91401,91403],{"class":101,"line":1665},[99,91400,52398],{"class":109},[99,91402,5113],{"class":51281},[99,91404,51288],{"class":109},[99,91406,91407,91409,91411],{"class":101,"line":1679},[99,91408,51766],{"class":109},[99,91410,51315],{"class":51281},[99,91412,51288],{"class":109},[99,91414,91415],{"class":101,"line":1684},[99,91416,2386],{"emptyLinePlaceholder":26},[99,91418,91419,91421,91423],{"class":101,"line":1713},[99,91420,1020],{"class":109},[99,91422,51781],{"class":51281},[99,91424,51288],{"class":109},[99,91426,91427,91429,91431,91433,91435,91437,91439,91441],{"class":101,"line":1718},[99,91428,52125],{"class":109},[99,91430,51592],{"class":51281},[99,91432,53467],{"class":1949},[99,91434,155],{"class":109},[99,91436,53472],{"class":214},[99,91438,55295],{"class":109},[99,91440,51592],{"class":51281},[99,91442,51288],{"class":109},[99,91444,91445,91447,91449,91451,91453,91455,91457,91459],{"class":101,"line":1735},[99,91446,52125],{"class":109},[99,91448,51794],{"class":51281},[99,91450,55220],{"class":1949},[99,91452,155],{"class":109},[99,91454,88255],{"class":214},[99,91456,55295],{"class":109},[99,91458,51794],{"class":51281},[99,91460,51288],{"class":109},[99,91462,91463,91465,91467],{"class":101,"line":1740},[99,91464,52125],{"class":109},[99,91466,51794],{"class":51281},[99,91468,51288],{"class":109},[99,91470,91471,91473,91475,91477,91479,91481,91483,91485],{"class":101,"line":1745},[99,91472,11208],{"class":105},[99,91474,86914],{"class":158},[99,91476,13551],{"class":105},[99,91478,54377],{"class":109},[99,91480,54380],{"class":1949},[99,91482,110],{"class":109},[99,91484,90127],{"class":214},[99,91486,116],{"class":109},[99,91488,91489,91491,91493,91495],{"class":101,"line":1750},[99,91490,52200],{"class":105},[99,91492,9425],{"class":109},[99,91494,155],{"class":105},[99,91496,47314],{"class":158},[99,91498,91499,91501,91503],{"class":101,"line":1764},[99,91500,70065],{"class":105},[99,91502,90146],{"class":1949},[99,91504,10840],{"class":109},[99,91506,91507,91509,91511,91513],{"class":101,"line":1769},[99,91508,90153],{"class":109},[99,91510,155],{"class":105},[99,91512,3018],{"class":109},[99,91514,2688],{"class":105},[99,91516,91517],{"class":101,"line":2563},[99,91518,90164],{"class":168},[99,91520,91521],{"class":101,"line":2577},[99,91522,2173],{"class":109},[99,91524,91525],{"class":101,"line":2585},[99,91526,90173],{"class":168},[99,91528,91529],{"class":101,"line":2590},[99,91530,91531],{"class":168},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[99,91533,91534],{"class":101,"line":2596},[99,91535,91536],{"class":168},"    \u002F\u002F 1.声明一个定时器变量\n",[99,91538,91539],{"class":101,"line":2602},[99,91540,91541],{"class":168},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[99,91543,91544],{"class":101,"line":2607},[99,91545,91546],{"class":168},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[99,91548,91549],{"class":101,"line":7935},[99,91550,91551],{"class":168},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[99,91553,91554],{"class":101,"line":7959},[99,91555,91556],{"class":168},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[99,91558,91559,91561,91564,91566,91568,91570,91572],{"class":101,"line":7964},[99,91560,70065],{"class":105},[99,91562,91563],{"class":1949}," throttle",[99,91565,110],{"class":109},[99,91567,90618],{"class":5203},[99,91569,12422],{"class":109},[99,91571,830],{"class":5203},[99,91573,12429],{"class":109},[99,91575,91576,91578],{"class":101,"line":7970},[99,91577,79753],{"class":105},[99,91579,90631],{"class":109},[99,91581,91582,91584,91586],{"class":101,"line":7997},[99,91583,73963],{"class":105},[99,91585,58899],{"class":105},[99,91587,54433],{"class":109},[99,91589,91590,91592,91594,91596],{"class":101,"line":8002},[99,91591,2483],{"class":105},[99,91593,1644],{"class":109},[99,91595,336],{"class":105},[99,91597,91598],{"class":109},"timer) {\n",[99,91600,91601,91604,91606,91608,91610,91612],{"class":101,"line":8008},[99,91602,91603],{"class":109},"          timer ",[99,91605,155],{"class":105},[99,91607,90672],{"class":1949},[99,91609,110],{"class":109},[99,91611,54430],{"class":105},[99,91613,54433],{"class":109},[99,91615,91616,91619],{"class":101,"line":8020},[99,91617,91618],{"class":1949},"            fn",[99,91620,1962],{"class":109},[99,91622,91623],{"class":101,"line":8032},[99,91624,91625],{"class":168},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[99,91627,91628],{"class":101,"line":8044},[99,91629,91630],{"class":168},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[99,91632,91633,91636,91638],{"class":101,"line":9703},[99,91634,91635],{"class":109},"            timer ",[99,91637,155],{"class":105},[99,91639,91640],{"class":158}," null\n",[99,91642,91643],{"class":101,"line":9728},[99,91644,91645],{"class":168},"            \u002F\u002F 不能用clearTimeout(timer)\n",[99,91647,91648],{"class":101,"line":9751},[99,91649,91650],{"class":168},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[99,91652,91653],{"class":101,"line":9775},[99,91654,91655],{"class":109},"          }, t)\n",[99,91657,91658],{"class":101,"line":9780},[99,91659,2515],{"class":109},[99,91661,91662],{"class":101,"line":9785},[99,91663,52379],{"class":109},[99,91665,91666],{"class":101,"line":9790},[99,91667,2173],{"class":109},[99,91669,91670,91672,91674,91676,91678,91680,91682,91684,91686],{"class":101,"line":9799},[99,91671,90188],{"class":109},[99,91673,57794],{"class":1949},[99,91675,110],{"class":109},[99,91677,90195],{"class":214},[99,91679,12422],{"class":109},[99,91681,91154],{"class":1949},[99,91683,90204],{"class":109},[99,91685,65055],{"class":158},[99,91687,30478],{"class":109},[99,91689,91690,91692,91694],{"class":101,"line":9804},[99,91691,52398],{"class":109},[99,91693,51794],{"class":51281},[99,91695,51288],{"class":109},[99,91697,91698,91700,91702],{"class":101,"line":9810},[99,91699,51766],{"class":109},[99,91701,51781],{"class":51281},[99,91703,51288],{"class":109},[99,91705,91706],{"class":101,"line":9831},[99,91707,2386],{"emptyLinePlaceholder":26},[99,91709,91710,91712,91714],{"class":101,"line":9837},[99,91711,51766],{"class":109},[99,91713,50616],{"class":51281},[99,91715,51288],{"class":109},[70,91717,91719],{"id":91718},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[90,91721,91723],{"className":53048,"code":91722,"language":53050,"meta":21,"style":21},"\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",[96,91724,91725,91733,91741,91746,91751,91756,91761,91765,91773],{"__ignoreMap":21},[99,91726,91727,91729,91731],{"class":101,"line":102},[99,91728,1020],{"class":109},[99,91730,51781],{"class":51281},[99,91732,51288],{"class":109},[99,91734,91735,91737,91739],{"class":101,"line":22},[99,91736,52125],{"class":109},[99,91738,51794],{"class":51281},[99,91740,51288],{"class":109},[99,91742,91743],{"class":101,"line":1165},[99,91744,91745],{"class":109},"    let timer = null\n",[99,91747,91748],{"class":101,"line":1180},[99,91749,91750],{"class":109},"    timer = setTimeout(() => {\n",[99,91752,91753],{"class":101,"line":1186},[99,91754,91755],{"class":109},"      clearTimeout(timer)\n",[99,91757,91758],{"class":101,"line":1200},[99,91759,91760],{"class":109},"      console.log(timer)\n",[99,91762,91763],{"class":101,"line":1206},[99,91764,60206],{"class":109},[99,91766,91767,91769,91771],{"class":101,"line":1297},[99,91768,52398],{"class":109},[99,91770,51794],{"class":51281},[99,91772,51288],{"class":109},[99,91774,91775,91777,91779],{"class":101,"line":1303},[99,91776,51766],{"class":109},[99,91778,51781],{"class":51281},[99,91780,51288],{"class":109},[14,91782,91783],{},"输出为1",[14,91785,91786],{},"在开启的定时器里边写清除定时器",[14,91788,91789],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[70,91791,91793],{"id":91792},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91795,91796],{},"页面打开，可以记录上一次的视频播放位置",[14,91798,91799],{},[1448,91800],{"alt":21,"src":91801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91803,91804],{},[1448,91805],{"alt":21,"src":91806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[90,91808,91810],{"className":50614,"code":91809,"language":50616,"meta":21,"style":21},"\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",[96,91811,91812,91822,91836,91840,91848,91862,91882,91902,91924,91937,91945,91951,91961,91971,91981,91985,91989,91996,92009,92021,92025,92029,92039,92051,92065,92069,92073,92080,92090,92103,92115,92125,92135,92151,92163,92167,92171,92179,92189,92201,92211,92221,92231,92235,92239,92249,92260,92264,92272,92280,92284,92292,92307,92322,92337,92358,92366,92374,92389,92411,92419,92434,92460,92486,92512,92520,92528,92547,92555,92560,92579,92584,92602,92607,92612,92620,92625,92639,92647,92652,92669,92673,92678,92700,92704,92712,92720,92724],{"__ignoreMap":21},[99,91813,91814,91816,91818,91820],{"class":101,"line":102},[99,91815,51278],{"class":109},[99,91817,51282],{"class":51281},[99,91819,51285],{"class":1949},[99,91821,51288],{"class":109},[99,91823,91824,91826,91828,91830,91832,91834],{"class":101,"line":22},[99,91825,1020],{"class":109},[99,91827,50616],{"class":51281},[99,91829,51297],{"class":1949},[99,91831,155],{"class":109},[99,91833,51302],{"class":214},[99,91835,51288],{"class":109},[99,91837,91838],{"class":101,"line":1165},[99,91839,2386],{"emptyLinePlaceholder":26},[99,91841,91842,91844,91846],{"class":101,"line":1180},[99,91843,1020],{"class":109},[99,91845,51315],{"class":51281},[99,91847,51288],{"class":109},[99,91849,91850,91852,91854,91856,91858,91860],{"class":101,"line":1186},[99,91851,52125],{"class":109},[99,91853,51325],{"class":51281},[99,91855,51328],{"class":1949},[99,91857,155],{"class":109},[99,91859,51333],{"class":214},[99,91861,59108],{"class":109},[99,91863,91864,91866,91868,91870,91872,91874,91876,91878,91880],{"class":101,"line":1200},[99,91865,52125],{"class":109},[99,91867,51325],{"class":51281},[99,91869,51344],{"class":1949},[99,91871,155],{"class":109},[99,91873,51349],{"class":214},[99,91875,51352],{"class":1949},[99,91877,155],{"class":109},[99,91879,51357],{"class":214},[99,91881,59108],{"class":109},[99,91883,91884,91886,91888,91890,91892,91894,91896,91898,91900],{"class":101,"line":1206},[99,91885,52125],{"class":109},[99,91887,51325],{"class":51281},[99,91889,14907],{"class":1949},[99,91891,155],{"class":109},[99,91893,51372],{"class":214},[99,91895,51352],{"class":1949},[99,91897,155],{"class":109},[99,91899,51379],{"class":214},[99,91901,59108],{"class":109},[99,91903,91904,91906,91908,91910,91912,91915,91917,91919,91922],{"class":101,"line":1297},[99,91905,52125],{"class":109},[99,91907,51325],{"class":51281},[99,91909,14907],{"class":1949},[99,91911,155],{"class":109},[99,91913,91914],{"class":214},"\"referrer\"",[99,91916,51352],{"class":1949},[99,91918,155],{"class":109},[99,91920,91921],{"class":214},"\"never\"",[99,91923,59108],{"class":109},[99,91925,91926,91928,91930,91933,91935],{"class":101,"line":1303},[99,91927,52125],{"class":109},[99,91929,51388],{"class":51281},[99,91931,91932],{"class":109},">综合案例\u003C\u002F",[99,91934,51388],{"class":51281},[99,91936,51288],{"class":109},[99,91938,91939,91941,91943],{"class":101,"line":1315},[99,91940,52125],{"class":109},[99,91942,5113],{"class":51281},[99,91944,51288],{"class":109},[99,91946,91947,91949],{"class":101,"line":1598},[99,91948,6390],{"class":51281},[99,91950,15559],{"class":109},[99,91952,91953,91955,91957,91959],{"class":101,"line":1603},[99,91954,54676],{"class":158},[99,91956,51418],{"class":109},[99,91958,301],{"class":158},[99,91960,1276],{"class":109},[99,91962,91963,91965,91967,91969],{"class":101,"line":1609},[99,91964,54687],{"class":158},[99,91966,51418],{"class":109},[99,91968,301],{"class":158},[99,91970,1276],{"class":109},[99,91972,91973,91975,91977,91979],{"class":101,"line":1614},[99,91974,72577],{"class":158},[99,91976,51418],{"class":109},[99,91978,60486],{"class":158},[99,91980,1276],{"class":109},[99,91982,91983],{"class":101,"line":1628},[99,91984,2173],{"class":109},[99,91986,91987],{"class":101,"line":1633},[99,91988,2386],{"emptyLinePlaceholder":26},[99,91990,91991,91994],{"class":101,"line":1639},[99,91992,91993],{"class":1949},"    .container",[99,91995,15559],{"class":109},[99,91997,91998,92000,92002,92005,92007],{"class":101,"line":1660},[99,91999,54752],{"class":158},[99,92001,51418],{"class":109},[99,92003,92004],{"class":158},"1200",[99,92006,51473],{"class":105},[99,92008,1276],{"class":109},[99,92010,92011,92013,92015,92017,92019],{"class":101,"line":1665},[99,92012,54687],{"class":158},[99,92014,51418],{"class":109},[99,92016,301],{"class":158},[99,92018,51537],{"class":158},[99,92020,1276],{"class":109},[99,92022,92023],{"class":101,"line":1679},[99,92024,2173],{"class":109},[99,92026,92027],{"class":101,"line":1684},[99,92028,2386],{"emptyLinePlaceholder":26},[99,92030,92031,92034,92037],{"class":101,"line":1713},[99,92032,92033],{"class":1949},"    .video",[99,92035,92036],{"class":51281}," video",[99,92038,15559],{"class":109},[99,92040,92041,92043,92045,92047,92049],{"class":101,"line":1718},[99,92042,54752],{"class":158},[99,92044,51418],{"class":109},[99,92046,421],{"class":158},[99,92048,438],{"class":105},[99,92050,1276],{"class":109},[99,92052,92053,92055,92057,92059,92061,92063],{"class":101,"line":1735},[99,92054,54676],{"class":158},[99,92056,51418],{"class":109},[99,92058,810],{"class":158},[99,92060,51473],{"class":105},[99,92062,4079],{"class":158},[99,92064,1276],{"class":109},[99,92066,92067],{"class":101,"line":1740},[99,92068,2173],{"class":109},[99,92070,92071],{"class":101,"line":1745},[99,92072,2386],{"emptyLinePlaceholder":26},[99,92074,92075,92078],{"class":101,"line":1750},[99,92076,92077],{"class":1949},"    .elevator",[99,92079,15559],{"class":109},[99,92081,92082,92084,92086,92088],{"class":101,"line":1764},[99,92083,54740],{"class":158},[99,92085,51418],{"class":109},[99,92087,86214],{"class":158},[99,92089,1276],{"class":109},[99,92091,92092,92094,92096,92099,92101],{"class":101,"line":1769},[99,92093,54928],{"class":158},[99,92095,51418],{"class":109},[99,92097,92098],{"class":158},"280",[99,92100,51473],{"class":105},[99,92102,1276],{"class":109},[99,92104,92105,92107,92109,92111,92113],{"class":101,"line":2563},[99,92106,86408],{"class":158},[99,92108,51418],{"class":109},[99,92110,810],{"class":158},[99,92112,51473],{"class":105},[99,92114,1276],{"class":109},[99,92116,92117,92119,92121,92123],{"class":101,"line":2577},[99,92118,86221],{"class":158},[99,92120,51418],{"class":109},[99,92122,86226],{"class":158},[99,92124,1276],{"class":109},[99,92126,92127,92129,92131,92133],{"class":101,"line":2585},[99,92128,61702],{"class":158},[99,92130,51418],{"class":109},[99,92132,60823],{"class":158},[99,92134,1276],{"class":109},[99,92136,92137,92139,92141,92143,92145,92147,92149],{"class":101,"line":2590},[99,92138,61958],{"class":158},[99,92140,51418],{"class":109},[99,92142,327],{"class":158},[99,92144,51473],{"class":105},[99,92146,51502],{"class":158},[99,92148,62225],{"class":158},[99,92150,1276],{"class":109},[99,92152,92153,92155,92157,92159,92161],{"class":101,"line":2596},[99,92154,54752],{"class":158},[99,92156,51418],{"class":109},[99,92158,1017],{"class":158},[99,92160,51473],{"class":105},[99,92162,1276],{"class":109},[99,92164,92165],{"class":101,"line":2602},[99,92166,2173],{"class":109},[99,92168,92169],{"class":101,"line":2607},[99,92170,2386],{"emptyLinePlaceholder":26},[99,92172,92173,92175,92177],{"class":101,"line":7935},[99,92174,92077],{"class":1949},[99,92176,1384],{"class":51281},[99,92178,15559],{"class":109},[99,92180,92181,92183,92185,92187],{"class":101,"line":7959},[99,92182,54990],{"class":158},[99,92184,51418],{"class":109},[99,92186,60850],{"class":158},[99,92188,1276],{"class":109},[99,92190,92191,92193,92195,92197,92199],{"class":101,"line":7964},[99,92192,54676],{"class":158},[99,92194,51418],{"class":109},[99,92196,556],{"class":158},[99,92198,51473],{"class":105},[99,92200,1276],{"class":109},[99,92202,92203,92205,92207,92209],{"class":101,"line":7970},[99,92204,63951],{"class":158},[99,92206,51418],{"class":109},[99,92208,54718],{"class":158},[99,92210,1276],{"class":109},[99,92212,92213,92215,92217,92219],{"class":101,"line":7997},[99,92214,57267],{"class":158},[99,92216,51418],{"class":109},[99,92218,51573],{"class":158},[99,92220,1276],{"class":109},[99,92222,92223,92225,92227,92229],{"class":101,"line":8002},[99,92224,57397],{"class":158},[99,92226,51418],{"class":109},[99,92228,62051],{"class":158},[99,92230,1276],{"class":109},[99,92232,92233],{"class":101,"line":8008},[99,92234,2173],{"class":109},[99,92236,92237],{"class":101,"line":8020},[99,92238,2386],{"emptyLinePlaceholder":26},[99,92240,92241,92243,92245,92247],{"class":101,"line":8032},[99,92242,92077],{"class":1949},[99,92244,1384],{"class":51281},[99,92246,64005],{"class":1949},[99,92248,15559],{"class":109},[99,92250,92251,92253,92255,92258],{"class":101,"line":8044},[99,92252,57397],{"class":158},[99,92254,51418],{"class":109},[99,92256,92257],{"class":158},"#1286ff",[99,92259,1276],{"class":109},[99,92261,92262],{"class":101,"line":9703},[99,92263,2173],{"class":109},[99,92265,92266,92268,92270],{"class":101,"line":9728},[99,92267,52398],{"class":109},[99,92269,5113],{"class":51281},[99,92271,51288],{"class":109},[99,92273,92274,92276,92278],{"class":101,"line":9751},[99,92275,51766],{"class":109},[99,92277,51315],{"class":51281},[99,92279,51288],{"class":109},[99,92281,92282],{"class":101,"line":9775},[99,92283,2386],{"emptyLinePlaceholder":26},[99,92285,92286,92288,92290],{"class":101,"line":9780},[99,92287,1020],{"class":109},[99,92289,51781],{"class":51281},[99,92291,51288],{"class":109},[99,92293,92294,92296,92298,92300,92302,92305],{"class":101,"line":9785},[99,92295,52125],{"class":109},[99,92297,51592],{"class":51281},[99,92299,53467],{"class":1949},[99,92301,155],{"class":109},[99,92303,92304],{"class":214},"\"container\"",[99,92306,51288],{"class":109},[99,92308,92309,92311,92313,92315,92317,92320],{"class":101,"line":9790},[99,92310,51322],{"class":109},[99,92312,51592],{"class":51281},[99,92314,53467],{"class":1949},[99,92316,155],{"class":109},[99,92318,92319],{"class":214},"\"header\"",[99,92321,51288],{"class":109},[99,92323,92324,92326,92328,92330,92332,92335],{"class":101,"line":9799},[99,92325,55215],{"class":109},[99,92327,348],{"class":51281},[99,92329,61038],{"class":1949},[99,92331,155],{"class":109},[99,92333,92334],{"class":214},"\"http:\u002F\u002Fpip.itcast.cn\"",[99,92336,51288],{"class":109},[99,92338,92339,92341,92343,92345,92347,92350,92352,92354,92356],{"class":101,"line":9804},[99,92340,55283],{"class":109},[99,92342,1448],{"class":51281},[99,92344,55220],{"class":1949},[99,92346,155],{"class":109},[99,92348,92349],{"class":214},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[99,92351,55228],{"class":1949},[99,92353,155],{"class":109},[99,92355,7639],{"class":214},[99,92357,59108],{"class":109},[99,92359,92360,92362,92364],{"class":101,"line":9810},[99,92361,55388],{"class":109},[99,92363,348],{"class":51281},[99,92365,51288],{"class":109},[99,92367,92368,92370,92372],{"class":101,"line":9831},[99,92369,51757],{"class":109},[99,92371,51592],{"class":51281},[99,92373,51288],{"class":109},[99,92375,92376,92378,92380,92382,92384,92387],{"class":101,"line":9837},[99,92377,51322],{"class":109},[99,92379,51592],{"class":51281},[99,92381,53467],{"class":1949},[99,92383,155],{"class":109},[99,92385,92386],{"class":214},"\"video\"",[99,92388,51288],{"class":109},[99,92390,92391,92393,92395,92397,92399,92402,92405,92407,92409],{"class":101,"line":9851},[99,92392,55215],{"class":109},[99,92394,28164],{"class":51281},[99,92396,55220],{"class":1949},[99,92398,155],{"class":109},[99,92400,92401],{"class":214},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[99,92403,92404],{"class":1949}," controls",[99,92406,55295],{"class":109},[99,92408,28164],{"class":51281},[99,92410,51288],{"class":109},[99,92412,92413,92415,92417],{"class":101,"line":9857},[99,92414,51757],{"class":109},[99,92416,51592],{"class":51281},[99,92418,51288],{"class":109},[99,92420,92421,92423,92425,92427,92429,92432],{"class":101,"line":9884},[99,92422,51322],{"class":109},[99,92424,51592],{"class":51281},[99,92426,53467],{"class":1949},[99,92428,155],{"class":109},[99,92430,92431],{"class":214},"\"elevator\"",[99,92433,51288],{"class":109},[99,92435,92436,92438,92440,92442,92444,92446,92449,92451,92453,92456,92458],{"class":101,"line":9893},[99,92437,55215],{"class":109},[99,92439,348],{"class":51281},[99,92441,61038],{"class":1949},[99,92443,155],{"class":109},[99,92445,64217],{"class":214},[99,92447,92448],{"class":1949}," data-ref",[99,92450,155],{"class":109},[99,92452,92386],{"class":214},[99,92454,92455],{"class":109},">视频介绍\u003C\u002F",[99,92457,348],{"class":51281},[99,92459,51288],{"class":109},[99,92461,92462,92464,92466,92468,92470,92472,92474,92476,92479,92482,92484],{"class":101,"line":9899},[99,92463,55215],{"class":109},[99,92465,348],{"class":51281},[99,92467,61038],{"class":1949},[99,92469,155],{"class":109},[99,92471,64217],{"class":214},[99,92473,92448],{"class":1949},[99,92475,155],{"class":109},[99,92477,92478],{"class":214},"\"intro\"",[99,92480,92481],{"class":109},">课程简介\u003C\u002F",[99,92483,348],{"class":51281},[99,92485,51288],{"class":109},[99,92487,92488,92490,92492,92494,92496,92498,92500,92502,92505,92508,92510],{"class":101,"line":9907},[99,92489,55215],{"class":109},[99,92491,348],{"class":51281},[99,92493,61038],{"class":1949},[99,92495,155],{"class":109},[99,92497,64217],{"class":214},[99,92499,92448],{"class":1949},[99,92501,155],{"class":109},[99,92503,92504],{"class":214},"\"outline\"",[99,92506,92507],{"class":109},">评论列表\u003C\u002F",[99,92509,348],{"class":51281},[99,92511,51288],{"class":109},[99,92513,92514,92516,92518],{"class":101,"line":9912},[99,92515,51757],{"class":109},[99,92517,51592],{"class":51281},[99,92519,51288],{"class":109},[99,92521,92522,92524,92526],{"class":101,"line":16591},[99,92523,52398],{"class":109},[99,92525,51592],{"class":51281},[99,92527,51288],{"class":109},[99,92529,92530,92532,92534,92536,92538,92541,92543,92545],{"class":101,"line":16597},[99,92531,52125],{"class":109},[99,92533,51794],{"class":51281},[99,92535,55220],{"class":1949},[99,92537,155],{"class":109},[99,92539,92540],{"class":214},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[99,92542,55295],{"class":109},[99,92544,51794],{"class":51281},[99,92546,51288],{"class":109},[99,92548,92549,92551,92553],{"class":101,"line":16620},[99,92550,52125],{"class":109},[99,92552,51794],{"class":51281},[99,92554,51288],{"class":109},[99,92556,92557],{"class":101,"line":16626},[99,92558,92559],{"class":168},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[99,92561,92562,92564,92566,92568,92570,92572,92574,92577],{"class":101,"line":16649},[99,92563,11208],{"class":105},[99,92565,92036],{"class":158},[99,92567,13551],{"class":105},[99,92569,54377],{"class":109},[99,92571,54380],{"class":1949},[99,92573,110],{"class":109},[99,92575,92576],{"class":214},"'video'",[99,92578,116],{"class":109},[99,92580,92581],{"class":101,"line":16663},[99,92582,92583],{"class":168},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[99,92585,92586,92589,92591,92593,92595,92598,92600],{"class":101,"line":16683},[99,92587,92588],{"class":109},"    video.ontimeupdate ",[99,92590,155],{"class":105},[99,92592,88336],{"class":109},[99,92594,91154],{"class":1949},[99,92596,92597],{"class":109},"(() ",[99,92599,84703],{"class":105},[99,92601,15559],{"class":109},[99,92603,92604],{"class":101,"line":16689},[99,92605,92606],{"class":168},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[99,92608,92609],{"class":101,"line":16700},[99,92610,92611],{"class":168},"      \u002F\u002F 控制台输出当前的时间\n",[99,92613,92614,92617],{"class":101,"line":16723},[99,92615,92616],{"class":168},"      \u002F\u002F console.log(video.currentTime)",[99,92618,92619],{"class":168},"  \u002F\u002F获得当前的视频时间\n",[99,92621,92622],{"class":101,"line":16745},[99,92623,92624],{"class":168},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[99,92626,92627,92629,92631,92633,92636],{"class":101,"line":16750},[99,92628,74664],{"class":109},[99,92630,71635],{"class":1949},[99,92632,110],{"class":109},[99,92634,92635],{"class":214},"'currentTime'",[99,92637,92638],{"class":109},", video.currentTime)\n",[99,92640,92641,92643,92645],{"class":101,"line":16756},[99,92642,54516],{"class":109},[99,92644,6397],{"class":158},[99,92646,116],{"class":109},[99,92648,92649],{"class":101,"line":16770},[99,92650,92651],{"class":168},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[99,92653,92654,92657,92660,92662,92665,92667],{"class":101,"line":16783},[99,92655,92656],{"class":109},"    video.",[99,92658,92659],{"class":1949},"onloadeddata",[99,92661,13551],{"class":105},[99,92663,92664],{"class":109}," () ",[99,92666,84703],{"class":105},[99,92668,15559],{"class":109},[99,92670,92671],{"class":101,"line":16788},[99,92672,59993],{"class":168},[99,92674,92675],{"class":101,"line":16802},[99,92676,92677],{"class":168},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[99,92679,92680,92683,92685,92688,92690,92692,92694,92696,92698],{"class":101,"line":16807},[99,92681,92682],{"class":109},"      video.currentTime ",[99,92684,155],{"class":105},[99,92686,92687],{"class":109}," localStorage.",[99,92689,71666],{"class":1949},[99,92691,110],{"class":109},[99,92693,92635],{"class":214},[99,92695,13701],{"class":109},[99,92697,71338],{"class":105},[99,92699,47314],{"class":158},[99,92701,92702],{"class":101,"line":16813},[99,92703,2173],{"class":109},[99,92705,92706,92708,92710],{"class":101,"line":16818},[99,92707,52398],{"class":109},[99,92709,51794],{"class":51281},[99,92711,51288],{"class":109},[99,92713,92714,92716,92718],{"class":101,"line":16832},[99,92715,51766],{"class":109},[99,92717,51781],{"class":51281},[99,92719,51288],{"class":109},[99,92721,92722],{"class":101,"line":16837},[99,92723,2386],{"emptyLinePlaceholder":26},[99,92725,92726,92728,92730],{"class":101,"line":16842},[99,92727,51766],{"class":109},[99,92729,50616],{"class":51281},[99,92731,51288],{"class":109},[5113,92733,92734],{},"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":21,"searchDepth":22,"depth":22,"links":92736},[92737,92742,92746,92747,92748,92753,92758,92759,92760,92761,92768,92773,92774,92784,92788,92789,92793],{"id":76672,"depth":22,"text":76673,"children":92738},[92739,92740,92741],{"id":76676,"depth":1165,"text":76677},{"id":76701,"depth":1165,"text":76702},{"id":76713,"depth":1165,"text":76714},{"id":76725,"depth":22,"text":76726,"children":92743},[92744,92745],{"id":76729,"depth":1165,"text":76730},{"id":76744,"depth":1165,"text":76745},{"id":76796,"depth":22,"text":76797},{"id":76840,"depth":22,"text":76841},{"id":76857,"depth":22,"text":76858,"children":92749},[92750,92751,92752],{"id":76861,"depth":1165,"text":76862},{"id":76874,"depth":1165,"text":76875},{"id":76979,"depth":1165,"text":76980},{"id":77268,"depth":22,"text":77269,"children":92754},[92755,92756,92757],{"id":77272,"depth":1165,"text":77273},{"id":77715,"depth":1165,"text":77716},{"id":78126,"depth":1165,"text":78127},{"id":78189,"depth":22,"text":78190},{"id":78268,"depth":22,"text":78269},{"id":78361,"depth":22,"text":78362},{"id":80206,"depth":22,"text":80207,"children":92762},[92763,92764,92765,92766,92767],{"id":80210,"depth":1165,"text":80211},{"id":80222,"depth":1165,"text":80223},{"id":80441,"depth":1165,"text":80442},{"id":80459,"depth":1165,"text":80460},{"id":80519,"depth":1165,"text":80520},{"id":84787,"depth":22,"text":84788,"children":92769},[92770,92771,92772],{"id":84791,"depth":1165,"text":84792},{"id":84809,"depth":1165,"text":84810},{"id":84835,"depth":1165,"text":84836},{"id":84844,"depth":22,"text":84845},{"id":84866,"depth":22,"text":84867,"children":92775},[92776,92777,92778,92779,92780,92781,92782,92783],{"id":84870,"depth":1165,"text":84871},{"id":85131,"depth":1165,"text":85132},{"id":85317,"depth":1165,"text":85318},{"id":85684,"depth":1165,"text":85685},{"id":85800,"depth":1165,"text":85801},{"id":85836,"depth":1165,"text":85837},{"id":85883,"depth":1165,"text":85884},{"id":85917,"depth":1165,"text":85918},{"id":87280,"depth":22,"text":87281,"children":92785},[92786,92787],{"id":87284,"depth":1165,"text":87285},{"id":87321,"depth":1165,"text":87322},{"id":88676,"depth":22,"text":88677},{"id":89047,"depth":22,"text":89048,"children":92790},[92791,92792],{"id":89051,"depth":1165,"text":89052},{"id":89085,"depth":1165,"text":89086},{"id":89814,"depth":22,"text":89815,"children":92794},[92795,92796,92797,92798],{"id":89818,"depth":1165,"text":89819},{"id":90776,"depth":1165,"text":90777},{"id":91718,"depth":1165,"text":91719},{"id":91792,"depth":1165,"text":91793},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76661,"description":23364},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92805,"title":92806,"body":92807,"description":92818,"extension":24,"meta":92819,"navigation":26,"path":92821,"seo":92822,"stem":92823,"__hash__":92824},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92808,"toc":92816},[92809],[14,92810,92811,92812],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[348,92813,92814],{"href":92814,"rel":92815},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23853],{"title":21,"searchDepth":22,"depth":22,"links":92817},[],"三件套第三套学习",{"category":92820},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92806,"description":92818},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92826,"title":92827,"body":92828,"description":23364,"extension":24,"meta":92933,"navigation":26,"path":92934,"seo":92935,"stem":92936,"__hash__":92937},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92829,"toc":92928},[92830,92837,92840,92843,92846,92850,92859,92862,92865,92869,92878,92881,92885,92888,92908,92911,92925],[14,92831,92832],{},[348,92833,92836],{"href":92834,"rel":92835},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23853],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92838,92827],{"id":92839},"_1安装",[14,92841,92842],{},"numpy是科学计算基础库,底层是C语言",[14,92844,92845],{},"三种方式：",[41,92847,92849],{"id":92848},"_11-通过pip安装","1.1 通过pip安装",[90,92851,92853],{"className":30359,"code":92852,"language":30361,"meta":21,"style":21},"pip install numpy\n",[96,92854,92855],{"__ignoreMap":21},[99,92856,92857],{"class":101,"line":102},[99,92858,92852],{"class":109},[14,92860,92861],{},"首选方式，自动处理依赖项",[14,92863,92864],{},"在提示系统命令符中使用cmd",[41,92866,92868],{"id":92867},"_12-通过anaconda安装","1.2 通过Anaconda安装",[90,92870,92872],{"className":30359,"code":92871,"language":30361,"meta":21,"style":21},"conda install numpy\n",[96,92873,92874],{"__ignoreMap":21},[99,92875,92876],{"class":101,"line":102},[99,92877,92871],{"class":109},[14,92879,92880],{},"自动解决环境依赖",[41,92882,92884],{"id":92883},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92886,92887],{},"对于Debian\u002FUbuntu",[90,92889,92891],{"className":30359,"code":92890,"language":30361,"meta":21,"style":21},"sudo apt-get install python3-numpy\n",[96,92892,92893],{"__ignoreMap":21},[99,92894,92895,92898,92900,92903,92905],{"class":101,"line":102},[99,92896,92897],{"class":109},"sudo apt",[99,92899,642],{"class":105},[99,92901,92902],{"class":109},"get install python3",[99,92904,642],{"class":105},[99,92906,92907],{"class":109},"numpy\n",[14,92909,92910],{},"对于Fedora:",[90,92912,92914],{"className":30359,"code":92913,"language":30361,"meta":21,"style":21},"sudo dnf install python3-numpy\n",[96,92915,92916],{"__ignoreMap":21},[99,92917,92918,92921,92923],{"class":101,"line":102},[99,92919,92920],{"class":109},"sudo dnf install python3",[99,92922,642],{"class":105},[99,92924,92907],{"class":109},[5113,92926,92927],{},"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":21,"searchDepth":22,"depth":22,"links":92929},[92930,92931,92932],{"id":92848,"depth":22,"text":92849},{"id":92867,"depth":22,"text":92868},{"id":92883,"depth":22,"text":92884},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92827,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92939,"title":92940,"body":92941,"description":23364,"extension":24,"meta":93054,"navigation":26,"path":93055,"seo":93056,"stem":93057,"__hash__":93058},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92942,"toc":93052},[92943,92946,92949,92952,92955,92958,92961,92964,92967,92970,93046,93049],[10,92944,92940],{"id":92945},"_10算数函数",[14,92947,92948],{},"加减乘除运算跟python基础语法没区别",[14,92950,92951],{},"除了python那种方法外还可以使用函数",[14,92953,92954],{},"加：np.add(a,b)",[14,92956,92957],{},"减：np.subtract(a,b)",[14,92959,92960],{},"乘：np.multiply(a,b)",[14,92962,92963],{},"除：np.divide(a,b) == a\u002Fb",[14,92965,92966],{},"取余：np.mod(a,b) == a%b",[14,92968,92969],{},"必须会的用法：",[90,92971,92973],{"className":30359,"code":92972,"language":30361,"meta":21,"style":21},"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",[96,92974,92975,92997,93018,93028,93041],{"__ignoreMap":21},[99,92976,92977,92979,92981,92984,92986,92989,92991,92993,92995],{"class":101,"line":102},[99,92978,348],{"class":109},[99,92980,155],{"class":105},[99,92982,92983],{"class":109},"np.arange(",[99,92985,530],{"class":158},[99,92987,92988],{"class":109},").reshape(",[99,92990,181],{"class":158},[99,92992,488],{"class":109},[99,92994,181],{"class":158},[99,92996,116],{"class":109},[99,92998,92999,93001,93003,93006,93008,93010,93012,93014,93016],{"class":101,"line":22},[99,93000,373],{"class":109},[99,93002,155],{"class":105},[99,93004,93005],{"class":109},"np.array([",[99,93007,556],{"class":158},[99,93009,488],{"class":109},[99,93011,556],{"class":158},[99,93013,488],{"class":109},[99,93015,556],{"class":158},[99,93017,4643],{"class":109},[99,93019,93020,93023,93025],{"class":101,"line":1165},[99,93021,93022],{"class":109},"result",[99,93024,155],{"class":105},[99,93026,93027],{"class":109},"np.empty_like(a)\n",[99,93029,93030,93033,93036,93038],{"class":101,"line":1180},[99,93031,93032],{"class":109},"np.add(a,b,",[99,93034,93035],{"class":5203},"out",[99,93037,155],{"class":105},[99,93039,93040],{"class":109},"result)\n",[99,93042,93043],{"class":101,"line":1186},[99,93044,93045],{"class":109},"result\n",[14,93047,93048],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5113,93050,93051],{},"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":21,"searchDepth":22,"depth":22,"links":93053},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92940,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93060,"title":93061,"body":93062,"description":23364,"extension":24,"meta":93824,"navigation":26,"path":93825,"seo":93826,"stem":93827,"__hash__":93828},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93063,"toc":93811},[93064,93067,93070,93073,93077,93116,93120,93164,93224,93228,93231,93270,93273,93318,93322,93358,93362,93431,93435,93499,93503,93506,93509,93512,93515,93551,93555,93595,93599,93671,93674,93678,93741,93745,93808],[10,93065,93061],{"id":93066},"_11统计函数",[14,93068,93069],{},"sum max min mean",[14,93071,93072],{},"这些有axis参数，可以指定方向",[41,93074,93076],{"id":93075},"_111-sum求和函数","11.1 sum()求和函数",[90,93078,93080],{"className":30359,"code":93079,"language":30361,"meta":21,"style":21},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[96,93081,93082,93087,93108],{"__ignoreMap":21},[99,93083,93084],{"class":101,"line":102},[99,93085,93086],{"class":168},"#创建一维数组\n",[99,93088,93089,93091,93093,93096,93098,93100,93102,93104,93106],{"class":101,"line":22},[99,93090,348],{"class":109},[99,93092,155],{"class":105},[99,93094,93095],{"class":109},"np.random.randint(",[99,93097,327],{"class":158},[99,93099,488],{"class":109},[99,93101,421],{"class":158},[99,93103,488],{"class":109},[99,93105,810],{"class":158},[99,93107,116],{"class":109},[99,93109,93110,93113],{"class":101,"line":1165},[99,93111,93112],{"class":109},"np.sum(a)",[99,93114,93115],{"class":168},"#求和\n",[41,93117,93119],{"id":93118},"_112-max求最大值函数","11.2 max()求最大值函数",[90,93121,93123],{"className":30359,"code":93122,"language":30361,"meta":21,"style":21},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[96,93124,93125,93129,93149,93154,93159],{"__ignoreMap":21},[99,93126,93127],{"class":101,"line":102},[99,93128,93086],{"class":168},[99,93130,93131,93133,93135,93137,93139,93141,93143,93145,93147],{"class":101,"line":22},[99,93132,348],{"class":109},[99,93134,155],{"class":105},[99,93136,93095],{"class":109},[99,93138,327],{"class":158},[99,93140,488],{"class":109},[99,93142,421],{"class":158},[99,93144,488],{"class":109},[99,93146,810],{"class":158},[99,93148,116],{"class":109},[99,93150,93151],{"class":101,"line":1165},[99,93152,93153],{"class":109},"np.max(a)\n",[99,93155,93156],{"class":101,"line":1180},[99,93157,93158],{"class":168},"#最大索引(求最大元素的索引)arg\n",[99,93160,93161],{"class":101,"line":1186},[99,93162,93163],{"class":109},"np.argmax(a)\n",[90,93165,93167],{"className":30359,"code":93166,"language":30361,"meta":21,"style":21},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[96,93168,93169,93190,93210,93214],{"__ignoreMap":21},[99,93170,93171,93173,93175,93178,93180,93182,93184,93186,93188],{"class":101,"line":102},[99,93172,10906],{"class":109},[99,93174,155],{"class":105},[99,93176,93177],{"class":109}," np.array([",[99,93179,327],{"class":158},[99,93181,12422],{"class":109},[99,93183,429],{"class":158},[99,93185,12422],{"class":109},[99,93187,181],{"class":158},[99,93189,4643],{"class":109},[99,93191,93192,93194,93196,93198,93200,93202,93204,93206,93208],{"class":101,"line":22},[99,93193,10932],{"class":109},[99,93195,155],{"class":105},[99,93197,93177],{"class":109},[99,93199,181],{"class":158},[99,93201,12422],{"class":109},[99,93203,187],{"class":158},[99,93205,12422],{"class":109},[99,93207,403],{"class":158},[99,93209,4643],{"class":109},[99,93211,93212],{"class":101,"line":1165},[99,93213,2386],{"emptyLinePlaceholder":26},[99,93215,93216,93218,93221],{"class":101,"line":1180},[99,93217,30396],{"class":158},[99,93219,93220],{"class":109},"(np.maximum(a, b))   ",[99,93222,93223],{"class":168},"# [3 5 4]，每个位置上取较大值\n",[41,93225,93227],{"id":93226},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93229,93230],{},"①一维数组：",[90,93232,93234],{"className":30359,"code":93233,"language":30361,"meta":21,"style":21},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[96,93235,93236,93240,93260,93265],{"__ignoreMap":21},[99,93237,93238],{"class":101,"line":102},[99,93239,93086],{"class":168},[99,93241,93242,93244,93246,93248,93250,93252,93254,93256,93258],{"class":101,"line":22},[99,93243,348],{"class":109},[99,93245,155],{"class":105},[99,93247,93095],{"class":109},[99,93249,327],{"class":158},[99,93251,488],{"class":109},[99,93253,421],{"class":158},[99,93255,488],{"class":109},[99,93257,810],{"class":158},[99,93259,116],{"class":109},[99,93261,93262],{"class":101,"line":1165},[99,93263,93264],{"class":168},"#求平均值\n",[99,93266,93267],{"class":101,"line":1180},[99,93268,93269],{"class":109},"np.mean(a)\n",[14,93271,93272],{},"②二维数组",[90,93274,93276],{"className":30359,"code":93275,"language":30361,"meta":21,"style":21},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[96,93277,93278,93283,93308,93313],{"__ignoreMap":21},[99,93279,93280],{"class":101,"line":102},[99,93281,93282],{"class":168},"#二维数组\n",[99,93284,93285,93288,93290,93292,93294,93296,93298,93300,93302,93304,93306],{"class":101,"line":22},[99,93286,93287],{"class":109},"aa",[99,93289,155],{"class":105},[99,93291,92983],{"class":109},[99,93293,327],{"class":158},[99,93295,488],{"class":109},[99,93297,633],{"class":158},[99,93299,92988],{"class":109},[99,93301,181],{"class":158},[99,93303,488],{"class":109},[99,93305,403],{"class":158},[99,93307,116],{"class":109},[99,93309,93310],{"class":101,"line":1165},[99,93311,93312],{"class":168},"#对数组中的所有数求平均\n",[99,93314,93315],{"class":101,"line":1180},[99,93316,93317],{"class":109},"np.mean(aa)\n",[41,93319,93321],{"id":93320},"_114-median求中位数函数","11.4 median()求中位数函数",[90,93323,93325],{"className":30359,"code":93324,"language":30361,"meta":21,"style":21},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[96,93326,93327,93332,93348,93353],{"__ignoreMap":21},[99,93328,93329],{"class":101,"line":102},[99,93330,93331],{"class":168},"#求中位数\n",[99,93333,93334,93336,93338,93340,93342,93344,93346],{"class":101,"line":22},[99,93335,373],{"class":109},[99,93337,155],{"class":105},[99,93339,92983],{"class":109},[99,93341,327],{"class":158},[99,93343,488],{"class":109},[99,93345,556],{"class":158},[99,93347,116],{"class":109},[99,93349,93350],{"class":101,"line":1165},[99,93351,93352],{"class":109},"np.median(b)\n",[99,93354,93355],{"class":101,"line":1180},[99,93356,93357],{"class":168},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[41,93359,93361],{"id":93360},"_115-power求幂运算函数","11.5 power()求幂运算函数",[90,93363,93365],{"className":30359,"code":93364,"language":30361,"meta":21,"style":21},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[96,93366,93367,93383,93388,93393,93402,93407,93416],{"__ignoreMap":21},[99,93368,93369,93371,93373,93375,93377,93379,93381],{"class":101,"line":102},[99,93370,373],{"class":109},[99,93372,155],{"class":105},[99,93374,92983],{"class":109},[99,93376,327],{"class":158},[99,93378,488],{"class":109},[99,93380,556],{"class":158},[99,93382,116],{"class":109},[99,93384,93385],{"class":101,"line":22},[99,93386,93387],{"class":168},"#幂运算\n",[99,93389,93390],{"class":101,"line":1165},[99,93391,93392],{"class":168},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[99,93394,93395,93398,93400],{"class":101,"line":1180},[99,93396,93397],{"class":109},"np.power(b,",[99,93399,187],{"class":158},[99,93401,116],{"class":109},[99,93403,93404],{"class":101,"line":1186},[99,93405,93406],{"class":168},"#或者以下代码，将数据存储起来\n",[99,93408,93409,93411,93413],{"class":101,"line":1200},[99,93410,955],{"class":109},[99,93412,155],{"class":105},[99,93414,93415],{"class":109},"np.empty_like(b)\n",[99,93417,93418,93420,93422,93424,93426,93428],{"class":101,"line":1206},[99,93419,93397],{"class":109},[99,93421,187],{"class":158},[99,93423,488],{"class":109},[99,93425,93035],{"class":5203},[99,93427,155],{"class":105},[99,93429,93430],{"class":109},"y)\n",[41,93432,93434],{"id":93433},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[90,93436,93438],{"className":30359,"code":93437,"language":30361,"meta":21,"style":21},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[96,93439,93440,93456,93461,93466,93470,93488],{"__ignoreMap":21},[99,93441,93442,93444,93446,93448,93450,93452,93454],{"class":101,"line":102},[99,93443,373],{"class":109},[99,93445,155],{"class":105},[99,93447,92983],{"class":109},[99,93449,327],{"class":158},[99,93451,488],{"class":109},[99,93453,556],{"class":158},[99,93455,116],{"class":109},[99,93457,93458],{"class":101,"line":22},[99,93459,93460],{"class":168},"#开方\n",[99,93462,93463],{"class":101,"line":1165},[99,93464,93465],{"class":109},"np.sqrt(b)\n",[99,93467,93468],{"class":101,"line":1180},[99,93469,93406],{"class":168},[99,93471,93472,93474,93476,93479,93482,93484,93486],{"class":101,"line":1186},[99,93473,955],{"class":109},[99,93475,155],{"class":105},[99,93477,93478],{"class":109},"np.empty_like(b,",[99,93480,93481],{"class":5203},"dtype",[99,93483,155],{"class":105},[99,93485,149],{"class":158},[99,93487,116],{"class":109},[99,93489,93490,93493,93495,93497],{"class":101,"line":1200},[99,93491,93492],{"class":109},"np.sqrt(b,",[99,93494,93035],{"class":5203},[99,93496,155],{"class":105},[99,93498,93430],{"class":109},[41,93500,93502],{"id":93501},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93504,93505],{},"对数组中的元素累计求和，可指定轴",[14,93507,93508],{},"#累计求和的意思是：",[14,93510,93511],{},"a = np.array([1, 2, 3, 4])",[14,93513,93514],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[90,93516,93518],{"className":30359,"code":93517,"language":30361,"meta":21,"style":21},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[96,93519,93520,93536,93541,93546],{"__ignoreMap":21},[99,93521,93522,93524,93526,93528,93530,93532,93534],{"class":101,"line":102},[99,93523,373],{"class":109},[99,93525,155],{"class":105},[99,93527,92983],{"class":109},[99,93529,327],{"class":158},[99,93531,488],{"class":109},[99,93533,556],{"class":158},[99,93535,116],{"class":109},[99,93537,93538],{"class":101,"line":22},[99,93539,93540],{"class":109},"np.cumsum(b)\n",[99,93542,93543],{"class":101,"line":1165},[99,93544,93545],{"class":168},"#结果：\n",[99,93547,93548],{"class":101,"line":1180},[99,93549,93550],{"class":168},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[41,93552,93554],{"id":93553},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[90,93556,93558],{"className":30359,"code":93557,"language":30361,"meta":21,"style":21},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[96,93559,93560,93576,93581,93586,93590],{"__ignoreMap":21},[99,93561,93562,93564,93566,93568,93570,93572,93574],{"class":101,"line":102},[99,93563,373],{"class":109},[99,93565,155],{"class":105},[99,93567,92983],{"class":109},[99,93569,327],{"class":158},[99,93571,488],{"class":109},[99,93573,556],{"class":158},[99,93575,116],{"class":109},[99,93577,93578],{"class":101,"line":22},[99,93579,93580],{"class":168},"#对数组中的元素累计求积，可指定轴\n",[99,93582,93583],{"class":101,"line":1165},[99,93584,93585],{"class":109},"np.cumprod(b)\n",[99,93587,93588],{"class":101,"line":1180},[99,93589,93545],{"class":168},[99,93591,93592],{"class":101,"line":1186},[99,93593,93594],{"class":168},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[41,93596,93598],{"id":93597},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[90,93600,93602],{"className":30359,"code":93601,"language":30361,"meta":21,"style":21},"#删除数组中的重复数据，并对数据进行排序\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",[96,93603,93604,93609,93657,93662,93666],{"__ignoreMap":21},[99,93605,93606],{"class":101,"line":102},[99,93607,93608],{"class":168},"#删除数组中的重复数据，并对数据进行排序\n",[99,93610,93611,93613,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655],{"class":101,"line":22},[99,93612,348],{"class":109},[99,93614,155],{"class":105},[99,93616,93005],{"class":109},[99,93618,327],{"class":158},[99,93620,488],{"class":109},[99,93622,187],{"class":158},[99,93624,488],{"class":109},[99,93626,181],{"class":158},[99,93628,488],{"class":109},[99,93630,608],{"class":158},[99,93632,488],{"class":109},[99,93634,181],{"class":158},[99,93636,488],{"class":109},[99,93638,556],{"class":158},[99,93640,488],{"class":109},[99,93642,307],{"class":158},[99,93644,488],{"class":109},[99,93646,301],{"class":158},[99,93648,488],{"class":109},[99,93650,885],{"class":158},[99,93652,488],{"class":109},[99,93654,403],{"class":158},[99,93656,4643],{"class":109},[99,93658,93659],{"class":101,"line":1165},[99,93660,93661],{"class":109},"np.unique(a)\n",[99,93663,93664],{"class":101,"line":1180},[99,93665,93545],{"class":168},[99,93667,93668],{"class":101,"line":1186},[99,93669,93670],{"class":168},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93672,93673],{},"升序形式排序",[41,93675,93677],{"id":93676},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[90,93679,93681],{"className":30359,"code":93680,"language":30361,"meta":21,"style":21},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[96,93682,93683,93731,93736],{"__ignoreMap":21},[99,93684,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729],{"class":101,"line":102},[99,93686,348],{"class":109},[99,93688,155],{"class":105},[99,93690,93005],{"class":109},[99,93692,327],{"class":158},[99,93694,488],{"class":109},[99,93696,187],{"class":158},[99,93698,488],{"class":109},[99,93700,181],{"class":158},[99,93702,488],{"class":109},[99,93704,608],{"class":158},[99,93706,488],{"class":109},[99,93708,181],{"class":158},[99,93710,488],{"class":109},[99,93712,556],{"class":158},[99,93714,488],{"class":109},[99,93716,307],{"class":158},[99,93718,488],{"class":109},[99,93720,301],{"class":158},[99,93722,488],{"class":109},[99,93724,885],{"class":158},[99,93726,488],{"class":109},[99,93728,403],{"class":158},[99,93730,4643],{"class":109},[99,93732,93733],{"class":101,"line":22},[99,93734,93735],{"class":168},"#返回数组中非零元素的索引\n",[99,93737,93738],{"class":101,"line":1165},[99,93739,93740],{"class":109},"np.nonzero(a)\n",[41,93742,93744],{"id":93743},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[90,93746,93748],{"className":30359,"code":93747,"language":30361,"meta":21,"style":21},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[96,93749,93750,93798,93803],{"__ignoreMap":21},[99,93751,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796],{"class":101,"line":102},[99,93753,348],{"class":109},[99,93755,155],{"class":105},[99,93757,93005],{"class":109},[99,93759,327],{"class":158},[99,93761,488],{"class":109},[99,93763,187],{"class":158},[99,93765,488],{"class":109},[99,93767,181],{"class":158},[99,93769,488],{"class":109},[99,93771,608],{"class":158},[99,93773,488],{"class":109},[99,93775,181],{"class":158},[99,93777,488],{"class":109},[99,93779,556],{"class":158},[99,93781,488],{"class":109},[99,93783,307],{"class":158},[99,93785,488],{"class":109},[99,93787,301],{"class":158},[99,93789,488],{"class":109},[99,93791,885],{"class":158},[99,93793,488],{"class":109},[99,93795,403],{"class":158},[99,93797,4643],{"class":109},[99,93799,93800],{"class":101,"line":22},[99,93801,93802],{"class":168},"#计算一组数中最大值与最小值的差，可指定轴\n",[99,93804,93805],{"class":101,"line":1165},[99,93806,93807],{"class":109},"np.ptp(a)\n",[5113,93809,93810],{},"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":21,"searchDepth":22,"depth":22,"links":93812},[93813,93814,93815,93816,93817,93818,93819,93820,93821,93822,93823],{"id":93075,"depth":22,"text":93076},{"id":93118,"depth":22,"text":93119},{"id":93226,"depth":22,"text":93227},{"id":93320,"depth":22,"text":93321},{"id":93360,"depth":22,"text":93361},{"id":93433,"depth":22,"text":93434},{"id":93501,"depth":22,"text":93502},{"id":93553,"depth":22,"text":93554},{"id":93597,"depth":22,"text":93598},{"id":93676,"depth":22,"text":93677},{"id":93743,"depth":22,"text":93744},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93061,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93830,"title":93831,"body":93832,"description":23364,"extension":24,"meta":94487,"navigation":26,"path":94488,"seo":94489,"stem":94490,"__hash__":94491},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93833,"toc":94475},[93834,93837,93841,93844,94060,94064,94067,94276,94280,94346,94351,94355,94358,94361,94399,94403,94406,94411,94415,94418,94421,94426,94430,94433,94437,94440,94443,94448,94452,94455,94458,94463,94467,94472],[10,93835,93831],{"id":93836},"_12其他常用函数",[41,93838,93840],{"id":93839},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93842,93843],{},"将数组的数据按照行列复制扩展",[90,93845,93847],{"className":30359,"code":93846,"language":30361,"meta":21,"style":21},"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",[96,93848,93849,93865,93874,93878,93883,93888,93901,93905,93910,93915,93920,93924,93929,93953,93965,93969,93973,93978,93983,93988,93993,93997,94010,94014,94018,94023,94028,94033,94038,94043,94047,94051,94056],{"__ignoreMap":21},[99,93850,93851,93853,93855,93857,93859,93861,93863],{"class":101,"line":102},[99,93852,348],{"class":109},[99,93854,155],{"class":105},[99,93856,92983],{"class":109},[99,93858,327],{"class":158},[99,93860,488],{"class":109},[99,93862,429],{"class":158},[99,93864,116],{"class":109},[99,93866,93867,93870,93872],{"class":101,"line":22},[99,93868,93869],{"class":109},"np.tile(a,",[99,93871,187],{"class":158},[99,93873,116],{"class":109},[99,93875,93876],{"class":101,"line":1165},[99,93877,93545],{"class":168},[99,93879,93880],{"class":101,"line":1180},[99,93881,93882],{"class":168},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[99,93884,93885],{"class":101,"line":1186},[99,93886,93887],{"class":168},"#行复制两次，列复制三次\n",[99,93889,93890,93893,93895,93897,93899],{"class":101,"line":1200},[99,93891,93892],{"class":109},"np.tile(a,(",[99,93894,187],{"class":158},[99,93896,488],{"class":109},[99,93898,181],{"class":158},[99,93900,30478],{"class":109},[99,93902,93903],{"class":101,"line":1206},[99,93904,93545],{"class":168},[99,93906,93907],{"class":101,"line":1297},[99,93908,93909],{"class":214},"'''\n",[99,93911,93912],{"class":101,"line":1303},[99,93913,93914],{"class":214},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[99,93916,93917],{"class":101,"line":1315},[99,93918,93919],{"class":214},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[99,93921,93922],{"class":101,"line":1598},[99,93923,93909],{"class":214},[99,93925,93926],{"class":101,"line":1603},[99,93927,93928],{"class":168},"#创建二维数组\n",[99,93930,93931,93933,93935,93937,93939,93941,93943,93945,93947,93949,93951],{"class":101,"line":1609},[99,93932,93287],{"class":109},[99,93934,155],{"class":105},[99,93936,92983],{"class":109},[99,93938,327],{"class":158},[99,93940,488],{"class":109},[99,93942,633],{"class":158},[99,93944,92988],{"class":109},[99,93946,403],{"class":158},[99,93948,488],{"class":109},[99,93950,181],{"class":158},[99,93952,116],{"class":109},[99,93954,93955,93958,93960,93962],{"class":101,"line":1614},[99,93956,93957],{"class":109},"np.tile(aa,",[99,93959,187],{"class":158},[99,93961,539],{"class":109},[99,93963,93964],{"class":168},"#一个数的时候就是行\n",[99,93966,93967],{"class":101,"line":1628},[99,93968,93545],{"class":168},[99,93970,93971],{"class":101,"line":1633},[99,93972,93909],{"class":214},[99,93974,93975],{"class":101,"line":1639},[99,93976,93977],{"class":214},"array([[ 1,  2,  3,  1,  2,  3],\n",[99,93979,93980],{"class":101,"line":1660},[99,93981,93982],{"class":214},"       [ 4,  5,  6,  4,  5,  6],\n",[99,93984,93985],{"class":101,"line":1665},[99,93986,93987],{"class":214},"       [ 7,  8,  9,  7,  8,  9],\n",[99,93989,93990],{"class":101,"line":1679},[99,93991,93992],{"class":214},"       [10, 11, 12, 10, 11, 12]])\n",[99,93994,93995],{"class":101,"line":1684},[99,93996,93909],{"class":214},[99,93998,93999,94002,94004,94006,94008],{"class":101,"line":1713},[99,94000,94001],{"class":109},"np.tile(aa,(",[99,94003,187],{"class":158},[99,94005,488],{"class":109},[99,94007,181],{"class":158},[99,94009,30478],{"class":109},[99,94011,94012],{"class":101,"line":1718},[99,94013,93545],{"class":168},[99,94015,94016],{"class":101,"line":1735},[99,94017,93909],{"class":214},[99,94019,94020],{"class":101,"line":1740},[99,94021,94022],{"class":214},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[99,94024,94025],{"class":101,"line":1745},[99,94026,94027],{"class":214},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[99,94029,94030],{"class":101,"line":1750},[99,94031,94032],{"class":214},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[99,94034,94035],{"class":101,"line":1764},[99,94036,94037],{"class":214},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[99,94039,94040],{"class":101,"line":1769},[99,94041,94042],{"class":214},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[99,94044,94045],{"class":101,"line":2563},[99,94046,94027],{"class":214},[99,94048,94049],{"class":101,"line":2577},[99,94050,94032],{"class":214},[99,94052,94053],{"class":101,"line":2585},[99,94054,94055],{"class":214},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[99,94057,94058],{"class":101,"line":2590},[99,94059,93909],{"class":214},[41,94061,94063],{"id":94062},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94065,94066],{},"repeat()将数组中的每个元素重复若干次",[90,94068,94070],{"className":30359,"code":94069,"language":30361,"meta":21,"style":21},"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",[96,94071,94072,94088,94097,94101,94106,94130,94135,94144,94148,94153,94157,94162,94178,94182,94186,94191,94196,94201,94205,94210,94214,94219,94224,94228,94244,94248,94252,94257,94262,94267,94272],{"__ignoreMap":21},[99,94073,94074,94076,94078,94080,94082,94084,94086],{"class":101,"line":102},[99,94075,348],{"class":109},[99,94077,155],{"class":105},[99,94079,92983],{"class":109},[99,94081,327],{"class":158},[99,94083,488],{"class":109},[99,94085,429],{"class":158},[99,94087,116],{"class":109},[99,94089,94090,94093,94095],{"class":101,"line":22},[99,94091,94092],{"class":109},"np.repeat(a,",[99,94094,181],{"class":158},[99,94096,116],{"class":109},[99,94098,94099],{"class":101,"line":1165},[99,94100,93545],{"class":168},[99,94102,94103],{"class":101,"line":1180},[99,94104,94105],{"class":168},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[99,94107,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126,94128],{"class":101,"line":1186},[99,94109,93287],{"class":109},[99,94111,155],{"class":105},[99,94113,92983],{"class":109},[99,94115,327],{"class":158},[99,94117,488],{"class":109},[99,94119,633],{"class":158},[99,94121,92988],{"class":109},[99,94123,403],{"class":158},[99,94125,488],{"class":109},[99,94127,181],{"class":158},[99,94129,116],{"class":109},[99,94131,94132],{"class":101,"line":1200},[99,94133,94134],{"class":168},"#这个重复之后二维变成一维\n",[99,94136,94137,94140,94142],{"class":101,"line":1206},[99,94138,94139],{"class":109},"np.repeat(aa,",[99,94141,187],{"class":158},[99,94143,116],{"class":109},[99,94145,94146],{"class":101,"line":1297},[99,94147,93909],{"class":214},[99,94149,94150],{"class":101,"line":1303},[99,94151,94152],{"class":214},"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",[99,94154,94155],{"class":101,"line":1315},[99,94156,93909],{"class":214},[99,94158,94159],{"class":101,"line":1598},[99,94160,94161],{"class":168},"#指定axis\n",[99,94163,94164,94166,94168,94170,94172,94174,94176],{"class":101,"line":1603},[99,94165,94139],{"class":109},[99,94167,187],{"class":158},[99,94169,488],{"class":109},[99,94171,47495],{"class":5203},[99,94173,155],{"class":105},[99,94175,301],{"class":158},[99,94177,116],{"class":109},[99,94179,94180],{"class":101,"line":1609},[99,94181,93545],{"class":168},[99,94183,94184],{"class":101,"line":1614},[99,94185,93909],{"class":214},[99,94187,94188],{"class":101,"line":1628},[99,94189,94190],{"class":214},"array([[ 1,  2,  3],\n",[99,94192,94193],{"class":101,"line":1633},[99,94194,94195],{"class":214},"       [ 1,  2,  3],\n",[99,94197,94198],{"class":101,"line":1639},[99,94199,94200],{"class":214},"       [ 4,  5,  6],\n",[99,94202,94203],{"class":101,"line":1660},[99,94204,94200],{"class":214},[99,94206,94207],{"class":101,"line":1665},[99,94208,94209],{"class":214},"       [ 7,  8,  9],\n",[99,94211,94212],{"class":101,"line":1679},[99,94213,94209],{"class":214},[99,94215,94216],{"class":101,"line":1684},[99,94217,94218],{"class":214},"       [10, 11, 12],\n",[99,94220,94221],{"class":101,"line":1713},[99,94222,94223],{"class":214},"       [10, 11, 12]])\n",[99,94225,94226],{"class":101,"line":1718},[99,94227,93909],{"class":214},[99,94229,94230,94232,94234,94236,94238,94240,94242],{"class":101,"line":1735},[99,94231,94139],{"class":109},[99,94233,187],{"class":158},[99,94235,488],{"class":109},[99,94237,47495],{"class":5203},[99,94239,155],{"class":105},[99,94241,327],{"class":158},[99,94243,116],{"class":109},[99,94245,94246],{"class":101,"line":1740},[99,94247,93545],{"class":168},[99,94249,94250],{"class":101,"line":1745},[99,94251,93909],{"class":214},[99,94253,94254],{"class":101,"line":1750},[99,94255,94256],{"class":214},"array([[ 1,  1,  2,  2,  3,  3],\n",[99,94258,94259],{"class":101,"line":1764},[99,94260,94261],{"class":214},"       [ 4,  4,  5,  5,  6,  6],\n",[99,94263,94264],{"class":101,"line":1769},[99,94265,94266],{"class":214},"       [ 7,  7,  8,  8,  9,  9],\n",[99,94268,94269],{"class":101,"line":2563},[99,94270,94271],{"class":214},"       [10, 10, 11, 11, 12, 12]])\n",[99,94273,94274],{"class":101,"line":2577},[99,94275,93909],{"class":214},[41,94277,94279],{"id":94278},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[90,94281,94283],{"className":30359,"code":94282,"language":30361,"meta":21,"style":21},"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",[96,94284,94285,94301,94306,94318,94322,94327,94337,94341],{"__ignoreMap":21},[99,94286,94287,94289,94291,94293,94295,94297,94299],{"class":101,"line":102},[99,94288,348],{"class":109},[99,94290,155],{"class":105},[99,94292,92983],{"class":109},[99,94294,327],{"class":158},[99,94296,488],{"class":109},[99,94298,429],{"class":158},[99,94300,116],{"class":109},[99,94302,94303],{"class":101,"line":22},[99,94304,94305],{"class":168},"#array([，2，3，4])\n",[99,94307,94308,94311,94313,94315],{"class":101,"line":1165},[99,94309,94310],{"class":109},"np.roll(a,",[99,94312,187],{"class":158},[99,94314,539],{"class":109},[99,94316,94317],{"class":168},"#传正数向后调多少位，传负数向前调多少位\n",[99,94319,94320],{"class":101,"line":1180},[99,94321,93545],{"class":168},[99,94323,94324],{"class":101,"line":1186},[99,94325,94326],{"class":168},"#array([3, 4, 1, 2])\n",[99,94328,94329,94331,94333,94335],{"class":101,"line":1200},[99,94330,94310],{"class":109},[99,94332,642],{"class":105},[99,94334,327],{"class":158},[99,94336,116],{"class":109},[99,94338,94339],{"class":101,"line":1206},[99,94340,93545],{"class":168},[99,94342,94343],{"class":101,"line":1297},[99,94344,94345],{"class":168},"#array([2, 3, 4, 1])\n",[14,94347,94348],{},[1448,94349],{"alt":21,"src":94350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[41,94352,94354],{"id":94353},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94356,94357],{},"resize()重新调整数组的大小",[14,94359,94360],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[90,94362,94364],{"className":30359,"code":94363,"language":30361,"meta":21,"style":21},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[96,94365,94366,94371,94384],{"__ignoreMap":21},[99,94367,94368],{"class":101,"line":102},[99,94369,94370],{"class":168},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[99,94372,94373,94376,94378,94380,94382],{"class":101,"line":22},[99,94374,94375],{"class":109},"np.resize(aa,(",[99,94377,187],{"class":158},[99,94379,488],{"class":109},[99,94381,454],{"class":158},[99,94383,30478],{"class":109},[99,94385,94386,94388,94390,94392,94394,94396],{"class":101,"line":1165},[99,94387,94375],{"class":109},[99,94389,187],{"class":158},[99,94391,488],{"class":109},[99,94393,530],{"class":158},[99,94395,82752],{"class":109},[99,94397,94398],{"class":168},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[41,94400,94402],{"id":94401},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94404,94405],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94407,94408],{},[1448,94409],{"alt":21,"src":94410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[41,94412,94414],{"id":94413},"_126-保存加载文件","12.6 保存加载文件",[14,94416,94417],{},"savetxt():将数据保存到txt文件中",[14,94419,94420],{},"loadtxt():从文件加载数据",[14,94422,94423],{},[1448,94424],{"alt":21,"src":94425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[41,94427,94429],{"id":94428},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94431,94432],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[41,94434,94436],{"id":94435},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94438,94439],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94441,94442],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94444,94445],{},[1448,94446],{"alt":21,"src":94447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[41,94449,94451],{"id":94450},"_129-where语句","12.9 where语句",[14,94453,94454],{},"np.where(条件,x,y)",[14,94456,94457],{},"如果条件为True,对应值为x,否则对应值为y",[14,94459,94460],{},[1448,94461],{"alt":21,"src":94462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[41,94464,94466],{"id":94465},"_1210-dot矩阵","12.10 dot()矩阵",[14,94468,94469],{},[1448,94470],{"alt":21,"src":94471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5113,94473,94474],{},"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":21,"searchDepth":22,"depth":22,"links":94476},[94477,94478,94479,94480,94481,94482,94483,94484,94485,94486],{"id":93839,"depth":22,"text":93840},{"id":94062,"depth":22,"text":94063},{"id":94278,"depth":22,"text":94279},{"id":94353,"depth":22,"text":94354},{"id":94401,"depth":22,"text":94402},{"id":94413,"depth":22,"text":94414},{"id":94428,"depth":22,"text":94429},{"id":94435,"depth":22,"text":94436},{"id":94450,"depth":22,"text":94451},{"id":94465,"depth":22,"text":94466},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93831,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94493,"title":94494,"body":94495,"description":23364,"extension":24,"meta":94848,"navigation":26,"path":94849,"seo":94850,"stem":94851,"__hash__":94852},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94496,"toc":94846},[94497,94500,94503,94506,94509,94512,94577,94579,94843],[10,94498,94494],{"id":94499},"_13数组排序",[14,94501,94502],{},"排序主要用到的方法是np.sort和np.argsort",[14,94504,94505],{},"其中np.sort()对数组直接排序",[14,94507,94508],{},"而np.argsort()是返回排序后的原始索引",[14,94510,94511],{},"①一维数组",[90,94513,94515],{"className":30359,"code":94514,"language":30361,"meta":21,"style":21},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[96,94516,94517,94521,94561,94569],{"__ignoreMap":21},[99,94518,94519],{"class":101,"line":102},[99,94520,93086],{"class":168},[99,94522,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555,94557,94559],{"class":101,"line":22},[99,94524,348],{"class":109},[99,94526,155],{"class":105},[99,94528,93005],{"class":109},[99,94530,181],{"class":158},[99,94532,488],{"class":109},[99,94534,608],{"class":158},[99,94536,488],{"class":109},[99,94538,505],{"class":158},[99,94540,488],{"class":109},[99,94542,885],{"class":158},[99,94544,488],{"class":109},[99,94546,389],{"class":158},[99,94548,488],{"class":109},[99,94550,1003],{"class":158},[99,94552,488],{"class":109},[99,94554,454],{"class":158},[99,94556,488],{"class":109},[99,94558,556],{"class":158},[99,94560,4643],{"class":109},[99,94562,94563,94566],{"class":101,"line":1165},[99,94564,94565],{"class":109},"np.sort(a)",[99,94567,94568],{"class":168},"#升序排序\n",[99,94570,94571,94574],{"class":101,"line":1180},[99,94572,94573],{"class":109},"np.argsort(a)",[99,94575,94576],{"class":168},"#按照元素大小来索引排序\n",[14,94578,93272],{},[90,94580,94582],{"className":30359,"code":94581,"language":30361,"meta":21,"style":21},"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",[96,94583,94584,94596,94622,94627,94631,94636,94641,94646,94651,94655,94663,94667,94672,94677,94682,94687,94691,94696,94709,94713,94718,94723,94728,94733,94737,94742,94754,94758,94762,94766,94770,94774,94778,94783,94798,94803,94812,94817,94821,94825,94830,94834,94839],{"__ignoreMap":21},[99,94585,94586,94589,94591,94593],{"class":101,"line":102},[99,94587,94588],{"class":109},"np.random.seed(",[99,94590,301],{"class":158},[99,94592,539],{"class":109},[99,94594,94595],{"class":168},"#保证每次值一样\n",[99,94597,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616,94618,94620],{"class":101,"line":22},[99,94599,93287],{"class":109},[99,94601,155],{"class":105},[99,94603,93095],{"class":109},[99,94605,421],{"class":158},[99,94607,488],{"class":109},[99,94609,31477],{"class":5203},[99,94611,155],{"class":105},[99,94613,110],{"class":109},[99,94615,403],{"class":158},[99,94617,488],{"class":109},[99,94619,454],{"class":158},[99,94621,30478],{"class":109},[99,94623,94624],{"class":101,"line":1165},[99,94625,94626],{"class":168},"#原数组：\n",[99,94628,94629],{"class":101,"line":1180},[99,94630,93909],{"class":214},[99,94632,94633],{"class":101,"line":1186},[99,94634,94635],{"class":214},"array([[44, 47, 64, 67, 67,  9],\n",[99,94637,94638],{"class":101,"line":1200},[99,94639,94640],{"class":214},"       [83, 21, 36, 87, 70, 88],\n",[99,94642,94643],{"class":101,"line":1206},[99,94644,94645],{"class":214},"       [88, 12, 58, 65, 39, 87],\n",[99,94647,94648],{"class":101,"line":1297},[99,94649,94650],{"class":214},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[99,94652,94653],{"class":101,"line":1303},[99,94654,93909],{"class":214},[99,94656,94657,94660],{"class":101,"line":1315},[99,94658,94659],{"class":109},"np.sort(aa)",[99,94661,94662],{"class":168},"#每行进行了排序\n",[99,94664,94665],{"class":101,"line":1598},[99,94666,93909],{"class":214},[99,94668,94669],{"class":101,"line":1603},[99,94670,94671],{"class":214},"array([[ 9, 44, 47, 64, 67, 67],\n",[99,94673,94674],{"class":101,"line":1609},[99,94675,94676],{"class":214},"       [21, 36, 70, 83, 87, 88],\n",[99,94678,94679],{"class":101,"line":1614},[99,94680,94681],{"class":214},"       [12, 39, 58, 65, 87, 88],\n",[99,94683,94684],{"class":101,"line":1628},[99,94685,94686],{"class":214},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[99,94688,94689],{"class":101,"line":1633},[99,94690,93909],{"class":214},[99,94692,94693],{"class":101,"line":1639},[99,94694,94695],{"class":168},"#axis=0时\n",[99,94697,94698,94701,94703,94705,94707],{"class":101,"line":1660},[99,94699,94700],{"class":109},"np.sort(aa,",[99,94702,47495],{"class":5203},[99,94704,155],{"class":105},[99,94706,301],{"class":158},[99,94708,116],{"class":109},[99,94710,94711],{"class":101,"line":1665},[99,94712,93909],{"class":214},[99,94714,94715],{"class":101,"line":1679},[99,94716,94717],{"class":214},"array([[44, 12, 36, 37, 25,  9],\n",[99,94719,94720],{"class":101,"line":1684},[99,94721,94722],{"class":214},"       [46, 21, 58, 65, 39, 77],\n",[99,94724,94725],{"class":101,"line":1713},[99,94726,94727],{"class":214},"       [83, 47, 64, 67, 67, 87],\n",[99,94729,94730],{"class":101,"line":1718},[99,94731,94732],{"class":214},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[99,94734,94735],{"class":101,"line":1735},[99,94736,93909],{"class":214},[99,94738,94739],{"class":101,"line":1740},[99,94740,94741],{"class":168},"#axis=1时,为默认值\n",[99,94743,94744,94746,94748,94750,94752],{"class":101,"line":1745},[99,94745,94700],{"class":109},[99,94747,47495],{"class":5203},[99,94749,155],{"class":105},[99,94751,327],{"class":158},[99,94753,116],{"class":109},[99,94755,94756],{"class":101,"line":1750},[99,94757,93909],{"class":214},[99,94759,94760],{"class":101,"line":1764},[99,94761,94671],{"class":214},[99,94763,94764],{"class":101,"line":1769},[99,94765,94676],{"class":214},[99,94767,94768],{"class":101,"line":2563},[99,94769,94681],{"class":214},[99,94771,94772],{"class":101,"line":2577},[99,94773,94686],{"class":214},[99,94775,94776],{"class":101,"line":2585},[99,94777,93909],{"class":214},[99,94779,94780],{"class":101,"line":2590},[99,94781,94782],{"class":168},"#按最后一列排序\n",[99,94784,94785,94787,94789,94792,94794,94796],{"class":101,"line":2596},[99,94786,373],{"class":109},[99,94788,155],{"class":105},[99,94790,94791],{"class":109},"aa[:,",[99,94793,642],{"class":105},[99,94795,327],{"class":158},[99,94797,33227],{"class":109},[99,94799,94800],{"class":101,"line":2602},[99,94801,94802],{"class":168},"#获取最后一列排好序的索引\n",[99,94804,94805,94807,94809],{"class":101,"line":2607},[99,94806,74039],{"class":109},[99,94808,155],{"class":105},[99,94810,94811],{"class":109},"np.argsort(b)\n",[99,94813,94814],{"class":101,"line":7935},[99,94815,94816],{"class":109},"aa[index]\n",[99,94818,94819],{"class":101,"line":7959},[99,94820,93909],{"class":214},[99,94822,94823],{"class":101,"line":7964},[99,94824,94635],{"class":214},[99,94826,94827],{"class":101,"line":7970},[99,94828,94829],{"class":214},"       [46, 88, 81, 37, 25, 77],\n",[99,94831,94832],{"class":101,"line":7997},[99,94833,94645],{"class":214},[99,94835,94836],{"class":101,"line":8002},[99,94837,94838],{"class":214},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[99,94840,94841],{"class":101,"line":8008},[99,94842,93909],{"class":214},[5113,94844,94845],{},"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":21,"searchDepth":22,"depth":22,"links":94847},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94494,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94854,"title":94855,"body":94856,"description":23364,"extension":24,"meta":94886,"navigation":26,"path":94887,"seo":94888,"stem":94889,"__hash__":94890},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94857,"toc":94884},[94858,94861,94864,94867,94870,94873,94876,94879],[10,94859,94855],{"id":94860},"_14广播机制",[14,94862,94863],{},"广播的规则：",[14,94865,94866],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94868,94869],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94871,94872],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94874,94875],{},"3.如果没有维度形状为1，则会引发异常",[14,94877,94878],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94880,94881],{},[1448,94882],{"alt":21,"src":94883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":21,"searchDepth":22,"depth":22,"links":94885},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94855,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94892,"title":94893,"body":94894,"description":23364,"extension":24,"meta":94992,"navigation":26,"path":94993,"seo":94994,"stem":94995,"__hash__":94996},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94895,"toc":94990},[94896,94899,94902,94987],[10,94897,94893],{"id":94898},"_15比较掩码",[14,94900,94901],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[90,94903,94905],{"className":30359,"code":94904,"language":30361,"meta":21,"style":21},"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",[96,94906,94907,94953,94964,94978,94982],{"__ignoreMap":21},[99,94908,94909,94911,94913,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950],{"class":101,"line":102},[99,94910,348],{"class":109},[99,94912,155],{"class":105},[99,94914,94915],{"class":109},"np.array([[",[99,94917,327],{"class":158},[99,94919,488],{"class":109},[99,94921,187],{"class":158},[99,94923,488],{"class":109},[99,94925,181],{"class":158},[99,94927,48011],{"class":109},[99,94929,582],{"class":158},[99,94931,488],{"class":109},[99,94933,608],{"class":158},[99,94935,488],{"class":109},[99,94937,633],{"class":158},[99,94939,48011],{"class":109},[99,94941,835],{"class":158},[99,94943,488],{"class":109},[99,94945,860],{"class":158},[99,94947,488],{"class":109},[99,94949,885],{"class":158},[99,94951,94952],{"class":109},"]])\n",[99,94954,94955,94957,94959,94961],{"class":101,"line":22},[99,94956,348],{"class":109},[99,94958,1020],{"class":105},[99,94960,810],{"class":158},[99,94962,94963],{"class":168},"#结果是一个由True,False组成的数组\n",[99,94965,94966,94969,94971,94973,94975],{"class":101,"line":1165},[99,94967,94968],{"class":109},"a[a",[99,94970,1020],{"class":105},[99,94972,810],{"class":158},[99,94974,1050],{"class":109},[99,94976,94977],{"class":168},"#小于20的元素会存到这个数组中\n",[99,94979,94980],{"class":101,"line":1180},[99,94981,93545],{"class":168},[99,94983,94984],{"class":101,"line":1186},[99,94985,94986],{"class":168},"#array([ 1,  2,  3, 11, 12, 13])\n",[5113,94988,94989],{},"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":21,"searchDepth":22,"depth":22,"links":94991},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94893,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94998,"title":94999,"body":95000,"description":23364,"extension":24,"meta":95092,"navigation":26,"path":95093,"seo":95094,"stem":95095,"__hash__":95096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95001,"toc":95090},[95002,95005,95008,95011,95014,95017,95082,95087],[10,95003,94999],{"id":95004},"_16魔法命令time",[14,95006,95007],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95009,95010],{},"%:行模式",[14,95012,95013],{},"%%:单元格模式",[14,95015,95016],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[90,95018,95020],{"className":30359,"code":95019,"language":30361,"meta":21,"style":21},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[96,95021,95022,95027,95034,95039,95048,95061,95065,95073],{"__ignoreMap":21},[99,95023,95024],{"class":101,"line":102},[99,95025,95026],{"class":168},"#程序执行时间\n",[99,95028,95029,95031],{"class":101,"line":22},[99,95030,30373],{"class":105},[99,95032,95033],{"class":109}," time \n",[99,95035,95036],{"class":101,"line":1165},[99,95037,95038],{"class":168},"#获取时间\n",[99,95040,95041,95044,95046],{"class":101,"line":1180},[99,95042,95043],{"class":109},"start",[99,95045,155],{"class":105},[99,95047,32399],{"class":109},[99,95049,95050,95053,95056,95058],{"class":101,"line":1186},[99,95051,95052],{"class":109},"time.sleep(",[99,95054,95055],{"class":158},"0.4",[99,95057,539],{"class":109},[99,95059,95060],{"class":168},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[99,95062,95063],{"class":101,"line":1200},[99,95064,95038],{"class":168},[99,95066,95067,95069,95071],{"class":101,"line":1206},[99,95068,45782],{"class":109},[99,95070,155],{"class":105},[99,95072,32399],{"class":109},[99,95074,95075,95077,95079],{"class":101,"line":1297},[99,95076,45782],{"class":109},[99,95078,642],{"class":105},[99,95080,95081],{"class":109},"start\n",[14,95083,95084],{},[1448,95085],{"alt":21,"src":95086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5113,95088,95089],{},"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":21,"searchDepth":22,"depth":22,"links":95091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94999,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95098,"title":95099,"body":95100,"description":23364,"extension":24,"meta":95135,"navigation":26,"path":95136,"seo":95137,"stem":95138,"__hash__":95139},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95101,"toc":95133},[95102,95105,95108,95111,95114,95117,95120,95123,95128],[10,95103,95099],{"id":95104},"_17魔法命令timeit",[14,95106,95107],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95109,95110],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95112,95113],{},"单元格模式：",[14,95115,95116],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95118,95119],{},"初始化语句执行次数由轮数来决定",[14,95121,95122],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95124,95125],{},[1448,95126],{"alt":21,"src":95127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95129,95130],{},[1448,95131],{"alt":21,"src":95132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":21,"searchDepth":22,"depth":22,"links":95134},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95099,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95141,"title":95142,"body":95143,"description":23364,"extension":24,"meta":95161,"navigation":26,"path":95162,"seo":95163,"stem":95164,"__hash__":95165},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95144,"toc":95159},[95145,95148,95151,95154],[10,95146,95142],{"id":95147},"_18魔法命令writefile和run",[14,95149,95150],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95152,95153],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95155,95156],{},[1448,95157],{"alt":21,"src":95158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":21,"searchDepth":22,"depth":22,"links":95160},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95142,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95167,"title":95168,"body":95169,"description":23364,"extension":24,"meta":95222,"navigation":26,"path":95223,"seo":95224,"stem":95225,"__hash__":95226},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95170,"toc":95220},[95171,95174,95177,95179,95182,95185,95190,95193,95196,95199,95202,95205,95208,95211,95214,95217],[10,95172,95168],{"id":95173},"_19魔法命令memit",[14,95175,95176],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95178,24588],{},[14,95180,95181],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95183,95184],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95186,95187],{},[1448,95188],{"alt":21,"src":95189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95191,95192],{},"补充：",[14,95194,95195],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95197,95198],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95200,95201],{},"解决方法：",[14,95203,95204],{},"1.cmd",[14,95206,95207],{},"2.依次输入以下代码：",[14,95209,95210],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95212,95213],{},"pip install --upgrade ipython",[14,95215,95216],{},"#升级 memory_profiler 和 setuptools",[14,95218,95219],{},"pip install --upgrade memory_profiler setuptools",{"title":21,"searchDepth":22,"depth":22,"links":95221},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95168,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95228,"title":95229,"body":95230,"description":23364,"extension":24,"meta":96876,"navigation":26,"path":96877,"seo":96878,"stem":96879,"__hash__":96880},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95231,"toc":96846},[95232,95235,95239,95243,95304,95307,95312,95316,95321,95326,95331,95336,95339,95344,95348,95352,95385,95388,95391,95394,95446,95449,95485,95488,95530,95534,95555,95557,95594,95596,95601,95603,95608,95612,95615,95643,95647,95651,95704,95708,95800,95804,95808,95811,95816,95820,95845,95850,95854,95857,95860,95863,95866,95869,95872,95875,95887,95891,95895,95898,95930,95933,95956,95959,95985,95988,96014,96017,96051,96054,96116,96120,96123,96127,96130,96156,96159,96162,96167,96170,96239,96241,96246,96307,96310,96321,96327,96332,96336,96339,96352,96356,96371,96373,96396,96398,96424,96427,96430,96433,96481,96483,96488,96492,96496,96523,96527,96554,96557,96562,96567,96657,96661,96719,96724,96727,96730,96772,96776,96832,96837,96840,96843],[10,95233,95229],{"id":95234},"_2创建数组",[41,95236,95238],{"id":95237},"_21-array函数创建数组","2.1 array()函数创建数组",[70,95240,95242],{"id":95241},"_221-函数语句","2.2.1 函数语句",[90,95244,95246],{"className":30359,"code":95245,"language":30361,"meta":21,"style":21},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[96,95247,95248],{"__ignoreMap":21},[99,95249,95250,95253,95256,95258,95260,95262,95264,95266,95269,95271,95274,95276,95279,95281,95283,95285,95288,95290,95293,95295,95298,95300,95302],{"class":101,"line":102},[99,95251,95252],{"class":109},"numpy.array(",[99,95254,95255],{"class":158},"object",[99,95257,12422],{"class":109},[99,95259,93481],{"class":5203},[99,95261,13551],{"class":105},[99,95263,38914],{"class":158},[99,95265,12422],{"class":109},[99,95267,95268],{"class":5203},"copy",[99,95270,13551],{"class":105},[99,95272,95273],{"class":158}," True",[99,95275,12422],{"class":109},[99,95277,95278],{"class":5203},"order",[99,95280,13551],{"class":105},[99,95282,38914],{"class":158},[99,95284,12422],{"class":109},[99,95286,95287],{"class":5203},"subok",[99,95289,13551],{"class":105},[99,95291,95292],{"class":158}," False",[99,95294,12422],{"class":109},[99,95296,95297],{"class":5203},"ndmin",[99,95299,13551],{"class":105},[99,95301,4079],{"class":158},[99,95303,116],{"class":109},[14,95305,95306],{},"参数：",[14,95308,95309],{},[1448,95310],{"alt":21,"src":95311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[70,95313,95315],{"id":95314},"_222-实例","2.2.2 实例",[14,95317,95318],{},[1448,95319],{"alt":21,"src":95320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95322,95323],{},[1448,95324],{"alt":21,"src":95325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95327,95328],{},[1448,95329],{"alt":21,"src":95330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95332,95333],{},[1448,95334],{"alt":21,"src":95335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95337,95338],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95340,95341],{},[1448,95342],{"alt":21,"src":95343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[41,95345,95347],{"id":95346},"_22-随机数创建数组","2.2 随机数创建数组",[70,95349,95351],{"id":95350},"_221-random语句","2.2.1 random语句",[90,95353,95355],{"className":30359,"code":95354,"language":30361,"meta":21,"style":21},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[96,95356,95357,95362,95367,95375,95380],{"__ignoreMap":21},[99,95358,95359],{"class":101,"line":102},[99,95360,95361],{"class":168},"#random.random()\n",[99,95363,95364],{"class":101,"line":22},[99,95365,95366],{"class":168},"#确定随机种子,就是每次运行结果是相同的\n",[99,95368,95369,95371,95373],{"class":101,"line":1165},[99,95370,94588],{"class":109},[99,95372,301],{"class":158},[99,95374,116],{"class":109},[99,95376,95377],{"class":101,"line":1180},[99,95378,95379],{"class":109},"np.random.random()\n",[99,95381,95382],{"class":101,"line":1186},[99,95383,95384],{"class":168},"#生成一个随机的数目\n",[14,95386,95387],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95389,95390],{},"可以指定数组形状 size",[14,95392,95393],{},"①生成一维数组",[90,95395,95397],{"className":30359,"code":95396,"language":30361,"meta":21,"style":21},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[96,95398,95399,95404,95417,95422,95438],{"__ignoreMap":21},[99,95400,95401],{"class":101,"line":102},[99,95402,95403],{"class":168},"#random.random(size())\n",[99,95405,95406,95409,95411,95413,95415],{"class":101,"line":22},[99,95407,95408],{"class":109},"np.random.random(",[99,95410,31477],{"class":5203},[99,95412,155],{"class":105},[99,95414,429],{"class":158},[99,95416,116],{"class":109},[99,95418,95419],{"class":101,"line":1165},[99,95420,95421],{"class":168},"#生成一位的五个元素\n",[99,95423,95424,95426,95428,95430,95432,95434,95436],{"class":101,"line":1180},[99,95425,348],{"class":109},[99,95427,155],{"class":105},[99,95429,95408],{"class":109},[99,95431,31477],{"class":5203},[99,95433,155],{"class":105},[99,95435,403],{"class":158},[99,95437,116],{"class":109},[99,95439,95440,95443],{"class":101,"line":1186},[99,95441,95442],{"class":109},"a.shape ",[99,95444,95445],{"class":168},"#输出数组形状\n",[14,95447,95448],{},"②生成二维数组",[90,95450,95452],{"className":30359,"code":95451,"language":30361,"meta":21,"style":21},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[96,95453,95454,95458,95480],{"__ignoreMap":21},[99,95455,95456],{"class":101,"line":102},[99,95457,93282],{"class":168},[99,95459,95460,95462,95464,95466,95468,95470,95472,95474,95476,95478],{"class":101,"line":22},[99,95461,93287],{"class":109},[99,95463,155],{"class":105},[99,95465,95408],{"class":109},[99,95467,31477],{"class":5203},[99,95469,155],{"class":105},[99,95471,110],{"class":109},[99,95473,403],{"class":158},[99,95475,488],{"class":109},[99,95477,429],{"class":158},[99,95479,30478],{"class":109},[99,95481,95482],{"class":101,"line":1165},[99,95483,95484],{"class":168},"#生成四行五列的数组\n",[14,95486,95487],{},"③生成三维数组",[90,95489,95491],{"className":30359,"code":95490,"language":30361,"meta":21,"style":21},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[96,95492,95493,95498,95525],{"__ignoreMap":21},[99,95494,95495],{"class":101,"line":102},[99,95496,95497],{"class":168},"#三维数组\n",[99,95499,95500,95503,95505,95507,95509,95511,95513,95515,95517,95519,95521,95523],{"class":101,"line":22},[99,95501,95502],{"class":109},"aaa",[99,95504,155],{"class":105},[99,95506,95408],{"class":109},[99,95508,31477],{"class":5203},[99,95510,155],{"class":105},[99,95512,110],{"class":109},[99,95514,187],{"class":158},[99,95516,488],{"class":109},[99,95518,181],{"class":158},[99,95520,488],{"class":109},[99,95522,403],{"class":158},[99,95524,30478],{"class":109},[99,95526,95527],{"class":101,"line":1165},[99,95528,95529],{"class":109},"aaa.shape\n",[70,95531,95533],{"id":95532},"_222-randint语句","2.2.2 randint语句",[90,95535,95537],{"className":30359,"code":95536,"language":30361,"meta":21,"style":21},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[96,95538,95539,95544],{"__ignoreMap":21},[99,95540,95541],{"class":101,"line":102},[99,95542,95543],{"class":168},"#生成随机的整数 random.randint(low,high,size)\n",[99,95545,95546,95548,95550,95552],{"class":101,"line":22},[99,95547,93095],{"class":109},[99,95549,429],{"class":158},[99,95551,13701],{"class":109},[99,95553,95554],{"class":168},"#0~5中的随机一个数\n",[14,95556,95393],{},[90,95558,95560],{"className":30359,"code":95559,"language":30361,"meta":21,"style":21},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[96,95561,95562,95567,95589],{"__ignoreMap":21},[99,95563,95564],{"class":101,"line":102},[99,95565,95566],{"class":168},"#一维\n",[99,95568,95569,95571,95573,95575,95577,95579,95581,95583,95585,95587],{"class":101,"line":22},[99,95570,93095],{"class":109},[99,95572,327],{"class":158},[99,95574,488],{"class":109},[99,95576,582],{"class":158},[99,95578,488],{"class":109},[99,95580,31477],{"class":5203},[99,95582,155],{"class":105},[99,95584,110],{"class":109},[99,95586,556],{"class":158},[99,95588,30478],{"class":109},[99,95590,95591],{"class":101,"line":1165},[99,95592,95593],{"class":168},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95595,95448],{},[14,95597,95598],{},[1448,95599],{"alt":21,"src":95600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95602,95487],{},[14,95604,95605],{},[1448,95606],{"alt":21,"src":95607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[70,95609,95611],{"id":95610},"_222-rand语句","2.2.2 rand语句",[14,95613,95614],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[90,95616,95618],{"className":30359,"code":95617,"language":30361,"meta":21,"style":21},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[96,95619,95620,95633,95638],{"__ignoreMap":21},[99,95621,95622,95625,95627,95629,95631],{"class":101,"line":102},[99,95623,95624],{"class":109},"np.random.rand(",[99,95626,421],{"class":158},[99,95628,488],{"class":109},[99,95630,556],{"class":158},[99,95632,116],{"class":109},[99,95634,95635],{"class":101,"line":22},[99,95636,95637],{"class":168},"#第一个参数100：行数，表示有100个样本\n",[99,95639,95640],{"class":101,"line":1165},[99,95641,95642],{"class":168},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[41,95644,95646],{"id":95645},"_23-arange创建数组","2.3 arange()创建数组",[70,95648,95650],{"id":95649},"_231-函数语句","2.3.1 函数语句",[90,95652,95654],{"className":30359,"code":95653,"language":30361,"meta":21,"style":21},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[96,95655,95656,95670,95675,95680,95685,95690,95695,95700],{"__ignoreMap":21},[99,95657,95658,95661,95663,95665,95668],{"class":101,"line":102},[99,95659,95660],{"class":109},"numpy.arange([start,] stop[, step], ",[99,95662,93481],{"class":5203},[99,95664,155],{"class":105},[99,95666,95667],{"class":158},"None",[99,95669,116],{"class":109},[99,95671,95672],{"class":101,"line":22},[99,95673,95674],{"class":168},"#参数\n",[99,95676,95677],{"class":101,"line":1165},[99,95678,95679],{"class":214},"\"\"\"\n",[99,95681,95682],{"class":101,"line":1180},[99,95683,95684],{"class":214},"start:起始值，可选，默认从 0 开始。\n",[99,95686,95687],{"class":101,"line":1186},[99,95688,95689],{"class":214},"stop:结束值（不包含该值）。\n",[99,95691,95692],{"class":101,"line":1200},[99,95693,95694],{"class":214},"step:步长，可选，默认是 1。可以为浮点数。\n",[99,95696,95697],{"class":101,"line":1206},[99,95698,95699],{"class":214},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[99,95701,95702],{"class":101,"line":1297},[99,95703,95679],{"class":214},[70,95705,95707],{"id":95706},"_232-实例","2.3.2 实例",[90,95709,95711],{"className":30359,"code":95710,"language":30361,"meta":21,"style":21},"#创建一维数组\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",[96,95712,95713,95717,95741,95746,95751,95755,95778,95782,95786,95791,95796],{"__ignoreMap":21},[99,95714,95715],{"class":101,"line":102},[99,95716,93086],{"class":168},[99,95718,95719,95721,95723,95725,95727,95729,95731,95733,95735,95737,95739],{"class":101,"line":22},[99,95720,92983],{"class":109},[99,95722,327],{"class":158},[99,95724,488],{"class":109},[99,95726,835],{"class":158},[99,95728,488],{"class":109},[99,95730,327],{"class":158},[99,95732,488],{"class":109},[99,95734,93481],{"class":5203},[99,95736,155],{"class":105},[99,95738,113],{"class":158},[99,95740,116],{"class":109},[99,95742,95743],{"class":101,"line":1165},[99,95744,95745],{"class":168},"#输出结果：\n",[99,95747,95748],{"class":101,"line":1180},[99,95749,95750],{"class":168},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[99,95752,95753],{"class":101,"line":1186},[99,95754,93928],{"class":168},[99,95756,95757,95760,95762,95764,95766,95769,95771,95773,95775],{"class":101,"line":1200},[99,95758,95759],{"class":109},"np.array([np.arange(",[99,95761,327],{"class":158},[99,95763,488],{"class":109},[99,95765,403],{"class":158},[99,95767,95768],{"class":109},"),np.arange(",[99,95770,403],{"class":158},[99,95772,488],{"class":109},[99,95774,479],{"class":158},[99,95776,95777],{"class":109},")])\n",[99,95779,95780],{"class":101,"line":1206},[99,95781,93545],{"class":168},[99,95783,95784],{"class":101,"line":1297},[99,95785,95679],{"class":214},[99,95787,95788],{"class":101,"line":1303},[99,95789,95790],{"class":214},"array([[1, 2, 3],\n",[99,95792,95793],{"class":101,"line":1315},[99,95794,95795],{"class":214},"       [4, 5, 6]])\n",[99,95797,95798],{"class":101,"line":1598},[99,95799,95679],{"class":214},[41,95801,95803],{"id":95802},"_24-生态分布","2.4 生态分布",[70,95805,95807],{"id":95806},"_241-标准正态分布","2.4.1 标准正态分布",[14,95809,95810],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95812,95813],{},[1448,95814],{"alt":21,"src":95815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[70,95817,95819],{"id":95818},"_242-常规正态分布","2.4.2 常规正态分布",[90,95821,95823],{"className":30359,"code":95822,"language":30361,"meta":21,"style":21},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[96,95824,95825,95830,95835,95840],{"__ignoreMap":21},[99,95826,95827],{"class":101,"line":102},[99,95828,95829],{"class":109},"random.normal(loc,scale,size)也可以生成正态分布\n",[99,95831,95832],{"class":101,"line":22},[99,95833,95834],{"class":168},"#loc:期望\n",[99,95836,95837],{"class":101,"line":1165},[99,95838,95839],{"class":168},"#scale:方差\n",[99,95841,95842],{"class":101,"line":1180},[99,95843,95844],{"class":168},"#size:用于确定是几维的数列\n",[14,95846,95847],{},[1448,95848],{"alt":21,"src":95849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[41,95851,95853],{"id":95852},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95855,95856],{},"ndim:秩，维度个数",[14,95858,95859],{},"size:数组元素的个数",[14,95861,95862],{},"shape:数组的形状",[14,95864,95865],{},"dtype:数组元素的类型",[14,95867,95868],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95870,95871],{},"他们都是属性，通过数组.属性的形式来确定",[14,95873,95874],{},"如果需要输出多个可以通过以下方式：",[90,95876,95878],{"className":30359,"code":95877,"language":30361,"meta":21,"style":21},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[96,95879,95880],{"__ignoreMap":21},[99,95881,95882,95884],{"class":101,"line":102},[99,95883,30396],{"class":158},[99,95885,95886],{"class":109},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[41,95888,95890],{"id":95889},"_26-其他方式创建数组","2.6 其他方式创建数组",[70,95892,95894],{"id":95893},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95896,95897],{},"①创建一维数组",[90,95899,95901],{"className":30359,"code":95900,"language":30361,"meta":21,"style":21},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[96,95902,95903,95912,95916,95921,95926],{"__ignoreMap":21},[99,95904,95905,95908,95910],{"class":101,"line":102},[99,95906,95907],{"class":109},"np.zeros(",[99,95909,556],{"class":158},[99,95911,116],{"class":109},[99,95913,95914],{"class":101,"line":22},[99,95915,95679],{"class":214},[99,95917,95918],{"class":101,"line":1165},[99,95919,95920],{"class":214},"输出结果：\n",[99,95922,95923],{"class":101,"line":1180},[99,95924,95925],{"class":214},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[99,95927,95928],{"class":101,"line":1186},[99,95929,95679],{"class":214},[14,95931,95932],{},"上方代码等价于：",[90,95934,95936],{"className":30359,"code":95935,"language":30361,"meta":21,"style":21},"np.zeros(shape=(10))#创建10个元素的0数组\n",[96,95937,95938],{"__ignoreMap":21},[99,95939,95940,95942,95945,95947,95949,95951,95953],{"class":101,"line":102},[99,95941,95907],{"class":109},[99,95943,95944],{"class":5203},"shape",[99,95946,155],{"class":105},[99,95948,110],{"class":109},[99,95950,556],{"class":158},[99,95952,82752],{"class":109},[99,95954,95955],{"class":168},"#创建10个元素的0数组\n",[14,95957,95958],{},"也可以指定类型",[90,95960,95962],{"className":30359,"code":95961,"language":30361,"meta":21,"style":21},"#指定类型\nnp.zeros(5,dtype=int)\n",[96,95963,95964,95969],{"__ignoreMap":21},[99,95965,95966],{"class":101,"line":102},[99,95967,95968],{"class":168},"#指定类型\n",[99,95970,95971,95973,95975,95977,95979,95981,95983],{"class":101,"line":22},[99,95972,95907],{"class":109},[99,95974,429],{"class":158},[99,95976,488],{"class":109},[99,95978,93481],{"class":5203},[99,95980,155],{"class":105},[99,95982,113],{"class":158},[99,95984,116],{"class":109},[14,95986,95987],{},"②创建二维数组",[90,95989,95991],{"className":30359,"code":95990,"language":30361,"meta":21,"style":21},"np.zeros((3,4),dtype=int)\n",[96,95992,95993],{"__ignoreMap":21},[99,95994,95995,95998,96000,96002,96004,96006,96008,96010,96012],{"class":101,"line":102},[99,95996,95997],{"class":109},"np.zeros((",[99,95999,181],{"class":158},[99,96001,488],{"class":109},[99,96003,403],{"class":158},[99,96005,42237],{"class":109},[99,96007,93481],{"class":5203},[99,96009,155],{"class":105},[99,96011,113],{"class":158},[99,96013,116],{"class":109},[14,96015,96016],{},"③创建三维数组",[90,96018,96020],{"className":30359,"code":96019,"language":30361,"meta":21,"style":21},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[96,96021,96022,96027],{"__ignoreMap":21},[99,96023,96024],{"class":101,"line":102},[99,96025,96026],{"class":168},"#创建三维数组\n",[99,96028,96029,96031,96033,96035,96037,96039,96041,96043,96045,96047,96049],{"class":101,"line":22},[99,96030,95997],{"class":109},[99,96032,181],{"class":158},[99,96034,488],{"class":109},[99,96036,403],{"class":158},[99,96038,488],{"class":109},[99,96040,429],{"class":158},[99,96042,42237],{"class":109},[99,96044,93481],{"class":5203},[99,96046,155],{"class":105},[99,96048,113],{"class":158},[99,96050,116],{"class":109},[14,96052,96053],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[90,96055,96057],{"className":30359,"code":96056,"language":30361,"meta":21,"style":21},"#使用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",[96,96058,96059,96064,96079,96084,96089,96111],{"__ignoreMap":21},[99,96060,96061],{"class":101,"line":102},[99,96062,96063],{"class":168},"#使用zeros_like将创建的一维数组变成全0的数组\n",[99,96065,96066,96068,96070,96072,96074,96076],{"class":101,"line":22},[99,96067,348],{"class":109},[99,96069,155],{"class":105},[99,96071,92983],{"class":109},[99,96073,403],{"class":158},[99,96075,539],{"class":109},[99,96077,96078],{"class":168},"#这个得到的结果：一维数组0，1，2，3\n",[99,96080,96081],{"class":101,"line":1165},[99,96082,96083],{"class":109},"np.zeros_like(a)\n",[99,96085,96086],{"class":101,"line":1180},[99,96087,96088],{"class":168},"#使用zeros_like将创建的二维数组变成全0的数组\n",[99,96090,96091,96093,96095,96097,96099,96101,96103,96105,96107,96109],{"class":101,"line":1186},[99,96092,93287],{"class":109},[99,96094,155],{"class":105},[99,96096,95408],{"class":109},[99,96098,31477],{"class":5203},[99,96100,155],{"class":105},[99,96102,110],{"class":109},[99,96104,403],{"class":158},[99,96106,488],{"class":109},[99,96108,429],{"class":158},[99,96110,30478],{"class":109},[99,96112,96113],{"class":101,"line":1200},[99,96114,96115],{"class":109},"np.zeros_like(aa)\n",[70,96117,96119],{"id":96118},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96121,96122],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[70,96124,96126],{"id":96125},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96128,96129],{},"①empty()用法",[90,96131,96133],{"className":30359,"code":96132,"language":30361,"meta":21,"style":21},"numpy.empty(shape,dtype=float,order='c')\n",[96,96134,96135],{"__ignoreMap":21},[99,96136,96137,96140,96142,96144,96146,96148,96150,96152,96154],{"class":101,"line":102},[99,96138,96139],{"class":109},"numpy.empty(shape,",[99,96141,93481],{"class":5203},[99,96143,155],{"class":105},[99,96145,149],{"class":158},[99,96147,488],{"class":109},[99,96149,95278],{"class":5203},[99,96151,155],{"class":105},[99,96153,76009],{"class":214},[99,96155,116],{"class":109},[14,96157,96158],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96160,96161],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96163,96164],{},[1448,96165],{"alt":21,"src":96166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96168,96169],{},"②empty()用法",[90,96171,96173],{"className":30359,"code":96172,"language":30361,"meta":21,"style":21},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[96,96174,96175,96196,96208,96229,96234],{"__ignoreMap":21},[99,96176,96177,96179,96181,96184,96186,96188,96190,96192,96194],{"class":101,"line":102},[99,96178,955],{"class":109},[99,96180,155],{"class":105},[99,96182,96183],{"class":109},"np.empty(",[99,96185,556],{"class":158},[99,96187,488],{"class":109},[99,96189,93481],{"class":5203},[99,96191,155],{"class":105},[99,96193,113],{"class":158},[99,96195,116],{"class":109},[99,96197,96198,96200,96202,96204,96206],{"class":101,"line":22},[99,96199,930],{"class":109},[99,96201,155],{"class":105},[99,96203,92983],{"class":109},[99,96205,429],{"class":158},[99,96207,116],{"class":109},[99,96209,96210,96213,96215,96218,96220,96222,96225,96227],{"class":101,"line":1165},[99,96211,96212],{"class":109},"np.add(",[99,96214,187],{"class":158},[99,96216,96217],{"class":109},",x,",[99,96219,93035],{"class":5203},[99,96221,155],{"class":105},[99,96223,96224],{"class":109},"y[:",[99,96226,429],{"class":158},[99,96228,4643],{"class":109},[99,96230,96231],{"class":101,"line":1180},[99,96232,96233],{"class":168},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[99,96235,96236],{"class":101,"line":1186},[99,96237,96238],{"class":109},"y\n",[14,96240,11501],{},[14,96242,96243],{},[1448,96244],{"alt":21,"src":96245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[90,96247,96249],{"className":30359,"code":96248,"language":30361,"meta":21,"style":21},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[96,96250,96251,96267,96287,96302],{"__ignoreMap":21},[99,96252,96253,96255,96257,96259,96261,96263,96265],{"class":101,"line":102},[99,96254,930],{"class":109},[99,96256,155],{"class":105},[99,96258,92983],{"class":109},[99,96260,327],{"class":158},[99,96262,488],{"class":109},[99,96264,454],{"class":158},[99,96266,116],{"class":109},[99,96268,96269,96271,96273,96275,96277,96279,96281,96283,96285],{"class":101,"line":22},[99,96270,955],{"class":109},[99,96272,155],{"class":105},[99,96274,96183],{"class":109},[99,96276,429],{"class":158},[99,96278,488],{"class":109},[99,96280,93481],{"class":5203},[99,96282,155],{"class":105},[99,96284,113],{"class":158},[99,96286,116],{"class":109},[99,96288,96289,96292,96294,96296,96298,96300],{"class":101,"line":1165},[99,96290,96291],{"class":109},"np.add(x,",[99,96293,187],{"class":158},[99,96295,488],{"class":109},[99,96297,93035],{"class":5203},[99,96299,155],{"class":105},[99,96301,93430],{"class":109},[99,96303,96304],{"class":101,"line":1180},[99,96305,96306],{"class":168},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96308,96309],{},"③empty_like()",[14,96311,96312],{},[259,96313,96314,96315,96320],{},"创建一个",[259,96316,96317],{},[259,96318,96319],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96322,96323,96326],{},[96,96324,96325],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96328,96329],{},[1448,96330],{"alt":21,"src":96331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[70,96333,96335],{"id":96334},"_264-用法","2.6.4 ？？用法",[14,96337,96338],{},"当想查看一个函数的参数时，可以通过？？来实现",[90,96340,96342],{"className":30359,"code":96341,"language":30361,"meta":21,"style":21},"np.full??\n",[96,96343,96344],{"__ignoreMap":21},[99,96345,96346,96349],{"class":101,"line":102},[99,96347,96348],{"class":109},"np.full",[99,96350,96351],{"class":77384},"??\n",[70,96353,96355],{"id":96354},"_265-full创建数组","2.6.5 full()创建数组",[90,96357,96359],{"className":30359,"code":96358,"language":30361,"meta":21,"style":21},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[96,96360,96361,96366],{"__ignoreMap":21},[99,96362,96363],{"class":101,"line":102},[99,96364,96365],{"class":109},"full(shape,fill_value)\n",[99,96367,96368],{"class":101,"line":22},[99,96369,96370],{"class":109},"创建全为某个指定值的数组\n",[14,96372,94511],{},[90,96374,96376],{"className":30359,"code":96375,"language":30361,"meta":21,"style":21},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[96,96377,96378,96383],{"__ignoreMap":21},[99,96379,96380],{"class":101,"line":102},[99,96381,96382],{"class":168},"#创建一个一维数组,以20进行填充\n",[99,96384,96385,96388,96390,96392,96394],{"class":101,"line":22},[99,96386,96387],{"class":109},"np.full(",[99,96389,556],{"class":158},[99,96391,488],{"class":109},[99,96393,810],{"class":158},[99,96395,116],{"class":109},[14,96397,93272],{},[90,96399,96401],{"className":30359,"code":96400,"language":30361,"meta":21,"style":21},"#创建二维数组\nnp.full((3,5),11)\n",[96,96402,96403,96407],{"__ignoreMap":21},[99,96404,96405],{"class":101,"line":102},[99,96406,93928],{"class":168},[99,96408,96409,96412,96414,96416,96418,96420,96422],{"class":101,"line":22},[99,96410,96411],{"class":109},"np.full((",[99,96413,181],{"class":158},[99,96415,488],{"class":109},[99,96417,429],{"class":158},[99,96419,42237],{"class":109},[99,96421,582],{"class":158},[99,96423,116],{"class":109},[14,96425,96426],{},"③full_like用法",[14,96428,96429],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96431,96432],{},"这里是指定填充而已",[90,96434,96436],{"className":30359,"code":96435,"language":30361,"meta":21,"style":21},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[96,96437,96438,96443,96467,96472],{"__ignoreMap":21},[99,96439,96440],{"class":101,"line":102},[99,96441,96442],{"class":168},"#创建一个指定形状数组\n",[99,96444,96445,96447,96449,96451,96453,96455,96457,96459,96461,96463,96465],{"class":101,"line":22},[99,96446,348],{"class":109},[99,96448,155],{"class":105},[99,96450,92983],{"class":109},[99,96452,327],{"class":158},[99,96454,488],{"class":109},[99,96456,435],{"class":158},[99,96458,92988],{"class":109},[99,96460,403],{"class":158},[99,96462,488],{"class":109},[99,96464,530],{"class":158},[99,96466,116],{"class":109},[99,96468,96469],{"class":101,"line":1165},[99,96470,96471],{"class":168},"#进行指定填充\n",[99,96473,96474,96477,96479],{"class":101,"line":1180},[99,96475,96476],{"class":109},"np.full_like(a,",[99,96478,556],{"class":158},[99,96480,116],{"class":109},[14,96482,11501],{},[14,96484,96485],{},[1448,96486],{"alt":21,"src":96487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[70,96489,96491],{"id":96490},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21985,96493,96495],{"id":96494},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[90,96497,96499],{"className":30359,"code":96498,"language":30361,"meta":21,"style":21},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[96,96500,96501,96518],{"__ignoreMap":21},[99,96502,96503,96506,96508,96510,96512,96514,96516],{"class":101,"line":102},[99,96504,96505],{"class":109},"np.eye(",[99,96507,403],{"class":158},[99,96509,488],{"class":109},[99,96511,93481],{"class":5203},[99,96513,155],{"class":105},[99,96515,113],{"class":158},[99,96517,116],{"class":109},[99,96519,96520],{"class":101,"line":22},[99,96521,96522],{"class":168},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21985,96524,96526],{"id":96525},"_2662-法2identity","2.6.6.2 法2：identity()",[90,96528,96530],{"className":30359,"code":96529,"language":30361,"meta":21,"style":21},"#identity()\nnp.identity(5,dtype=int)\n",[96,96531,96532,96537],{"__ignoreMap":21},[99,96533,96534],{"class":101,"line":102},[99,96535,96536],{"class":168},"#identity()\n",[99,96538,96539,96542,96544,96546,96548,96550,96552],{"class":101,"line":22},[99,96540,96541],{"class":109},"np.identity(",[99,96543,429],{"class":158},[99,96545,488],{"class":109},[99,96547,93481],{"class":5203},[99,96549,155],{"class":105},[99,96551,113],{"class":158},[99,96553,116],{"class":109},[14,96555,96556],{},"两个函数是有区别的",[14,96558,96559],{},[1448,96560],{"alt":21,"src":96561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96563,96564],{},[1448,96565],{"alt":21,"src":96566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[90,96568,96570],{"className":30359,"code":96569,"language":30361,"meta":21,"style":21},"# 创建一个 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",[96,96571,96572,96577,96589,96594,96599,96604,96609,96613,96618,96638,96642,96647,96652],{"__ignoreMap":21},[99,96573,96574],{"class":101,"line":102},[99,96575,96576],{"class":168},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[99,96578,96579,96581,96583,96585,96587],{"class":101,"line":22},[99,96580,96505],{"class":109},[99,96582,181],{"class":158},[99,96584,12422],{"class":109},[99,96586,403],{"class":158},[99,96588,116],{"class":109},[99,96590,96591],{"class":101,"line":1165},[99,96592,96593],{"class":168},"# 输出:\n",[99,96595,96596],{"class":101,"line":1180},[99,96597,96598],{"class":168},"# [[1. 0. 0. 0.]\n",[99,96600,96601],{"class":101,"line":1186},[99,96602,96603],{"class":168},"#  [0. 1. 0. 0.]\n",[99,96605,96606],{"class":101,"line":1200},[99,96607,96608],{"class":168},"#  [0. 0. 1. 0.]]\n",[99,96610,96611],{"class":101,"line":1206},[99,96612,2386],{"emptyLinePlaceholder":26},[99,96614,96615],{"class":101,"line":1297},[99,96616,96617],{"class":168},"# 对角线向上偏移1\n",[99,96619,96620,96622,96624,96626,96628,96630,96632,96634,96636],{"class":101,"line":1303},[99,96621,96505],{"class":109},[99,96623,181],{"class":158},[99,96625,12422],{"class":109},[99,96627,403],{"class":158},[99,96629,12422],{"class":109},[99,96631,603],{"class":5203},[99,96633,155],{"class":105},[99,96635,327],{"class":158},[99,96637,116],{"class":109},[99,96639,96640],{"class":101,"line":1315},[99,96641,96593],{"class":168},[99,96643,96644],{"class":101,"line":1598},[99,96645,96646],{"class":168},"# [[0. 1. 0. 0.]\n",[99,96648,96649],{"class":101,"line":1603},[99,96650,96651],{"class":168},"#  [0. 0. 1. 0.]\n",[99,96653,96654],{"class":101,"line":1609},[99,96655,96656],{"class":168},"#  [0. 0. 0. 1.]]\n",[70,96658,96660],{"id":96659},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[90,96662,96664],{"className":30359,"code":96663,"language":30361,"meta":21,"style":21},"#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",[96,96665,96666,96671,96675,96680,96685,96690,96695,96700,96705,96710,96715],{"__ignoreMap":21},[99,96667,96668],{"class":101,"line":102},[99,96669,96670],{"class":168},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[99,96672,96673],{"class":101,"line":22},[99,96674,95679],{"class":214},[99,96676,96677],{"class":101,"line":1165},[99,96678,96679],{"class":214},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[99,96681,96682],{"class":101,"line":1180},[99,96683,96684],{"class":214},"参数介绍：\n",[99,96686,96687],{"class":101,"line":1186},[99,96688,96689],{"class":214},"start：序列的起始值\n",[99,96691,96692],{"class":101,"line":1200},[99,96693,96694],{"class":214},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[99,96696,96697],{"class":101,"line":1206},[99,96698,96699],{"class":214},"num：要生长的等步长的样本数量，默认为50\n",[99,96701,96702],{"class":101,"line":1297},[99,96703,96704],{"class":214},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[99,96706,96707],{"class":101,"line":1303},[99,96708,96709],{"class":214},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[99,96711,96712],{"class":101,"line":1315},[99,96713,96714],{"class":214},"dtype：ndarry的数据类型\n",[99,96716,96717],{"class":101,"line":1598},[99,96718,95679],{"class":214},[14,96720,96721],{},[1448,96722],{"alt":21,"src":96723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96725,96726],{},"这里num=是可以省略的",[14,96728,96729],{},"也就是下方两行代码结果是一模一样的",[90,96731,96733],{"className":30359,"code":96732,"language":30361,"meta":21,"style":21},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[96,96734,96735,96752],{"__ignoreMap":21},[99,96736,96737,96740,96742,96744,96746,96748,96750],{"class":101,"line":102},[99,96738,96739],{"class":109},"np.linspace(",[99,96741,327],{"class":158},[99,96743,488],{"class":109},[99,96745,429],{"class":158},[99,96747,488],{"class":109},[99,96749,429],{"class":158},[99,96751,116],{"class":109},[99,96753,96754,96756,96758,96760,96762,96764,96766,96768,96770],{"class":101,"line":22},[99,96755,96739],{"class":109},[99,96757,327],{"class":158},[99,96759,488],{"class":109},[99,96761,429],{"class":158},[99,96763,488],{"class":109},[99,96765,1651],{"class":5203},[99,96767,155],{"class":105},[99,96769,429],{"class":158},[99,96771,116],{"class":109},[70,96773,96775],{"id":96774},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[90,96777,96779],{"className":30359,"code":96778,"language":30361,"meta":21,"style":21},"#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",[96,96780,96781,96786,96790,96795,96800,96805,96810,96814,96819,96824,96828],{"__ignoreMap":21},[99,96782,96783],{"class":101,"line":102},[99,96784,96785],{"class":168},"#logspace函数用于创建一个等比数列，格式如下：\n",[99,96787,96788],{"class":101,"line":22},[99,96789,95679],{"class":214},[99,96791,96792],{"class":101,"line":1165},[99,96793,96794],{"class":214},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[99,96796,96797],{"class":101,"line":1180},[99,96798,96799],{"class":214},"参数为：\n",[99,96801,96802],{"class":101,"line":1186},[99,96803,96804],{"class":214},"start:序列的起始位置为：base**start\n",[99,96806,96807],{"class":101,"line":1200},[99,96808,96809],{"class":214},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[99,96811,96812],{"class":101,"line":1206},[99,96813,96699],{"class":214},[99,96815,96816],{"class":101,"line":1297},[99,96817,96818],{"class":214},"endpoint：是否包含 stop 这个值，默认是 True\n",[99,96820,96821],{"class":101,"line":1303},[99,96822,96823],{"class":214},"base：对数的底数，默认是 10（常见对数）\n",[99,96825,96826],{"class":101,"line":1315},[99,96827,96714],{"class":214},[99,96829,96830],{"class":101,"line":1598},[99,96831,95679],{"class":214},[14,96833,96834],{},[1448,96835],{"alt":21,"src":96836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96838,96839],{},"logspace()函数中的num参数也是可以不写num=的",[14,96841,96842],{},"endpoint是不可以省略的",[5113,96844,96845],{},"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":21,"searchDepth":22,"depth":22,"links":96847},[96848,96852,96857,96861,96865,96866],{"id":95237,"depth":22,"text":95238,"children":96849},[96850,96851],{"id":95241,"depth":1165,"text":95242},{"id":95314,"depth":1165,"text":95315},{"id":95346,"depth":22,"text":95347,"children":96853},[96854,96855,96856],{"id":95350,"depth":1165,"text":95351},{"id":95532,"depth":1165,"text":95533},{"id":95610,"depth":1165,"text":95611},{"id":95645,"depth":22,"text":95646,"children":96858},[96859,96860],{"id":95649,"depth":1165,"text":95650},{"id":95706,"depth":1165,"text":95707},{"id":95802,"depth":22,"text":95803,"children":96862},[96863,96864],{"id":95806,"depth":1165,"text":95807},{"id":95818,"depth":1165,"text":95819},{"id":95852,"depth":22,"text":95853},{"id":95889,"depth":22,"text":95890,"children":96867},[96868,96869,96870,96871,96872,96873,96874,96875],{"id":95893,"depth":1165,"text":95894},{"id":96118,"depth":1165,"text":96119},{"id":96125,"depth":1165,"text":96126},{"id":96334,"depth":1165,"text":96335},{"id":96354,"depth":1165,"text":96355},{"id":96490,"depth":1165,"text":96491},{"id":96659,"depth":1165,"text":96660},{"id":96774,"depth":1165,"text":96775},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95229,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96882,"title":96883,"body":96884,"description":23364,"extension":24,"meta":96977,"navigation":26,"path":96978,"seo":96979,"stem":96980,"__hash__":96981},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96885,"toc":96975},[96886,96889,96892,96895,96898,96901,96904,96907,96910,96913,96916,96919,96921,96924,96927,96932,96935,96938,96972],[10,96887,96883],{"id":96888},"_20魔法命令mprun",[14,96890,96891],{},"逐行分析数据内存的使用情况",[14,96893,96894],{},"语法格式：",[14,96896,96897],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96899,96900],{},"分析结果列如下：",[14,96902,96903],{},"Line行号",[14,96905,96906],{},"Mem usage内存使用大小",[14,96908,96909],{},"increment内存增量",[14,96911,96912],{},"Line content代码内容",[14,96914,96915],{},"补充说明：",[14,96917,96918],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96920,95184],{},[14,96922,96923],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96925,96926],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96928,96929],{},[1448,96930],{"alt":21,"src":96931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96933,96934],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96936,96937],{},"这时候需要重新加载模块",[90,96939,96941],{"className":30359,"code":96940,"language":30361,"meta":21,"style":21},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[96,96942,96943,96948,96955,96960],{"__ignoreMap":21},[99,96944,96945],{"class":101,"line":102},[99,96946,96947],{"class":168},"#重新加载模块\n",[99,96949,96950,96952],{"class":101,"line":22},[99,96951,30373],{"class":105},[99,96953,96954],{"class":109}," importlib\n",[99,96956,96957],{"class":101,"line":1165},[99,96958,96959],{"class":109},"importlib.reload(mprun_test)\n",[99,96961,96962,96964,96967,96969],{"class":101,"line":1180},[99,96963,438],{"class":105},[99,96965,96966],{"class":109},"mprun ",[99,96968,642],{"class":105},[99,96970,96971],{"class":109},"f mprun_test.fun_test mprun_test.fun_test()\n",[5113,96973,96974],{},"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":21,"searchDepth":22,"depth":22,"links":96976},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96883,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96983,"title":96984,"body":96985,"description":23364,"extension":24,"meta":97002,"navigation":26,"path":97003,"seo":97004,"stem":97005,"__hash__":97006},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96986,"toc":97000},[96987,96990,96995],[10,96988,96984],{"id":96989},"_3一维数组的索引和切片",[14,96991,96992],{},[1448,96993],{"alt":21,"src":96994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,96996,96997],{},[1448,96998],{"alt":21,"src":96999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":21,"searchDepth":22,"depth":22,"links":97001},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96984,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97008,"title":97009,"body":97010,"description":23364,"extension":24,"meta":97493,"navigation":26,"path":97494,"seo":97495,"stem":97496,"__hash__":97497},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97011,"toc":97491},[97012,97015,97018,97023,97056,97059,97097,97100,97134,97137,97242,97245,97282,97285,97386,97389,97440,97443,97485,97488],[10,97013,97009],{"id":97014},"_4二维数组的索引与切片",[14,97016,97017],{},"①获取指定单个元素",[14,97019,97020],{},[1448,97021],{"alt":21,"src":97022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[90,97024,97026],{"className":30359,"code":97025,"language":30361,"meta":21,"style":21},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[96,97027,97028,97033,97038,97043],{"__ignoreMap":21},[99,97029,97030],{"class":101,"line":102},[99,97031,97032],{"class":168},"#获取元素9\n",[99,97034,97035],{"class":101,"line":22},[99,97036,97037],{"class":168},"#先获取所在行，再获取所在列\n",[99,97039,97040],{"class":101,"line":1165},[99,97041,97042],{"class":168},"#数组[行索引号，列索引号]\n",[99,97044,97045,97048,97050,97052,97054],{"class":101,"line":1180},[99,97046,97047],{"class":109},"a[",[99,97049,327],{"class":158},[99,97051,488],{"class":109},[99,97053,187],{"class":158},[99,97055,33227],{"class":109},[14,97057,97058],{},"②获取整行元素",[90,97060,97062],{"className":30359,"code":97061,"language":30361,"meta":21,"style":21},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[96,97063,97064,97069,97074,97082,97087],{"__ignoreMap":21},[99,97065,97066],{"class":101,"line":102},[99,97067,97068],{"class":168},"#获取整行 数组[行索引号]\n",[99,97070,97071],{"class":101,"line":22},[99,97072,97073],{"class":168},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[99,97075,97076,97078,97080],{"class":101,"line":1165},[99,97077,97047],{"class":109},[99,97079,187],{"class":158},[99,97081,33227],{"class":109},[99,97083,97084],{"class":101,"line":1180},[99,97085,97086],{"class":168},"#也可以负索引获取一行\n",[99,97088,97089,97091,97093,97095],{"class":101,"line":1186},[99,97090,97047],{"class":109},[99,97092,642],{"class":105},[99,97094,327],{"class":158},[99,97096,33227],{"class":109},[14,97098,97099],{},"③获取整列元素",[90,97101,97103],{"className":30359,"code":97102,"language":30361,"meta":21,"style":21},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[96,97104,97105,97110,97119,97124],{"__ignoreMap":21},[99,97106,97107],{"class":101,"line":102},[99,97108,97109],{"class":168},"#获取整列 数组名[:,列索引]\n",[99,97111,97112,97115,97117],{"class":101,"line":22},[99,97113,97114],{"class":109},"a[:,",[99,97116,187],{"class":158},[99,97118,33227],{"class":109},[99,97120,97121],{"class":101,"line":1165},[99,97122,97123],{"class":168},"#也可以负索引获取一列\n",[99,97125,97126,97128,97130,97132],{"class":101,"line":1180},[99,97127,97114],{"class":109},[99,97129,642],{"class":105},[99,97131,327],{"class":158},[99,97133,33227],{"class":109},[14,97135,97136],{},"④部分行部分列的元素",[90,97138,97140],{"className":30359,"code":97139,"language":30361,"meta":21,"style":21},"#部分行部分列 数组名[行切片，列切片]\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",[96,97141,97142,97147,97157,97161,97165,97170,97175,97179,97191,97195,97199,97204,97209,97214,97219,97223,97228],{"__ignoreMap":21},[99,97143,97144],{"class":101,"line":102},[99,97145,97146],{"class":168},"#部分行部分列 数组名[行切片，列切片]\n",[99,97148,97149,97152,97154],{"class":101,"line":22},[99,97150,97151],{"class":109},"a[:",[99,97153,187],{"class":158},[99,97155,97156],{"class":109},",:]\n",[99,97158,97159],{"class":101,"line":1165},[99,97160,93545],{"class":168},[99,97162,97163],{"class":101,"line":1180},[99,97164,93909],{"class":214},[99,97166,97167],{"class":101,"line":1186},[99,97168,97169],{"class":214},"array([[ 1,  2,  3,  4,  5,  6],\n",[99,97171,97172],{"class":101,"line":1200},[99,97173,97174],{"class":214},"       [ 7,  8,  9, 10, 11, 12]])\n",[99,97176,97177],{"class":101,"line":1206},[99,97178,93909],{"class":214},[99,97180,97181,97183,97185,97187,97189],{"class":101,"line":1297},[99,97182,97114],{"class":109},[99,97184,327],{"class":158},[99,97186,969],{"class":109},[99,97188,403],{"class":158},[99,97190,33227],{"class":109},[99,97192,97193],{"class":101,"line":1303},[99,97194,93545],{"class":168},[99,97196,97197],{"class":101,"line":1315},[99,97198,93909],{"class":214},[99,97200,97201],{"class":101,"line":1598},[99,97202,97203],{"class":214},"array([[ 2,  3,  4],\n",[99,97205,97206],{"class":101,"line":1603},[99,97207,97208],{"class":214},"       [ 8,  9, 10],\n",[99,97210,97211],{"class":101,"line":1609},[99,97212,97213],{"class":214},"       [14, 15, 16],\n",[99,97215,97216],{"class":101,"line":1614},[99,97217,97218],{"class":214},"       [20, 21, 22]])\n",[99,97220,97221],{"class":101,"line":1628},[99,97222,93909],{"class":214},[99,97224,97225],{"class":101,"line":1633},[99,97226,97227],{"class":168},"#对列行同时进行切片，使用了step参数\n",[99,97229,97230,97233,97235,97238,97240],{"class":101,"line":1639},[99,97231,97232],{"class":109},"a[::",[99,97234,187],{"class":158},[99,97236,97237],{"class":109},",::",[99,97239,187],{"class":158},[99,97241,33227],{"class":109},[14,97243,97244],{},"⑤同时获取两个元素",[90,97246,97248],{"className":30359,"code":97247,"language":30361,"meta":21,"style":21},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[96,97249,97250,97255,97260],{"__ignoreMap":21},[99,97251,97252],{"class":101,"line":102},[99,97253,97254],{"class":168},"#同时获取第三行第二列，第四行第一列\n",[99,97256,97257],{"class":101,"line":22},[99,97258,97259],{"class":168},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[99,97261,97262,97265,97267,97269,97271,97273,97275,97277,97279],{"class":101,"line":1165},[99,97263,97264],{"class":109},"a[(",[99,97266,187],{"class":158},[99,97268,488],{"class":109},[99,97270,181],{"class":158},[99,97272,42228],{"class":109},[99,97274,327],{"class":158},[99,97276,488],{"class":109},[99,97278,301],{"class":158},[99,97280,97281],{"class":109},")]\n",[14,97283,97284],{},"⑥切片，对行进行反向获取",[90,97286,97288],{"className":30359,"code":97287,"language":30361,"meta":21,"style":21},"#切片 对所有行进行反向获取\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",[96,97289,97290,97295,97305,97309,97313,97318,97323,97328,97333,97337,97342,97358,97362,97367,97372,97377,97382],{"__ignoreMap":21},[99,97291,97292],{"class":101,"line":102},[99,97293,97294],{"class":168},"#切片 对所有行进行反向获取\n",[99,97296,97297,97299,97301,97303],{"class":101,"line":22},[99,97298,97232],{"class":109},[99,97300,642],{"class":105},[99,97302,327],{"class":158},[99,97304,33227],{"class":109},[99,97306,97307],{"class":101,"line":1165},[99,97308,93545],{"class":168},[99,97310,97311],{"class":101,"line":1180},[99,97312,93909],{"class":214},[99,97314,97315],{"class":101,"line":1186},[99,97316,97317],{"class":214},"array([[19, 20, 21, 22, 23, 24],\n",[99,97319,97320],{"class":101,"line":1200},[99,97321,97322],{"class":214},"       [13, 14, 15, 16, 17, 18],\n",[99,97324,97325],{"class":101,"line":1206},[99,97326,97327],{"class":214},"       [ 7,  8,  9, 10, 11, 12],\n",[99,97329,97330],{"class":101,"line":1297},[99,97331,97332],{"class":214},"       [ 1,  2,  3,  4,  5,  6]])\n",[99,97334,97335],{"class":101,"line":1303},[99,97336,93909],{"class":214},[99,97338,97339],{"class":101,"line":1315},[99,97340,97341],{"class":168},"#对行列都进行反向切片获取\n",[99,97343,97344,97346,97348,97350,97352,97354,97356],{"class":101,"line":1598},[99,97345,97232],{"class":109},[99,97347,642],{"class":105},[99,97349,327],{"class":158},[99,97351,97237],{"class":109},[99,97353,642],{"class":105},[99,97355,327],{"class":158},[99,97357,33227],{"class":109},[99,97359,97360],{"class":101,"line":1603},[99,97361,93909],{"class":214},[99,97363,97364],{"class":101,"line":1609},[99,97365,97366],{"class":214},"array([[24, 23, 22, 21, 20, 19],\n",[99,97368,97369],{"class":101,"line":1614},[99,97370,97371],{"class":214},"       [18, 17, 16, 15, 14, 13],\n",[99,97373,97374],{"class":101,"line":1628},[99,97375,97376],{"class":214},"       [12, 11, 10,  9,  8,  7],\n",[99,97378,97379],{"class":101,"line":1633},[99,97380,97381],{"class":214},"       [ 6,  5,  4,  3,  2,  1]])\n",[99,97383,97384],{"class":101,"line":1639},[99,97385,93909],{"class":214},[14,97387,97388],{},"⑦修改元素",[90,97390,97392],{"className":30359,"code":97391,"language":30361,"meta":21,"style":21},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[96,97393,97394,97399,97417,97422],{"__ignoreMap":21},[99,97395,97396],{"class":101,"line":102},[99,97397,97398],{"class":168},"#获取前两行和前两列\n",[99,97400,97401,97404,97406,97408,97410,97413,97415],{"class":101,"line":22},[99,97402,97403],{"class":109},"sub_a",[99,97405,155],{"class":105},[99,97407,97151],{"class":109},[99,97409,187],{"class":158},[99,97411,97412],{"class":109},",:",[99,97414,187],{"class":158},[99,97416,33227],{"class":109},[99,97418,97419],{"class":101,"line":1165},[99,97420,97421],{"class":168},"#修改sub_a第一个元素的值\n",[99,97423,97424,97427,97429,97431,97433,97435,97437],{"class":101,"line":1180},[99,97425,97426],{"class":109},"sub_a[",[99,97428,301],{"class":158},[99,97430,488],{"class":109},[99,97432,301],{"class":158},[99,97434,1050],{"class":109},[99,97436,155],{"class":105},[99,97438,97439],{"class":158},"100\n",[14,97441,97442],{},"⑧数组复制copy()",[90,97444,97446],{"className":30359,"code":97445,"language":30361,"meta":21,"style":21},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[96,97447,97448,97453,97463,97468],{"__ignoreMap":21},[99,97449,97450],{"class":101,"line":102},[99,97451,97452],{"class":168},"#数组复制\n",[99,97454,97455,97458,97460],{"class":101,"line":22},[99,97456,97457],{"class":109},"copy_a",[99,97459,155],{"class":105},[99,97461,97462],{"class":109},"np.copy(sub_a)\n",[99,97464,97465],{"class":101,"line":1165},[99,97466,97467],{"class":168},"#修改copy_a后不影响原数组\n",[99,97469,97470,97473,97475,97477,97479,97481,97483],{"class":101,"line":1180},[99,97471,97472],{"class":109},"copy_a[",[99,97474,301],{"class":158},[99,97476,488],{"class":109},[99,97478,301],{"class":158},[99,97480,1050],{"class":109},[99,97482,155],{"class":105},[99,97484,97439],{"class":158},[14,97486,97487],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5113,97489,97490],{},"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":21,"searchDepth":22,"depth":22,"links":97492},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97009,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97499,"title":97500,"body":97501,"description":23364,"extension":24,"meta":97993,"navigation":26,"path":97994,"seo":97995,"stem":97996,"__hash__":97997},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97502,"toc":97985},[97503,97506,97510,97513,97516,97569,97572,97597,97600,97619,97639,97642,97658,97662,97708,97712,97754,97758,97761,97764,97767,97770,97773,97835,97895,97899,97902,97959,97963,97968,97977,97982],[10,97504,97500],{"id":97505},"_5改变数组的维度",[41,97507,97509],{"id":97508},"_51-使用reshape","5.1 使用reshape()",[14,97511,97512],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97514,97515],{},"①一维数组转换为二维数组",[90,97517,97519],{"className":30359,"code":97518,"language":30361,"meta":21,"style":21},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[96,97520,97521,97537,97542,97547,97552],{"__ignoreMap":21},[99,97522,97523,97525,97527,97529,97531,97533,97535],{"class":101,"line":102},[99,97524,348],{"class":109},[99,97526,155],{"class":105},[99,97528,92983],{"class":109},[99,97530,327],{"class":158},[99,97532,488],{"class":109},[99,97534,633],{"class":158},[99,97536,116],{"class":109},[99,97538,97539],{"class":101,"line":22},[99,97540,97541],{"class":168},"#将一维数组进行转换\n",[99,97543,97544],{"class":101,"line":1165},[99,97545,97546],{"class":168},"#注意点：元素个数不可以变\n",[99,97548,97549],{"class":101,"line":1180},[99,97550,97551],{"class":168},"#转换维度要保持一致，不一致就异常！！！\n",[99,97553,97554,97556,97558,97561,97563,97565,97567],{"class":101,"line":1186},[99,97555,93287],{"class":109},[99,97557,155],{"class":105},[99,97559,97560],{"class":109},"a.reshape(",[99,97562,187],{"class":158},[99,97564,488],{"class":109},[99,97566,454],{"class":158},[99,97568,116],{"class":109},[14,97570,97571],{},"②一维数组转换为三维数组",[90,97573,97575],{"className":30359,"code":97574,"language":30361,"meta":21,"style":21},"aaa=a.reshape(2,3,2)\n",[96,97576,97577],{"__ignoreMap":21},[99,97578,97579,97581,97583,97585,97587,97589,97591,97593,97595],{"class":101,"line":102},[99,97580,95502],{"class":109},[99,97582,155],{"class":105},[99,97584,97560],{"class":109},[99,97586,187],{"class":158},[99,97588,488],{"class":109},[99,97590,181],{"class":158},[99,97592,488],{"class":109},[99,97594,187],{"class":158},[99,97596,116],{"class":109},[14,97598,97599],{},"③二维数组转化为一维数组",[90,97601,97603],{"className":30359,"code":97602,"language":30361,"meta":21,"style":21},"#知道元素个数：\naa.reshape(12)\n",[96,97604,97605,97610],{"__ignoreMap":21},[99,97606,97607],{"class":101,"line":102},[99,97608,97609],{"class":168},"#知道元素个数：\n",[99,97611,97612,97615,97617],{"class":101,"line":22},[99,97613,97614],{"class":109},"aa.reshape(",[99,97616,608],{"class":158},[99,97618,116],{"class":109},[90,97620,97622],{"className":30359,"code":97621,"language":30361,"meta":21,"style":21},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[96,97623,97624,97629],{"__ignoreMap":21},[99,97625,97626],{"class":101,"line":102},[99,97627,97628],{"class":168},"#不知道元素个数，参数传递-1\n",[99,97630,97631,97633,97635,97637],{"class":101,"line":22},[99,97632,97614],{"class":109},[99,97634,642],{"class":105},[99,97636,327],{"class":158},[99,97638,116],{"class":109},[14,97640,97641],{},"④三维数组转换为一维数组",[90,97643,97645],{"className":30359,"code":97644,"language":30361,"meta":21,"style":21},"aaa.reshape(-1)\n",[96,97646,97647],{"__ignoreMap":21},[99,97648,97649,97652,97654,97656],{"class":101,"line":102},[99,97650,97651],{"class":109},"aaa.reshape(",[99,97653,642],{"class":105},[99,97655,327],{"class":158},[99,97657,116],{"class":109},[41,97659,97661],{"id":97660},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[90,97663,97665],{"className":30359,"code":97664,"language":30361,"meta":21,"style":21},"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",[96,97666,97667,97694,97699,97703],{"__ignoreMap":21},[99,97668,97669,97671,97673,97675,97677,97679,97681,97683,97685,97687,97689,97691],{"class":101,"line":102},[99,97670,93287],{"class":109},[99,97672,155],{"class":105},[99,97674,92983],{"class":109},[99,97676,327],{"class":158},[99,97678,488],{"class":109},[99,97680,633],{"class":158},[99,97682,92988],{"class":109},[99,97684,187],{"class":158},[99,97686,488],{"class":109},[99,97688,454],{"class":158},[99,97690,539],{"class":109},[99,97692,97693],{"class":168},"#转换为2行6列的数组\n",[99,97695,97696],{"class":101,"line":22},[99,97697,97698],{"class":109},"aa.revel()\n",[99,97700,97701],{"class":101,"line":1165},[99,97702,93545],{"class":168},[99,97704,97705],{"class":101,"line":1180},[99,97706,97707],{"class":168},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[41,97709,97711],{"id":97710},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[90,97713,97715],{"className":30359,"code":97714,"language":30361,"meta":21,"style":21},"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",[96,97716,97717,97741,97746,97750],{"__ignoreMap":21},[99,97718,97719,97721,97723,97725,97727,97729,97731,97733,97735,97737,97739],{"class":101,"line":102},[99,97720,93287],{"class":109},[99,97722,155],{"class":105},[99,97724,92983],{"class":109},[99,97726,327],{"class":158},[99,97728,488],{"class":109},[99,97730,633],{"class":158},[99,97732,92988],{"class":109},[99,97734,187],{"class":158},[99,97736,488],{"class":109},[99,97738,454],{"class":158},[99,97740,116],{"class":109},[99,97742,97743],{"class":101,"line":22},[99,97744,97745],{"class":109},"aa.flatten()\n",[99,97747,97748],{"class":101,"line":1165},[99,97749,93545],{"class":168},[99,97751,97752],{"class":101,"line":1180},[99,97753,97707],{"class":168},[41,97755,97757],{"id":97756},"_54-使用resize","5.4 使用resize()",[14,97759,97760],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97762,97763],{},"通过resize方法可以改变数组的维度",[14,97765,97766],{},"#resize修改数组维度",[14,97768,97769],{},"#以元组的形式指定形状",[14,97771,97772],{},"#改变的是原数组",[90,97774,97776],{"className":30359,"code":97775,"language":30361,"meta":21,"style":21},"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",[96,97777,97778,97794,97814,97827,97831],{"__ignoreMap":21},[99,97779,97780,97782,97784,97786,97788,97790,97792],{"class":101,"line":102},[99,97781,348],{"class":109},[99,97783,155],{"class":105},[99,97785,92983],{"class":109},[99,97787,327],{"class":158},[99,97789,488],{"class":109},[99,97791,633],{"class":158},[99,97793,116],{"class":109},[99,97795,97796,97799,97801,97803,97805,97807,97809,97811],{"class":101,"line":22},[99,97797,97798],{"class":109},"a.shape",[99,97800,155],{"class":105},[99,97802,110],{"class":109},[99,97804,187],{"class":158},[99,97806,488],{"class":109},[99,97808,454],{"class":158},[99,97810,539],{"class":109},[99,97812,97813],{"class":168},"#改变了原数组\n",[99,97815,97816,97818,97820,97823,97825],{"class":101,"line":1165},[99,97817,348],{"class":109},[99,97819,155],{"class":105},[99,97821,97822],{"class":109},"resize((",[99,97824,608],{"class":158},[99,97826,30478],{"class":109},[99,97828,97829],{"class":101,"line":1180},[99,97830,93545],{"class":168},[99,97832,97833],{"class":101,"line":1186},[99,97834,97707],{"class":168},[90,97836,97838],{"className":30359,"code":97837,"language":30361,"meta":21,"style":21},"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",[96,97839,97840,97853,97857,97861,97866,97871,97876,97881,97886,97891],{"__ignoreMap":21},[99,97841,97842,97845,97847,97849,97851],{"class":101,"line":102},[99,97843,97844],{"class":109},"a.resize((",[99,97846,454],{"class":158},[99,97848,488],{"class":109},[99,97850,187],{"class":158},[99,97852,30478],{"class":109},[99,97854,97855],{"class":101,"line":22},[99,97856,93545],{"class":168},[99,97858,97859],{"class":101,"line":1165},[99,97860,93909],{"class":214},[99,97862,97863],{"class":101,"line":1180},[99,97864,97865],{"class":214},"array([[ 1,  2],\n",[99,97867,97868],{"class":101,"line":1186},[99,97869,97870],{"class":214},"       [ 3,  4],\n",[99,97872,97873],{"class":101,"line":1200},[99,97874,97875],{"class":214},"       [ 5,  6],\n",[99,97877,97878],{"class":101,"line":1206},[99,97879,97880],{"class":214},"       [ 7,  8],\n",[99,97882,97883],{"class":101,"line":1297},[99,97884,97885],{"class":214},"       [ 9, 10],\n",[99,97887,97888],{"class":101,"line":1303},[99,97889,97890],{"class":214},"       [11, 12]])\n",[99,97892,97893],{"class":101,"line":1315},[99,97894,93909],{"class":214},[41,97896,97898],{"id":97897},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97900,97901],{},"改变了原数组",[90,97903,97905],{"className":30359,"code":97904,"language":30361,"meta":21,"style":21},"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",[96,97906,97907,97923,97939,97943,97947,97951,97955],{"__ignoreMap":21},[99,97908,97909,97911,97913,97915,97917,97919,97921],{"class":101,"line":102},[99,97910,348],{"class":109},[99,97912,155],{"class":105},[99,97914,92983],{"class":109},[99,97916,327],{"class":158},[99,97918,488],{"class":109},[99,97920,633],{"class":158},[99,97922,116],{"class":109},[99,97924,97925,97927,97929,97931,97933,97935,97937],{"class":101,"line":22},[99,97926,97798],{"class":109},[99,97928,155],{"class":105},[99,97930,110],{"class":109},[99,97932,187],{"class":158},[99,97934,488],{"class":109},[99,97936,454],{"class":158},[99,97938,116],{"class":109},[99,97940,97941],{"class":101,"line":1165},[99,97942,93545],{"class":168},[99,97944,97945],{"class":101,"line":1180},[99,97946,93909],{"class":214},[99,97948,97949],{"class":101,"line":1186},[99,97950,97169],{"class":214},[99,97952,97953],{"class":101,"line":1200},[99,97954,97174],{"class":214},[99,97956,97957],{"class":101,"line":1206},[99,97958,93909],{"class":214},[41,97960,97962],{"id":97961},"_56-重要比较","5.6 重要比较：",[14,97964,97965],{},[1448,97966],{"alt":21,"src":97967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97969,97970,97971,97973,97974,97976],{},"口诀：NumPy 函数要么用 ",[96,97972,95944],{},"，要么用 ",[96,97975,31477],{},"，创建结构用 shape，造数据用 size",[14,97978,97979],{},[1448,97980],{"alt":21,"src":97981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5113,97983,97984],{},"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":21,"searchDepth":22,"depth":22,"links":97986},[97987,97988,97989,97990,97991,97992],{"id":97508,"depth":22,"text":97509},{"id":97660,"depth":22,"text":97661},{"id":97710,"depth":22,"text":97711},{"id":97756,"depth":22,"text":97757},{"id":97897,"depth":22,"text":97898},{"id":97961,"depth":22,"text":97962},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97500,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97999,"title":98000,"body":98001,"description":23364,"extension":24,"meta":99073,"navigation":26,"path":99074,"seo":99075,"stem":99076,"__hash__":99077},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98002,"toc":99067},[98003,98006,98010,98013,98016,98019,98084,98087,98127,98130,98212,98215,98220,98242,98244,98249,98254,98257,98260,98415,98418,98620,98624,98627,98630,98698,98700,98705,98708,98711,98791,98795,98798,98800,98873,98875,98880,98882,98962,98966,98969,98972,98975,98978,98981,98984,99064],[10,98004,98000],{"id":98005},"_6数组的拼接",[41,98007,98009],{"id":98008},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98011,98012],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98014,98015],{},"函数内部传两个数列构成的数列或者元组",[14,98017,98018],{},"①一维数组的拼接",[90,98020,98022],{"className":30359,"code":98021,"language":30361,"meta":21,"style":21},"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",[96,98023,98024,98044,98064,98069,98074,98079],{"__ignoreMap":21},[99,98025,98026,98028,98030,98032,98034,98036,98038,98040,98042],{"class":101,"line":102},[99,98027,348],{"class":109},[99,98029,155],{"class":105},[99,98031,93005],{"class":109},[99,98033,327],{"class":158},[99,98035,488],{"class":109},[99,98037,187],{"class":158},[99,98039,488],{"class":109},[99,98041,181],{"class":158},[99,98043,4643],{"class":109},[99,98045,98046,98048,98050,98052,98054,98056,98058,98060,98062],{"class":101,"line":22},[99,98047,373],{"class":109},[99,98049,155],{"class":105},[99,98051,93005],{"class":109},[99,98053,403],{"class":158},[99,98055,488],{"class":109},[99,98057,429],{"class":158},[99,98059,488],{"class":109},[99,98061,454],{"class":158},[99,98063,4643],{"class":109},[99,98065,98066],{"class":101,"line":1165},[99,98067,98068],{"class":168},"#调用concatenate进行数组拼接\n",[99,98070,98071],{"class":101,"line":1180},[99,98072,98073],{"class":109},"np.concatenate((a,b))\n",[99,98075,98076],{"class":101,"line":1186},[99,98077,98078],{"class":168},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[99,98080,98081],{"class":101,"line":1200},[99,98082,98083],{"class":168},"#np.concatenate([a,b])\n",[14,98085,98086],{},"②一维多个数组拼接",[90,98088,98090],{"className":30359,"code":98089,"language":30361,"meta":21,"style":21},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[96,98091,98092,98097,98117,98122],{"__ignoreMap":21},[99,98093,98094],{"class":101,"line":102},[99,98095,98096],{"class":168},"#也可以多个数组进行拼接\n",[99,98098,98099,98101,98103,98105,98107,98109,98111,98113,98115],{"class":101,"line":22},[99,98100,398],{"class":109},[99,98102,155],{"class":105},[99,98104,93005],{"class":109},[99,98106,556],{"class":158},[99,98108,488],{"class":109},[99,98110,582],{"class":158},[99,98112,488],{"class":109},[99,98114,633],{"class":158},[99,98116,4643],{"class":109},[99,98118,98119],{"class":101,"line":1165},[99,98120,98121],{"class":109},"c\n",[99,98123,98124],{"class":101,"line":1180},[99,98125,98126],{"class":109},"np.concatenate((a,b,c))\n",[14,98128,98129],{},"③二维数组拼接",[90,98131,98133],{"className":30359,"code":98132,"language":30361,"meta":21,"style":21},"#二维数组使用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",[96,98134,98135,98140,98164,98189,98194,98199],{"__ignoreMap":21},[99,98136,98137],{"class":101,"line":102},[99,98138,98139],{"class":168},"#二维数组使用concatenate进行拼接\n",[99,98141,98142,98144,98146,98148,98150,98152,98154,98156,98158,98160,98162],{"class":101,"line":22},[99,98143,93287],{"class":109},[99,98145,155],{"class":105},[99,98147,92983],{"class":109},[99,98149,327],{"class":158},[99,98151,488],{"class":109},[99,98153,633],{"class":158},[99,98155,92988],{"class":109},[99,98157,181],{"class":158},[99,98159,488],{"class":109},[99,98161,403],{"class":158},[99,98163,116],{"class":109},[99,98165,98166,98169,98171,98173,98175,98177,98179,98181,98183,98185,98187],{"class":101,"line":1165},[99,98167,98168],{"class":109},"bb",[99,98170,155],{"class":105},[99,98172,92983],{"class":109},[99,98174,447],{"class":158},[99,98176,488],{"class":109},[99,98178,752],{"class":158},[99,98180,92988],{"class":109},[99,98182,181],{"class":158},[99,98184,488],{"class":109},[99,98186,403],{"class":158},[99,98188,116],{"class":109},[99,98190,98191],{"class":101,"line":1180},[99,98192,98193],{"class":168},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[99,98195,98196],{"class":101,"line":1186},[99,98197,98198],{"class":168},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[99,98200,98201,98204,98206,98208,98210],{"class":101,"line":1200},[99,98202,98203],{"class":109},"np.concatenate((aa,bb),",[99,98205,47495],{"class":5203},[99,98207,155],{"class":105},[99,98209,301],{"class":158},[99,98211,116],{"class":109},[14,98213,98214],{},"结果：",[14,98216,98217],{},[1448,98218],{"alt":21,"src":98219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[90,98221,98223],{"className":30359,"code":98222,"language":30361,"meta":21,"style":21},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[96,98224,98225,98230],{"__ignoreMap":21},[99,98226,98227],{"class":101,"line":102},[99,98228,98229],{"class":168},"#指定axis为1进行拼接\n",[99,98231,98232,98234,98236,98238,98240],{"class":101,"line":22},[99,98233,98203],{"class":109},[99,98235,47495],{"class":5203},[99,98237,155],{"class":105},[99,98239,327],{"class":158},[99,98241,116],{"class":109},[14,98243,98214],{},[14,98245,98246],{},[1448,98247],{"alt":21,"src":98248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98250,98251],{},[259,98252,98253],{},"二维数组总结：0竖着方向，1横着方向",[14,98255,98256],{},"④三维数组拼接",[14,98258,98259],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[90,98261,98263],{"className":30359,"code":98262,"language":30361,"meta":21,"style":21},"#两个三行六列\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",[96,98264,98265,98270,98298,98328,98333,98350,98355,98360,98365,98382,98387,98392,98397,98410],{"__ignoreMap":21},[99,98266,98267],{"class":101,"line":102},[99,98268,98269],{"class":168},"#两个三行六列\n",[99,98271,98272,98274,98276,98278,98280,98282,98284,98286,98288,98290,98292,98294,98296],{"class":101,"line":22},[99,98273,95502],{"class":109},[99,98275,155],{"class":105},[99,98277,92983],{"class":109},[99,98279,327],{"class":158},[99,98281,488],{"class":109},[99,98283,435],{"class":158},[99,98285,92988],{"class":109},[99,98287,187],{"class":158},[99,98289,488],{"class":109},[99,98291,181],{"class":158},[99,98293,488],{"class":109},[99,98295,454],{"class":158},[99,98297,116],{"class":109},[99,98299,98300,98303,98305,98307,98309,98311,98314,98316,98318,98320,98322,98324,98326],{"class":101,"line":1165},[99,98301,98302],{"class":109},"bbb",[99,98304,155],{"class":105},[99,98306,92983],{"class":109},[99,98308,447],{"class":158},[99,98310,488],{"class":109},[99,98312,98313],{"class":158},"137",[99,98315,92988],{"class":109},[99,98317,187],{"class":158},[99,98319,488],{"class":109},[99,98321,181],{"class":158},[99,98323,488],{"class":109},[99,98325,454],{"class":158},[99,98327,116],{"class":109},[99,98329,98330],{"class":101,"line":1180},[99,98331,98332],{"class":168},"#axis=0\n",[99,98334,98335,98337,98339,98342,98344,98346,98348],{"class":101,"line":1186},[99,98336,805],{"class":109},[99,98338,155],{"class":105},[99,98340,98341],{"class":109},"np.concatenate((aaa,bbb),",[99,98343,47495],{"class":5203},[99,98345,155],{"class":105},[99,98347,301],{"class":158},[99,98349,116],{"class":109},[99,98351,98352],{"class":101,"line":1200},[99,98353,98354],{"class":109},"s.shape\n",[99,98356,98357],{"class":101,"line":1206},[99,98358,98359],{"class":168},"#输出：(4,3,6)\n",[99,98361,98362],{"class":101,"line":1297},[99,98363,98364],{"class":168},"#axis=1\n",[99,98366,98367,98370,98372,98374,98376,98378,98380],{"class":101,"line":1303},[99,98368,98369],{"class":109},"ss",[99,98371,155],{"class":105},[99,98373,98341],{"class":109},[99,98375,47495],{"class":5203},[99,98377,155],{"class":105},[99,98379,327],{"class":158},[99,98381,116],{"class":109},[99,98383,98384],{"class":101,"line":1315},[99,98385,98386],{"class":109},"ss.shape\n",[99,98388,98389],{"class":101,"line":1598},[99,98390,98391],{"class":168},"#输出：(2,6,6)\n",[99,98393,98394],{"class":101,"line":1603},[99,98395,98396],{"class":168},"#axis=2\n",[99,98398,98399,98401,98403,98405,98407],{"class":101,"line":1609},[99,98400,98341],{"class":109},[99,98402,47495],{"class":5203},[99,98404,155],{"class":105},[99,98406,187],{"class":158},[99,98408,98409],{"class":109},").shape\n",[99,98411,98412],{"class":101,"line":1614},[99,98413,98414],{"class":168},"#输出：（2，3，12）\n",[14,98416,98417],{},"⑤四维数组拼接",[90,98419,98421],{"className":30359,"code":98420,"language":30361,"meta":21,"style":21},"#两个三行六列\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",[96,98422,98423,98427,98455,98483,98508,98534,98538,98551,98556,98560,98572,98577,98581,98593,98598,98603,98615],{"__ignoreMap":21},[99,98424,98425],{"class":101,"line":102},[99,98426,98269],{"class":168},[99,98428,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453],{"class":101,"line":22},[99,98430,95502],{"class":109},[99,98432,155],{"class":105},[99,98434,92983],{"class":109},[99,98436,327],{"class":158},[99,98438,488],{"class":109},[99,98440,435],{"class":158},[99,98442,92988],{"class":109},[99,98444,187],{"class":158},[99,98446,488],{"class":109},[99,98448,181],{"class":158},[99,98450,488],{"class":109},[99,98452,454],{"class":158},[99,98454,116],{"class":109},[99,98456,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479,98481],{"class":101,"line":1165},[99,98458,98302],{"class":109},[99,98460,155],{"class":105},[99,98462,92983],{"class":109},[99,98464,447],{"class":158},[99,98466,488],{"class":109},[99,98468,98313],{"class":158},[99,98470,92988],{"class":109},[99,98472,187],{"class":158},[99,98474,488],{"class":109},[99,98476,181],{"class":158},[99,98478,488],{"class":109},[99,98480,454],{"class":158},[99,98482,116],{"class":109},[99,98484,98485,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506],{"class":101,"line":1180},[99,98486,98487],{"class":109},"aaaa",[99,98489,155],{"class":105},[99,98491,97651],{"class":109},[99,98493,187],{"class":158},[99,98495,488],{"class":109},[99,98497,181],{"class":158},[99,98499,488],{"class":109},[99,98501,181],{"class":158},[99,98503,488],{"class":109},[99,98505,187],{"class":158},[99,98507,116],{"class":109},[99,98509,98510,98513,98515,98518,98520,98522,98524,98526,98528,98530,98532],{"class":101,"line":1186},[99,98511,98512],{"class":109},"bbbb",[99,98514,155],{"class":105},[99,98516,98517],{"class":109},"bbb.reshape(",[99,98519,187],{"class":158},[99,98521,488],{"class":109},[99,98523,181],{"class":158},[99,98525,488],{"class":109},[99,98527,181],{"class":158},[99,98529,488],{"class":109},[99,98531,187],{"class":158},[99,98533,116],{"class":109},[99,98535,98536],{"class":101,"line":1200},[99,98537,98332],{"class":168},[99,98539,98540,98543,98545,98547,98549],{"class":101,"line":1206},[99,98541,98542],{"class":109},"np.concatenate((aaaa,bbbb),",[99,98544,47495],{"class":5203},[99,98546,155],{"class":105},[99,98548,301],{"class":158},[99,98550,98409],{"class":109},[99,98552,98553],{"class":101,"line":1297},[99,98554,98555],{"class":168},"#结果：（4，3，3，2）\n",[99,98557,98558],{"class":101,"line":1303},[99,98559,98364],{"class":168},[99,98561,98562,98564,98566,98568,98570],{"class":101,"line":1315},[99,98563,98542],{"class":109},[99,98565,47495],{"class":5203},[99,98567,155],{"class":105},[99,98569,327],{"class":158},[99,98571,98409],{"class":109},[99,98573,98574],{"class":101,"line":1598},[99,98575,98576],{"class":168},"#结果：（2，6，3，2）\n",[99,98578,98579],{"class":101,"line":1603},[99,98580,98396],{"class":168},[99,98582,98583,98585,98587,98589,98591],{"class":101,"line":1609},[99,98584,98542],{"class":109},[99,98586,47495],{"class":5203},[99,98588,155],{"class":105},[99,98590,187],{"class":158},[99,98592,98409],{"class":109},[99,98594,98595],{"class":101,"line":1614},[99,98596,98597],{"class":168},"#结果：（2，3，6，2）\n",[99,98599,98600],{"class":101,"line":1628},[99,98601,98602],{"class":168},"#axis=3\n",[99,98604,98605,98607,98609,98611,98613],{"class":101,"line":1633},[99,98606,98542],{"class":109},[99,98608,47495],{"class":5203},[99,98610,155],{"class":105},[99,98612,181],{"class":158},[99,98614,98409],{"class":109},[99,98616,98617],{"class":101,"line":1639},[99,98618,98619],{"class":168},"#结果：（2，3，3，4）\n",[41,98621,98623],{"id":98622},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98625,98626],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98628,98629],{},"①二维数组",[90,98631,98633],{"className":30359,"code":98632,"language":30361,"meta":21,"style":21},"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",[96,98634,98635,98659,98683,98688,98693],{"__ignoreMap":21},[99,98636,98637,98639,98641,98643,98645,98647,98649,98651,98653,98655,98657],{"class":101,"line":102},[99,98638,93287],{"class":109},[99,98640,155],{"class":105},[99,98642,92983],{"class":109},[99,98644,327],{"class":158},[99,98646,488],{"class":109},[99,98648,633],{"class":158},[99,98650,92988],{"class":109},[99,98652,181],{"class":158},[99,98654,488],{"class":109},[99,98656,403],{"class":158},[99,98658,116],{"class":109},[99,98660,98661,98663,98665,98667,98669,98671,98673,98675,98677,98679,98681],{"class":101,"line":22},[99,98662,98168],{"class":109},[99,98664,155],{"class":105},[99,98666,92983],{"class":109},[99,98668,447],{"class":158},[99,98670,488],{"class":109},[99,98672,752],{"class":158},[99,98674,92988],{"class":109},[99,98676,181],{"class":158},[99,98678,488],{"class":109},[99,98680,403],{"class":158},[99,98682,116],{"class":109},[99,98684,98685],{"class":101,"line":1165},[99,98686,98687],{"class":109},"np.hstack((aa,bb))\n",[99,98689,98690],{"class":101,"line":1180},[99,98691,98692],{"class":168},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[99,98694,98695],{"class":101,"line":1186},[99,98696,98697],{"class":168},"#np.hstack([aa,bb])\n",[14,98699,98214],{},[14,98701,98702],{},[1448,98703],{"alt":21,"src":98704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98706,98707],{},"等效于concatenate()函数中axis=1时的情况",[14,98709,98710],{},"②三维数组",[90,98712,98714],{"className":30359,"code":98713,"language":30361,"meta":21,"style":21},"#两个三行六列\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",[96,98715,98716,98720,98748,98776,98781,98786],{"__ignoreMap":21},[99,98717,98718],{"class":101,"line":102},[99,98719,98269],{"class":168},[99,98721,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740,98742,98744,98746],{"class":101,"line":22},[99,98723,95502],{"class":109},[99,98725,155],{"class":105},[99,98727,92983],{"class":109},[99,98729,327],{"class":158},[99,98731,488],{"class":109},[99,98733,435],{"class":158},[99,98735,92988],{"class":109},[99,98737,187],{"class":158},[99,98739,488],{"class":109},[99,98741,181],{"class":158},[99,98743,488],{"class":109},[99,98745,454],{"class":158},[99,98747,116],{"class":109},[99,98749,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774],{"class":101,"line":1165},[99,98751,98302],{"class":109},[99,98753,155],{"class":105},[99,98755,92983],{"class":109},[99,98757,447],{"class":158},[99,98759,488],{"class":109},[99,98761,98313],{"class":158},[99,98763,92988],{"class":109},[99,98765,187],{"class":158},[99,98767,488],{"class":109},[99,98769,181],{"class":158},[99,98771,488],{"class":109},[99,98773,454],{"class":158},[99,98775,116],{"class":109},[99,98777,98778],{"class":101,"line":1180},[99,98779,98780],{"class":168},"#使用hstack\n",[99,98782,98783],{"class":101,"line":1186},[99,98784,98785],{"class":109},"np.hstack((aaa,bbb)).shape\n",[99,98787,98788],{"class":101,"line":1200},[99,98789,98790],{"class":168},"#输出：（2，6，6）\n",[41,98792,98794],{"id":98793},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98796,98797],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98799,98629],{},[90,98801,98803],{"className":30359,"code":98802,"language":30361,"meta":21,"style":21},"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",[96,98804,98805,98829,98853,98858,98863,98868],{"__ignoreMap":21},[99,98806,98807,98809,98811,98813,98815,98817,98819,98821,98823,98825,98827],{"class":101,"line":102},[99,98808,93287],{"class":109},[99,98810,155],{"class":105},[99,98812,92983],{"class":109},[99,98814,327],{"class":158},[99,98816,488],{"class":109},[99,98818,633],{"class":158},[99,98820,92988],{"class":109},[99,98822,181],{"class":158},[99,98824,488],{"class":109},[99,98826,403],{"class":158},[99,98828,116],{"class":109},[99,98830,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849,98851],{"class":101,"line":22},[99,98832,98168],{"class":109},[99,98834,155],{"class":105},[99,98836,92983],{"class":109},[99,98838,447],{"class":158},[99,98840,488],{"class":109},[99,98842,752],{"class":158},[99,98844,92988],{"class":109},[99,98846,181],{"class":158},[99,98848,488],{"class":109},[99,98850,403],{"class":158},[99,98852,116],{"class":109},[99,98854,98855],{"class":101,"line":1165},[99,98856,98857],{"class":168},"#vstack 垂直方向进行堆叠\n",[99,98859,98860],{"class":101,"line":1180},[99,98861,98862],{"class":109},"np.vstack((aa,bb))\n",[99,98864,98865],{"class":101,"line":1186},[99,98866,98867],{"class":168},"#与hstack传的参数类似，等价于：\n",[99,98869,98870],{"class":101,"line":1200},[99,98871,98872],{"class":109},"np.vstack([aa,bb])\n",[14,98874,98214],{},[14,98876,98877],{},[1448,98878],{"alt":21,"src":98879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98881,98710],{},[90,98883,98885],{"className":30359,"code":98884,"language":30361,"meta":21,"style":21},"#两个三行六列\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",[96,98886,98887,98891,98919,98947,98952,98957],{"__ignoreMap":21},[99,98888,98889],{"class":101,"line":102},[99,98890,98269],{"class":168},[99,98892,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917],{"class":101,"line":22},[99,98894,95502],{"class":109},[99,98896,155],{"class":105},[99,98898,92983],{"class":109},[99,98900,327],{"class":158},[99,98902,488],{"class":109},[99,98904,435],{"class":158},[99,98906,92988],{"class":109},[99,98908,187],{"class":158},[99,98910,488],{"class":109},[99,98912,181],{"class":158},[99,98914,488],{"class":109},[99,98916,454],{"class":158},[99,98918,116],{"class":109},[99,98920,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945],{"class":101,"line":1165},[99,98922,98302],{"class":109},[99,98924,155],{"class":105},[99,98926,92983],{"class":109},[99,98928,447],{"class":158},[99,98930,488],{"class":109},[99,98932,98313],{"class":158},[99,98934,92988],{"class":109},[99,98936,187],{"class":158},[99,98938,488],{"class":109},[99,98940,181],{"class":158},[99,98942,488],{"class":109},[99,98944,454],{"class":158},[99,98946,116],{"class":109},[99,98948,98949],{"class":101,"line":1180},[99,98950,98951],{"class":168},"#使用vstack\n",[99,98953,98954],{"class":101,"line":1186},[99,98955,98956],{"class":109},"np.vstack((aaa,bbb)).shape\n",[99,98958,98959],{"class":101,"line":1200},[99,98960,98961],{"class":168},"#输出：（4，3，6）\n",[41,98963,98965],{"id":98964},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98967,98968],{},"该方法是三维数组特有的方法",[14,98970,98971],{},"也就是说",[14,98973,98974],{},"一维数组拼接方法用：concatenate()",[14,98976,98977],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98979,98980],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98982,98983],{},"四维数组及多维数组只能用concatenate进行拼接",[90,98985,98987],{"className":30359,"code":98986,"language":30361,"meta":21,"style":21},"#两个三行六列\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",[96,98988,98989,98993,99021,99049,99054,99059],{"__ignoreMap":21},[99,98990,98991],{"class":101,"line":102},[99,98992,98269],{"class":168},[99,98994,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019],{"class":101,"line":22},[99,98996,95502],{"class":109},[99,98998,155],{"class":105},[99,99000,92983],{"class":109},[99,99002,327],{"class":158},[99,99004,488],{"class":109},[99,99006,435],{"class":158},[99,99008,92988],{"class":109},[99,99010,187],{"class":158},[99,99012,488],{"class":109},[99,99014,181],{"class":158},[99,99016,488],{"class":109},[99,99018,454],{"class":158},[99,99020,116],{"class":109},[99,99022,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047],{"class":101,"line":1165},[99,99024,98302],{"class":109},[99,99026,155],{"class":105},[99,99028,92983],{"class":109},[99,99030,447],{"class":158},[99,99032,488],{"class":109},[99,99034,98313],{"class":158},[99,99036,92988],{"class":109},[99,99038,187],{"class":158},[99,99040,488],{"class":109},[99,99042,181],{"class":158},[99,99044,488],{"class":109},[99,99046,454],{"class":158},[99,99048,116],{"class":109},[99,99050,99051],{"class":101,"line":1180},[99,99052,99053],{"class":168},"#使用dstack\n",[99,99055,99056],{"class":101,"line":1186},[99,99057,99058],{"class":109},"np.dstack((aaa,bbb)).shape\n",[99,99060,99061],{"class":101,"line":1200},[99,99062,99063],{"class":168},"#结果：（2，3，12）\n",[5113,99065,99066],{},"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":21,"searchDepth":22,"depth":22,"links":99068},[99069,99070,99071,99072],{"id":98008,"depth":22,"text":98009},{"id":98622,"depth":22,"text":98623},{"id":98793,"depth":22,"text":98794},{"id":98964,"depth":22,"text":98965},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98000,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99079,"title":99080,"body":99081,"description":23364,"extension":24,"meta":99356,"navigation":26,"path":99357,"seo":99358,"stem":99359,"__hash__":99360},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99082,"toc":99354},[99083,99086,99089,99183,99186,99189,99192,99195,99198,99201,99204,99207,99351],[10,99084,99080],{"id":99085},"_7数组转置",[14,99087,99088],{},"使用transpose()函数",[90,99090,99092],{"className":30359,"code":99091,"language":30361,"meta":21,"style":21},"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",[96,99093,99094,99104,99128,99133,99138,99143,99148,99156,99160,99164,99169,99174,99179],{"__ignoreMap":21},[99,99095,99096,99098,99100,99102],{"class":101,"line":102},[99,99097,30373],{"class":105},[99,99099,31361],{"class":109},[99,99101,31364],{"class":105},[99,99103,31367],{"class":109},[99,99105,99106,99108,99110,99112,99114,99116,99118,99120,99122,99124,99126],{"class":101,"line":22},[99,99107,348],{"class":109},[99,99109,155],{"class":105},[99,99111,31698],{"class":109},[99,99113,327],{"class":158},[99,99115,488],{"class":109},[99,99117,633],{"class":158},[99,99119,92988],{"class":109},[99,99121,403],{"class":158},[99,99123,488],{"class":109},[99,99125,181],{"class":158},[99,99127,116],{"class":109},[99,99129,99130],{"class":101,"line":1165},[99,99131,99132],{"class":168},"#二维数组转置\n",[99,99134,99135],{"class":101,"line":1180},[99,99136,99137],{"class":168},"#调用transpose()函数\n",[99,99139,99140],{"class":101,"line":1186},[99,99141,99142],{"class":109},"a.transpose()\n",[99,99144,99145],{"class":101,"line":1200},[99,99146,99147],{"class":168},"#对于二维数组也可以采用.T来实现\n",[99,99149,99150,99153],{"class":101,"line":1206},[99,99151,99152],{"class":109},"a.T",[99,99154,99155],{"class":168},"#与上述代码一样\n",[99,99157,99158],{"class":101,"line":1297},[99,99159,93545],{"class":168},[99,99161,99162],{"class":101,"line":1303},[99,99163,93909],{"class":214},[99,99165,99166],{"class":101,"line":1315},[99,99167,99168],{"class":214},"array([[ 1,  4,  7, 10],\n",[99,99170,99171],{"class":101,"line":1598},[99,99172,99173],{"class":214},"       [ 2,  5,  8, 11],\n",[99,99175,99176],{"class":101,"line":1603},[99,99177,99178],{"class":214},"       [ 3,  6,  9, 12]])\n",[99,99180,99181],{"class":101,"line":1609},[99,99182,93909],{"class":214},[14,99184,99185],{},"也可以使用np.transpose()的形式",[14,99187,99188],{},"#多维数组进行转置 np.transpose()",[14,99190,99191],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99193,99194],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99196,99197],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99199,99200],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99202,99203],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99205,99206],{},"四维及以上的数组也是一样的道理",[90,99208,99210],{"className":30359,"code":99209,"language":30361,"meta":21,"style":21},"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",[96,99211,99212,99240,99245,99250,99255,99273,99278,99310,99315,99320,99325,99346],{"__ignoreMap":21},[99,99213,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236,99238],{"class":101,"line":102},[99,99215,930],{"class":109},[99,99217,155],{"class":105},[99,99219,92983],{"class":109},[99,99221,327],{"class":158},[99,99223,488],{"class":109},[99,99225,435],{"class":158},[99,99227,92988],{"class":109},[99,99229,181],{"class":158},[99,99231,488],{"class":109},[99,99233,454],{"class":158},[99,99235,488],{"class":109},[99,99237,187],{"class":158},[99,99239,116],{"class":109},[99,99241,99242],{"class":101,"line":22},[99,99243,99244],{"class":109},"x.shape\n",[99,99246,99247],{"class":101,"line":1165},[99,99248,99249],{"class":168},"#结果：（3,6,2）\n",[99,99251,99252],{"class":101,"line":1180},[99,99253,99254],{"class":168},"#使用np.transpose()进行转置 变为(2,6,3)\n",[99,99256,99257,99260,99262,99264,99266,99268,99270],{"class":101,"line":1186},[99,99258,99259],{"class":109},"np.transpose(x,(",[99,99261,187],{"class":158},[99,99263,488],{"class":109},[99,99265,327],{"class":158},[99,99267,488],{"class":109},[99,99269,301],{"class":158},[99,99271,99272],{"class":109},")).shape\n",[99,99274,99275],{"class":101,"line":1200},[99,99276,99277],{"class":168},"#结果：(2,6,3)\n",[99,99279,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308],{"class":101,"line":1206},[99,99281,98487],{"class":109},[99,99283,155],{"class":105},[99,99285,92983],{"class":109},[99,99287,327],{"class":158},[99,99289,488],{"class":109},[99,99291,435],{"class":158},[99,99293,92988],{"class":109},[99,99295,181],{"class":158},[99,99297,488],{"class":109},[99,99299,187],{"class":158},[99,99301,488],{"class":109},[99,99303,327],{"class":158},[99,99305,488],{"class":109},[99,99307,454],{"class":158},[99,99309,116],{"class":109},[99,99311,99312],{"class":101,"line":1297},[99,99313,99314],{"class":109},"aaaa.shape\n",[99,99316,99317],{"class":101,"line":1303},[99,99318,99319],{"class":168},"#结果：（3，2，1，6）\n",[99,99321,99322],{"class":101,"line":1315},[99,99323,99324],{"class":168},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[99,99326,99327,99330,99332,99334,99336,99338,99340,99342,99344],{"class":101,"line":1598},[99,99328,99329],{"class":109},"np.transpose(aaaa,(",[99,99331,327],{"class":158},[99,99333,488],{"class":109},[99,99335,187],{"class":158},[99,99337,488],{"class":109},[99,99339,301],{"class":158},[99,99341,488],{"class":109},[99,99343,181],{"class":158},[99,99345,99272],{"class":109},[99,99347,99348],{"class":101,"line":1603},[99,99349,99350],{"class":168},"#结果：(2,1,3,6)\n",[5113,99352,99353],{},"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":21,"searchDepth":22,"depth":22,"links":99355},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99080,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99362,"title":99363,"body":99364,"description":23364,"extension":24,"meta":100098,"navigation":26,"path":100099,"seo":100100,"stem":100101,"__hash__":100102},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99365,"toc":100096},[99366,99369,99372,99375,99378,99381,99384,99387,99390,99499,99502,99505,100093],[10,99367,99363],{"id":99368},"_8数组分割",[14,99370,99371],{},"split分割",[14,99373,99374],{},"numpy.split(ary,indics_or_sections,axis)",[14,99376,99377],{},"解释：",[14,99379,99380],{},"ary:被分割的数组",[14,99382,99383],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99385,99386],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99388,99389],{},"①一维数组的分割",[90,99391,99393],{"className":30359,"code":99392,"language":30361,"meta":21,"style":21},"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",[96,99394,99395,99411,99416,99425,99429,99434,99442,99446,99451,99456,99469,99473,99478,99490,99494],{"__ignoreMap":21},[99,99396,99397,99399,99401,99403,99405,99407,99409],{"class":101,"line":102},[99,99398,348],{"class":109},[99,99400,155],{"class":105},[99,99402,92983],{"class":109},[99,99404,327],{"class":158},[99,99406,488],{"class":109},[99,99408,530],{"class":158},[99,99410,116],{"class":109},[99,99412,99413],{"class":101,"line":22},[99,99414,99415],{"class":168},"#如果传入整数，必须能够平分，否则会报错\n",[99,99417,99418,99421,99423],{"class":101,"line":1165},[99,99419,99420],{"class":109},"np.split(a,",[99,99422,187],{"class":158},[99,99424,116],{"class":109},[99,99426,99427],{"class":101,"line":1180},[99,99428,93545],{"class":168},[99,99430,99431],{"class":101,"line":1186},[99,99432,99433],{"class":168},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[99,99435,99436,99438,99440],{"class":101,"line":1200},[99,99437,99420],{"class":109},[99,99439,403],{"class":158},[99,99441,116],{"class":109},[99,99443,99444],{"class":101,"line":1206},[99,99445,93545],{"class":168},[99,99447,99448],{"class":101,"line":1297},[99,99449,99450],{"class":168},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[99,99452,99453],{"class":101,"line":1303},[99,99454,99455],{"class":168},"#传入数组\n",[99,99457,99458,99461,99463,99465,99467],{"class":101,"line":1315},[99,99459,99460],{"class":109},"np.split(a,[",[99,99462,181],{"class":158},[99,99464,488],{"class":109},[99,99466,429],{"class":158},[99,99468,4643],{"class":109},[99,99470,99471],{"class":101,"line":1598},[99,99472,93545],{"class":168},[99,99474,99475],{"class":101,"line":1603},[99,99476,99477],{"class":168},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[99,99479,99480,99482,99484,99486,99488],{"class":101,"line":1609},[99,99481,99460],{"class":109},[99,99483,429],{"class":158},[99,99485,488],{"class":109},[99,99487,479],{"class":158},[99,99489,4643],{"class":109},[99,99491,99492],{"class":101,"line":1614},[99,99493,93545],{"class":168},[99,99495,99496],{"class":101,"line":1628},[99,99497,99498],{"class":168},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99500,99501],{},"②二维数组的分割",[14,99503,99504],{},"使用split()",[90,99506,99508],{"className":30359,"code":99507,"language":30361,"meta":21,"style":21},"#二维数组分割\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",[96,99509,99510,99515,99539,99544,99553,99557,99561,99566,99571,99576,99581,99586,99591,99596,99600,99613,99617,99621,99625,99629,99633,99638,99643,99648,99652,99657,99673,99677,99681,99686,99691,99696,99701,99706,99711,99716,99721,99726,99731,99736,99741,99746,99751,99756,99761,99766,99771,99775,99779,99799,99803,99807,99812,99817,99822,99827,99832,99837,99842,99847,99852,99857,99862,99867,99872,99877,99882,99887,99892,99897,99901,99906,99915,99919,99923,99927,99931,99935,99939,99943,99947,99951,99960,99964,99968,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100057,100061,100065,100069,100073,100077,100081,100085,100089],{"__ignoreMap":21},[99,99511,99512],{"class":101,"line":102},[99,99513,99514],{"class":168},"#二维数组分割\n",[99,99516,99517,99519,99521,99523,99525,99527,99529,99531,99533,99535,99537],{"class":101,"line":22},[99,99518,93287],{"class":109},[99,99520,155],{"class":105},[99,99522,92983],{"class":109},[99,99524,327],{"class":158},[99,99526,488],{"class":109},[99,99528,435],{"class":158},[99,99530,92988],{"class":109},[99,99532,454],{"class":158},[99,99534,488],{"class":109},[99,99536,454],{"class":158},[99,99538,116],{"class":109},[99,99540,99541],{"class":101,"line":1165},[99,99542,99543],{"class":168},"#默认axis=0  传入整数平均分,按行来的\n",[99,99545,99546,99549,99551],{"class":101,"line":1180},[99,99547,99548],{"class":109},"np.split(aa,",[99,99550,181],{"class":158},[99,99552,116],{"class":109},[99,99554,99555],{"class":101,"line":1186},[99,99556,95745],{"class":168},[99,99558,99559],{"class":101,"line":1200},[99,99560,93909],{"class":214},[99,99562,99563],{"class":101,"line":1206},[99,99564,99565],{"class":214},"[array([[ 1,  2,  3,  4,  5,  6],\n",[99,99567,99568],{"class":101,"line":1297},[99,99569,99570],{"class":214},"        [ 7,  8,  9, 10, 11, 12]]),\n",[99,99572,99573],{"class":101,"line":1303},[99,99574,99575],{"class":214}," array([[13, 14, 15, 16, 17, 18],\n",[99,99577,99578],{"class":101,"line":1315},[99,99579,99580],{"class":214},"        [19, 20, 21, 22, 23, 24]]),\n",[99,99582,99583],{"class":101,"line":1598},[99,99584,99585],{"class":214}," array([[25, 26, 27, 28, 29, 30],\n",[99,99587,99588],{"class":101,"line":1603},[99,99589,99590],{"class":214},"        [31, 32, 33, 34, 35, 36]])]\n",[99,99592,99593],{"class":101,"line":1609},[99,99594,99595],{"class":214}," '''\n",[99,99597,99598],{"class":101,"line":1614},[99,99599,99455],{"class":168},[99,99601,99602,99605,99607,99609,99611],{"class":101,"line":1628},[99,99603,99604],{"class":109},"np.split(aa,[",[99,99606,187],{"class":158},[99,99608,488],{"class":109},[99,99610,429],{"class":158},[99,99612,4643],{"class":109},[99,99614,99615],{"class":101,"line":1633},[99,99616,95745],{"class":168},[99,99618,99619],{"class":101,"line":1639},[99,99620,93909],{"class":214},[99,99622,99623],{"class":101,"line":1660},[99,99624,99565],{"class":214},[99,99626,99627],{"class":101,"line":1665},[99,99628,99570],{"class":214},[99,99630,99631],{"class":101,"line":1679},[99,99632,99575],{"class":214},[99,99634,99635],{"class":101,"line":1684},[99,99636,99637],{"class":214},"        [19, 20, 21, 22, 23, 24],\n",[99,99639,99640],{"class":101,"line":1713},[99,99641,99642],{"class":214},"        [25, 26, 27, 28, 29, 30]]),\n",[99,99644,99645],{"class":101,"line":1718},[99,99646,99647],{"class":214}," array([[31, 32, 33, 34, 35, 36]])]\n",[99,99649,99650],{"class":101,"line":1735},[99,99651,93909],{"class":214},[99,99653,99654],{"class":101,"line":1740},[99,99655,99656],{"class":168},"#axis=1 按照列来分\n",[99,99658,99659,99661,99663,99665,99667,99669,99671],{"class":101,"line":1745},[99,99660,99548],{"class":109},[99,99662,181],{"class":158},[99,99664,488],{"class":109},[99,99666,47495],{"class":5203},[99,99668,155],{"class":105},[99,99670,327],{"class":158},[99,99672,116],{"class":109},[99,99674,99675],{"class":101,"line":1750},[99,99676,95745],{"class":168},[99,99678,99679],{"class":101,"line":1764},[99,99680,93909],{"class":214},[99,99682,99683],{"class":101,"line":1769},[99,99684,99685],{"class":214},"[array([[ 1,  2],\n",[99,99687,99688],{"class":101,"line":2563},[99,99689,99690],{"class":214},"        [ 7,  8],\n",[99,99692,99693],{"class":101,"line":2577},[99,99694,99695],{"class":214},"        [13, 14],\n",[99,99697,99698],{"class":101,"line":2585},[99,99699,99700],{"class":214},"        [19, 20],\n",[99,99702,99703],{"class":101,"line":2590},[99,99704,99705],{"class":214},"        [25, 26],\n",[99,99707,99708],{"class":101,"line":2596},[99,99709,99710],{"class":214},"        [31, 32]]),\n",[99,99712,99713],{"class":101,"line":2602},[99,99714,99715],{"class":214}," array([[ 3,  4],\n",[99,99717,99718],{"class":101,"line":2607},[99,99719,99720],{"class":214},"        [ 9, 10],\n",[99,99722,99723],{"class":101,"line":7935},[99,99724,99725],{"class":214},"        [15, 16],\n",[99,99727,99728],{"class":101,"line":7959},[99,99729,99730],{"class":214},"        [21, 22],\n",[99,99732,99733],{"class":101,"line":7964},[99,99734,99735],{"class":214},"        [27, 28],\n",[99,99737,99738],{"class":101,"line":7970},[99,99739,99740],{"class":214},"        [33, 34]]),\n",[99,99742,99743],{"class":101,"line":7997},[99,99744,99745],{"class":214}," array([[ 5,  6],\n",[99,99747,99748],{"class":101,"line":8002},[99,99749,99750],{"class":214},"        [11, 12],\n",[99,99752,99753],{"class":101,"line":8008},[99,99754,99755],{"class":214},"        [17, 18],\n",[99,99757,99758],{"class":101,"line":8020},[99,99759,99760],{"class":214},"        [23, 24],\n",[99,99762,99763],{"class":101,"line":8032},[99,99764,99765],{"class":214},"        [29, 30],\n",[99,99767,99768],{"class":101,"line":8044},[99,99769,99770],{"class":214},"        [35, 36]])]\n",[99,99772,99773],{"class":101,"line":9703},[99,99774,99595],{"class":214},[99,99776,99777],{"class":101,"line":9728},[99,99778,99455],{"class":168},[99,99780,99781,99783,99785,99787,99789,99791,99793,99795,99797],{"class":101,"line":9751},[99,99782,99604],{"class":109},[99,99784,327],{"class":158},[99,99786,488],{"class":109},[99,99788,187],{"class":158},[99,99790,41590],{"class":109},[99,99792,47495],{"class":5203},[99,99794,155],{"class":105},[99,99796,327],{"class":158},[99,99798,116],{"class":109},[99,99800,99801],{"class":101,"line":9775},[99,99802,93545],{"class":168},[99,99804,99805],{"class":101,"line":9780},[99,99806,93909],{"class":214},[99,99808,99809],{"class":101,"line":9785},[99,99810,99811],{"class":214},"[array([[ 1],\n",[99,99813,99814],{"class":101,"line":9790},[99,99815,99816],{"class":214},"        [ 7],\n",[99,99818,99819],{"class":101,"line":9799},[99,99820,99821],{"class":214},"        [13],\n",[99,99823,99824],{"class":101,"line":9804},[99,99825,99826],{"class":214},"        [19],\n",[99,99828,99829],{"class":101,"line":9810},[99,99830,99831],{"class":214},"        [25],\n",[99,99833,99834],{"class":101,"line":9831},[99,99835,99836],{"class":214},"        [31]]),\n",[99,99838,99839],{"class":101,"line":9837},[99,99840,99841],{"class":214}," array([[ 2],\n",[99,99843,99844],{"class":101,"line":9851},[99,99845,99846],{"class":214},"        [ 8],\n",[99,99848,99849],{"class":101,"line":9857},[99,99850,99851],{"class":214},"        [14],\n",[99,99853,99854],{"class":101,"line":9884},[99,99855,99856],{"class":214},"        [20],\n",[99,99858,99859],{"class":101,"line":9893},[99,99860,99861],{"class":214},"        [26],\n",[99,99863,99864],{"class":101,"line":9899},[99,99865,99866],{"class":214},"        [32]]),\n",[99,99868,99869],{"class":101,"line":9907},[99,99870,99871],{"class":214}," array([[ 3,  4,  5,  6],\n",[99,99873,99874],{"class":101,"line":9912},[99,99875,99876],{"class":214},"        [ 9, 10, 11, 12],\n",[99,99878,99879],{"class":101,"line":16591},[99,99880,99881],{"class":214},"        [15, 16, 17, 18],\n",[99,99883,99884],{"class":101,"line":16597},[99,99885,99886],{"class":214},"        [21, 22, 23, 24],\n",[99,99888,99889],{"class":101,"line":16620},[99,99890,99891],{"class":214},"        [27, 28, 29, 30],\n",[99,99893,99894],{"class":101,"line":16626},[99,99895,99896],{"class":214},"        [33, 34, 35, 36]])]\n",[99,99898,99899],{"class":101,"line":16649},[99,99900,93909],{"class":214},[99,99902,99903],{"class":101,"line":16663},[99,99904,99905],{"class":168},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[99,99907,99908,99911,99913],{"class":101,"line":16683},[99,99909,99910],{"class":109},"np.vsplit(aa,",[99,99912,181],{"class":158},[99,99914,116],{"class":109},[99,99916,99917],{"class":101,"line":16689},[99,99918,93545],{"class":168},[99,99920,99921],{"class":101,"line":16700},[99,99922,93909],{"class":214},[99,99924,99925],{"class":101,"line":16723},[99,99926,99565],{"class":214},[99,99928,99929],{"class":101,"line":16745},[99,99930,99570],{"class":214},[99,99932,99933],{"class":101,"line":16750},[99,99934,99575],{"class":214},[99,99936,99937],{"class":101,"line":16756},[99,99938,99580],{"class":214},[99,99940,99941],{"class":101,"line":16770},[99,99942,99585],{"class":214},[99,99944,99945],{"class":101,"line":16783},[99,99946,99590],{"class":214},[99,99948,99949],{"class":101,"line":16788},[99,99950,93909],{"class":214},[99,99952,99953,99956,99958],{"class":101,"line":16802},[99,99954,99955],{"class":109},"np.hsplit(aa,",[99,99957,181],{"class":158},[99,99959,116],{"class":109},[99,99961,99962],{"class":101,"line":16807},[99,99963,93545],{"class":168},[99,99965,99966],{"class":101,"line":16813},[99,99967,93909],{"class":214},[99,99969,99970],{"class":101,"line":16818},[99,99971,99685],{"class":214},[99,99973,99974],{"class":101,"line":16832},[99,99975,99690],{"class":214},[99,99977,99978],{"class":101,"line":16837},[99,99979,99695],{"class":214},[99,99981,99982],{"class":101,"line":16842},[99,99983,99700],{"class":214},[99,99985,99986],{"class":101,"line":16856},[99,99987,99705],{"class":214},[99,99989,99990],{"class":101,"line":16868},[99,99991,99710],{"class":214},[99,99993,99994],{"class":101,"line":16873},[99,99995,99715],{"class":214},[99,99997,99998],{"class":101,"line":16886},[99,99999,99720],{"class":214},[99,100001,100002],{"class":101,"line":16891},[99,100003,99725],{"class":214},[99,100005,100006],{"class":101,"line":16896},[99,100007,99730],{"class":214},[99,100009,100010],{"class":101,"line":16901},[99,100011,99735],{"class":214},[99,100013,100014],{"class":101,"line":16914},[99,100015,99740],{"class":214},[99,100017,100018],{"class":101,"line":16919},[99,100019,99745],{"class":214},[99,100021,100022],{"class":101,"line":32614},[99,100023,99750],{"class":214},[99,100025,100026],{"class":101,"line":32620},[99,100027,99755],{"class":214},[99,100029,100030],{"class":101,"line":32626},[99,100031,99760],{"class":214},[99,100033,100034],{"class":101,"line":32632},[99,100035,99765],{"class":214},[99,100037,100038],{"class":101,"line":32638},[99,100039,99770],{"class":214},[99,100041,100042],{"class":101,"line":32649},[99,100043,93909],{"class":214},[99,100045,100046,100049,100051,100053,100055],{"class":101,"line":32655},[99,100047,100048],{"class":109},"np.vsplit(aa,[",[99,100050,187],{"class":158},[99,100052,488],{"class":109},[99,100054,429],{"class":158},[99,100056,4643],{"class":109},[99,100058,100059],{"class":101,"line":32675},[99,100060,93545],{"class":168},[99,100062,100063],{"class":101,"line":32681},[99,100064,93909],{"class":214},[99,100066,100067],{"class":101,"line":32692},[99,100068,99565],{"class":214},[99,100070,100071],{"class":101,"line":32698},[99,100072,99570],{"class":214},[99,100074,100075],{"class":101,"line":32704},[99,100076,99575],{"class":214},[99,100078,100079],{"class":101,"line":32710},[99,100080,99637],{"class":214},[99,100082,100083],{"class":101,"line":32716},[99,100084,99642],{"class":214},[99,100086,100087],{"class":101,"line":32722},[99,100088,99647],{"class":214},[99,100090,100091],{"class":101,"line":32728},[99,100092,99595],{"class":214},[5113,100094,100095],{},"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":21,"searchDepth":22,"depth":22,"links":100097},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99363,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100104,"title":100105,"body":100106,"description":23364,"extension":24,"meta":100600,"navigation":26,"path":100601,"seo":100602,"stem":100603,"__hash__":100604},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100107,"toc":100591},[100108,100111,100114,100139,100143,100202,100254,100258,100260,100296,100350,100352,100390,100461,100465,100470,100474,100477,100510,100513,100517,100520,100523,100526,100529,100534,100538,100541,100544,100547,100550,100555,100559,100564,100567,100588],[10,100109,100105],{"id":100110},"_9数学函数",[14,100112,100113],{},"补充回顾：python的列表推导式",[90,100115,100117],{"className":30359,"code":100116,"language":30361,"meta":21,"style":21},"[1\u002Fi for i in a]\n",[96,100118,100119],{"__ignoreMap":21},[99,100120,100121,100123,100125,100127,100130,100132,100134,100136],{"class":101,"line":102},[99,100122,1000],{"class":109},[99,100124,327],{"class":158},[99,100126,694],{"class":105},[99,100128,100129],{"class":109},"i ",[99,100131,3011],{"class":105},[99,100133,9425],{"class":109},[99,100135,26032],{"class":105},[99,100137,100138],{"class":109}," a]\n",[41,100140,100142],{"id":100141},"_91-求倒数","9.1 求倒数",[90,100144,100146],{"className":30359,"code":100145,"language":30361,"meta":21,"style":21},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[96,100147,100148,100153,100181,100193],{"__ignoreMap":21},[99,100149,100150],{"class":101,"line":102},[99,100151,100152],{"class":168},"#数组求倒数\n",[99,100154,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179],{"class":101,"line":22},[99,100156,348],{"class":109},[99,100158,155],{"class":105},[99,100160,1000],{"class":109},[99,100162,327],{"class":158},[99,100164,488],{"class":109},[99,100166,187],{"class":158},[99,100168,488],{"class":109},[99,100170,181],{"class":158},[99,100172,488],{"class":109},[99,100174,403],{"class":158},[99,100176,488],{"class":109},[99,100178,429],{"class":158},[99,100180,33227],{"class":109},[99,100182,100183,100185,100187,100190],{"class":101,"line":1165},[99,100184,373],{"class":109},[99,100186,155],{"class":105},[99,100188,100189],{"class":109},"np.array(a)",[99,100191,100192],{"class":168},"#将列表转换为数组\n",[99,100194,100195,100197,100199],{"class":101,"line":1180},[99,100196,327],{"class":158},[99,100198,694],{"class":105},[99,100200,100201],{"class":109},"b\n",[90,100203,100205],{"className":30359,"code":100204,"language":30361,"meta":21,"style":21},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[96,100206,100207,100235,100244,100249],{"__ignoreMap":21},[99,100208,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227,100229,100231,100233],{"class":101,"line":102},[99,100210,348],{"class":109},[99,100212,155],{"class":105},[99,100214,1000],{"class":109},[99,100216,327],{"class":158},[99,100218,488],{"class":109},[99,100220,187],{"class":158},[99,100222,488],{"class":109},[99,100224,181],{"class":158},[99,100226,488],{"class":109},[99,100228,403],{"class":158},[99,100230,488],{"class":109},[99,100232,429],{"class":158},[99,100234,33227],{"class":109},[99,100236,100237,100239,100241],{"class":101,"line":22},[99,100238,373],{"class":109},[99,100240,155],{"class":105},[99,100242,100243],{"class":109},"np.array(a)\n",[99,100245,100246],{"class":101,"line":1165},[99,100247,100248],{"class":168},"#调用numpy中的函数reciprocal()\n",[99,100250,100251],{"class":101,"line":1180},[99,100252,100253],{"class":109},"np.reciprocal(b)\n",[41,100255,100257],{"id":100256},"_92-求平方","9.2 求平方",[14,100259,94511],{},[90,100261,100263],{"className":30359,"code":100262,"language":30361,"meta":21,"style":21},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[96,100264,100265,100270,100275,100291],{"__ignoreMap":21},[99,100266,100267],{"class":101,"line":102},[99,100268,100269],{"class":168},"#square()，求平方\n",[99,100271,100272],{"class":101,"line":22},[99,100273,100274],{"class":168},"#一维数组\n",[99,100276,100277,100279,100281,100283,100285,100287,100289],{"class":101,"line":1165},[99,100278,348],{"class":109},[99,100280,155],{"class":105},[99,100282,92983],{"class":109},[99,100284,327],{"class":158},[99,100286,488],{"class":109},[99,100288,556],{"class":158},[99,100290,116],{"class":109},[99,100292,100293],{"class":101,"line":1180},[99,100294,100295],{"class":109},"np.square(a)\n",[90,100297,100299],{"className":30359,"code":100298,"language":30361,"meta":21,"style":21},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[96,100300,100301,100306,100311,100332],{"__ignoreMap":21},[99,100302,100303],{"class":101,"line":102},[99,100304,100305],{"class":168},"#或者通过循环遍历的形式来计算\n",[99,100307,100308],{"class":101,"line":22},[99,100309,100310],{"class":168},"#这是一个列表\n",[99,100312,100313,100316,100318,100320,100322,100324,100326,100329],{"class":101,"line":1165},[99,100314,100315],{"class":109},"[i",[99,100317,565],{"class":105},[99,100319,100129],{"class":109},[99,100321,3011],{"class":105},[99,100323,9425],{"class":109},[99,100325,26032],{"class":105},[99,100327,100328],{"class":109}," a]",[99,100330,100331],{"class":168},"#这个求完之后在数列当中\n",[99,100333,100334,100337,100339,100341,100343,100345,100347],{"class":101,"line":1180},[99,100335,100336],{"class":109},"np.array([i",[99,100338,565],{"class":105},[99,100340,100129],{"class":109},[99,100342,3011],{"class":105},[99,100344,9425],{"class":109},[99,100346,26032],{"class":105},[99,100348,100349],{"class":109}," a])\n",[14,100351,93272],{},[90,100353,100355],{"className":30359,"code":100354,"language":30361,"meta":21,"style":21},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[96,100356,100357,100361,100385],{"__ignoreMap":21},[99,100358,100359],{"class":101,"line":102},[99,100360,93282],{"class":168},[99,100362,100363,100365,100367,100369,100371,100373,100375,100377,100379,100381,100383],{"class":101,"line":22},[99,100364,93287],{"class":109},[99,100366,155],{"class":105},[99,100368,92983],{"class":109},[99,100370,327],{"class":158},[99,100372,488],{"class":109},[99,100374,633],{"class":158},[99,100376,92988],{"class":109},[99,100378,403],{"class":158},[99,100380,488],{"class":109},[99,100382,181],{"class":158},[99,100384,116],{"class":109},[99,100386,100387],{"class":101,"line":1165},[99,100388,100389],{"class":109},"np.square(aa)\n",[90,100391,100393],{"className":30359,"code":100392,"language":30361,"meta":21,"style":21},"#传统的方式\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",[96,100394,100395,100400,100409,100425,100441,100456],{"__ignoreMap":21},[99,100396,100397],{"class":101,"line":102},[99,100398,100399],{"class":168},"#传统的方式\n",[99,100401,100402,100404,100406],{"class":101,"line":22},[99,100403,98168],{"class":109},[99,100405,155],{"class":105},[99,100407,100408],{"class":109},"np.empty_like(aa)\n",[99,100410,100411,100413,100415,100417,100419,100421,100423],{"class":101,"line":1165},[99,100412,3011],{"class":105},[99,100414,9425],{"class":109},[99,100416,26032],{"class":105},[99,100418,32424],{"class":158},[99,100420,110],{"class":109},[99,100422,403],{"class":158},[99,100424,30767],{"class":109},[99,100426,100427,100429,100431,100433,100435,100437,100439],{"class":101,"line":1180},[99,100428,3187],{"class":105},[99,100430,9487],{"class":109},[99,100432,26032],{"class":105},[99,100434,32424],{"class":158},[99,100436,110],{"class":109},[99,100438,181],{"class":158},[99,100440,30767],{"class":109},[99,100442,100443,100446,100448,100451,100453],{"class":101,"line":1186},[99,100444,100445],{"class":109},"        bb[i,j]",[99,100447,155],{"class":105},[99,100449,100450],{"class":109},"aa[i,j]",[99,100452,565],{"class":105},[99,100454,100455],{"class":109},"aa[i,j]\n",[99,100457,100458],{"class":101,"line":1200},[99,100459,100460],{"class":109},"bb\n",[41,100462,100464],{"id":100463},"_93-求各元素的符号","9.3 求各元素的符号",[14,100466,100467],{},[1448,100468],{"alt":21,"src":100469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[41,100471,100473],{"id":100472},"_94-modf函数","9.4 modf函数",[14,100475,100476],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[90,100478,100480],{"className":30359,"code":100479,"language":30361,"meta":21,"style":21},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[96,100481,100482,100505],{"__ignoreMap":21},[99,100483,100484,100486,100488,100490,100492,100494,100496,100498,100500,100503],{"class":101,"line":102},[99,100485,348],{"class":109},[99,100487,155],{"class":105},[99,100489,92983],{"class":109},[99,100491,642],{"class":105},[99,100493,556],{"class":158},[99,100495,488],{"class":109},[99,100497,556],{"class":158},[99,100499,488],{"class":109},[99,100501,100502],{"class":158},"0.3",[99,100504,116],{"class":109},[99,100506,100507],{"class":101,"line":22},[99,100508,100509],{"class":109},"np.modf(a)\n",[14,100511,100512],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[41,100514,100516],{"id":100515},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100518,100519],{},"np.cell()",[14,100521,100522],{},"np.floor()",[14,100524,100525],{},"np.rint()",[14,100527,100528],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100530,100531],{},[1448,100532],{"alt":21,"src":100533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[41,100535,100537],{"id":100536},"_96-around函数","9.6 around()函数",[14,100539,100540],{},"around()函数也可以实现对数的小数位数进行操作",[14,100542,100543],{},"其中的参数：",[14,100545,100546],{},"1.要传的数组",[14,100548,100549],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100551,100552],{},[1448,100553],{"alt":21,"src":100554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[41,100556,100558],{"id":100557},"_97-三角函数","9.7 三角函数",[14,100560,100561],{},[1448,100562],{"alt":21,"src":100563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100565,100566],{},"引入图像模块非常重要",[90,100568,100570],{"className":30359,"code":100569,"language":30361,"meta":21,"style":21},"from matplotlib import pyplot as plt\n",[96,100571,100572],{"__ignoreMap":21},[99,100573,100574,100576,100579,100581,100584,100586],{"class":101,"line":102},[99,100575,30718],{"class":105},[99,100577,100578],{"class":109}," matplotlib ",[99,100580,30373],{"class":105},[99,100582,100583],{"class":109}," pyplot ",[99,100585,31364],{"class":105},[99,100587,31418],{"class":109},[5113,100589,100590],{},"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":21,"searchDepth":22,"depth":22,"links":100592},[100593,100594,100595,100596,100597,100598,100599],{"id":100141,"depth":22,"text":100142},{"id":100256,"depth":22,"text":100257},{"id":100463,"depth":22,"text":100464},{"id":100472,"depth":22,"text":100473},{"id":100515,"depth":22,"text":100516},{"id":100536,"depth":22,"text":100537},{"id":100557,"depth":22,"text":100558},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100105,"description":23364},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100606,"title":100607,"body":100608,"description":23364,"extension":24,"meta":100612,"navigation":26,"path":100613,"seo":100614,"stem":100615,"__hash__":100616},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100609,"toc":100610},[],{"title":21,"searchDepth":22,"depth":22,"links":100611},[],{"category":50401},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100607,"description":23364},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100618,"title":100619,"body":100620,"description":21,"extension":24,"meta":102628,"navigation":26,"path":102629,"seo":102630,"stem":102631,"__hash__":102632},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100621,"toc":102604},[100622,100625,100629,100632,100635,100641,100644,100667,100670,100704,100707,100748,100752,100755,100848,100851,100895,100898,100915,100918,100932,100935,100938,100983,100986,101023,101027,101030,101036,101041,101061,101065,101068,101134,101137,101155,101159,101162,101191,101201,101207,101211,101214,101220,101231,101235,101238,101268,101271,101551,101554,101557,101568,101571,101574,101596,101603,101606,101624,101627,101630,101644,101652,101655,101681,101687,101690,101693,101703,101715,101735,101744,101764,101774,101798,101811,101825,101830,101871,101888,101913,101925,101945,101951,101996,102015,102032,102045,102061,102068,102080,102089,102124,102145,102170,102183,102207,102222,102247,102250,102271,102280,102283,102294,102298,102301,102307,102319,102326,102330,102333,102345,102348,102362,102365,102375,102385,102388,102428,102431,102435,102441,102444,102458,102462,102465,102498,102502,102505,102528,102536,102539,102545,102551,102554,102557,102585,102589,102592,102598,102601],[10,100623,100619],{"id":100624},"_1环境安装与第一个-mujoco-程序",[41,100626,100628],{"id":100627},"_1目标说明","1.目标说明",[14,100630,100631],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100633,100634],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[90,100636,100639],{"className":100637,"code":100638,"language":5174,"meta":21},[5172],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[96,100640,100638],{"__ignoreMap":21},[14,100642,100643],{},"需要掌握:",[53,100645,100646,100649,100652,100657,100662],{},[56,100647,100648],{},"Fedora 44 下 MuJoCo 的系统依赖",[56,100650,100651],{},"Python 虚拟环境创建",[56,100653,100654],{},[96,100655,100656],{},"mujoco.MjModel",[56,100658,100659],{},[96,100660,100661],{},"mujoco.MjData",[56,100663,100664],{},[96,100665,100666],{},"mujoco.mj_step(model, data)",[14,100668,100669],{},"MuJoCo 中最重要的两个对象:",[247,100671,100672,100682],{},[250,100673,100674],{},[253,100675,100676,100679],{},[256,100677,100678],{"align":23724},"对象",[256,100680,100681],{"align":23724},"含义",[294,100683,100684,100694],{},[253,100685,100686,100691],{},[299,100687,100688],{"align":23724},[96,100689,100690],{},"MjModel",[299,100692,100693],{"align":23724},"模型结构，来自 XML，基本不随时间变化",[253,100695,100696,100701],{},[299,100697,100698],{"align":23724},[96,100699,100700],{},"MjData",[299,100702,100703],{"align":23724},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100705,100706],{},"可以先用一个类比理解：",[247,100708,100709,100719],{},[250,100710,100711],{},[253,100712,100713,100716],{},[256,100714,100715],{"align":23724},"类比",[256,100717,100718],{"align":23724},"MuJoCo 对象",[294,100720,100721,100730,100739],{},[253,100722,100723,100726],{},[299,100724,100725],{"align":23724},"游戏地图和角色配置",[299,100727,100728],{"align":23724},[96,100729,100690],{},[253,100731,100732,100735],{},[299,100733,100734],{"align":23724},"游戏运行到当前帧的状态",[299,100736,100737],{"align":23724},[96,100738,100700],{},[253,100740,100741,100744],{},[299,100742,100743],{"align":23724},"前进一帧",[299,100745,100746],{"align":23724},[96,100747,100666],{},[41,100749,100751],{"id":100750},"_2环境与依赖安装","2.环境与依赖安装",[14,100753,100754],{},"Fedora 44 系统依赖:",[90,100756,100758],{"className":23810,"code":100757,"language":23812,"meta":21,"style":21},"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",[96,100759,100760,100772,100785,100798,100808,100818,100837],{"__ignoreMap":21},[99,100761,100762,100764,100766,100768,100770],{"class":101,"line":102},[99,100763,24565],{"class":1949},[99,100765,26304],{"class":214},[99,100767,23822],{"class":214},[99,100769,26389],{"class":158},[99,100771,24667],{"class":158},[99,100773,100774,100777,100780,100783],{"class":101,"line":22},[99,100775,100776],{"class":214},"  python3",[99,100778,100779],{"class":214}," python3-pip",[99,100781,100782],{"class":214}," python3-virtualenv",[99,100784,24667],{"class":158},[99,100786,100787,100790,100793,100796],{"class":101,"line":1165},[99,100788,100789],{"class":214},"  mesa-libGL",[99,100791,100792],{"class":214}," mesa-libGLU",[99,100794,100795],{"class":214}," mesa-dri-drivers",[99,100797,24667],{"class":158},[99,100799,100800,100803,100806],{"class":101,"line":1180},[99,100801,100802],{"class":214},"  libglvnd-glx",[99,100804,100805],{"class":214}," libglvnd-opengl",[99,100807,24667],{"class":158},[99,100809,100810,100813,100816],{"class":101,"line":1186},[99,100811,100812],{"class":214},"  glfw",[99,100814,100815],{"class":214}," glfw-devel",[99,100817,24667],{"class":158},[99,100819,100820,100823,100826,100829,100832,100835],{"class":101,"line":1200},[99,100821,100822],{"class":214},"  libX11",[99,100824,100825],{"class":214}," libXcursor",[99,100827,100828],{"class":214}," libXi",[99,100830,100831],{"class":214}," libXinerama",[99,100833,100834],{"class":214}," libXrandr",[99,100836,24667],{"class":158},[99,100838,100839,100842,100845],{"class":101,"line":1206},[99,100840,100841],{"class":214},"  gcc",[99,100843,100844],{"class":214}," gcc-c++",[99,100846,100847],{"class":214}," make\n",[14,100849,100850],{},"创建 Python 环境:",[90,100852,100854],{"className":23810,"code":100853,"language":23812,"meta":21,"style":21},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[96,100855,100856,100870,100878],{"__ignoreMap":21},[99,100857,100858,100861,100864,100867],{"class":101,"line":102},[99,100859,100860],{"class":1949},"python3",[99,100862,100863],{"class":158}," -m",[99,100865,100866],{"class":214}," venv",[99,100868,100869],{"class":214}," .venv\n",[99,100871,100872,100875],{"class":101,"line":22},[99,100873,100874],{"class":158},"source",[99,100876,100877],{"class":214}," .venv\u002Fbin\u002Factivate\n",[99,100879,100880,100882,100884,100887,100889,100892],{"class":101,"line":1165},[99,100881,30361],{"class":1949},[99,100883,100863],{"class":158},[99,100885,100886],{"class":214}," pip",[99,100888,23822],{"class":214},[99,100890,100891],{"class":158}," --upgrade",[99,100893,100894],{"class":214}," pip\n",[14,100896,100897],{},"pip 安装:",[90,100899,100901],{"className":23810,"code":100900,"language":23812,"meta":21,"style":21},"pip install \"mujoco>=2.3\" numpy\n",[96,100902,100903],{"__ignoreMap":21},[99,100904,100905,100907,100909,100912],{"class":101,"line":102},[99,100906,23819],{"class":1949},[99,100908,23822],{"class":214},[99,100910,100911],{"class":214}," \"mujoco>=2.3\"",[99,100913,100914],{"class":214}," numpy\n",[14,100916,100917],{},"安装完成后，先做最小检查：",[90,100919,100921],{"className":23810,"code":100920,"language":23812,"meta":21,"style":21},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[96,100922,100923],{"__ignoreMap":21},[99,100924,100925,100927,100929],{"class":101,"line":102},[99,100926,30361],{"class":1949},[99,100928,30339],{"class":158},[99,100930,100931],{"class":214}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100933,100934],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100936,100937],{},"conda 安装:",[90,100939,100941],{"className":23810,"code":100940,"language":23812,"meta":21,"style":21},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[96,100942,100943,100963,100973],{"__ignoreMap":21},[99,100944,100945,100947,100949,100951,100954,100957,100960],{"class":101,"line":102},[99,100946,30311],{"class":1949},[99,100948,29157],{"class":214},[99,100950,25104],{"class":158},[99,100952,100953],{"class":214}," mujoco-study",[99,100955,100956],{"class":214}," python=",[99,100958,100959],{"class":158},"3.10",[99,100961,100962],{"class":158}," -y\n",[99,100964,100965,100967,100970],{"class":101,"line":22},[99,100966,30311],{"class":1949},[99,100968,100969],{"class":214}," activate",[99,100971,100972],{"class":214}," mujoco-study\n",[99,100974,100975,100977,100979,100981],{"class":101,"line":1165},[99,100976,23819],{"class":1949},[99,100978,23822],{"class":214},[99,100980,100911],{"class":214},[99,100982,100914],{"class":214},[14,100984,100985],{},"版本冲突说明:",[53,100987,100988,100994,101004,101013],{},[56,100989,100990,100991,28366],{},"不要安装 ",[96,100992,100993],{},"mujoco-py",[56,100995,100996,100997,100999,101000,101003],{},"如果旧项目里同时安装了 ",[96,100998,100993],{}," 和 ",[96,101001,101002],{},"mujoco","，建议新建干净虚拟环境。",[56,101005,101006,101009,101010,28366],{},[96,101007,101008],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[96,101011,101012],{},"~\u002F.mujoco\u002Fmujoco210",[56,101014,101015,101016,82520,101019,101022],{},"离屏渲染可能涉及 OpenGL 后端，",[96,101017,101018],{},"MUJOCO_GL=egl",[96,101020,101021],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[41,101024,101026],{"id":101025},"_3核心概念解释","3.核心概念解释",[14,101028,101029],{},"MuJoCo 的基本执行流程:",[90,101031,101034],{"className":101032,"code":101033,"language":5174,"meta":21},[5172],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[96,101035,101033],{"__ignoreMap":21},[14,101037,101038,101040],{},[96,101039,100690],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101042,101043,101045,101046,322,101049,322,101052,322,101055,322,101058,28366],{},[96,101044,100700],{}," 存放仿真运行时状态，例如 ",[96,101047,101048],{},"data.time",[96,101050,101051],{},"data.qpos",[96,101053,101054],{},"data.qvel",[96,101056,101057],{},"data.ctrl",[96,101059,101060],{},"data.xpos",[70,101062,101064],{"id":101063},"xml-是什么","XML 是什么",[14,101066,101067],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[90,101069,101071],{"className":53048,"code":101070,"language":53050,"meta":21,"style":21},"\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",[96,101072,101073,101095,101126],{"__ignoreMap":21},[99,101074,101075,101077,101079,101081,101083,101085,101088,101090,101093],{"class":101,"line":102},[99,101076,1020],{"class":109},[99,101078,51781],{"class":51281},[99,101080,14907],{"class":1949},[99,101082,155],{"class":109},[99,101084,53472],{"class":214},[99,101086,101087],{"class":1949}," pos",[99,101089,155],{"class":109},[99,101091,101092],{"class":214},"\"0 0 1\"",[99,101094,51288],{"class":109},[99,101096,101097,101099,101102,101104,101106,101109,101111,101113,101115,101118,101120,101123],{"class":101,"line":22},[99,101098,52125],{"class":109},[99,101100,101101],{"class":51281},"geom",[99,101103,14907],{"class":1949},[99,101105,155],{"class":109},[99,101107,101108],{"class":214},"\"box_geom\"",[99,101110,53805],{"class":1949},[99,101112,155],{"class":109},[99,101114,53472],{"class":214},[99,101116,101117],{"class":1949}," size",[99,101119,155],{"class":109},[99,101121,101122],{"class":214},"\"0.1 0.1 0.1\"",[99,101124,101125],{"class":109},"\u002F>\n",[99,101127,101128,101130,101132],{"class":101,"line":1165},[99,101129,51766],{"class":109},[99,101131,51781],{"class":51281},[99,101133,51288],{"class":109},[14,101135,101136],{},"这段意思是：",[53,101138,101139,101145,101152],{},[56,101140,101141,101142,101144],{},"创建一个叫 ",[96,101143,53695],{}," 的刚体。",[56,101146,101147,101148,101151],{},"它初始放在 ",[96,101149,101150],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[56,101153,101154],{},"它里面有一个盒子形状的几何体。",[70,101156,101158],{"id":101157},"timestep-是什么","timestep 是什么",[14,101160,101161],{},"XML 里的：",[90,101163,101165],{"className":53048,"code":101164,"language":53050,"meta":21,"style":21},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[96,101166,101167],{"__ignoreMap":21},[99,101168,101169,101171,101173,101176,101178,101181,101184,101186,101189],{"class":101,"line":102},[99,101170,1020],{"class":109},[99,101172,69147],{"class":51281},[99,101174,101175],{"class":1949}," timestep",[99,101177,155],{"class":109},[99,101179,101180],{"class":214},"\"0.01\"",[99,101182,101183],{"class":1949}," gravity",[99,101185,155],{"class":109},[99,101187,101188],{"class":214},"\"0 0 -9.81\"",[99,101190,101125],{"class":109},[14,101192,101193,101194,101197,101198,101200],{},"表示每调用一次 ",[96,101195,101196],{},"mj_step","，仿真时间前进 ",[96,101199,38967],{}," 秒。循环 100 次，大约就是 1 秒：",[90,101202,101205],{"className":101203,"code":101204,"language":5174,"meta":21},[5172],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[96,101206,101204],{"__ignoreMap":21},[70,101208,101210],{"id":101209},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101212,101213],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[90,101215,101218],{"className":101216,"code":101217,"language":5174,"meta":21},[5172],"x y z qw qx qy qz\n",[96,101219,101217],{"__ignoreMap":21},[14,101221,101222,101223,101226,101227,101230],{},"表示一个自由刚体的位置和姿态。其中 ",[96,101224,101225],{},"x y z"," 是位置，",[96,101228,101229],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[41,101232,101234],{"id":101233},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101236,101237],{},"新建文件:",[90,101239,101241],{"className":23810,"code":101240,"language":23812,"meta":21,"style":21},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[96,101242,101243,101253,101260],{"__ignoreMap":21},[99,101244,101245,101248,101250],{"class":101,"line":102},[99,101246,101247],{"class":1949},"mkdir",[99,101249,29197],{"class":158},[99,101251,101252],{"class":214}," mujoco_tutorial\n",[99,101254,101255,101258],{"class":101,"line":22},[99,101256,101257],{"class":158},"cd",[99,101259,101252],{"class":214},[99,101261,101262,101265],{"class":101,"line":1165},[99,101263,101264],{"class":1949},"touch",[99,101266,101267],{"class":214}," ch1_first_sim.py\n",[14,101269,101270],{},"写入:",[90,101272,101274],{"className":30359,"code":101273,"language":30361,"meta":21,"style":21},"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",[96,101275,101276,101283,101287,101291,101301,101306,101311,101315,101320,101325,101329,101334,101339,101344,101349,101354,101359,101363,101367,101371,101384,101398,101408,101412,101424,101436,101448,101460,101472,101476,101493,101498,101502,101513,101524,101528,101532,101546],{"__ignoreMap":21},[99,101277,101278,101280],{"class":101,"line":102},[99,101279,30373],{"class":105},[99,101281,101282],{"class":109}," mujoco\n",[99,101284,101285],{"class":101,"line":22},[99,101286,2386],{"emptyLinePlaceholder":26},[99,101288,101289],{"class":101,"line":1165},[99,101290,2386],{"emptyLinePlaceholder":26},[99,101292,101293,101296,101298],{"class":101,"line":1180},[99,101294,101295],{"class":158},"XML",[99,101297,13551],{"class":105},[99,101299,101300],{"class":214}," \"\"\"\n",[99,101302,101303],{"class":101,"line":1186},[99,101304,101305],{"class":214},"\u003Cmujoco model=\"first_sim\">\n",[99,101307,101308],{"class":101,"line":1200},[99,101309,101310],{"class":214},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[99,101312,101313],{"class":101,"line":1206},[99,101314,2386],{"emptyLinePlaceholder":26},[99,101316,101317],{"class":101,"line":1297},[99,101318,101319],{"class":214},"  \u003Cworldbody>\n",[99,101321,101322],{"class":101,"line":1303},[99,101323,101324],{"class":214},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[99,101326,101327],{"class":101,"line":1315},[99,101328,2386],{"emptyLinePlaceholder":26},[99,101330,101331],{"class":101,"line":1598},[99,101332,101333],{"class":214},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[99,101335,101336],{"class":101,"line":1603},[99,101337,101338],{"class":214},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[99,101340,101341],{"class":101,"line":1609},[99,101342,101343],{"class":214},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[99,101345,101346],{"class":101,"line":1614},[99,101347,101348],{"class":214},"    \u003C\u002Fbody>\n",[99,101350,101351],{"class":101,"line":1628},[99,101352,101353],{"class":214},"  \u003C\u002Fworldbody>\n",[99,101355,101356],{"class":101,"line":1633},[99,101357,101358],{"class":214},"\u003C\u002Fmujoco>\n",[99,101360,101361],{"class":101,"line":1639},[99,101362,95679],{"class":214},[99,101364,101365],{"class":101,"line":1660},[99,101366,2386],{"emptyLinePlaceholder":26},[99,101368,101369],{"class":101,"line":1665},[99,101370,2386],{"emptyLinePlaceholder":26},[99,101372,101373,101375,101377,101380,101382],{"class":101,"line":1679},[99,101374,31928],{"class":105},[99,101376,1959],{"class":1949},[99,101378,101379],{"class":109},"() -> ",[99,101381,95667],{"class":158},[99,101383,3725],{"class":109},[99,101385,101386,101389,101391,101394,101396],{"class":101,"line":1684},[99,101387,101388],{"class":109},"    model ",[99,101390,155],{"class":105},[99,101392,101393],{"class":109}," mujoco.MjModel.from_xml_string(",[99,101395,101295],{"class":158},[99,101397,116],{"class":109},[99,101399,101400,101403,101405],{"class":101,"line":1713},[99,101401,101402],{"class":109},"    data ",[99,101404,155],{"class":105},[99,101406,101407],{"class":109}," mujoco.MjData(model)\n",[99,101409,101410],{"class":101,"line":1718},[99,101411,2386],{"emptyLinePlaceholder":26},[99,101413,101414,101416,101418,101421],{"class":101,"line":1735},[99,101415,31280],{"class":158},[99,101417,110],{"class":109},[99,101419,101420],{"class":214},"\"nq:\"",[99,101422,101423],{"class":109},", model.nq)\n",[99,101425,101426,101428,101430,101433],{"class":101,"line":1740},[99,101427,31280],{"class":158},[99,101429,110],{"class":109},[99,101431,101432],{"class":214},"\"nv:\"",[99,101434,101435],{"class":109},", model.nv)\n",[99,101437,101438,101440,101442,101445],{"class":101,"line":1745},[99,101439,31280],{"class":158},[99,101441,110],{"class":109},[99,101443,101444],{"class":214},"\"nu:\"",[99,101446,101447],{"class":109},", model.nu)\n",[99,101449,101450,101452,101454,101457],{"class":101,"line":1750},[99,101451,31280],{"class":158},[99,101453,110],{"class":109},[99,101455,101456],{"class":214},"\"initial time:\"",[99,101458,101459],{"class":109},", data.time)\n",[99,101461,101462,101464,101466,101469],{"class":101,"line":1764},[99,101463,31280],{"class":158},[99,101465,110],{"class":109},[99,101467,101468],{"class":214},"\"initial qpos:\"",[99,101470,101471],{"class":109},", data.qpos.copy())\n",[99,101473,101474],{"class":101,"line":1769},[99,101475,2386],{"emptyLinePlaceholder":26},[99,101477,101478,101480,101483,101485,101487,101489,101491],{"class":101,"line":2563},[99,101479,3187],{"class":105},[99,101481,101482],{"class":109}," _ ",[99,101484,26032],{"class":105},[99,101486,32424],{"class":158},[99,101488,110],{"class":109},[99,101490,421],{"class":158},[99,101492,30767],{"class":109},[99,101494,101495],{"class":101,"line":2577},[99,101496,101497],{"class":109},"        mujoco.mj_step(model, data)\n",[99,101499,101500],{"class":101,"line":2585},[99,101501,2386],{"emptyLinePlaceholder":26},[99,101503,101504,101506,101508,101511],{"class":101,"line":2590},[99,101505,31280],{"class":158},[99,101507,110],{"class":109},[99,101509,101510],{"class":214},"\"final time:\"",[99,101512,101459],{"class":109},[99,101514,101515,101517,101519,101522],{"class":101,"line":2596},[99,101516,31280],{"class":158},[99,101518,110],{"class":109},[99,101520,101521],{"class":214},"\"final qpos:\"",[99,101523,101471],{"class":109},[99,101525,101526],{"class":101,"line":2602},[99,101527,2386],{"emptyLinePlaceholder":26},[99,101529,101530],{"class":101,"line":2607},[99,101531,2386],{"emptyLinePlaceholder":26},[99,101533,101534,101536,101538,101541,101544],{"class":101,"line":7935},[99,101535,1517],{"class":105},[99,101537,31201],{"class":158},[99,101539,101540],{"class":105}," ==",[99,101542,101543],{"class":214}," \"__main__\"",[99,101545,3725],{"class":109},[99,101547,101548],{"class":101,"line":7959},[99,101549,101550],{"class":109},"    main()\n",[70,101552,101553],{"id":101553},"代码逐段解释",[14,101555,101556],{},"导入库：",[90,101558,101560],{"className":30359,"code":101559,"language":30361,"meta":21,"style":21},"import mujoco\n",[96,101561,101562],{"__ignoreMap":21},[99,101563,101564,101566],{"class":101,"line":102},[99,101565,30373],{"class":105},[99,101567,101282],{"class":109},[14,101569,101570],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101572,101573],{},"定义 XML：",[90,101575,101577],{"className":30359,"code":101576,"language":30361,"meta":21,"style":21},"XML = \"\"\"\n...\n\"\"\"\n",[96,101578,101579,101587,101592],{"__ignoreMap":21},[99,101580,101581,101583,101585],{"class":101,"line":102},[99,101582,101295],{"class":158},[99,101584,13551],{"class":105},[99,101586,101300],{"class":214},[99,101588,101589],{"class":101,"line":22},[99,101590,101591],{"class":214},"...\n",[99,101593,101594],{"class":101,"line":1165},[99,101595,95679],{"class":214},[14,101597,101598,101599,101602],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[96,101600,101601],{},"freejoint"," 的方块。",[14,101604,101605],{},"编译模型：",[90,101607,101609],{"className":30359,"code":101608,"language":30361,"meta":21,"style":21},"model = mujoco.MjModel.from_xml_string(XML)\n",[96,101610,101611],{"__ignoreMap":21},[99,101612,101613,101616,101618,101620,101622],{"class":101,"line":102},[99,101614,101615],{"class":109},"model ",[99,101617,155],{"class":105},[99,101619,101393],{"class":109},[99,101621,101295],{"class":158},[99,101623,116],{"class":109},[14,101625,101626],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101628,101629],{},"创建数据：",[90,101631,101633],{"className":30359,"code":101632,"language":30361,"meta":21,"style":21},"data = mujoco.MjData(model)\n",[96,101634,101635],{"__ignoreMap":21},[99,101636,101637,101640,101642],{"class":101,"line":102},[99,101638,101639],{"class":109},"data ",[99,101641,155],{"class":105},[99,101643,101407],{"class":109},[14,101645,101646,101648,101649,101651],{},[96,101647,33382],{}," 会保存仿真当前状态。刚创建时，时间是 ",[96,101650,301],{},"，方块还在初始位置。",[14,101653,101654],{},"推进仿真：",[90,101656,101658],{"className":30359,"code":101657,"language":30361,"meta":21,"style":21},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[96,101659,101660,101676],{"__ignoreMap":21},[99,101661,101662,101664,101666,101668,101670,101672,101674],{"class":101,"line":102},[99,101663,3011],{"class":105},[99,101665,101482],{"class":109},[99,101667,26032],{"class":105},[99,101669,32424],{"class":158},[99,101671,110],{"class":109},[99,101673,421],{"class":158},[99,101675,30767],{"class":109},[99,101677,101678],{"class":101,"line":22},[99,101679,101680],{"class":109},"    mujoco.mj_step(model, data)\n",[14,101682,101683,101684,101686],{},"每次 ",[96,101685,101196],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[70,101688,101689],{"id":101689},"代码逐行细讲",[14,101691,101692],{},"下面把完整代码按新手视角拆开讲。",[90,101694,101695],{"className":30359,"code":101559,"language":30361,"meta":21,"style":21},[96,101696,101697],{"__ignoreMap":21},[99,101698,101699,101701],{"class":101,"line":102},[99,101700,30373],{"class":105},[99,101702,101282],{"class":109},[14,101704,101705,101707,101708,322,101710,322,101712,28366],{},[96,101706,30373],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[96,101709,100656],{},[96,101711,100661],{},[96,101713,101714],{},"mujoco.mj_step",[90,101716,101717],{"className":30359,"code":101576,"language":30361,"meta":21,"style":21},[96,101718,101719,101727,101731],{"__ignoreMap":21},[99,101720,101721,101723,101725],{"class":101,"line":102},[99,101722,101295],{"class":158},[99,101724,13551],{"class":105},[99,101726,101300],{"class":214},[99,101728,101729],{"class":101,"line":22},[99,101730,101591],{"class":214},[99,101732,101733],{"class":101,"line":1165},[99,101734,95679],{"class":214},[14,101736,101737,101739,101740,101743],{},[96,101738,101295],{}," 是一个变量名。右边的三引号 ",[96,101741,101742],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[90,101745,101746],{"className":53048,"code":101305,"language":53050,"meta":21,"style":21},[96,101747,101748],{"__ignoreMap":21},[99,101749,101750,101752,101754,101757,101759,101762],{"class":101,"line":102},[99,101751,1020],{"class":109},[99,101753,101002],{"class":51281},[99,101755,101756],{"class":1949}," model",[99,101758,155],{"class":109},[99,101760,101761],{"class":214},"\"first_sim\"",[99,101763,51288],{"class":109},[14,101765,101766,101767,101770,101771,28366],{},"这是 XML 的根标签。",[96,101768,101769],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[96,101772,101773],{},"first_sim",[90,101775,101776],{"className":53048,"code":101164,"language":53050,"meta":21,"style":21},[96,101777,101778],{"__ignoreMap":21},[99,101779,101780,101782,101784,101786,101788,101790,101792,101794,101796],{"class":101,"line":102},[99,101781,1020],{"class":109},[99,101783,69147],{"class":51281},[99,101785,101175],{"class":1949},[99,101787,155],{"class":109},[99,101789,101180],{"class":214},[99,101791,101183],{"class":1949},[99,101793,155],{"class":109},[99,101795,101188],{"class":214},[99,101797,101125],{"class":109},[14,101799,101800,101802,101803,101806,101807,101810],{},[96,101801,69147],{}," 用来设置仿真参数。",[96,101804,101805],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[96,101808,101809],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[90,101812,101814],{"className":53048,"code":101813,"language":53050,"meta":21,"style":21},"\u003Cworldbody>\n",[96,101815,101816],{"__ignoreMap":21},[99,101817,101818,101820,101823],{"class":101,"line":102},[99,101819,1020],{"class":109},[99,101821,101822],{"class":51281},"worldbody",[99,101824,51288],{"class":109},[14,101826,101827,101829],{},[96,101828,101822],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[90,101831,101833],{"className":53048,"code":101832,"language":53050,"meta":21,"style":21},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[96,101834,101835],{"__ignoreMap":21},[99,101836,101837,101839,101841,101843,101845,101848,101850,101852,101855,101857,101859,101862,101864,101866,101869],{"class":101,"line":102},[99,101838,1020],{"class":109},[99,101840,101101],{"class":51281},[99,101842,14907],{"class":1949},[99,101844,155],{"class":109},[99,101846,101847],{"class":214},"\"floor\"",[99,101849,53805],{"class":1949},[99,101851,155],{"class":109},[99,101853,101854],{"class":214},"\"plane\"",[99,101856,101117],{"class":1949},[99,101858,155],{"class":109},[99,101860,101861],{"class":214},"\"2 2 0.1\"",[99,101863,78748],{"class":1949},[99,101865,155],{"class":109},[99,101867,101868],{"class":214},"\"0.8 0.8 0.8 1\"",[99,101870,101125],{"class":109},[14,101872,101873,101874,101876,101877,101880,101881,101884,101885,101887],{},"这行创建地面。",[96,101875,101101],{}," 是几何体。",[96,101878,101879],{},"name=\"floor\""," 是名字。",[96,101882,101883],{},"type=\"plane\""," 表示平面。",[96,101886,55091],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[90,101889,101891],{"className":53048,"code":101890,"language":53050,"meta":21,"style":21},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[96,101892,101893],{"__ignoreMap":21},[99,101894,101895,101897,101899,101901,101903,101905,101907,101909,101911],{"class":101,"line":102},[99,101896,1020],{"class":109},[99,101898,51781],{"class":51281},[99,101900,14907],{"class":1949},[99,101902,155],{"class":109},[99,101904,53472],{"class":214},[99,101906,101087],{"class":1949},[99,101908,155],{"class":109},[99,101910,101092],{"class":214},[99,101912,51288],{"class":109},[14,101914,101915,101916,28366,101918,101921,101922,101924],{},"这行创建一个刚体，名字叫 ",[96,101917,53695],{},[96,101919,101920],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[96,101923,101150],{},"，也就是离地面 1 米高。",[90,101926,101928],{"className":53048,"code":101927,"language":53050,"meta":21,"style":21},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[96,101929,101930],{"__ignoreMap":21},[99,101931,101932,101934,101936,101938,101940,101943],{"class":101,"line":102},[99,101933,1020],{"class":109},[99,101935,101601],{"class":51281},[99,101937,14907],{"class":1949},[99,101939,155],{"class":109},[99,101941,101942],{"class":214},"\"box_free\"",[99,101944,101125],{"class":109},[14,101946,101947,101948,101950],{},"这行很重要。",[96,101949,101601],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[90,101952,101954],{"className":53048,"code":101953,"language":53050,"meta":21,"style":21},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[96,101955,101956],{"__ignoreMap":21},[99,101957,101958,101960,101962,101964,101966,101968,101970,101972,101974,101976,101978,101980,101983,101985,101987,101989,101991,101994],{"class":101,"line":102},[99,101959,1020],{"class":109},[99,101961,101101],{"class":51281},[99,101963,14907],{"class":1949},[99,101965,155],{"class":109},[99,101967,101108],{"class":214},[99,101969,53805],{"class":1949},[99,101971,155],{"class":109},[99,101973,53472],{"class":214},[99,101975,101117],{"class":1949},[99,101977,155],{"class":109},[99,101979,101122],{"class":214},[99,101981,101982],{"class":1949}," mass",[99,101984,155],{"class":109},[99,101986,3664],{"class":214},[99,101988,78748],{"class":1949},[99,101990,155],{"class":109},[99,101992,101993],{"class":214},"\"1 0 0 1\"",[99,101995,101125],{"class":109},[14,101997,101998,101999,102002,102003,102006,102007,102010,102011,102014],{},"这行给 box body 添加一个盒子形状。",[96,102000,102001],{},"type=\"box\""," 表示形状是盒子。",[96,102004,102005],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[96,102008,102009],{},"mass=\"1\""," 表示质量是 1。",[96,102012,102013],{},"rgba=\"1 0 0 1\""," 表示红色。",[90,102016,102018],{"className":30359,"code":102017,"language":30361,"meta":21,"style":21},"def main() -> None:\n",[96,102019,102020],{"__ignoreMap":21},[99,102021,102022,102024,102026,102028,102030],{"class":101,"line":102},[99,102023,31928],{"class":105},[99,102025,1959],{"class":1949},[99,102027,101379],{"class":109},[99,102029,95667],{"class":158},[99,102031,3725],{"class":109},[14,102033,102034,102036,102037,102040,102041,102044],{},[96,102035,31928],{}," 用来定义函数。这里定义了一个叫 ",[96,102038,102039],{},"main"," 的函数。",[96,102042,102043],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[90,102046,102047],{"className":30359,"code":101608,"language":30361,"meta":21,"style":21},[96,102048,102049],{"__ignoreMap":21},[99,102050,102051,102053,102055,102057,102059],{"class":101,"line":102},[99,102052,101615],{"class":109},[99,102054,155],{"class":105},[99,102056,101393],{"class":109},[99,102058,101295],{"class":158},[99,102060,116],{"class":109},[14,102062,102063,102064,102067],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[96,102065,102066],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[90,102069,102070],{"className":30359,"code":101632,"language":30361,"meta":21,"style":21},[96,102071,102072],{"__ignoreMap":21},[99,102073,102074,102076,102078],{"class":101,"line":102},[99,102075,101639],{"class":109},[99,102077,155],{"class":105},[99,102079,101407],{"class":109},[14,102081,102082,102083,102085,102086,102088],{},"这行创建仿真数据。",[96,102084,33382],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[96,102087,33382],{}," 都会变化。",[90,102090,102092],{"className":30359,"code":102091,"language":30361,"meta":21,"style":21},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[96,102093,102094,102104,102114],{"__ignoreMap":21},[99,102095,102096,102098,102100,102102],{"class":101,"line":102},[99,102097,30396],{"class":158},[99,102099,110],{"class":109},[99,102101,101420],{"class":214},[99,102103,101423],{"class":109},[99,102105,102106,102108,102110,102112],{"class":101,"line":22},[99,102107,30396],{"class":158},[99,102109,110],{"class":109},[99,102111,101432],{"class":214},[99,102113,101435],{"class":109},[99,102115,102116,102118,102120,102122],{"class":101,"line":1165},[99,102117,30396],{"class":158},[99,102119,110],{"class":109},[99,102121,101444],{"class":214},[99,102123,101447],{"class":109},[14,102125,102126,102128,102129,102132,102133,102136,102137,102140,102141,102144],{},[96,102127,30396],{}," 用来输出信息。",[96,102130,102131],{},"model.nq"," 是位置变量数量，",[96,102134,102135],{},"model.nv"," 是速度变量数量，",[96,102138,102139],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[96,102142,102143],{},"nu"," 是 0。",[90,102146,102148],{"className":30359,"code":102147,"language":30361,"meta":21,"style":21},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[96,102149,102150,102160],{"__ignoreMap":21},[99,102151,102152,102154,102156,102158],{"class":101,"line":102},[99,102153,30396],{"class":158},[99,102155,110],{"class":109},[99,102157,101456],{"class":214},[99,102159,101459],{"class":109},[99,102161,102162,102164,102166,102168],{"class":101,"line":22},[99,102163,30396],{"class":158},[99,102165,110],{"class":109},[99,102167,101468],{"class":214},[99,102169,101471],{"class":109},[14,102171,102172,102173,102175,102176,102178,102179,102182],{},"这里打印初始时间和初始位置。",[96,102174,101048],{}," 一开始是 0。",[96,102177,101051],{}," 是位置数组。",[96,102180,102181],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[90,102184,102185],{"className":30359,"code":101657,"language":30361,"meta":21,"style":21},[96,102186,102187,102203],{"__ignoreMap":21},[99,102188,102189,102191,102193,102195,102197,102199,102201],{"class":101,"line":102},[99,102190,3011],{"class":105},[99,102192,101482],{"class":109},[99,102194,26032],{"class":105},[99,102196,32424],{"class":158},[99,102198,110],{"class":109},[99,102200,421],{"class":158},[99,102202,30767],{"class":109},[99,102204,102205],{"class":101,"line":22},[99,102206,101680],{"class":109},[14,102208,102209,102211,102212,102215,102216,102218,102219,102221],{},[96,102210,3011],{}," 是循环。",[96,102213,102214],{},"range(100)"," 表示循环 100 次。",[96,102217,1102],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[96,102220,101196],{},"，仿真就前进一步。",[90,102223,102225],{"className":30359,"code":102224,"language":30361,"meta":21,"style":21},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[96,102226,102227,102237],{"__ignoreMap":21},[99,102228,102229,102231,102233,102235],{"class":101,"line":102},[99,102230,30396],{"class":158},[99,102232,110],{"class":109},[99,102234,101510],{"class":214},[99,102236,101459],{"class":109},[99,102238,102239,102241,102243,102245],{"class":101,"line":22},[99,102240,30396],{"class":158},[99,102242,110],{"class":109},[99,102244,101521],{"class":214},[99,102246,101471],{"class":109},[14,102248,102249],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[90,102251,102253],{"className":30359,"code":102252,"language":30361,"meta":21,"style":21},"if __name__ == \"__main__\":\n    main()\n",[96,102254,102255,102267],{"__ignoreMap":21},[99,102256,102257,102259,102261,102263,102265],{"class":101,"line":102},[99,102258,1517],{"class":105},[99,102260,31201],{"class":158},[99,102262,101540],{"class":105},[99,102264,101543],{"class":214},[99,102266,3725],{"class":109},[99,102268,102269],{"class":101,"line":22},[99,102270,101550],{"class":109},[14,102272,102273,102274,102277,102278,28366],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[96,102275,102276],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[96,102279,102276],{},[14,102281,102282],{},"运行:",[90,102284,102286],{"className":23810,"code":102285,"language":23812,"meta":21,"style":21},"python ch1_first_sim.py\n",[96,102287,102288],{"__ignoreMap":21},[99,102289,102290,102292],{"class":101,"line":102},[99,102291,30361],{"class":1949},[99,102293,101267],{"class":214},[41,102295,102297],{"id":102296},"_5运行结果说明","5.运行结果说明",[14,102299,102300],{},"你应该看到类似输出:",[90,102302,102305],{"className":102303,"code":102304,"language":5174,"meta":21},[5172],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[96,102306,102304],{"__ignoreMap":21},[14,102308,102309,102311,102312,102315,102316,28366],{},[96,102310,101601],{}," 有 7 个位置变量: ",[96,102313,102314],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[96,102317,102318],{},"vx vy vz wx wy wz",[14,102320,102321,102322,102325],{},"你还会看到 ",[96,102323,102324],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[41,102327,102329],{"id":102328},"_6验证步骤","6.验证步骤",[14,102331,102332],{},"确认版本:",[90,102334,102335],{"className":23810,"code":100920,"language":23812,"meta":21,"style":21},[96,102336,102337],{"__ignoreMap":21},[99,102338,102339,102341,102343],{"class":101,"line":102},[99,102340,30361],{"class":1949},[99,102342,30339],{"class":158},[99,102344,100931],{"class":214},[14,102346,102347],{},"确认导入的是官方 bindings:",[90,102349,102351],{"className":23810,"code":102350,"language":23812,"meta":21,"style":21},"python -c \"import mujoco; print(mujoco)\"\n",[96,102352,102353],{"__ignoreMap":21},[99,102354,102355,102357,102359],{"class":101,"line":102},[99,102356,30361],{"class":1949},[99,102358,30339],{"class":158},[99,102360,102361],{"class":214}," \"import mujoco; print(mujoco)\"\n",[14,102363,102364],{},"运行程序:",[90,102366,102367],{"className":23810,"code":102285,"language":23812,"meta":21,"style":21},[96,102368,102369],{"__ignoreMap":21},[99,102370,102371,102373],{"class":101,"line":102},[99,102372,30361],{"class":1949},[99,102374,101267],{"class":214},[14,102376,102377,102378,102381,102382,28366],{},"检查 ",[96,102379,102380],{},"final time"," 是否约等于 ",[96,102383,102384],{},"1.0",[14,102386,102387],{},"再做几个小实验：",[53,102389,102390,102400,102408,102421],{},[56,102391,102392,102393,102395,102396,102399],{},"把 ",[96,102394,101920],{}," 改成 ",[96,102397,102398],{},"pos=\"0 0 2\"","，观察初始高度变化。",[56,102401,102392,102402,102395,102404,102407],{},[96,102403,101809],{},[96,102405,102406],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[56,102409,102392,102410,102395,102412,102415,102416,102418,102419,28366],{},[96,102411,101805],{},[96,102413,102414],{},"timestep=\"0.005\"","，观察 100 步后的 ",[96,102417,102380],{}," 是否变成约 ",[96,102420,35310],{},[56,102422,102423,102424,102427],{},"删除 ",[96,102425,102426],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102429,102430],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[41,102432,102434],{"id":102433},"_7常见错误与解决方案","7.常见错误与解决方案",[70,102436,102438],{"id":102437},"modulenotfounderror-no-module-named-mujoco",[96,102439,102440],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102442,102443],{},"解决:",[90,102445,102447],{"className":23810,"code":102446,"language":23812,"meta":21,"style":21},"pip install \"mujoco>=2.3\"\n",[96,102448,102449],{"__ignoreMap":21},[99,102450,102451,102453,102455],{"class":101,"line":102},[99,102452,23819],{"class":1949},[99,102454,23822],{"class":214},[99,102456,102457],{"class":214}," \"mujoco>=2.3\"\n",[70,102459,102461],{"id":102460},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102463,102464],{},"先安装系统依赖:",[90,102466,102468],{"className":23810,"code":102467,"language":23812,"meta":21,"style":21},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[96,102469,102470],{"__ignoreMap":21},[99,102471,102472,102474,102476,102478,102480,102483,102485,102488,102490,102493,102495],{"class":101,"line":102},[99,102473,24565],{"class":1949},[99,102475,26304],{"class":214},[99,102477,23822],{"class":214},[99,102479,26389],{"class":158},[99,102481,102482],{"class":214}," mesa-libGL",[99,102484,100795],{"class":214},[99,102486,102487],{"class":214}," glfw",[99,102489,100815],{"class":214},[99,102491,102492],{"class":214}," libX11",[99,102494,100828],{"class":214},[99,102496,102497],{"class":214}," libXrandr\n",[70,102499,102501],{"id":102500},"xml-解析失败","XML 解析失败",[14,102503,102504],{},"检查:",[53,102506,102507,102510,102513,102519],{},[56,102508,102509],{},"标签是否闭合",[56,102511,102512],{},"属性是否带引号",[56,102514,102515,102516],{},"根节点是否是 ",[96,102517,102518],{},"\u003Cmujoco>",[56,102520,102521,102523,102524,102527],{},[96,102522,51781],{}," 是否放在 ",[96,102525,102526],{},"\u003Cworldbody>"," 内部",[70,102529,102531,102533,102534],{"id":102530},"final-time-不是严格等于-10",[96,102532,102380],{}," 不是严格等于 ",[96,102535,102384],{},[14,102537,102538],{},"这通常不是错误。浮点数计算可能得到：",[90,102540,102543],{"className":102541,"code":102542,"language":5174,"meta":21},[5172],"1.0000000000000007\n",[96,102544,102542],{"__ignoreMap":21},[14,102546,102547,102548,102550],{},"只要接近 ",[96,102549,102384],{}," 就正常。",[70,102552,102553],{"id":102553},"方块没有掉下来",[14,102555,102556],{},"检查：",[53,102558,102559,102565,102571,102576],{},[56,102560,102561,102562],{},"方块 body 里是否有 ",[96,102563,102564],{},"\u003Cfreejoint\u002F>",[56,102566,102567,102568],{},"重力是否是 ",[96,102569,102570],{},"0 0 -9.81",[56,102572,102573,102574],{},"是否真的调用了 ",[96,102575,100666],{},[56,102577,102578,102579,102581,102582],{},"你看的是否是 ",[96,102580,102324],{},"，不是 ",[96,102583,102584],{},"initial qpos",[41,102586,102588],{"id":102587},"_8本章小结","8.本章小结",[14,102590,102591],{},"本章你已经完成了 MuJoCo 的最小闭环：",[90,102593,102596],{"className":102594,"code":102595,"language":5174,"meta":21},[5172],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[96,102597,102595],{"__ignoreMap":21},[14,102599,102600],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5113,102602,102603],{},"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":21,"searchDepth":22,"depth":22,"links":102605},[102606,102607,102608,102613,102617,102618,102619,102627],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":102609},[102610,102611,102612],{"id":101063,"depth":1165,"text":101064},{"id":101157,"depth":1165,"text":101158},{"id":101209,"depth":1165,"text":101210},{"id":101233,"depth":22,"text":101234,"children":102614},[102615,102616],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":102620},[102621,102622,102623,102624,102626],{"id":102437,"depth":1165,"text":102440},{"id":102460,"depth":1165,"text":102461},{"id":102500,"depth":1165,"text":102501},{"id":102530,"depth":1165,"text":102625},"final time 不是严格等于 1.0",{"id":102553,"depth":1165,"text":102553},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100619,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102634,"title":102635,"body":102636,"description":21,"extension":24,"meta":104292,"navigation":26,"path":104293,"seo":104294,"stem":104295,"__hash__":104296},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102637,"toc":104268},[102638,102641,102643,102646,102649,102666,102761,102764,102770,102772,102774,102798,102801,102815,102818,102859,102861,102874,102876,102879,102927,102939,102942,102945,102951,102964,103031,103034,103053,103056,103059,103065,103067,103076,103079,103083,103092,103174,103183,103187,103193,103207,103217,103219,103549,103552,103564,103566,103577,103579,103582,103600,103603,103606,103624,103635,103638,103653,103663,103665,103686,103703,103723,103729,103769,103785,103801,103807,103810,103834,103850,103855,103885,103902,103927,103930,103945,103954,103969,103978,103993,104000,104002,104012,104025,104032,104035,104074,104081,104083,104135,104137,104143,104146,104153,104160,104163,104165,104183,104186,104189,104223,104235,104237,104240,104262,104265],[10,102639,102635],{"id":102640},"_2xml-与-mjcf-物理建模基础",[41,102642,100628],{"id":100627},[14,102644,102645],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102647,102648],{},"本章结束后，你应该能看懂一个简单模型里：",[53,102650,102651,102654,102657,102660,102663],{},[56,102652,102653],{},"地面在哪里。",[56,102655,102656],{},"物体初始位置在哪里。",[56,102658,102659],{},"几何体是什么形状。",[56,102661,102662],{},"哪些 body 可以自由运动。",[56,102664,102665],{},"如何用名字在 Python 里找到 XML 中的对象。",[247,102667,102668,102678],{},[250,102669,102670],{},[253,102671,102672,102675],{},[256,102673,102674],{"align":23724},"标签",[256,102676,102677],{"align":23724},"作用",[294,102679,102680,102689,102699,102708,102718,102728,102741,102751],{},[253,102681,102682,102686],{},[299,102683,102684],{"align":23724},[96,102685,102518],{},[299,102687,102688],{"align":23724},"根节点",[253,102690,102691,102696],{},[299,102692,102693],{"align":23724},[96,102694,102695],{},"\u003Coption>",[299,102697,102698],{"align":23724},"仿真参数",[253,102700,102701,102705],{},[299,102702,102703],{"align":23724},[96,102704,102526],{},[299,102706,102707],{"align":23724},"世界中的物体",[253,102709,102710,102715],{},[299,102711,102712],{"align":23724},[96,102713,102714],{},"\u003Cbody>",[299,102716,102717],{"align":23724},"刚体",[253,102719,102720,102725],{},[299,102721,102722],{"align":23724},[96,102723,102724],{},"\u003Cgeom>",[299,102726,102727],{"align":23724},"几何体、碰撞体、可视体",[253,102729,102730,102738],{},[299,102731,102732,24967,102735],{"align":23724},[96,102733,102734],{},"\u003Cjoint>",[96,102736,102737],{},"\u003Cfreejoint>",[299,102739,102740],{"align":23724},"关节",[253,102742,102743,102748],{},[299,102744,102745],{"align":23724},[96,102746,102747],{},"\u003Csite>",[299,102749,102750],{"align":23724},"标记点",[253,102752,102753,102758],{},[299,102754,102755],{"align":23724},[96,102756,102757],{},"\u003Cactuator>",[299,102759,102760],{"align":23724},"控制器",[14,102762,102763],{},"初学时可以先记住：",[90,102765,102768],{"className":102766,"code":102767,"language":5174,"meta":21},[5172],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[96,102769,102767],{"__ignoreMap":21},[41,102771,100751],{"id":100750},[14,102773,100754],{},[90,102775,102777],{"className":23810,"code":102776,"language":23812,"meta":21,"style":21},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[96,102778,102779],{"__ignoreMap":21},[99,102780,102781,102783,102785,102787,102789,102791,102793,102795],{"class":101,"line":102},[99,102782,24565],{"class":1949},[99,102784,26304],{"class":214},[99,102786,23822],{"class":214},[99,102788,26389],{"class":158},[99,102790,102482],{"class":214},[99,102792,100795],{"class":214},[99,102794,102487],{"class":214},[99,102796,102797],{"class":214}," glfw-devel\n",[14,102799,102800],{},"pip:",[90,102802,102803],{"className":23810,"code":100900,"language":23812,"meta":21,"style":21},[96,102804,102805],{"__ignoreMap":21},[99,102806,102807,102809,102811,102813],{"class":101,"line":102},[99,102808,23819],{"class":1949},[99,102810,23822],{"class":214},[99,102812,100911],{"class":214},[99,102814,100914],{"class":214},[14,102816,102817],{},"conda:",[90,102819,102821],{"className":23810,"code":102820,"language":23812,"meta":21,"style":21},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[96,102822,102823,102840,102849],{"__ignoreMap":21},[99,102824,102825,102827,102829,102831,102834,102836,102838],{"class":101,"line":102},[99,102826,30311],{"class":1949},[99,102828,29157],{"class":214},[99,102830,25104],{"class":158},[99,102832,102833],{"class":214}," mujoco-xml",[99,102835,100956],{"class":214},[99,102837,100959],{"class":158},[99,102839,100962],{"class":158},[99,102841,102842,102844,102846],{"class":101,"line":22},[99,102843,30311],{"class":1949},[99,102845,100969],{"class":214},[99,102847,102848],{"class":214}," mujoco-xml\n",[99,102850,102851,102853,102855,102857],{"class":101,"line":1165},[99,102852,23819],{"class":1949},[99,102854,23822],{"class":214},[99,102856,100911],{"class":214},[99,102858,100914],{"class":214},[14,102860,100985],{},[53,102862,102863,102866,102871],{},[56,102864,102865],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[56,102867,102868,102869,28366],{},"本章使用基础标签，适用于 ",[96,102870,101008],{},[56,102872,102873],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[41,102875,101026],{"id":101025},[14,102877,102878],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[90,102880,102882],{"className":53048,"code":102881,"language":53050,"meta":21,"style":21},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[96,102883,102884,102898,102906,102911,102919],{"__ignoreMap":21},[99,102885,102886,102888,102890,102892,102894,102896],{"class":101,"line":102},[99,102887,1020],{"class":109},[99,102889,101002],{"class":51281},[99,102891,101756],{"class":1949},[99,102893,155],{"class":109},[99,102895,62660],{"class":214},[99,102897,51288],{"class":109},[99,102899,102900,102902,102904],{"class":101,"line":22},[99,102901,52125],{"class":109},[99,102903,101822],{"class":51281},[99,102905,51288],{"class":109},[99,102907,102908],{"class":101,"line":1165},[99,102909,102910],{"class":109},"    ...\n",[99,102912,102913,102915,102917],{"class":101,"line":1180},[99,102914,52398],{"class":109},[99,102916,101822],{"class":51281},[99,102918,51288],{"class":109},[99,102920,102921,102923,102925],{"class":101,"line":1186},[99,102922,51766],{"class":109},[99,102924,101002],{"class":51281},[99,102926,51288],{"class":109},[14,102928,102929,102931,102932,102934,102935,102938],{},[96,102930,51781],{}," 表示刚体。",[96,102933,101101],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[96,102936,102937],{},"joint"," 表示刚体相对父刚体如何运动。",[70,102940,102941],{"id":102941},"层级结构非常重要",[14,102943,102944],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[90,102946,102949],{"className":102947,"code":102948,"language":5174,"meta":21},[5172],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[96,102950,102948],{"__ignoreMap":21},[14,102952,102953,100999,102956,102959,102960,102963],{},[96,102954,102955],{},"red_box_geom",[96,102957,102958],{},"box_center"," 都属于 ",[96,102961,102962],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[90,102965,102967],{"className":53048,"code":102966,"language":53050,"meta":21,"style":21},"\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",[96,102968,102969,102989,103003,103023],{"__ignoreMap":21},[99,102970,102971,102973,102975,102977,102979,102981,102983,102985,102987],{"class":101,"line":102},[99,102972,1020],{"class":109},[99,102974,51781],{"class":51281},[99,102976,14907],{"class":1949},[99,102978,155],{"class":109},[99,102980,53472],{"class":214},[99,102982,101087],{"class":1949},[99,102984,155],{"class":109},[99,102986,101092],{"class":214},[99,102988,51288],{"class":109},[99,102990,102991,102993,102995,102997,102999,103001],{"class":101,"line":22},[99,102992,52125],{"class":109},[99,102994,101601],{"class":51281},[99,102996,14907],{"class":1949},[99,102998,155],{"class":109},[99,103000,101942],{"class":214},[99,103002,101125],{"class":109},[99,103004,103005,103007,103009,103011,103013,103015,103017,103019,103021],{"class":101,"line":1165},[99,103006,52125],{"class":109},[99,103008,101101],{"class":51281},[99,103010,53805],{"class":1949},[99,103012,155],{"class":109},[99,103014,53472],{"class":214},[99,103016,101117],{"class":1949},[99,103018,155],{"class":109},[99,103020,101122],{"class":214},[99,103022,101125],{"class":109},[99,103024,103025,103027,103029],{"class":101,"line":1180},[99,103026,51766],{"class":109},[99,103028,51781],{"class":51281},[99,103030,51288],{"class":109},[14,103032,103033],{},"含义:",[53,103035,103036,103042,103047,103050],{},[56,103037,103038,103039,103041],{},"创建名为 ",[96,103040,53695],{}," 的刚体",[56,103043,103044,103045],{},"初始位置在世界坐标 ",[96,103046,101150],{},[56,103048,103049],{},"它有一个自由关节",[56,103051,103052],{},"它有一个盒子几何体",[70,103054,103055],{"id":103055},"坐标怎么理解",[14,103057,103058],{},"MuJoCo 默认使用三维坐标：",[90,103060,103063],{"className":103061,"code":103062,"language":5174,"meta":21},[5172],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[96,103064,103062],{"__ignoreMap":21},[14,103066,14620],{},[90,103068,103070],{"className":53048,"code":103069,"language":53050,"meta":21,"style":21},"pos=\"0 0 1\"\n",[96,103071,103072],{"__ignoreMap":21},[99,103073,103074],{"class":101,"line":102},[99,103075,103069],{"class":109},[14,103077,103078],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[70,103080,103082],{"id":103081},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103084,103085,103086,82511,103089,103091],{},"不同 ",[96,103087,103088],{},"type",[96,103090,31477],{}," 含义不同：",[247,103093,103094,103109],{},[250,103095,103096],{},[253,103097,103098,103102,103107],{},[256,103099,103100],{"align":23724},[96,103101,103088],{},[256,103103,103104,103106],{"align":23724},[96,103105,31477],{}," 示例",[256,103108,100681],{"align":23724},[294,103110,103111,103125,103140,103159],{},[253,103112,103113,103117,103122],{},[299,103114,103115],{"align":23724},[96,103116,53695],{},[299,103118,103119],{"align":23724},[96,103120,103121],{},"size=\"0.1 0.2 0.3\"",[299,103123,103124],{"align":23724},"x\u002Fy\u002Fz 半边长，不是完整长度",[253,103126,103127,103132,103137],{},[299,103128,103129],{"align":23724},[96,103130,103131],{},"sphere",[299,103133,103134],{"align":23724},[96,103135,103136],{},"size=\"0.1\"",[299,103138,103139],{"align":23724},"球半径",[253,103141,103142,103147,103152],{},[299,103143,103144],{"align":23724},[96,103145,103146],{},"capsule",[299,103148,103149],{"align":23724},[96,103150,103151],{},"size=\"0.03\"",[299,103153,103154,103155,103158],{"align":23724},"胶囊半径，长度常用 ",[96,103156,103157],{},"fromto"," 指定",[253,103160,103161,103166,103171],{},[299,103162,103163],{"align":23724},[96,103164,103165],{},"plane",[299,103167,103168],{"align":23724},[96,103169,103170],{},"size=\"3 3 0.1\"",[299,103172,103173],{"align":23724},"可视平面大小，通常当地面",[14,103175,103176,103177,103179,103180,103182],{},"最容易踩坑的是 box：",[96,103178,102005],{}," 表示边长大约是 ",[96,103181,32018],{},"，因为 MuJoCo 用的是半边长。",[70,103184,103186],{"id":103185},"site-是什么","site 是什么",[14,103188,103189,103192],{},[96,103190,103191],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[53,103194,103195,103198,103201,103204],{},[56,103196,103197],{},"标记机械臂末端。",[56,103199,103200],{},"标记目标位置。",[56,103202,103203],{},"放传感器或相机参考点。",[56,103205,103206],{},"在 Python 中读取某个关键点的世界坐标。",[14,103208,103209,103210,100999,103213,103216],{},"在后面的 Reacher 任务中，",[96,103211,103212],{},"tip",[96,103214,103215],{},"target"," 就会用 site 表示。",[41,103218,101234],{"id":101233},[90,103220,103222],{"className":30359,"code":103221,"language":30361,"meta":21,"style":21},"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",[96,103223,103224,103230,103240,103244,103248,103256,103261,103265,103269,103273,103278,103282,103287,103292,103297,103302,103306,103310,103314,103318,103322,103326,103338,103350,103358,103362,103377,103392,103396,103409,103424,103437,103450,103454,103470,103474,103478,103489,103501,103513,103525,103529,103533,103545],{"__ignoreMap":21},[99,103225,103226,103228],{"class":101,"line":102},[99,103227,30373],{"class":105},[99,103229,101282],{"class":109},[99,103231,103232,103234,103236,103238],{"class":101,"line":22},[99,103233,30373],{"class":105},[99,103235,31361],{"class":109},[99,103237,31364],{"class":105},[99,103239,31367],{"class":109},[99,103241,103242],{"class":101,"line":1165},[99,103243,2386],{"emptyLinePlaceholder":26},[99,103245,103246],{"class":101,"line":1180},[99,103247,2386],{"emptyLinePlaceholder":26},[99,103249,103250,103252,103254],{"class":101,"line":1186},[99,103251,101295],{"class":158},[99,103253,13551],{"class":105},[99,103255,101300],{"class":214},[99,103257,103258],{"class":101,"line":1200},[99,103259,103260],{"class":214},"\u003Cmujoco model=\"xml_basic\">\n",[99,103262,103263],{"class":101,"line":1206},[99,103264,101310],{"class":214},[99,103266,103267],{"class":101,"line":1297},[99,103268,2386],{"emptyLinePlaceholder":26},[99,103270,103271],{"class":101,"line":1303},[99,103272,101319],{"class":214},[99,103274,103275],{"class":101,"line":1315},[99,103276,103277],{"class":214},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[99,103279,103280],{"class":101,"line":1598},[99,103281,2386],{"emptyLinePlaceholder":26},[99,103283,103284],{"class":101,"line":1603},[99,103285,103286],{"class":214},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[99,103288,103289],{"class":101,"line":1609},[99,103290,103291],{"class":214},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[99,103293,103294],{"class":101,"line":1614},[99,103295,103296],{"class":214},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[99,103298,103299],{"class":101,"line":1628},[99,103300,103301],{"class":214},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[99,103303,103304],{"class":101,"line":1633},[99,103305,101348],{"class":214},[99,103307,103308],{"class":101,"line":1639},[99,103309,101353],{"class":214},[99,103311,103312],{"class":101,"line":1660},[99,103313,101358],{"class":214},[99,103315,103316],{"class":101,"line":1665},[99,103317,95679],{"class":214},[99,103319,103320],{"class":101,"line":1679},[99,103321,2386],{"emptyLinePlaceholder":26},[99,103323,103324],{"class":101,"line":1684},[99,103325,2386],{"emptyLinePlaceholder":26},[99,103327,103328,103330,103332,103334,103336],{"class":101,"line":1713},[99,103329,31928],{"class":105},[99,103331,1959],{"class":1949},[99,103333,101379],{"class":109},[99,103335,95667],{"class":158},[99,103337,3725],{"class":109},[99,103339,103340,103342,103344,103346,103348],{"class":101,"line":1718},[99,103341,101388],{"class":109},[99,103343,155],{"class":105},[99,103345,101393],{"class":109},[99,103347,101295],{"class":158},[99,103349,116],{"class":109},[99,103351,103352,103354,103356],{"class":101,"line":1735},[99,103353,101402],{"class":109},[99,103355,155],{"class":105},[99,103357,101407],{"class":109},[99,103359,103360],{"class":101,"line":1740},[99,103361,2386],{"emptyLinePlaceholder":26},[99,103363,103364,103367,103369,103372,103375],{"class":101,"line":1745},[99,103365,103366],{"class":109},"    box_body_id ",[99,103368,155],{"class":105},[99,103370,103371],{"class":109}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[99,103373,103374],{"class":214},"\"red_box\"",[99,103376,116],{"class":109},[99,103378,103379,103382,103384,103387,103390],{"class":101,"line":1750},[99,103380,103381],{"class":109},"    site_id ",[99,103383,155],{"class":105},[99,103385,103386],{"class":109}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[99,103388,103389],{"class":214},"\"box_center\"",[99,103391,116],{"class":109},[99,103393,103394],{"class":101,"line":1764},[99,103395,2386],{"emptyLinePlaceholder":26},[99,103397,103398,103400,103403,103405,103407],{"class":101,"line":1769},[99,103399,3087],{"class":105},[99,103401,103402],{"class":109}," box_body_id ",[99,103404,1020],{"class":105},[99,103406,4079],{"class":158},[99,103408,3725],{"class":109},[99,103410,103411,103414,103417,103419,103422],{"class":101,"line":2563},[99,103412,103413],{"class":105},"        raise",[99,103415,103416],{"class":158}," RuntimeError",[99,103418,110],{"class":109},[99,103420,103421],{"class":214},"\"body red_box not found\"",[99,103423,116],{"class":109},[99,103425,103426,103428,103431,103433,103435],{"class":101,"line":2577},[99,103427,3087],{"class":105},[99,103429,103430],{"class":109}," site_id ",[99,103432,1020],{"class":105},[99,103434,4079],{"class":158},[99,103436,3725],{"class":109},[99,103438,103439,103441,103443,103445,103448],{"class":101,"line":2585},[99,103440,103413],{"class":105},[99,103442,103416],{"class":158},[99,103444,110],{"class":109},[99,103446,103447],{"class":214},"\"site box_center not found\"",[99,103449,116],{"class":109},[99,103451,103452],{"class":101,"line":2590},[99,103453,2386],{"emptyLinePlaceholder":26},[99,103455,103456,103458,103460,103462,103464,103466,103468],{"class":101,"line":2596},[99,103457,3187],{"class":105},[99,103459,101482],{"class":109},[99,103461,26032],{"class":105},[99,103463,32424],{"class":158},[99,103465,110],{"class":109},[99,103467,1708],{"class":158},[99,103469,30767],{"class":109},[99,103471,103472],{"class":101,"line":2602},[99,103473,101497],{"class":109},[99,103475,103476],{"class":101,"line":2607},[99,103477,2386],{"emptyLinePlaceholder":26},[99,103479,103480,103482,103484,103487],{"class":101,"line":7935},[99,103481,31280],{"class":158},[99,103483,110],{"class":109},[99,103485,103486],{"class":214},"\"simulation time:\"",[99,103488,101459],{"class":109},[99,103490,103491,103493,103495,103498],{"class":101,"line":7959},[99,103492,31280],{"class":158},[99,103494,110],{"class":109},[99,103496,103497],{"class":214},"\"box body position:\"",[99,103499,103500],{"class":109},", data.xpos[box_body_id].copy())\n",[99,103502,103503,103505,103507,103510],{"class":101,"line":7964},[99,103504,31280],{"class":158},[99,103506,110],{"class":109},[99,103508,103509],{"class":214},"\"site position:\"",[99,103511,103512],{"class":109},", data.site_xpos[site_id].copy())\n",[99,103514,103515,103517,103519,103522],{"class":101,"line":7970},[99,103516,31280],{"class":158},[99,103518,110],{"class":109},[99,103520,103521],{"class":214},"\"box qpos:\"",[99,103523,103524],{"class":109},", np.array(data.qpos))\n",[99,103526,103527],{"class":101,"line":7997},[99,103528,2386],{"emptyLinePlaceholder":26},[99,103530,103531],{"class":101,"line":8002},[99,103532,2386],{"emptyLinePlaceholder":26},[99,103534,103535,103537,103539,103541,103543],{"class":101,"line":8008},[99,103536,1517],{"class":105},[99,103538,31201],{"class":158},[99,103540,101540],{"class":105},[99,103542,101543],{"class":214},[99,103544,3725],{"class":109},[99,103546,103547],{"class":101,"line":8020},[99,103548,101550],{"class":109},[14,103550,103551],{},"保存为：",[90,103553,103555],{"className":23810,"code":103554,"language":23812,"meta":21,"style":21},"touch ch2_xml_basic.py\n",[96,103556,103557],{"__ignoreMap":21},[99,103558,103559,103561],{"class":101,"line":102},[99,103560,101264],{"class":1949},[99,103562,103563],{"class":214}," ch2_xml_basic.py\n",[14,103565,102282],{},[90,103567,103569],{"className":23810,"code":103568,"language":23812,"meta":21,"style":21},"python ch2_xml_basic.py\n",[96,103570,103571],{"__ignoreMap":21},[99,103572,103573,103575],{"class":101,"line":102},[99,103574,30361],{"class":1949},[99,103576,103563],{"class":214},[70,103578,101553],{"id":101553},[14,103580,103581],{},"用名字查找 body：",[90,103583,103585],{"className":30359,"code":103584,"language":30361,"meta":21,"style":21},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[96,103586,103587],{"__ignoreMap":21},[99,103588,103589,103592,103594,103596,103598],{"class":101,"line":102},[99,103590,103591],{"class":109},"box_body_id ",[99,103593,155],{"class":105},[99,103595,103371],{"class":109},[99,103597,103374],{"class":214},[99,103599,116],{"class":109},[14,103601,103602],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103604,103605],{},"用名字查找 site：",[90,103607,103609],{"className":30359,"code":103608,"language":30361,"meta":21,"style":21},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[96,103610,103611],{"__ignoreMap":21},[99,103612,103613,103616,103618,103620,103622],{"class":101,"line":102},[99,103614,103615],{"class":109},"site_id ",[99,103617,155],{"class":105},[99,103619,103386],{"class":109},[99,103621,103389],{"class":214},[99,103623,116],{"class":109},[14,103625,103626,103627,103630,103631,103634],{},"注意第二个参数是对象类型。查 body 就用 ",[96,103628,103629],{},"mjOBJ_BODY","，查 site 就用 ",[96,103632,103633],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103636,103637],{},"读取世界坐标：",[90,103639,103641],{"className":30359,"code":103640,"language":30361,"meta":21,"style":21},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[96,103642,103643,103648],{"__ignoreMap":21},[99,103644,103645],{"class":101,"line":102},[99,103646,103647],{"class":109},"data.xpos[box_body_id]\n",[99,103649,103650],{"class":101,"line":22},[99,103651,103652],{"class":109},"data.site_xpos[site_id]\n",[14,103654,103655,103658,103659,103662],{},[96,103656,103657],{},"xpos"," 是 body 的世界坐标，",[96,103660,103661],{},"site_xpos"," 是 site 的世界坐标。",[70,103664,101689],{"id":101689},[90,103666,103668],{"className":30359,"code":103667,"language":30361,"meta":21,"style":21},"import mujoco\nimport numpy as np\n",[96,103669,103670,103676],{"__ignoreMap":21},[99,103671,103672,103674],{"class":101,"line":102},[99,103673,30373],{"class":105},[99,103675,101282],{"class":109},[99,103677,103678,103680,103682,103684],{"class":101,"line":22},[99,103679,30373],{"class":105},[99,103681,31361],{"class":109},[99,103683,31364],{"class":105},[99,103685,31367],{"class":109},[14,103687,103688,103689,103692,103693,103696,103697,322,103700,28366],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[96,103690,103691],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[96,103694,103695],{},"as np"," 是习惯写法，后面就可以写 ",[96,103698,103699],{},"np.array(...)",[96,103701,103702],{},"np.round(...)",[90,103704,103705],{"className":30359,"code":101576,"language":30361,"meta":21,"style":21},[96,103706,103707,103715,103719],{"__ignoreMap":21},[99,103708,103709,103711,103713],{"class":101,"line":102},[99,103710,101295],{"class":158},[99,103712,13551],{"class":105},[99,103714,101300],{"class":214},[99,103716,103717],{"class":101,"line":22},[99,103718,101591],{"class":214},[99,103720,103721],{"class":101,"line":1165},[99,103722,95679],{"class":214},[14,103724,103725,103726,28366],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[96,103727,103728],{},"mujoco.MjModel.from_xml_string(XML)",[90,103730,103732],{"className":53048,"code":103731,"language":53050,"meta":21,"style":21},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[96,103733,103734],{"__ignoreMap":21},[99,103735,103736,103738,103740,103742,103744,103746,103748,103750,103753,103755,103757,103760,103762,103764,103767],{"class":101,"line":102},[99,103737,1020],{"class":109},[99,103739,103191],{"class":51281},[99,103741,14907],{"class":1949},[99,103743,155],{"class":109},[99,103745,103389],{"class":214},[99,103747,101087],{"class":1949},[99,103749,155],{"class":109},[99,103751,103752],{"class":214},"\"0 0 0\"",[99,103754,101117],{"class":1949},[99,103756,155],{"class":109},[99,103758,103759],{"class":214},"\"0.03\"",[99,103761,78748],{"class":1949},[99,103763,155],{"class":109},[99,103765,103766],{"class":214},"\"0 1 0 1\"",[99,103768,101125],{"class":109},[14,103770,103771,103773,103774,103777,103778,103780,103781,103784],{},[96,103772,103191],{}," 是标记点。",[96,103775,103776],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[96,103779,103151],{}," 表示显示出来的小球大小。",[96,103782,103783],{},"rgba=\"0 1 0 1\""," 表示绿色。",[90,103786,103787],{"className":30359,"code":103584,"language":30361,"meta":21,"style":21},[96,103788,103789],{"__ignoreMap":21},[99,103790,103791,103793,103795,103797,103799],{"class":101,"line":102},[99,103792,103591],{"class":109},[99,103794,155],{"class":105},[99,103796,103371],{"class":109},[99,103798,103374],{"class":214},[99,103800,116],{"class":109},[14,103802,103803,103804,103806],{},"这行的作用是：根据名字 ",[96,103805,103374],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103808,103809],{},"拆开看：",[53,103811,103812,103818,103823,103829],{},[56,103813,103814,103817],{},[96,103815,103816],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[56,103819,103820,103822],{},[96,103821,102066],{}," 是被查询的模型。",[56,103824,103825,103828],{},[96,103826,103827],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[56,103830,103831,103833],{},[96,103832,103374],{}," 是 XML 里写的名字。",[90,103835,103836],{"className":30359,"code":103608,"language":30361,"meta":21,"style":21},[96,103837,103838],{"__ignoreMap":21},[99,103839,103840,103842,103844,103846,103848],{"class":101,"line":102},[99,103841,103615],{"class":109},[99,103843,155],{"class":105},[99,103845,103386],{"class":109},[99,103847,103389],{"class":214},[99,103849,116],{"class":109},[14,103851,103852,103853,28366],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[96,103854,103389],{},[90,103856,103858],{"className":30359,"code":103857,"language":30361,"meta":21,"style":21},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[96,103859,103860,103872],{"__ignoreMap":21},[99,103861,103862,103864,103866,103868,103870],{"class":101,"line":102},[99,103863,1517],{"class":105},[99,103865,103402],{"class":109},[99,103867,1020],{"class":105},[99,103869,4079],{"class":158},[99,103871,3725],{"class":109},[99,103873,103874,103877,103879,103881,103883],{"class":101,"line":22},[99,103875,103876],{"class":105},"    raise",[99,103878,103416],{"class":158},[99,103880,110],{"class":109},[99,103882,103421],{"class":214},[99,103884,116],{"class":109},[14,103886,103887,103889,103890,103893,103894,103897,103898,103901],{},[96,103888,1517],{}," 是条件判断。",[96,103891,103892],{},"mj_name2id"," 找不到对象时会返回 ",[96,103895,103896],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[96,103899,103900],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[90,103903,103905],{"className":30359,"code":103904,"language":30361,"meta":21,"style":21},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[96,103906,103907,103923],{"__ignoreMap":21},[99,103908,103909,103911,103913,103915,103917,103919,103921],{"class":101,"line":102},[99,103910,3011],{"class":105},[99,103912,101482],{"class":109},[99,103914,26032],{"class":105},[99,103916,32424],{"class":158},[99,103918,110],{"class":109},[99,103920,1708],{"class":158},[99,103922,30767],{"class":109},[99,103924,103925],{"class":101,"line":22},[99,103926,101680],{"class":109},[14,103928,103929],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[90,103931,103933],{"className":30359,"code":103932,"language":30361,"meta":21,"style":21},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[96,103934,103935],{"__ignoreMap":21},[99,103936,103937,103939,103941,103943],{"class":101,"line":102},[99,103938,30396],{"class":158},[99,103940,110],{"class":109},[99,103942,103497],{"class":214},[99,103944,103500],{"class":109},[14,103946,103947,103949,103950,103953],{},[96,103948,101060],{}," 保存所有 body 的世界坐标。",[96,103951,103952],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[90,103955,103957],{"className":30359,"code":103956,"language":30361,"meta":21,"style":21},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[96,103958,103959],{"__ignoreMap":21},[99,103960,103961,103963,103965,103967],{"class":101,"line":102},[99,103962,30396],{"class":158},[99,103964,110],{"class":109},[99,103966,103509],{"class":214},[99,103968,103512],{"class":109},[14,103970,103971,103974,103975,103977],{},[96,103972,103973],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[96,103976,102958],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[90,103979,103981],{"className":30359,"code":103980,"language":30361,"meta":21,"style":21},"print(\"box qpos:\", np.array(data.qpos))\n",[96,103982,103983],{"__ignoreMap":21},[99,103984,103985,103987,103989,103991],{"class":101,"line":102},[99,103986,30396],{"class":158},[99,103988,110],{"class":109},[99,103990,103521],{"class":214},[99,103992,103524],{"class":109},[14,103994,103995,103996,103999],{},"这里打印广义位置数组。",[96,103997,103998],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[41,104001,102297],{"id":102296},[14,104003,104004,104005,104008,104009,28366],{},"程序会输出 ",[96,104006,104007],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[96,104010,104011],{},"qpos",[14,104013,104014,104016,104017,104020,104021,104024],{},[96,104015,103952],{}," 是 body 的世界坐标位置。",[96,104018,104019],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[96,104022,104023],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104026,82203,104027,82511,104029,104031],{},[96,104028,102958],{},[96,104030,103776],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104033,104034],{},"如果你把 site 改成：",[90,104036,104038],{"className":53048,"code":104037,"language":53050,"meta":21,"style":21},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[96,104039,104040],{"__ignoreMap":21},[99,104041,104042,104044,104046,104048,104050,104053,104055,104057,104060,104062,104064,104066,104068,104070,104072],{"class":101,"line":102},[99,104043,1020],{"class":109},[99,104045,103191],{"class":51281},[99,104047,14907],{"class":1949},[99,104049,155],{"class":109},[99,104051,104052],{"class":214},"\"box_top\"",[99,104054,101087],{"class":1949},[99,104056,155],{"class":109},[99,104058,104059],{"class":214},"\"0 0 0.15\"",[99,104061,101117],{"class":1949},[99,104063,155],{"class":109},[99,104065,103759],{"class":214},[99,104067,78748],{"class":1949},[99,104069,155],{"class":109},[99,104071,103766],{"class":214},[99,104073,101125],{"class":109},[14,104075,104076,104077,104080],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[96,104078,104079],{},"site position"," 就会比 body position 的 z 坐标更高。",[41,104082,102329],{"id":102328},[53,104084,104085,104094,104097,104104,104110,104121],{},[56,104086,102392,104087,104089,104090,102395,104092,28366],{},[96,104088,102962],{}," 的初始高度从 ",[96,104091,327],{},[96,104093,187],{},[56,104095,104096],{},"重新运行程序。",[56,104098,104099,104100,104103],{},"观察 ",[96,104101,104102],{},"box qpos"," 和最终位置是否变化。",[56,104105,104106,104107,104109],{},"故意把 ",[96,104108,103191],{}," 名称改错，确认程序能报错。",[56,104111,102392,104112,104114,104115,102395,104117,104120],{},[96,104113,101101],{}," 的颜色 ",[96,104116,102013],{},[96,104118,104119],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[56,104122,102392,104123,82511,104125,102395,104128,104131,104132,104134],{},[96,104124,102958],{},[96,104126,104127],{},"pos",[96,104129,104130],{},"0 0 0.2","，观察 ",[96,104133,104079],{}," 如何变化。",[41,104136,102434],{"id":102433},[70,104138,104140],{"id":104139},"xml-error-schema-violation",[96,104141,104142],{},"XML Error: Schema violation",[14,104144,104145],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[70,104147,104149,81271,104151],{"id":104148},"mj_name2id-返回-1",[96,104150,103892],{},[96,104152,103896],{},[14,104154,104155,104156,104159],{},"说明名字没有找到。检查 XML 中 ",[96,104157,104158],{},"name=\"...\"","，并确认对象类型正确。",[70,104161,104162],{"id":104162},"物体不下落",[14,104164,102504],{},[53,104166,104167,104172,104177],{},[56,104168,104169,104170],{},"body 是否有 ",[96,104171,101601],{},[56,104173,104174,104175],{},"gravity 是否为 ",[96,104176,102570],{},[56,104178,104179,104180,104182],{},"body 是否被固定在 ",[96,104181,101822],{}," 中",[70,104184,104185],{"id":104185},"坐标看起来不符合预期",[14,104187,104188],{},"先区分两种坐标：",[247,104190,104191,104200],{},[250,104192,104193],{},[253,104194,104195,104198],{},[256,104196,104197],{"align":23724},"坐标",[256,104199,100681],{"align":23724},[294,104201,104202,104212],{},[253,104203,104204,104209],{},[299,104205,104206,104207],{"align":23724},"XML 里的 ",[96,104208,104127],{},[299,104210,104211],{"align":23724},"相对父 body 的局部坐标",[253,104213,104214,104220],{},[299,104215,104216,24967,104218],{"align":23724},[96,104217,101060],{},[96,104219,103973],{},[299,104221,104222],{"align":23724},"仿真更新后的世界坐标",[14,104224,104225,104226,104228,104229,82520,104232,104234],{},"如果你修改了 ",[96,104227,101051],{},"，但还没调用 ",[96,104230,104231],{},"mj_forward",[96,104233,101196],{},"，世界坐标可能还没有更新。",[41,104236,102588],{"id":102587},[14,104238,104239],{},"MJCF 建模先掌握四件事：",[53,104241,104242,104247,104252,104257],{},[56,104243,104244,104246],{},[96,104245,51781],{}," 表示刚体层级。",[56,104248,104249,104251],{},[96,104250,101101],{}," 表示形状、碰撞和质量。",[56,104253,104254,104256],{},[96,104255,102937],{}," 决定 body 能不能动、怎么动。",[56,104258,104259,104261],{},[96,104260,103191],{}," 用来标记关键点，方便 Python 读取位置。",[14,104263,104264],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5113,104266,104267],{},"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":21,"searchDepth":22,"depth":22,"links":104269},[104270,104271,104272,104278,104282,104283,104284,104291],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":104273},[104274,104275,104276,104277],{"id":102941,"depth":1165,"text":102941},{"id":103055,"depth":1165,"text":103055},{"id":103081,"depth":1165,"text":103082},{"id":103185,"depth":1165,"text":103186},{"id":101233,"depth":22,"text":101234,"children":104279},[104280,104281],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":104285},[104286,104287,104289,104290],{"id":104139,"depth":1165,"text":104142},{"id":104148,"depth":1165,"text":104288},"mj_name2id 返回 -1",{"id":104162,"depth":1165,"text":104162},{"id":104185,"depth":1165,"text":104185},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102635,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104298,"title":104299,"body":104300,"description":21,"extension":24,"meta":105795,"navigation":26,"path":105796,"seo":105797,"stem":105798,"__hash__":105799},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104301,"toc":105767},[104302,104305,104307,104310,104313,104351,104354,104360,104363,104365,104367,104394,104396,104410,104412,104453,104455,104479,104481,104484,104493,104502,104505,104514,104522,104531,104534,104544,104547,104599,104606,104612,104620,104668,104671,104690,104693,104701,104705,104714,104747,104749,105097,105099,105111,105113,105124,105126,105129,105150,105156,105159,105184,105194,105197,105205,105208,105211,105232,105243,105245,105265,105268,105289,105298,105317,105323,105348,105351,105365,105372,105396,105399,105407,105416,105432,105444,105452,105461,105463,105466,105490,105495,105498,105520,105522,105561,105563,105570,105572,105580,105583,105586,105598,105639,105646,105657,105664,105667,105716,105719,105722,105728,105730,105735,105761,105764],[10,104303,104299],{"id":104304},"_3python-控制接口读取状态与推进仿真",[41,104306,100628],{"id":100627},[14,104308,104309],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104311,104312],{},"你将学习:",[53,104314,104315,104320,104325,104329,104334,104345],{},[56,104316,104317],{},[96,104318,104319],{},"MjModel.from_xml_string",[56,104321,104322],{},[96,104323,104324],{},"MjData(model)",[56,104326,104327],{},[96,104328,101196],{},[56,104330,104331],{},[96,104332,104333],{},"mj_resetData",[56,104335,104336,104337,322,104339,322,104342],{},"读取 ",[96,104338,104011],{},[96,104340,104341],{},"qvel",[96,104343,104344],{},"ctrl",[56,104346,104347,104348],{},"使用 ",[96,104349,104350],{},"model.opt.timestep",[14,104352,104353],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[90,104355,104358],{"className":104356,"code":104357,"language":5174,"meta":21},[5172],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[96,104359,104357],{"__ignoreMap":21},[14,104361,104362],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[41,104364,100751],{"id":100750},[14,104366,100754],{},[90,104368,104370],{"className":23810,"code":104369,"language":23812,"meta":21,"style":21},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[96,104371,104372],{"__ignoreMap":21},[99,104373,104374,104376,104378,104380,104382,104385,104387,104389,104391],{"class":101,"line":102},[99,104375,24565],{"class":1949},[99,104377,26304],{"class":214},[99,104379,23822],{"class":214},[99,104381,26389],{"class":158},[99,104383,104384],{"class":214}," python3",[99,104386,100779],{"class":214},[99,104388,102482],{"class":214},[99,104390,100795],{"class":214},[99,104392,104393],{"class":214}," glfw\n",[14,104395,102800],{},[90,104397,104398],{"className":23810,"code":100900,"language":23812,"meta":21,"style":21},[96,104399,104400],{"__ignoreMap":21},[99,104401,104402,104404,104406,104408],{"class":101,"line":102},[99,104403,23819],{"class":1949},[99,104405,23822],{"class":214},[99,104407,100911],{"class":214},[99,104409,100914],{"class":214},[14,104411,102817],{},[90,104413,104415],{"className":23810,"code":104414,"language":23812,"meta":21,"style":21},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[96,104416,104417,104434,104443],{"__ignoreMap":21},[99,104418,104419,104421,104423,104425,104428,104430,104432],{"class":101,"line":102},[99,104420,30311],{"class":1949},[99,104422,29157],{"class":214},[99,104424,25104],{"class":158},[99,104426,104427],{"class":214}," mujoco-python-api",[99,104429,100956],{"class":214},[99,104431,100959],{"class":158},[99,104433,100962],{"class":158},[99,104435,104436,104438,104440],{"class":101,"line":22},[99,104437,30311],{"class":1949},[99,104439,100969],{"class":214},[99,104441,104442],{"class":214}," mujoco-python-api\n",[99,104444,104445,104447,104449,104451],{"class":101,"line":1165},[99,104446,23819],{"class":1949},[99,104448,23822],{"class":214},[99,104450,100911],{"class":214},[99,104452,100914],{"class":214},[14,104454,100985],{},[53,104456,104457,104464,104473],{},[56,104458,104459,100999,104461,104463],{},[96,104460,100656],{},[96,104462,100661],{}," 是官方 Python bindings 的类名。",[56,104465,104466,104467,104470,104471,28366],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[96,104468,104469],{},"mjModel"," 在 Python 中是 ",[96,104472,100690],{},[56,104474,104475,104476,28366],{},"不要使用 ",[96,104477,104478],{},"sim = mujoco_py.MjSim(...)",[41,104480,101026],{"id":101025},[14,104482,104483],{},"仿真推进核心代码:",[90,104485,104487],{"className":30359,"code":104486,"language":30361,"meta":21,"style":21},"mujoco.mj_step(model, data)\n",[96,104488,104489],{"__ignoreMap":21},[99,104490,104491],{"class":101,"line":102},[99,104492,104486],{"class":109},[14,104494,104495,104496,322,104498,322,104500,28366],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[96,104497,101051],{},[96,104499,101054],{},[96,104501,101048],{},[14,104503,104504],{},"重置仿真:",[90,104506,104508],{"className":30359,"code":104507,"language":30361,"meta":21,"style":21},"mujoco.mj_resetData(model, data)\n",[96,104509,104510],{"__ignoreMap":21},[99,104511,104512],{"class":101,"line":102},[99,104513,104507],{"class":109},[14,104515,104516,104517,82520,104519,104521],{},"如果手动修改了 ",[96,104518,101051],{},[96,104520,101054],{},"，通常应调用:",[90,104523,104525],{"className":30359,"code":104524,"language":30361,"meta":21,"style":21},"mujoco.mj_forward(model, data)\n",[96,104526,104527],{"__ignoreMap":21},[99,104528,104529],{"class":101,"line":102},[99,104530,104524],{"class":109},[14,104532,104533],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[70,104535,104537,322,104539,322,104541,104543],{"id":104536},"qposqvelctrl-是什么",[96,104538,104011],{},[96,104540,104341],{},[96,104542,104344],{}," 是什么",[14,104545,104546],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[247,104548,104549,104561],{},[250,104550,104551],{},[253,104552,104553,104556,104558],{},[256,104554,104555],{"align":23724},"字段",[256,104557,100681],{"align":23724},[256,104559,104560],{"align":23724},"谁来修改",[294,104562,104563,104575,104587],{},[253,104564,104565,104569,104572],{},[299,104566,104567],{"align":23724},[96,104568,101051],{},[299,104570,104571],{"align":23724},"广义位置，例如小车位置、关节角、自由物体位置姿态",[299,104573,104574],{"align":23724},"MuJoCo 更新，也可以手动设置初始状态",[253,104576,104577,104581,104584],{},[299,104578,104579],{"align":23724},[96,104580,101054],{},[299,104582,104583],{"align":23724},"广义速度，例如小车速度、关节角速度",[299,104585,104586],{"align":23724},"MuJoCo 更新，也可以手动清零",[253,104588,104589,104593,104596],{},[299,104590,104591],{"align":23724},[96,104592,101057],{},[299,104594,104595],{"align":23724},"actuator 的控制输入",[299,104597,104598],{"align":23724},"主要由你的控制代码写入",[14,104600,9012,104601,100999,104603,104605],{},[96,104602,104011],{},[96,104604,104341],{}," 不一定同维。自由刚体就是典型例子：",[90,104607,104610],{"className":104608,"code":104609,"language":5174,"meta":21},[5172],"freejoint: qpos 7 维，qvel 6 维\n",[96,104611,104609],{"__ignoreMap":21},[70,104613,104615,100999,104617,104619],{"id":104614},"mj_step-和-mj_forward-的区别",[96,104616,101196],{},[96,104618,104231],{}," 的区别",[247,104621,104622,104635],{},[250,104623,104624],{},[253,104625,104626,104629,104632],{},[256,104627,104628],{"align":23724},"函数",[256,104630,104631],{"align":23724},"是否推进时间",[256,104633,104634],{"align":23724},"什么时候用",[294,104636,104637,104650],{},[253,104638,104639,104644,104647],{},[299,104640,104641],{"align":23724},[96,104642,104643],{},"mj_step(model, data)",[299,104645,104646],{"align":23724},"是",[299,104648,104649],{"align":23724},"正常仿真循环，每调用一次前进一步",[253,104651,104652,104657,104660],{},[299,104653,104654],{"align":23724},[96,104655,104656],{},"mj_forward(model, data)",[299,104658,104659],{"align":23724},"否",[299,104661,104662,104663,322,104665,104667],{"align":23724},"手动改了 ",[96,104664,104011],{},[96,104666,104341],{}," 后，刷新派生量",[14,104669,104670],{},"例如你写：",[90,104672,104674],{"className":30359,"code":104673,"language":30361,"meta":21,"style":21},"data.qpos[2] = 2.0\n",[96,104675,104676],{"__ignoreMap":21},[99,104677,104678,104681,104683,104685,104687],{"class":101,"line":102},[99,104679,104680],{"class":109},"data.qpos[",[99,104682,187],{"class":158},[99,104684,4429],{"class":109},[99,104686,155],{"class":105},[99,104688,104689],{"class":158}," 2.0\n",[14,104691,104692],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[90,104694,104695],{"className":30359,"code":104524,"language":30361,"meta":21,"style":21},[96,104696,104697],{"__ignoreMap":21},[99,104698,104699],{"class":101,"line":102},[99,104700,104524],{"class":109},[70,104702,104704],{"id":104703},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104706,104707,104710,104711,104713],{},[96,104708,104709],{},"mujoco.mj_resetData(model, data)"," 会把 ",[96,104712,33382],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[90,104715,104717],{"className":30359,"code":104716,"language":30361,"meta":21,"style":21},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[96,104718,104719,104723,104733,104743],{"__ignoreMap":21},[99,104720,104721],{"class":101,"line":102},[99,104722,104507],{"class":109},[99,104724,104725,104728,104730],{"class":101,"line":22},[99,104726,104727],{"class":109},"data.qpos[:] ",[99,104729,155],{"class":105},[99,104731,104732],{"class":109}," random_qpos\n",[99,104734,104735,104738,104740],{"class":101,"line":1165},[99,104736,104737],{"class":109},"data.qvel[:] ",[99,104739,155],{"class":105},[99,104741,104742],{"class":158}," 0.0\n",[99,104744,104745],{"class":101,"line":1180},[99,104746,104524],{"class":109},[41,104748,101234],{"id":101233},[90,104750,104752],{"className":30359,"code":104751,"language":30361,"meta":21,"style":21},"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",[96,104753,104754,104760,104770,104774,104778,104786,104791,104795,104799,104803,104808,104812,104817,104822,104827,104831,104835,104839,104843,104847,104851,104870,104877,104889,104900,104916,104932,104936,104940,104952,104964,104972,104976,104987,104991,105007,105011,105015,105024,105028,105033,105042,105046,105059,105064,105073,105077,105081,105093],{"__ignoreMap":21},[99,104755,104756,104758],{"class":101,"line":102},[99,104757,30373],{"class":105},[99,104759,101282],{"class":109},[99,104761,104762,104764,104766,104768],{"class":101,"line":22},[99,104763,30373],{"class":105},[99,104765,31361],{"class":109},[99,104767,31364],{"class":105},[99,104769,31367],{"class":109},[99,104771,104772],{"class":101,"line":1165},[99,104773,2386],{"emptyLinePlaceholder":26},[99,104775,104776],{"class":101,"line":1180},[99,104777,2386],{"emptyLinePlaceholder":26},[99,104779,104780,104782,104784],{"class":101,"line":1186},[99,104781,101295],{"class":158},[99,104783,13551],{"class":105},[99,104785,101300],{"class":214},[99,104787,104788],{"class":101,"line":1200},[99,104789,104790],{"class":214},"\u003Cmujoco model=\"state_api\">\n",[99,104792,104793],{"class":101,"line":1206},[99,104794,101310],{"class":214},[99,104796,104797],{"class":101,"line":1297},[99,104798,2386],{"emptyLinePlaceholder":26},[99,104800,104801],{"class":101,"line":1303},[99,104802,101319],{"class":214},[99,104804,104805],{"class":101,"line":1315},[99,104806,104807],{"class":214},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[99,104809,104810],{"class":101,"line":1598},[99,104811,2386],{"emptyLinePlaceholder":26},[99,104813,104814],{"class":101,"line":1603},[99,104815,104816],{"class":214},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[99,104818,104819],{"class":101,"line":1609},[99,104820,104821],{"class":214},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[99,104823,104824],{"class":101,"line":1614},[99,104825,104826],{"class":214},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[99,104828,104829],{"class":101,"line":1628},[99,104830,101348],{"class":214},[99,104832,104833],{"class":101,"line":1633},[99,104834,101353],{"class":214},[99,104836,104837],{"class":101,"line":1639},[99,104838,101358],{"class":214},[99,104840,104841],{"class":101,"line":1660},[99,104842,95679],{"class":214},[99,104844,104845],{"class":101,"line":1665},[99,104846,2386],{"emptyLinePlaceholder":26},[99,104848,104849],{"class":101,"line":1679},[99,104850,2386],{"emptyLinePlaceholder":26},[99,104852,104853,104855,104858,104861,104863,104866,104868],{"class":101,"line":1684},[99,104854,31928],{"class":105},[99,104856,104857],{"class":1949}," print_state",[99,104859,104860],{"class":109},"(prefix: ",[99,104862,1285],{"class":158},[99,104864,104865],{"class":109},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[99,104867,95667],{"class":158},[99,104869,3725],{"class":109},[99,104871,104872,104874],{"class":101,"line":1713},[99,104873,31280],{"class":158},[99,104875,104876],{"class":109},"(prefix)\n",[99,104878,104879,104881,104883,104886],{"class":101,"line":1718},[99,104880,31280],{"class":158},[99,104882,110],{"class":109},[99,104884,104885],{"class":214},"\"  timestep:\"",[99,104887,104888],{"class":109},", model.opt.timestep)\n",[99,104890,104891,104893,104895,104898],{"class":101,"line":1735},[99,104892,31280],{"class":158},[99,104894,110],{"class":109},[99,104896,104897],{"class":214},"\"  time:\"",[99,104899,101459],{"class":109},[99,104901,104902,104904,104906,104909,104912,104914],{"class":101,"line":1740},[99,104903,31280],{"class":158},[99,104905,110],{"class":109},[99,104907,104908],{"class":214},"\"  qpos:\"",[99,104910,104911],{"class":109},", np.round(data.qpos.copy(), ",[99,104913,403],{"class":158},[99,104915,30478],{"class":109},[99,104917,104918,104920,104922,104925,104928,104930],{"class":101,"line":1745},[99,104919,31280],{"class":158},[99,104921,110],{"class":109},[99,104923,104924],{"class":214},"\"  qvel:\"",[99,104926,104927],{"class":109},", np.round(data.qvel.copy(), ",[99,104929,403],{"class":158},[99,104931,30478],{"class":109},[99,104933,104934],{"class":101,"line":1750},[99,104935,2386],{"emptyLinePlaceholder":26},[99,104937,104938],{"class":101,"line":1764},[99,104939,2386],{"emptyLinePlaceholder":26},[99,104941,104942,104944,104946,104948,104950],{"class":101,"line":1769},[99,104943,31928],{"class":105},[99,104945,1959],{"class":1949},[99,104947,101379],{"class":109},[99,104949,95667],{"class":158},[99,104951,3725],{"class":109},[99,104953,104954,104956,104958,104960,104962],{"class":101,"line":2563},[99,104955,101388],{"class":109},[99,104957,155],{"class":105},[99,104959,101393],{"class":109},[99,104961,101295],{"class":158},[99,104963,116],{"class":109},[99,104965,104966,104968,104970],{"class":101,"line":2577},[99,104967,101402],{"class":109},[99,104969,155],{"class":105},[99,104971,101407],{"class":109},[99,104973,104974],{"class":101,"line":2585},[99,104975,2386],{"emptyLinePlaceholder":26},[99,104977,104978,104981,104984],{"class":101,"line":2590},[99,104979,104980],{"class":109},"    print_state(",[99,104982,104983],{"class":214},"\"initial\"",[99,104985,104986],{"class":109},", model, data)\n",[99,104988,104989],{"class":101,"line":2596},[99,104990,2386],{"emptyLinePlaceholder":26},[99,104992,104993,104995,104997,104999,105001,105003,105005],{"class":101,"line":2602},[99,104994,3187],{"class":105},[99,104996,101482],{"class":109},[99,104998,26032],{"class":105},[99,105000,32424],{"class":158},[99,105002,110],{"class":109},[99,105004,766],{"class":158},[99,105006,30767],{"class":109},[99,105008,105009],{"class":101,"line":2607},[99,105010,101497],{"class":109},[99,105012,105013],{"class":101,"line":7935},[99,105014,2386],{"emptyLinePlaceholder":26},[99,105016,105017,105019,105022],{"class":101,"line":7959},[99,105018,104980],{"class":109},[99,105020,105021],{"class":214},"\"after 50 steps\"",[99,105023,104986],{"class":109},[99,105025,105026],{"class":101,"line":7964},[99,105027,2386],{"emptyLinePlaceholder":26},[99,105029,105030],{"class":101,"line":7970},[99,105031,105032],{"class":109},"    mujoco.mj_resetData(model, data)\n",[99,105034,105035,105037,105040],{"class":101,"line":7997},[99,105036,104980],{"class":109},[99,105038,105039],{"class":214},"\"after reset\"",[99,105041,104986],{"class":109},[99,105043,105044],{"class":101,"line":8002},[99,105045,2386],{"emptyLinePlaceholder":26},[99,105047,105048,105051,105053,105055,105057],{"class":101,"line":8008},[99,105049,105050],{"class":109},"    data.qpos[",[99,105052,187],{"class":158},[99,105054,4429],{"class":109},[99,105056,155],{"class":105},[99,105058,104689],{"class":158},[99,105060,105061],{"class":101,"line":8020},[99,105062,105063],{"class":109},"    mujoco.mj_forward(model, data)\n",[99,105065,105066,105068,105071],{"class":101,"line":8032},[99,105067,104980],{"class":109},[99,105069,105070],{"class":214},"\"after manual qpos edit\"",[99,105072,104986],{"class":109},[99,105074,105075],{"class":101,"line":8044},[99,105076,2386],{"emptyLinePlaceholder":26},[99,105078,105079],{"class":101,"line":9703},[99,105080,2386],{"emptyLinePlaceholder":26},[99,105082,105083,105085,105087,105089,105091],{"class":101,"line":9728},[99,105084,1517],{"class":105},[99,105086,31201],{"class":158},[99,105088,101540],{"class":105},[99,105090,101543],{"class":214},[99,105092,3725],{"class":109},[99,105094,105095],{"class":101,"line":9751},[99,105096,101550],{"class":109},[14,105098,103551],{},[90,105100,105102],{"className":23810,"code":105101,"language":23812,"meta":21,"style":21},"touch ch3_python_state.py\n",[96,105103,105104],{"__ignoreMap":21},[99,105105,105106,105108],{"class":101,"line":102},[99,105107,101264],{"class":1949},[99,105109,105110],{"class":214}," ch3_python_state.py\n",[14,105112,102282],{},[90,105114,105116],{"className":23810,"code":105115,"language":23812,"meta":21,"style":21},"python ch3_python_state.py\n",[96,105117,105118],{"__ignoreMap":21},[99,105119,105120,105122],{"class":101,"line":102},[99,105121,30361],{"class":1949},[99,105123,105110],{"class":214},[70,105125,101553],{"id":101553},[14,105127,105128],{},"打印状态的函数：",[90,105130,105132],{"className":30359,"code":105131,"language":30361,"meta":21,"style":21},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[96,105133,105134],{"__ignoreMap":21},[99,105135,105136,105138,105140,105142,105144,105146,105148],{"class":101,"line":102},[99,105137,31928],{"class":105},[99,105139,104857],{"class":1949},[99,105141,104860],{"class":109},[99,105143,1285],{"class":158},[99,105145,104865],{"class":109},[99,105147,95667],{"class":158},[99,105149,3725],{"class":109},[14,105151,105152,105153,105155],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[96,105154,33382],{}," 里发生了什么。",[14,105157,105158],{},"推进 50 步：",[90,105160,105162],{"className":30359,"code":105161,"language":30361,"meta":21,"style":21},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[96,105163,105164,105180],{"__ignoreMap":21},[99,105165,105166,105168,105170,105172,105174,105176,105178],{"class":101,"line":102},[99,105167,3011],{"class":105},[99,105169,101482],{"class":109},[99,105171,26032],{"class":105},[99,105173,32424],{"class":158},[99,105175,110],{"class":109},[99,105177,766],{"class":158},[99,105179,30767],{"class":109},[99,105181,105182],{"class":101,"line":22},[99,105183,101680],{"class":109},[14,105185,105186,105187,105190,105191,105193],{},"由于 ",[96,105188,105189],{},"timestep=0.01","，所以 50 步后时间约为 ",[96,105192,35310],{}," 秒。",[14,105195,105196],{},"重置：",[90,105198,105199],{"className":30359,"code":104507,"language":30361,"meta":21,"style":21},[96,105200,105201],{"__ignoreMap":21},[99,105202,105203],{"class":101,"line":102},[99,105204,104507],{"class":109},[14,105206,105207],{},"这会把时间、位置、速度恢复到初始状态。",[14,105209,105210],{},"手动改高度：",[90,105212,105214],{"className":30359,"code":105213,"language":30361,"meta":21,"style":21},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[96,105215,105216,105228],{"__ignoreMap":21},[99,105217,105218,105220,105222,105224,105226],{"class":101,"line":102},[99,105219,104680],{"class":109},[99,105221,187],{"class":158},[99,105223,4429],{"class":109},[99,105225,155],{"class":105},[99,105227,104689],{"class":158},[99,105229,105230],{"class":101,"line":22},[99,105231,104524],{"class":109},[14,105233,105234,105235,105238,105239,105242],{},"这个例子里 ",[96,105236,105237],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[96,105240,105241],{},"2.0"," 表示把小球放到更高的位置。",[70,105244,101689],{"id":101689},[90,105246,105247],{"className":30359,"code":105131,"language":30361,"meta":21,"style":21},[96,105248,105249],{"__ignoreMap":21},[99,105250,105251,105253,105255,105257,105259,105261,105263],{"class":101,"line":102},[99,105252,31928],{"class":105},[99,105254,104857],{"class":1949},[99,105256,104860],{"class":109},[99,105258,1285],{"class":158},[99,105260,104865],{"class":109},[99,105262,95667],{"class":158},[99,105264,3725],{"class":109},[14,105266,105267],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[53,105269,105270,105279,105284],{},[56,105271,105272,105275,105276,105278],{},[96,105273,105274],{},"prefix","：一段文字，比如 ",[96,105277,104983],{},"，用来说明现在打印的是哪个阶段。",[56,105280,105281,105283],{},[96,105282,102066],{},"：MuJoCo 模型。",[56,105285,105286,105288],{},[96,105287,33382],{},"：MuJoCo 当前状态。",[14,105290,105291,322,105294,105297],{},[96,105292,105293],{},"prefix: str",[96,105295,105296],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[90,105299,105301],{"className":30359,"code":105300,"language":30361,"meta":21,"style":21},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[96,105302,105303],{"__ignoreMap":21},[99,105304,105305,105307,105309,105311,105313,105315],{"class":101,"line":102},[99,105306,30396],{"class":158},[99,105308,110],{"class":109},[99,105310,104908],{"class":214},[99,105312,104911],{"class":109},[99,105314,403],{"class":158},[99,105316,30478],{"class":109},[14,105318,105319,105322],{},[96,105320,105321],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[90,105324,105326],{"className":30359,"code":105325,"language":30361,"meta":21,"style":21},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[96,105327,105328,105340],{"__ignoreMap":21},[99,105329,105330,105332,105334,105336,105338],{"class":101,"line":102},[99,105331,101615],{"class":109},[99,105333,155],{"class":105},[99,105335,101393],{"class":109},[99,105337,101295],{"class":158},[99,105339,116],{"class":109},[99,105341,105342,105344,105346],{"class":101,"line":22},[99,105343,101639],{"class":109},[99,105345,155],{"class":105},[99,105347,101407],{"class":109},[14,105349,105350],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[90,105352,105354],{"className":30359,"code":105353,"language":30361,"meta":21,"style":21},"print_state(\"initial\", model, data)\n",[96,105355,105356],{"__ignoreMap":21},[99,105357,105358,105361,105363],{"class":101,"line":102},[99,105359,105360],{"class":109},"print_state(",[99,105362,104983],{"class":214},[99,105364,104986],{"class":109},[14,105366,105367,105368,105371],{},"调用刚才定义的 ",[96,105369,105370],{},"print_state"," 函数，打印初始状态。",[90,105373,105374],{"className":30359,"code":105161,"language":30361,"meta":21,"style":21},[96,105375,105376,105392],{"__ignoreMap":21},[99,105377,105378,105380,105382,105384,105386,105388,105390],{"class":101,"line":102},[99,105379,3011],{"class":105},[99,105381,101482],{"class":109},[99,105383,26032],{"class":105},[99,105385,32424],{"class":158},[99,105387,110],{"class":109},[99,105389,766],{"class":158},[99,105391,30767],{"class":109},[99,105393,105394],{"class":101,"line":22},[99,105395,101680],{"class":109},[14,105397,105398],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[90,105400,105401],{"className":30359,"code":104507,"language":30361,"meta":21,"style":21},[96,105402,105403],{"__ignoreMap":21},[99,105404,105405],{"class":101,"line":102},[99,105406,104507],{"class":109},[14,105408,105409,105410,105412,105413,105415],{},"重置 ",[96,105411,33382],{},"。注意它不会重新创建 ",[96,105414,102066],{},"，因为模型结构没有变，只是状态回到初始值。",[90,105417,105418],{"className":30359,"code":104673,"language":30361,"meta":21,"style":21},[96,105419,105420],{"__ignoreMap":21},[99,105421,105422,105424,105426,105428,105430],{"class":101,"line":102},[99,105423,104680],{"class":109},[99,105425,187],{"class":158},[99,105427,4429],{"class":109},[99,105429,155],{"class":105},[99,105431,104689],{"class":158},[14,105433,105434,105435,322,105438,322,105441,105443],{},"这行是“手动改状态”。在 freejoint 中，",[96,105436,105437],{},"qpos[0]",[96,105439,105440],{},"qpos[1]",[96,105442,105237],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[90,105445,105446],{"className":30359,"code":104524,"language":30361,"meta":21,"style":21},[96,105447,105448],{"__ignoreMap":21},[99,105449,105450],{"class":101,"line":102},[99,105451,104524],{"class":109},[14,105453,105454,105455,105457,105458,105460],{},"手动改完 ",[96,105456,104011],{}," 后，调用 ",[96,105459,104231],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[41,105462,102297],{"id":102296},[14,105464,105465],{},"你会看到:",[53,105467,105468,105473,105478,105481],{},[56,105469,105470,105471],{},"初始时间为 ",[96,105472,301],{},[56,105474,105475,105476],{},"50 步后时间约为 ",[96,105477,35310],{},[56,105479,105480],{},"reset 后状态恢复",[56,105482,105483,105484,105487,105488],{},"手动修改 ",[96,105485,105486],{},"data.qpos[2]"," 后，小球高度变为 ",[96,105489,105241],{},[14,105491,105492,105494],{},[96,105493,105237],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105496,105497],{},"输出里可以重点看三件事：",[53,105499,105500,105508,105513],{},[56,105501,105502,105504,105505,105507],{},[96,105503,2373],{}," 是否随着 ",[96,105506,101196],{}," 增加。",[56,105509,105510,105512],{},[96,105511,104011],{}," 的 z 坐标是否因为下落而变化。",[56,105514,105515,105517,105518,28366],{},[96,105516,104333],{}," 后时间是否回到 ",[96,105519,301],{},[41,105521,102329],{"id":102328},[53,105523,105524,105530,105536,105542,105545,105554],{},[56,105525,105526,105527,28366],{},"修改 timestep 为 ",[96,105528,105529],{},"0.005",[56,105531,105532,105533,28366],{},"重新运行，检查 50 步后时间是否约为 ",[96,105534,105535],{},"0.25",[56,105537,105538,105539,28366],{},"修改重力为 ",[96,105540,105541],{},"0 0 -1.0",[56,105543,105544],{},"观察小球下降速度是否变慢。",[56,105546,102392,105547,102395,105550,105553],{},[96,105548,105549],{},"data.qpos[2] = 2.0",[96,105551,105552],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[56,105555,105556,105557,105560],{},"注释掉 ",[96,105558,105559],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[41,105562,102434],{"id":102433},[70,105564,105566,105567,105569],{"id":105565},"修改-dataqpos-后位置没有更新","修改 ",[96,105568,101051],{}," 后位置没有更新",[14,105571,102443],{},[90,105573,105574],{"className":30359,"code":104524,"language":30361,"meta":21,"style":21},[96,105575,105576],{"__ignoreMap":21},[99,105577,105578],{"class":101,"line":102},[99,105579,104524],{"class":109},[70,105581,105582],{"id":105582},"数组维度看不懂",[14,105584,105585],{},"打印模型维度:",[90,105587,105589],{"className":30359,"code":105588,"language":30361,"meta":21,"style":21},"print(model.nq, model.nv, model.nu)\n",[96,105590,105591],{"__ignoreMap":21},[99,105592,105593,105595],{"class":101,"line":102},[99,105594,30396],{"class":158},[99,105596,105597],{"class":109},"(model.nq, model.nv, model.nu)\n",[247,105599,105600,105608],{},[250,105601,105602],{},[253,105603,105604,105606],{},[256,105605,104555],{"align":23724},[256,105607,100681],{"align":23724},[294,105609,105610,105620,105630],{},[253,105611,105612,105617],{},[299,105613,105614],{"align":23724},[96,105615,105616],{},"nq",[299,105618,105619],{"align":23724},"位置变量数量",[253,105621,105622,105627],{},[299,105623,105624],{"align":23724},[96,105625,105626],{},"nv",[299,105628,105629],{"align":23724},"速度变量数量",[253,105631,105632,105636],{},[299,105633,105634],{"align":23724},[96,105635,102143],{},[299,105637,105638],{"align":23724},"控制输入数量",[70,105640,105642,105643,105645],{"id":105641},"误以为-qpos-一定等于关节数","误以为 ",[96,105644,104011],{}," 一定等于关节数",[14,105647,105648,105649,82511,105651,105653,105654,105656],{},"不是。例如 ",[96,105650,101601],{},[96,105652,104011],{}," 是 7 维，但 ",[96,105655,104341],{}," 是 6 维。",[70,105658,105660,105661,105663],{"id":105659},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[96,105662,104011],{}," 的第几位",[14,105665,105666],{},"初学时可以先打印：",[90,105668,105670],{"className":30359,"code":105669,"language":30361,"meta":21,"style":21},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[96,105671,105672,105682,105692,105704],{"__ignoreMap":21},[99,105673,105674,105676,105678,105680],{"class":101,"line":102},[99,105675,30396],{"class":158},[99,105677,110],{"class":109},[99,105679,101420],{"class":214},[99,105681,101423],{"class":109},[99,105683,105684,105686,105688,105690],{"class":101,"line":22},[99,105685,30396],{"class":158},[99,105687,110],{"class":109},[99,105689,101432],{"class":214},[99,105691,101435],{"class":109},[99,105693,105694,105696,105698,105701],{"class":101,"line":1165},[99,105695,30396],{"class":158},[99,105697,110],{"class":109},[99,105699,105700],{"class":214},"\"qpos:\"",[99,105702,105703],{"class":109},", data.qpos)\n",[99,105705,105706,105708,105710,105713],{"class":101,"line":1180},[99,105707,30396],{"class":158},[99,105709,110],{"class":109},[99,105711,105712],{"class":214},"\"qvel:\"",[99,105714,105715],{"class":109},", data.qvel)\n",[14,105717,105718],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[70,105720,105721],{"id":105721},"仿真结果每次都一样",[14,105723,105724,105725,105727],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[96,105726,104011],{},"、目标点或控制输入。",[41,105729,102588],{"id":102587},[14,105731,105732,105733,24607],{},"Python 控制 MuJoCo 的核心就是读写 ",[96,105734,33382],{},[53,105736,105737,105745,105750,105755],{},[56,105738,105739,105740,100999,105742,105744],{},"用 ",[96,105741,101051],{},[96,105743,101054],{}," 读取状态。",[56,105746,105739,105747,105749],{},[96,105748,101057],{}," 写入控制。",[56,105751,105739,105752,105754],{},[96,105753,101196],{}," 推进时间。",[56,105756,105757,105758,105760],{},"手动改状态后用 ",[96,105759,104231],{}," 刷新派生量。",[14,105762,105763],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5113,105765,105766],{},"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":21,"searchDepth":22,"depth":22,"links":105768},[105769,105770,105771,105778,105782,105783,105784,105794],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":105772},[105773,105775,105777],{"id":104536,"depth":1165,"text":105774},"qpos、qvel、ctrl 是什么",{"id":104614,"depth":1165,"text":105776},"mj_step 和 mj_forward 的区别",{"id":104703,"depth":1165,"text":104704},{"id":101233,"depth":22,"text":101234,"children":105779},[105780,105781],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":105785},[105786,105788,105789,105791,105793],{"id":105565,"depth":1165,"text":105787},"修改 data.qpos 后位置没有更新",{"id":105582,"depth":1165,"text":105582},{"id":105641,"depth":1165,"text":105790},"误以为 qpos 一定等于关节数",{"id":105659,"depth":1165,"text":105792},"不知道某个元素在 qpos 的第几位",{"id":105721,"depth":1165,"text":105721},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104299,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105801,"title":105802,"body":105803,"description":21,"extension":24,"meta":107493,"navigation":26,"path":107494,"seo":107495,"stem":107496,"__hash__":107497},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105804,"toc":107469},[105805,105808,105810,105813,105815,105840,105843,105862,105865,105867,105869,105893,105895,105909,105911,105952,105954,105978,105980,105983,106017,106019,106032,106035,106103,106112,106116,106119,106153,106159,106162,106166,106205,106208,106228,106232,106275,106277,106306,106309,106315,106318,106320,106714,106716,106728,106730,106741,106743,106746,106775,106783,106786,106821,106824,106826,106834,106837,106839,106850,106860,106880,106883,106919,106931,106979,106998,107040,107053,107081,107086,107107,107117,107135,107138,107172,107175,107195,107198,107217,107223,107225,107228,107234,107240,107250,107253,107259,107268,107270,107316,107318,107324,107330,107333,107336,107356,107359,107365,107371,107373,107396,107399,107402,107411,107414,107452,107454,107457,107463,107466],[10,105806,105802],{"id":105807},"_4关节actuator-与力控制",[41,105809,100628],{"id":100627},[14,105811,105812],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105814,104312],{},[53,105816,105817,105823,105828,105832,105837],{},[56,105818,105819,105822],{},[96,105820,105821],{},"hinge"," 关节",[56,105824,105825],{},[96,105826,105827],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[56,105829,105830],{},[96,105831,101057],{},[56,105833,105834],{},[96,105835,105836],{},"ctrlrange",[56,105838,105839],{},"读取关节角和角速度",[14,105841,105842],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[90,105844,105846],{"className":30359,"code":105845,"language":30361,"meta":21,"style":21},"data.ctrl[0] = ...\n",[96,105847,105848],{"__ignoreMap":21},[99,105849,105850,105853,105855,105857,105859],{"class":101,"line":102},[99,105851,105852],{"class":109},"data.ctrl[",[99,105854,301],{"class":158},[99,105856,4429],{"class":109},[99,105858,155],{"class":105},[99,105860,105861],{"class":158}," ...\n",[14,105863,105864],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[41,105866,100751],{"id":100750},[14,105868,100754],{},[90,105870,105871],{"className":23810,"code":104369,"language":23812,"meta":21,"style":21},[96,105872,105873],{"__ignoreMap":21},[99,105874,105875,105877,105879,105881,105883,105885,105887,105889,105891],{"class":101,"line":102},[99,105876,24565],{"class":1949},[99,105878,26304],{"class":214},[99,105880,23822],{"class":214},[99,105882,26389],{"class":158},[99,105884,104384],{"class":214},[99,105886,100779],{"class":214},[99,105888,102482],{"class":214},[99,105890,100795],{"class":214},[99,105892,104393],{"class":214},[14,105894,102800],{},[90,105896,105897],{"className":23810,"code":100900,"language":23812,"meta":21,"style":21},[96,105898,105899],{"__ignoreMap":21},[99,105900,105901,105903,105905,105907],{"class":101,"line":102},[99,105902,23819],{"class":1949},[99,105904,23822],{"class":214},[99,105906,100911],{"class":214},[99,105908,100914],{"class":214},[14,105910,102817],{},[90,105912,105914],{"className":23810,"code":105913,"language":23812,"meta":21,"style":21},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[96,105915,105916,105933,105942],{"__ignoreMap":21},[99,105917,105918,105920,105922,105924,105927,105929,105931],{"class":101,"line":102},[99,105919,30311],{"class":1949},[99,105921,29157],{"class":214},[99,105923,25104],{"class":158},[99,105925,105926],{"class":214}," mujoco-control",[99,105928,100956],{"class":214},[99,105930,100959],{"class":158},[99,105932,100962],{"class":158},[99,105934,105935,105937,105939],{"class":101,"line":22},[99,105936,30311],{"class":1949},[99,105938,100969],{"class":214},[99,105940,105941],{"class":214}," mujoco-control\n",[99,105943,105944,105946,105948,105950],{"class":101,"line":1165},[99,105945,23819],{"class":1949},[99,105947,23822],{"class":214},[99,105949,100911],{"class":214},[99,105951,100914],{"class":214},[14,105953,100985],{},[53,105955,105956,105962,105969,105975],{},[56,105957,105958,105961],{},[96,105959,105960],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[56,105963,105964,105966,105967,28366],{},[96,105965,101057],{}," 长度等于 ",[96,105968,102139],{},[56,105970,82203,105971,105974],{},[96,105972,105973],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[56,105976,105977],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[41,105979,101026],{"id":101025},[14,105981,105982],{},"关节决定 body 如何运动:",[90,105984,105986],{"className":53048,"code":105985,"language":53050,"meta":21,"style":21},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[96,105987,105988],{"__ignoreMap":21},[99,105989,105990,105992,105994,105996,105998,106001,106003,106005,106007,106010,106012,106015],{"class":101,"line":102},[99,105991,1020],{"class":109},[99,105993,102937],{"class":51281},[99,105995,14907],{"class":1949},[99,105997,155],{"class":109},[99,105999,106000],{"class":214},"\"hinge\"",[99,106002,53805],{"class":1949},[99,106004,155],{"class":109},[99,106006,106000],{"class":214},[99,106008,106009],{"class":1949}," axis",[99,106011,155],{"class":109},[99,106013,106014],{"class":214},"\"0 1 0\"",[99,106016,101125],{"class":109},[14,106018,103033],{},[53,106020,106021,106026,106029],{},[56,106022,106023,106024],{},"名字是 ",[96,106025,105821],{},[56,106027,106028],{},"类型是旋转关节",[56,106030,106031],{},"绕 y 轴旋转",[14,106033,106034],{},"actuator 决定如何施加控制:",[90,106036,106038],{"className":53048,"code":106037,"language":53050,"meta":21,"style":21},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[96,106039,106040,106049,106095],{"__ignoreMap":21},[99,106041,106042,106044,106047],{"class":101,"line":102},[99,106043,1020],{"class":109},[99,106045,106046],{"class":51281},"actuator",[99,106048,51288],{"class":109},[99,106050,106051,106053,106056,106058,106060,106063,106066,106068,106070,106073,106075,106077,106080,106082,106085,106088,106090,106093],{"class":101,"line":22},[99,106052,52125],{"class":109},[99,106054,106055],{"class":51281},"motor",[99,106057,14907],{"class":1949},[99,106059,155],{"class":109},[99,106061,106062],{"class":214},"\"hinge_motor\"",[99,106064,106065],{"class":1949}," joint",[99,106067,155],{"class":109},[99,106069,106000],{"class":214},[99,106071,106072],{"class":1949}," gear",[99,106074,155],{"class":109},[99,106076,3664],{"class":214},[99,106078,106079],{"class":1949}," ctrlrange",[99,106081,155],{"class":109},[99,106083,106084],{"class":214},"\"-2 2\"",[99,106086,106087],{"class":1949}," ctrllimited",[99,106089,155],{"class":109},[99,106091,106092],{"class":214},"\"true\"",[99,106094,101125],{"class":109},[99,106096,106097,106099,106101],{"class":101,"line":1165},[99,106098,51766],{"class":109},[99,106100,106046],{"class":51281},[99,106102,51288],{"class":109},[14,106104,106105,106108,106109,28366],{},[96,106106,106107],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[96,106110,106111],{},"[-2, 2]",[70,106113,106115],{"id":106114},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106117,106118],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[247,106120,106121,106131],{},[250,106122,106123],{},[253,106124,106125,106127,106129],{},[256,106126,25742],{"align":23724},[256,106128,102677],{"align":23724},[256,106130,100715],{"align":23724},[294,106132,106133,106143],{},[253,106134,106135,106137,106140],{},[299,106136,102937],{"align":23724},[299,106138,106139],{"align":23724},"定义能怎么动",[299,106141,106142],{"align":23724},"门轴允许门旋转",[253,106144,106145,106147,106150],{},[299,106146,106046],{"align":23724},[299,106148,106149],{"align":23724},"定义怎么施力或控制",[299,106151,106152],{"align":23724},"人推门、马达带动门",[14,106154,106155,106156,106158],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[96,106157,101057],{}," 主动控制它。",[14,106160,106161],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[70,106163,106165],{"id":106164},"hinge-joint","hinge joint",[90,106167,106169],{"className":53048,"code":106168,"language":53050,"meta":21,"style":21},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[96,106170,106171],{"__ignoreMap":21},[99,106172,106173,106175,106177,106179,106181,106183,106185,106187,106189,106191,106193,106195,106198,106200,106203],{"class":101,"line":102},[99,106174,1020],{"class":109},[99,106176,102937],{"class":51281},[99,106178,14907],{"class":1949},[99,106180,155],{"class":109},[99,106182,106000],{"class":214},[99,106184,53805],{"class":1949},[99,106186,155],{"class":109},[99,106188,106000],{"class":214},[99,106190,106009],{"class":1949},[99,106192,155],{"class":109},[99,106194,106014],{"class":214},[99,106196,106197],{"class":1949}," damping",[99,106199,155],{"class":109},[99,106201,106202],{"class":214},"\"0.1\"",[99,106204,101125],{"class":109},[14,106206,106207],{},"含义：",[53,106209,106210,106216,106222],{},[56,106211,106212,106215],{},[96,106213,106214],{},"type=\"hinge\"","：只能绕一个轴旋转。",[56,106217,106218,106221],{},[96,106219,106220],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[56,106223,106224,106227],{},[96,106225,106226],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[70,106229,106231],{"id":106230},"motor-actuator","motor actuator",[90,106233,106235],{"className":53048,"code":106234,"language":53050,"meta":21,"style":21},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[96,106236,106237],{"__ignoreMap":21},[99,106238,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273],{"class":101,"line":102},[99,106240,1020],{"class":109},[99,106242,106055],{"class":51281},[99,106244,14907],{"class":1949},[99,106246,155],{"class":109},[99,106248,106062],{"class":214},[99,106250,106065],{"class":1949},[99,106252,155],{"class":109},[99,106254,106000],{"class":214},[99,106256,106072],{"class":1949},[99,106258,155],{"class":109},[99,106260,3664],{"class":214},[99,106262,106079],{"class":1949},[99,106264,155],{"class":109},[99,106266,106084],{"class":214},[99,106268,106087],{"class":1949},[99,106270,155],{"class":109},[99,106272,106092],{"class":214},[99,106274,101125],{"class":109},[14,106276,106207],{},[53,106278,106279,106288,106294,106300],{},[56,106280,106281,106284,106285,106287],{},[96,106282,106283],{},"joint=\"hinge\"","：这个电机作用在名为 ",[96,106286,105821],{}," 的关节上。",[56,106289,106290,106293],{},[96,106291,106292],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[56,106295,106296,106299],{},[96,106297,106298],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[56,106301,106302,106305],{},[96,106303,106304],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106307,106308],{},"简单理解：",[90,106310,106313],{"className":106311,"code":106312,"language":5174,"meta":21},[5172],"实际施加效果 ≈ data.ctrl[0] * gear\n",[96,106314,106312],{"__ignoreMap":21},[14,106316,106317],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[41,106319,101234],{"id":101233},[90,106321,106323],{"className":30359,"code":106322,"language":30361,"meta":21,"style":21},"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",[96,106324,106325,106332,106336,106342,106352,106356,106360,106368,106373,106378,106382,106386,106391,106396,106400,106405,106410,106415,106420,106424,106428,106432,106437,106442,106447,106451,106455,106459,106463,106475,106487,106495,106499,106509,106519,106529,106533,106546,106559,106563,106580,106594,106629,106633,106637,106648,106663,106678,106690,106694,106698,106710],{"__ignoreMap":21},[99,106326,106327,106329],{"class":101,"line":102},[99,106328,30373],{"class":105},[99,106330,106331],{"class":109}," math\n",[99,106333,106334],{"class":101,"line":22},[99,106335,2386],{"emptyLinePlaceholder":26},[99,106337,106338,106340],{"class":101,"line":1165},[99,106339,30373],{"class":105},[99,106341,101282],{"class":109},[99,106343,106344,106346,106348,106350],{"class":101,"line":1180},[99,106345,30373],{"class":105},[99,106347,31361],{"class":109},[99,106349,31364],{"class":105},[99,106351,31367],{"class":109},[99,106353,106354],{"class":101,"line":1186},[99,106355,2386],{"emptyLinePlaceholder":26},[99,106357,106358],{"class":101,"line":1200},[99,106359,2386],{"emptyLinePlaceholder":26},[99,106361,106362,106364,106366],{"class":101,"line":1206},[99,106363,101295],{"class":158},[99,106365,13551],{"class":105},[99,106367,101300],{"class":214},[99,106369,106370],{"class":101,"line":1297},[99,106371,106372],{"class":214},"\u003Cmujoco model=\"one_link_motor\">\n",[99,106374,106375],{"class":101,"line":1303},[99,106376,106377],{"class":214},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[99,106379,106380],{"class":101,"line":1315},[99,106381,2386],{"emptyLinePlaceholder":26},[99,106383,106384],{"class":101,"line":1598},[99,106385,101319],{"class":214},[99,106387,106388],{"class":101,"line":1603},[99,106389,106390],{"class":214},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[99,106392,106393],{"class":101,"line":1609},[99,106394,106395],{"class":214},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[99,106397,106398],{"class":101,"line":1614},[99,106399,2386],{"emptyLinePlaceholder":26},[99,106401,106402],{"class":101,"line":1628},[99,106403,106404],{"class":214},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[99,106406,106407],{"class":101,"line":1633},[99,106408,106409],{"class":214},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[99,106411,106412],{"class":101,"line":1639},[99,106413,106414],{"class":214},"        \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",[99,106416,106417],{"class":101,"line":1660},[99,106418,106419],{"class":214},"      \u003C\u002Fbody>\n",[99,106421,106422],{"class":101,"line":1665},[99,106423,101348],{"class":214},[99,106425,106426],{"class":101,"line":1679},[99,106427,101353],{"class":214},[99,106429,106430],{"class":101,"line":1684},[99,106431,2386],{"emptyLinePlaceholder":26},[99,106433,106434],{"class":101,"line":1713},[99,106435,106436],{"class":214},"  \u003Cactuator>\n",[99,106438,106439],{"class":101,"line":1718},[99,106440,106441],{"class":214},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[99,106443,106444],{"class":101,"line":1735},[99,106445,106446],{"class":214},"  \u003C\u002Factuator>\n",[99,106448,106449],{"class":101,"line":1740},[99,106450,101358],{"class":214},[99,106452,106453],{"class":101,"line":1745},[99,106454,95679],{"class":214},[99,106456,106457],{"class":101,"line":1750},[99,106458,2386],{"emptyLinePlaceholder":26},[99,106460,106461],{"class":101,"line":1764},[99,106462,2386],{"emptyLinePlaceholder":26},[99,106464,106465,106467,106469,106471,106473],{"class":101,"line":1769},[99,106466,31928],{"class":105},[99,106468,1959],{"class":1949},[99,106470,101379],{"class":109},[99,106472,95667],{"class":158},[99,106474,3725],{"class":109},[99,106476,106477,106479,106481,106483,106485],{"class":101,"line":2563},[99,106478,101388],{"class":109},[99,106480,155],{"class":105},[99,106482,101393],{"class":109},[99,106484,101295],{"class":158},[99,106486,116],{"class":109},[99,106488,106489,106491,106493],{"class":101,"line":2577},[99,106490,101402],{"class":109},[99,106492,155],{"class":105},[99,106494,101407],{"class":109},[99,106496,106497],{"class":101,"line":2585},[99,106498,2386],{"emptyLinePlaceholder":26},[99,106500,106501,106503,106505,106507],{"class":101,"line":2590},[99,106502,31280],{"class":158},[99,106504,110],{"class":109},[99,106506,101420],{"class":214},[99,106508,101423],{"class":109},[99,106510,106511,106513,106515,106517],{"class":101,"line":2596},[99,106512,31280],{"class":158},[99,106514,110],{"class":109},[99,106516,101432],{"class":214},[99,106518,101435],{"class":109},[99,106520,106521,106523,106525,106527],{"class":101,"line":2602},[99,106522,31280],{"class":158},[99,106524,110],{"class":109},[99,106526,101444],{"class":214},[99,106528,101447],{"class":109},[99,106530,106531],{"class":101,"line":2607},[99,106532,2386],{"emptyLinePlaceholder":26},[99,106534,106535,106537,106540,106542,106544],{"class":101,"line":7935},[99,106536,3087],{"class":105},[99,106538,106539],{"class":109}," model.nu ",[99,106541,20935],{"class":105},[99,106543,25107],{"class":158},[99,106545,3725],{"class":109},[99,106547,106548,106550,106552,106554,106557],{"class":101,"line":7959},[99,106549,103413],{"class":105},[99,106551,103416],{"class":158},[99,106553,110],{"class":109},[99,106555,106556],{"class":214},"\"expected exactly one actuator\"",[99,106558,116],{"class":109},[99,106560,106561],{"class":101,"line":7964},[99,106562,2386],{"emptyLinePlaceholder":26},[99,106564,106565,106567,106569,106571,106573,106575,106578],{"class":101,"line":7970},[99,106566,3187],{"class":105},[99,106568,31597],{"class":109},[99,106570,26032],{"class":105},[99,106572,32424],{"class":158},[99,106574,110],{"class":109},[99,106576,106577],{"class":158},"2000",[99,106579,30767],{"class":109},[99,106581,106582,106585,106587,106589,106591],{"class":101,"line":7997},[99,106583,106584],{"class":109},"        t ",[99,106586,155],{"class":105},[99,106588,31597],{"class":109},[99,106590,565],{"class":105},[99,106592,106593],{"class":109}," model.opt.timestep\n",[99,106595,106596,106599,106601,106603,106605,106608,106610,106613,106615,106617,106620,106622,106624,106626],{"class":101,"line":8002},[99,106597,106598],{"class":109},"        data.ctrl[",[99,106600,301],{"class":158},[99,106602,4429],{"class":109},[99,106604,155],{"class":105},[99,106606,106607],{"class":158}," 1.5",[99,106609,6505],{"class":105},[99,106611,106612],{"class":109}," math.sin(",[99,106614,105241],{"class":158},[99,106616,6505],{"class":105},[99,106618,106619],{"class":109}," math.pi ",[99,106621,565],{"class":105},[99,106623,61848],{"class":158},[99,106625,6505],{"class":105},[99,106627,106628],{"class":109}," t)\n",[99,106630,106631],{"class":101,"line":8008},[99,106632,101497],{"class":109},[99,106634,106635],{"class":101,"line":8020},[99,106636,2386],{"emptyLinePlaceholder":26},[99,106638,106639,106641,106643,106646],{"class":101,"line":8032},[99,106640,31280],{"class":158},[99,106642,110],{"class":109},[99,106644,106645],{"class":214},"\"time:\"",[99,106647,101459],{"class":109},[99,106649,106650,106652,106654,106657,106659,106661],{"class":101,"line":8044},[99,106651,31280],{"class":158},[99,106653,110],{"class":109},[99,106655,106656],{"class":214},"\"joint qpos:\"",[99,106658,104911],{"class":109},[99,106660,403],{"class":158},[99,106662,30478],{"class":109},[99,106664,106665,106667,106669,106672,106674,106676],{"class":101,"line":9703},[99,106666,31280],{"class":158},[99,106668,110],{"class":109},[99,106670,106671],{"class":214},"\"joint qvel:\"",[99,106673,104927],{"class":109},[99,106675,403],{"class":158},[99,106677,30478],{"class":109},[99,106679,106680,106682,106684,106687],{"class":101,"line":9728},[99,106681,31280],{"class":158},[99,106683,110],{"class":109},[99,106685,106686],{"class":214},"\"last ctrl:\"",[99,106688,106689],{"class":109},", data.ctrl.copy())\n",[99,106691,106692],{"class":101,"line":9751},[99,106693,2386],{"emptyLinePlaceholder":26},[99,106695,106696],{"class":101,"line":9775},[99,106697,2386],{"emptyLinePlaceholder":26},[99,106699,106700,106702,106704,106706,106708],{"class":101,"line":9780},[99,106701,1517],{"class":105},[99,106703,31201],{"class":158},[99,106705,101540],{"class":105},[99,106707,101543],{"class":214},[99,106709,3725],{"class":109},[99,106711,106712],{"class":101,"line":9785},[99,106713,101550],{"class":109},[14,106715,103551],{},[90,106717,106719],{"className":23810,"code":106718,"language":23812,"meta":21,"style":21},"touch ch4_joint_motor.py\n",[96,106720,106721],{"__ignoreMap":21},[99,106722,106723,106725],{"class":101,"line":102},[99,106724,101264],{"class":1949},[99,106726,106727],{"class":214}," ch4_joint_motor.py\n",[14,106729,102282],{},[90,106731,106733],{"className":23810,"code":106732,"language":23812,"meta":21,"style":21},"python ch4_joint_motor.py\n",[96,106734,106735],{"__ignoreMap":21},[99,106736,106737,106739],{"class":101,"line":102},[99,106738,30361],{"class":1949},[99,106740,106727],{"class":214},[70,106742,101553],{"id":101553},[14,106744,106745],{},"检查 actuator 数量：",[90,106747,106749],{"className":30359,"code":106748,"language":30361,"meta":21,"style":21},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[96,106750,106751,106763],{"__ignoreMap":21},[99,106752,106753,106755,106757,106759,106761],{"class":101,"line":102},[99,106754,1517],{"class":105},[99,106756,106539],{"class":109},[99,106758,20935],{"class":105},[99,106760,25107],{"class":158},[99,106762,3725],{"class":109},[99,106764,106765,106767,106769,106771,106773],{"class":101,"line":22},[99,106766,103876],{"class":105},[99,106768,103416],{"class":158},[99,106770,110],{"class":109},[99,106772,106556],{"class":214},[99,106774,116],{"class":109},[14,106776,106777,106779,106780,106782],{},[96,106778,102139],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[96,106781,101057],{}," 长度应该是 1。",[14,106784,106785],{},"产生正弦控制信号：",[90,106787,106789],{"className":30359,"code":106788,"language":30361,"meta":21,"style":21},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[96,106790,106791],{"__ignoreMap":21},[99,106792,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819],{"class":101,"line":102},[99,106794,105852],{"class":109},[99,106796,301],{"class":158},[99,106798,4429],{"class":109},[99,106800,155],{"class":105},[99,106802,106607],{"class":158},[99,106804,6505],{"class":105},[99,106806,106612],{"class":109},[99,106808,105241],{"class":158},[99,106810,6505],{"class":105},[99,106812,106619],{"class":109},[99,106814,565],{"class":105},[99,106816,61848],{"class":158},[99,106818,6505],{"class":105},[99,106820,106628],{"class":109},[14,106822,106823],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106825,101654],{},[90,106827,106828],{"className":30359,"code":104486,"language":30361,"meta":21,"style":21},[96,106829,106830],{"__ignoreMap":21},[99,106831,106832],{"class":101,"line":102},[99,106833,104486],{"class":109},[14,106835,106836],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[70,106838,101689],{"id":101689},[90,106840,106842],{"className":30359,"code":106841,"language":30361,"meta":21,"style":21},"import math\n",[96,106843,106844],{"__ignoreMap":21},[99,106845,106846,106848],{"class":101,"line":102},[99,106847,30373],{"class":105},[99,106849,106331],{"class":109},[14,106851,106852,106853,100999,106856,106859],{},"导入 Python 标准库里的数学模块。后面要用 ",[96,106854,106855],{},"math.sin",[96,106857,106858],{},"math.pi"," 生成周期变化的控制信号。",[90,106861,106862],{"className":30359,"code":103667,"language":30361,"meta":21,"style":21},[96,106863,106864,106870],{"__ignoreMap":21},[99,106865,106866,106868],{"class":101,"line":102},[99,106867,30373],{"class":105},[99,106869,101282],{"class":109},[99,106871,106872,106874,106876,106878],{"class":101,"line":22},[99,106873,30373],{"class":105},[99,106875,31361],{"class":109},[99,106877,31364],{"class":105},[99,106879,31367],{"class":109},[14,106881,106882],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[90,106884,106885],{"className":53048,"code":106168,"language":53050,"meta":21,"style":21},[96,106886,106887],{"__ignoreMap":21},[99,106888,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917],{"class":101,"line":102},[99,106890,1020],{"class":109},[99,106892,102937],{"class":51281},[99,106894,14907],{"class":1949},[99,106896,155],{"class":109},[99,106898,106000],{"class":214},[99,106900,53805],{"class":1949},[99,106902,155],{"class":109},[99,106904,106000],{"class":214},[99,106906,106009],{"class":1949},[99,106908,155],{"class":109},[99,106910,106014],{"class":214},[99,106912,106197],{"class":1949},[99,106914,155],{"class":109},[99,106916,106202],{"class":214},[99,106918,101125],{"class":109},[14,106920,106921,106922,106924,106925,106927,106928,106930],{},"这行定义关节。",[96,106923,105821],{}," 表示旋转关节。",[96,106926,106220],{}," 表示绕 y 轴旋转。",[96,106929,106226],{}," 表示有一点阻尼，运动不会完全无损耗。",[90,106932,106934],{"className":53048,"code":106933,"language":53050,"meta":21,"style":21},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[96,106935,106936],{"__ignoreMap":21},[99,106937,106938,106940,106942,106944,106946,106949,106951,106953,106956,106959,106961,106964,106966,106968,106970,106972,106974,106977],{"class":101,"line":102},[99,106939,1020],{"class":109},[99,106941,101101],{"class":51281},[99,106943,14907],{"class":1949},[99,106945,155],{"class":109},[99,106947,106948],{"class":214},"\"link_geom\"",[99,106950,53805],{"class":1949},[99,106952,155],{"class":109},[99,106954,106955],{"class":214},"\"capsule\"",[99,106957,106958],{"class":1949}," fromto",[99,106960,155],{"class":109},[99,106962,106963],{"class":214},"\"0 0 0 0 0 0.5\"",[99,106965,101117],{"class":1949},[99,106967,155],{"class":109},[99,106969,103759],{"class":214},[99,106971,101982],{"class":1949},[99,106973,155],{"class":109},[99,106975,106976],{"class":214},"\"0.5\"",[99,106978,101125],{"class":109},[14,106980,106981,106982,106984,106985,106987,106988,106991,106992,28366,106995,106997],{},"这行定义摆杆的形状。",[96,106983,103146],{}," 是胶囊体，适合表示杆子。",[96,106986,103157],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[96,106989,106990],{},"(0,0,0)"," 延伸到 ",[96,106993,106994],{},"(0,0,0.5)",[96,106996,103151],{}," 是半径。",[90,106999,107000],{"className":53048,"code":106234,"language":53050,"meta":21,"style":21},[96,107001,107002],{"__ignoreMap":21},[99,107003,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038],{"class":101,"line":102},[99,107005,1020],{"class":109},[99,107007,106055],{"class":51281},[99,107009,14907],{"class":1949},[99,107011,155],{"class":109},[99,107013,106062],{"class":214},[99,107015,106065],{"class":1949},[99,107017,155],{"class":109},[99,107019,106000],{"class":214},[99,107021,106072],{"class":1949},[99,107023,155],{"class":109},[99,107025,3664],{"class":214},[99,107027,106079],{"class":1949},[99,107029,155],{"class":109},[99,107031,106084],{"class":214},[99,107033,106087],{"class":1949},[99,107035,155],{"class":109},[99,107037,106092],{"class":214},[99,107039,101125],{"class":109},[14,107041,107042,107043,107045,107046,107049,107050,107052],{},"这行定义电机。它作用在 ",[96,107044,105821],{}," 关节上。",[96,107047,107048],{},"gear"," 可以理解成放大倍数。",[96,107051,105836],{}," 限制控制输入范围。",[90,107054,107055],{"className":30359,"code":106748,"language":30361,"meta":21,"style":21},[96,107056,107057,107069],{"__ignoreMap":21},[99,107058,107059,107061,107063,107065,107067],{"class":101,"line":102},[99,107060,1517],{"class":105},[99,107062,106539],{"class":109},[99,107064,20935],{"class":105},[99,107066,25107],{"class":158},[99,107068,3725],{"class":109},[99,107070,107071,107073,107075,107077,107079],{"class":101,"line":22},[99,107072,103876],{"class":105},[99,107074,103416],{"class":158},[99,107076,110],{"class":109},[99,107078,106556],{"class":214},[99,107080,116],{"class":109},[14,107082,107083,107085],{},[96,107084,102139],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[90,107087,107089],{"className":30359,"code":107088,"language":30361,"meta":21,"style":21},"for step in range(2000):\n",[96,107090,107091],{"__ignoreMap":21},[99,107092,107093,107095,107097,107099,107101,107103,107105],{"class":101,"line":102},[99,107094,3011],{"class":105},[99,107096,31597],{"class":109},[99,107098,26032],{"class":105},[99,107100,32424],{"class":158},[99,107102,110],{"class":109},[99,107104,106577],{"class":158},[99,107106,30767],{"class":109},[14,107108,107109,107110,107112,107113,107116],{},"循环 2000 步。这里没有用 ",[96,107111,1102],{},"，而是用 ",[96,107114,107115],{},"step","，因为后面要用当前步数计算时间。",[90,107118,107120],{"className":30359,"code":107119,"language":30361,"meta":21,"style":21},"t = step * model.opt.timestep\n",[96,107121,107122],{"__ignoreMap":21},[99,107123,107124,107127,107129,107131,107133],{"class":101,"line":102},[99,107125,107126],{"class":109},"t ",[99,107128,155],{"class":105},[99,107130,31597],{"class":109},[99,107132,565],{"class":105},[99,107134,106593],{"class":109},[14,107136,107137],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[90,107139,107140],{"className":30359,"code":106788,"language":30361,"meta":21,"style":21},[96,107141,107142],{"__ignoreMap":21},[99,107143,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166,107168,107170],{"class":101,"line":102},[99,107145,105852],{"class":109},[99,107147,301],{"class":158},[99,107149,4429],{"class":109},[99,107151,155],{"class":105},[99,107153,106607],{"class":158},[99,107155,6505],{"class":105},[99,107157,106612],{"class":109},[99,107159,105241],{"class":158},[99,107161,6505],{"class":105},[99,107163,106619],{"class":109},[99,107165,565],{"class":105},[99,107167,61848],{"class":158},[99,107169,6505],{"class":105},[99,107171,106628],{"class":109},[14,107173,107174],{},"这行给电机输入一个正弦波。拆开看：",[53,107176,107177,107183,107189],{},[56,107178,107179,107182],{},[96,107180,107181],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[56,107184,107185,107188],{},[96,107186,107187],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[56,107190,107191,107194],{},[96,107192,107193],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107196,107197],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[90,107199,107201],{"className":30359,"code":107200,"language":30361,"meta":21,"style":21},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[96,107202,107203],{"__ignoreMap":21},[99,107204,107205,107207,107209,107211,107213,107215],{"class":101,"line":102},[99,107206,30396],{"class":158},[99,107208,110],{"class":109},[99,107210,106656],{"class":214},[99,107212,104911],{"class":109},[99,107214,403],{"class":158},[99,107216,30478],{"class":109},[14,107218,107219,107220,107222],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[96,107221,101051],{}," 只有一个数。",[41,107224,102297],{"id":102296},[14,107226,107227],{},"输出类似:",[90,107229,107232],{"className":107230,"code":107231,"language":5174,"meta":21},[5172],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[96,107233,107231],{"__ignoreMap":21},[14,107235,107236,107237,107239],{},"这里 ",[96,107238,106107],{}," 是电机输入。",[14,107241,107242,107245,107246,107249],{},[96,107243,107244],{},"joint qpos"," 是关节角度，单位通常是弧度。",[96,107247,107248],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107251,107252],{},"角度单位提示：",[90,107254,107257],{"className":107255,"code":107256,"language":5174,"meta":21},[5172],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[96,107258,107256],{"__ignoreMap":21},[14,107260,107261,107262,107264,107265,107267],{},"如果你看到 ",[96,107263,104011],{}," 是 ",[96,107266,35310],{},"，大约就是 28.6 度。",[41,107269,102329],{"id":102328},[53,107271,107272,107279,107282,107289,107292,107300,107308],{},[56,107273,102392,107274,102395,107276,28366],{},[96,107275,106292],{},[96,107277,107278],{},"gear=\"5\"",[56,107280,107281],{},"重新运行，观察关节运动是否更剧烈。",[56,107283,102392,107284,102395,107286,28366],{},[96,107285,105836],{},[96,107287,107288],{},"-0.2 0.2",[56,107290,107291],{},"重新运行，观察控制能力是否变弱。",[56,107293,107294,107295,107297,107298,28366],{},"去掉 actuator，确认 ",[96,107296,102139],{}," 变成 ",[96,107299,301],{},[56,107301,102392,107302,102395,107304,107307],{},[96,107303,106226],{},[96,107305,107306],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[56,107309,102392,107310,102395,107312,107315],{},[96,107311,106220],{},[96,107313,107314],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[41,107317,102434],{"id":102433},[70,107319,107321],{"id":107320},"indexerror-index-0-is-out-of-bounds",[96,107322,107323],{},"IndexError: index 0 is out of bounds",[14,107325,107326,107327,107329],{},"原因是 ",[96,107328,105973],{},"，没有 actuator。",[70,107331,107332],{"id":107332},"关节几乎不动",[14,107334,107335],{},"可能原因:",[53,107337,107338,107343,107347,107353],{},[56,107339,107340,107342],{},[96,107341,107048],{}," 太小",[56,107344,107345,107342],{},[96,107346,105836],{},[56,107348,107349,107352],{},[96,107350,107351],{},"damping"," 太大",[56,107354,107355],{},"重力方向导致运动不明显",[70,107357,107358],{"id":107358},"模型编译失败",[14,107360,107361,107362,107364],{},"检查 actuator 引用的 ",[96,107363,106283],{}," 是否存在，joint 名称是否拼写一致。",[70,107366,107368,107370],{"id":107367},"datactrl0-写了但没有效果",[96,107369,106107],{}," 写了但没有效果",[14,107372,102556],{},[53,107374,107375,107380,107383,107388,107393],{},[56,107376,107377,107379],{},[96,107378,102139],{}," 是否大于 0。",[56,107381,107382],{},"motor 是否引用了正确 joint。",[56,107384,107385,107387],{},[96,107386,107048],{}," 是否太小。",[56,107389,107390,107392],{},[96,107391,105836],{}," 是否把输入限制得太小。",[56,107394,107395],{},"body 是否真的有可动 joint。",[70,107397,107398],{"id":107398},"控制输入超过范围会怎样",[14,107400,107401],{},"如果设置了：",[90,107403,107405],{"className":53048,"code":107404,"language":53050,"meta":21,"style":21},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[96,107406,107407],{"__ignoreMap":21},[99,107408,107409],{"class":101,"line":102},[99,107410,107404],{"class":109},[14,107412,107413],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[90,107415,107417],{"className":30359,"code":107416,"language":30361,"meta":21,"style":21},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[96,107418,107419,107439],{"__ignoreMap":21},[99,107420,107421,107424,107426,107429,107431,107433,107435,107437],{"class":101,"line":102},[99,107422,107423],{"class":109},"action ",[99,107425,155],{"class":105},[99,107427,107428],{"class":109}," np.clip(action, ",[99,107430,642],{"class":105},[99,107432,105241],{"class":158},[99,107434,12422],{"class":109},[99,107436,105241],{"class":158},[99,107438,116],{"class":109},[99,107440,107441,107443,107445,107447,107449],{"class":101,"line":22},[99,107442,105852],{"class":109},[99,107444,301],{"class":158},[99,107446,4429],{"class":109},[99,107448,155],{"class":105},[99,107450,107451],{"class":109}," action\n",[41,107453,102588],{"id":102587},[14,107455,107456],{},"这一章建立了控制任务的基本形式：",[90,107458,107461],{"className":107459,"code":107460,"language":5174,"meta":21},[5172],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[96,107462,107460],{"__ignoreMap":21},[14,107464,107465],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5113,107467,107468],{},"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":21,"searchDepth":22,"depth":22,"links":107470},[107471,107472,107473,107478,107482,107483,107484,107492],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":107474},[107475,107476,107477],{"id":106114,"depth":1165,"text":106115},{"id":106164,"depth":1165,"text":106165},{"id":106230,"depth":1165,"text":106231},{"id":101233,"depth":22,"text":101234,"children":107479},[107480,107481],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":107485},[107486,107487,107488,107489,107491],{"id":107320,"depth":1165,"text":107323},{"id":107332,"depth":1165,"text":107332},{"id":107358,"depth":1165,"text":107358},{"id":107367,"depth":1165,"text":107490},"data.ctrl[0] 写了但没有效果",{"id":107398,"depth":1165,"text":107398},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105802,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107499,"title":107500,"body":107501,"description":21,"extension":24,"meta":109410,"navigation":26,"path":109411,"seo":109412,"stem":109413,"__hash__":109414},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107502,"toc":109386},[107503,107506,107508,107511,107519,107522,107539,107542,107567,107570,107616,107618,107620,107675,107677,107696,107698,107741,107744,107761,107764,107780,107790,107797,107799,107802,107805,107839,107842,107890,107894,107897,107911,107920,107924,107927,107952,107955,107959,107972,107975,107981,107984,107999,108001,108004,108264,108266,108278,108281,108593,108595,108607,108609,108612,108627,108632,108635,108657,108660,108663,108697,108700,108704,108715,108718,108735,108738,108752,108759,108779,108786,108800,108803,108815,108830,108850,108853,108875,108878,108882,108897,108908,108923,108926,108956,108972,109001,109009,109033,109036,109054,109064,109076,109083,109092,109098,109107,109110,109112,109121,109124,109139,109141,109144,109155,109158,109169,109172,109190,109192,109209,109212,109240,109242,109246,109249,109279,109285,109288,109292,109300,109303,109305,109326,109329,109332,109348,109351,109367,109369,109372,109383],[10,107504,107500],{"id":107505},"_5viewer-可视化与-renderer-离屏渲染",[41,107507,100628],{"id":100627},[14,107509,107510],{},"本章掌握两类可视化方式:",[53,107512,107513,107516],{},[56,107514,107515],{},"交互式 viewer: 适合人工观察仿真",[56,107517,107518],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107520,107521],{},"使用官方接口:",[90,107523,107525],{"className":30359,"code":107524,"language":30361,"meta":21,"style":21},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[96,107526,107527,107534],{"__ignoreMap":21},[99,107528,107529,107531],{"class":101,"line":102},[99,107530,30373],{"class":105},[99,107532,107533],{"class":109}," mujoco.viewer\n",[99,107535,107536],{"class":101,"line":22},[99,107537,107538],{"class":109},"mujoco.viewer.launch_passive(model, data)\n",[14,107540,107541],{},"以及:",[90,107543,107545],{"className":30359,"code":107544,"language":30361,"meta":21,"style":21},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[96,107546,107547,107557],{"__ignoreMap":21},[99,107548,107549,107552,107554],{"class":101,"line":102},[99,107550,107551],{"class":109},"renderer ",[99,107553,155],{"class":105},[99,107555,107556],{"class":109}," mujoco.Renderer(model)\n",[99,107558,107559,107562,107564],{"class":101,"line":22},[99,107560,107561],{"class":109},"image ",[99,107563,155],{"class":105},[99,107565,107566],{"class":109}," renderer.render()\n",[14,107568,107569],{},"新手建议先理解二者区别：",[247,107571,107572,107588],{},[250,107573,107574],{},[253,107575,107576,107579,107582,107585],{},[256,107577,107578],{"align":23724},"工具",[256,107580,107581],{"align":23724},"用途",[256,107583,107584],{"align":23724},"是否打开窗口",[256,107586,107587],{"align":23724},"常见场景",[294,107589,107590,107603],{},[253,107591,107592,107595,107598,107600],{},[299,107593,107594],{"align":23724},"Viewer",[299,107596,107597],{"align":23724},"人眼实时观察仿真",[299,107599,104646],{"align":23724},[299,107601,107602],{"align":23724},"调试模型、看控制效果",[253,107604,107605,107608,107611,107613],{},[299,107606,107607],{"align":23724},"Renderer",[299,107609,107610],{"align":23724},"生成图像数组",[299,107612,104659],{"align":23724},[299,107614,107615],{"align":23724},"保存图片、训练视觉策略、服务器批量采集",[41,107617,100751],{"id":100750},[14,107619,100754],{},[90,107621,107623],{"className":23810,"code":107622,"language":23812,"meta":21,"style":21},"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",[96,107624,107625,107637,107647,107655,107663],{"__ignoreMap":21},[99,107626,107627,107629,107631,107633,107635],{"class":101,"line":102},[99,107628,24565],{"class":1949},[99,107630,26304],{"class":214},[99,107632,23822],{"class":214},[99,107634,26389],{"class":158},[99,107636,24667],{"class":158},[99,107638,107639,107641,107643,107645],{"class":101,"line":22},[99,107640,100789],{"class":214},[99,107642,100792],{"class":214},[99,107644,100795],{"class":214},[99,107646,24667],{"class":158},[99,107648,107649,107651,107653],{"class":101,"line":1165},[99,107650,100802],{"class":214},[99,107652,100805],{"class":214},[99,107654,24667],{"class":158},[99,107656,107657,107659,107661],{"class":101,"line":1180},[99,107658,100812],{"class":214},[99,107660,100815],{"class":214},[99,107662,24667],{"class":158},[99,107664,107665,107667,107669,107671,107673],{"class":101,"line":1186},[99,107666,100822],{"class":214},[99,107668,100825],{"class":214},[99,107670,100828],{"class":214},[99,107672,100831],{"class":214},[99,107674,102497],{"class":214},[14,107676,102800],{},[90,107678,107680],{"className":23810,"code":107679,"language":23812,"meta":21,"style":21},"pip install \"mujoco>=2.3\" numpy pillow\n",[96,107681,107682],{"__ignoreMap":21},[99,107683,107684,107686,107688,107690,107693],{"class":101,"line":102},[99,107685,23819],{"class":1949},[99,107687,23822],{"class":214},[99,107689,100911],{"class":214},[99,107691,107692],{"class":214}," numpy",[99,107694,107695],{"class":214}," pillow\n",[14,107697,102817],{},[90,107699,107701],{"className":23810,"code":107700,"language":23812,"meta":21,"style":21},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[96,107702,107703,107720,107729],{"__ignoreMap":21},[99,107704,107705,107707,107709,107711,107714,107716,107718],{"class":101,"line":102},[99,107706,30311],{"class":1949},[99,107708,29157],{"class":214},[99,107710,25104],{"class":158},[99,107712,107713],{"class":214}," mujoco-render",[99,107715,100956],{"class":214},[99,107717,100959],{"class":158},[99,107719,100962],{"class":158},[99,107721,107722,107724,107726],{"class":101,"line":22},[99,107723,30311],{"class":1949},[99,107725,100969],{"class":214},[99,107727,107728],{"class":214}," mujoco-render\n",[99,107730,107731,107733,107735,107737,107739],{"class":101,"line":1165},[99,107732,23819],{"class":1949},[99,107734,23822],{"class":214},[99,107736,100911],{"class":214},[99,107738,107692],{"class":214},[99,107740,107695],{"class":214},[14,107742,107743],{},"离屏渲染后端:",[90,107745,107747],{"className":23810,"code":107746,"language":23812,"meta":21,"style":21},"export MUJOCO_GL=egl\n",[96,107748,107749],{"__ignoreMap":21},[99,107750,107751,107753,107756,107758],{"class":101,"line":102},[99,107752,25031],{"class":105},[99,107754,107755],{"class":109}," MUJOCO_GL",[99,107757,155],{"class":105},[99,107759,107760],{"class":109},"egl\n",[14,107762,107763],{},"或:",[90,107765,107767],{"className":23810,"code":107766,"language":23812,"meta":21,"style":21},"export MUJOCO_GL=osmesa\n",[96,107768,107769],{"__ignoreMap":21},[99,107770,107771,107773,107775,107777],{"class":101,"line":102},[99,107772,25031],{"class":105},[99,107774,107755],{"class":109},[99,107776,155],{"class":105},[99,107778,107779],{"class":109},"osmesa\n",[14,107781,107782,107783,107786,107787,28366],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[96,107784,107785],{},"egl"," 失败，再尝试 ",[96,107788,107789],{},"osmesa",[14,107791,107792,107793,107796],{},"如果你在本机桌面环境运行，通常先不要设置 ",[96,107794,107795],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[41,107798,101026],{"id":101025},[14,107800,107801],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107803,107804],{},"典型 viewer 流程:",[90,107806,107808],{"className":30359,"code":107807,"language":30361,"meta":21,"style":21},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[96,107809,107810,107823,107830,107834],{"__ignoreMap":21},[99,107811,107812,107815,107818,107820],{"class":101,"line":102},[99,107813,107814],{"class":105},"with",[99,107816,107817],{"class":109}," mujoco.viewer.launch_passive(model, data) ",[99,107819,31364],{"class":105},[99,107821,107822],{"class":109}," viewer:\n",[99,107824,107825,107827],{"class":101,"line":22},[99,107826,2237],{"class":105},[99,107828,107829],{"class":109}," viewer.is_running():\n",[99,107831,107832],{"class":101,"line":1165},[99,107833,101497],{"class":109},[99,107835,107836],{"class":101,"line":1180},[99,107837,107838],{"class":109},"        viewer.sync()\n",[14,107840,107841],{},"典型 renderer 流程:",[90,107843,107845],{"className":30359,"code":107844,"language":30361,"meta":21,"style":21},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[96,107846,107847,107873,107877,107882],{"__ignoreMap":21},[99,107848,107849,107851,107853,107856,107858,107860,107862,107864,107866,107868,107871],{"class":101,"line":102},[99,107850,107551],{"class":109},[99,107852,155],{"class":105},[99,107854,107855],{"class":109}," mujoco.Renderer(model, ",[99,107857,24970],{"class":5203},[99,107859,155],{"class":105},[99,107861,42323],{"class":158},[99,107863,12422],{"class":109},[99,107865,24966],{"class":5203},[99,107867,155],{"class":105},[99,107869,107870],{"class":158},"640",[99,107872,116],{"class":109},[99,107874,107875],{"class":101,"line":22},[99,107876,104486],{"class":109},[99,107878,107879],{"class":101,"line":1165},[99,107880,107881],{"class":109},"renderer.update_scene(data)\n",[99,107883,107884,107886,107888],{"class":101,"line":1180},[99,107885,107561],{"class":109},[99,107887,155],{"class":105},[99,107889,107566],{"class":109},[70,107891,107893],{"id":107892},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107895,107896],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[90,107898,107900],{"className":30359,"code":107899,"language":30361,"meta":21,"style":21},"mujoco.mj_step(model, data)\nviewer.sync()\n",[96,107901,107902,107906],{"__ignoreMap":21},[99,107903,107904],{"class":101,"line":102},[99,107905,104486],{"class":109},[99,107907,107908],{"class":101,"line":22},[99,107909,107910],{"class":109},"viewer.sync()\n",[14,107912,107913,107915,107916,107919],{},[96,107914,101196],{}," 负责算物理，",[96,107917,107918],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[70,107921,107923],{"id":107922},"为什么要-sleep","为什么要 sleep",[14,107925,107926],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[90,107928,107930],{"className":30359,"code":107929,"language":30361,"meta":21,"style":21},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[96,107931,107932],{"__ignoreMap":21},[99,107933,107934,107937,107939,107942,107944,107947,107949],{"class":101,"line":102},[99,107935,107936],{"class":109},"sleep_time ",[99,107938,155],{"class":105},[99,107940,107941],{"class":109}," model.opt.timestep ",[99,107943,642],{"class":105},[99,107945,107946],{"class":109}," (time.time() ",[99,107948,642],{"class":105},[99,107950,107951],{"class":109}," step_start)\n",[14,107953,107954],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[70,107956,107958],{"id":107957},"renderer-输出是什么","renderer 输出是什么",[90,107960,107962],{"className":30359,"code":107961,"language":30361,"meta":21,"style":21},"image = renderer.render()\n",[96,107963,107964],{"__ignoreMap":21},[99,107965,107966,107968,107970],{"class":101,"line":102},[99,107967,107561],{"class":109},[99,107969,155],{"class":105},[99,107971,107566],{"class":109},[14,107973,107974],{},"得到的是 NumPy 数组，形状通常是：",[90,107976,107979],{"className":107977,"code":107978,"language":5174,"meta":21},[5172],"(height, width, 3)\n",[96,107980,107978],{"__ignoreMap":21},[14,107982,107983],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[90,107985,107987],{"className":30359,"code":107986,"language":30361,"meta":21,"style":21},"Image.fromarray(image).save(\"render_output.png\")\n",[96,107988,107989],{"__ignoreMap":21},[99,107990,107991,107994,107997],{"class":101,"line":102},[99,107992,107993],{"class":109},"Image.fromarray(image).save(",[99,107995,107996],{"class":214},"\"render_output.png\"",[99,107998,116],{"class":109},[41,108000,101234],{"id":101233},[14,108002,108003],{},"交互式 Viewer:",[90,108005,108007],{"className":30359,"code":108006,"language":30361,"meta":21,"style":21},"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",[96,108008,108009,108015,108019,108025,108031,108035,108039,108047,108052,108056,108060,108064,108069,108074,108078,108082,108086,108091,108095,108099,108103,108107,108111,108115,108127,108139,108147,108151,108161,108181,108191,108196,108201,108205,108222,108235,108240,108244,108248,108260],{"__ignoreMap":21},[99,108010,108011,108013],{"class":101,"line":102},[99,108012,30373],{"class":105},[99,108014,31810],{"class":109},[99,108016,108017],{"class":101,"line":22},[99,108018,2386],{"emptyLinePlaceholder":26},[99,108020,108021,108023],{"class":101,"line":1165},[99,108022,30373],{"class":105},[99,108024,101282],{"class":109},[99,108026,108027,108029],{"class":101,"line":1180},[99,108028,30373],{"class":105},[99,108030,107533],{"class":109},[99,108032,108033],{"class":101,"line":1186},[99,108034,2386],{"emptyLinePlaceholder":26},[99,108036,108037],{"class":101,"line":1200},[99,108038,2386],{"emptyLinePlaceholder":26},[99,108040,108041,108043,108045],{"class":101,"line":1206},[99,108042,101295],{"class":158},[99,108044,13551],{"class":105},[99,108046,101300],{"class":214},[99,108048,108049],{"class":101,"line":1297},[99,108050,108051],{"class":214},"\u003Cmujoco model=\"viewer_demo\">\n",[99,108053,108054],{"class":101,"line":1303},[99,108055,101310],{"class":214},[99,108057,108058],{"class":101,"line":1315},[99,108059,2386],{"emptyLinePlaceholder":26},[99,108061,108062],{"class":101,"line":1598},[99,108063,101319],{"class":214},[99,108065,108066],{"class":101,"line":1603},[99,108067,108068],{"class":214},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[99,108070,108071],{"class":101,"line":1609},[99,108072,108073],{"class":214},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[99,108075,108076],{"class":101,"line":1614},[99,108077,2386],{"emptyLinePlaceholder":26},[99,108079,108080],{"class":101,"line":1628},[99,108081,101333],{"class":214},[99,108083,108084],{"class":101,"line":1633},[99,108085,101338],{"class":214},[99,108087,108088],{"class":101,"line":1639},[99,108089,108090],{"class":214},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[99,108092,108093],{"class":101,"line":1660},[99,108094,101348],{"class":214},[99,108096,108097],{"class":101,"line":1665},[99,108098,101353],{"class":214},[99,108100,108101],{"class":101,"line":1679},[99,108102,101358],{"class":214},[99,108104,108105],{"class":101,"line":1684},[99,108106,95679],{"class":214},[99,108108,108109],{"class":101,"line":1713},[99,108110,2386],{"emptyLinePlaceholder":26},[99,108112,108113],{"class":101,"line":1718},[99,108114,2386],{"emptyLinePlaceholder":26},[99,108116,108117,108119,108121,108123,108125],{"class":101,"line":1735},[99,108118,31928],{"class":105},[99,108120,1959],{"class":1949},[99,108122,101379],{"class":109},[99,108124,95667],{"class":158},[99,108126,3725],{"class":109},[99,108128,108129,108131,108133,108135,108137],{"class":101,"line":1740},[99,108130,101388],{"class":109},[99,108132,155],{"class":105},[99,108134,101393],{"class":109},[99,108136,101295],{"class":158},[99,108138,116],{"class":109},[99,108140,108141,108143,108145],{"class":101,"line":1745},[99,108142,101402],{"class":109},[99,108144,155],{"class":105},[99,108146,101407],{"class":109},[99,108148,108149],{"class":101,"line":1750},[99,108150,2386],{"emptyLinePlaceholder":26},[99,108152,108153,108155,108157,108159],{"class":101,"line":1764},[99,108154,34159],{"class":105},[99,108156,107817],{"class":109},[99,108158,31364],{"class":105},[99,108160,107822],{"class":109},[99,108162,108163,108166,108169,108171,108174,108176,108179],{"class":101,"line":1769},[99,108164,108165],{"class":105},"        while",[99,108167,108168],{"class":109}," viewer.is_running() ",[99,108170,30443],{"class":105},[99,108172,108173],{"class":109}," data.time ",[99,108175,1020],{"class":105},[99,108177,108178],{"class":158}," 5.0",[99,108180,3725],{"class":109},[99,108182,108183,108186,108188],{"class":101,"line":2563},[99,108184,108185],{"class":109},"            step_start ",[99,108187,155],{"class":105},[99,108189,108190],{"class":109}," time.time()\n",[99,108192,108193],{"class":101,"line":2577},[99,108194,108195],{"class":109},"            mujoco.mj_step(model, data)\n",[99,108197,108198],{"class":101,"line":2585},[99,108199,108200],{"class":109},"            viewer.sync()\n",[99,108202,108203],{"class":101,"line":2590},[99,108204,2386],{"emptyLinePlaceholder":26},[99,108206,108207,108210,108212,108214,108216,108218,108220],{"class":101,"line":2596},[99,108208,108209],{"class":109},"            sleep_time ",[99,108211,155],{"class":105},[99,108213,107941],{"class":109},[99,108215,642],{"class":105},[99,108217,107946],{"class":109},[99,108219,642],{"class":105},[99,108221,107951],{"class":109},[99,108223,108224,108226,108229,108231,108233],{"class":101,"line":2602},[99,108225,4628],{"class":105},[99,108227,108228],{"class":109}," sleep_time ",[99,108230,1070],{"class":105},[99,108232,4079],{"class":158},[99,108234,3725],{"class":109},[99,108236,108237],{"class":101,"line":2607},[99,108238,108239],{"class":109},"                time.sleep(sleep_time)\n",[99,108241,108242],{"class":101,"line":7935},[99,108243,2386],{"emptyLinePlaceholder":26},[99,108245,108246],{"class":101,"line":7959},[99,108247,2386],{"emptyLinePlaceholder":26},[99,108249,108250,108252,108254,108256,108258],{"class":101,"line":7964},[99,108251,1517],{"class":105},[99,108253,31201],{"class":158},[99,108255,101540],{"class":105},[99,108257,101543],{"class":214},[99,108259,3725],{"class":109},[99,108261,108262],{"class":101,"line":7970},[99,108263,101550],{"class":109},[14,108265,103551],{},[90,108267,108269],{"className":23810,"code":108268,"language":23812,"meta":21,"style":21},"touch ch5_viewer.py\n",[96,108270,108271],{"__ignoreMap":21},[99,108272,108273,108275],{"class":101,"line":102},[99,108274,101264],{"class":1949},[99,108276,108277],{"class":214}," ch5_viewer.py\n",[14,108279,108280],{},"离屏 Renderer 保存图片:",[90,108282,108284],{"className":30359,"code":108283,"language":30361,"meta":21,"style":21},"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",[96,108285,108286,108298,108302,108308,108318,108322,108326,108334,108339,108343,108347,108351,108355,108360,108364,108368,108372,108376,108380,108384,108388,108392,108396,108400,108404,108416,108428,108436,108461,108465,108481,108485,108489,108504,108513,108517,108531,108536,108541,108545,108557,108569,108573,108577,108589],{"__ignoreMap":21},[99,108287,108288,108290,108293,108295],{"class":101,"line":102},[99,108289,30718],{"class":105},[99,108291,108292],{"class":109}," pathlib ",[99,108294,30373],{"class":105},[99,108296,108297],{"class":109}," Path\n",[99,108299,108300],{"class":101,"line":22},[99,108301,2386],{"emptyLinePlaceholder":26},[99,108303,108304,108306],{"class":101,"line":1165},[99,108305,30373],{"class":105},[99,108307,101282],{"class":109},[99,108309,108310,108312,108314,108316],{"class":101,"line":1180},[99,108311,30718],{"class":105},[99,108313,47244],{"class":158},[99,108315,47247],{"class":105},[99,108317,47250],{"class":109},[99,108319,108320],{"class":101,"line":1186},[99,108321,2386],{"emptyLinePlaceholder":26},[99,108323,108324],{"class":101,"line":1200},[99,108325,2386],{"emptyLinePlaceholder":26},[99,108327,108328,108330,108332],{"class":101,"line":1206},[99,108329,101295],{"class":158},[99,108331,13551],{"class":105},[99,108333,101300],{"class":214},[99,108335,108336],{"class":101,"line":1297},[99,108337,108338],{"class":214},"\u003Cmujoco model=\"renderer_demo\">\n",[99,108340,108341],{"class":101,"line":1303},[99,108342,101310],{"class":214},[99,108344,108345],{"class":101,"line":1315},[99,108346,2386],{"emptyLinePlaceholder":26},[99,108348,108349],{"class":101,"line":1598},[99,108350,101319],{"class":214},[99,108352,108353],{"class":101,"line":1603},[99,108354,108068],{"class":214},[99,108356,108357],{"class":101,"line":1609},[99,108358,108359],{"class":214},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[99,108361,108362],{"class":101,"line":1614},[99,108363,108073],{"class":214},[99,108365,108366],{"class":101,"line":1628},[99,108367,2386],{"emptyLinePlaceholder":26},[99,108369,108370],{"class":101,"line":1633},[99,108371,101333],{"class":214},[99,108373,108374],{"class":101,"line":1639},[99,108375,101338],{"class":214},[99,108377,108378],{"class":101,"line":1660},[99,108379,108090],{"class":214},[99,108381,108382],{"class":101,"line":1665},[99,108383,101348],{"class":214},[99,108385,108386],{"class":101,"line":1679},[99,108387,101353],{"class":214},[99,108389,108390],{"class":101,"line":1684},[99,108391,101358],{"class":214},[99,108393,108394],{"class":101,"line":1713},[99,108395,95679],{"class":214},[99,108397,108398],{"class":101,"line":1718},[99,108399,2386],{"emptyLinePlaceholder":26},[99,108401,108402],{"class":101,"line":1735},[99,108403,2386],{"emptyLinePlaceholder":26},[99,108405,108406,108408,108410,108412,108414],{"class":101,"line":1740},[99,108407,31928],{"class":105},[99,108409,1959],{"class":1949},[99,108411,101379],{"class":109},[99,108413,95667],{"class":158},[99,108415,3725],{"class":109},[99,108417,108418,108420,108422,108424,108426],{"class":101,"line":1745},[99,108419,101388],{"class":109},[99,108421,155],{"class":105},[99,108423,101393],{"class":109},[99,108425,101295],{"class":158},[99,108427,116],{"class":109},[99,108429,108430,108432,108434],{"class":101,"line":1750},[99,108431,101402],{"class":109},[99,108433,155],{"class":105},[99,108435,101407],{"class":109},[99,108437,108438,108441,108443,108445,108447,108449,108451,108453,108455,108457,108459],{"class":101,"line":1764},[99,108439,108440],{"class":109},"    renderer ",[99,108442,155],{"class":105},[99,108444,107855],{"class":109},[99,108446,24970],{"class":5203},[99,108448,155],{"class":105},[99,108450,42323],{"class":158},[99,108452,12422],{"class":109},[99,108454,24966],{"class":5203},[99,108456,155],{"class":105},[99,108458,107870],{"class":158},[99,108460,116],{"class":109},[99,108462,108463],{"class":101,"line":1769},[99,108464,2386],{"emptyLinePlaceholder":26},[99,108466,108467,108469,108471,108473,108475,108477,108479],{"class":101,"line":2563},[99,108468,3187],{"class":105},[99,108470,101482],{"class":109},[99,108472,26032],{"class":105},[99,108474,32424],{"class":158},[99,108476,110],{"class":109},[99,108478,421],{"class":158},[99,108480,30767],{"class":109},[99,108482,108483],{"class":101,"line":2577},[99,108484,101497],{"class":109},[99,108486,108487],{"class":101,"line":2585},[99,108488,2386],{"emptyLinePlaceholder":26},[99,108490,108491,108494,108497,108499,108502],{"class":101,"line":2590},[99,108492,108493],{"class":109},"    renderer.update_scene(data, ",[99,108495,108496],{"class":5203},"camera",[99,108498,155],{"class":105},[99,108500,108501],{"class":214},"\"fixed_camera\"",[99,108503,116],{"class":109},[99,108505,108506,108509,108511],{"class":101,"line":2596},[99,108507,108508],{"class":109},"    image ",[99,108510,155],{"class":105},[99,108512,107566],{"class":109},[99,108514,108515],{"class":101,"line":2602},[99,108516,2386],{"emptyLinePlaceholder":26},[99,108518,108519,108522,108524,108527,108529],{"class":101,"line":2607},[99,108520,108521],{"class":109},"    output_path ",[99,108523,155],{"class":105},[99,108525,108526],{"class":109}," Path(",[99,108528,107996],{"class":214},[99,108530,116],{"class":109},[99,108532,108533],{"class":101,"line":7935},[99,108534,108535],{"class":109},"    Image.fromarray(image).save(output_path)\n",[99,108537,108538],{"class":101,"line":7959},[99,108539,108540],{"class":109},"    renderer.close()\n",[99,108542,108543],{"class":101,"line":7964},[99,108544,2386],{"emptyLinePlaceholder":26},[99,108546,108547,108549,108551,108554],{"class":101,"line":7970},[99,108548,31280],{"class":158},[99,108550,110],{"class":109},[99,108552,108553],{"class":214},"\"saved:\"",[99,108555,108556],{"class":109},", output_path.resolve())\n",[99,108558,108559,108561,108563,108566],{"class":101,"line":7997},[99,108560,31280],{"class":158},[99,108562,110],{"class":109},[99,108564,108565],{"class":214},"\"image shape:\"",[99,108567,108568],{"class":109},", image.shape)\n",[99,108570,108571],{"class":101,"line":8002},[99,108572,2386],{"emptyLinePlaceholder":26},[99,108574,108575],{"class":101,"line":8008},[99,108576,2386],{"emptyLinePlaceholder":26},[99,108578,108579,108581,108583,108585,108587],{"class":101,"line":8020},[99,108580,1517],{"class":105},[99,108582,31201],{"class":158},[99,108584,101540],{"class":105},[99,108586,101543],{"class":214},[99,108588,3725],{"class":109},[99,108590,108591],{"class":101,"line":8032},[99,108592,101550],{"class":109},[14,108594,103551],{},[90,108596,108598],{"className":23810,"code":108597,"language":23812,"meta":21,"style":21},"touch ch5_renderer.py\n",[96,108599,108600],{"__ignoreMap":21},[99,108601,108602,108604],{"class":101,"line":102},[99,108603,101264],{"class":1949},[99,108605,108606],{"class":214}," ch5_renderer.py\n",[70,108608,101553],{"id":101553},[14,108610,108611],{},"viewer 上下文：",[90,108613,108615],{"className":30359,"code":108614,"language":30361,"meta":21,"style":21},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[96,108616,108617],{"__ignoreMap":21},[99,108618,108619,108621,108623,108625],{"class":101,"line":102},[99,108620,107814],{"class":105},[99,108622,107817],{"class":109},[99,108624,31364],{"class":105},[99,108626,107822],{"class":109},[14,108628,108629,108631],{},[96,108630,107814],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108633,108634],{},"窗口循环：",[90,108636,108638],{"className":30359,"code":108637,"language":30361,"meta":21,"style":21},"while viewer.is_running() and data.time \u003C 5.0:\n",[96,108639,108640],{"__ignoreMap":21},[99,108641,108642,108645,108647,108649,108651,108653,108655],{"class":101,"line":102},[99,108643,108644],{"class":105},"while",[99,108646,108168],{"class":109},[99,108648,30443],{"class":105},[99,108650,108173],{"class":109},[99,108652,1020],{"class":105},[99,108654,108178],{"class":158},[99,108656,3725],{"class":109},[14,108658,108659],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108661,108662],{},"固定相机：",[90,108664,108666],{"className":53048,"code":108665,"language":53050,"meta":21,"style":21},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[96,108667,108668],{"__ignoreMap":21},[99,108669,108670,108672,108674,108676,108678,108680,108682,108684,108687,108690,108692,108695],{"class":101,"line":102},[99,108671,1020],{"class":109},[99,108673,108496],{"class":51281},[99,108675,14907],{"class":1949},[99,108677,155],{"class":109},[99,108679,108501],{"class":214},[99,108681,101087],{"class":1949},[99,108683,155],{"class":109},[99,108685,108686],{"class":214},"\"1.5 -2.0 1.2\"",[99,108688,108689],{"class":1949}," xyaxes",[99,108691,155],{"class":109},[99,108693,108694],{"class":214},"\"1 0.75 0 0 0 1\"",[99,108696,101125],{"class":109},[14,108698,108699],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[70,108701,108703],{"id":108702},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[90,108705,108707],{"className":30359,"code":108706,"language":30361,"meta":21,"style":21},"import time\n",[96,108708,108709],{"__ignoreMap":21},[99,108710,108711,108713],{"class":101,"line":102},[99,108712,30373],{"class":105},[99,108714,31810],{"class":109},[14,108716,108717],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[90,108719,108721],{"className":30359,"code":108720,"language":30361,"meta":21,"style":21},"import mujoco\nimport mujoco.viewer\n",[96,108722,108723,108729],{"__ignoreMap":21},[99,108724,108725,108727],{"class":101,"line":102},[99,108726,30373],{"class":105},[99,108728,101282],{"class":109},[99,108730,108731,108733],{"class":101,"line":22},[99,108732,30373],{"class":105},[99,108734,107533],{"class":109},[14,108736,108737],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[90,108739,108740],{"className":30359,"code":108614,"language":30361,"meta":21,"style":21},[96,108741,108742],{"__ignoreMap":21},[99,108743,108744,108746,108748,108750],{"class":101,"line":102},[99,108745,107814],{"class":105},[99,108747,107817],{"class":109},[99,108749,31364],{"class":105},[99,108751,107822],{"class":109},[14,108753,108754,108755,108758],{},"打开一个 viewer 窗口。",[96,108756,108757],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[90,108760,108761],{"className":30359,"code":108637,"language":30361,"meta":21,"style":21},[96,108762,108763],{"__ignoreMap":21},[99,108764,108765,108767,108769,108771,108773,108775,108777],{"class":101,"line":102},[99,108766,108644],{"class":105},[99,108768,108168],{"class":109},[99,108770,30443],{"class":105},[99,108772,108173],{"class":109},[99,108774,1020],{"class":105},[99,108776,108178],{"class":158},[99,108778,3725],{"class":109},[14,108780,108781,108782,108785],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[96,108783,108784],{},"viewer.is_running()"," 会变成 false，循环结束。",[90,108787,108789],{"className":30359,"code":108788,"language":30361,"meta":21,"style":21},"step_start = time.time()\n",[96,108790,108791],{"__ignoreMap":21},[99,108792,108793,108796,108798],{"class":101,"line":102},[99,108794,108795],{"class":109},"step_start ",[99,108797,155],{"class":105},[99,108799,108190],{"class":109},[14,108801,108802],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[90,108804,108805],{"className":30359,"code":107899,"language":30361,"meta":21,"style":21},[96,108806,108807,108811],{"__ignoreMap":21},[99,108808,108809],{"class":101,"line":102},[99,108810,104486],{"class":109},[99,108812,108813],{"class":101,"line":22},[99,108814,107910],{"class":109},[14,108816,108817,108819,108820,108822,108823,108825,108826,108829],{},[96,108818,101196],{}," 推进物理仿真。",[96,108821,107918],{}," 把最新的 ",[96,108824,33382],{}," 同步到窗口里显示。没有 ",[96,108827,108828],{},"sync()","，窗口可能看不到最新状态。",[90,108831,108832],{"className":30359,"code":107929,"language":30361,"meta":21,"style":21},[96,108833,108834],{"__ignoreMap":21},[99,108835,108836,108838,108840,108842,108844,108846,108848],{"class":101,"line":102},[99,108837,107936],{"class":109},[99,108839,155],{"class":105},[99,108841,107941],{"class":109},[99,108843,642],{"class":105},[99,108845,107946],{"class":109},[99,108847,642],{"class":105},[99,108849,107951],{"class":109},[14,108851,108852],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[90,108854,108856],{"className":30359,"code":108855,"language":30361,"meta":21,"style":21},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[96,108857,108858,108870],{"__ignoreMap":21},[99,108859,108860,108862,108864,108866,108868],{"class":101,"line":102},[99,108861,1517],{"class":105},[99,108863,108228],{"class":109},[99,108865,1070],{"class":105},[99,108867,4079],{"class":158},[99,108869,3725],{"class":109},[99,108871,108872],{"class":101,"line":22},[99,108873,108874],{"class":109},"    time.sleep(sleep_time)\n",[14,108876,108877],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[70,108879,108881],{"id":108880},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[90,108883,108885],{"className":30359,"code":108884,"language":30361,"meta":21,"style":21},"from pathlib import Path\n",[96,108886,108887],{"__ignoreMap":21},[99,108888,108889,108891,108893,108895],{"class":101,"line":102},[99,108890,30718],{"class":105},[99,108892,108292],{"class":109},[99,108894,30373],{"class":105},[99,108896,108297],{"class":109},[14,108898,108899,108900,108903,108904,108907],{},"导入 ",[96,108901,108902],{},"Path","，用来处理文件路径。相比直接写字符串，",[96,108905,108906],{},"Path(\"render_output.png\")"," 更清晰。",[90,108909,108911],{"className":30359,"code":108910,"language":30361,"meta":21,"style":21},"from PIL import Image\n",[96,108912,108913],{"__ignoreMap":21},[99,108914,108915,108917,108919,108921],{"class":101,"line":102},[99,108916,30718],{"class":105},[99,108918,47244],{"class":158},[99,108920,47247],{"class":105},[99,108922,47250],{"class":109},[14,108924,108925],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[90,108927,108928],{"className":53048,"code":108665,"language":53050,"meta":21,"style":21},[96,108929,108930],{"__ignoreMap":21},[99,108931,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954],{"class":101,"line":102},[99,108933,1020],{"class":109},[99,108935,108496],{"class":51281},[99,108937,14907],{"class":1949},[99,108939,155],{"class":109},[99,108941,108501],{"class":214},[99,108943,101087],{"class":1949},[99,108945,155],{"class":109},[99,108947,108686],{"class":214},[99,108949,108689],{"class":1949},[99,108951,155],{"class":109},[99,108953,108694],{"class":214},[99,108955,101125],{"class":109},[14,108957,108958,108959,108961,108962,108964,108965,108968,108969,108971],{},"定义一个相机。",[96,108960,79791],{}," 是相机名字。",[96,108963,104127],{}," 是相机在世界里的位置。",[96,108966,108967],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[96,108970,104127],{}," 来调视角。",[90,108973,108975],{"className":30359,"code":108974,"language":30361,"meta":21,"style":21},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[96,108976,108977],{"__ignoreMap":21},[99,108978,108979,108981,108983,108985,108987,108989,108991,108993,108995,108997,108999],{"class":101,"line":102},[99,108980,107551],{"class":109},[99,108982,155],{"class":105},[99,108984,107855],{"class":109},[99,108986,24970],{"class":5203},[99,108988,155],{"class":105},[99,108990,42323],{"class":158},[99,108992,12422],{"class":109},[99,108994,24966],{"class":5203},[99,108996,155],{"class":105},[99,108998,107870],{"class":158},[99,109000,116],{"class":109},[14,109002,109003,109004,100999,109006,109008],{},"创建离屏渲染器。",[96,109005,24970],{},[96,109007,24966],{}," 决定输出图片大小。",[90,109010,109011],{"className":30359,"code":101657,"language":30361,"meta":21,"style":21},[96,109012,109013,109029],{"__ignoreMap":21},[99,109014,109015,109017,109019,109021,109023,109025,109027],{"class":101,"line":102},[99,109016,3011],{"class":105},[99,109018,101482],{"class":109},[99,109020,26032],{"class":105},[99,109022,32424],{"class":158},[99,109024,110],{"class":109},[99,109026,421],{"class":158},[99,109028,30767],{"class":109},[99,109030,109031],{"class":101,"line":22},[99,109032,101680],{"class":109},[14,109034,109035],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[90,109037,109039],{"className":30359,"code":109038,"language":30361,"meta":21,"style":21},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[96,109040,109041],{"__ignoreMap":21},[99,109042,109043,109046,109048,109050,109052],{"class":101,"line":102},[99,109044,109045],{"class":109},"renderer.update_scene(data, ",[99,109047,108496],{"class":5203},[99,109049,155],{"class":105},[99,109051,108501],{"class":214},[99,109053,116],{"class":109},[14,109055,109056,109057,109059,109060,109063],{},"告诉 renderer：用当前 ",[96,109058,33382],{}," 的状态更新画面，并使用名为 ",[96,109061,109062],{},"fixed_camera"," 的相机视角。",[90,109065,109066],{"className":30359,"code":107961,"language":30361,"meta":21,"style":21},[96,109067,109068],{"__ignoreMap":21},[99,109069,109070,109072,109074],{"class":101,"line":102},[99,109071,107561],{"class":109},[99,109073,155],{"class":105},[99,109075,107566],{"class":109},[14,109077,109078,109079,109082],{},"真正渲染出图像。",[96,109080,109081],{},"image"," 是一个 NumPy 数组，不是文件。",[90,109084,109086],{"className":30359,"code":109085,"language":30361,"meta":21,"style":21},"Image.fromarray(image).save(output_path)\n",[96,109087,109088],{"__ignoreMap":21},[99,109089,109090],{"class":101,"line":102},[99,109091,109085],{"class":109},[14,109093,109094,109095,28366],{},"把数组转换成图片，并保存到 ",[96,109096,109097],{},"render_output.png",[90,109099,109101],{"className":30359,"code":109100,"language":30361,"meta":21,"style":21},"renderer.close()\n",[96,109102,109103],{"__ignoreMap":21},[99,109104,109105],{"class":101,"line":102},[99,109106,109100],{"class":109},[14,109108,109109],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[41,109111,102297],{"id":102296},[14,109113,109114,109115,109117,109118,28366],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[96,109116,109097],{},"，并输出图像数组形状，例如 ",[96,109119,109120],{},"(480, 640, 3)",[14,109122,109123],{},"如果图片里看不到方块，先检查：",[53,109125,109126,109129,109132],{},[56,109127,109128],{},"方块是否掉到相机视野外。",[56,109130,109131],{},"camera 位置是否合理。",[56,109133,109134,109135,109138],{},"是否在 ",[96,109136,109137],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[41,109140,102329],{"id":102328},[14,109142,109143],{},"运行 viewer:",[90,109145,109147],{"className":23810,"code":109146,"language":23812,"meta":21,"style":21},"python ch5_viewer.py\n",[96,109148,109149],{"__ignoreMap":21},[99,109150,109151,109153],{"class":101,"line":102},[99,109152,30361],{"class":1949},[99,109154,108277],{"class":214},[14,109156,109157],{},"运行 renderer:",[90,109159,109161],{"className":23810,"code":109160,"language":23812,"meta":21,"style":21},"python ch5_renderer.py\n",[96,109162,109163],{"__ignoreMap":21},[99,109164,109165,109167],{"class":101,"line":102},[99,109166,30361],{"class":1949},[99,109168,108606],{"class":214},[14,109170,109171],{},"如果在服务器上运行:",[90,109173,109175],{"className":23810,"code":109174,"language":23812,"meta":21,"style":21},"MUJOCO_GL=egl python ch5_renderer.py\n",[96,109176,109177],{"__ignoreMap":21},[99,109178,109179,109181,109183,109185,109188],{"class":101,"line":102},[99,109180,107795],{"class":109},[99,109182,155],{"class":105},[99,109184,107785],{"class":214},[99,109186,109187],{"class":1949}," python",[99,109189,108606],{"class":214},[14,109191,107763],{},[90,109193,109195],{"className":23810,"code":109194,"language":23812,"meta":21,"style":21},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[96,109196,109197],{"__ignoreMap":21},[99,109198,109199,109201,109203,109205,109207],{"class":101,"line":102},[99,109200,107795],{"class":109},[99,109202,155],{"class":105},[99,109204,107789],{"class":214},[99,109206,109187],{"class":1949},[99,109208,108606],{"class":214},[14,109210,109211],{},"再做几个练习：",[53,109213,109214,109221,109224,109230],{},[56,109215,109216,109217,109220],{},"把 renderer 分辨率改成 ",[96,109218,109219],{},"height=240, width=320","，观察输出 shape。",[56,109222,109223],{},"把方块颜色改成蓝色，重新保存图片。",[56,109225,109226,109227,109229],{},"把相机 ",[96,109228,104127],{}," 改远一点，观察画面中物体是否变小。",[56,109231,109232,109233,102395,109236,109239],{},"把 viewer 示例中的 ",[96,109234,109235],{},"data.time \u003C 5.0",[96,109237,109238],{},"data.time \u003C 20.0","，观察更长时间。",[41,109241,102434],{"id":102433},[70,109243,109245],{"id":109244},"viewer-窗口打不开","viewer 窗口打不开",[14,109247,109248],{},"安装:",[90,109250,109252],{"className":23810,"code":109251,"language":23812,"meta":21,"style":21},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[96,109253,109254],{"__ignoreMap":21},[99,109255,109256,109258,109260,109262,109264,109266,109268,109270,109272,109274,109276],{"class":101,"line":102},[99,109257,24565],{"class":1949},[99,109259,26304],{"class":214},[99,109261,23822],{"class":214},[99,109263,26389],{"class":158},[99,109265,102487],{"class":214},[99,109267,100815],{"class":214},[99,109269,102492],{"class":214},[99,109271,100828],{"class":214},[99,109273,100834],{"class":214},[99,109275,100825],{"class":214},[99,109277,109278],{"class":214}," libXinerama\n",[70,109280,109282],{"id":109281},"glfwerror",[96,109283,109284],{},"GLFWError",[14,109286,109287],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[70,109289,109291],{"id":109290},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109293,109294,109295,82520,109297,109299],{},"尝试 ",[96,109296,101018],{},[96,109298,101021],{},"。可能存在版本差异。",[70,109301,109302],{"id":109302},"保存图片是黑的",[14,109304,102556],{},[53,109306,109307,109310,109313,109323],{},[56,109308,109309],{},"XML 里是否有 light。",[56,109311,109312],{},"相机是否对着模型。",[56,109314,109315,109316,109319,109320,28366],{},"是否先 ",[96,109317,109318],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[96,109321,109322],{},"renderer.render()",[56,109324,109325],{},"物体是否已经掉出视野。",[70,109327,109328],{"id":109328},"远程服务器没有显示器",[14,109330,109331],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[90,109333,109334],{"className":23810,"code":109174,"language":23812,"meta":21,"style":21},[96,109335,109336],{"__ignoreMap":21},[99,109337,109338,109340,109342,109344,109346],{"class":101,"line":102},[99,109339,107795],{"class":109},[99,109341,155],{"class":105},[99,109343,107785],{"class":214},[99,109345,109187],{"class":1949},[99,109347,108606],{"class":214},[14,109349,109350],{},"如果 EGL 不可用，再尝试：",[90,109352,109353],{"className":23810,"code":109194,"language":23812,"meta":21,"style":21},[96,109354,109355],{"__ignoreMap":21},[99,109356,109357,109359,109361,109363,109365],{"class":101,"line":102},[99,109358,107795],{"class":109},[99,109360,155],{"class":105},[99,109362,107789],{"class":214},[99,109364,109187],{"class":1949},[99,109366,108606],{"class":214},[41,109368,102588],{"id":102587},[14,109370,109371],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[53,109373,109374,109377,109380],{},[56,109375,109376],{},"先用 viewer 看模型和控制是否正常。",[56,109378,109379],{},"再用 renderer 保存图片或构造视觉观测。",[56,109381,109382],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5113,109384,109385],{},"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":21,"searchDepth":22,"depth":22,"links":109387},[109388,109389,109390,109395,109400,109401,109402,109409],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":109391},[109392,109393,109394],{"id":107892,"depth":1165,"text":107893},{"id":107922,"depth":1165,"text":107923},{"id":107957,"depth":1165,"text":107958},{"id":101233,"depth":22,"text":101234,"children":109396},[109397,109398,109399],{"id":101553,"depth":1165,"text":101553},{"id":108702,"depth":1165,"text":108703},{"id":108880,"depth":1165,"text":108881},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":109403},[109404,109405,109406,109407,109408],{"id":109244,"depth":1165,"text":109245},{"id":109281,"depth":1165,"text":109284},{"id":109290,"depth":1165,"text":109291},{"id":109302,"depth":1165,"text":109302},{"id":109328,"depth":1165,"text":109328},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107500,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109416,"title":109417,"body":109418,"description":21,"extension":24,"meta":111329,"navigation":26,"path":111330,"seo":111331,"stem":111332,"__hash__":111333},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109419,"toc":111305},[109420,109423,109425,109428,109430,109449,109452,109458,109461,109463,109465,109489,109491,109505,109507,109548,109550,109561,109563,109566,109572,109575,109609,109612,109644,109647,109679,109683,109686,109726,109729,109735,109738,109744,109748,109751,109757,109760,109764,109767,109807,109809,109822,109825,109827,110409,110411,110423,110426,110437,110439,110442,110461,110473,110476,110497,110500,110503,110546,110549,110552,110572,110579,110581,110599,110614,110617,110623,110626,110632,110649,110656,110687,110698,110732,110743,110760,110769,110777,110782,110796,110799,110820,110826,110840,110845,110875,110885,110910,110918,110941,110944,110960,110963,110971,110977,110999,111012,111033,111042,111081,111092,111094,111097,111103,111106,111109,111115,111118,111138,111141,111143,111182,111184,111187,111195,111198,111201,111228,111231,111241,111247,111250,111256,111258,111264,111268,111271,111273,111276,111300,111303],[10,109421,109417],{"id":109422},"_6控制任务cartpole",[41,109424,100628],{"id":100627},[14,109426,109427],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109429,104312],{},[53,109431,109432,109435,109437,109440,109443,109446],{},[56,109433,109434],{},"slide joint",[56,109436,106165],{},[56,109438,109439],{},"cart force actuator",[56,109441,109442],{},"状态观测",[56,109444,109445],{},"简单控制循环",[56,109447,109448],{},"reward 设计雏形",[14,109450,109451],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[90,109453,109456],{"className":109454,"code":109455,"language":5174,"meta":21},[5172],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[96,109457,109455],{"__ignoreMap":21},[14,109459,109460],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[41,109462,100751],{"id":100750},[14,109464,100754],{},[90,109466,109467],{"className":23810,"code":104369,"language":23812,"meta":21,"style":21},[96,109468,109469],{"__ignoreMap":21},[99,109470,109471,109473,109475,109477,109479,109481,109483,109485,109487],{"class":101,"line":102},[99,109472,24565],{"class":1949},[99,109474,26304],{"class":214},[99,109476,23822],{"class":214},[99,109478,26389],{"class":158},[99,109480,104384],{"class":214},[99,109482,100779],{"class":214},[99,109484,102482],{"class":214},[99,109486,100795],{"class":214},[99,109488,104393],{"class":214},[14,109490,102800],{},[90,109492,109493],{"className":23810,"code":100900,"language":23812,"meta":21,"style":21},[96,109494,109495],{"__ignoreMap":21},[99,109496,109497,109499,109501,109503],{"class":101,"line":102},[99,109498,23819],{"class":1949},[99,109500,23822],{"class":214},[99,109502,100911],{"class":214},[99,109504,100914],{"class":214},[14,109506,102817],{},[90,109508,109510],{"className":23810,"code":109509,"language":23812,"meta":21,"style":21},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[96,109511,109512,109529,109538],{"__ignoreMap":21},[99,109513,109514,109516,109518,109520,109523,109525,109527],{"class":101,"line":102},[99,109515,30311],{"class":1949},[99,109517,29157],{"class":214},[99,109519,25104],{"class":158},[99,109521,109522],{"class":214}," mujoco-cartpole",[99,109524,100956],{"class":214},[99,109526,100959],{"class":158},[99,109528,100962],{"class":158},[99,109530,109531,109533,109535],{"class":101,"line":22},[99,109532,30311],{"class":1949},[99,109534,100969],{"class":214},[99,109536,109537],{"class":214}," mujoco-cartpole\n",[99,109539,109540,109542,109544,109546],{"class":101,"line":1165},[99,109541,23819],{"class":1949},[99,109543,23822],{"class":214},[99,109545,100911],{"class":214},[99,109547,100914],{"class":214},[14,109549,100985],{},[53,109551,109552,109555,109558],{},[56,109553,109554],{},"本章不依赖 Gymnasium。",[56,109556,109557],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[56,109559,109560],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[41,109562,101026],{"id":101025},[14,109564,109565],{},"Cartpole 的模型结构:",[90,109567,109570],{"className":109568,"code":109569,"language":5174,"meta":21},[5172],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[96,109571,109569],{"__ignoreMap":21},[14,109573,109574],{},"小车通过 slide joint 左右移动:",[90,109576,109578],{"className":53048,"code":109577,"language":53050,"meta":21,"style":21},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[96,109579,109580],{"__ignoreMap":21},[99,109581,109582,109584,109586,109588,109590,109593,109595,109597,109600,109602,109604,109607],{"class":101,"line":102},[99,109583,1020],{"class":109},[99,109585,102937],{"class":51281},[99,109587,14907],{"class":1949},[99,109589,155],{"class":109},[99,109591,109592],{"class":214},"\"cart_x\"",[99,109594,53805],{"class":1949},[99,109596,155],{"class":109},[99,109598,109599],{"class":214},"\"slide\"",[99,109601,106009],{"class":1949},[99,109603,155],{"class":109},[99,109605,109606],{"class":214},"\"1 0 0\"",[99,109608,101125],{"class":109},[14,109610,109611],{},"杆子通过 hinge joint 旋转:",[90,109613,109615],{"className":53048,"code":109614,"language":53050,"meta":21,"style":21},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[96,109616,109617],{"__ignoreMap":21},[99,109618,109619,109621,109623,109625,109627,109630,109632,109634,109636,109638,109640,109642],{"class":101,"line":102},[99,109620,1020],{"class":109},[99,109622,102937],{"class":51281},[99,109624,14907],{"class":1949},[99,109626,155],{"class":109},[99,109628,109629],{"class":214},"\"pole_hinge\"",[99,109631,53805],{"class":1949},[99,109633,155],{"class":109},[99,109635,106000],{"class":214},[99,109637,106009],{"class":1949},[99,109639,155],{"class":109},[99,109641,106014],{"class":214},[99,109643,101125],{"class":109},[14,109645,109646],{},"控制力作用在小车 slide joint 上:",[90,109648,109650],{"className":53048,"code":109649,"language":53050,"meta":21,"style":21},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[96,109651,109652],{"__ignoreMap":21},[99,109653,109654,109656,109658,109660,109662,109665,109667,109669,109671,109673,109675,109677],{"class":101,"line":102},[99,109655,1020],{"class":109},[99,109657,106055],{"class":51281},[99,109659,14907],{"class":1949},[99,109661,155],{"class":109},[99,109663,109664],{"class":214},"\"cart_motor\"",[99,109666,106065],{"class":1949},[99,109668,155],{"class":109},[99,109670,109592],{"class":214},[99,109672,106072],{"class":1949},[99,109674,155],{"class":109},[99,109676,54297],{"class":214},[99,109678,101125],{"class":109},[70,109680,109682],{"id":109681},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109684,109685],{},"这个简化模型有两个关节：",[247,109687,109688,109699],{},[250,109689,109690],{},[253,109691,109692,109694,109696],{},[256,109693,102740],{"align":23724},[256,109695,23725],{"align":23724},[256,109697,109698],{"align":23724},"对应状态",[294,109700,109701,109714],{},[253,109702,109703,109708,109711],{},[299,109704,109705],{"align":23724},[96,109706,109707],{},"cart_x",[299,109709,109710],{"align":23724},"slide",[299,109712,109713],{"align":23724},"小车 x 位置",[253,109715,109716,109721,109723],{},[299,109717,109718],{"align":23724},[96,109719,109720],{},"pole_hinge",[299,109722,105821],{"align":23724},[299,109724,109725],{"align":23724},"杆子角度",[14,109727,109728],{},"所以：",[90,109730,109733],{"className":109731,"code":109732,"language":5174,"meta":21},[5172],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[96,109734,109732],{"__ignoreMap":21},[14,109736,109737],{},"把它们拼起来就是观测：",[90,109739,109742],{"className":109740,"code":109741,"language":5174,"meta":21},[5172],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[96,109743,109741],{"__ignoreMap":21},[70,109745,109747],{"id":109746},"action-是什么","action 是什么",[14,109749,109750],{},"本章只有一个 actuator：",[90,109752,109755],{"className":109753,"code":109754,"language":5174,"meta":21},[5172],"data.ctrl[0] = action\n",[96,109756,109754],{"__ignoreMap":21},[14,109758,109759],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[70,109761,109763],{"id":109762},"reward-是什么","reward 是什么",[14,109765,109766],{},"奖励函数：",[90,109768,109770],{"className":30359,"code":109769,"language":30361,"meta":21,"style":21},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[96,109771,109772],{"__ignoreMap":21},[99,109773,109774,109776,109779,109781,109783,109785,109788,109790,109793,109795,109797,109799,109802,109804],{"class":101,"line":102},[99,109775,17033],{"class":105},[99,109777,109778],{"class":158}," float",[99,109780,110],{"class":109},[99,109782,102384],{"class":158},[99,109784,52252],{"class":105},[99,109786,109787],{"class":158}," 0.1",[99,109789,6505],{"class":105},[99,109791,109792],{"class":109}," cart_x ",[99,109794,565],{"class":105},[99,109796,109792],{"class":109},[99,109798,642],{"class":105},[99,109800,109801],{"class":109}," pole_angle ",[99,109803,565],{"class":105},[99,109805,109806],{"class":109}," pole_angle)\n",[14,109808,106207],{},[53,109810,109811,109816,109819],{},[56,109812,109813,109814,28366],{},"基础奖励是 ",[96,109815,102384],{},[56,109817,109818],{},"小车离中心越远，扣分越多。",[56,109820,109821],{},"杆子角度越大，扣分越多。",[14,109823,109824],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[41,109826,101234],{"id":101233},[90,109828,109830],{"className":30359,"code":109829,"language":30361,"meta":21,"style":21},"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",[96,109831,109832,109838,109848,109852,109856,109864,109869,109873,109877,109881,109886,109890,109895,109900,109905,109909,109914,109919,109924,109928,109932,109936,109940,109944,109949,109953,109957,109961,109965,109969,109979,109986,109990,109994,110008,110022,110035,110065,110069,110073,110085,110097,110105,110109,110122,110126,110130,110139,110143,110159,110169,110182,110195,110199,110222,110240,110244,110256,110260,110264,110274,110284,110288,110304,110345,110349,110369,110385,110389,110393,110405],{"__ignoreMap":21},[99,109833,109834,109836],{"class":101,"line":102},[99,109835,30373],{"class":105},[99,109837,101282],{"class":109},[99,109839,109840,109842,109844,109846],{"class":101,"line":22},[99,109841,30373],{"class":105},[99,109843,31361],{"class":109},[99,109845,31364],{"class":105},[99,109847,31367],{"class":109},[99,109849,109850],{"class":101,"line":1165},[99,109851,2386],{"emptyLinePlaceholder":26},[99,109853,109854],{"class":101,"line":1180},[99,109855,2386],{"emptyLinePlaceholder":26},[99,109857,109858,109860,109862],{"class":101,"line":1186},[99,109859,101295],{"class":158},[99,109861,13551],{"class":105},[99,109863,101300],{"class":214},[99,109865,109866],{"class":101,"line":1200},[99,109867,109868],{"class":214},"\u003Cmujoco model=\"cartpole\">\n",[99,109870,109871],{"class":101,"line":1206},[99,109872,101310],{"class":214},[99,109874,109875],{"class":101,"line":1297},[99,109876,2386],{"emptyLinePlaceholder":26},[99,109878,109879],{"class":101,"line":1303},[99,109880,101319],{"class":214},[99,109882,109883],{"class":101,"line":1315},[99,109884,109885],{"class":214},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[99,109887,109888],{"class":101,"line":1598},[99,109889,2386],{"emptyLinePlaceholder":26},[99,109891,109892],{"class":101,"line":1603},[99,109893,109894],{"class":214},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[99,109896,109897],{"class":101,"line":1609},[99,109898,109899],{"class":214},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[99,109901,109902],{"class":101,"line":1614},[99,109903,109904],{"class":214},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[99,109906,109907],{"class":101,"line":1628},[99,109908,2386],{"emptyLinePlaceholder":26},[99,109910,109911],{"class":101,"line":1633},[99,109912,109913],{"class":214},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[99,109915,109916],{"class":101,"line":1639},[99,109917,109918],{"class":214},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[99,109920,109921],{"class":101,"line":1660},[99,109922,109923],{"class":214},"        \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",[99,109925,109926],{"class":101,"line":1665},[99,109927,106419],{"class":214},[99,109929,109930],{"class":101,"line":1679},[99,109931,101348],{"class":214},[99,109933,109934],{"class":101,"line":1684},[99,109935,101353],{"class":214},[99,109937,109938],{"class":101,"line":1713},[99,109939,2386],{"emptyLinePlaceholder":26},[99,109941,109942],{"class":101,"line":1718},[99,109943,106436],{"class":214},[99,109945,109946],{"class":101,"line":1735},[99,109947,109948],{"class":214},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[99,109950,109951],{"class":101,"line":1740},[99,109952,106446],{"class":214},[99,109954,109955],{"class":101,"line":1745},[99,109956,101358],{"class":214},[99,109958,109959],{"class":101,"line":1750},[99,109960,95679],{"class":214},[99,109962,109963],{"class":101,"line":1764},[99,109964,2386],{"emptyLinePlaceholder":26},[99,109966,109967],{"class":101,"line":1769},[99,109968,2386],{"emptyLinePlaceholder":26},[99,109970,109971,109973,109976],{"class":101,"line":2563},[99,109972,31928],{"class":105},[99,109974,109975],{"class":1949}," get_observation",[99,109977,109978],{"class":109},"(data: mujoco.MjData) -> np.ndarray:\n",[99,109980,109981,109983],{"class":101,"line":2577},[99,109982,4076],{"class":105},[99,109984,109985],{"class":109}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[99,109987,109988],{"class":101,"line":2585},[99,109989,2386],{"emptyLinePlaceholder":26},[99,109991,109992],{"class":101,"line":2590},[99,109993,2386],{"emptyLinePlaceholder":26},[99,109995,109996,109998,110001,110004,110006],{"class":101,"line":2596},[99,109997,31928],{"class":105},[99,109999,110000],{"class":1949}," compute_reward",[99,110002,110003],{"class":109},"(obs: np.ndarray) -> ",[99,110005,149],{"class":158},[99,110007,3725],{"class":109},[99,110009,110010,110013,110015,110018,110020],{"class":101,"line":2602},[99,110011,110012],{"class":109},"    cart_x ",[99,110014,155],{"class":105},[99,110016,110017],{"class":109}," obs[",[99,110019,301],{"class":158},[99,110021,33227],{"class":109},[99,110023,110024,110027,110029,110031,110033],{"class":101,"line":2607},[99,110025,110026],{"class":109},"    pole_angle ",[99,110028,155],{"class":105},[99,110030,110017],{"class":109},[99,110032,327],{"class":158},[99,110034,33227],{"class":109},[99,110036,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059,110061,110063],{"class":101,"line":7935},[99,110038,4076],{"class":105},[99,110040,109778],{"class":158},[99,110042,110],{"class":109},[99,110044,102384],{"class":158},[99,110046,52252],{"class":105},[99,110048,109787],{"class":158},[99,110050,6505],{"class":105},[99,110052,109792],{"class":109},[99,110054,565],{"class":105},[99,110056,109792],{"class":109},[99,110058,642],{"class":105},[99,110060,109801],{"class":109},[99,110062,565],{"class":105},[99,110064,109806],{"class":109},[99,110066,110067],{"class":101,"line":7959},[99,110068,2386],{"emptyLinePlaceholder":26},[99,110070,110071],{"class":101,"line":7964},[99,110072,2386],{"emptyLinePlaceholder":26},[99,110074,110075,110077,110079,110081,110083],{"class":101,"line":7970},[99,110076,31928],{"class":105},[99,110078,1959],{"class":1949},[99,110080,101379],{"class":109},[99,110082,95667],{"class":158},[99,110084,3725],{"class":109},[99,110086,110087,110089,110091,110093,110095],{"class":101,"line":7997},[99,110088,101388],{"class":109},[99,110090,155],{"class":105},[99,110092,101393],{"class":109},[99,110094,101295],{"class":158},[99,110096,116],{"class":109},[99,110098,110099,110101,110103],{"class":101,"line":8002},[99,110100,101402],{"class":109},[99,110102,155],{"class":105},[99,110104,101407],{"class":109},[99,110106,110107],{"class":101,"line":8008},[99,110108,2386],{"emptyLinePlaceholder":26},[99,110110,110111,110113,110115,110117,110119],{"class":101,"line":8020},[99,110112,105050],{"class":109},[99,110114,327],{"class":158},[99,110116,4429],{"class":109},[99,110118,155],{"class":105},[99,110120,110121],{"class":158}," 0.1\n",[99,110123,110124],{"class":101,"line":8032},[99,110125,105063],{"class":109},[99,110127,110128],{"class":101,"line":8044},[99,110129,2386],{"emptyLinePlaceholder":26},[99,110131,110132,110135,110137],{"class":101,"line":9703},[99,110133,110134],{"class":109},"    total_reward ",[99,110136,155],{"class":105},[99,110138,104742],{"class":158},[99,110140,110141],{"class":101,"line":9728},[99,110142,2386],{"emptyLinePlaceholder":26},[99,110144,110145,110147,110149,110151,110153,110155,110157],{"class":101,"line":9751},[99,110146,3187],{"class":105},[99,110148,31597],{"class":109},[99,110150,26032],{"class":105},[99,110152,32424],{"class":158},[99,110154,110],{"class":109},[99,110156,6397],{"class":158},[99,110158,30767],{"class":109},[99,110160,110161,110164,110166],{"class":101,"line":9775},[99,110162,110163],{"class":109},"        obs ",[99,110165,155],{"class":105},[99,110167,110168],{"class":109}," get_observation(data)\n",[99,110170,110171,110174,110176,110178,110180],{"class":101,"line":9780},[99,110172,110173],{"class":109},"        pole_angle ",[99,110175,155],{"class":105},[99,110177,110017],{"class":109},[99,110179,327],{"class":158},[99,110181,33227],{"class":109},[99,110183,110184,110187,110189,110191,110193],{"class":101,"line":9785},[99,110185,110186],{"class":109},"        pole_angular_velocity ",[99,110188,155],{"class":105},[99,110190,110017],{"class":109},[99,110192,181],{"class":158},[99,110194,33227],{"class":109},[99,110196,110197],{"class":101,"line":9790},[99,110198,2386],{"emptyLinePlaceholder":26},[99,110200,110201,110204,110206,110209,110211,110213,110215,110217,110219],{"class":101,"line":9799},[99,110202,110203],{"class":109},"        action ",[99,110205,155],{"class":105},[99,110207,110208],{"class":158}," 2.0",[99,110210,6505],{"class":105},[99,110212,109801],{"class":109},[99,110214,591],{"class":105},[99,110216,61848],{"class":158},[99,110218,6505],{"class":105},[99,110220,110221],{"class":109}," pole_angular_velocity\n",[99,110223,110224,110226,110228,110230,110232,110234,110236,110238],{"class":101,"line":9804},[99,110225,110203],{"class":109},[99,110227,155],{"class":105},[99,110229,107428],{"class":109},[99,110231,642],{"class":105},[99,110233,102384],{"class":158},[99,110235,12422],{"class":109},[99,110237,102384],{"class":158},[99,110239,116],{"class":109},[99,110241,110242],{"class":101,"line":9810},[99,110243,2386],{"emptyLinePlaceholder":26},[99,110245,110246,110248,110250,110252,110254],{"class":101,"line":9831},[99,110247,106598],{"class":109},[99,110249,301],{"class":158},[99,110251,4429],{"class":109},[99,110253,155],{"class":105},[99,110255,107451],{"class":109},[99,110257,110258],{"class":101,"line":9837},[99,110259,101497],{"class":109},[99,110261,110262],{"class":101,"line":9851},[99,110263,2386],{"emptyLinePlaceholder":26},[99,110265,110266,110269,110271],{"class":101,"line":9857},[99,110267,110268],{"class":109},"        reward ",[99,110270,155],{"class":105},[99,110272,110273],{"class":109}," compute_reward(get_observation(data))\n",[99,110275,110276,110279,110281],{"class":101,"line":9884},[99,110277,110278],{"class":109},"        total_reward ",[99,110280,9464],{"class":105},[99,110282,110283],{"class":109}," reward\n",[99,110285,110286],{"class":101,"line":9893},[99,110287,2386],{"emptyLinePlaceholder":26},[99,110289,110290,110292,110294,110296,110298,110300,110302],{"class":101,"line":9899},[99,110291,2483],{"class":105},[99,110293,31597],{"class":109},[99,110295,438],{"class":105},[99,110297,5741],{"class":158},[99,110299,101540],{"class":105},[99,110301,4079],{"class":158},[99,110303,3725],{"class":109},[99,110305,110306,110308,110310,110313,110316,110319,110322,110324,110327,110330,110332,110334,110336,110338,110341,110343],{"class":101,"line":9907},[99,110307,34631],{"class":158},[99,110309,110],{"class":109},[99,110311,110312],{"class":214},"\"step:\"",[99,110314,110315],{"class":109},", step, ",[99,110317,110318],{"class":214},"\"obs:\"",[99,110320,110321],{"class":109},", np.round(obs, ",[99,110323,181],{"class":158},[99,110325,110326],{"class":109},"), ",[99,110328,110329],{"class":214},"\"action:\"",[99,110331,12422],{"class":109},[99,110333,31999],{"class":158},[99,110335,110],{"class":109},[99,110337,149],{"class":158},[99,110339,110340],{"class":109},"(action), ",[99,110342,181],{"class":158},[99,110344,30478],{"class":109},[99,110346,110347],{"class":101,"line":9912},[99,110348,2386],{"emptyLinePlaceholder":26},[99,110350,110351,110353,110355,110358,110360,110362,110365,110367],{"class":101,"line":16591},[99,110352,31280],{"class":158},[99,110354,110],{"class":109},[99,110356,110357],{"class":214},"\"total_reward:\"",[99,110359,12422],{"class":109},[99,110361,31999],{"class":158},[99,110363,110364],{"class":109},"(total_reward, ",[99,110366,181],{"class":158},[99,110368,30478],{"class":109},[99,110370,110371,110373,110375,110378,110381,110383],{"class":101,"line":16597},[99,110372,31280],{"class":158},[99,110374,110],{"class":109},[99,110376,110377],{"class":214},"\"final obs:\"",[99,110379,110380],{"class":109},", np.round(get_observation(data), ",[99,110382,181],{"class":158},[99,110384,30478],{"class":109},[99,110386,110387],{"class":101,"line":16620},[99,110388,2386],{"emptyLinePlaceholder":26},[99,110390,110391],{"class":101,"line":16626},[99,110392,2386],{"emptyLinePlaceholder":26},[99,110394,110395,110397,110399,110401,110403],{"class":101,"line":16649},[99,110396,1517],{"class":105},[99,110398,31201],{"class":158},[99,110400,101540],{"class":105},[99,110402,101543],{"class":214},[99,110404,3725],{"class":109},[99,110406,110407],{"class":101,"line":16663},[99,110408,101550],{"class":109},[14,110410,103551],{},[90,110412,110414],{"className":23810,"code":110413,"language":23812,"meta":21,"style":21},"touch ch6_cartpole.py\n",[96,110415,110416],{"__ignoreMap":21},[99,110417,110418,110420],{"class":101,"line":102},[99,110419,101264],{"class":1949},[99,110421,110422],{"class":214}," ch6_cartpole.py\n",[14,110424,110425],{},"运行：",[90,110427,110429],{"className":23810,"code":110428,"language":23812,"meta":21,"style":21},"python ch6_cartpole.py\n",[96,110430,110431],{"__ignoreMap":21},[99,110432,110433,110435],{"class":101,"line":102},[99,110434,30361],{"class":1949},[99,110436,110422],{"class":214},[70,110438,101553],{"id":101553},[14,110440,110441],{},"构造观测：",[90,110443,110445],{"className":30359,"code":110444,"language":30361,"meta":21,"style":21},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[96,110446,110447,110455],{"__ignoreMap":21},[99,110448,110449,110451,110453],{"class":101,"line":102},[99,110450,31928],{"class":105},[99,110452,109975],{"class":1949},[99,110454,109978],{"class":109},[99,110456,110457,110459],{"class":101,"line":22},[99,110458,4076],{"class":105},[99,110460,109985],{"class":109},[14,110462,110463,110466,110467,110469,110470,110472],{},[96,110464,110465],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[96,110468,104011],{}," 2 维，",[96,110471,104341],{}," 2 维，所以 obs 是 4 维。",[14,110474,110475],{},"设置初始角度：",[90,110477,110479],{"className":30359,"code":110478,"language":30361,"meta":21,"style":21},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[96,110480,110481,110493],{"__ignoreMap":21},[99,110482,110483,110485,110487,110489,110491],{"class":101,"line":102},[99,110484,104680],{"class":109},[99,110486,327],{"class":158},[99,110488,4429],{"class":109},[99,110490,155],{"class":105},[99,110492,110121],{"class":158},[99,110494,110495],{"class":101,"line":22},[99,110496,104524],{"class":109},[14,110498,110499],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110501,110502],{},"简单反馈控制：",[90,110504,110506],{"className":30359,"code":110505,"language":30361,"meta":21,"style":21},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[96,110507,110508,110528],{"__ignoreMap":21},[99,110509,110510,110512,110514,110516,110518,110520,110522,110524,110526],{"class":101,"line":102},[99,110511,107423],{"class":109},[99,110513,155],{"class":105},[99,110515,110208],{"class":158},[99,110517,6505],{"class":105},[99,110519,109801],{"class":109},[99,110521,591],{"class":105},[99,110523,61848],{"class":158},[99,110525,6505],{"class":105},[99,110527,110221],{"class":109},[99,110529,110530,110532,110534,110536,110538,110540,110542,110544],{"class":101,"line":22},[99,110531,107423],{"class":109},[99,110533,155],{"class":105},[99,110535,107428],{"class":109},[99,110537,642],{"class":105},[99,110539,102384],{"class":158},[99,110541,12422],{"class":109},[99,110543,102384],{"class":158},[99,110545,116],{"class":109},[14,110547,110548],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110550,110551],{},"限制动作：",[90,110553,110555],{"className":30359,"code":110554,"language":30361,"meta":21,"style":21},"np.clip(action, -1.0, 1.0)\n",[96,110556,110557],{"__ignoreMap":21},[99,110558,110559,110562,110564,110566,110568,110570],{"class":101,"line":102},[99,110560,110561],{"class":109},"np.clip(action, ",[99,110563,642],{"class":105},[99,110565,102384],{"class":158},[99,110567,12422],{"class":109},[99,110569,102384],{"class":158},[99,110571,116],{"class":109},[14,110573,110574,110575,110578],{},"因为 XML 里 ",[96,110576,110577],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[70,110580,101689],{"id":101689},[90,110582,110583],{"className":30359,"code":110444,"language":30361,"meta":21,"style":21},[96,110584,110585,110593],{"__ignoreMap":21},[99,110586,110587,110589,110591],{"class":101,"line":102},[99,110588,31928],{"class":105},[99,110590,109975],{"class":1949},[99,110592,109978],{"class":109},[99,110594,110595,110597],{"class":101,"line":22},[99,110596,4076],{"class":105},[99,110598,109985],{"class":109},[14,110600,110601,110602,110605,110606,110609,110610,110613],{},"这段定义了一个函数，用来获取当前观测。",[96,110603,110604],{},"data.qpos.copy()"," 是位置数组副本，",[96,110607,110608],{},"data.qvel.copy()"," 是速度数组副本。",[96,110611,110612],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110615,110616],{},"在本章模型里：",[90,110618,110621],{"className":110619,"code":110620,"language":5174,"meta":21},[5172],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[96,110622,110620],{"__ignoreMap":21},[14,110624,110625],{},"所以返回的 obs 是：",[90,110627,110630],{"className":110628,"code":110629,"language":5174,"meta":21},[5172],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[96,110631,110629],{"__ignoreMap":21},[90,110633,110635],{"className":30359,"code":110634,"language":30361,"meta":21,"style":21},"def compute_reward(obs: np.ndarray) -> float:\n",[96,110636,110637],{"__ignoreMap":21},[99,110638,110639,110641,110643,110645,110647],{"class":101,"line":102},[99,110640,31928],{"class":105},[99,110642,110000],{"class":1949},[99,110644,110003],{"class":109},[99,110646,149],{"class":158},[99,110648,3725],{"class":109},[14,110650,110651,110652,110655],{},"这行定义奖励函数。输入是观测 ",[96,110653,110654],{},"obs","，输出是一个浮点数奖励。",[90,110657,110659],{"className":30359,"code":110658,"language":30361,"meta":21,"style":21},"cart_x = obs[0]\npole_angle = obs[1]\n",[96,110660,110661,110674],{"__ignoreMap":21},[99,110662,110663,110666,110668,110670,110672],{"class":101,"line":102},[99,110664,110665],{"class":109},"cart_x ",[99,110667,155],{"class":105},[99,110669,110017],{"class":109},[99,110671,301],{"class":158},[99,110673,33227],{"class":109},[99,110675,110676,110679,110681,110683,110685],{"class":101,"line":22},[99,110677,110678],{"class":109},"pole_angle ",[99,110680,155],{"class":105},[99,110682,110017],{"class":109},[99,110684,327],{"class":158},[99,110686,33227],{"class":109},[14,110688,110689,110690,110693,110694,110697],{},"数组索引从 0 开始。",[96,110691,110692],{},"obs[0]"," 是第一个元素，也就是小车位置。",[96,110695,110696],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[90,110699,110700],{"className":30359,"code":109769,"language":30361,"meta":21,"style":21},[96,110701,110702],{"__ignoreMap":21},[99,110703,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726,110728,110730],{"class":101,"line":102},[99,110705,17033],{"class":105},[99,110707,109778],{"class":158},[99,110709,110],{"class":109},[99,110711,102384],{"class":158},[99,110713,52252],{"class":105},[99,110715,109787],{"class":158},[99,110717,6505],{"class":105},[99,110719,109792],{"class":109},[99,110721,565],{"class":105},[99,110723,109792],{"class":109},[99,110725,642],{"class":105},[99,110727,109801],{"class":109},[99,110729,565],{"class":105},[99,110731,109806],{"class":109},[14,110733,110734,110735,110738,110739,110742],{},"这行计算奖励。",[96,110736,110737],{},"cart_x * cart_x"," 是小车位置的平方，",[96,110740,110741],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[90,110744,110746],{"className":30359,"code":110745,"language":30361,"meta":21,"style":21},"data.qpos[1] = 0.1\n",[96,110747,110748],{"__ignoreMap":21},[99,110749,110750,110752,110754,110756,110758],{"class":101,"line":102},[99,110751,104680],{"class":109},[99,110753,327],{"class":158},[99,110755,4429],{"class":109},[99,110757,155],{"class":105},[99,110759,110121],{"class":158},[14,110761,110762,110763,110765,110766,110768],{},"手动设置杆子的初始角度。因为 ",[96,110764,105437],{}," 是小车位置，",[96,110767,105440],{}," 是杆子角度，所以这里改的是杆子。",[90,110770,110771],{"className":30359,"code":104524,"language":30361,"meta":21,"style":21},[96,110772,110773],{"__ignoreMap":21},[99,110774,110775],{"class":101,"line":102},[99,110776,104524],{"class":109},[14,110778,105483,110779,110781],{},[96,110780,104011],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[90,110783,110785],{"className":30359,"code":110784,"language":30361,"meta":21,"style":21},"total_reward = 0.0\n",[96,110786,110787],{"__ignoreMap":21},[99,110788,110789,110792,110794],{"class":101,"line":102},[99,110790,110791],{"class":109},"total_reward ",[99,110793,155],{"class":105},[99,110795,104742],{"class":158},[14,110797,110798],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[90,110800,110802],{"className":30359,"code":110801,"language":30361,"meta":21,"style":21},"for step in range(1000):\n",[96,110803,110804],{"__ignoreMap":21},[99,110805,110806,110808,110810,110812,110814,110816,110818],{"class":101,"line":102},[99,110807,3011],{"class":105},[99,110809,31597],{"class":109},[99,110811,26032],{"class":105},[99,110813,32424],{"class":158},[99,110815,110],{"class":109},[99,110817,6397],{"class":158},[99,110819,30767],{"class":109},[14,110821,110822,110823,110825],{},"循环 1000 步。",[96,110824,107115],{}," 是当前步数，从 0 到 999。",[90,110827,110829],{"className":30359,"code":110828,"language":30361,"meta":21,"style":21},"obs = get_observation(data)\n",[96,110830,110831],{"__ignoreMap":21},[99,110832,110833,110836,110838],{"class":101,"line":102},[99,110834,110835],{"class":109},"obs ",[99,110837,155],{"class":105},[99,110839,110168],{"class":109},[14,110841,110842,110843,28366],{},"读取当前状态，保存到 ",[96,110844,110654],{},[90,110846,110848],{"className":30359,"code":110847,"language":30361,"meta":21,"style":21},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[96,110849,110850,110862],{"__ignoreMap":21},[99,110851,110852,110854,110856,110858,110860],{"class":101,"line":102},[99,110853,110678],{"class":109},[99,110855,155],{"class":105},[99,110857,110017],{"class":109},[99,110859,327],{"class":158},[99,110861,33227],{"class":109},[99,110863,110864,110867,110869,110871,110873],{"class":101,"line":22},[99,110865,110866],{"class":109},"pole_angular_velocity ",[99,110868,155],{"class":105},[99,110870,110017],{"class":109},[99,110872,181],{"class":158},[99,110874,33227],{"class":109},[14,110876,110877,110878,110881,110882,28366],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[96,110879,110880],{},"obs[3]","？因为 obs 的顺序是 ",[96,110883,110884],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[90,110886,110888],{"className":30359,"code":110887,"language":30361,"meta":21,"style":21},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[96,110889,110890],{"__ignoreMap":21},[99,110891,110892,110894,110896,110898,110900,110902,110904,110906,110908],{"class":101,"line":102},[99,110893,107423],{"class":109},[99,110895,155],{"class":105},[99,110897,110208],{"class":158},[99,110899,6505],{"class":105},[99,110901,109801],{"class":109},[99,110903,591],{"class":105},[99,110905,61848],{"class":158},[99,110907,6505],{"class":105},[99,110909,110221],{"class":109},[14,110911,110912,110913,100999,110915,110917],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[96,110914,105241],{},[96,110916,35310],{}," 是人为设置的系数，不是固定公式。",[90,110919,110921],{"className":30359,"code":110920,"language":30361,"meta":21,"style":21},"action = np.clip(action, -1.0, 1.0)\n",[96,110922,110923],{"__ignoreMap":21},[99,110924,110925,110927,110929,110931,110933,110935,110937,110939],{"class":101,"line":102},[99,110926,107423],{"class":109},[99,110928,155],{"class":105},[99,110930,107428],{"class":109},[99,110932,642],{"class":105},[99,110934,102384],{"class":158},[99,110936,12422],{"class":109},[99,110938,102384],{"class":158},[99,110940,116],{"class":109},[14,110942,110943],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[90,110945,110946],{"className":30359,"code":109754,"language":30361,"meta":21,"style":21},[96,110947,110948],{"__ignoreMap":21},[99,110949,110950,110952,110954,110956,110958],{"class":101,"line":102},[99,110951,105852],{"class":109},[99,110953,301],{"class":158},[99,110955,4429],{"class":109},[99,110957,155],{"class":105},[99,110959,107451],{"class":109},[14,110961,110962],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[90,110964,110965],{"className":30359,"code":104486,"language":30361,"meta":21,"style":21},[96,110966,110967],{"__ignoreMap":21},[99,110968,110969],{"class":101,"line":102},[99,110970,104486],{"class":109},[14,110972,110973,110974,110976],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[96,110975,106107],{}," 计算小车和杆子的下一刻状态。",[90,110978,110980],{"className":30359,"code":110979,"language":30361,"meta":21,"style":21},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[96,110981,110982,110991],{"__ignoreMap":21},[99,110983,110984,110987,110989],{"class":101,"line":102},[99,110985,110986],{"class":109},"reward ",[99,110988,155],{"class":105},[99,110990,110273],{"class":109},[99,110992,110993,110995,110997],{"class":101,"line":22},[99,110994,110791],{"class":109},[99,110996,9464],{"class":105},[99,110998,110283],{"class":109},[14,111000,111001,111002,111004,111005,111008,111009,28366],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[96,111003,9464],{}," 是简写，",[96,111006,111007],{},"total_reward += reward"," 等价于 ",[96,111010,111011],{},"total_reward = total_reward + reward",[90,111013,111015],{"className":30359,"code":111014,"language":30361,"meta":21,"style":21},"if step % 100 == 0:\n",[96,111016,111017],{"__ignoreMap":21},[99,111018,111019,111021,111023,111025,111027,111029,111031],{"class":101,"line":102},[99,111020,1517],{"class":105},[99,111022,31597],{"class":109},[99,111024,438],{"class":105},[99,111026,5741],{"class":158},[99,111028,101540],{"class":105},[99,111030,4079],{"class":158},[99,111032,3725],{"class":109},[14,111034,111035,111037,111038,111041],{},[96,111036,438],{}," 是取余数。",[96,111039,111040],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[90,111043,111045],{"className":30359,"code":111044,"language":30361,"meta":21,"style":21},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[96,111046,111047],{"__ignoreMap":21},[99,111048,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075,111077,111079],{"class":101,"line":102},[99,111050,30396],{"class":158},[99,111052,110],{"class":109},[99,111054,110312],{"class":214},[99,111056,110315],{"class":109},[99,111058,110318],{"class":214},[99,111060,110321],{"class":109},[99,111062,181],{"class":158},[99,111064,110326],{"class":109},[99,111066,110329],{"class":214},[99,111068,12422],{"class":109},[99,111070,31999],{"class":158},[99,111072,110],{"class":109},[99,111074,149],{"class":158},[99,111076,110340],{"class":109},[99,111078,181],{"class":158},[99,111080,30478],{"class":109},[14,111082,111083,111084,111087,111088,111091],{},"打印当前步数、观测和动作。",[96,111085,111086],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[96,111089,111090],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[41,111093,102297],{"id":102296},[14,111095,111096],{},"观测向量:",[90,111098,111101],{"className":111099,"code":111100,"language":5174,"meta":21},[5172],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[96,111102,111100],{"__ignoreMap":21},[14,111104,111105],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111107,111108],{},"每隔 100 步会打印一次：",[90,111110,111113],{"className":111111,"code":111112,"language":5174,"meta":21},[5172],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[96,111114,111112],{"__ignoreMap":21},[14,111116,111117],{},"重点观察：",[53,111119,111120,111126,111131],{},[56,111121,111122,111125],{},[96,111123,111124],{},"pole_angle"," 是否越来越大。",[56,111127,111128,111130],{},[96,111129,109707],{}," 是否跑得太远。",[56,111132,111133,111134,82520,111136,28366],{},"action 是否经常被 clip 到 ",[96,111135,103896],{},[96,111137,327],{},[14,111139,111140],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[41,111142,102329],{"id":102328},[53,111144,111145,111151,111154,111160,111170,111176,111179],{},[56,111146,111147,111148,28366],{},"把初始角度改为 ",[96,111149,111150],{},"data.qpos[1] = 0.3",[56,111152,111153],{},"重新运行，观察控制是否变差。",[56,111155,111156,111157,111159],{},"把 actuator ",[96,111158,107048],{}," 改小。",[56,111161,111162,111163,111166,111167,28366],{},"打印 ",[96,111164,111165],{},"model.nq, model.nv, model.nu","，应为 ",[96,111168,111169],{},"2 2 1",[56,111171,111172,111173,111175],{},"把 reward 里的 ",[96,111174,110741],{}," 系数改大，观察总奖励变化。",[56,111177,111178],{},"把控制器改成反号，观察杆子是否更容易倒。",[56,111180,111181],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[41,111183,102434],{"id":102433},[70,111185,111186],{"id":111186},"杆子方向和预期不一致",[14,111188,102377,111189,111191,111192,111194],{},[96,111190,106220],{}," 和 capsule 的 ",[96,111193,103157],{},"，必要时用 viewer 可视化确认。",[70,111196,111197],{"id":111197},"控制器越控越倒",[14,111199,111200],{},"说明反馈符号可能反了，尝试:",[90,111202,111204],{"className":30359,"code":111203,"language":30361,"meta":21,"style":21},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[96,111205,111206],{"__ignoreMap":21},[99,111207,111208,111210,111212,111214,111216,111218,111220,111222,111224,111226],{"class":101,"line":102},[99,111209,107423],{"class":109},[99,111211,155],{"class":105},[99,111213,52252],{"class":105},[99,111215,105241],{"class":158},[99,111217,6505],{"class":105},[99,111219,109801],{"class":109},[99,111221,642],{"class":105},[99,111223,61848],{"class":158},[99,111225,6505],{"class":105},[99,111227,110221],{"class":109},[70,111229,111230],{"id":111230},"小车飞走",[14,111232,111233,111234,111236,111237,111240],{},"降低 ",[96,111235,107048],{}," 或缩小 ",[96,111238,111239],{},"action"," 的 clip 范围。",[70,111242,111244,111246],{"id":111243},"obs3-为什么是杆子角速度",[96,111245,110880],{}," 为什么是杆子角速度",[14,111248,111249],{},"因为这个模型里：",[90,111251,111254],{"className":111252,"code":111253,"language":5174,"meta":21},[5172],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[96,111255,111253],{"__ignoreMap":21},[14,111257,109728],{},[90,111259,111262],{"className":111260,"code":111261,"language":5174,"meta":21},[5172],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[96,111263,111261],{"__ignoreMap":21},[70,111265,111267],{"id":111266},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111269,111270],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[41,111272,102588],{"id":102587},[14,111274,111275],{},"一个控制任务通常包含：",[53,111277,111278,111281,111289,111294,111297],{},[56,111279,111280],{},"模型：Cartpole 的 body、joint、actuator。",[56,111282,111283,111284,322,111286,111288],{},"观测：从 ",[96,111285,104011],{},[96,111287,104341],{}," 里取状态。",[56,111290,111291,111292,28366],{},"动作：写入 ",[96,111293,101057],{},[56,111295,111296],{},"奖励：根据任务目标打分。",[56,111298,111299],{},"循环：obs -> action -> step -> reward。",[14,111301,111302],{},"这就是后面 Gymnasium 环境的基本骨架。",[5113,111304,104267],{},{"title":21,"searchDepth":22,"depth":22,"links":111306},[111307,111308,111309,111314,111318,111319,111320,111328],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":111310},[111311,111312,111313],{"id":109681,"depth":1165,"text":109682},{"id":109746,"depth":1165,"text":109747},{"id":109762,"depth":1165,"text":109763},{"id":101233,"depth":22,"text":101234,"children":111315},[111316,111317],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":111321},[111322,111323,111324,111325,111327],{"id":111186,"depth":1165,"text":111186},{"id":111197,"depth":1165,"text":111197},{"id":111230,"depth":1165,"text":111230},{"id":111243,"depth":1165,"text":111326},"obs[3] 为什么是杆子角速度",{"id":111266,"depth":1165,"text":111267},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109417,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111335,"title":111336,"body":111337,"description":21,"extension":24,"meta":113351,"navigation":26,"path":113352,"seo":113353,"stem":113354,"__hash__":113355},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111338,"toc":113327},[111339,111342,111344,111347,111349,111366,111369,111372,111378,111381,111383,111385,111409,111411,111425,111427,111468,111470,111488,111490,111493,111499,111502,111530,111534,111540,111565,111568,111599,111606,111609,111612,111618,111621,111627,111630,111636,111640,111643,111668,111671,111673,112433,112435,112447,112449,112460,112462,112465,112482,112485,112487,112498,112501,112503,112549,112552,112565,112568,112650,112653,112655,112671,112681,112694,112697,112736,112746,112757,112767,112780,112783,112812,112815,112825,112828,112834,112851,112862,112864,112870,112887,112898,112919,112922,112934,112937,112958,112961,112969,112977,112994,112997,113066,113073,113081,113084,113097,113104,113106,113109,113115,113118,113121,113127,113133,113135,113175,113177,113183,113192,113195,113197,113217,113220,113223,113229,113233,113235,113262,113265,113268,113295,113301,113304,113307,113309,113312,113315,113321,113324],[10,111340,111336],{"id":111341},"_7控制任务reacher-机械臂到达目标",[41,111343,100628],{"id":100627},[14,111345,111346],{},"本章搭建一个二维两关节 reacher 任务。",[14,111348,104312],{},[53,111350,111351,111354,111357,111360,111363],{},[56,111352,111353],{},"两个 hinge joint",[56,111355,111356],{},"两个 motor actuator",[56,111358,111359],{},"site 作为末端点和目标点",[56,111361,111362],{},"根据末端和目标距离设计 reward",[56,111364,111365],{},"构造机械臂任务的基本形式",[14,111367,111368],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111370,111371],{},"Reacher 任务可以理解为：",[90,111373,111376],{"className":111374,"code":111375,"language":5174,"meta":21},[5172],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[96,111377,111375],{"__ignoreMap":21},[14,111379,111380],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[41,111382,100751],{"id":100750},[14,111384,100754],{},[90,111386,111387],{"className":23810,"code":104369,"language":23812,"meta":21,"style":21},[96,111388,111389],{"__ignoreMap":21},[99,111390,111391,111393,111395,111397,111399,111401,111403,111405,111407],{"class":101,"line":102},[99,111392,24565],{"class":1949},[99,111394,26304],{"class":214},[99,111396,23822],{"class":214},[99,111398,26389],{"class":158},[99,111400,104384],{"class":214},[99,111402,100779],{"class":214},[99,111404,102482],{"class":214},[99,111406,100795],{"class":214},[99,111408,104393],{"class":214},[14,111410,102800],{},[90,111412,111413],{"className":23810,"code":100900,"language":23812,"meta":21,"style":21},[96,111414,111415],{"__ignoreMap":21},[99,111416,111417,111419,111421,111423],{"class":101,"line":102},[99,111418,23819],{"class":1949},[99,111420,23822],{"class":214},[99,111422,100911],{"class":214},[99,111424,100914],{"class":214},[14,111426,102817],{},[90,111428,111430],{"className":23810,"code":111429,"language":23812,"meta":21,"style":21},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[96,111431,111432,111449,111458],{"__ignoreMap":21},[99,111433,111434,111436,111438,111440,111443,111445,111447],{"class":101,"line":102},[99,111435,30311],{"class":1949},[99,111437,29157],{"class":214},[99,111439,25104],{"class":158},[99,111441,111442],{"class":214}," mujoco-reacher",[99,111444,100956],{"class":214},[99,111446,100959],{"class":158},[99,111448,100962],{"class":158},[99,111450,111451,111453,111455],{"class":101,"line":22},[99,111452,30311],{"class":1949},[99,111454,100969],{"class":214},[99,111456,111457],{"class":214}," mujoco-reacher\n",[99,111459,111460,111462,111464,111466],{"class":101,"line":1165},[99,111461,23819],{"class":1949},[99,111463,23822],{"class":214},[99,111465,100911],{"class":214},[99,111467,100914],{"class":214},[14,111469,100985],{},[53,111471,111472,111475,111478],{},[56,111473,111474],{},"本章使用低维状态，不使用图像输入。",[56,111476,111477],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[56,111479,111480,111481,322,111483,322,111485,111487],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[96,111482,104011],{},[96,111484,104341],{},[96,111486,103661],{}," 的方法一致。",[41,111489,101026],{"id":101025},[14,111491,111492],{},"Reacher 任务核心:",[90,111494,111497],{"className":111495,"code":111496,"language":5174,"meta":21},[5172],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[96,111498,111496],{"__ignoreMap":21},[14,111500,111501],{},"读取 site 世界坐标:",[90,111503,111505],{"className":30359,"code":111504,"language":30361,"meta":21,"style":21},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[96,111506,111507,111520],{"__ignoreMap":21},[99,111508,111509,111511,111513,111515,111518],{"class":101,"line":102},[99,111510,103615],{"class":109},[99,111512,155],{"class":105},[99,111514,103386],{"class":109},[99,111516,111517],{"class":214},"\"tip\"",[99,111519,116],{"class":109},[99,111521,111522,111525,111527],{"class":101,"line":22},[99,111523,111524],{"class":109},"tip_pos ",[99,111526,155],{"class":105},[99,111528,111529],{"class":109}," data.site_xpos[site_id]\n",[70,111531,111533],{"id":111532},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111535,111536,111537,111539],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[96,111538,104011],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[90,111541,111543],{"className":30359,"code":111542,"language":30361,"meta":21,"style":21},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[96,111544,111545,111555],{"__ignoreMap":21},[99,111546,111547,111550,111552],{"class":101,"line":102},[99,111548,111549],{"class":109},"tip ",[99,111551,155],{"class":105},[99,111553,111554],{"class":109}," data.site_xpos[tip_site_id]\n",[99,111556,111557,111560,111562],{"class":101,"line":22},[99,111558,111559],{"class":109},"target ",[99,111561,155],{"class":105},[99,111563,111564],{"class":109}," data.site_xpos[target_site_id]\n",[14,111566,111567],{},"这样 reward 就很容易写：",[90,111569,111571],{"className":30359,"code":111570,"language":30361,"meta":21,"style":21},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[96,111572,111573,111588],{"__ignoreMap":21},[99,111574,111575,111578,111580,111583,111585],{"class":101,"line":102},[99,111576,111577],{"class":109},"dist ",[99,111579,155],{"class":105},[99,111581,111582],{"class":109}," np.linalg.norm(tip ",[99,111584,642],{"class":105},[99,111586,111587],{"class":109}," target)\n",[99,111589,111590,111592,111594,111596],{"class":101,"line":22},[99,111591,110986],{"class":109},[99,111593,155],{"class":105},[99,111595,52252],{"class":105},[99,111597,111598],{"class":109},"dist\n",[14,111600,111601,111602,111605],{},"距离越小，",[96,111603,111604],{},"-dist"," 越接近 0，奖励越高。",[70,111607,111608],{"id":111608},"两关节机械臂的状态",[14,111610,111611],{},"这个模型有两个 hinge joint：",[90,111613,111616],{"className":111614,"code":111615,"language":5174,"meta":21},[5172],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[96,111617,111615],{"__ignoreMap":21},[14,111619,111620],{},"再加上末端和目标位置：",[90,111622,111625],{"className":111623,"code":111624,"language":5174,"meta":21},[5172],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[96,111626,111624],{"__ignoreMap":21},[14,111628,111629],{},"总维度：",[90,111631,111634],{"className":111632,"code":111633,"language":5174,"meta":21},[5172],"2 + 2 + 3 + 3 = 10\n",[96,111635,111633],{"__ignoreMap":21},[70,111637,111639],{"id":111638},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111641,111642],{},"本章把重力设为：",[90,111644,111646],{"className":53048,"code":111645,"language":53050,"meta":21,"style":21},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[96,111647,111648],{"__ignoreMap":21},[99,111649,111650,111652,111654,111656,111658,111660,111662,111664,111666],{"class":101,"line":102},[99,111651,1020],{"class":109},[99,111653,69147],{"class":51281},[99,111655,101175],{"class":1949},[99,111657,155],{"class":109},[99,111659,101180],{"class":214},[99,111661,101183],{"class":1949},[99,111663,155],{"class":109},[99,111665,103752],{"class":214},[99,111667,101125],{"class":109},[14,111669,111670],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[41,111672,101234],{"id":101233},[90,111674,111676],{"className":30359,"code":111675,"language":30361,"meta":21,"style":21},"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",[96,111677,111678,111684,111694,111698,111702,111710,111715,111720,111724,111728,111733,111738,111742,111747,111752,111757,111761,111766,111771,111776,111781,111785,111789,111793,111797,111801,111806,111811,111815,111819,111823,111827,111831,111846,111855,111867,111890,111897,111901,111905,111915,111929,111943,111950,111954,111958,111972,111984,111996,112009,112024,112041,112045,112049,112061,112073,112081,112089,112093,112109,112114,112127,112140,112155,112159,112194,112226,112230,112234,112243,112247,112263,112273,112284,112300,112316,112332,112348,112352,112370,112390,112409,112413,112417,112429],{"__ignoreMap":21},[99,111679,111680,111682],{"class":101,"line":102},[99,111681,30373],{"class":105},[99,111683,101282],{"class":109},[99,111685,111686,111688,111690,111692],{"class":101,"line":22},[99,111687,30373],{"class":105},[99,111689,31361],{"class":109},[99,111691,31364],{"class":105},[99,111693,31367],{"class":109},[99,111695,111696],{"class":101,"line":1165},[99,111697,2386],{"emptyLinePlaceholder":26},[99,111699,111700],{"class":101,"line":1180},[99,111701,2386],{"emptyLinePlaceholder":26},[99,111703,111704,111706,111708],{"class":101,"line":1186},[99,111705,101295],{"class":158},[99,111707,13551],{"class":105},[99,111709,101300],{"class":214},[99,111711,111712],{"class":101,"line":1200},[99,111713,111714],{"class":214},"\u003Cmujoco model=\"two_link_reacher\">\n",[99,111716,111717],{"class":101,"line":1206},[99,111718,111719],{"class":214},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[99,111721,111722],{"class":101,"line":1297},[99,111723,2386],{"emptyLinePlaceholder":26},[99,111725,111726],{"class":101,"line":1303},[99,111727,101319],{"class":214},[99,111729,111730],{"class":101,"line":1315},[99,111731,111732],{"class":214},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[99,111734,111735],{"class":101,"line":1598},[99,111736,111737],{"class":214},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[99,111739,111740],{"class":101,"line":1603},[99,111741,2386],{"emptyLinePlaceholder":26},[99,111743,111744],{"class":101,"line":1609},[99,111745,111746],{"class":214},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[99,111748,111749],{"class":101,"line":1614},[99,111750,111751],{"class":214},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[99,111753,111754],{"class":101,"line":1628},[99,111755,111756],{"class":214},"      \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",[99,111758,111759],{"class":101,"line":1633},[99,111760,2386],{"emptyLinePlaceholder":26},[99,111762,111763],{"class":101,"line":1639},[99,111764,111765],{"class":214},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[99,111767,111768],{"class":101,"line":1660},[99,111769,111770],{"class":214},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[99,111772,111773],{"class":101,"line":1665},[99,111774,111775],{"class":214},"        \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",[99,111777,111778],{"class":101,"line":1679},[99,111779,111780],{"class":214},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[99,111782,111783],{"class":101,"line":1684},[99,111784,106419],{"class":214},[99,111786,111787],{"class":101,"line":1713},[99,111788,101348],{"class":214},[99,111790,111791],{"class":101,"line":1718},[99,111792,101353],{"class":214},[99,111794,111795],{"class":101,"line":1735},[99,111796,2386],{"emptyLinePlaceholder":26},[99,111798,111799],{"class":101,"line":1740},[99,111800,106436],{"class":214},[99,111802,111803],{"class":101,"line":1745},[99,111804,111805],{"class":214},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[99,111807,111808],{"class":101,"line":1750},[99,111809,111810],{"class":214},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[99,111812,111813],{"class":101,"line":1764},[99,111814,106446],{"class":214},[99,111816,111817],{"class":101,"line":1769},[99,111818,101358],{"class":214},[99,111820,111821],{"class":101,"line":2563},[99,111822,95679],{"class":214},[99,111824,111825],{"class":101,"line":2577},[99,111826,2386],{"emptyLinePlaceholder":26},[99,111828,111829],{"class":101,"line":2585},[99,111830,2386],{"emptyLinePlaceholder":26},[99,111832,111833,111835,111838,111841,111843],{"class":101,"line":2590},[99,111834,31928],{"class":105},[99,111836,111837],{"class":1949}," site_position",[99,111839,111840],{"class":109},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[99,111842,1285],{"class":158},[99,111844,111845],{"class":109},") -> np.ndarray:\n",[99,111847,111848,111850,111852],{"class":101,"line":2596},[99,111849,103381],{"class":109},[99,111851,155],{"class":105},[99,111853,111854],{"class":109}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[99,111856,111857,111859,111861,111863,111865],{"class":101,"line":2602},[99,111858,3087],{"class":105},[99,111860,103430],{"class":109},[99,111862,1020],{"class":105},[99,111864,4079],{"class":158},[99,111866,3725],{"class":109},[99,111868,111869,111871,111873,111875,111877,111880,111882,111884,111886,111888],{"class":101,"line":2607},[99,111870,103413],{"class":105},[99,111872,103416],{"class":158},[99,111874,110],{"class":109},[99,111876,162],{"class":105},[99,111878,111879],{"class":214},"\"site not found: ",[99,111881,1006],{"class":158},[99,111883,79791],{"class":109},[99,111885,1056],{"class":158},[99,111887,361],{"class":214},[99,111889,116],{"class":109},[99,111891,111892,111894],{"class":101,"line":7935},[99,111893,4076],{"class":105},[99,111895,111896],{"class":109}," data.site_xpos[site_id].copy()\n",[99,111898,111899],{"class":101,"line":7959},[99,111900,2386],{"emptyLinePlaceholder":26},[99,111902,111903],{"class":101,"line":7964},[99,111904,2386],{"emptyLinePlaceholder":26},[99,111906,111907,111909,111912],{"class":101,"line":7970},[99,111908,31928],{"class":105},[99,111910,111911],{"class":1949}," get_obs",[99,111913,111914],{"class":109},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[99,111916,111917,111920,111922,111925,111927],{"class":101,"line":7997},[99,111918,111919],{"class":109},"    tip ",[99,111921,155],{"class":105},[99,111923,111924],{"class":109}," site_position(model, data, ",[99,111926,111517],{"class":214},[99,111928,116],{"class":109},[99,111930,111931,111934,111936,111938,111941],{"class":101,"line":8002},[99,111932,111933],{"class":109},"    target ",[99,111935,155],{"class":105},[99,111937,111924],{"class":109},[99,111939,111940],{"class":214},"\"target\"",[99,111942,116],{"class":109},[99,111944,111945,111947],{"class":101,"line":8008},[99,111946,4076],{"class":105},[99,111948,111949],{"class":109}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[99,111951,111952],{"class":101,"line":8020},[99,111953,2386],{"emptyLinePlaceholder":26},[99,111955,111956],{"class":101,"line":8032},[99,111957,2386],{"emptyLinePlaceholder":26},[99,111959,111960,111962,111965,111968,111970],{"class":101,"line":8044},[99,111961,31928],{"class":105},[99,111963,111964],{"class":1949}," reward",[99,111966,111967],{"class":109},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[99,111969,149],{"class":158},[99,111971,3725],{"class":109},[99,111973,111974,111976,111978,111980,111982],{"class":101,"line":9703},[99,111975,111919],{"class":109},[99,111977,155],{"class":105},[99,111979,111924],{"class":109},[99,111981,111517],{"class":214},[99,111983,116],{"class":109},[99,111985,111986,111988,111990,111992,111994],{"class":101,"line":9728},[99,111987,111933],{"class":109},[99,111989,155],{"class":105},[99,111991,111924],{"class":109},[99,111993,111940],{"class":214},[99,111995,116],{"class":109},[99,111997,111998,112001,112003,112005,112007],{"class":101,"line":9751},[99,111999,112000],{"class":109},"    dist ",[99,112002,155],{"class":105},[99,112004,111582],{"class":109},[99,112006,642],{"class":105},[99,112008,111587],{"class":109},[99,112010,112011,112014,112016,112019,112021],{"class":101,"line":9775},[99,112012,112013],{"class":109},"    control_cost ",[99,112015,155],{"class":105},[99,112017,112018],{"class":158}," 0.01",[99,112020,6505],{"class":105},[99,112022,112023],{"class":109}," np.sum(np.square(data.ctrl))\n",[99,112025,112026,112028,112030,112032,112034,112036,112038],{"class":101,"line":9780},[99,112027,4076],{"class":105},[99,112029,109778],{"class":158},[99,112031,110],{"class":109},[99,112033,642],{"class":105},[99,112035,111577],{"class":109},[99,112037,642],{"class":105},[99,112039,112040],{"class":109}," control_cost)\n",[99,112042,112043],{"class":101,"line":9785},[99,112044,2386],{"emptyLinePlaceholder":26},[99,112046,112047],{"class":101,"line":9790},[99,112048,2386],{"emptyLinePlaceholder":26},[99,112050,112051,112053,112055,112057,112059],{"class":101,"line":9799},[99,112052,31928],{"class":105},[99,112054,1959],{"class":1949},[99,112056,101379],{"class":109},[99,112058,95667],{"class":158},[99,112060,3725],{"class":109},[99,112062,112063,112065,112067,112069,112071],{"class":101,"line":9804},[99,112064,101388],{"class":109},[99,112066,155],{"class":105},[99,112068,101393],{"class":109},[99,112070,101295],{"class":158},[99,112072,116],{"class":109},[99,112074,112075,112077,112079],{"class":101,"line":9810},[99,112076,101402],{"class":109},[99,112078,155],{"class":105},[99,112080,101407],{"class":109},[99,112082,112083,112085,112087],{"class":101,"line":9831},[99,112084,110134],{"class":109},[99,112086,155],{"class":105},[99,112088,104742],{"class":158},[99,112090,112091],{"class":101,"line":9837},[99,112092,2386],{"emptyLinePlaceholder":26},[99,112094,112095,112097,112099,112101,112103,112105,112107],{"class":101,"line":9851},[99,112096,3187],{"class":105},[99,112098,31597],{"class":109},[99,112100,26032],{"class":105},[99,112102,32424],{"class":158},[99,112104,110],{"class":109},[99,112106,65055],{"class":158},[99,112108,30767],{"class":109},[99,112110,112111],{"class":101,"line":9857},[99,112112,112113],{"class":109},"        mujoco.mj_forward(model, data)\n",[99,112115,112116,112119,112121,112123,112125],{"class":101,"line":9884},[99,112117,112118],{"class":109},"        tip ",[99,112120,155],{"class":105},[99,112122,111924],{"class":109},[99,112124,111517],{"class":214},[99,112126,116],{"class":109},[99,112128,112129,112132,112134,112136,112138],{"class":101,"line":9893},[99,112130,112131],{"class":109},"        target ",[99,112133,155],{"class":105},[99,112135,111924],{"class":109},[99,112137,111940],{"class":214},[99,112139,116],{"class":109},[99,112141,112142,112145,112147,112150,112152],{"class":101,"line":9899},[99,112143,112144],{"class":109},"        error ",[99,112146,155],{"class":105},[99,112148,112149],{"class":109}," target ",[99,112151,642],{"class":105},[99,112153,112154],{"class":109}," tip\n",[99,112156,112157],{"class":101,"line":9907},[99,112158,2386],{"emptyLinePlaceholder":26},[99,112160,112161,112163,112165,112167,112169,112172,112174,112176,112179,112181,112184,112186,112188,112190,112192],{"class":101,"line":9912},[99,112162,106598],{"class":109},[99,112164,301],{"class":158},[99,112166,4429],{"class":109},[99,112168,155],{"class":105},[99,112170,112171],{"class":109}," np.clip(",[99,112173,105241],{"class":158},[99,112175,6505],{"class":105},[99,112177,112178],{"class":109}," error[",[99,112180,187],{"class":158},[99,112182,112183],{"class":109},"], ",[99,112185,642],{"class":105},[99,112187,102384],{"class":158},[99,112189,12422],{"class":109},[99,112191,102384],{"class":158},[99,112193,116],{"class":109},[99,112195,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220,112222,112224],{"class":101,"line":16591},[99,112197,106598],{"class":109},[99,112199,327],{"class":158},[99,112201,4429],{"class":109},[99,112203,155],{"class":105},[99,112205,112171],{"class":109},[99,112207,105241],{"class":158},[99,112209,6505],{"class":105},[99,112211,112178],{"class":109},[99,112213,301],{"class":158},[99,112215,112183],{"class":109},[99,112217,642],{"class":105},[99,112219,102384],{"class":158},[99,112221,12422],{"class":109},[99,112223,102384],{"class":158},[99,112225,116],{"class":109},[99,112227,112228],{"class":101,"line":16597},[99,112229,2386],{"emptyLinePlaceholder":26},[99,112231,112232],{"class":101,"line":16620},[99,112233,101497],{"class":109},[99,112235,112236,112238,112240],{"class":101,"line":16626},[99,112237,110278],{"class":109},[99,112239,9464],{"class":105},[99,112241,112242],{"class":109}," reward(model, data)\n",[99,112244,112245],{"class":101,"line":16649},[99,112246,2386],{"emptyLinePlaceholder":26},[99,112248,112249,112251,112253,112255,112257,112259,112261],{"class":101,"line":16663},[99,112250,2483],{"class":105},[99,112252,31597],{"class":109},[99,112254,438],{"class":105},[99,112256,5741],{"class":158},[99,112258,101540],{"class":105},[99,112260,4079],{"class":158},[99,112262,3725],{"class":109},[99,112264,112265,112268,112270],{"class":101,"line":16683},[99,112266,112267],{"class":109},"            obs ",[99,112269,155],{"class":105},[99,112271,112272],{"class":109}," get_obs(model, data)\n",[99,112274,112275,112277,112279,112281],{"class":101,"line":16689},[99,112276,34631],{"class":158},[99,112278,110],{"class":109},[99,112280,110312],{"class":214},[99,112282,112283],{"class":109},", step)\n",[99,112285,112286,112288,112290,112293,112296,112298],{"class":101,"line":16700},[99,112287,34631],{"class":158},[99,112289,110],{"class":109},[99,112291,112292],{"class":214},"\"  tip:\"",[99,112294,112295],{"class":109},", np.round(tip, ",[99,112297,181],{"class":158},[99,112299,30478],{"class":109},[99,112301,112302,112304,112306,112309,112312,112314],{"class":101,"line":16723},[99,112303,34631],{"class":158},[99,112305,110],{"class":109},[99,112307,112308],{"class":214},"\"  target:\"",[99,112310,112311],{"class":109},", np.round(target, ",[99,112313,181],{"class":158},[99,112315,30478],{"class":109},[99,112317,112318,112320,112322,112325,112328,112330],{"class":101,"line":16745},[99,112319,34631],{"class":158},[99,112321,110],{"class":109},[99,112323,112324],{"class":214},"\"  ctrl:\"",[99,112326,112327],{"class":109},", np.round(data.ctrl.copy(), ",[99,112329,181],{"class":158},[99,112331,30478],{"class":109},[99,112333,112334,112336,112338,112341,112344,112346],{"class":101,"line":16750},[99,112335,34631],{"class":158},[99,112337,110],{"class":109},[99,112339,112340],{"class":214},"\"  obs_dim:\"",[99,112342,112343],{"class":109},", obs.shape[",[99,112345,301],{"class":158},[99,112347,4643],{"class":109},[99,112349,112350],{"class":101,"line":16756},[99,112351,2386],{"emptyLinePlaceholder":26},[99,112353,112354,112356,112358,112360,112362,112364,112366,112368],{"class":101,"line":16770},[99,112355,31280],{"class":158},[99,112357,110],{"class":109},[99,112359,110357],{"class":214},[99,112361,12422],{"class":109},[99,112363,31999],{"class":158},[99,112365,110364],{"class":109},[99,112367,181],{"class":158},[99,112369,30478],{"class":109},[99,112371,112372,112374,112376,112379,112382,112384,112386,112388],{"class":101,"line":16783},[99,112373,31280],{"class":158},[99,112375,110],{"class":109},[99,112377,112378],{"class":214},"\"final tip:\"",[99,112380,112381],{"class":109},", np.round(site_position(model, data, ",[99,112383,111517],{"class":214},[99,112385,110326],{"class":109},[99,112387,181],{"class":158},[99,112389,30478],{"class":109},[99,112391,112392,112394,112396,112399,112401,112403,112405,112407],{"class":101,"line":16788},[99,112393,31280],{"class":158},[99,112395,110],{"class":109},[99,112397,112398],{"class":214},"\"target:\"",[99,112400,112381],{"class":109},[99,112402,111940],{"class":214},[99,112404,110326],{"class":109},[99,112406,181],{"class":158},[99,112408,30478],{"class":109},[99,112410,112411],{"class":101,"line":16802},[99,112412,2386],{"emptyLinePlaceholder":26},[99,112414,112415],{"class":101,"line":16807},[99,112416,2386],{"emptyLinePlaceholder":26},[99,112418,112419,112421,112423,112425,112427],{"class":101,"line":16813},[99,112420,1517],{"class":105},[99,112422,31201],{"class":158},[99,112424,101540],{"class":105},[99,112426,101543],{"class":214},[99,112428,3725],{"class":109},[99,112430,112431],{"class":101,"line":16818},[99,112432,101550],{"class":109},[14,112434,103551],{},[90,112436,112438],{"className":23810,"code":112437,"language":23812,"meta":21,"style":21},"touch ch7_reacher.py\n",[96,112439,112440],{"__ignoreMap":21},[99,112441,112442,112444],{"class":101,"line":102},[99,112443,101264],{"class":1949},[99,112445,112446],{"class":214}," ch7_reacher.py\n",[14,112448,110425],{},[90,112450,112452],{"className":23810,"code":112451,"language":23812,"meta":21,"style":21},"python ch7_reacher.py\n",[96,112453,112454],{"__ignoreMap":21},[99,112455,112456,112458],{"class":101,"line":102},[99,112457,30361],{"class":1949},[99,112459,112446],{"class":214},[70,112461,101553],{"id":101553},[14,112463,112464],{},"读取 site 坐标：",[90,112466,112468],{"className":30359,"code":112467,"language":30361,"meta":21,"style":21},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[96,112469,112470],{"__ignoreMap":21},[99,112471,112472,112474,112476,112478,112480],{"class":101,"line":102},[99,112473,31928],{"class":105},[99,112475,111837],{"class":1949},[99,112477,111840],{"class":109},[99,112479,1285],{"class":158},[99,112481,111845],{"class":109},[14,112483,112484],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112486,110441],{},[90,112488,112490],{"className":30359,"code":112489,"language":30361,"meta":21,"style":21},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[96,112491,112492],{"__ignoreMap":21},[99,112493,112494,112496],{"class":101,"line":102},[99,112495,17033],{"class":105},[99,112497,111949],{"class":109},[14,112499,112500],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112502,109766],{},[90,112504,112506],{"className":30359,"code":112505,"language":30361,"meta":21,"style":21},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[96,112507,112508,112520,112533],{"__ignoreMap":21},[99,112509,112510,112512,112514,112516,112518],{"class":101,"line":102},[99,112511,111577],{"class":109},[99,112513,155],{"class":105},[99,112515,111582],{"class":109},[99,112517,642],{"class":105},[99,112519,111587],{"class":109},[99,112521,112522,112525,112527,112529,112531],{"class":101,"line":22},[99,112523,112524],{"class":109},"control_cost ",[99,112526,155],{"class":105},[99,112528,112018],{"class":158},[99,112530,6505],{"class":105},[99,112532,112023],{"class":109},[99,112534,112535,112537,112539,112541,112543,112545,112547],{"class":101,"line":1165},[99,112536,17033],{"class":105},[99,112538,109778],{"class":158},[99,112540,110],{"class":109},[99,112542,642],{"class":105},[99,112544,111577],{"class":109},[99,112546,642],{"class":105},[99,112548,112040],{"class":109},[14,112550,112551],{},"奖励由两部分组成：",[53,112553,112554,112559],{},[56,112555,112556,112558],{},[96,112557,111604],{},"：末端离目标越远，奖励越低。",[56,112560,112561,112564],{},[96,112562,112563],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112566,112567],{},"简单控制器：",[90,112569,112571],{"className":30359,"code":112570,"language":30361,"meta":21,"style":21},"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",[96,112572,112573,112586,112618],{"__ignoreMap":21},[99,112574,112575,112578,112580,112582,112584],{"class":101,"line":102},[99,112576,112577],{"class":109},"error ",[99,112579,155],{"class":105},[99,112581,112149],{"class":109},[99,112583,642],{"class":105},[99,112585,112154],{"class":109},[99,112587,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612,112614,112616],{"class":101,"line":22},[99,112589,105852],{"class":109},[99,112591,301],{"class":158},[99,112593,4429],{"class":109},[99,112595,155],{"class":105},[99,112597,112171],{"class":109},[99,112599,105241],{"class":158},[99,112601,6505],{"class":105},[99,112603,112178],{"class":109},[99,112605,187],{"class":158},[99,112607,112183],{"class":109},[99,112609,642],{"class":105},[99,112611,102384],{"class":158},[99,112613,12422],{"class":109},[99,112615,102384],{"class":158},[99,112617,116],{"class":109},[99,112619,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644,112646,112648],{"class":101,"line":1165},[99,112621,105852],{"class":109},[99,112623,327],{"class":158},[99,112625,4429],{"class":109},[99,112627,155],{"class":105},[99,112629,112171],{"class":109},[99,112631,105241],{"class":158},[99,112633,6505],{"class":105},[99,112635,112178],{"class":109},[99,112637,301],{"class":158},[99,112639,112183],{"class":109},[99,112641,642],{"class":105},[99,112643,102384],{"class":158},[99,112645,12422],{"class":109},[99,112647,102384],{"class":158},[99,112649,116],{"class":109},[14,112651,112652],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[70,112654,101689],{"id":101689},[90,112656,112657],{"className":30359,"code":112467,"language":30361,"meta":21,"style":21},[96,112658,112659],{"__ignoreMap":21},[99,112660,112661,112663,112665,112667,112669],{"class":101,"line":102},[99,112662,31928],{"class":105},[99,112664,111837],{"class":1949},[99,112666,111840],{"class":109},[99,112668,1285],{"class":158},[99,112670,111845],{"class":109},[14,112672,112673,112674,112676,112677,82520,112679,28366],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[96,112675,79791],{}," 是 site 的名字，比如 ",[96,112678,111517],{},[96,112680,111940],{},[90,112682,112684],{"className":30359,"code":112683,"language":30361,"meta":21,"style":21},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[96,112685,112686],{"__ignoreMap":21},[99,112687,112688,112690,112692],{"class":101,"line":102},[99,112689,103615],{"class":109},[99,112691,155],{"class":105},[99,112693,111854],{"class":109},[14,112695,112696],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[90,112698,112700],{"className":30359,"code":112699,"language":30361,"meta":21,"style":21},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[96,112701,112702,112714],{"__ignoreMap":21},[99,112703,112704,112706,112708,112710,112712],{"class":101,"line":102},[99,112705,1517],{"class":105},[99,112707,103430],{"class":109},[99,112709,1020],{"class":105},[99,112711,4079],{"class":158},[99,112713,3725],{"class":109},[99,112715,112716,112718,112720,112722,112724,112726,112728,112730,112732,112734],{"class":101,"line":22},[99,112717,103876],{"class":105},[99,112719,103416],{"class":158},[99,112721,110],{"class":109},[99,112723,162],{"class":105},[99,112725,111879],{"class":214},[99,112727,1006],{"class":158},[99,112729,79791],{"class":109},[99,112731,1056],{"class":158},[99,112733,361],{"class":214},[99,112735,116],{"class":109},[14,112737,112738,112739,112742,112743,112745],{},"如果 site 没找到，就主动报错。",[96,112740,112741],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[96,112744,79791],{}," 的值放进字符串里。",[90,112747,112749],{"className":30359,"code":112748,"language":30361,"meta":21,"style":21},"return data.site_xpos[site_id].copy()\n",[96,112750,112751],{"__ignoreMap":21},[99,112752,112753,112755],{"class":101,"line":102},[99,112754,17033],{"class":105},[99,112756,111896],{"class":109},[14,112758,112759,112760,112762,112763,112766],{},"返回这个 site 的世界坐标。",[96,112761,103661],{}," 里的每一行都是一个 site 的 ",[96,112764,112765],{},"(x, y, z)"," 坐标。",[90,112768,112770],{"className":30359,"code":112769,"language":30361,"meta":21,"style":21},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[96,112771,112772],{"__ignoreMap":21},[99,112773,112774,112776,112778],{"class":101,"line":102},[99,112775,31928],{"class":105},[99,112777,111911],{"class":1949},[99,112779,111914],{"class":109},[14,112781,112782],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[90,112784,112786],{"className":30359,"code":112785,"language":30361,"meta":21,"style":21},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[96,112787,112788,112800],{"__ignoreMap":21},[99,112789,112790,112792,112794,112796,112798],{"class":101,"line":102},[99,112791,111549],{"class":109},[99,112793,155],{"class":105},[99,112795,111924],{"class":109},[99,112797,111517],{"class":214},[99,112799,116],{"class":109},[99,112801,112802,112804,112806,112808,112810],{"class":101,"line":22},[99,112803,111559],{"class":109},[99,112805,155],{"class":105},[99,112807,111924],{"class":109},[99,112809,111940],{"class":214},[99,112811,116],{"class":109},[14,112813,112814],{},"分别读取末端点和目标点的世界坐标。",[90,112816,112817],{"className":30359,"code":112489,"language":30361,"meta":21,"style":21},[96,112818,112819],{"__ignoreMap":21},[99,112820,112821,112823],{"class":101,"line":102},[99,112822,17033],{"class":105},[99,112824,111949],{"class":109},[14,112826,112827],{},"把四部分拼成一个观测数组：",[90,112829,112832],{"className":112830,"code":112831,"language":5174,"meta":21},[5172],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[96,112833,112831],{"__ignoreMap":21},[90,112835,112837],{"className":30359,"code":112836,"language":30361,"meta":21,"style":21},"dist = np.linalg.norm(tip - target)\n",[96,112838,112839],{"__ignoreMap":21},[99,112840,112841,112843,112845,112847,112849],{"class":101,"line":102},[99,112842,111577],{"class":109},[99,112844,155],{"class":105},[99,112846,111582],{"class":109},[99,112848,642],{"class":105},[99,112850,111587],{"class":109},[14,112852,112853,112854,112857,112858,112861],{},"计算 tip 到 target 的距离。",[96,112855,112856],{},"tip - target"," 得到一个三维向量，",[96,112859,112860],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112863,14620],{},[90,112865,112868],{"className":112866,"code":112867,"language":5174,"meta":21},[5172],"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",[96,112869,112867],{"__ignoreMap":21},[90,112871,112873],{"className":30359,"code":112872,"language":30361,"meta":21,"style":21},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[96,112874,112875],{"__ignoreMap":21},[99,112876,112877,112879,112881,112883,112885],{"class":101,"line":102},[99,112878,112524],{"class":109},[99,112880,155],{"class":105},[99,112882,112018],{"class":158},[99,112884,6505],{"class":105},[99,112886,112023],{"class":109},[14,112888,112889,112890,112893,112894,112897],{},"计算动作惩罚。",[96,112891,112892],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[96,112895,112896],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[90,112899,112901],{"className":30359,"code":112900,"language":30361,"meta":21,"style":21},"return float(-dist - control_cost)\n",[96,112902,112903],{"__ignoreMap":21},[99,112904,112905,112907,112909,112911,112913,112915,112917],{"class":101,"line":102},[99,112906,17033],{"class":105},[99,112908,109778],{"class":158},[99,112910,110],{"class":109},[99,112912,642],{"class":105},[99,112914,111577],{"class":109},[99,112916,642],{"class":105},[99,112918,112040],{"class":109},[14,112920,112921],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[90,112923,112924],{"className":30359,"code":110784,"language":30361,"meta":21,"style":21},[96,112925,112926],{"__ignoreMap":21},[99,112927,112928,112930,112932],{"class":101,"line":102},[99,112929,110791],{"class":109},[99,112931,155],{"class":105},[99,112933,104742],{"class":158},[14,112935,112936],{},"累计奖励变量，记录整个运行过程的总分。",[90,112938,112940],{"className":30359,"code":112939,"language":30361,"meta":21,"style":21},"for step in range(500):\n",[96,112941,112942],{"__ignoreMap":21},[99,112943,112944,112946,112948,112950,112952,112954,112956],{"class":101,"line":102},[99,112945,3011],{"class":105},[99,112947,31597],{"class":109},[99,112949,26032],{"class":105},[99,112951,32424],{"class":158},[99,112953,110],{"class":109},[99,112955,65055],{"class":158},[99,112957,30767],{"class":109},[14,112959,112960],{},"运行 500 个控制步。",[90,112962,112963],{"className":30359,"code":104524,"language":30361,"meta":21,"style":21},[96,112964,112965],{"__ignoreMap":21},[99,112966,112967],{"class":101,"line":102},[99,112968,104524],{"class":109},[14,112970,112971,112972,100999,112974,112976],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[96,112973,103212],{},[96,112975,103215],{}," 是当前状态下的坐标。",[90,112978,112980],{"className":30359,"code":112979,"language":30361,"meta":21,"style":21},"error = target - tip\n",[96,112981,112982],{"__ignoreMap":21},[99,112983,112984,112986,112988,112990,112992],{"class":101,"line":102},[99,112985,112577],{"class":109},[99,112987,155],{"class":105},[99,112989,112149],{"class":109},[99,112991,642],{"class":105},[99,112993,112154],{"class":109},[14,112995,112996],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[90,112998,113000],{"className":30359,"code":112999,"language":30361,"meta":21,"style":21},"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",[96,113001,113002,113034],{"__ignoreMap":21},[99,113003,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032],{"class":101,"line":102},[99,113005,105852],{"class":109},[99,113007,301],{"class":158},[99,113009,4429],{"class":109},[99,113011,155],{"class":105},[99,113013,112171],{"class":109},[99,113015,105241],{"class":158},[99,113017,6505],{"class":105},[99,113019,112178],{"class":109},[99,113021,187],{"class":158},[99,113023,112183],{"class":109},[99,113025,642],{"class":105},[99,113027,102384],{"class":158},[99,113029,12422],{"class":109},[99,113031,102384],{"class":158},[99,113033,116],{"class":109},[99,113035,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064],{"class":101,"line":22},[99,113037,105852],{"class":109},[99,113039,327],{"class":158},[99,113041,4429],{"class":109},[99,113043,155],{"class":105},[99,113045,112171],{"class":109},[99,113047,105241],{"class":158},[99,113049,6505],{"class":105},[99,113051,112178],{"class":109},[99,113053,301],{"class":158},[99,113055,112183],{"class":109},[99,113057,642],{"class":105},[99,113059,102384],{"class":158},[99,113061,12422],{"class":109},[99,113063,102384],{"class":158},[99,113065,116],{"class":109},[14,113067,113068,113069,113072],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[96,113070,113071],{},"error -> ctrl -> step"," 的流程。",[90,113074,113075],{"className":30359,"code":104486,"language":30361,"meta":21,"style":21},[96,113076,113077],{"__ignoreMap":21},[99,113078,113079],{"class":101,"line":102},[99,113080,104486],{"class":109},[14,113082,113083],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[90,113085,113087],{"className":30359,"code":113086,"language":30361,"meta":21,"style":21},"obs = get_obs(model, data)\n",[96,113088,113089],{"__ignoreMap":21},[99,113090,113091,113093,113095],{"class":101,"line":102},[99,113092,110835],{"class":109},[99,113094,155],{"class":105},[99,113096,112272],{"class":109},[14,113098,113099,113100,113103],{},"读取最新观测。后面打印 ",[96,113101,113102],{},"obs.shape[0]","，用来确认观测维度是 10。",[41,113105,102297],{"id":102296},[14,113107,113108],{},"观测维度为:",[90,113110,113113],{"className":113111,"code":113112,"language":5174,"meta":21},[5172],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[96,113114,113112],{"__ignoreMap":21},[14,113116,113117],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113119,113120],{},"程序每 100 步打印：",[90,113122,113125],{"className":113123,"code":113124,"language":5174,"meta":21},[5172],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[96,113126,113124],{"__ignoreMap":21},[14,113128,113129,113130,113132],{},"如果控制有效，你应该看到最终 ",[96,113131,103212],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[41,113134,102329],{"id":102328},[53,113136,113137,113140,113143,113149,113155,113162,113172],{},[56,113138,113139],{},"修改目标点位置。",[56,113141,113142],{},"重新运行，观察最终 tip 是否变化。",[56,113144,113145,113146,113148],{},"把 gravity 改成 ",[96,113147,102570],{},"，观察控制是否变差。",[56,113150,111162,113151,111166,113153,28366],{},[96,113152,102139],{},[96,113154,187],{},[56,113156,102392,113157,102395,113159,113161],{},[96,113158,110577],{},[96,113160,107288],{},"，观察机械臂是否更难移动。",[56,113163,102392,113164,82511,113166,102395,113168,113171],{},[96,113165,103215],{},[96,113167,104127],{},[96,113169,113170],{},"0.2 0 0.6","，观察 reward 和 final tip。",[56,113173,113174],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[41,113176,102434],{"id":102433},[70,113178,113180],{"id":113179},"site-not-found",[96,113181,113182],{},"site not found",[14,113184,113185,113186,100999,113189,28366],{},"检查 XML 中是否有 ",[96,113187,113188],{},"site name=\"tip\"",[96,113190,113191],{},"site name=\"target\"",[70,113193,113194],{"id":113194},"机械臂完全不动",[14,113196,102504],{},[53,113198,113199,113204,113207,113212],{},[56,113200,113201,113203],{},[96,113202,102139],{}," 是否为 2",[56,113205,113206],{},"actuator 是否引用正确 joint",[56,113208,113209,113211],{},[96,113210,101057],{}," 是否被赋值",[56,113213,113214,113215],{},"是否执行了 ",[96,113216,100666],{},[70,113218,113219],{"id":113219},"控制效果不好",[14,113221,113222],{},"正常。本章重点不是控制器最优，而是任务结构:",[90,113224,113227],{"className":113225,"code":113226,"language":5174,"meta":21},[5172],"obs → action → mj_step → reward → next_obs\n",[96,113228,113226],{"__ignoreMap":21},[70,113230,113232],{"id":113231},"tip-坐标不变化","tip 坐标不变化",[14,113234,102556],{},[53,113236,113237,113242,113250,113259],{},[56,113238,113239,113240,28366],{},"是否每步调用了 ",[96,113241,100666],{},[56,113243,113244,113245,100999,113247,28366],{},"是否写入了 ",[96,113246,106107],{},[96,113248,113249],{},"data.ctrl[1]",[56,113251,113252,113253,322,113256,28366],{},"actuator 是否正确引用 ",[96,113254,113255],{},"joint1",[96,113257,113258],{},"joint2",[56,113260,113261],{},"控制输入是否太小。",[70,113263,113264],{"id":113264},"目标点不会动",[14,113266,113267],{},"本章的 target 是固定 site：",[90,113269,113271],{"className":53048,"code":113270,"language":53050,"meta":21,"style":21},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[96,113272,113273],{"__ignoreMap":21},[99,113274,113275,113277,113279,113281,113283,113285,113287,113289,113292],{"class":101,"line":102},[99,113276,1020],{"class":109},[99,113278,103191],{"class":51281},[99,113280,14907],{"class":1949},[99,113282,155],{"class":109},[99,113284,111940],{"class":214},[99,113286,101087],{"class":1949},[99,113288,155],{"class":109},[99,113290,113291],{"class":214},"\"0.5 0 0.4\"",[99,113293,113294],{"class":109}," ...\u002F>\n",[14,113296,113297,113298,113300],{},"它直接挂在 ",[96,113299,101822],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[70,113302,113303],{"id":113303},"机械臂不像真实机械臂",[14,113305,113306],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[41,113308,102588],{"id":102587},[14,113310,113311],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113313,113314],{},"核心公式：",[90,113316,113319],{"className":113317,"code":113318,"language":5174,"meta":21},[5172],"distance = ||tip - target||\nreward = -distance - action_cost\n",[96,113320,113318],{"__ignoreMap":21},[14,113322,113323],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5113,113325,113326],{},"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":21,"searchDepth":22,"depth":22,"links":113328},[113329,113330,113331,113336,113340,113341,113342,113350],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":113332},[113333,113334,113335],{"id":111532,"depth":1165,"text":111533},{"id":111608,"depth":1165,"text":111608},{"id":111638,"depth":1165,"text":111639},{"id":101233,"depth":22,"text":101234,"children":113337},[113338,113339],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":113343},[113344,113345,113346,113347,113348,113349],{"id":113179,"depth":1165,"text":113182},{"id":113194,"depth":1165,"text":113194},{"id":113219,"depth":1165,"text":113219},{"id":113231,"depth":1165,"text":113232},{"id":113264,"depth":1165,"text":113264},{"id":113303,"depth":1165,"text":113303},{"id":102587,"depth":22,"text":102588},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111336,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113357,"title":113358,"body":113359,"description":21,"extension":24,"meta":116821,"navigation":26,"path":116822,"seo":116823,"stem":116824,"__hash__":116825},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113360,"toc":116792},[113361,113364,113366,113369,113372,113397,113400,113406,113409,113415,113417,113419,113443,113445,113463,113465,113508,113510,113537,113539,113542,113594,113597,113603,113612,113615,113653,113656,113695,113698,113706,113713,113716,113722,113724,113778,113785,113830,113833,113837,113853,113863,113865,115126,115128,115140,115142,115153,115155,115158,115179,115182,115185,115218,115224,115227,115260,115263,115266,115307,115312,115326,115329,115342,115347,115370,115372,115387,115397,115412,115419,115439,115454,115472,115475,115492,115500,115516,115522,115554,115567,115599,115609,115644,115658,115704,115718,115760,115771,115784,115790,115823,115826,115853,115863,115903,115913,115930,115937,115955,115958,115999,116012,116027,116030,116053,116056,116068,116071,116090,116095,116116,116119,116134,116137,116171,116183,116198,116201,116226,116229,116248,116251,116283,116286,116310,116316,116346,116353,116366,116369,116371,116373,116379,116382,116385,116397,116400,116402,116456,116458,116462,116468,116477,116480,116487,116489,116512,116515,116519,116521,116539,116545,116547,116580,116583,116589,116593,116596,116616,116621,116625,116632,116652,116657,116661,116664,116684,116687,116773,116777,116780,116786,116789],[10,113362,113358],{"id":113363},"_8gymnasium-风格强化学习接口基础",[41,113365,100628],{"id":100627},[14,113367,113368],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113370,113371],{},"你将实现:",[90,113373,113375],{"className":30359,"code":113374,"language":30361,"meta":21,"style":21},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[96,113376,113377,113387],{"__ignoreMap":21},[99,113378,113379,113382,113384],{"class":101,"line":102},[99,113380,113381],{"class":109},"obs, info ",[99,113383,155],{"class":105},[99,113385,113386],{"class":109}," env.reset()\n",[99,113388,113389,113392,113394],{"class":101,"line":22},[99,113390,113391],{"class":109},"obs, reward, terminated, truncated, info ",[99,113393,155],{"class":105},[99,113395,113396],{"class":109}," env.step(action)\n",[14,113398,113399],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113401,113402,113403,113405],{},"前面章节的代码都是“脚本式”的：在 ",[96,113404,102276],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113407,113408],{},"可以先记住 Gymnasium 环境的核心交互：",[90,113410,113413],{"className":113411,"code":113412,"language":5174,"meta":21},[5172],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[96,113414,113412],{"__ignoreMap":21},[41,113416,100751],{"id":100750},[14,113418,100754],{},[90,113420,113421],{"className":23810,"code":104369,"language":23812,"meta":21,"style":21},[96,113422,113423],{"__ignoreMap":21},[99,113424,113425,113427,113429,113431,113433,113435,113437,113439,113441],{"class":101,"line":102},[99,113426,24565],{"class":1949},[99,113428,26304],{"class":214},[99,113430,23822],{"class":214},[99,113432,26389],{"class":158},[99,113434,104384],{"class":214},[99,113436,100779],{"class":214},[99,113438,102482],{"class":214},[99,113440,100795],{"class":214},[99,113442,104393],{"class":214},[14,113444,102800],{},[90,113446,113448],{"className":23810,"code":113447,"language":23812,"meta":21,"style":21},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[96,113449,113450],{"__ignoreMap":21},[99,113451,113452,113454,113456,113458,113460],{"class":101,"line":102},[99,113453,23819],{"class":1949},[99,113455,23822],{"class":214},[99,113457,100911],{"class":214},[99,113459,107692],{"class":214},[99,113461,113462],{"class":214}," gymnasium\n",[14,113464,102817],{},[90,113466,113468],{"className":23810,"code":113467,"language":23812,"meta":21,"style":21},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[96,113469,113470,113487,113496],{"__ignoreMap":21},[99,113471,113472,113474,113476,113478,113481,113483,113485],{"class":101,"line":102},[99,113473,30311],{"class":1949},[99,113475,29157],{"class":214},[99,113477,25104],{"class":158},[99,113479,113480],{"class":214}," mujoco-gym-api",[99,113482,100956],{"class":214},[99,113484,100959],{"class":158},[99,113486,100962],{"class":158},[99,113488,113489,113491,113493],{"class":101,"line":22},[99,113490,30311],{"class":1949},[99,113492,100969],{"class":214},[99,113494,113495],{"class":214}," mujoco-gym-api\n",[99,113497,113498,113500,113502,113504,113506],{"class":101,"line":1165},[99,113499,23819],{"class":1949},[99,113501,23822],{"class":214},[99,113503,100911],{"class":214},[99,113505,107692],{"class":214},[99,113507,113462],{"class":214},[14,113509,100985],{},[53,113511,113512,113522,113525,113531],{},[56,113513,113514,113515,113518,113519,28366],{},"本章使用 ",[96,113516,113517],{},"gymnasium","，不是旧版 ",[96,113520,113521],{},"gym",[56,113523,113524],{},"Gymnasium API 与旧 Gym API 有差异。",[56,113526,113527,113528,28366],{},"旧 Gym 常见返回值是 4 个: ",[96,113529,113530],{},"obs, reward, done, info",[56,113532,113533,113534,28366],{},"Gymnasium 返回值是 5 个: ",[96,113535,113536],{},"obs, reward, terminated, truncated, info",[41,113538,101026],{"id":101025},[14,113540,113541],{},"强化学习环境接口包含:",[247,113543,113544,113553],{},[250,113545,113546],{},[253,113547,113548,113551],{},[256,113549,113550],{"align":23724},"方法",[256,113552,102677],{"align":23724},[294,113554,113555,113565,113575,113585],{},[253,113556,113557,113562],{},[299,113558,113559],{"align":23724},[96,113560,113561],{},"reset()",[299,113563,113564],{"align":23724},"重置环境",[253,113566,113567,113572],{},[299,113568,113569],{"align":23724},[96,113570,113571],{},"step(action)",[299,113573,113574],{"align":23724},"执行动作",[253,113576,113577,113582],{},[299,113578,113579],{"align":23724},[96,113580,113581],{},"observation_space",[299,113583,113584],{"align":23724},"观测空间",[253,113586,113587,113592],{},[299,113588,113589],{"align":23724},[96,113590,113591],{},"action_space",[299,113593,23642],{"align":23724},[14,113595,113596],{},"一个最小环境需要完成:",[90,113598,113601],{"className":113599,"code":113600,"language":5174,"meta":21},[5172],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[96,113602,113600],{"__ignoreMap":21},[70,113604,113606,100999,113609,104619],{"id":113605},"terminated-和-truncated-的区别",[96,113607,113608],{},"terminated",[96,113610,113611],{},"truncated",[14,113613,113614],{},"Gymnasium 把“结束”拆成两个概念：",[247,113616,113617,113627],{},[250,113618,113619],{},[253,113620,113621,113623,113625],{},[256,113622,104555],{"align":23724},[256,113624,100681],{"align":23724},[256,113626,21174],{"align":23724},[294,113628,113629,113641],{},[253,113630,113631,113635,113638],{},[299,113632,113633],{"align":23724},[96,113634,113608],{},[299,113636,113637],{"align":23724},"任务自然结束",[299,113639,113640],{"align":23724},"机械臂到达目标、机器人摔倒",[253,113642,113643,113647,113650],{},[299,113644,113645],{"align":23724},[96,113646,113611],{},[299,113648,113649],{"align":23724},"因外部限制截断",[299,113651,113652],{"align":23724},"达到最大步数、时间限制",[14,113654,113655],{},"本章中：",[90,113657,113659],{"className":30359,"code":113658,"language":30361,"meta":21,"style":21},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[96,113660,113661,113676],{"__ignoreMap":21},[99,113662,113663,113666,113668,113671,113673],{"class":101,"line":102},[99,113664,113665],{"class":109},"terminated ",[99,113667,155],{"class":105},[99,113669,113670],{"class":109}," dist ",[99,113672,1020],{"class":105},[99,113674,113675],{"class":158}," 0.05\n",[99,113677,113678,113681,113683,113685,113688,113690,113692],{"class":101,"line":22},[99,113679,113680],{"class":109},"truncated ",[99,113682,155],{"class":105},[99,113684,38854],{"class":158},[99,113686,113687],{"class":109},".steps ",[99,113689,1696],{"class":105},[99,113691,38854],{"class":158},[99,113693,113694],{"class":109},".max_steps\n",[14,113696,113697],{},"也就是：",[53,113699,113700,113703],{},[56,113701,113702],{},"末端距离目标小于 0.05，任务成功结束。",[56,113704,113705],{},"步数超过上限，episode 被截断。",[70,113707,113709,100999,113711],{"id":113708},"observation_space-和-action_space",[96,113710,113581],{},[96,113712,113591],{},[14,113714,113715],{},"这两个对象告诉算法：",[90,113717,113720],{"className":113718,"code":113719,"language":5174,"meta":21},[5172],"观测长什么样\n动作允许多大\n",[96,113721,113719],{"__ignoreMap":21},[14,113723,14620],{},[90,113725,113727],{"className":30359,"code":113726,"language":30361,"meta":21,"style":21},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[96,113728,113729],{"__ignoreMap":21},[99,113730,113731,113733,113736,113738,113741,113744,113747,113749,113751,113754,113756,113758,113760,113762,113764,113766,113768,113771,113773,113775],{"class":101,"line":102},[99,113732,30804],{"class":158},[99,113734,113735],{"class":109},".action_space ",[99,113737,155],{"class":105},[99,113739,113740],{"class":109}," spaces.Box(",[99,113742,113743],{"class":5203},"low",[99,113745,113746],{"class":105},"=-",[99,113748,102384],{"class":158},[99,113750,12422],{"class":109},[99,113752,113753],{"class":5203},"high",[99,113755,155],{"class":105},[99,113757,102384],{"class":158},[99,113759,12422],{"class":109},[99,113761,95944],{"class":5203},[99,113763,155],{"class":105},[99,113765,110],{"class":109},[99,113767,187],{"class":158},[99,113769,113770],{"class":109},",), ",[99,113772,93481],{"class":5203},[99,113774,155],{"class":105},[99,113776,113777],{"class":109},"np.float32)\n",[14,113779,113780,113781,113784],{},"表示动作是 2 维数组，每个值都在 ",[96,113782,113783],{},"[-1, 1]"," 范围内。",[90,113786,113788],{"className":30359,"code":113787,"language":30361,"meta":21,"style":21},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[96,113789,113790],{"__ignoreMap":21},[99,113791,113792,113794,113797,113799,113801,113803,113805,113808,113810,113812,113814,113816,113818,113820,113822,113824,113826,113828],{"class":101,"line":102},[99,113793,30804],{"class":158},[99,113795,113796],{"class":109},".observation_space ",[99,113798,155],{"class":105},[99,113800,113740],{"class":109},[99,113802,113743],{"class":5203},[99,113804,113746],{"class":105},[99,113806,113807],{"class":109},"np.inf, ",[99,113809,113753],{"class":5203},[99,113811,155],{"class":105},[99,113813,113807],{"class":109},[99,113815,95944],{"class":5203},[99,113817,155],{"class":105},[99,113819,110],{"class":109},[99,113821,556],{"class":158},[99,113823,113770],{"class":109},[99,113825,93481],{"class":5203},[99,113827,155],{"class":105},[99,113829,113777],{"class":109},[14,113831,113832],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[70,113834,113836],{"id":113835},"frame_skip-是什么","frame_skip 是什么",[90,113838,113840],{"className":30359,"code":113839,"language":30361,"meta":21,"style":21},"self.frame_skip = 5\n",[96,113841,113842],{"__ignoreMap":21},[99,113843,113844,113846,113849,113851],{"class":101,"line":102},[99,113845,30804],{"class":158},[99,113847,113848],{"class":109},".frame_skip ",[99,113850,155],{"class":105},[99,113852,54408],{"class":158},[14,113854,113855,113856,113859,113860,113862],{},"表示外部调用一次 ",[96,113857,113858],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[96,113861,101196],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[41,113864,101234],{"id":101233},[90,113866,113868],{"className":30359,"code":113867,"language":30361,"meta":21,"style":21},"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",[96,113869,113870,113882,113888,113898,113909,113913,113917,113925,113930,113934,113938,113942,113946,113950,113954,113958,113963,113967,113971,113975,113980,113984,113988,113992,113996,114000,114004,114008,114012,114016,114020,114024,114028,114032,114050,114065,114069,114082,114092,114107,114124,114128,114149,114168,114193,114207,114211,114221,114233,114243,114247,114289,114327,114331,114341,114357,114372,114391,114398,114402,114415,114430,114445,114458,114477,114493,114497,114538,114553,114568,114572,114611,114622,114635,114639,114649,114658,114662,114672,114687,114705,114709,114720,114737,114750,114754,114764,114768,114779,114790,114794,114808,114822,114838,114842,114855,114872,114887,114894,114898,114902,114914,114924,114942,114954,114966,114970,114978,114994,115003,115012,115020,115062,115075,115080,115084,115102,115106,115110,115122],{"__ignoreMap":21},[99,113871,113872,113874,113877,113879],{"class":101,"line":102},[99,113873,30373],{"class":105},[99,113875,113876],{"class":109}," gymnasium ",[99,113878,31364],{"class":105},[99,113880,113881],{"class":109}," gym\n",[99,113883,113884,113886],{"class":101,"line":22},[99,113885,30373],{"class":105},[99,113887,101282],{"class":109},[99,113889,113890,113892,113894,113896],{"class":101,"line":1165},[99,113891,30373],{"class":105},[99,113893,31361],{"class":109},[99,113895,31364],{"class":105},[99,113897,31367],{"class":109},[99,113899,113900,113902,113904,113906],{"class":101,"line":1180},[99,113901,30718],{"class":105},[99,113903,113876],{"class":109},[99,113905,30373],{"class":105},[99,113907,113908],{"class":109}," spaces\n",[99,113910,113911],{"class":101,"line":1186},[99,113912,2386],{"emptyLinePlaceholder":26},[99,113914,113915],{"class":101,"line":1200},[99,113916,2386],{"emptyLinePlaceholder":26},[99,113918,113919,113921,113923],{"class":101,"line":1206},[99,113920,101295],{"class":158},[99,113922,13551],{"class":105},[99,113924,101300],{"class":214},[99,113926,113927],{"class":101,"line":1297},[99,113928,113929],{"class":214},"\u003Cmujoco model=\"gym_reacher\">\n",[99,113931,113932],{"class":101,"line":1303},[99,113933,111719],{"class":214},[99,113935,113936],{"class":101,"line":1315},[99,113937,2386],{"emptyLinePlaceholder":26},[99,113939,113940],{"class":101,"line":1598},[99,113941,101319],{"class":214},[99,113943,113944],{"class":101,"line":1603},[99,113945,111737],{"class":214},[99,113947,113948],{"class":101,"line":1609},[99,113949,2386],{"emptyLinePlaceholder":26},[99,113951,113952],{"class":101,"line":1614},[99,113953,111746],{"class":214},[99,113955,113956],{"class":101,"line":1628},[99,113957,111751],{"class":214},[99,113959,113960],{"class":101,"line":1633},[99,113961,113962],{"class":214},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[99,113964,113965],{"class":101,"line":1639},[99,113966,2386],{"emptyLinePlaceholder":26},[99,113968,113969],{"class":101,"line":1660},[99,113970,111765],{"class":214},[99,113972,113973],{"class":101,"line":1665},[99,113974,111770],{"class":214},[99,113976,113977],{"class":101,"line":1679},[99,113978,113979],{"class":214},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[99,113981,113982],{"class":101,"line":1684},[99,113983,111780],{"class":214},[99,113985,113986],{"class":101,"line":1713},[99,113987,106419],{"class":214},[99,113989,113990],{"class":101,"line":1718},[99,113991,101348],{"class":214},[99,113993,113994],{"class":101,"line":1735},[99,113995,101353],{"class":214},[99,113997,113998],{"class":101,"line":1740},[99,113999,2386],{"emptyLinePlaceholder":26},[99,114001,114002],{"class":101,"line":1745},[99,114003,106436],{"class":214},[99,114005,114006],{"class":101,"line":1750},[99,114007,111805],{"class":214},[99,114009,114010],{"class":101,"line":1764},[99,114011,111810],{"class":214},[99,114013,114014],{"class":101,"line":1769},[99,114015,106446],{"class":214},[99,114017,114018],{"class":101,"line":2563},[99,114019,101358],{"class":214},[99,114021,114022],{"class":101,"line":2577},[99,114023,95679],{"class":214},[99,114025,114026],{"class":101,"line":2585},[99,114027,2386],{"emptyLinePlaceholder":26},[99,114029,114030],{"class":101,"line":2590},[99,114031,2386],{"emptyLinePlaceholder":26},[99,114033,114034,114036,114039,114041,114043,114045,114048],{"class":101,"line":2596},[99,114035,14681],{"class":105},[99,114037,114038],{"class":1949}," ReacherEnv",[99,114040,110],{"class":109},[99,114042,113521],{"class":1949},[99,114044,668],{"class":109},[99,114046,114047],{"class":1949},"Env",[99,114049,30767],{"class":109},[99,114051,114052,114055,114057,114059,114062],{"class":101,"line":2602},[99,114053,114054],{"class":109},"    metadata ",[99,114056,155],{"class":105},[99,114058,4434],{"class":109},[99,114060,114061],{"class":214},"\"render_modes\"",[99,114063,114064],{"class":109},": []}\n",[99,114066,114067],{"class":101,"line":2607},[99,114068,2386],{"emptyLinePlaceholder":26},[99,114070,114071,114073,114075,114078,114080],{"class":101,"line":7935},[99,114072,30782],{"class":105},[99,114074,30785],{"class":158},[99,114076,114077],{"class":109},"(self) -> ",[99,114079,95667],{"class":158},[99,114081,3725],{"class":109},[99,114083,114084,114086,114088,114090],{"class":101,"line":7959},[99,114085,30798],{"class":158},[99,114087,17248],{"class":109},[99,114089,30810],{"class":158},[99,114091,1962],{"class":109},[99,114093,114094,114096,114099,114101,114103,114105],{"class":101,"line":7964},[99,114095,30826],{"class":158},[99,114097,114098],{"class":109},".model ",[99,114100,155],{"class":105},[99,114102,101393],{"class":109},[99,114104,101295],{"class":158},[99,114106,116],{"class":109},[99,114108,114109,114111,114114,114116,114119,114121],{"class":101,"line":7970},[99,114110,30826],{"class":158},[99,114112,114113],{"class":109},".data ",[99,114115,155],{"class":105},[99,114117,114118],{"class":109}," mujoco.MjData(",[99,114120,30804],{"class":158},[99,114122,114123],{"class":109},".model)\n",[99,114125,114126],{"class":101,"line":7997},[99,114127,2386],{"emptyLinePlaceholder":26},[99,114129,114130,114132,114135,114137,114140,114142,114145,114147],{"class":101,"line":8002},[99,114131,30826],{"class":158},[99,114133,114134],{"class":109},".tip_site_id ",[99,114136,155],{"class":105},[99,114138,114139],{"class":109}," mujoco.mj_name2id(",[99,114141,30804],{"class":158},[99,114143,114144],{"class":109},".model, mujoco.mjtObj.mjOBJ_SITE, ",[99,114146,111517],{"class":214},[99,114148,116],{"class":109},[99,114150,114151,114153,114156,114158,114160,114162,114164,114166],{"class":101,"line":8008},[99,114152,30826],{"class":158},[99,114154,114155],{"class":109},".target_site_id ",[99,114157,155],{"class":105},[99,114159,114139],{"class":109},[99,114161,30804],{"class":158},[99,114163,114144],{"class":109},[99,114165,111940],{"class":214},[99,114167,116],{"class":109},[99,114169,114170,114172,114174,114176,114178,114180,114183,114185,114187,114189,114191],{"class":101,"line":8020},[99,114171,2483],{"class":105},[99,114173,38854],{"class":158},[99,114175,114134],{"class":109},[99,114177,1020],{"class":105},[99,114179,4079],{"class":158},[99,114181,114182],{"class":105}," or",[99,114184,38854],{"class":158},[99,114186,114155],{"class":109},[99,114188,1020],{"class":105},[99,114190,4079],{"class":158},[99,114192,3725],{"class":109},[99,114194,114195,114198,114200,114202,114205],{"class":101,"line":8032},[99,114196,114197],{"class":105},"            raise",[99,114199,103416],{"class":158},[99,114201,110],{"class":109},[99,114203,114204],{"class":214},"\"required sites not found\"",[99,114206,116],{"class":109},[99,114208,114209],{"class":101,"line":8044},[99,114210,2386],{"emptyLinePlaceholder":26},[99,114212,114213,114215,114217,114219],{"class":101,"line":9703},[99,114214,30826],{"class":158},[99,114216,113848],{"class":109},[99,114218,155],{"class":105},[99,114220,54408],{"class":158},[99,114222,114223,114225,114228,114230],{"class":101,"line":9728},[99,114224,30826],{"class":158},[99,114226,114227],{"class":109},".max_steps ",[99,114229,155],{"class":105},[99,114231,114232],{"class":158}," 200\n",[99,114234,114235,114237,114239,114241],{"class":101,"line":9751},[99,114236,30826],{"class":158},[99,114238,113687],{"class":109},[99,114240,155],{"class":105},[99,114242,47314],{"class":158},[99,114244,114245],{"class":101,"line":9775},[99,114246,2386],{"emptyLinePlaceholder":26},[99,114248,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287],{"class":101,"line":9780},[99,114250,30826],{"class":158},[99,114252,113735],{"class":109},[99,114254,155],{"class":105},[99,114256,113740],{"class":109},[99,114258,113743],{"class":5203},[99,114260,113746],{"class":105},[99,114262,102384],{"class":158},[99,114264,12422],{"class":109},[99,114266,113753],{"class":5203},[99,114268,155],{"class":105},[99,114270,102384],{"class":158},[99,114272,12422],{"class":109},[99,114274,95944],{"class":5203},[99,114276,155],{"class":105},[99,114278,110],{"class":109},[99,114280,187],{"class":158},[99,114282,113770],{"class":109},[99,114284,93481],{"class":5203},[99,114286,155],{"class":105},[99,114288,113777],{"class":109},[99,114290,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325],{"class":101,"line":9785},[99,114292,30826],{"class":158},[99,114294,113796],{"class":109},[99,114296,155],{"class":105},[99,114298,113740],{"class":109},[99,114300,113743],{"class":5203},[99,114302,113746],{"class":105},[99,114304,113807],{"class":109},[99,114306,113753],{"class":5203},[99,114308,155],{"class":105},[99,114310,113807],{"class":109},[99,114312,95944],{"class":5203},[99,114314,155],{"class":105},[99,114316,110],{"class":109},[99,114318,556],{"class":158},[99,114320,113770],{"class":109},[99,114322,93481],{"class":5203},[99,114324,155],{"class":105},[99,114326,113777],{"class":109},[99,114328,114329],{"class":101,"line":9790},[99,114330,2386],{"emptyLinePlaceholder":26},[99,114332,114333,114335,114338],{"class":101,"line":9799},[99,114334,30782],{"class":105},[99,114336,114337],{"class":1949}," _get_obs",[99,114339,114340],{"class":109},"(self) -> np.ndarray:\n",[99,114342,114343,114345,114347,114349,114352,114354],{"class":101,"line":9804},[99,114344,112118],{"class":109},[99,114346,155],{"class":105},[99,114348,38854],{"class":158},[99,114350,114351],{"class":109},".data.site_xpos[",[99,114353,30804],{"class":158},[99,114355,114356],{"class":109},".tip_site_id].copy()\n",[99,114358,114359,114361,114363,114365,114367,114369],{"class":101,"line":9810},[99,114360,112131],{"class":109},[99,114362,155],{"class":105},[99,114364,38854],{"class":158},[99,114366,114351],{"class":109},[99,114368,30804],{"class":158},[99,114370,114371],{"class":109},".target_site_id].copy()\n",[99,114373,114374,114376,114378,114381,114383,114386,114388],{"class":101,"line":9831},[99,114375,110163],{"class":109},[99,114377,155],{"class":105},[99,114379,114380],{"class":109}," np.concatenate([",[99,114382,30804],{"class":158},[99,114384,114385],{"class":109},".data.qpos.copy(), ",[99,114387,30804],{"class":158},[99,114389,114390],{"class":109},".data.qvel.copy(), tip, target])\n",[99,114392,114393,114395],{"class":101,"line":9837},[99,114394,14739],{"class":105},[99,114396,114397],{"class":109}," obs.astype(np.float32)\n",[99,114399,114400],{"class":101,"line":9851},[99,114401,2386],{"emptyLinePlaceholder":26},[99,114403,114404,114406,114409,114411,114413],{"class":101,"line":9857},[99,114405,30782],{"class":105},[99,114407,114408],{"class":1949}," _get_reward",[99,114410,114077],{"class":109},[99,114412,149],{"class":158},[99,114414,3725],{"class":109},[99,114416,114417,114419,114421,114423,114425,114427],{"class":101,"line":9884},[99,114418,112118],{"class":109},[99,114420,155],{"class":105},[99,114422,38854],{"class":158},[99,114424,114351],{"class":109},[99,114426,30804],{"class":158},[99,114428,114429],{"class":109},".tip_site_id]\n",[99,114431,114432,114434,114436,114438,114440,114442],{"class":101,"line":9893},[99,114433,112131],{"class":109},[99,114435,155],{"class":105},[99,114437,38854],{"class":158},[99,114439,114351],{"class":109},[99,114441,30804],{"class":158},[99,114443,114444],{"class":109},".target_site_id]\n",[99,114446,114447,114450,114452,114454,114456],{"class":101,"line":9899},[99,114448,114449],{"class":109},"        dist ",[99,114451,155],{"class":105},[99,114453,111582],{"class":109},[99,114455,642],{"class":105},[99,114457,111587],{"class":109},[99,114459,114460,114463,114465,114467,114469,114472,114474],{"class":101,"line":9907},[99,114461,114462],{"class":109},"        control_cost ",[99,114464,155],{"class":105},[99,114466,112018],{"class":158},[99,114468,6505],{"class":105},[99,114470,114471],{"class":109}," np.sum(np.square(",[99,114473,30804],{"class":158},[99,114475,114476],{"class":109},".data.ctrl))\n",[99,114478,114479,114481,114483,114485,114487,114489,114491],{"class":101,"line":9912},[99,114480,14739],{"class":105},[99,114482,109778],{"class":158},[99,114484,110],{"class":109},[99,114486,642],{"class":105},[99,114488,111577],{"class":109},[99,114490,642],{"class":105},[99,114492,112040],{"class":109},[99,114494,114495],{"class":101,"line":16591},[99,114496,2386],{"emptyLinePlaceholder":26},[99,114498,114499,114501,114504,114507,114509,114512,114514,114516,114518,114520,114522,114525,114528,114530,114532,114534,114536],{"class":101,"line":16597},[99,114500,30782],{"class":105},[99,114502,114503],{"class":1949}," reset",[99,114505,114506],{"class":109},"(self, ",[99,114508,565],{"class":105},[99,114510,114511],{"class":109},", seed: ",[99,114513,113],{"class":158},[99,114515,25098],{"class":105},[99,114517,38914],{"class":158},[99,114519,13551],{"class":105},[99,114521,38914],{"class":158},[99,114523,114524],{"class":109},", options: ",[99,114526,114527],{"class":158},"dict",[99,114529,25098],{"class":105},[99,114531,38914],{"class":158},[99,114533,13551],{"class":105},[99,114535,38914],{"class":158},[99,114537,30767],{"class":109},[99,114539,114540,114542,114545,114548,114550],{"class":101,"line":16620},[99,114541,30798],{"class":158},[99,114543,114544],{"class":109},"().reset(",[99,114546,114547],{"class":5203},"seed",[99,114549,155],{"class":105},[99,114551,114552],{"class":109},"seed)\n",[99,114554,114555,114558,114560,114563,114565],{"class":101,"line":16626},[99,114556,114557],{"class":109},"        mujoco.mj_resetData(",[99,114559,30804],{"class":158},[99,114561,114562],{"class":109},".model, ",[99,114564,30804],{"class":158},[99,114566,114567],{"class":109},".data)\n",[99,114569,114570],{"class":101,"line":16649},[99,114571,2386],{"emptyLinePlaceholder":26},[99,114573,114574,114576,114579,114581,114583,114586,114588,114590,114592,114594,114596,114598,114600,114602,114604,114606,114608],{"class":101,"line":16663},[99,114575,30826],{"class":158},[99,114577,114578],{"class":109},".data.qpos[:] ",[99,114580,155],{"class":105},[99,114582,38854],{"class":158},[99,114584,114585],{"class":109},".np_random.uniform(",[99,114587,113743],{"class":5203},[99,114589,113746],{"class":105},[99,114591,86191],{"class":158},[99,114593,12422],{"class":109},[99,114595,113753],{"class":5203},[99,114597,155],{"class":105},[99,114599,86191],{"class":158},[99,114601,12422],{"class":109},[99,114603,31477],{"class":5203},[99,114605,155],{"class":105},[99,114607,30804],{"class":158},[99,114609,114610],{"class":109},".model.nq)\n",[99,114612,114613,114615,114618,114620],{"class":101,"line":16683},[99,114614,30826],{"class":158},[99,114616,114617],{"class":109},".data.qvel[:] ",[99,114619,155],{"class":105},[99,114621,104742],{"class":158},[99,114623,114624,114627,114629,114631,114633],{"class":101,"line":16689},[99,114625,114626],{"class":109},"        mujoco.mj_forward(",[99,114628,30804],{"class":158},[99,114630,114562],{"class":109},[99,114632,30804],{"class":158},[99,114634,114567],{"class":109},[99,114636,114637],{"class":101,"line":16700},[99,114638,2386],{"emptyLinePlaceholder":26},[99,114640,114641,114643,114645,114647],{"class":101,"line":16723},[99,114642,30826],{"class":158},[99,114644,113687],{"class":109},[99,114646,155],{"class":105},[99,114648,47314],{"class":158},[99,114650,114651,114653,114655],{"class":101,"line":16745},[99,114652,14739],{"class":105},[99,114654,38854],{"class":158},[99,114656,114657],{"class":109},"._get_obs(), {}\n",[99,114659,114660],{"class":101,"line":16750},[99,114661,2386],{"emptyLinePlaceholder":26},[99,114663,114664,114666,114669],{"class":101,"line":16756},[99,114665,30782],{"class":105},[99,114667,114668],{"class":1949}," step",[99,114670,114671],{"class":109},"(self, action):\n",[99,114673,114674,114676,114678,114681,114683,114685],{"class":101,"line":16770},[99,114675,110203],{"class":109},[99,114677,155],{"class":105},[99,114679,114680],{"class":109}," np.asarray(action, ",[99,114682,93481],{"class":5203},[99,114684,155],{"class":105},[99,114686,113777],{"class":109},[99,114688,114689,114691,114693,114695,114697,114700,114702],{"class":101,"line":16783},[99,114690,110203],{"class":109},[99,114692,155],{"class":105},[99,114694,107428],{"class":109},[99,114696,30804],{"class":158},[99,114698,114699],{"class":109},".action_space.low, ",[99,114701,30804],{"class":158},[99,114703,114704],{"class":109},".action_space.high)\n",[99,114706,114707],{"class":101,"line":16788},[99,114708,2386],{"emptyLinePlaceholder":26},[99,114710,114711,114713,114716,114718],{"class":101,"line":16802},[99,114712,30826],{"class":158},[99,114714,114715],{"class":109},".data.ctrl[:] ",[99,114717,155],{"class":105},[99,114719,107451],{"class":109},[99,114721,114722,114724,114726,114728,114730,114732,114734],{"class":101,"line":16807},[99,114723,3389],{"class":105},[99,114725,101482],{"class":109},[99,114727,26032],{"class":105},[99,114729,32424],{"class":158},[99,114731,110],{"class":109},[99,114733,30804],{"class":158},[99,114735,114736],{"class":109},".frame_skip):\n",[99,114738,114739,114742,114744,114746,114748],{"class":101,"line":16813},[99,114740,114741],{"class":109},"            mujoco.mj_step(",[99,114743,30804],{"class":158},[99,114745,114562],{"class":109},[99,114747,30804],{"class":158},[99,114749,114567],{"class":109},[99,114751,114752],{"class":101,"line":16818},[99,114753,2386],{"emptyLinePlaceholder":26},[99,114755,114756,114758,114760,114762],{"class":101,"line":16832},[99,114757,30826],{"class":158},[99,114759,113687],{"class":109},[99,114761,9464],{"class":105},[99,114763,55680],{"class":158},[99,114765,114766],{"class":101,"line":16837},[99,114767,2386],{"emptyLinePlaceholder":26},[99,114769,114770,114772,114774,114776],{"class":101,"line":16842},[99,114771,110163],{"class":109},[99,114773,155],{"class":105},[99,114775,38854],{"class":158},[99,114777,114778],{"class":109},"._get_obs()\n",[99,114780,114781,114783,114785,114787],{"class":101,"line":16856},[99,114782,110268],{"class":109},[99,114784,155],{"class":105},[99,114786,38854],{"class":158},[99,114788,114789],{"class":109},"._get_reward()\n",[99,114791,114792],{"class":101,"line":16868},[99,114793,2386],{"emptyLinePlaceholder":26},[99,114795,114796,114798,114800,114802,114804,114806],{"class":101,"line":16873},[99,114797,112118],{"class":109},[99,114799,155],{"class":105},[99,114801,38854],{"class":158},[99,114803,114351],{"class":109},[99,114805,30804],{"class":158},[99,114807,114429],{"class":109},[99,114809,114810,114812,114814,114816,114818,114820],{"class":101,"line":16886},[99,114811,112131],{"class":109},[99,114813,155],{"class":105},[99,114815,38854],{"class":158},[99,114817,114351],{"class":109},[99,114819,30804],{"class":158},[99,114821,114444],{"class":109},[99,114823,114824,114826,114828,114830,114833,114835],{"class":101,"line":16891},[99,114825,114449],{"class":109},[99,114827,155],{"class":105},[99,114829,109778],{"class":158},[99,114831,114832],{"class":109},"(np.linalg.norm(tip ",[99,114834,642],{"class":105},[99,114836,114837],{"class":109}," target))\n",[99,114839,114840],{"class":101,"line":16896},[99,114841,2386],{"emptyLinePlaceholder":26},[99,114843,114844,114847,114849,114851,114853],{"class":101,"line":16901},[99,114845,114846],{"class":109},"        terminated ",[99,114848,155],{"class":105},[99,114850,113670],{"class":109},[99,114852,1020],{"class":105},[99,114854,113675],{"class":158},[99,114856,114857,114860,114862,114864,114866,114868,114870],{"class":101,"line":16914},[99,114858,114859],{"class":109},"        truncated ",[99,114861,155],{"class":105},[99,114863,38854],{"class":158},[99,114865,113687],{"class":109},[99,114867,1696],{"class":105},[99,114869,38854],{"class":158},[99,114871,113694],{"class":109},[99,114873,114874,114877,114879,114881,114884],{"class":101,"line":16919},[99,114875,114876],{"class":109},"        info ",[99,114878,155],{"class":105},[99,114880,4434],{"class":109},[99,114882,114883],{"class":214},"\"distance\"",[99,114885,114886],{"class":109},": dist}\n",[99,114888,114889,114891],{"class":101,"line":32614},[99,114890,14739],{"class":105},[99,114892,114893],{"class":109}," obs, reward, terminated, truncated, info\n",[99,114895,114896],{"class":101,"line":32620},[99,114897,2386],{"emptyLinePlaceholder":26},[99,114899,114900],{"class":101,"line":32626},[99,114901,2386],{"emptyLinePlaceholder":26},[99,114903,114904,114906,114908,114910,114912],{"class":101,"line":32632},[99,114905,31928],{"class":105},[99,114907,1959],{"class":1949},[99,114909,101379],{"class":109},[99,114911,95667],{"class":158},[99,114913,3725],{"class":109},[99,114915,114916,114919,114921],{"class":101,"line":32638},[99,114917,114918],{"class":109},"    env ",[99,114920,155],{"class":105},[99,114922,114923],{"class":109}," ReacherEnv()\n",[99,114925,114926,114929,114931,114934,114936,114938,114940],{"class":101,"line":32649},[99,114927,114928],{"class":109},"    obs, info ",[99,114930,155],{"class":105},[99,114932,114933],{"class":109}," env.reset(",[99,114935,114547],{"class":5203},[99,114937,155],{"class":105},[99,114939,301],{"class":158},[99,114941,116],{"class":109},[99,114943,114944,114946,114948,114951],{"class":101,"line":32655},[99,114945,31280],{"class":158},[99,114947,110],{"class":109},[99,114949,114950],{"class":214},"\"initial obs shape:\"",[99,114952,114953],{"class":109},", obs.shape)\n",[99,114955,114956,114958,114960,114963],{"class":101,"line":32675},[99,114957,31280],{"class":158},[99,114959,110],{"class":109},[99,114961,114962],{"class":214},"\"initial info:\"",[99,114964,114965],{"class":109},", info)\n",[99,114967,114968],{"class":101,"line":32681},[99,114969,2386],{"emptyLinePlaceholder":26},[99,114971,114972,114974,114976],{"class":101,"line":32692},[99,114973,110134],{"class":109},[99,114975,155],{"class":105},[99,114977,104742],{"class":158},[99,114979,114980,114982,114984,114986,114988,114990,114992],{"class":101,"line":32698},[99,114981,3187],{"class":105},[99,114983,31597],{"class":109},[99,114985,26032],{"class":105},[99,114987,32424],{"class":158},[99,114989,110],{"class":109},[99,114991,810],{"class":158},[99,114993,30767],{"class":109},[99,114995,114996,114998,115000],{"class":101,"line":32704},[99,114997,110203],{"class":109},[99,114999,155],{"class":105},[99,115001,115002],{"class":109}," env.action_space.sample()\n",[99,115004,115005,115008,115010],{"class":101,"line":32710},[99,115006,115007],{"class":109},"        obs, reward, terminated, truncated, info ",[99,115009,155],{"class":105},[99,115011,113396],{"class":109},[99,115013,115014,115016,115018],{"class":101,"line":32716},[99,115015,110278],{"class":109},[99,115017,9464],{"class":105},[99,115019,110283],{"class":109},[99,115021,115022,115024,115026,115028,115030,115033,115035,115037,115040,115042,115044,115047,115049,115051,115054,115056,115058,115060],{"class":101,"line":32722},[99,115023,32432],{"class":158},[99,115025,110],{"class":109},[99,115027,110312],{"class":214},[99,115029,110315],{"class":109},[99,115031,115032],{"class":214},"\"reward:\"",[99,115034,12422],{"class":109},[99,115036,31999],{"class":158},[99,115038,115039],{"class":109},"(reward, ",[99,115041,181],{"class":158},[99,115043,110326],{"class":109},[99,115045,115046],{"class":214},"\"distance:\"",[99,115048,12422],{"class":109},[99,115050,31999],{"class":158},[99,115052,115053],{"class":109},"(info[",[99,115055,114883],{"class":214},[99,115057,112183],{"class":109},[99,115059,181],{"class":158},[99,115061,30478],{"class":109},[99,115063,115064,115066,115069,115072],{"class":101,"line":32728},[99,115065,2483],{"class":105},[99,115067,115068],{"class":109}," terminated ",[99,115070,115071],{"class":105},"or",[99,115073,115074],{"class":109}," truncated:\n",[99,115076,115077],{"class":101,"line":32734},[99,115078,115079],{"class":105},"            break\n",[99,115081,115082],{"class":101,"line":32754},[99,115083,2386],{"emptyLinePlaceholder":26},[99,115085,115086,115088,115090,115092,115094,115096,115098,115100],{"class":101,"line":32760},[99,115087,31280],{"class":158},[99,115089,110],{"class":109},[99,115091,110357],{"class":214},[99,115093,12422],{"class":109},[99,115095,31999],{"class":158},[99,115097,110364],{"class":109},[99,115099,181],{"class":158},[99,115101,30478],{"class":109},[99,115103,115104],{"class":101,"line":32776},[99,115105,2386],{"emptyLinePlaceholder":26},[99,115107,115108],{"class":101,"line":32782},[99,115109,2386],{"emptyLinePlaceholder":26},[99,115111,115112,115114,115116,115118,115120],{"class":101,"line":32796},[99,115113,1517],{"class":105},[99,115115,31201],{"class":158},[99,115117,101540],{"class":105},[99,115119,101543],{"class":214},[99,115121,3725],{"class":109},[99,115123,115124],{"class":101,"line":32802},[99,115125,101550],{"class":109},[14,115127,103551],{},[90,115129,115131],{"className":23810,"code":115130,"language":23812,"meta":21,"style":21},"touch ch8_gym_env.py\n",[96,115132,115133],{"__ignoreMap":21},[99,115134,115135,115137],{"class":101,"line":102},[99,115136,101264],{"class":1949},[99,115138,115139],{"class":214}," ch8_gym_env.py\n",[14,115141,110425],{},[90,115143,115145],{"className":23810,"code":115144,"language":23812,"meta":21,"style":21},"python ch8_gym_env.py\n",[96,115146,115147],{"__ignoreMap":21},[99,115148,115149,115151],{"class":101,"line":102},[99,115150,30361],{"class":1949},[99,115152,115139],{"class":214},[70,115154,101553],{"id":101553},[14,115156,115157],{},"继承 Gymnasium 环境：",[90,115159,115161],{"className":30359,"code":115160,"language":30361,"meta":21,"style":21},"class ReacherEnv(gym.Env):\n",[96,115162,115163],{"__ignoreMap":21},[99,115164,115165,115167,115169,115171,115173,115175,115177],{"class":101,"line":102},[99,115166,14681],{"class":105},[99,115168,114038],{"class":1949},[99,115170,110],{"class":109},[99,115172,113521],{"class":1949},[99,115174,668],{"class":109},[99,115176,114047],{"class":1949},[99,115178,30767],{"class":109},[14,115180,115181],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115183,115184],{},"初始化模型：",[90,115186,115188],{"className":30359,"code":115187,"language":30361,"meta":21,"style":21},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[96,115189,115190,115204],{"__ignoreMap":21},[99,115191,115192,115194,115196,115198,115200,115202],{"class":101,"line":102},[99,115193,30804],{"class":158},[99,115195,114098],{"class":109},[99,115197,155],{"class":105},[99,115199,101393],{"class":109},[99,115201,101295],{"class":158},[99,115203,116],{"class":109},[99,115205,115206,115208,115210,115212,115214,115216],{"class":101,"line":22},[99,115207,30804],{"class":158},[99,115209,114113],{"class":109},[99,115211,155],{"class":105},[99,115213,114118],{"class":109},[99,115215,30804],{"class":158},[99,115217,114123],{"class":109},[14,115219,115220,115221,115223],{},"这和前面章节一样，只是现在放到了类的 ",[96,115222,30810],{}," 里。",[14,115225,115226],{},"缓存 site ID：",[90,115228,115230],{"className":30359,"code":115229,"language":30361,"meta":21,"style":21},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[96,115231,115232,115246],{"__ignoreMap":21},[99,115233,115234,115236,115238,115240,115242,115244],{"class":101,"line":102},[99,115235,30804],{"class":158},[99,115237,114134],{"class":109},[99,115239,155],{"class":105},[99,115241,114139],{"class":109},[99,115243,89535],{"class":158},[99,115245,116],{"class":109},[99,115247,115248,115250,115252,115254,115256,115258],{"class":101,"line":22},[99,115249,30804],{"class":158},[99,115251,114155],{"class":109},[99,115253,155],{"class":105},[99,115255,114139],{"class":109},[99,115257,89535],{"class":158},[99,115259,116],{"class":109},[14,115261,115262],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115264,115265],{},"reset：",[90,115267,115269],{"className":30359,"code":115268,"language":30361,"meta":21,"style":21},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[96,115270,115271],{"__ignoreMap":21},[99,115272,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305],{"class":101,"line":102},[99,115274,31928],{"class":105},[99,115276,114503],{"class":1949},[99,115278,114506],{"class":109},[99,115280,565],{"class":105},[99,115282,114511],{"class":109},[99,115284,113],{"class":158},[99,115286,25098],{"class":105},[99,115288,38914],{"class":158},[99,115290,13551],{"class":105},[99,115292,38914],{"class":158},[99,115294,114524],{"class":109},[99,115296,114527],{"class":158},[99,115298,25098],{"class":105},[99,115300,38914],{"class":158},[99,115302,13551],{"class":105},[99,115304,38914],{"class":158},[99,115306,30767],{"class":109},[14,115308,115309,115311],{},[96,115310,70037],{}," 做四件事：",[53,115313,115314,115317,115320,115323],{},[56,115315,115316],{},"设置随机种子。",[56,115318,115319],{},"重置 MuJoCo data。",[56,115321,115322],{},"随机初始化关节角。",[56,115324,115325],{},"返回初始观测和 info。",[14,115327,115328],{},"step：",[90,115330,115332],{"className":30359,"code":115331,"language":30361,"meta":21,"style":21},"def step(self, action):\n",[96,115333,115334],{"__ignoreMap":21},[99,115335,115336,115338,115340],{"class":101,"line":102},[99,115337,31928],{"class":105},[99,115339,114668],{"class":1949},[99,115341,114671],{"class":109},[14,115343,115344,115346],{},[96,115345,107115],{}," 做六件事：",[53,115348,115349,115352,115358,115361,115364,115367],{},[56,115350,115351],{},"检查并裁剪 action。",[56,115353,115354,115355,28366],{},"写入 ",[96,115356,115357],{},"self.data.ctrl",[56,115359,115360],{},"连续推进若干个 MuJoCo 物理步。",[56,115362,115363],{},"计算新观测。",[56,115365,115366],{},"计算奖励和结束条件。",[56,115368,115369],{},"返回 Gymnasium 标准五元组。",[70,115371,101689],{"id":101689},[90,115373,115375],{"className":30359,"code":115374,"language":30361,"meta":21,"style":21},"import gymnasium as gym\n",[96,115376,115377],{"__ignoreMap":21},[99,115378,115379,115381,115383,115385],{"class":101,"line":102},[99,115380,30373],{"class":105},[99,115382,113876],{"class":109},[99,115384,31364],{"class":105},[99,115386,113881],{"class":109},[14,115388,115389,115390,115392,115393,115396],{},"导入 Gymnasium，并起别名 ",[96,115391,113521],{},"。后面写 ",[96,115394,115395],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[90,115398,115400],{"className":30359,"code":115399,"language":30361,"meta":21,"style":21},"from gymnasium import spaces\n",[96,115401,115402],{"__ignoreMap":21},[99,115403,115404,115406,115408,115410],{"class":101,"line":102},[99,115405,30718],{"class":105},[99,115407,113876],{"class":109},[99,115409,30373],{"class":105},[99,115411,113908],{"class":109},[14,115413,115414,115415,115418],{},"导入空间定义工具。",[96,115416,115417],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[90,115420,115421],{"className":30359,"code":115160,"language":30361,"meta":21,"style":21},[96,115422,115423],{"__ignoreMap":21},[99,115424,115425,115427,115429,115431,115433,115435,115437],{"class":101,"line":102},[99,115426,14681],{"class":105},[99,115428,114038],{"class":1949},[99,115430,110],{"class":109},[99,115432,113521],{"class":1949},[99,115434,668],{"class":109},[99,115436,114047],{"class":1949},[99,115438,30767],{"class":109},[14,115440,115441,115442,115445,115446,115448,115449,100999,115451,115453],{},"定义一个类，名字叫 ",[96,115443,115444],{},"ReacherEnv","。括号里的 ",[96,115447,115395],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[96,115450,70037],{},[96,115452,107115],{}," 这两个核心方法。",[90,115455,115457],{"className":30359,"code":115456,"language":30361,"meta":21,"style":21},"metadata = {\"render_modes\": []}\n",[96,115458,115459],{"__ignoreMap":21},[99,115460,115461,115464,115466,115468,115470],{"class":101,"line":102},[99,115462,115463],{"class":109},"metadata ",[99,115465,155],{"class":105},[99,115467,4434],{"class":109},[99,115469,114061],{"class":214},[99,115471,114064],{"class":109},[14,115473,115474],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[90,115476,115478],{"className":30359,"code":115477,"language":30361,"meta":21,"style":21},"def __init__(self) -> None:\n",[96,115479,115480],{"__ignoreMap":21},[99,115481,115482,115484,115486,115488,115490],{"class":101,"line":102},[99,115483,31928],{"class":105},[99,115485,30785],{"class":158},[99,115487,114077],{"class":109},[99,115489,95667],{"class":158},[99,115491,3725],{"class":109},[14,115493,115494,115496,115497,28366],{},[96,115495,30810],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[96,115498,115499],{},"env = ReacherEnv()",[90,115501,115503],{"className":30359,"code":115502,"language":30361,"meta":21,"style":21},"super().__init__()\n",[96,115504,115505],{"__ignoreMap":21},[99,115506,115507,115510,115512,115514],{"class":101,"line":102},[99,115508,115509],{"class":158},"super",[99,115511,17248],{"class":109},[99,115513,30810],{"class":158},[99,115515,1962],{"class":109},[14,115517,115518,115519,115521],{},"调用父类 ",[96,115520,115395],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[90,115523,115524],{"className":30359,"code":115187,"language":30361,"meta":21,"style":21},[96,115525,115526,115540],{"__ignoreMap":21},[99,115527,115528,115530,115532,115534,115536,115538],{"class":101,"line":102},[99,115529,30804],{"class":158},[99,115531,114098],{"class":109},[99,115533,155],{"class":105},[99,115535,101393],{"class":109},[99,115537,101295],{"class":158},[99,115539,116],{"class":109},[99,115541,115542,115544,115546,115548,115550,115552],{"class":101,"line":22},[99,115543,30804],{"class":158},[99,115545,114113],{"class":109},[99,115547,155],{"class":105},[99,115549,114118],{"class":109},[99,115551,30804],{"class":158},[99,115553,114123],{"class":109},[14,115555,115556,115557,115559,115560,100999,115563,115566],{},"把 MuJoCo 模型和状态保存到 ",[96,115558,30804],{}," 上。",[96,115561,115562],{},"self.model",[96,115564,115565],{},"self.data"," 表示这个环境对象自己的模型和状态。",[90,115568,115569],{"className":30359,"code":115229,"language":30361,"meta":21,"style":21},[96,115570,115571,115585],{"__ignoreMap":21},[99,115572,115573,115575,115577,115579,115581,115583],{"class":101,"line":102},[99,115574,30804],{"class":158},[99,115576,114134],{"class":109},[99,115578,155],{"class":105},[99,115580,114139],{"class":109},[99,115582,89535],{"class":158},[99,115584,116],{"class":109},[99,115586,115587,115589,115591,115593,115595,115597],{"class":101,"line":22},[99,115588,30804],{"class":158},[99,115590,114155],{"class":109},[99,115592,155],{"class":105},[99,115594,114139],{"class":109},[99,115596,89535],{"class":158},[99,115598,116],{"class":109},[14,115600,115601,115602,100999,115605,115608],{},"提前查好 tip 和 target 的 site ID。这样 ",[96,115603,115604],{},"_get_obs",[96,115606,115607],{},"_get_reward"," 里就不用每次按名字查找。",[90,115610,115612],{"className":30359,"code":115611,"language":30361,"meta":21,"style":21},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[96,115613,115614,115624,115634],{"__ignoreMap":21},[99,115615,115616,115618,115620,115622],{"class":101,"line":102},[99,115617,30804],{"class":158},[99,115619,113848],{"class":109},[99,115621,155],{"class":105},[99,115623,54408],{"class":158},[99,115625,115626,115628,115630,115632],{"class":101,"line":22},[99,115627,30804],{"class":158},[99,115629,114227],{"class":109},[99,115631,155],{"class":105},[99,115633,114232],{"class":158},[99,115635,115636,115638,115640,115642],{"class":101,"line":1165},[99,115637,30804],{"class":158},[99,115639,113687],{"class":109},[99,115641,155],{"class":105},[99,115643,47314],{"class":158},[14,115645,115646,115649,115650,115653,115654,115657],{},[96,115647,115648],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[96,115651,115652],{},"max_steps"," 是一个 episode 最多运行多少步。",[96,115655,115656],{},"steps"," 记录当前 episode 已经走了多少步。",[90,115659,115660],{"className":30359,"code":113726,"language":30361,"meta":21,"style":21},[96,115661,115662],{"__ignoreMap":21},[99,115663,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702],{"class":101,"line":102},[99,115665,30804],{"class":158},[99,115667,113735],{"class":109},[99,115669,155],{"class":105},[99,115671,113740],{"class":109},[99,115673,113743],{"class":5203},[99,115675,113746],{"class":105},[99,115677,102384],{"class":158},[99,115679,12422],{"class":109},[99,115681,113753],{"class":5203},[99,115683,155],{"class":105},[99,115685,102384],{"class":158},[99,115687,12422],{"class":109},[99,115689,95944],{"class":5203},[99,115691,155],{"class":105},[99,115693,110],{"class":109},[99,115695,187],{"class":158},[99,115697,113770],{"class":109},[99,115699,93481],{"class":5203},[99,115701,155],{"class":105},[99,115703,113777],{"class":109},[14,115705,115706,115707,115710,115711,100999,115714,115717],{},"定义动作空间。",[96,115708,115709],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[96,115712,115713],{},"low=-1.0",[96,115715,115716],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[90,115719,115720],{"className":30359,"code":113787,"language":30361,"meta":21,"style":21},[96,115721,115722],{"__ignoreMap":21},[99,115723,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758],{"class":101,"line":102},[99,115725,30804],{"class":158},[99,115727,113796],{"class":109},[99,115729,155],{"class":105},[99,115731,113740],{"class":109},[99,115733,113743],{"class":5203},[99,115735,113746],{"class":105},[99,115737,113807],{"class":109},[99,115739,113753],{"class":5203},[99,115741,155],{"class":105},[99,115743,113807],{"class":109},[99,115745,95944],{"class":5203},[99,115747,155],{"class":105},[99,115749,110],{"class":109},[99,115751,556],{"class":158},[99,115753,113770],{"class":109},[99,115755,93481],{"class":5203},[99,115757,155],{"class":105},[99,115759,113777],{"class":109},[14,115761,115762,115763,115766,115767,115770],{},"定义观测空间。",[96,115764,115765],{},"shape=(10,)"," 表示观测是 10 个数。",[96,115768,115769],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[90,115772,115774],{"className":30359,"code":115773,"language":30361,"meta":21,"style":21},"def _get_obs(self) -> np.ndarray:\n",[96,115775,115776],{"__ignoreMap":21},[99,115777,115778,115780,115782],{"class":101,"line":102},[99,115779,31928],{"class":105},[99,115781,114337],{"class":1949},[99,115783,114340],{"class":109},[14,115785,115786,115787,115789],{},"定义内部函数，用来生成观测。函数名前面的 ",[96,115788,1102],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[90,115791,115793],{"className":30359,"code":115792,"language":30361,"meta":21,"style":21},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[96,115794,115795,115809],{"__ignoreMap":21},[99,115796,115797,115799,115801,115803,115805,115807],{"class":101,"line":102},[99,115798,111549],{"class":109},[99,115800,155],{"class":105},[99,115802,38854],{"class":158},[99,115804,114351],{"class":109},[99,115806,30804],{"class":158},[99,115808,114356],{"class":109},[99,115810,115811,115813,115815,115817,115819,115821],{"class":101,"line":22},[99,115812,111559],{"class":109},[99,115814,155],{"class":105},[99,115816,38854],{"class":158},[99,115818,114351],{"class":109},[99,115820,30804],{"class":158},[99,115822,114371],{"class":109},[14,115824,115825],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[90,115827,115829],{"className":30359,"code":115828,"language":30361,"meta":21,"style":21},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[96,115830,115831,115847],{"__ignoreMap":21},[99,115832,115833,115835,115837,115839,115841,115843,115845],{"class":101,"line":102},[99,115834,110835],{"class":109},[99,115836,155],{"class":105},[99,115838,114380],{"class":109},[99,115840,30804],{"class":158},[99,115842,114385],{"class":109},[99,115844,30804],{"class":158},[99,115846,114390],{"class":109},[99,115848,115849,115851],{"class":101,"line":22},[99,115850,17033],{"class":105},[99,115852,114397],{"class":109},[14,115854,115855,115856,115859,115860,115862],{},"拼接观测，并转换成 ",[96,115857,115858],{},"float32","。很多强化学习库默认使用 ",[96,115861,115858],{},"，所以这里主动转换。",[90,115864,115865],{"className":30359,"code":115268,"language":30361,"meta":21,"style":21},[96,115866,115867],{"__ignoreMap":21},[99,115868,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901],{"class":101,"line":102},[99,115870,31928],{"class":105},[99,115872,114503],{"class":1949},[99,115874,114506],{"class":109},[99,115876,565],{"class":105},[99,115878,114511],{"class":109},[99,115880,113],{"class":158},[99,115882,25098],{"class":105},[99,115884,38914],{"class":158},[99,115886,13551],{"class":105},[99,115888,38914],{"class":158},[99,115890,114524],{"class":109},[99,115892,114527],{"class":158},[99,115894,25098],{"class":105},[99,115896,38914],{"class":158},[99,115898,13551],{"class":105},[99,115900,38914],{"class":158},[99,115902,30767],{"class":109},[14,115904,115905,115906,115908,115909,115912],{},"定义 reset。",[96,115907,114547],{}," 用来控制随机数，保证实验可以复现。",[96,115910,115911],{},"options"," 用来接收额外配置，本章暂时不用。",[90,115914,115916],{"className":30359,"code":115915,"language":30361,"meta":21,"style":21},"super().reset(seed=seed)\n",[96,115917,115918],{"__ignoreMap":21},[99,115919,115920,115922,115924,115926,115928],{"class":101,"line":102},[99,115921,115509],{"class":158},[99,115923,114544],{"class":109},[99,115925,114547],{"class":5203},[99,115927,155],{"class":105},[99,115929,114552],{"class":109},[14,115931,115932,115933,115936],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[96,115934,115935],{},"self.np_random"," 生成可复现的随机数。",[90,115938,115940],{"className":30359,"code":115939,"language":30361,"meta":21,"style":21},"mujoco.mj_resetData(self.model, self.data)\n",[96,115941,115942],{"__ignoreMap":21},[99,115943,115944,115947,115949,115951,115953],{"class":101,"line":102},[99,115945,115946],{"class":109},"mujoco.mj_resetData(",[99,115948,30804],{"class":158},[99,115950,114562],{"class":109},[99,115952,30804],{"class":158},[99,115954,114567],{"class":109},[14,115956,115957],{},"把 MuJoCo 状态重置到默认状态。",[90,115959,115961],{"className":30359,"code":115960,"language":30361,"meta":21,"style":21},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[96,115962,115963],{"__ignoreMap":21},[99,115964,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997],{"class":101,"line":102},[99,115966,30804],{"class":158},[99,115968,114578],{"class":109},[99,115970,155],{"class":105},[99,115972,38854],{"class":158},[99,115974,114585],{"class":109},[99,115976,113743],{"class":5203},[99,115978,113746],{"class":105},[99,115980,86191],{"class":158},[99,115982,12422],{"class":109},[99,115984,113753],{"class":5203},[99,115986,155],{"class":105},[99,115988,86191],{"class":158},[99,115990,12422],{"class":109},[99,115992,31477],{"class":5203},[99,115994,155],{"class":105},[99,115996,30804],{"class":158},[99,115998,114610],{"class":109},[14,116000,115322,116001,116004,116005,116008,116009,116011],{},[96,116002,116003],{},"[:]"," 表示修改整个数组。",[96,116006,116007],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[96,116010,102131],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[90,116013,116015],{"className":30359,"code":116014,"language":30361,"meta":21,"style":21},"self.data.qvel[:] = 0.0\n",[96,116016,116017],{"__ignoreMap":21},[99,116018,116019,116021,116023,116025],{"class":101,"line":102},[99,116020,30804],{"class":158},[99,116022,114617],{"class":109},[99,116024,155],{"class":105},[99,116026,104742],{"class":158},[14,116028,116029],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[90,116031,116033],{"className":30359,"code":116032,"language":30361,"meta":21,"style":21},"self.steps = 0\nreturn self._get_obs(), {}\n",[96,116034,116035,116045],{"__ignoreMap":21},[99,116036,116037,116039,116041,116043],{"class":101,"line":102},[99,116038,30804],{"class":158},[99,116040,113687],{"class":109},[99,116042,155],{"class":105},[99,116044,47314],{"class":158},[99,116046,116047,116049,116051],{"class":101,"line":22},[99,116048,17033],{"class":105},[99,116050,38854],{"class":158},[99,116052,114657],{"class":109},[14,116054,116055],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[90,116057,116058],{"className":30359,"code":115331,"language":30361,"meta":21,"style":21},[96,116059,116060],{"__ignoreMap":21},[99,116061,116062,116064,116066],{"class":101,"line":102},[99,116063,31928],{"class":105},[99,116065,114668],{"class":1949},[99,116067,114671],{"class":109},[14,116069,116070],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[90,116072,116074],{"className":30359,"code":116073,"language":30361,"meta":21,"style":21},"action = np.asarray(action, dtype=np.float32)\n",[96,116075,116076],{"__ignoreMap":21},[99,116077,116078,116080,116082,116084,116086,116088],{"class":101,"line":102},[99,116079,107423],{"class":109},[99,116081,155],{"class":105},[99,116083,114680],{"class":109},[99,116085,93481],{"class":5203},[99,116087,155],{"class":105},[99,116089,113777],{"class":109},[14,116091,116092,116093,28366],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[96,116094,115858],{},[90,116096,116098],{"className":30359,"code":116097,"language":30361,"meta":21,"style":21},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[96,116099,116100],{"__ignoreMap":21},[99,116101,116102,116104,116106,116108,116110,116112,116114],{"class":101,"line":102},[99,116103,107423],{"class":109},[99,116105,155],{"class":105},[99,116107,107428],{"class":109},[99,116109,30804],{"class":158},[99,116111,114699],{"class":109},[99,116113,30804],{"class":158},[99,116115,114704],{"class":109},[14,116117,116118],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[90,116120,116122],{"className":30359,"code":116121,"language":30361,"meta":21,"style":21},"self.data.ctrl[:] = action\n",[96,116123,116124],{"__ignoreMap":21},[99,116125,116126,116128,116130,116132],{"class":101,"line":102},[99,116127,30804],{"class":158},[99,116129,114715],{"class":109},[99,116131,155],{"class":105},[99,116133,107451],{"class":109},[14,116135,116136],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[90,116138,116140],{"className":30359,"code":116139,"language":30361,"meta":21,"style":21},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[96,116141,116142,116158],{"__ignoreMap":21},[99,116143,116144,116146,116148,116150,116152,116154,116156],{"class":101,"line":102},[99,116145,3011],{"class":105},[99,116147,101482],{"class":109},[99,116149,26032],{"class":105},[99,116151,32424],{"class":158},[99,116153,110],{"class":109},[99,116155,30804],{"class":158},[99,116157,114736],{"class":109},[99,116159,116160,116163,116165,116167,116169],{"class":101,"line":22},[99,116161,116162],{"class":109},"    mujoco.mj_step(",[99,116164,30804],{"class":158},[99,116166,114562],{"class":109},[99,116168,30804],{"class":158},[99,116170,114567],{"class":109},[14,116172,116173,116174,116177,116178,116180,116181,28366],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[96,116175,116176],{},"frame_skip=5","，所以外部调用一次 ",[96,116179,113858],{},"，内部实际执行 5 次 ",[96,116182,101196],{},[90,116184,116186],{"className":30359,"code":116185,"language":30361,"meta":21,"style":21},"self.steps += 1\n",[96,116187,116188],{"__ignoreMap":21},[99,116189,116190,116192,116194,116196],{"class":101,"line":102},[99,116191,30804],{"class":158},[99,116193,113687],{"class":109},[99,116195,9464],{"class":105},[99,116197,55680],{"class":158},[14,116199,116200],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[90,116202,116204],{"className":30359,"code":116203,"language":30361,"meta":21,"style":21},"obs = self._get_obs()\nreward = self._get_reward()\n",[96,116205,116206,116216],{"__ignoreMap":21},[99,116207,116208,116210,116212,116214],{"class":101,"line":102},[99,116209,110835],{"class":109},[99,116211,155],{"class":105},[99,116213,38854],{"class":158},[99,116215,114778],{"class":109},[99,116217,116218,116220,116222,116224],{"class":101,"line":22},[99,116219,110986],{"class":109},[99,116221,155],{"class":105},[99,116223,38854],{"class":158},[99,116225,114789],{"class":109},[14,116227,116228],{},"计算新的观测和奖励。",[90,116230,116232],{"className":30359,"code":116231,"language":30361,"meta":21,"style":21},"dist = float(np.linalg.norm(tip - target))\n",[96,116233,116234],{"__ignoreMap":21},[99,116235,116236,116238,116240,116242,116244,116246],{"class":101,"line":102},[99,116237,111577],{"class":109},[99,116239,155],{"class":105},[99,116241,109778],{"class":158},[99,116243,114832],{"class":109},[99,116245,642],{"class":105},[99,116247,114837],{"class":109},[14,116249,116250],{},"计算末端到目标的距离，并转换成 Python float。",[90,116252,116253],{"className":30359,"code":113658,"language":30361,"meta":21,"style":21},[96,116254,116255,116267],{"__ignoreMap":21},[99,116256,116257,116259,116261,116263,116265],{"class":101,"line":102},[99,116258,113665],{"class":109},[99,116260,155],{"class":105},[99,116262,113670],{"class":109},[99,116264,1020],{"class":105},[99,116266,113675],{"class":158},[99,116268,116269,116271,116273,116275,116277,116279,116281],{"class":101,"line":22},[99,116270,113680],{"class":109},[99,116272,155],{"class":105},[99,116274,38854],{"class":158},[99,116276,113687],{"class":109},[99,116278,1696],{"class":105},[99,116280,38854],{"class":158},[99,116282,113694],{"class":109},[14,116284,116285],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[90,116287,116289],{"className":30359,"code":116288,"language":30361,"meta":21,"style":21},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[96,116290,116291,116304],{"__ignoreMap":21},[99,116292,116293,116296,116298,116300,116302],{"class":101,"line":102},[99,116294,116295],{"class":109},"info ",[99,116297,155],{"class":105},[99,116299,4434],{"class":109},[99,116301,114883],{"class":214},[99,116303,114886],{"class":109},[99,116305,116306,116308],{"class":101,"line":22},[99,116307,17033],{"class":105},[99,116309,114893],{"class":109},[14,116311,116312,116315],{},[96,116313,116314],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[90,116317,116319],{"className":30359,"code":116318,"language":30361,"meta":21,"style":21},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[96,116320,116321,116330],{"__ignoreMap":21},[99,116322,116323,116326,116328],{"class":101,"line":102},[99,116324,116325],{"class":109},"env ",[99,116327,155],{"class":105},[99,116329,114923],{"class":109},[99,116331,116332,116334,116336,116338,116340,116342,116344],{"class":101,"line":22},[99,116333,113381],{"class":109},[99,116335,155],{"class":105},[99,116337,114933],{"class":109},[99,116339,114547],{"class":5203},[99,116341,155],{"class":105},[99,116343,301],{"class":158},[99,116345,116],{"class":109},[14,116347,116348,116349,116352],{},"创建环境并重置。",[96,116350,116351],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[90,116354,116356],{"className":30359,"code":116355,"language":30361,"meta":21,"style":21},"action = env.action_space.sample()\n",[96,116357,116358],{"__ignoreMap":21},[99,116359,116360,116362,116364],{"class":101,"line":102},[99,116361,107423],{"class":109},[99,116363,155],{"class":105},[99,116365,115002],{"class":109},[14,116367,116368],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[41,116370,102297],{"id":102296},[14,116372,105465],{},[90,116374,116377],{"className":116375,"code":116376,"language":5174,"meta":21},[5172],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[96,116378,116376],{"__ignoreMap":21},[14,116380,116381],{},"这个环境已经具备强化学习环境的基本结构。",[14,116383,116384],{},"主函数里使用随机动作：",[90,116386,116387],{"className":30359,"code":116355,"language":30361,"meta":21,"style":21},[96,116388,116389],{"__ignoreMap":21},[99,116390,116391,116393,116395],{"class":101,"line":102},[99,116392,107423],{"class":109},[99,116394,155],{"class":105},[99,116396,115002],{"class":109},[14,116398,116399],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[41,116401,102329],{"id":102328},[53,116403,116404,116407,116413,116422,116431,116440,116446],{},[56,116405,116406],{},"运行程序。",[56,116408,116409,116410,28366],{},"确认 ",[96,116411,116412],{},"obs.shape == (10,)",[56,116414,111162,116415,116418,116419,28366],{},[96,116416,116417],{},"env.action_space","，应类似 ",[96,116420,116421],{},"Box(-1.0, 1.0, (2,), float32)",[56,116423,105566,116424,116427,116428,28366],{},[96,116425,116426],{},"self.max_steps = 10","，确认环境会更快 ",[96,116429,116430],{},"truncated=True",[56,116432,102392,116433,102395,116436,116439],{},[96,116434,116435],{},"terminated = dist \u003C 0.05",[96,116437,116438],{},"dist \u003C 0.2","，观察是否更容易结束。",[56,116441,102392,116442,116445],{},[96,116443,116444],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[56,116447,116448,116449,116451,116452,116455],{},"在 ",[96,116450,116314],{}," 里加入 ",[96,116453,116454],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[41,116457,102434],{"id":102433},[70,116459,116461],{"id":116460},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116463,116464,116465,116467],{},"Gymnasium 的 ",[96,116466,107115],{}," 返回 5 个值:",[90,116469,116471],{"className":30359,"code":116470,"language":30361,"meta":21,"style":21},"obs, reward, terminated, truncated, info\n",[96,116472,116473],{"__ignoreMap":21},[99,116474,116475],{"class":101,"line":102},[99,116476,116470],{"class":109},[14,116478,116479],{},"不是旧 Gym 的 4 个值。",[70,116481,116483,116486],{"id":116482},"datactrl-action-维度错误",[96,116484,116485],{},"data.ctrl[:] = action"," 维度错误",[14,116488,102504],{},[90,116490,116492],{"className":30359,"code":116491,"language":30361,"meta":21,"style":21},"print(self.model.nu)\nprint(action.shape)\n",[96,116493,116494,116505],{"__ignoreMap":21},[99,116495,116496,116498,116500,116502],{"class":101,"line":102},[99,116497,30396],{"class":158},[99,116499,110],{"class":109},[99,116501,30804],{"class":158},[99,116503,116504],{"class":109},".model.nu)\n",[99,116506,116507,116509],{"class":101,"line":22},[99,116508,30396],{"class":158},[99,116510,116511],{"class":109},"(action.shape)\n",[14,116513,116514],{},"两者必须匹配。",[70,116516,116518],{"id":116517},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116520,102443],{},[90,116522,116524],{"className":30359,"code":116523,"language":30361,"meta":21,"style":21},"mujoco.mj_forward(self.model, self.data)\n",[96,116525,116526],{"__ignoreMap":21},[99,116527,116528,116531,116533,116535,116537],{"class":101,"line":102},[99,116529,116530],{"class":109},"mujoco.mj_forward(",[99,116532,30804],{"class":158},[99,116534,114562],{"class":109},[99,116536,30804],{"class":158},[99,116538,114567],{"class":109},[70,116540,116542,116544],{"id":116541},"observation_space-维度和-obs-不一致",[96,116543,113581],{}," 维度和 obs 不一致",[14,116546,102556],{},[90,116548,116550],{"className":30359,"code":116549,"language":30361,"meta":21,"style":21},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[96,116551,116552,116562,116569],{"__ignoreMap":21},[99,116553,116554,116556,116558,116560],{"class":101,"line":102},[99,116555,110835],{"class":109},[99,116557,155],{"class":105},[99,116559,38854],{"class":158},[99,116561,114778],{"class":109},[99,116563,116564,116566],{"class":101,"line":22},[99,116565,30396],{"class":158},[99,116567,116568],{"class":109},"(obs.shape)\n",[99,116570,116571,116573,116575,116577],{"class":101,"line":1165},[99,116572,30396],{"class":158},[99,116574,110],{"class":109},[99,116576,30804],{"class":158},[99,116578,116579],{"class":109},".observation_space.shape)\n",[14,116581,116582],{},"两者必须一致。本章观测是：",[90,116584,116587],{"className":116585,"code":116586,"language":5174,"meta":21},[5172],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[96,116588,116586],{"__ignoreMap":21},[70,116590,116592],{"id":116591},"action-超过范围","action 超过范围",[14,116594,116595],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[90,116597,116598],{"className":30359,"code":116097,"language":30361,"meta":21,"style":21},[96,116599,116600],{"__ignoreMap":21},[99,116601,116602,116604,116606,116608,116610,116612,116614],{"class":101,"line":102},[99,116603,107423],{"class":109},[99,116605,155],{"class":105},[99,116607,107428],{"class":109},[99,116609,30804],{"class":158},[99,116611,114699],{"class":109},[99,116613,30804],{"class":158},[99,116615,114704],{"class":109},[14,116617,116618,116619,28366],{},"这能避免无效动作直接写入 ",[96,116620,101057],{},[70,116622,116624],{"id":116623},"忘记返回-info","忘记返回 info",[14,116626,116464,116627,100999,116629,116631],{},[96,116628,70037],{},[96,116630,107115],{}," 都会返回 info：",[90,116633,116634],{"className":30359,"code":113374,"language":30361,"meta":21,"style":21},[96,116635,116636,116644],{"__ignoreMap":21},[99,116637,116638,116640,116642],{"class":101,"line":102},[99,116639,113381],{"class":109},[99,116641,155],{"class":105},[99,116643,113386],{"class":109},[99,116645,116646,116648,116650],{"class":101,"line":22},[99,116647,113391],{"class":109},[99,116649,155],{"class":105},[99,116651,113396],{"class":109},[14,116653,116654,116655,28366],{},"即使暂时没有额外信息，也返回 ",[96,116656,32440],{},[41,116658,116660],{"id":116659},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116662,116663],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[53,116665,116666,116669,116672,116675,116678,116681],{},[56,116667,116668],{},"更稳定的 reward。",[56,116670,116671],{},"合理的 episode 长度。",[56,116673,116674],{},"可重复的随机目标采样。",[56,116676,116677],{},"render 接口。",[56,116679,116680],{},"环境注册代码。",[56,116682,116683],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116685,116686],{},"如果只是自己写训练循环，最小形式是：",[90,116688,116690],{"className":30359,"code":116689,"language":30361,"meta":21,"style":21},"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",[96,116691,116692,116700,116716,116720,116736,116745,116754,116764],{"__ignoreMap":21},[99,116693,116694,116696,116698],{"class":101,"line":102},[99,116695,116325],{"class":109},[99,116697,155],{"class":105},[99,116699,114923],{"class":109},[99,116701,116702,116704,116706,116708,116710,116712,116714],{"class":101,"line":22},[99,116703,113381],{"class":109},[99,116705,155],{"class":105},[99,116707,114933],{"class":109},[99,116709,114547],{"class":5203},[99,116711,155],{"class":105},[99,116713,301],{"class":158},[99,116715,116],{"class":109},[99,116717,116718],{"class":101,"line":1165},[99,116719,2386],{"emptyLinePlaceholder":26},[99,116721,116722,116724,116726,116728,116730,116732,116734],{"class":101,"line":1180},[99,116723,3011],{"class":105},[99,116725,101482],{"class":109},[99,116727,26032],{"class":105},[99,116729,32424],{"class":158},[99,116731,110],{"class":109},[99,116733,6397],{"class":158},[99,116735,30767],{"class":109},[99,116737,116738,116741,116743],{"class":101,"line":1186},[99,116739,116740],{"class":109},"    action ",[99,116742,155],{"class":105},[99,116744,115002],{"class":109},[99,116746,116747,116750,116752],{"class":101,"line":1200},[99,116748,116749],{"class":109},"    obs, reward, terminated, truncated, info ",[99,116751,155],{"class":105},[99,116753,113396],{"class":109},[99,116755,116756,116758,116760,116762],{"class":101,"line":1206},[99,116757,3087],{"class":105},[99,116759,115068],{"class":109},[99,116761,115071],{"class":105},[99,116763,115074],{"class":109},[99,116765,116766,116769,116771],{"class":101,"line":1297},[99,116767,116768],{"class":109},"        obs, info ",[99,116770,155],{"class":105},[99,116772,113386],{"class":109},[41,116774,116776],{"id":116775},"_9本章小结","9.本章小结",[14,116778,116779],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[90,116781,116784],{"className":116782,"code":116783,"language":5174,"meta":21},[5172],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[96,116785,116783],{"__ignoreMap":21},[14,116787,116788],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5113,116790,116791],{},"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":21,"searchDepth":22,"depth":22,"links":116793},[116794,116795,116796,116803,116807,116808,116809,116819,116820],{"id":100627,"depth":22,"text":100628},{"id":100750,"depth":22,"text":100751},{"id":101025,"depth":22,"text":101026,"children":116797},[116798,116800,116802],{"id":113605,"depth":1165,"text":116799},"terminated 和 truncated 的区别",{"id":113708,"depth":1165,"text":116801},"observation_space 和 action_space",{"id":113835,"depth":1165,"text":113836},{"id":101233,"depth":22,"text":101234,"children":116804},[116805,116806],{"id":101553,"depth":1165,"text":101553},{"id":101689,"depth":1165,"text":101689},{"id":102296,"depth":22,"text":102297},{"id":102328,"depth":22,"text":102329},{"id":102433,"depth":22,"text":102434,"children":116810},[116811,116812,116814,116815,116817,116818],{"id":116460,"depth":1165,"text":116461},{"id":116482,"depth":1165,"text":116813},"data.ctrl[:] = action 维度错误",{"id":116517,"depth":1165,"text":116518},{"id":116541,"depth":1165,"text":116816},"observation_space 维度和 obs 不一致",{"id":116591,"depth":1165,"text":116592},{"id":116623,"depth":1165,"text":116624},{"id":116659,"depth":22,"text":116660},{"id":116775,"depth":22,"text":116776},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113358,"description":21},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116827,"title":116828,"body":116829,"description":117252,"extension":24,"meta":117253,"navigation":26,"path":117254,"seo":117255,"stem":117256,"__hash__":117257},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116830,"toc":117242},[116831,116835,116838,116841,116861,116867,116873,116883,116886,116889,116909,116912,116916,116919,116925,116928,116942,116945,116948,117022,117025,117031,117034,117057,117060,117110,117113,117119,117122,117125,117128,117147,117150,117156,117159,117162,117165,117185,117188,117191,117194,117239],[10,116832,116834],{"id":116833},"mujoco-学习","MuJoCo 学习",[14,116836,116837],{},"初版",[14,116839,116840],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[53,116842,116843,116846,116849,116858],{},[56,116844,116845],{},"MuJoCo 模型文件在描述什么。",[56,116847,116848],{},"Python 代码怎样读取和推进仿真。",[56,116850,116851,322,116853,322,116855,116857],{},[96,116852,104011],{},[96,116854,104341],{},[96,116856,104344],{}," 这些数组为什么重要。",[56,116859,116860],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116862,116863,116864,116866],{},"默认环境为 Fedora 44、Python >= 3.10、",[96,116865,101008],{}," 官方 Python bindings。",[14,116868,116869,116870,116872],{},"注意：本文禁止使用 ",[96,116871,100993],{},"。所有示例均使用：",[90,116874,116875],{"className":30359,"code":101559,"language":30361,"meta":21,"style":21},[96,116876,116877],{"__ignoreMap":21},[99,116878,116879,116881],{"class":101,"line":102},[99,116880,30373],{"class":105},[99,116882,101282],{"class":109},[41,116884,116885],{"id":116885},"适合谁阅读",[14,116887,116888],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[53,116890,116891,116894,116897,116900],{},[56,116892,116893],{},"没学过 MuJoCo，只会一点 Python。",[56,116895,116896],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[56,116898,116899],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[56,116901,116902,116903,116905,116906,116908],{},"以前接触过 ",[96,116904,100993],{},"，现在想迁移到官方 ",[96,116907,101002],{}," Python bindings。",[14,116910,116911],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[41,116913,116915],{"id":116914},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116917,116918],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[90,116920,116923],{"className":116921,"code":116922,"language":5174,"meta":21},[5172],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[96,116924,116922],{"__ignoreMap":21},[14,116926,116927],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[53,116929,116930,116933,116936,116939],{},[56,116931,116932],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[56,116934,116935],{},"快速测试控制算法，不必一开始就上真实机器人。",[56,116937,116938],{},"生成强化学习环境。",[56,116940,116941],{},"采集状态、动作、图像、奖励等训练数据。",[41,116943,116944],{"id":116944},"学习前的心智模型",[14,116946,116947],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[247,116949,116950,116962],{},[250,116951,116952],{},[253,116953,116954,116957,116960],{},[256,116955,116956],{"align":23724},"部分",[256,116958,116959],{"align":23724},"负责什么",[256,116961,21174],{"align":23724},[294,116963,116964,116975,116987,116999,117011],{},[253,116965,116966,116969,116972],{},[299,116967,116968],{"align":23724},"MJCF XML",[299,116970,116971],{"align":23724},"定义世界和机器人结构",[299,116973,116974],{"align":23724},"地面、盒子、关节、电机、摄像头",[253,116976,116977,116981,116984],{},[299,116978,116979],{"align":23724},[96,116980,100690],{},[299,116982,116983],{"align":23724},"编译后的静态模型",[299,116985,116986],{"align":23724},"有几个关节、有几个电机、时间步长是多少",[253,116988,116989,116993,116996],{},[299,116990,116991],{"align":23724},[96,116992,100700],{},[299,116994,116995],{"align":23724},"运行中的动态状态",[299,116997,116998],{"align":23724},"当前时间、位置、速度、电机输入",[253,117000,117001,117005,117008],{},[299,117002,117003],{"align":23724},[96,117004,101196],{},[299,117006,117007],{"align":23724},"推进一步物理仿真",[299,117009,117010],{"align":23724},"根据重力、力、碰撞更新状态",[253,117012,117013,117016,117019],{},[299,117014,117015],{"align":23724},"Viewer \u002F Renderer",[299,117017,117018],{"align":23724},"把仿真显示出来",[299,117020,117021],{"align":23724},"打开窗口或保存图片",[14,117023,117024],{},"一句话总结：",[90,117026,117029],{"className":117027,"code":117028,"language":5174,"meta":21},[5172],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[96,117030,117028],{"__ignoreMap":21},[14,117032,117033],{},"参考来源：",[1117,117035,117036,117043,117050],{},[56,117037,117038,117039],{},"MuJoCo Python 官方文档：",[348,117040,117041],{"href":117041,"rel":117042},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23853],[56,117044,117045,117046],{},"MuJoCo XML Reference：",[348,117047,117048],{"href":117048,"rel":117049},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23853],[56,117051,117052,117053],{},"MuJoCo Overview：",[348,117054,117055],{"href":117055,"rel":117056},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23853],[41,117058,117059],{"id":117059},"章节目录",[53,117061,117062,117068,117074,117080,117086,117092,117098,117104],{},[56,117063,117064],{},[348,117065,117067],{"href":117066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[56,117069,117070],{},[348,117071,117073],{"href":117072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[56,117075,117076],{},[348,117077,117079],{"href":117078},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[56,117081,117082],{},[348,117083,117085],{"href":117084},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[56,117087,117088],{},[348,117089,117091],{"href":117090},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[56,117093,117094],{},[348,117095,117097],{"href":117096},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[56,117099,117100],{},[348,117101,117103],{"href":117102},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[56,117105,117106],{},[348,117107,117109],{"href":117108},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[41,117111,117112],{"id":117112},"推荐学习路线",[90,117114,117117],{"className":117115,"code":117116,"language":5174,"meta":21},[5172],"环境安装\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",[96,117118,117116],{"__ignoreMap":21},[14,117120,117121],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[41,117123,117124],{"id":117124},"建议的目录结构",[14,117126,117127],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[90,117129,117131],{"className":23810,"code":117130,"language":23812,"meta":21,"style":21},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[96,117132,117133,117141],{"__ignoreMap":21},[99,117134,117135,117137,117139],{"class":101,"line":102},[99,117136,101247],{"class":1949},[99,117138,29197],{"class":158},[99,117140,101252],{"class":214},[99,117142,117143,117145],{"class":101,"line":22},[99,117144,101257],{"class":158},[99,117146,101252],{"class":214},[14,117148,117149],{},"每一章的代码都单独保存：",[90,117151,117154],{"className":117152,"code":117153,"language":5174,"meta":21},[5172],"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",[96,117155,117153],{"__ignoreMap":21},[14,117157,117158],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[41,117160,117161],{"id":117161},"学习方法",[14,117163,117164],{},"每章建议按这个顺序操作：",[53,117166,117167,117170,117173,117176,117179,117182],{},[56,117168,117169],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[56,117171,117172],{},"复制最小可运行代码，保存成指定文件。",[56,117174,117175],{},"运行代码，确认没有报错。",[56,117177,117178],{},"对照“运行结果说明”理解输出。",[56,117180,117181],{},"做“验证步骤”，主动改一两个参数。",[56,117183,117184],{},"遇到报错先看“常见错误与解决方案”。",[14,117186,117187],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[41,117189,117190],{"id":117190},"全局排错顺序",[14,117192,117193],{},"遇到问题时，按下面顺序查：",[53,117195,117196,117202,117208,117213,117216,117219,117226,117236],{},[56,117197,117198,117199],{},"Python 环境是否激活：",[96,117200,117201],{},"which python",[56,117203,117204,117205],{},"MuJoCo 是否能导入：",[96,117206,117207],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[56,117209,117210,117211],{},"是否误装了 ",[96,117212,100993],{},[56,117214,117215],{},"XML 标签是否闭合、属性是否拼写正确",[56,117217,117218],{},"actuator 引用的 joint 名字是否存在",[56,117220,117221,117223,117224],{},[96,117222,101057],{}," 的长度是否等于 ",[96,117225,102139],{},[56,117227,105566,117228,82520,117230,117232,117233],{},[96,117229,104011],{},[96,117231,104341],{}," 后是否调用了 ",[96,117234,117235],{},"mujoco.mj_forward",[56,117237,117238],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5113,117240,117241],{},"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":21,"searchDepth":22,"depth":22,"links":117243},[117244,117245,117246,117247,117248,117249,117250,117251],{"id":116885,"depth":22,"text":116885},{"id":116914,"depth":22,"text":116915},{"id":116944,"depth":22,"text":116944},{"id":117059,"depth":22,"text":117059},{"id":117112,"depth":22,"text":117112},{"id":117124,"depth":22,"text":117124},{"id":117161,"depth":22,"text":117161},{"id":117190,"depth":22,"text":117190},"仿真搭建。",{"category":23366},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116828,"description":117252},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117259,"title":117260,"body":117261,"description":23364,"extension":24,"meta":117716,"navigation":26,"path":117717,"seo":117718,"stem":117719,"__hash__":117720},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117262,"toc":117714},[117263,117266,117269,117275,117711],[10,117264,117260],{"id":117265},"_1-最常用的基本操作更新",[14,117267,117268],{},"装linux系统教程：",[14,117270,117271],{},[348,117272,117273],{"href":117273,"rel":117274},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23853],[90,117276,117280],{"className":117277,"code":117278,"language":117279,"meta":21,"style":21},"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",[96,117281,117282,117287,117292,117301,117306,117315,117320,117340,117345,117356,117361,117370,117375,117403,117408,117427,117432,117451,117455,117460,117476,117480,117485,117515,117519,117524,117540,117544,117549,117564,117568,117573,117589,117593,117598,117610,117622,117626,117631,117648,117652,117657,117675,117679,117684,117693,117697,117702],{"__ignoreMap":21},[99,117283,117284],{"class":101,"line":102},[99,117285,117286],{"class":168},"#更新相关的知识\n",[99,117288,117289],{"class":101,"line":22},[99,117290,117291],{"class":168},"# 更新软件包列表（从服务器获取最新软件信息）\n",[99,117293,117294,117296,117299],{"class":101,"line":1165},[99,117295,24565],{"class":1949},[99,117297,117298],{"class":214}," apt",[99,117300,26231],{"class":214},[99,117302,117303],{"class":101,"line":1180},[99,117304,117305],{"class":168},"# 升级所有可更新的软件包（不删除旧包）\n",[99,117307,117308,117310,117312],{"class":101,"line":1186},[99,117309,24565],{"class":1949},[99,117311,117298],{"class":214},[99,117313,117314],{"class":214}," upgrade\n",[99,117316,117317],{"class":101,"line":1200},[99,117318,117319],{"class":168},"#更新和升级软件包\n",[99,117321,117322,117324,117326,117329,117331,117333,117335,117338],{"class":101,"line":1206},[99,117323,24565],{"class":1949},[99,117325,117298],{"class":214},[99,117327,117328],{"class":214}," update",[99,117330,26179],{"class":109},[99,117332,24565],{"class":1949},[99,117334,117298],{"class":214},[99,117336,117337],{"class":214}," upgrade",[99,117339,100962],{"class":158},[99,117341,117342],{"class":101,"line":1297},[99,117343,117344],{"class":168},"#列出可更新的软件包及版本信息\n",[99,117346,117347,117350,117353],{"class":101,"line":1303},[99,117348,117349],{"class":1949},"apt",[99,117351,117352],{"class":214}," list",[99,117354,117355],{"class":158}," --upgradable\n",[99,117357,117358],{"class":101,"line":1315},[99,117359,117360],{"class":168},"#彻底升级（处理依赖关系，可能删除旧包）\n",[99,117362,117363,117365,117367],{"class":101,"line":1598},[99,117364,24565],{"class":1949},[99,117366,117298],{"class":214},[99,117368,117369],{"class":214}," full-upgrade\n",[99,117371,117372],{"class":101,"line":1603},[99,117373,117374],{"class":168},"#设置指定版本\n",[99,117376,117377,117379,117381,117383,117385,117388,117390,117392,117394,117396,117399,117401],{"class":101,"line":1609},[99,117378,24565],{"class":1949},[99,117380,117298],{"class":214},[99,117382,23822],{"class":214},[99,117384,28883],{"class":105},[99,117386,117387],{"class":214},"package_nam",[99,117389,184],{"class":109},[99,117391,1070],{"class":105},[99,117393,155],{"class":214},[99,117395,1020],{"class":105},[99,117397,117398],{"class":214},"version_numbe",[99,117400,780],{"class":109},[99,117402,51288],{"class":105},[99,117404,117405],{"class":101,"line":1614},[99,117406,117407],{"class":168},"#只安装软件包不升级\n",[99,117409,117410,117412,117414,117416,117418,117420,117422,117424],{"class":101,"line":1628},[99,117411,24565],{"class":1949},[99,117413,117298],{"class":214},[99,117415,23822],{"class":214},[99,117417,28883],{"class":105},[99,117419,117387],{"class":214},[99,117421,184],{"class":109},[99,117423,1070],{"class":105},[99,117425,117426],{"class":158}," --no-upgrade\n",[99,117428,117429],{"class":101,"line":1633},[99,117430,117431],{"class":168},"#只升级，不存在就不安装\n",[99,117433,117434,117436,117438,117440,117442,117444,117446,117448],{"class":101,"line":1639},[99,117435,24565],{"class":1949},[99,117437,117298],{"class":214},[99,117439,23822],{"class":214},[99,117441,28883],{"class":105},[99,117443,117387],{"class":214},[99,117445,184],{"class":109},[99,117447,1070],{"class":105},[99,117449,117450],{"class":158}," --only-upgrade\n",[99,117452,117453],{"class":101,"line":1660},[99,117454,2386],{"emptyLinePlaceholder":26},[99,117456,117457],{"class":101,"line":1665},[99,117458,117459],{"class":168},"#安装指定的软件命令\n",[99,117461,117462,117464,117466,117468,117470,117472,117474],{"class":101,"line":1679},[99,117463,24565],{"class":1949},[99,117465,117298],{"class":214},[99,117467,23822],{"class":214},[99,117469,28883],{"class":105},[99,117471,117387],{"class":214},[99,117473,184],{"class":109},[99,117475,51288],{"class":105},[99,117477,117478],{"class":101,"line":1684},[99,117479,2386],{"emptyLinePlaceholder":26},[99,117481,117482],{"class":101,"line":1713},[99,117483,117484],{"class":168},"#安装多个软件包\n",[99,117486,117487,117489,117491,117493,117495,117498,117501,117503,117505,117508,117510,117512],{"class":101,"line":1718},[99,117488,24565],{"class":1949},[99,117490,117298],{"class":214},[99,117492,23822],{"class":214},[99,117494,28883],{"class":105},[99,117496,117497],{"class":214},"package_",[99,117499,117500],{"class":105},"1>",[99,117502,28883],{"class":105},[99,117504,117497],{"class":214},[99,117506,117507],{"class":105},"2>",[99,117509,28883],{"class":105},[99,117511,117497],{"class":214},[99,117513,117514],{"class":105},"3>\n",[99,117516,117517],{"class":101,"line":1735},[99,117518,2386],{"emptyLinePlaceholder":26},[99,117520,117521],{"class":101,"line":1740},[99,117522,117523],{"class":168},"#更新指定的软件命令\n",[99,117525,117526,117528,117530,117532,117534,117536,117538],{"class":101,"line":1745},[99,117527,24565],{"class":1949},[99,117529,117298],{"class":214},[99,117531,117328],{"class":214},[99,117533,28883],{"class":105},[99,117535,117387],{"class":214},[99,117537,184],{"class":109},[99,117539,51288],{"class":105},[99,117541,117542],{"class":101,"line":1750},[99,117543,2386],{"emptyLinePlaceholder":26},[99,117545,117546],{"class":101,"line":1764},[99,117547,117548],{"class":168},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[99,117550,117551,117553,117556,117558,117560,117562],{"class":101,"line":1769},[99,117552,117349],{"class":1949},[99,117554,117555],{"class":214}," show",[99,117557,28883],{"class":105},[99,117559,117387],{"class":214},[99,117561,184],{"class":109},[99,117563,51288],{"class":105},[99,117565,117566],{"class":101,"line":2563},[99,117567,2386],{"emptyLinePlaceholder":26},[99,117569,117570],{"class":101,"line":2577},[99,117571,117572],{"class":168},"#删除软件包命令\n",[99,117574,117575,117577,117579,117581,117583,117585,117587],{"class":101,"line":2585},[99,117576,24565],{"class":1949},[99,117578,117298],{"class":214},[99,117580,26068],{"class":214},[99,117582,28883],{"class":105},[99,117584,117387],{"class":214},[99,117586,184],{"class":109},[99,117588,51288],{"class":105},[99,117590,117591],{"class":101,"line":2590},[99,117592,2386],{"emptyLinePlaceholder":26},[99,117594,117595],{"class":101,"line":2596},[99,117596,117597],{"class":168},"# 清理旧版本和缓存（释放磁盘空间）\n",[99,117599,117600,117602,117604,117607],{"class":101,"line":2602},[99,117601,24565],{"class":1949},[99,117603,117298],{"class":214},[99,117605,117606],{"class":214}," autoremove",[99,117608,117609],{"class":168},"  # 删除不再需要的依赖和库文件\n",[99,117611,117612,117614,117616,117619],{"class":101,"line":2607},[99,117613,24565],{"class":1949},[99,117615,117298],{"class":214},[99,117617,117618],{"class":214}," clean",[99,117620,117621],{"class":168},"       # 清理下载的缓存包\n",[99,117623,117624],{"class":101,"line":7935},[99,117625,2386],{"emptyLinePlaceholder":26},[99,117627,117628],{"class":101,"line":7959},[99,117629,117630],{"class":168},"#移除软件包及配置文件\n",[99,117632,117633,117635,117637,117640,117642,117644,117646],{"class":101,"line":7964},[99,117634,24565],{"class":1949},[99,117636,117298],{"class":214},[99,117638,117639],{"class":214}," purge",[99,117641,28883],{"class":105},[99,117643,117387],{"class":214},[99,117645,184],{"class":109},[99,117647,51288],{"class":105},[99,117649,117650],{"class":101,"line":7970},[99,117651,2386],{"emptyLinePlaceholder":26},[99,117653,117654],{"class":101,"line":7997},[99,117655,117656],{"class":168},"#查找软件包命令\n",[99,117658,117659,117661,117663,117666,117668,117671,117673],{"class":101,"line":8002},[99,117660,24565],{"class":1949},[99,117662,117298],{"class":214},[99,117664,117665],{"class":214}," search",[99,117667,28883],{"class":105},[99,117669,117670],{"class":214},"keywor",[99,117672,424],{"class":109},[99,117674,51288],{"class":105},[99,117676,117677],{"class":101,"line":8008},[99,117678,2386],{"emptyLinePlaceholder":26},[99,117680,117681],{"class":101,"line":8020},[99,117682,117683],{"class":168},"#列出所有已安装的包\n",[99,117685,117686,117688,117690],{"class":101,"line":8032},[99,117687,117349],{"class":1949},[99,117689,117352],{"class":214},[99,117691,117692],{"class":158}," --installed\n",[99,117694,117695],{"class":101,"line":8044},[99,117696,2386],{"emptyLinePlaceholder":26},[99,117698,117699],{"class":101,"line":9703},[99,117700,117701],{"class":168},"#列出所有已安装的包的版本信息\n",[99,117703,117704,117706,117708],{"class":101,"line":9728},[99,117705,117349],{"class":1949},[99,117707,117352],{"class":214},[99,117709,117710],{"class":158}," --all-versions\n",[5113,117712,117713],{},"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":21,"searchDepth":22,"depth":22,"links":117715},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117260,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117722,"title":117723,"body":117724,"description":23364,"extension":24,"meta":118465,"navigation":26,"path":118466,"seo":118467,"stem":118468,"__hash__":118469},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117725,"toc":118452},[117726,117729,117733,117736,117742,117746,117750,117756,117761,117766,117771,117776,117781,117784,117787,117790,117793,117797,117800,117805,117808,117813,117816,117821,117828,117831,117834,117837,117840,117843,117854,117858,117862,117867,117872,117876,117881,117885,117890,117894,117898,117903,117906,117951,117956,117960,117964,117969,117975,117980,117990,117995,118005,118010,118015,118042,118046,118049,118054,118057,118082,118086,118091,118094,118099,118104,118124,118129,118132,118147,118151,118204,118207,118212,118216,118219,118234,118237,118240,118245,118249,118253,118256,118260,118264,118267,118272,118277,118281,118288,118296,118299,118306,118311,118316,118319,118324,118331,118336,118343,118347,118349,118354,118358,118361,118364,118369,118372,118377,118380,118385,118390,118395,118399,118404,118408,118449],[10,117727,117723],{"id":117728},"_2-linux装机教程",[41,117730,117732],{"id":117731},"_21-实体机","2.1 实体机",[14,117734,117735],{},"使用清华源：（Ubuntu24.04）",[14,117737,117738],{},[348,117739,117740],{"href":117740,"rel":117741},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23853],[41,117743,117745],{"id":117744},"_22-普通虚拟机","2.2 普通虚拟机",[70,117747,117749],{"id":117748},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117751,117752],{},[348,117753,117754],{"href":117754,"rel":117755},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23853],[14,117757,117758],{},[1448,117759],{"alt":21,"src":117760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117762,117763],{},[1448,117764],{"alt":21,"src":117765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117767,117768],{},[1448,117769],{"alt":21,"src":117770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117772,117773],{},[1448,117774],{"alt":21,"src":117775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117777,117778],{},[1448,117779],{"alt":21,"src":117780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117782,117783],{},"内存4G（4096MB）；",[14,117785,117786],{},"CPU给4个核；",[14,117788,117789],{},"硬盘动态分配60G；",[14,117791,117792],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[70,117794,117796],{"id":117795},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117798,117799],{},"按照1.1的步骤下载Ubuntu",[14,117801,117802],{},[1448,117803],{"alt":21,"src":117804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117806,117807],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117809,117810],{},[1448,117811],{"alt":21,"src":117812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117814,117815],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117817,117818],{},[1448,117819],{"alt":21,"src":117820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117822,117823,117824,117827],{},"选择“正常安装”(找不到都用Alt+F7)， ",[259,117825,117826],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117829,117830],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117832,117833],{},"将改动写入磁盘吗 继续",[14,117835,117836],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117838,117839],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117841,117842],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117844,117845,117846,117849,117850,117853],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[259,117847,117848],{},"除了"," 选不发送系统信息与不升级之外， ",[259,117851,117852],{},"其它"," 都跳过或前进）",[70,117855,117857],{"id":117856},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21985,117859,117861],{"id":117860},"_2231-全屏","2.2.3.1 全屏",[14,117863,117864],{},[1448,117865],{"alt":21,"src":117866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117868,117869],{},[1448,117870],{"alt":21,"src":117871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21985,117873,117875],{"id":117874},"_2232-文件交换","2.2.3.2 文件交换",[14,117877,117878],{},[1448,117879],{"alt":21,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21985,117882,117884],{"id":117883},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117886,117887],{},[1448,117888],{"alt":21,"src":117889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[41,117891,117893],{"id":117892},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[70,117895,117897],{"id":117896},"_231-简介与优缺点","2.3.1 简介与优缺点",[53,117899,117900],{},[56,117901,117902],{},"什么情况下推荐？",[14,117904,117905],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[53,117907,117908],{"start":22},[56,117909,117910,117911],{},"优缺点：",[53,117912,117913,117943],{},[56,117914,117915,117916],{},"优点：",[53,117917,117918,117921,117928,117931,117934,117937,117940],{},[56,117919,117920],{},"WSL2是最好的Linux发行版;(bushi)",[56,117922,117923,117924,117927],{},"性能损耗极低。且比在Windows上跑深度性能 ",[259,117925,117926],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[56,117929,117930],{},"非常方便调用USB设备，可以USB直通;",[56,117932,117933],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[56,117935,117936],{},"非常方便Win与WSL2互相传文件等协同操作;",[56,117938,117939],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[56,117941,117942],{},"非常方便使用Windows的VScode远程开发;",[56,117944,117945,117946],{},"缺点：",[53,117947,117948],{},[56,117949,117950],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117952,117953],{},[1448,117954],{"alt":21,"src":117955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[70,117957,117959],{"id":117958},"_232-安装教程","2.3.2 安装教程",[21985,117961,117963],{"id":117962},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[53,117965,117966],{},[56,117967,117968],{},"方法一(图形界面)",[14,117970,117971,117972,24607],{},"用Win+R输入",[96,117973,117974],{},"appwiz.cpl",[14,117976,117977],{},[1448,117978],{"alt":21,"src":117979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117981,117982,117983,117986,117987,26462],{},"点击OK进入 ",[259,117984,117985],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[259,117988,117989],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,117991,117992],{},[1448,117993],{"alt":21,"src":117994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,117996,117997,117998,100999,118001,118004],{},"选择 ",[259,117999,118000],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[259,118002,118003],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118006,118007],{},[1448,118008],{"alt":21,"src":118009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[53,118011,118012],{"start":22},[56,118013,118014],{},"方法二(命令行)",[90,118016,118020],{"className":118017,"code":118018,"language":118019,"meta":21,"style":21},"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",[96,118021,118022,118027,118032,118037],{"__ignoreMap":21},[99,118023,118024],{"class":101,"line":102},[99,118025,118026],{},"# 开启 Linux 子系统\n",[99,118028,118029],{"class":101,"line":22},[99,118030,118031],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[99,118033,118034],{"class":101,"line":1165},[99,118035,118036],{},"# 开启虚拟机平台\n",[99,118038,118039],{"class":101,"line":1180},[99,118040,118041],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21985,118043,118045],{"id":118044},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118047,118048],{},"用管理员权限打开powershell",[14,118050,118051],{},[1448,118052],{"alt":21,"src":118053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118055,118056],{},"升级WSL并设置默认版本为WSL2",[90,118058,118060],{"className":118017,"code":118059,"language":118019,"meta":21,"style":21},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[96,118061,118062,118067,118072,118077],{"__ignoreMap":21},[99,118063,118064],{"class":101,"line":102},[99,118065,118066],{},"# 更新 wsl\n",[99,118068,118069],{"class":101,"line":22},[99,118070,118071],{},"wsl --update\n",[99,118073,118074],{"class":101,"line":1165},[99,118075,118076],{},"# 将 wsl 版本设置为 wsl2\n",[99,118078,118079],{"class":101,"line":1180},[99,118080,118081],{},"wsl --set-default-version 2\n",[21985,118083,118085],{"id":118084},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[53,118087,118088],{},[56,118089,118090],{},"方式一(商店下载)",[14,118092,118093],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118095,118096],{},[1448,118097],{"alt":21,"src":118098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[53,118100,118101],{"start":22},[56,118102,118103],{},"方式二(命令行安装)",[90,118105,118107],{"className":118017,"code":118106,"language":118019,"meta":21,"style":21},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[96,118108,118109,118114,118119],{"__ignoreMap":21},[99,118110,118111],{"class":101,"line":102},[99,118112,118113],{},"# 列出可安装的 Linux 版本\n",[99,118115,118116],{"class":101,"line":22},[99,118117,118118],{},"#（需要科学手段）\n",[99,118120,118121],{"class":101,"line":1165},[99,118122,118123],{},"wsl --list --online\n",[14,118125,118126],{},[1448,118127],{"alt":21,"src":118128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118130,118131],{},"选择对应发行版并安装",[90,118133,118135],{"className":118017,"code":118134,"language":118019,"meta":21,"style":21},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[96,118136,118137,118142],{"__ignoreMap":21},[99,118138,118139],{"class":101,"line":102},[99,118140,118141],{},"# Ubuntu安装完毕后需要重启系统\n",[99,118143,118144],{"class":101,"line":22},[99,118145,118146],{},"wsl --install -d Ubuntu-24.04\n",[21985,118148,118150],{"id":118149},"_2324-查看系统状态","2.3.2.4 查看系统状态",[90,118152,118154],{"className":118017,"code":118153,"language":118019,"meta":21,"style":21},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[96,118155,118156,118161,118166,118171,118176,118180,118184,118189,118194,118199],{"__ignoreMap":21},[99,118157,118158],{"class":101,"line":102},[99,118159,118160],{},"# 查看 wsl\n",[99,118162,118163],{"class":101,"line":22},[99,118164,118165],{},"wsl -l\n",[99,118167,118168],{"class":101,"line":1165},[99,118169,118170],{},"# 查看 wsl 运行版本或模式\n",[99,118172,118173],{"class":101,"line":1180},[99,118174,118175],{},"wsl -l -v\n",[99,118177,118178],{"class":101,"line":1186},[99,118179,2386],{"emptyLinePlaceholder":26},[99,118181,118182],{"class":101,"line":1200},[99,118183,2386],{"emptyLinePlaceholder":26},[99,118185,118186],{"class":101,"line":1206},[99,118187,118188],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[99,118190,118191],{"class":101,"line":1297},[99,118192,118193],{},"wsl --set-version \u003Cdistro> 2\n",[99,118195,118196],{"class":101,"line":1303},[99,118197,118198],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[99,118200,118201],{"class":101,"line":1315},[99,118202,118203],{},"wsl --unregister \u003Cdistro>\n",[14,118205,118206],{},"输出Version为2即正常",[14,118208,118209],{},[1448,118210],{"alt":21,"src":118211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21985,118213,118215],{"id":118214},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118217,118218],{},"直接在Powershell里输入wsl命令进入子系统",[90,118220,118222],{"className":118017,"code":118221,"language":118019,"meta":21,"style":21},"# 进入子系统\nwsl\n",[96,118223,118224,118229],{"__ignoreMap":21},[99,118225,118226],{"class":101,"line":102},[99,118227,118228],{},"# 进入子系统\n",[99,118230,118231],{"class":101,"line":22},[99,118232,118233],{},"wsl\n",[14,118235,118236],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118238,118239],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118241,118242],{},[1448,118243],{"alt":21,"src":118244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[70,118246,118248],{"id":118247},"_233-配置各种环境","2.3.3 配置各种环境",[21985,118250,118252],{"id":118251},"_2331-换源","2.3.3.1 换源",[14,118254,118255],{},"(同实体机LINUX，往下找教程)",[21985,118257,118259],{"id":118258},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22897,118261,118263],{"id":118262},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118265,118266],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118268,118269],{},[1448,118270],{"alt":21,"src":118271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118273,118274],{},[1448,118275],{"alt":21,"src":118276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22897,118278,118280],{"id":118279},"_23322-cuda","2.3.3.2.2 CUDA",[14,118282,118283,118284],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[348,118285,118286],{"href":118286,"rel":118287},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23853],[14,118289,118290,118293],{},[1448,118291],{"alt":21,"src":118292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1448,118294],{"alt":21,"src":118295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118297,118298],{},"在下方的网站，选择合适的版本。",[14,118300,118301,118302],{},"WSL2 专属 CUDA 指南：",[348,118303,118304],{"href":118304,"rel":118305},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23853],[14,118307,118308],{},[259,118309,118310],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118312,118313],{},[1448,118314],{"alt":21,"src":118315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118317,118318],{},"挨行敲一遍",[14,118320,118321],{},[1448,118322],{"alt":21,"src":118323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118325,118326,118327,118330],{},"敲完后，输入",[96,118328,118329],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118332,118333],{},[1448,118334],{"alt":21,"src":118335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118337,118338,118339,118342],{},"（请详看下方教程的",[259,118340,118341],{},"安装CUDA的配置环境来看","如何配置环境）",[22897,118344,118346],{"id":118345},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118348,118255],{},[14,118350,118351],{},[1448,118352],{"alt":21,"src":118353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21985,118355,118357],{"id":118356},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118359,118360],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118362,118363],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118365,118366],{},[1448,118367],{"alt":21,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118370,118371],{},"连接WSL2",[14,118373,118374],{},[1448,118375],{"alt":21,"src":118376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118378,118379],{},"远程开发成功。",[14,118381,118382],{},[1448,118383],{"alt":21,"src":118384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118386,118387],{},[1448,118388],{"alt":21,"src":118389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118391,118392],{},[1448,118393],{"alt":21,"src":118394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21985,118396,118398],{"id":118397},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118400,118401],{},[1448,118402],{"alt":21,"src":118403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21985,118405,118407],{"id":118406},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[90,118409,118411],{"className":117277,"code":118410,"language":117279,"meta":21,"style":21},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[96,118412,118413,118421,118429,118440,118444],{"__ignoreMap":21},[99,118414,118415,118417,118419],{"class":101,"line":102},[99,118416,24565],{"class":1949},[99,118418,117298],{"class":214},[99,118420,26231],{"class":214},[99,118422,118423,118425,118427],{"class":101,"line":22},[99,118424,24565],{"class":1949},[99,118426,117298],{"class":214},[99,118428,117314],{"class":214},[99,118430,118431,118433,118435,118437],{"class":101,"line":1165},[99,118432,24565],{"class":1949},[99,118434,117298],{"class":214},[99,118436,23822],{"class":214},[99,118438,118439],{"class":214}," mesa-utils\n",[99,118441,118442],{"class":101,"line":1180},[99,118443,2386],{"emptyLinePlaceholder":26},[99,118445,118446],{"class":101,"line":1186},[99,118447,118448],{"class":168},"#然后重启wsl2即可\n",[5113,118450,118451],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":21,"searchDepth":22,"depth":22,"links":118453},[118454,118455,118460],{"id":117731,"depth":22,"text":117732},{"id":117744,"depth":22,"text":117745,"children":118456},[118457,118458,118459],{"id":117748,"depth":1165,"text":117749},{"id":117795,"depth":1165,"text":117796},{"id":117856,"depth":1165,"text":117857},{"id":117892,"depth":22,"text":117893,"children":118461},[118462,118463,118464],{"id":117896,"depth":1165,"text":117897},{"id":117958,"depth":1165,"text":117959},{"id":118247,"depth":1165,"text":118248},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117723,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118471,"title":118472,"body":118473,"description":23364,"extension":24,"meta":121409,"navigation":26,"path":121410,"seo":121411,"stem":121412,"__hash__":121413},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118474,"toc":121381},[118475,118478,118482,118488,118492,118498,118502,118690,118693,118698,118702,118706,118709,118712,118718,118723,118726,118729,118734,118767,118772,118776,118853,118856,118861,118865,118868,118907,118910,118919,118937,118942,118949,119066,119071,119074,119101,119106,119110,119119,119169,119176,119180,119183,119197,119204,119238,119243,119247,119270,119273,119278,119282,119285,119288,119291,119333,119337,119340,119343,119384,119388,119392,119395,119400,119405,119408,119431,119434,119442,119447,119450,119455,119460,119463,119468,119472,119477,119500,119505,119567,119575,119580,119585,119588,119593,119596,119601,119606,119624,119629,119635,119640,119654,119658,119661,119664,119667,119710,119713,119718,119819,119822,119827,119831,119835,119872,119876,119880,119884,119930,119934,119979,119983,119990,119998,120053,120056,120133,120136,120159,120163,120166,120171,120176,120184,120187,120192,120197,120202,120205,120210,120219,120222,120227,120230,120301,120306,120309,120314,120317,120322,120325,120330,120333,120338,120343,120346,120421,120424,120437,120442,120445,120459,120462,120491,120496,120525,120528,120533,120537,120542,120551,120554,120559,120562,120567,120570,120573,120578,120581,120586,120591,120594,120599,120602,120727,120732,120762,120765,120770,120775,120792,120795,120838,120841,120868,120873,120886,121029,121033,121038,121052,121055,121106,121109,121139,121142,121158,121163,121177,121180,121247,121252,121261,121266,121269,121281,121286,121293,121317,121320,121325,121328,121347,121352,121359,121371,121378],[10,118476,118472],{"id":118477},"_3-安装必备配置",[41,118479,118481],{"id":118480},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[90,118483,118486],{"className":118484,"code":118485,"language":5174},[5172],"  打开下方网站（注意，该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",[96,118487,118485],{"__ignoreMap":21},[70,118489,118491],{"id":118490},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[90,118493,118496],{"className":118494,"code":118495,"language":5174},[5172],"  输入以下命令\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",[96,118497,118495],{"__ignoreMap":21},[70,118499,118501],{"id":118500},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[90,118503,118507],{"className":118504,"code":118505,"language":118506,"meta":21,"style":21},"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",[96,118508,118509,118517,118528,118540,118554,118558,118568,118573,118577,118581,118586,118590,118602,118606,118611,118615,118626,118630,118646,118650,118661,118665,118670,118674,118682],{"__ignoreMap":21},[99,118510,118511,118513,118515],{"class":101,"line":102},[99,118512,24565],{"class":1949},[99,118514,117298],{"class":214},[99,118516,26231],{"class":214},[99,118518,118519,118521,118523,118525],{"class":101,"line":22},[99,118520,24565],{"class":1949},[99,118522,117298],{"class":214},[99,118524,23822],{"class":214},[99,118526,118527],{"class":214}," vim\n",[99,118529,118530,118532,118535,118537],{"class":101,"line":1165},[99,118531,24565],{"class":1949},[99,118533,118534],{"class":214}," rm",[99,118536,25314],{"class":158},[99,118538,118539],{"class":214}," \u002Fetc\u002Fapt\u002Fsources.list\n",[99,118541,118542,118544,118546,118548,118551],{"class":101,"line":1180},[99,118543,24565],{"class":1949},[99,118545,118534],{"class":214},[99,118547,25314],{"class":158},[99,118549,118550],{"class":214}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[99,118552,118553],{"class":158},"**\n",[99,118555,118556],{"class":101,"line":1186},[99,118557,2386],{"emptyLinePlaceholder":26},[99,118559,118560,118562,118565],{"class":101,"line":1200},[99,118561,24565],{"class":1949},[99,118563,118564],{"class":214}," vim",[99,118566,118567],{"class":214}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[99,118569,118570],{"class":101,"line":1206},[99,118571,118572],{"class":214},"```\n",[99,118574,118575],{"class":101,"line":1297},[99,118576,2386],{"emptyLinePlaceholder":26},[99,118578,118579],{"class":101,"line":1303},[99,118580,2386],{"emptyLinePlaceholder":26},[99,118582,118583],{"class":101,"line":1315},[99,118584,118585],{"class":1949},"选择好Ubuntu版本后，复制下方的内容。\n",[99,118587,118588],{"class":101,"line":1598},[99,118589,2386],{"emptyLinePlaceholder":26},[99,118591,118592,118594,118597,118600],{"class":101,"line":1603},[99,118593,336],{"class":105},[99,118595,118596],{"class":214},"[](",[99,118598,118599],{"class":1949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[99,118601,116],{"class":214},[99,118603,118604],{"class":101,"line":1609},[99,118605,2386],{"emptyLinePlaceholder":26},[99,118607,118608],{"class":101,"line":1614},[99,118609,118610],{"class":1949},"粘贴进去\n",[99,118612,118613],{"class":101,"line":1628},[99,118614,2386],{"emptyLinePlaceholder":26},[99,118616,118617,118619,118621,118624],{"class":101,"line":1633},[99,118618,336],{"class":105},[99,118620,118596],{"class":214},[99,118622,118623],{"class":1949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[99,118625,116],{"class":214},[99,118627,118628],{"class":101,"line":1639},[99,118629,2386],{"emptyLinePlaceholder":26},[99,118631,118632,118635,118638,118641,118643],{"class":101,"line":1660},[99,118633,118634],{"class":1949},"按一下ESC，然后英文冒号，输入",[99,118636,118637],{"class":214}," `",[99,118639,118640],{"class":1949},":wq!",[99,118642,1082],{"class":214},[99,118644,118645],{"class":1949},"然后回车\n",[99,118647,118648],{"class":101,"line":1665},[99,118649,2386],{"emptyLinePlaceholder":26},[99,118651,118652,118654,118656,118659],{"class":101,"line":1679},[99,118653,336],{"class":105},[99,118655,118596],{"class":214},[99,118657,118658],{"class":1949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[99,118660,116],{"class":214},[99,118662,118663],{"class":101,"line":1684},[99,118664,2386],{"emptyLinePlaceholder":26},[99,118666,118667],{"class":101,"line":1713},[99,118668,118669],{"class":1949},"输入以下命令\n",[99,118671,118672],{"class":101,"line":1718},[99,118673,2386],{"emptyLinePlaceholder":26},[99,118675,118676,118679],{"class":101,"line":1735},[99,118677,118678],{"class":214},"```",[99,118680,118681],{"class":1949},"Bash\n",[99,118683,118684,118686,118688],{"class":101,"line":1740},[99,118685,24565],{"class":1949},[99,118687,117298],{"class":214},[99,118689,26231],{"class":214},[14,118691,118692],{},"这里被替换成对应学校则成功",[14,118694,118695],{},[1448,118696],{"alt":21,"src":118697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[41,118699,118701],{"id":118700},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[70,118703,118705],{"id":118704},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118707,118708],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118710,118711],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118713,118714],{},[348,118715,118716],{"href":118716,"rel":118717},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23853],[14,118719,118720],{},[1448,118721],{"alt":21,"src":118722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118724,118725],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118727,118728],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118730,118731],{},[1448,118732],{"alt":21,"src":118733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[90,118735,118737],{"className":117277,"code":118736,"language":117279,"meta":21,"style":21},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[96,118738,118739,118744,118751,118756],{"__ignoreMap":21},[99,118740,118741],{"class":101,"line":102},[99,118742,118743],{"class":168},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[99,118745,118746,118748],{"class":101,"line":22},[99,118747,101257],{"class":158},[99,118749,118750],{"class":214}," ~\u002FDownloads\n",[99,118752,118753],{"class":101,"line":1165},[99,118754,118755],{"class":168},"#下方chrome安装包名不一定是这个，根据名字来看\n",[99,118757,118758,118760,118762,118764],{"class":101,"line":1180},[99,118759,24565],{"class":1949},[99,118761,117298],{"class":214},[99,118763,23822],{"class":214},[99,118765,118766],{"class":214}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118768,118769],{},[1448,118770],{"alt":21,"src":118771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[70,118773,118775],{"id":118774},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[90,118777,118779],{"className":117277,"code":118778,"language":117279,"meta":21,"style":21},"# 老版\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",[96,118780,118781,118786,118794,118805,118810,118814,118819,118829,118837,118848],{"__ignoreMap":21},[99,118782,118783],{"class":101,"line":102},[99,118784,118785],{"class":168},"# 老版\n",[99,118787,118788,118790,118792],{"class":101,"line":22},[99,118789,24565],{"class":1949},[99,118791,117298],{"class":214},[99,118793,26231],{"class":214},[99,118795,118796,118798,118800,118802],{"class":101,"line":1165},[99,118797,24565],{"class":1949},[99,118799,117298],{"class":214},[99,118801,23822],{"class":214},[99,118803,118804],{"class":214}," neofetch\n",[99,118806,118807],{"class":101,"line":1180},[99,118808,118809],{"class":1949},"neofetch\n",[99,118811,118812],{"class":101,"line":1186},[99,118813,2386],{"emptyLinePlaceholder":26},[99,118815,118816],{"class":101,"line":1200},[99,118817,118818],{"class":168},"# 新版\n",[99,118820,118821,118823,118826],{"class":101,"line":1206},[99,118822,24565],{"class":1949},[99,118824,118825],{"class":214}," add-apt-repository",[99,118827,118828],{"class":214}," ppa:zhangsongcui3371\u002Ffastfetch\n",[99,118830,118831,118833,118835],{"class":101,"line":1297},[99,118832,24565],{"class":1949},[99,118834,117298],{"class":214},[99,118836,26231],{"class":214},[99,118838,118839,118841,118843,118845],{"class":101,"line":1303},[99,118840,24565],{"class":1949},[99,118842,117298],{"class":214},[99,118844,23822],{"class":214},[99,118846,118847],{"class":214}," fastfetch\n",[99,118849,118850],{"class":101,"line":1315},[99,118851,118852],{"class":1949},"fastfetch\n",[14,118854,118855],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118857,118858],{},[1448,118859],{"alt":21,"src":118860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[70,118862,118864],{"id":118863},"_323-移除snap应用","3.2.3 移除snap应用",[14,118866,118867],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[90,118869,118871],{"className":117277,"code":118870,"language":117279,"meta":21,"style":21},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[96,118872,118873,118885,118896],{"__ignoreMap":21},[99,118874,118875,118877,118879,118882],{"class":101,"line":102},[99,118876,24565],{"class":1949},[99,118878,26502],{"class":214},[99,118880,118881],{"class":214}," disable",[99,118883,118884],{"class":214}," snapd.service\n",[99,118886,118887,118889,118891,118893],{"class":101,"line":22},[99,118888,24565],{"class":1949},[99,118890,26502],{"class":214},[99,118892,118881],{"class":214},[99,118894,118895],{"class":214}," snapd.socket\n",[99,118897,118898,118900,118902,118904],{"class":101,"line":1165},[99,118899,24565],{"class":1949},[99,118901,26502],{"class":214},[99,118903,118881],{"class":214},[99,118905,118906],{"class":214}," snapd.seeded.service\n",[14,118908,118909],{},"然后查看snap应用列表",[14,118911,118912,118913,118918],{},"根据你安装的选择不同（最小安装或普通安装），有",[348,118914,118917],{"href":118915,"rel":118916},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23853],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[90,118920,118922],{"className":117277,"code":118921,"language":117279,"meta":21,"style":21},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[96,118923,118924,118929],{"__ignoreMap":21},[99,118925,118926],{"class":101,"line":102},[99,118927,118928],{"class":168},"# 查询当前系统上snap安装了哪些app\n",[99,118930,118931,118934],{"class":101,"line":22},[99,118932,118933],{"class":1949},"snap",[99,118935,118936],{"class":214}," list\n",[14,118938,118939],{},[1448,118940],{"alt":21,"src":118941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118943,118944,118945,118948],{},"卸载掉图中所有应用，按照 ",[259,118946,118947],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[90,118950,118952],{"className":117277,"code":118951,"language":117279,"meta":21,"style":21},"#移除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",[96,118953,118954,118959,118971,118976,118987,118992,119003,119008,119019,119024,119028,119033,119044,119055],{"__ignoreMap":21},[99,118955,118956],{"class":101,"line":102},[99,118957,118958],{"class":168},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[99,118960,118961,118963,118966,118968],{"class":101,"line":22},[99,118962,24565],{"class":1949},[99,118964,118965],{"class":214}," snap",[99,118967,26068],{"class":214},[99,118969,118970],{"class":214}," snap-store\n",[99,118972,118973],{"class":101,"line":1165},[99,118974,118975],{"class":168},"#移除firefox浏览器\n",[99,118977,118978,118980,118982,118984],{"class":101,"line":1180},[99,118979,24565],{"class":1949},[99,118981,118965],{"class":214},[99,118983,26068],{"class":214},[99,118985,118986],{"class":214}," firefox\n",[99,118988,118989],{"class":101,"line":1186},[99,118990,118991],{"class":168},"#移除gnome-42-2204\n",[99,118993,118994,118996,118998,119000],{"class":101,"line":1200},[99,118995,24565],{"class":1949},[99,118997,118965],{"class":214},[99,118999,26068],{"class":214},[99,119001,119002],{"class":214}," gnome-42-2204\n",[99,119004,119005],{"class":101,"line":1206},[99,119006,119007],{"class":168},"#移除gtk-common-themes\n",[99,119009,119010,119012,119014,119016],{"class":101,"line":1297},[99,119011,24565],{"class":1949},[99,119013,118965],{"class":214},[99,119015,26068],{"class":214},[99,119017,119018],{"class":214}," gtk-common-themes\n",[99,119020,119021],{"class":101,"line":1303},[99,119022,119023],{"class":168},"#移除其它...\n",[99,119025,119026],{"class":101,"line":1315},[99,119027,2660],{"class":109},[99,119029,119030],{"class":101,"line":1598},[99,119031,119032],{"class":168},"#移除core22,bare以及snapd\n",[99,119034,119035,119037,119039,119041],{"class":101,"line":1603},[99,119036,24565],{"class":1949},[99,119038,118965],{"class":214},[99,119040,26068],{"class":214},[99,119042,119043],{"class":214}," core22\n",[99,119045,119046,119048,119050,119052],{"class":101,"line":1609},[99,119047,24565],{"class":1949},[99,119049,118965],{"class":214},[99,119051,26068],{"class":214},[99,119053,119054],{"class":214}," bare\n",[99,119056,119057,119059,119061,119063],{"class":101,"line":1614},[99,119058,24565],{"class":1949},[99,119060,118965],{"class":214},[99,119062,26068],{"class":214},[99,119064,119065],{"class":214}," snapd\n",[14,119067,119068],{},[1448,119069],{"alt":21,"src":119070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119072,119073],{},"输入以下命令查看是否还有snap包",[90,119075,119077],{"className":117277,"code":119076,"language":117279,"meta":21,"style":21},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[96,119078,119079,119085,119089,119093,119097],{"__ignoreMap":21},[99,119080,119081,119083],{"class":101,"line":102},[99,119082,118933],{"class":1949},[99,119084,118936],{"class":214},[99,119086,119087],{"class":101,"line":22},[99,119088,118785],{"class":168},[99,119090,119091],{"class":101,"line":1165},[99,119092,118809],{"class":1949},[99,119094,119095],{"class":101,"line":1180},[99,119096,118818],{"class":168},[99,119098,119099],{"class":101,"line":1186},[99,119100,118852],{"class":1949},[14,119102,119103],{},[1448,119104],{"alt":21,"src":119105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[70,119107,119109],{"id":119108},"_324-移除snap","3.2.4 移除snap",[14,119111,119112,119113,119118],{},"在删除掉",[348,119114,119117],{"href":119115,"rel":119116},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23853],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[90,119120,119122],{"className":117277,"code":119121,"language":117279,"meta":21,"style":21}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[96,119123,119124,119129,119142,119147,119158],{"__ignoreMap":21},[99,119125,119126],{"class":101,"line":102},[99,119127,119128],{"class":168}," #使用apt移除掉snap\n",[99,119130,119131,119133,119135,119137,119140],{"class":101,"line":22},[99,119132,24565],{"class":1949},[99,119134,117298],{"class":214},[99,119136,117606],{"class":214},[99,119138,119139],{"class":158}," --purge",[99,119141,119065],{"class":214},[99,119143,119144],{"class":101,"line":1165},[99,119145,119146],{"class":168},"#移除snapd的一些目录\n",[99,119148,119149,119151,119153,119155],{"class":101,"line":1180},[99,119150,24565],{"class":1949},[99,119152,118534],{"class":214},[99,119154,25314],{"class":158},[99,119156,119157],{"class":214}," \u002Fvar\u002Fcache\u002Fsnapd\n",[99,119159,119160,119162,119164,119166],{"class":101,"line":1186},[99,119161,24565],{"class":1949},[99,119163,118534],{"class":214},[99,119165,25314],{"class":158},[99,119167,119168],{"class":214}," ~\u002Fsnap\n",[14,119170,119171,119172,119175],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[96,119173,119174],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[70,119177,119179],{"id":119178},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119181,119182],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[90,119184,119186],{"className":117277,"code":119185,"language":117279,"meta":21,"style":21},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[96,119187,119188],{"__ignoreMap":21},[99,119189,119190,119192,119194],{"class":101,"line":102},[99,119191,24565],{"class":1949},[99,119193,118564],{"class":214},[99,119195,119196],{"class":214}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119198,119199,119200,119203],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[96,119201,119202],{},":wq"," 回车",[90,119205,119207],{"className":117277,"code":119206,"language":117279,"meta":21,"style":21},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[96,119208,119209,119216,119230],{"__ignoreMap":21},[99,119210,119211,119214],{"class":101,"line":102},[99,119212,119213],{"class":1949},"Package:",[99,119215,119065],{"class":214},[99,119217,119218,119221,119224,119227],{"class":101,"line":22},[99,119219,119220],{"class":1949},"Pin:",[99,119222,119223],{"class":214}," release",[99,119225,119226],{"class":214}," a=",[99,119228,119229],{"class":158},"*\n",[99,119231,119232,119235],{"class":101,"line":1165},[99,119233,119234],{"class":1949},"Pin-Priority:",[99,119236,119237],{"class":158}," -10\n",[14,119239,119240],{},[1448,119241],{"alt":21,"src":119242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[70,119244,119246],{"id":119245},"_326-测试是否成功","3.2.6 测试是否成功",[90,119248,119250],{"className":117277,"code":119249,"language":117279,"meta":21,"style":21},"sudo apt update\nsudo apt install firefox\n",[96,119251,119252,119260],{"__ignoreMap":21},[99,119253,119254,119256,119258],{"class":101,"line":102},[99,119255,24565],{"class":1949},[99,119257,117298],{"class":214},[99,119259,26231],{"class":214},[99,119261,119262,119264,119266,119268],{"class":101,"line":22},[99,119263,24565],{"class":1949},[99,119265,117298],{"class":214},[99,119267,23822],{"class":214},[99,119269,118986],{"class":214},[14,119271,119272],{},"这里提示snapd无法被安装，就证明成功了",[14,119274,119275],{},[1448,119276],{"alt":21,"src":119277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[70,119279,119281],{"id":119280},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119283,119284],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119286,119287],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119289,119290],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[90,119292,119294],{"className":117277,"code":119293,"language":117279,"meta":21,"style":21},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[96,119295,119296,119301,119310,119315,119323],{"__ignoreMap":21},[99,119297,119298],{"class":101,"line":102},[99,119299,119300],{"class":168},"# 添加Mozilla提供的源\n",[99,119302,119303,119305,119307],{"class":101,"line":22},[99,119304,24565],{"class":1949},[99,119306,118825],{"class":214},[99,119308,119309],{"class":214}," ppa:mozillateam\u002Fppa\n",[99,119311,119312],{"class":101,"line":1165},[99,119313,119314],{"class":168},"# 安装Firefox\n",[99,119316,119317,119319,119321],{"class":101,"line":1180},[99,119318,24565],{"class":1949},[99,119320,117298],{"class":214},[99,119322,26231],{"class":214},[99,119324,119325,119327,119329,119331],{"class":101,"line":1186},[99,119326,24565],{"class":1949},[99,119328,117298],{"class":214},[99,119330,23822],{"class":214},[99,119332,118986],{"class":214},[70,119334,119336],{"id":119335},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119338,119339],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119341,119342],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[90,119344,119346],{"className":117277,"code":119345,"language":117279,"meta":21,"style":21},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[96,119347,119348,119353,119363,119371,119375],{"__ignoreMap":21},[99,119349,119350],{"class":101,"line":102},[99,119351,119352],{"class":168},"#删掉禁止安装snap的配置文件\n",[99,119354,119355,119357,119359,119361],{"class":101,"line":22},[99,119356,24565],{"class":1949},[99,119358,118534],{"class":214},[99,119360,25314],{"class":158},[99,119362,119196],{"class":214},[99,119364,119365,119367,119369],{"class":101,"line":1165},[99,119366,24565],{"class":1949},[99,119368,117298],{"class":214},[99,119370,26231],{"class":214},[99,119372,119373],{"class":101,"line":1180},[99,119374,2386],{"emptyLinePlaceholder":26},[99,119376,119377,119379,119381],{"class":101,"line":1186},[99,119378,24565],{"class":1949},[99,119380,117298],{"class":214},[99,119382,119383],{"class":214}," dist-update\n",[41,119385,119387],{"id":119386},"_33-中文输入法","3.3 中文输入法",[70,119389,119391],{"id":119390},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119393,119394],{},"官网下载搜狗输入法",[14,119396,119397],{},[1448,119398],{"alt":21,"src":119399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119401,119402],{},[1448,119403],{"alt":21,"src":119404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119406,119407],{},"打开终端输入如下",[90,119409,119411],{"className":117277,"code":119410,"language":117279,"meta":21,"style":21},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[96,119412,119413,119420],{"__ignoreMap":21},[99,119414,119415,119417],{"class":101,"line":102},[99,119416,101257],{"class":158},[99,119418,119419],{"class":214}," ~\u002FDownloads\u002F\n",[99,119421,119422,119424,119426,119428],{"class":101,"line":22},[99,119423,24565],{"class":1949},[99,119425,117298],{"class":214},[99,119427,23822],{"class":214},[99,119429,119430],{"class":214}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119432,119433],{},"打开Fcitx",[14,119435,119436,119439],{},[1448,119437],{"alt":21,"src":119438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1448,119440],{"alt":21,"src":119441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119443,119444],{},[1448,119445],{"alt":21,"src":119446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119448,119449],{},"添加搜狗输入法",[14,119451,119452],{},[1448,119453],{"alt":21,"src":119454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119456,119457],{},[1448,119458],{"alt":21,"src":119459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119461,119462],{},"将搜狗输入法设置为唯一输入法",[14,119464,119465],{},[1448,119466],{"alt":21,"src":119467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[70,119469,119471],{"id":119470},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[53,119473,119474],{},[56,119475,119476],{},"卸载旧输入法",[90,119478,119480],{"className":118504,"code":119479,"language":118506,"meta":21,"style":21},"sudo apt purge fcitx* ibus*\n",[96,119481,119482],{"__ignoreMap":21},[99,119483,119484,119486,119488,119490,119493,119495,119498],{"class":101,"line":102},[99,119485,24565],{"class":1949},[99,119487,117298],{"class":214},[99,119489,117639],{"class":214},[99,119491,119492],{"class":214}," fcitx",[99,119494,565],{"class":158},[99,119496,119497],{"class":214}," ibus",[99,119499,119229],{"class":158},[53,119501,119502],{"start":22},[56,119503,119504],{},"安装Fcitx5",[90,119506,119508],{"className":117277,"code":119507,"language":117279,"meta":21,"style":21},"# 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",[96,119509,119510,119515,119529,119533,119538,119547,119555],{"__ignoreMap":21},[99,119511,119512],{"class":101,"line":102},[99,119513,119514],{"class":168},"# Ubuntu22.04及以上、Debian12及以上\n",[99,119516,119517,119519,119521,119523,119526],{"class":101,"line":22},[99,119518,24565],{"class":1949},[99,119520,117298],{"class":214},[99,119522,23822],{"class":214},[99,119524,119525],{"class":214}," fcitx5",[99,119527,119528],{"class":214}," fcitx5-chinese-addons\n",[99,119530,119531],{"class":101,"line":1165},[99,119532,2386],{"emptyLinePlaceholder":26},[99,119534,119535],{"class":101,"line":1180},[99,119536,119537],{"class":168},"# Ubuntu20.04\n",[99,119539,119540,119542,119544],{"class":101,"line":1186},[99,119541,24565],{"class":1949},[99,119543,118825],{"class":214},[99,119545,119546],{"class":214}," ppa:zhsj\u002Ffcitx5\n",[99,119548,119549,119551,119553],{"class":101,"line":1200},[99,119550,24565],{"class":1949},[99,119552,117298],{"class":214},[99,119554,26231],{"class":214},[99,119556,119557,119559,119561,119563,119565],{"class":101,"line":1206},[99,119558,24565],{"class":1949},[99,119560,117298],{"class":214},[99,119562,23822],{"class":214},[99,119564,119525],{"class":214},[99,119566,119528],{"class":214},[53,119568,119569,119572],{"start":1165},[56,119570,119571],{},"Reboot System",[56,119573,119574],{},"启动Fcitx5",[14,119576,119577],{},[1448,119578],{"alt":21,"src":119579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[53,119581,119582],{"start":1186},[56,119583,119584],{},"修改一些设置",[14,119586,119587],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119589,119590],{},[1448,119591],{"alt":21,"src":119592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119594,119595],{},"添加快捷键以便于更好切换中英文",[14,119597,119598],{},[1448,119599],{"alt":21,"src":119600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[53,119602,119603],{"start":1200},[56,119604,119605],{},"重启",[90,119607,119609],{"className":118504,"code":119608,"language":118506,"meta":21,"style":21},"sudo shutdown -r now\n",[96,119610,119611],{"__ignoreMap":21},[99,119612,119613,119615,119618,119621],{"class":101,"line":102},[99,119614,24565],{"class":1949},[99,119616,119617],{"class":214}," shutdown",[99,119619,119620],{"class":158}," -r",[99,119622,119623],{"class":214}," now\n",[53,119625,119626],{"start":1206},[56,119627,119628],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119630,119631],{},[348,119632,119633],{"href":119633,"rel":119634},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23853],[53,119636,119637],{"start":1297},[56,119638,119639],{},"再重启",[90,119641,119642],{"className":118504,"code":119608,"language":118506,"meta":21,"style":21},[96,119643,119644],{"__ignoreMap":21},[99,119645,119646,119648,119650,119652],{"class":101,"line":102},[99,119647,24565],{"class":1949},[99,119649,119617],{"class":214},[99,119651,119620],{"class":158},[99,119653,119623],{"class":214},[41,119655,119657],{"id":119656},"_34-pip3源替换","3.4 pip3源替换",[14,119659,119660],{},"非Debian系发行版需要做。",[14,119662,119663],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119665,119666],{},"使用dnf的系统也可能不用做。",[90,119668,119670],{"className":117277,"code":119669,"language":117279,"meta":21,"style":21},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[96,119671,119672,119677,119684,119689,119694],{"__ignoreMap":21},[99,119673,119674],{"class":101,"line":102},[99,119675,119676],{"class":168},"# 检查是否已安装 pip\n",[99,119678,119679,119682],{"class":101,"line":22},[99,119680,119681],{"class":1949},"pip3",[99,119683,26282],{"class":158},[99,119685,119686],{"class":101,"line":1165},[99,119687,119688],{"class":168},"# 如果未安装，先安装 pip3（见下方）\n",[99,119690,119691],{"class":101,"line":1180},[99,119692,119693],{"class":168},"# 配置 pip 使用清华源\n",[99,119695,119696,119698,119701,119704,119707],{"class":101,"line":1186},[99,119697,119681],{"class":1949},[99,119699,119700],{"class":214}," config",[99,119702,119703],{"class":214}," set",[99,119705,119706],{"class":214}," global.index-url",[99,119708,119709],{"class":214}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119711,119712],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119714,119715],{},[1448,119716],{"alt":21,"src":119717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[90,119719,119721],{"className":117277,"code":119720,"language":117279,"meta":21,"style":21},"#安装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",[96,119722,119723,119728,119736,119747,119751,119756,119775,119779,119784,119796,119800,119805],{"__ignoreMap":21},[99,119724,119725],{"class":101,"line":102},[99,119726,119727],{"class":168},"#安装pip3\n",[99,119729,119730,119732,119734],{"class":101,"line":22},[99,119731,24565],{"class":1949},[99,119733,117298],{"class":214},[99,119735,26231],{"class":214},[99,119737,119738,119740,119742,119744],{"class":101,"line":1165},[99,119739,24565],{"class":1949},[99,119741,26065],{"class":214},[99,119743,23822],{"class":214},[99,119745,119746],{"class":214}," python3-pip\n",[99,119748,119749],{"class":101,"line":1180},[99,119750,2386],{"emptyLinePlaceholder":26},[99,119752,119753],{"class":101,"line":1186},[99,119754,119755],{"class":168},"#更新pip3\n",[99,119757,119758,119760,119762,119764,119766,119768,119771,119773],{"class":101,"line":1200},[99,119759,100860],{"class":1949},[99,119761,100863],{"class":158},[99,119763,100886],{"class":214},[99,119765,23822],{"class":214},[99,119767,26419],{"class":158},[99,119769,119770],{"class":214}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[99,119772,100891],{"class":158},[99,119774,100894],{"class":214},[99,119776,119777],{"class":101,"line":1206},[99,119778,2386],{"emptyLinePlaceholder":26},[99,119780,119781],{"class":101,"line":1297},[99,119782,119783],{"class":168},"#设置pip源为清华源\n",[99,119785,119786,119788,119790,119792,119794],{"class":101,"line":1303},[99,119787,119681],{"class":1949},[99,119789,119700],{"class":214},[99,119791,119703],{"class":214},[99,119793,119706],{"class":214},[99,119795,119709],{"class":214},[99,119797,119798],{"class":101,"line":1315},[99,119799,2386],{"emptyLinePlaceholder":26},[99,119801,119802],{"class":101,"line":1598},[99,119803,119804],{"class":168},"#测试\n",[99,119806,119807,119809,119811,119813,119815,119817],{"class":101,"line":1603},[99,119808,100860],{"class":1949},[99,119810,100863],{"class":158},[99,119812,100886],{"class":214},[99,119814,23822],{"class":214},[99,119816,100891],{"class":158},[99,119818,100894],{"class":214},[14,119820,119821],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119823,119824],{},[1448,119825],{"alt":21,"src":119826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[41,119828,119830],{"id":119829},"_35-显卡驱动安装","3.5 显卡驱动安装",[70,119832,119834],{"id":119833},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[90,119836,119838],{"className":118504,"code":119837,"language":118506,"meta":21,"style":21},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[96,119839,119840,119845,119860,119865],{"__ignoreMap":21},[99,119841,119842],{"class":101,"line":102},[99,119843,119844],{"class":168},"# 如果是使用apt安装的驱动\n",[99,119846,119847,119849,119851,119853,119855,119858],{"class":101,"line":22},[99,119848,24565],{"class":1949},[99,119850,26065],{"class":214},[99,119852,26068],{"class":214},[99,119854,119139],{"class":158},[99,119856,119857],{"class":214}," nvidia",[99,119859,119229],{"class":158},[99,119861,119862],{"class":101,"line":1165},[99,119863,119864],{"class":168},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[99,119866,119867,119869],{"class":101,"line":1180},[99,119868,24565],{"class":1949},[99,119870,119871],{"class":214}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[70,119873,119875],{"id":119874},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21985,119877,119879],{"id":119878},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22897,119881,119883],{"id":119882},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[90,119885,119887],{"className":118504,"code":119886,"language":118506,"meta":21,"style":21},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[96,119888,119889,119894,119905,119910,119920,119925],{"__ignoreMap":21},[99,119890,119891],{"class":101,"line":102},[99,119892,119893],{"class":168},"# 安装英伟达驱动\n",[99,119895,119896,119898,119900,119902],{"class":101,"line":22},[99,119897,24565],{"class":1949},[99,119899,117298],{"class":214},[99,119901,23822],{"class":214},[99,119903,119904],{"class":214}," nvidia-driver-版本号\n",[99,119906,119907],{"class":101,"line":1165},[99,119908,119909],{"class":168},"# 重启 \n",[99,119911,119912,119914,119916,119918],{"class":101,"line":1180},[99,119913,24565],{"class":1949},[99,119915,119617],{"class":214},[99,119917,119620],{"class":158},[99,119919,119623],{"class":214},[99,119921,119922],{"class":101,"line":1186},[99,119923,119924],{"class":168},"# 检查驱动是否安装成功\n",[99,119926,119927],{"class":101,"line":1200},[99,119928,119929],{"class":1949},"nvidia-smi\n",[22897,119931,119933],{"id":119932},"_35212-debian","3.5.2.1.2 Debian",[90,119935,119937],{"className":118504,"code":119936,"language":118506,"meta":21,"style":21},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[96,119938,119939,119943,119957,119961,119971,119975],{"__ignoreMap":21},[99,119940,119941],{"class":101,"line":102},[99,119942,119893],{"class":168},[99,119944,119945,119947,119949,119951,119954],{"class":101,"line":22},[99,119946,24565],{"class":1949},[99,119948,117298],{"class":214},[99,119950,23822],{"class":214},[99,119952,119953],{"class":214}," nvidia-driver",[99,119955,119956],{"class":214}," nvidia-settings\n",[99,119958,119959],{"class":101,"line":1165},[99,119960,119909],{"class":168},[99,119962,119963,119965,119967,119969],{"class":101,"line":1180},[99,119964,24565],{"class":1949},[99,119966,119617],{"class":214},[99,119968,119620],{"class":158},[99,119970,119623],{"class":214},[99,119972,119973],{"class":101,"line":1186},[99,119974,119924],{"class":168},[99,119976,119977],{"class":101,"line":1200},[99,119978,119929],{"class":1949},[21985,119980,119982],{"id":119981},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,119984,119985,119986,119989],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[259,119987,119988],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,119991,119992,119993],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23541,119994,119995],{},[259,119996,119997],{},"（也可以不禁用桌面环境，直接进行下一步。）",[90,119999,120001],{"className":118504,"code":120000,"language":118506,"meta":21,"style":21},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[96,120002,120003,120008,120018,120023,120036,120041],{"__ignoreMap":21},[99,120004,120005],{"class":101,"line":102},[99,120006,120007],{"class":168},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[99,120009,120010,120012,120015],{"class":101,"line":22},[99,120011,24565],{"class":1949},[99,120013,120014],{"class":214}," telinit",[99,120016,120017],{"class":158}," 3\n",[99,120019,120020],{"class":101,"line":1165},[99,120021,120022],{"class":168},"# ubuntu 使用下方命令\n",[99,120024,120025,120027,120030,120033],{"class":101,"line":1180},[99,120026,24565],{"class":1949},[99,120028,120029],{"class":214}," service",[99,120031,120032],{"class":214}," lightdm",[99,120034,120035],{"class":214}," stop\n",[99,120037,120038],{"class":101,"line":1186},[99,120039,120040],{"class":168},"# Fedora 使用下方命令\n",[99,120042,120043,120045,120047,120050],{"class":101,"line":1200},[99,120044,24565],{"class":1949},[99,120046,26502],{"class":214},[99,120048,120049],{"class":214}," isolate",[99,120051,120052],{"class":214}," multi-user.target\n",[14,120054,120055],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[90,120057,120059],{"className":118504,"code":120058,"language":118506,"meta":21,"style":21},"# 编译环境+准备工作\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",[96,120060,120061,120066,120077,120082,120089,120094,120106,120111,120118,120123],{"__ignoreMap":21},[99,120062,120063],{"class":101,"line":102},[99,120064,120065],{"class":168},"# 编译环境+准备工作\n",[99,120067,120068,120070,120072,120074],{"class":101,"line":22},[99,120069,24565],{"class":1949},[99,120071,117298],{"class":214},[99,120073,23822],{"class":214},[99,120075,120076],{"class":214}," build-essential\n",[99,120078,120079],{"class":101,"line":1165},[99,120080,120081],{"class":168},"# 进入到.run目录中\n",[99,120083,120084,120086],{"class":101,"line":1180},[99,120085,101257],{"class":158},[99,120087,120088],{"class":214}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[99,120090,120091],{"class":101,"line":1186},[99,120092,120093],{"class":168},"# 给驱动文件增加可执行权限：\n",[99,120095,120096,120098,120100,120103],{"class":101,"line":1200},[99,120097,24565],{"class":1949},[99,120099,24568],{"class":214},[99,120101,120102],{"class":214}," a+x",[99,120104,120105],{"class":214}," NVIDIA-Linux-x86_64-550.107.02.run\n",[99,120107,120108],{"class":101,"line":1206},[99,120109,120110],{"class":168},"# 然后执行安装：\n",[99,120112,120113,120115],{"class":101,"line":1297},[99,120114,24565],{"class":1949},[99,120116,120117],{"class":214}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[99,120119,120120],{"class":101,"line":1303},[99,120121,120122],{"class":168},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[99,120124,120125,120127,120130],{"class":101,"line":1315},[99,120126,24565],{"class":1949},[99,120128,120129],{"class":214}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[99,120131,120132],{"class":158},"  --no-opengl-files\n",[14,120134,120135],{},"安装完毕重启即可",[90,120137,120139],{"className":118504,"code":120138,"language":118506,"meta":21,"style":21},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[96,120140,120141,120145,120151,120155],{"__ignoreMap":21},[99,120142,120143],{"class":101,"line":102},[99,120144,119909],{"class":168},[99,120146,120147,120149],{"class":101,"line":22},[99,120148,24565],{"class":1949},[99,120150,26636],{"class":214},[99,120152,120153],{"class":101,"line":1165},[99,120154,119924],{"class":168},[99,120156,120157],{"class":101,"line":1180},[99,120158,119929],{"class":1949},[70,120160,120162],{"id":120161},"_353-安装cuda","3.5.3 安装CUDA",[14,120164,120165],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120167,120168],{},[1448,120169],{"alt":21,"src":120170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[53,120172,120173],{},[56,120174,120175],{},"先查看显卡驱动所支持的最高CUDA版本",[90,120177,120178],{"className":118504,"code":119929,"language":118506,"meta":21,"style":21},[96,120179,120180],{"__ignoreMap":21},[99,120181,120182],{"class":101,"line":102},[99,120183,119929],{"class":1949},[14,120185,120186],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120188,120189],{},[1448,120190],{"alt":21,"src":120191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[53,120193,120194],{"start":22},[56,120195,120196],{},"下载CUDA并安装CUDA",[14,120198,118283,120199],{},[348,120200,118286],{"href":118286,"rel":120201},[23853],[14,120203,120204],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120206,120207],{},[1448,120208],{"alt":21,"src":120209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120211,120212,120213,120218],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[348,120214,120217],{"href":120215,"rel":120216},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23853],"Vinci机器人队单片机教程","）",[14,120220,120221],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120223,120224],{},[1448,120225],{"alt":21,"src":120226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120228,120229],{},"将最下方框框里的命令敲入终端",[90,120231,120233],{"className":118504,"code":120232,"language":118506,"meta":21,"style":21},"# 在当前文件夹下创建一个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",[96,120234,120235,120240,120249,120254,120261,120266,120274,120279,120290,120295],{"__ignoreMap":21},[99,120236,120237],{"class":101,"line":102},[99,120238,120239],{"class":168},"# 在当前文件夹下创建一个ttt的子文件夹\n",[99,120241,120242,120244,120246],{"class":101,"line":22},[99,120243,101247],{"class":1949},[99,120245,29197],{"class":158},[99,120247,120248],{"class":214}," .\u002Fttt\n",[99,120250,120251],{"class":101,"line":1165},[99,120252,120253],{"class":168},"# 进入ttt文件夹\n",[99,120255,120256,120258],{"class":101,"line":1180},[99,120257,101257],{"class":158},[99,120259,120260],{"class":214}," ttt\n",[99,120262,120263],{"class":101,"line":1186},[99,120264,120265],{"class":168},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[99,120267,120268,120271],{"class":101,"line":1200},[99,120269,120270],{"class":1949},"wget",[99,120272,120273],{"class":214}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[99,120275,120276],{"class":101,"line":1206},[99,120277,120278],{"class":168},"# 给予权限\n",[99,120280,120281,120283,120285,120287],{"class":101,"line":1297},[99,120282,24565],{"class":1949},[99,120284,24568],{"class":214},[99,120286,120102],{"class":214},[99,120288,120289],{"class":214}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[99,120291,120292],{"class":101,"line":1303},[99,120293,120294],{"class":168},"# 运行脚本\n",[99,120296,120297,120299],{"class":101,"line":1315},[99,120298,24565],{"class":1949},[99,120300,120289],{"class":214},[14,120302,120303],{},[1448,120304],{"alt":21,"src":120305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120307,120308],{},"正在安装中：",[14,120310,120311],{},[1448,120312],{"alt":21,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120315,120316],{},"输入accept接受即可",[14,120318,120319],{},[1448,120320],{"alt":21,"src":120321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120323,120324],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120326,120327],{},[1448,120328],{"alt":21,"src":120329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120331,120332],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120334,120335],{},[1448,120336],{"alt":21,"src":120337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[53,120339,120340],{"start":1165},[56,120341,120342],{},"配置环境",[14,120344,120345],{},"根据上方确认一下路径，比如我上面红色框起来的为",[90,120347,120349],{"className":118504,"code":120348,"language":118506,"meta":21,"style":21},"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",[96,120350,120351,120367,120382],{"__ignoreMap":21},[99,120352,120353,120356,120359,120362,120365],{"class":101,"line":102},[99,120354,120355],{"class":1949},"Please",[99,120357,120358],{"class":214}," make",[99,120360,120361],{"class":214}," sure",[99,120363,120364],{"class":214}," that",[99,120366,2660],{"class":109},[99,120368,120369,120371,120374,120377,120380],{"class":101,"line":22},[99,120370,52252],{"class":1949},[99,120372,120373],{"class":214},"   PATH",[99,120375,120376],{"class":214}," includes",[99,120378,120379],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[99,120381,2660],{"class":109},[99,120383,120384,120386,120389,120391,120394,120397,120399,120402,120405,120408,120411,120413,120416,120418],{"class":101,"line":1165},[99,120385,52252],{"class":1949},[99,120387,120388],{"class":214},"   LD_LIBRARY_PATH",[99,120390,120376],{"class":214},[99,120392,120393],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[99,120395,120396],{"class":214}," or,",[99,120398,5196],{"class":214},[99,120400,120401],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[99,120403,120404],{"class":214}," to",[99,120406,120407],{"class":214}," \u002Fetc\u002Fld.so.conf",[99,120409,120410],{"class":214}," and",[99,120412,27219],{"class":214},[99,120414,120415],{"class":214}," ldconfig",[99,120417,64585],{"class":214},[99,120419,120420],{"class":214}," root\n",[14,120422,120423],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[90,120425,120427],{"className":118504,"code":120426,"language":118506,"meta":21,"style":21},"which nvcc\n",[96,120428,120429],{"__ignoreMap":21},[99,120430,120431,120434],{"class":101,"line":102},[99,120432,120433],{"class":158},"which",[99,120435,120436],{"class":214}," nvcc\n",[14,120438,120439],{},[1448,120440],{"alt":21,"src":120441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120443,120444],{},"所以我进行以下操作：",[90,120446,120448],{"className":118504,"code":120447,"language":118506,"meta":21,"style":21},"sudo vim ~\u002F.bashrc\n",[96,120449,120450],{"__ignoreMap":21},[99,120451,120452,120454,120456],{"class":101,"line":102},[99,120453,24565],{"class":1949},[99,120455,118564],{"class":214},[99,120457,120458],{"class":214}," ~\u002F.bashrc\n",[14,120460,120461],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[90,120463,120465],{"className":118504,"code":120464,"language":118506,"meta":21,"style":21},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[96,120466,120467,120479],{"__ignoreMap":21},[99,120468,120469,120471,120474,120476],{"class":101,"line":102},[99,120470,25031],{"class":105},[99,120472,120473],{"class":109}," PATH",[99,120475,155],{"class":105},[99,120477,120478],{"class":109},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[99,120480,120481,120483,120486,120488],{"class":101,"line":22},[99,120482,25031],{"class":105},[99,120484,120485],{"class":109}," LD_LIBRARY_PATH",[99,120487,155],{"class":105},[99,120489,120490],{"class":109},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120492,120493],{},[1448,120494],{"alt":21,"src":120495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[90,120497,120499],{"className":118504,"code":120498,"language":118506,"meta":21,"style":21},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[96,120500,120501,120506,120512,120517],{"__ignoreMap":21},[99,120502,120503],{"class":101,"line":102},[99,120504,120505],{"class":168},"# 刷新当前终端的环境变量\n",[99,120507,120508,120510],{"class":101,"line":22},[99,120509,100874],{"class":158},[99,120511,120458],{"class":214},[99,120513,120514],{"class":101,"line":1165},[99,120515,120516],{"class":168},"# 验证CUDA是否安装成功\n",[99,120518,120519,120522],{"class":101,"line":1180},[99,120520,120521],{"class":1949},"nvcc",[99,120523,120524],{"class":158}," -V\n",[14,120526,120527],{},"出现下图这种则安装成功。",[14,120529,120530],{},[1448,120531],{"alt":21,"src":120532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[70,120534,120536],{"id":120535},"_354-安装cudnn","3.5.4 安装cuDNN",[53,120538,120539],{},[56,120540,120541],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120543,120544,120545,120550],{},"前往 NVIDIA cuDNN 下载页面：",[348,120546,120549],{"href":120547,"rel":120548},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23853],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120552,120553],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120555,120556],{},[1448,120557],{"alt":21,"src":120558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120560,120561],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120563,120564],{},[1448,120565],{"alt":21,"src":120566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120568,120569],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120571,120572],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120574,120575],{},[259,120576,120577],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120579,120580],{},"下载好的：",[14,120582,120583],{},[1448,120584],{"alt":21,"src":120585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[53,120587,120588],{"start":22},[56,120589,120590],{},"安装cuDNN",[14,120592,120593],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120595,120596],{},[1448,120597],{"alt":21,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120600,120601],{},"解压文件，并复制到对应位置完成安装",[90,120603,120605],{"className":118504,"code":120604,"language":118506,"meta":21,"style":21},"# 解压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",[96,120606,120607,120612,120623,120628,120635,120640,120656,120670,120675,120686,120695,120699,120715],{"__ignoreMap":21},[99,120608,120609],{"class":101,"line":102},[99,120610,120611],{"class":168},"# 解压cuDNN文件\n",[99,120613,120614,120617,120620],{"class":101,"line":22},[99,120615,120616],{"class":1949},"tar",[99,120618,120619],{"class":158}," -xvf",[99,120621,120622],{"class":214}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[99,120624,120625],{"class":101,"line":1165},[99,120626,120627],{"class":168},"# cd进文件夹\n",[99,120629,120630,120632],{"class":101,"line":1180},[99,120631,101257],{"class":158},[99,120633,120634],{"class":214}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[99,120636,120637],{"class":101,"line":1186},[99,120638,120639],{"class":168},"# 复制cuDNN文件到CUDA目录\n",[99,120641,120642,120644,120646,120649,120651,120654],{"class":101,"line":1200},[99,120643,24565],{"class":1949},[99,120645,27842],{"class":214},[99,120647,120648],{"class":214}," include\u002Fcudnn",[99,120650,565],{"class":158},[99,120652,120653],{"class":214},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[99,120655,2660],{"class":109},[99,120657,120658,120660,120662,120665,120667],{"class":101,"line":1206},[99,120659,24565],{"class":1949},[99,120661,27842],{"class":214},[99,120663,120664],{"class":214}," lib\u002Flibcudnn",[99,120666,565],{"class":158},[99,120668,120669],{"class":214},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[99,120671,120672],{"class":101,"line":1297},[99,120673,120674],{"class":168},"# 对比一下有没有缺文件\n",[99,120676,120677,120679,120682,120684],{"class":101,"line":1303},[99,120678,26750],{"class":1949},[99,120680,120681],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[99,120683,565],{"class":158},[99,120685,2660],{"class":109},[99,120687,120688,120690,120693],{"class":101,"line":1315},[99,120689,26750],{"class":1949},[99,120691,120692],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[99,120694,119229],{"class":158},[99,120696,120697],{"class":101,"line":1598},[99,120698,120278],{"class":168},[99,120700,120701,120703,120705,120708,120710,120712],{"class":101,"line":1603},[99,120702,24565],{"class":1949},[99,120704,24568],{"class":214},[99,120706,120707],{"class":214}," a+r",[99,120709,120681],{"class":214},[99,120711,565],{"class":158},[99,120713,120714],{"class":109},"   \n",[99,120716,120717,120719,120721,120723,120725],{"class":101,"line":1609},[99,120718,24565],{"class":1949},[99,120720,24568],{"class":214},[99,120722,120707],{"class":214},[99,120724,120692],{"class":214},[99,120726,119229],{"class":158},[53,120728,120729],{"start":1165},[56,120730,120731],{},"检查是否安装成功",[90,120733,120735],{"className":118504,"code":120734,"language":118506,"meta":21,"style":21},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[96,120736,120737,120742],{"__ignoreMap":21},[99,120738,120739],{"class":101,"line":102},[99,120740,120741],{"class":168},"# 检查cuDNN版本命令\n",[99,120743,120744,120747,120750,120752,120754,120757,120760],{"class":101,"line":22},[99,120745,120746],{"class":1949},"cat",[99,120748,120749],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[99,120751,25098],{"class":105},[99,120753,30217],{"class":1949},[99,120755,120756],{"class":214}," CUDNN_MAJOR",[99,120758,120759],{"class":158}," -A",[99,120761,47704],{"class":158},[14,120763,120764],{},"出现下图这样的就是安装成功了",[14,120766,120767],{},[1448,120768],{"alt":21,"src":120769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[53,120771,120772],{"start":1180},[56,120773,120774],{},"软链接(一般不需要)",[90,120776,120778],{"className":118504,"code":120777,"language":118506,"meta":21,"style":21},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[96,120779,120780,120785],{"__ignoreMap":21},[99,120781,120782],{"class":101,"line":102},[99,120783,120784],{"class":168},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[99,120786,120787,120789],{"class":101,"line":22},[99,120788,24565],{"class":1949},[99,120790,120791],{"class":214}," ldconfig\n",[14,120793,120794],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[90,120796,120801],{"className":120797,"code":120798,"language":120799,"meta":120800,"style":21},"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",[96,120802,120803,120808,120813,120818,120823,120828,120833],{"__ignoreMap":21},[99,120804,120805],{"class":101,"line":102},[99,120806,120807],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[99,120809,120810],{"class":101,"line":22},[99,120811,120812],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[99,120814,120815],{"class":101,"line":1165},[99,120816,120817],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[99,120819,120820],{"class":101,"line":1180},[99,120821,120822],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[99,120824,120825],{"class":101,"line":1186},[99,120826,120827],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[99,120829,120830],{"class":101,"line":1200},[99,120831,120832],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[99,120834,120835],{"class":101,"line":1206},[99,120836,120837],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120839,120840],{},"运行下方的命令",[90,120842,120844],{"className":118504,"code":120843,"language":118506,"meta":21,"style":21},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[96,120845,120846,120851,120858,120863],{"__ignoreMap":21},[99,120847,120848],{"class":101,"line":102},[99,120849,120850],{"class":168},"# cd进入CUDA路径\n",[99,120852,120853,120855],{"class":101,"line":22},[99,120854,101257],{"class":158},[99,120856,120857],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[99,120859,120860],{"class":101,"line":1165},[99,120861,120862],{"class":168}," # 查看本路径下的需要软链接的文件名\n",[99,120864,120865],{"class":101,"line":1180},[99,120866,120867],{"class":1949}," ls\n",[14,120869,120870],{},[1448,120871],{"alt":21,"src":120872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120874,120875,120876,18397,120879,18397,120882,120885],{},"如上图，我需要将",[96,120877,120878],{},"libcudnn_xxx_xxxxx.so.8.9.7",[96,120880,120881],{},"libcudnn_xxx_xxxxx.so.8",[96,120883,120884],{},"libcudnn_xxx_xxxxx.so","软链接",[90,120887,120889],{"className":118504,"code":120888,"language":118506,"meta":21,"style":21},"# 创建符号链接。对于每个 .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",[96,120890,120891,120896,120912,120926,120940,120954,120968,120982,120996,121001,121007,121012],{"__ignoreMap":21},[99,120892,120893],{"class":101,"line":102},[99,120894,120895],{"class":168},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[99,120897,120898,120900,120903,120906,120909],{"class":101,"line":22},[99,120899,24565],{"class":1949},[99,120901,120902],{"class":214}," ln",[99,120904,120905],{"class":158}," -sf",[99,120907,120908],{"class":214}," libcudnn_cnn_train.so.8.9.7",[99,120910,120911],{"class":214}," libcudnn_cnn_train.so.8\n",[99,120913,120914,120916,120918,120920,120923],{"class":101,"line":1165},[99,120915,24565],{"class":1949},[99,120917,120902],{"class":214},[99,120919,120905],{"class":158},[99,120921,120922],{"class":214}," libcudnn_adv_infer.so.8.9.7",[99,120924,120925],{"class":214}," libcudnn_adv_infer.so.8\n",[99,120927,120928,120930,120932,120934,120937],{"class":101,"line":1180},[99,120929,24565],{"class":1949},[99,120931,120902],{"class":214},[99,120933,120905],{"class":158},[99,120935,120936],{"class":214}," libcudnn_adv_train.so.8.9.7",[99,120938,120939],{"class":214}," libcudnn_adv_train.so.8\n",[99,120941,120942,120944,120946,120948,120951],{"class":101,"line":1186},[99,120943,24565],{"class":1949},[99,120945,120902],{"class":214},[99,120947,120905],{"class":158},[99,120949,120950],{"class":214}," libcudnn_cnn_infer.so.8.9.7",[99,120952,120953],{"class":214}," libcudnn_cnn_infer.so.8\n",[99,120955,120956,120958,120960,120962,120965],{"class":101,"line":1200},[99,120957,24565],{"class":1949},[99,120959,120902],{"class":214},[99,120961,120905],{"class":158},[99,120963,120964],{"class":214}," libcudnn.so.8.9.7",[99,120966,120967],{"class":214}," libcudnn.so.8\n",[99,120969,120970,120972,120974,120976,120979],{"class":101,"line":1206},[99,120971,24565],{"class":1949},[99,120973,120902],{"class":214},[99,120975,120905],{"class":158},[99,120977,120978],{"class":214}," libcudnn_ops_infer.so.8.9.7",[99,120980,120981],{"class":214}," libcudnn_ops_infer.so.8\n",[99,120983,120984,120986,120988,120990,120993],{"class":101,"line":1297},[99,120985,24565],{"class":1949},[99,120987,120902],{"class":214},[99,120989,120905],{"class":158},[99,120991,120992],{"class":214}," libcudnn_ops_train.so.8.9.7",[99,120994,120995],{"class":214}," libcudnn_ops_train.so.8\n",[99,120997,120998],{"class":101,"line":1303},[99,120999,121000],{"class":168},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[99,121002,121003,121005],{"class":101,"line":1315},[99,121004,24565],{"class":1949},[99,121006,120791],{"class":214},[99,121008,121009],{"class":101,"line":1598},[99,121010,121011],{"class":168},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[99,121013,121014,121016,121019,121022,121024,121027],{"class":101,"line":1603},[99,121015,26750],{"class":1949},[99,121017,121018],{"class":158}," -l",[99,121020,121021],{"class":214}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[99,121023,565],{"class":158},[99,121025,121026],{"class":214},".so",[99,121028,119229],{"class":158},[70,121030,121032],{"id":121031},"_355-常见问题","3.5.5 常见问题",[53,121034,121035],{},[56,121036,121037],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[90,121039,121041],{"className":118504,"code":121040,"language":118506,"meta":21,"style":21},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[96,121042,121043],{"__ignoreMap":21},[99,121044,121045,121047,121049],{"class":101,"line":102},[99,121046,24565],{"class":1949},[99,121048,118564],{"class":214},[99,121050,121051],{"class":214}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121053,121054],{},"blacklist-nouveau.conf文件内容如下：",[90,121056,121058],{"className":118504,"code":121057,"language":118506,"meta":21,"style":21},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[96,121059,121060,121068,121075,121087,121097],{"__ignoreMap":21},[99,121061,121062,121065],{"class":101,"line":102},[99,121063,121064],{"class":1949},"blacklist",[99,121066,121067],{"class":214}," nouveau\n",[99,121069,121070,121072],{"class":101,"line":22},[99,121071,121064],{"class":1949},[99,121073,121074],{"class":214}," lbm-nouveau\n",[99,121076,121077,121079,121082,121085],{"class":101,"line":1165},[99,121078,115911],{"class":1949},[99,121080,121081],{"class":214}," nouveau",[99,121083,121084],{"class":214}," modeset=",[99,121086,3071],{"class":158},[99,121088,121089,121092,121094],{"class":101,"line":1180},[99,121090,121091],{"class":158},"alias",[99,121093,121081],{"class":214},[99,121095,121096],{"class":214}," off\n",[99,121098,121099,121101,121104],{"class":101,"line":1186},[99,121100,121091],{"class":158},[99,121102,121103],{"class":214}," lbm-nouveau",[99,121105,121096],{"class":214},[14,121107,121108],{},"接着运行下方命令",[90,121110,121112],{"className":118504,"code":121111,"language":118506,"meta":21,"style":21},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[96,121113,121114,121124,121129],{"__ignoreMap":21},[99,121115,121116,121118,121121],{"class":101,"line":102},[99,121117,24565],{"class":1949},[99,121119,121120],{"class":214}," update-initramfs",[99,121122,121123],{"class":158}," -u\n",[99,121125,121126],{"class":101,"line":22},[99,121127,121128],{"class":1949},"或者\n",[99,121130,121131,121133,121136],{"class":101,"line":1165},[99,121132,24565],{"class":1949},[99,121134,121135],{"class":214}," dracut",[99,121137,121138],{"class":158}," --force\n",[14,121140,121141],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[90,121143,121145],{"className":118504,"code":121144,"language":118506,"meta":21,"style":21},"lsmod | grep nouveau\n",[96,121146,121147],{"__ignoreMap":21},[99,121148,121149,121152,121154,121156],{"class":101,"line":102},[99,121150,121151],{"class":1949},"lsmod",[99,121153,25098],{"class":105},[99,121155,30217],{"class":1949},[99,121157,121067],{"class":214},[53,121159,121160],{"start":22},[56,121161,121162],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[90,121164,121166],{"className":118504,"code":121165,"language":118506,"meta":21,"style":21},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[96,121167,121168],{"__ignoreMap":21},[99,121169,121170,121172,121174],{"class":101,"line":102},[99,121171,24565],{"class":1949},[99,121173,118564],{"class":214},[99,121175,121176],{"class":214}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121178,121179],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[90,121181,121183],{"className":118504,"code":121182,"language":118506,"meta":21,"style":21},"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",[96,121184,121185,121193,121201,121209,121216,121224,121234,121242],{"__ignoreMap":21},[99,121186,121187,121190],{"class":101,"line":102},[99,121188,121189],{"class":1949},"Section",[99,121191,121192],{"class":214}," \"OutputClass\"\n",[99,121194,121195,121198],{"class":101,"line":22},[99,121196,121197],{"class":1949},"   Identifier",[99,121199,121200],{"class":214}," \"nvidia\"\n",[99,121202,121203,121206],{"class":101,"line":1165},[99,121204,121205],{"class":1949},"   MatchDriver",[99,121207,121208],{"class":214}," \"nvidia-drm\"\n",[99,121210,121211,121214],{"class":101,"line":1180},[99,121212,121213],{"class":1949},"   Driver",[99,121215,121200],{"class":214},[99,121217,121218,121221],{"class":101,"line":1186},[99,121219,121220],{"class":1949},"   Option",[99,121222,121223],{"class":214}," \"AllowEmptyInitialConfiguration\"\n",[99,121225,121226,121228,121231],{"class":101,"line":1200},[99,121227,121220],{"class":1949},[99,121229,121230],{"class":214}," \"PrimaryGPU\"",[99,121232,121233],{"class":214}," \"yes\"\n",[99,121235,121236,121239],{"class":101,"line":1206},[99,121237,121238],{"class":1949},"   ModulePath",[99,121240,121241],{"class":214}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[99,121243,121244],{"class":101,"line":1297},[99,121245,121246],{"class":1949},"EndSection\n",[53,121248,121249],{"start":1165},[56,121250,121251],{},"安装N卡驱动提示错误",[90,121253,121255],{"className":120797,"code":121254,"language":120799,"meta":120800,"style":21},"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",[96,121256,121257],{"__ignoreMap":21},[99,121258,121259],{"class":101,"line":102},[99,121260,121254],{},[53,121262,121263],{},[56,121264,121265],{},"检查当前运行的内核版本：",[14,121267,121268],{},"运行以下命令以查看你当前正在使用的内核版本：",[90,121270,121272],{"className":117277,"code":121271,"language":117279,"meta":21,"style":21},"uname -r\n",[96,121273,121274],{"__ignoreMap":21},[99,121275,121276,121278],{"class":101,"line":102},[99,121277,70185],{"class":1949},[99,121279,121280],{"class":158}," -r\n",[53,121282,121283],{"start":22},[56,121284,121285],{},"安装内核开发文件：",[14,121287,121288,121289,121292],{},"确保你已经安装了与当前内核版本相匹配的 ",[96,121290,121291],{},"kernel-devel"," 包。运行以下命令来安装：",[90,121294,121296],{"className":117277,"code":121295,"language":117279,"meta":21,"style":21},"sudo dnf install kernel-devel-$(uname -r)\n",[96,121297,121298],{"__ignoreMap":21},[99,121299,121300,121302,121304,121306,121309,121311,121313,121315],{"class":101,"line":102},[99,121301,24565],{"class":1949},[99,121303,26304],{"class":214},[99,121305,23822],{"class":214},[99,121307,121308],{"class":214}," kernel-devel-",[99,121310,25088],{"class":109},[99,121312,70185],{"class":1949},[99,121314,119620],{"class":158},[99,121316,116],{"class":109},[14,121318,121319],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[53,121321,121322],{"start":1165},[56,121323,121324],{},"安装内核源代码（如果需要）：",[14,121326,121327],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[90,121329,121331],{"className":117277,"code":121330,"language":117279,"meta":21,"style":21},"sudo dnf install kernel-headers kernel-source\n",[96,121332,121333],{"__ignoreMap":21},[99,121334,121335,121337,121339,121341,121344],{"class":101,"line":102},[99,121336,24565],{"class":1949},[99,121338,26304],{"class":214},[99,121340,23822],{"class":214},[99,121342,121343],{"class":214}," kernel-headers",[99,121345,121346],{"class":214}," kernel-source\n",[53,121348,121349],{"start":1180},[56,121350,121351],{},"检查安装：",[14,121353,121354,121355,121358],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[96,121356,121357],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[90,121360,121362],{"className":117277,"code":121361,"language":117279,"meta":21,"style":21},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[96,121363,121364],{"__ignoreMap":21},[99,121365,121366,121368],{"class":101,"line":102},[99,121367,26750],{"class":1949},[99,121369,121370],{"class":214}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121372,121373,121374,121377],{},"如果仍然遇到问题，可以通过 ",[96,121375,121376],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5113,121379,121380],{},"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":21,"searchDepth":22,"depth":22,"links":121382},[121383,121387,121397,121401,121402],{"id":118480,"depth":22,"text":118481,"children":121384},[121385,121386],{"id":118490,"depth":1165,"text":118491},{"id":118500,"depth":1165,"text":118501},{"id":118700,"depth":22,"text":118701,"children":121388},[121389,121390,121391,121392,121393,121394,121395,121396],{"id":118704,"depth":1165,"text":118705},{"id":118774,"depth":1165,"text":118775},{"id":118863,"depth":1165,"text":118864},{"id":119108,"depth":1165,"text":119109},{"id":119178,"depth":1165,"text":119179},{"id":119245,"depth":1165,"text":119246},{"id":119280,"depth":1165,"text":119281},{"id":119335,"depth":1165,"text":119336},{"id":119386,"depth":22,"text":119387,"children":121398},[121399,121400],{"id":119390,"depth":1165,"text":119391},{"id":119470,"depth":1165,"text":119471},{"id":119656,"depth":22,"text":119657},{"id":119829,"depth":22,"text":119830,"children":121403},[121404,121405,121406,121407,121408],{"id":119833,"depth":1165,"text":119834},{"id":119874,"depth":1165,"text":119875},{"id":120161,"depth":1165,"text":120162},{"id":120535,"depth":1165,"text":120536},{"id":121031,"depth":1165,"text":121032},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118472,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121415,"title":121416,"body":121417,"description":23364,"extension":24,"meta":121757,"navigation":26,"path":121758,"seo":121759,"stem":121760,"__hash__":121761},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121418,"toc":121755},[121419,121422,121427,121430,121676,121681,121684,121720,121723,121752],[10,121420,121416],{"id":121421},"_4-命令教程长期积累",[53,121423,121424],{},[56,121425,121426],{},"大多数命令",[14,121428,121429],{},"常用 Linux 命令速查：",[90,121431,121433],{"className":117277,"code":121432,"language":117279,"meta":21,"style":21},"# 文件与目录\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",[96,121434,121435,121440,121447,121454,121462,121469,121476,121484,121492,121499,121506,121514,121518,121523,121530,121538,121545,121549,121554,121561,121569,121577,121585,121593,121597,121602,121610,121617,121624,121632,121640,121644,121649,121658,121667],{"__ignoreMap":21},[99,121436,121437],{"class":101,"line":102},[99,121438,121439],{"class":168},"# 文件与目录\n",[99,121441,121442,121444],{"class":101,"line":22},[99,121443,26750],{"class":1949},[99,121445,121446],{"class":168},"        # 列出目录内容\n",[99,121448,121449,121451],{"class":101,"line":1165},[99,121450,101257],{"class":158},[99,121452,121453],{"class":168},"        # 切换目录\n",[99,121455,121456,121459],{"class":101,"line":1180},[99,121457,121458],{"class":158},"pwd",[99,121460,121461],{"class":168},"       # 显示当前路径\n",[99,121463,121464,121466],{"class":101,"line":1186},[99,121465,101247],{"class":1949},[99,121467,121468],{"class":168},"     # 创建目录\n",[99,121470,121471,121473],{"class":101,"line":1200},[99,121472,25311],{"class":1949},[99,121474,121475],{"class":168},"        # 删除文件或目录\n",[99,121477,121478,121481],{"class":101,"line":1206},[99,121479,121480],{"class":1949},"cp",[99,121482,121483],{"class":168},"        # 复制文件或目录\n",[99,121485,121486,121489],{"class":101,"line":1297},[99,121487,121488],{"class":1949},"mv",[99,121490,121491],{"class":168},"        # 移动\u002F重命名文件或目录\n",[99,121493,121494,121496],{"class":101,"line":1303},[99,121495,101264],{"class":1949},[99,121497,121498],{"class":168},"     # 创建空文件\n",[99,121500,121501,121503],{"class":101,"line":1315},[99,121502,120746],{"class":1949},[99,121504,121505],{"class":168},"       # 查看文件内容\n",[99,121507,121508,121511],{"class":101,"line":1598},[99,121509,121510],{"class":1949},"head\u002Ftail",[99,121512,121513],{"class":168}," # 查看文件头部\u002F尾部\n",[99,121515,121516],{"class":101,"line":1603},[99,121517,2386],{"emptyLinePlaceholder":26},[99,121519,121520],{"class":101,"line":1609},[99,121521,121522],{"class":168},"# 权限管理\n",[99,121524,121525,121527],{"class":101,"line":1614},[99,121526,24600],{"class":1949},[99,121528,121529],{"class":168},"     # 修改文件权限\n",[99,121531,121532,121535],{"class":101,"line":1628},[99,121533,121534],{"class":1949},"chown",[99,121536,121537],{"class":168},"     # 修改文件所有者\n",[99,121539,121540,121542],{"class":101,"line":1633},[99,121541,24565],{"class":1949},[99,121543,121544],{"class":168},"      # 以管理员身份执行\n",[99,121546,121547],{"class":101,"line":1639},[99,121548,2386],{"emptyLinePlaceholder":26},[99,121550,121551],{"class":101,"line":1660},[99,121552,121553],{"class":168},"# 系统信息\n",[99,121555,121556,121558],{"class":101,"line":1665},[99,121557,70185],{"class":1949},[99,121559,121560],{"class":168},"     # 系统信息\n",[99,121562,121563,121566],{"class":101,"line":1679},[99,121564,121565],{"class":1949},"df",[99,121567,121568],{"class":168},"        # 磁盘使用情况\n",[99,121570,121571,121574],{"class":101,"line":1684},[99,121572,121573],{"class":1949},"free",[99,121575,121576],{"class":168},"      # 内存使用情况\n",[99,121578,121579,121582],{"class":101,"line":1713},[99,121580,121581],{"class":1949},"top\u002Fhtop",[99,121583,121584],{"class":168},"  # 进程监控\n",[99,121586,121587,121590],{"class":101,"line":1718},[99,121588,121589],{"class":1949},"ps",[99,121591,121592],{"class":168},"        # 查看进程\n",[99,121594,121595],{"class":101,"line":1735},[99,121596,2386],{"emptyLinePlaceholder":26},[99,121598,121599],{"class":101,"line":1740},[99,121600,121601],{"class":168},"# 网络\n",[99,121603,121604,121607],{"class":101,"line":1745},[99,121605,121606],{"class":1949},"ping",[99,121608,121609],{"class":168},"      # 测试网络连通性\n",[99,121611,121612,121614],{"class":101,"line":1750},[99,121613,26838],{"class":1949},[99,121615,121616],{"class":168},"      # 发送 HTTP 请求\n",[99,121618,121619,121621],{"class":101,"line":1764},[99,121620,120270],{"class":1949},[99,121622,121623],{"class":168},"      # 下载文件\n",[99,121625,121626,121629],{"class":101,"line":1769},[99,121627,121628],{"class":1949},"ssh",[99,121630,121631],{"class":168},"       # 远程登录\n",[99,121633,121634,121637],{"class":101,"line":2563},[99,121635,121636],{"class":1949},"scp",[99,121638,121639],{"class":168},"       # 远程文件传输\n",[99,121641,121642],{"class":101,"line":2577},[99,121643,2386],{"emptyLinePlaceholder":26},[99,121645,121646],{"class":101,"line":2585},[99,121647,121648],{"class":168},"# 包管理（Debian\u002FUbuntu）\n",[99,121650,121651,121653,121655],{"class":101,"line":2590},[99,121652,117349],{"class":1949},[99,121654,117328],{"class":214},[99,121656,121657],{"class":168},"   # 更新软件源\n",[99,121659,121660,121662,121664],{"class":101,"line":2596},[99,121661,117349],{"class":1949},[99,121663,23822],{"class":214},[99,121665,121666],{"class":168},"  # 安装软件包\n",[99,121668,121669,121671,121673],{"class":101,"line":2602},[99,121670,117349],{"class":1949},[99,121672,26068],{"class":214},[99,121674,121675],{"class":168},"   # 卸载软件包\n",[53,121677,121678],{"start":22},[56,121679,121680],{},"KDE Dolphin 以root打开",[14,121682,121683],{},"kde5",[90,121685,121687],{"className":117277,"code":121686,"language":117279,"meta":21,"style":21},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[96,121688,121689],{"__ignoreMap":21},[99,121690,121691,121694,121697,121700,121702,121704,121707,121710,121712,121715,121717],{"class":101,"line":102},[99,121692,121693],{"class":1949},"pkexec",[99,121695,121696],{"class":214}," env",[99,121698,121699],{"class":214}," DISPLAY=",[99,121701,28124],{"class":109},[99,121703,28182],{"class":214},[99,121705,121706],{"class":109},"$XAUTHORITY ",[99,121708,121709],{"class":214},"KDE_SESSION_VERSION=",[99,121711,429],{"class":158},[99,121713,121714],{"class":214}," KDE_FULL_SESSION=",[99,121716,1348],{"class":158},[99,121718,121719],{"class":214}," dolphin\n",[14,121721,121722],{},"kde6",[90,121724,121726],{"className":117277,"code":121725,"language":117279,"meta":21,"style":21},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[96,121727,121728],{"__ignoreMap":21},[99,121729,121730,121732,121734,121736,121738,121740,121742,121744,121746,121748,121750],{"class":101,"line":102},[99,121731,121693],{"class":1949},[99,121733,121696],{"class":214},[99,121735,121699],{"class":214},[99,121737,28124],{"class":109},[99,121739,28182],{"class":214},[99,121741,121706],{"class":109},[99,121743,121709],{"class":214},[99,121745,454],{"class":158},[99,121747,121714],{"class":214},[99,121749,1348],{"class":158},[99,121751,121719],{"class":214},[5113,121753,121754],{},"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":21,"searchDepth":22,"depth":22,"links":121756},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121416,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121763,"title":121764,"body":121765,"description":23364,"extension":24,"meta":121779,"navigation":26,"path":121780,"seo":121781,"stem":121782,"__hash__":121783},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121766,"toc":121777},[121767,121770],[10,121768,121764],{"id":121769},"_5-各种环境配置",[14,121771,121772],{},[348,121773,121776],{"href":121774,"rel":121775},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23853],"电控组环境搭建大全",{"title":21,"searchDepth":22,"depth":22,"links":121778},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121764,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121785,"title":121786,"body":121787,"description":23364,"extension":24,"meta":122135,"navigation":26,"path":122136,"seo":122137,"stem":122138,"__hash__":122139},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121788,"toc":122127},[121789,121792,121796,121800,121804,121809,121816,121820,122113,122117,122124],[10,121790,121786],{"id":121791},"_6-拓展功能",[41,121793,121795],{"id":121794},"_61-wine","6.1 Wine",[41,121797,121799],{"id":121798},"_62-android","6.2 Android",[70,121801,121803],{"id":121802},"_621-i卡a卡","6.2.1 I卡、A卡",[53,121805,121806],{},[56,121807,121808],{},"Wayland-Waydroid(体验超级好)",[14,121810,121811,121812],{},"Waydroid 官网与安装指南：",[348,121813,121814],{"href":121814,"rel":121815},"https:\u002F\u002Fwaydro.id\u002F",[23853],[70,121817,121819],{"id":121818},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[53,121821,121822],{},[56,121823,121824,121825,121827,121828,121832,121834,121837,121842,122039],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53697,121826],{},"BlissOS 官网下载：",[348,121829,121830],{"href":121830,"rel":121831},"https:\u002F\u002Fblissos.org\u002F",[23853],[53697,121833],{},[1448,121835],{"alt":21,"src":121836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[53,121838,121839],{"start":1165},[56,121840,121841],{},"比较推荐的配置",[90,121843,121845],{"className":117277,"code":121844,"language":117279,"meta":21,"style":21},"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",[96,121846,121847,121854,121864,121874,121884,121896,121906,121913,121923,121932,121941,121951,121961,121970,121980,121990,122002,122012,122021,122031],{"__ignoreMap":21},[99,121848,121849,121852],{"class":101,"line":102},[99,121850,121851],{"class":1949},"qemu-system-x86_64",[99,121853,24667],{"class":158},[99,121855,121856,121859,121862],{"class":101,"line":22},[99,121857,121858],{"class":158},"        -M",[99,121860,121861],{"class":214}," q35,vmport=off",[99,121863,24667],{"class":158},[99,121865,121866,121869,121872],{"class":101,"line":1165},[99,121867,121868],{"class":158},"        -accel",[99,121870,121871],{"class":214}," kvm",[99,121873,24667],{"class":158},[99,121875,121876,121879,121882],{"class":101,"line":1180},[99,121877,121878],{"class":158},"        -cpu",[99,121880,121881],{"class":214}," qemu64,+sse3,+sse4.2",[99,121883,24667],{"class":158},[99,121885,121886,121889,121892,121894],{"class":101,"line":1186},[99,121887,121888],{"class":158},"        -smp",[99,121890,121891],{"class":214}," 8,cores=",[99,121893,403],{"class":158},[99,121895,24667],{"class":158},[99,121897,121898,121901,121904],{"class":101,"line":1200},[99,121899,121900],{"class":158},"        -m",[99,121902,121903],{"class":214}," 6G",[99,121905,24667],{"class":158},[99,121907,121908,121911],{"class":101,"line":1206},[99,121909,121910],{"class":158},"        -usb",[99,121912,24667],{"class":158},[99,121914,121915,121918,121921],{"class":101,"line":1297},[99,121916,121917],{"class":158},"        -device",[99,121919,121920],{"class":214}," virtio-tablet",[99,121922,24667],{"class":158},[99,121924,121925,121927,121930],{"class":101,"line":1303},[99,121926,121917],{"class":158},[99,121928,121929],{"class":214}," virtio-keyboard",[99,121931,24667],{"class":158},[99,121933,121934,121936,121939],{"class":101,"line":1315},[99,121935,121917],{"class":158},[99,121937,121938],{"class":214}," usb-tablet",[99,121940,24667],{"class":158},[99,121942,121943,121946,121949],{"class":101,"line":1598},[99,121944,121945],{"class":158},"        -bios",[99,121947,121948],{"class":214}," OVMF-pure-efi64.fd",[99,121950,24667],{"class":158},[99,121952,121953,121956,121959],{"class":101,"line":1603},[99,121954,121955],{"class":158},"        -net",[99,121957,121958],{"class":214}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[99,121960,24667],{"class":158},[99,121962,121963,121965,121968],{"class":101,"line":1609},[99,121964,121955],{"class":158},[99,121966,121967],{"class":214}," nic,model=virtio",[99,121969,24667],{"class":158},[99,121971,121972,121975,121978],{"class":101,"line":1614},[99,121973,121974],{"class":158},"        -audio",[99,121976,121977],{"class":214}," sdl,model=hda",[99,121979,24667],{"class":158},[99,121981,121982,121985,121988],{"class":101,"line":1628},[99,121983,121984],{"class":158},"        -display",[99,121986,121987],{"class":214}," sdl,gl=on,show-cursor=on",[99,121989,24667],{"class":158},[99,121991,121992,121994,121997,122000],{"class":101,"line":1633},[99,121993,121917],{"class":158},[99,121995,121996],{"class":214}," virtio-vga-gl,xres=1920,yres=",[99,121998,121999],{"class":158},"1080",[99,122001,24667],{"class":158},[99,122003,122004,122007,122010],{"class":101,"line":1639},[99,122005,122006],{"class":158},"        -drive",[99,122008,122009],{"class":214}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[99,122011,24667],{"class":158},[99,122013,122014,122016,122019],{"class":101,"line":1660},[99,122015,122006],{"class":158},[99,122017,122018],{"class":214}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[99,122020,24667],{"class":158},[99,122022,122023,122026,122029],{"class":101,"line":1665},[99,122024,122025],{"class":158},"        -monitor",[99,122027,122028],{"class":214}," stdio",[99,122030,24667],{"class":158},[99,122032,122033,122036],{"class":101,"line":1679},[99,122034,122035],{"class":158},"        -serial",[99,122037,122038],{"class":214}," none\n",[53,122040,122041],{"start":1186},[56,122042,122043,122044],{},"常用操作：",[53,122045,122046,122049,122105],{},[56,122047,122048],{},"全屏：Ctrl+Alt+F",[56,122050,122051,122052,122057],{},"adb调试",[53,122053,122054],{},[56,122055,122056],{},"使Linux与Android用ADB连接。",[90,122058,122060],{"className":117277,"code":122059,"language":117279,"meta":21,"style":21},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[96,122061,122062,122067,122078,122083,122095,122100],{"__ignoreMap":21},[99,122063,122064],{"class":101,"line":102},[99,122065,122066],{"class":168},"# 连接安卓\n",[99,122068,122069,122072,122075],{"class":101,"line":22},[99,122070,122071],{"class":1949},"adb",[99,122073,122074],{"class":214}," connect",[99,122076,122077],{"class":158}," 127.0.0.1\n",[99,122079,122080],{"class":101,"line":1165},[99,122081,122082],{"class":168},"# 打开shell\n",[99,122084,122085,122087,122089,122092],{"class":101,"line":1180},[99,122086,122071],{"class":1949},[99,122088,26872],{"class":158},[99,122090,122091],{"class":214}," 127.0.0.1:5555",[99,122093,122094],{"class":214}," shell\n",[99,122096,122097],{"class":101,"line":1186},[99,122098,122099],{"class":168},"# 使用root权限\n",[99,122101,122102],{"class":101,"line":1200},[99,122103,122104],{"class":1949},"su\n",[56,122106,122107,122108],{},"中文输入法",[53,122109,122110],{},[56,122111,122112],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[41,122114,122116],{"id":122115},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122118,122119,122120],{},"rEFInd 官网与文档：",[348,122121,122122],{"href":122122,"rel":122123},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23853],[5113,122125,122126],{},"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":21,"searchDepth":22,"depth":22,"links":122128},[122129,122130,122134],{"id":121794,"depth":22,"text":121795},{"id":121798,"depth":22,"text":121799,"children":122131},[122132,122133],{"id":121802,"depth":1165,"text":121803},{"id":121818,"depth":1165,"text":121819},{"id":122115,"depth":22,"text":122116},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121786,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122141,"title":122142,"body":122143,"description":23364,"extension":24,"meta":125442,"navigation":26,"path":125443,"seo":125444,"stem":125445,"__hash__":125446},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122144,"toc":125416},[122145,122148,122152,122155,122162,122412,122415,122487,122490,122494,122498,122503,122506,122509,122512,122517,122520,122523,122526,122531,122534,122539,122542,122545,122550,122553,122558,122561,122565,122569,122572,122577,122580,122594,122597,122600,122609,122612,122621,122624,122627,122636,122639,122648,122651,122654,122663,122666,122669,122684,122687,122690,122699,122704,122707,122710,122719,122722,122731,122734,122743,122746,122755,122760,122763,122771,122776,122779,122788,122791,122799,122804,122807,122816,122819,122822,122826,122829,122834,122837,122842,122856,122861,122866,122877,122882,122888,122893,122908,122913,122916,122921,122926,122931,122939,122944,122951,122956,122967,122972,122975,122979,122982,122985,122990,122993,123012,123017,123020,123029,123034,123037,123059,123062,123092,123095,123100,123103,123117,123122,123141,123144,123147,123152,123164,123169,123174,123177,123182,123185,123200,123203,123208,123213,123217,123222,123262,123265,123269,123275,123281,123286,123289,123296,123301,123308,123311,123314,123321,123335,123338,123398,123401,123415,123427,123430,123433,123436,123500,123503,123506,123509,123529,123532,123537,123544,123548,123551,123555,123560,123565,123569,123572,123575,123617,123622,123625,123647,123662,123664,123669,123681,123741,123743,123745,123799,123801,123803,123809,123814,123817,123822,123826,123829,123891,123896,123899,123901,123905,123917,123999,124001,124003,124057,124063,124065,124069,124074,124076,124081,124085,124105,124140,124144,124147,124150,124153,124160,124163,124175,124178,124193,124196,124215,124263,124266,124283,124286,124300,124305,124308,124317,124332,124344,124382,124387,124396,124401,124406,124432,124441,124445,124449,124454,124457,124461,124465,124470,124473,124478,124481,124486,124489,124494,124497,124501,124506,124509,124514,124517,124521,124526,124529,124534,124537,124542,124545,124549,124554,124557,124562,124565,124570,124573,124577,124582,124585,124590,124593,124598,124601,124606,124609,124614,124617,124622,124625,124629,124634,124637,124642,124649,124653,124658,124661,124666,124669,124673,124678,124681,124684,124687,124690,124693,124697,124700,124710,124715,124720,124742,124747,124752,124759,124763,124768,124771,124774,124779,124782,124785,124788,124791,124794,124797,124800,124803,124806,124809,124812,124815,124820,124825,124830,124835,124840,124845,124850,124853,124857,124860,124864,124869,124874,124879,124884,124888,124894,124902,124907,124910,124915,124930,124933,124938,124972,124987,124990,125045,125071,125083,125086,125095,125098,125113,125118,125121,125127,125132,125135,125140,125143,125148,125153,125160,125163,125178,125181,125216,125221,125229,125267,125270,125273,125278,125281,125286,125297,125331,125336,125339,125348,125353,125359,125362,125367,125376,125381,125384,125387,125392,125400,125403,125408,125413],[10,122146,122142],{"id":122147},"_7-其他操作",[41,122149,122151],{"id":122150},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122153,122154],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122156,122157,122158,122161],{},"进入工控机的硬盘目录，进入",[96,122159,122160],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[90,122163,122167],{"className":122164,"code":122165,"language":122166,"meta":21,"style":21},"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",[96,122168,122169,122177,122188,122195,122202,122214,122221,122233,122244,122255,122262,122269,122276,122288,122300,122307,122319,122331,122338,122350,122362,122374,122385,122392,122403],{"__ignoreMap":21},[99,122170,122171,122174],{"class":101,"line":102},[99,122172,122173],{"class":51281},"network",[99,122175,122176],{"class":109},": \n",[99,122178,122179,122182,122184,122186],{"class":101,"line":22},[99,122180,122181],{"class":51281},"  version",[99,122183,51418],{"class":109},[99,122185,187],{"class":158},[99,122187,2660],{"class":109},[99,122189,122190,122193],{"class":101,"line":1165},[99,122191,122192],{"class":51281},"  wifis",[99,122194,122176],{"class":109},[99,122196,122197,122200],{"class":101,"line":1180},[99,122198,122199],{"class":51281},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[99,122201,122176],{"class":109},[99,122203,122204,122207,122209,122212],{"class":101,"line":1186},[99,122205,122206],{"class":51281},"      renderer",[99,122208,51418],{"class":109},[99,122210,122211],{"class":214},"NetworkManager",[99,122213,2660],{"class":109},[99,122215,122216,122219],{"class":101,"line":1200},[99,122217,122218],{"class":51281},"      match",[99,122220,122176],{"class":109},[99,122222,122223,122226,122228,122231],{"class":101,"line":1206},[99,122224,122225],{"class":51281},"        name",[99,122227,51418],{"class":109},[99,122229,122230],{"class":214},"\"wlan0\"",[99,122232,2660],{"class":109},[99,122234,122235,122238,122240,122242],{"class":101,"line":1297},[99,122236,122237],{"class":51281},"      dhcp4",[99,122239,51418],{"class":109},[99,122241,1348],{"class":158},[99,122243,2660],{"class":109},[99,122245,122246,122249,122251,122253],{"class":101,"line":1303},[99,122247,122248],{"class":51281},"      dhcp6",[99,122250,51418],{"class":109},[99,122252,1348],{"class":158},[99,122254,2660],{"class":109},[99,122256,122257,122260],{"class":101,"line":1315},[99,122258,122259],{"class":51281},"      access-points",[99,122261,122176],{"class":109},[99,122263,122264,122267],{"class":101,"line":1598},[99,122265,122266],{"class":214},"        \"EMIS_Vinci_Robocon_5G\"",[99,122268,122176],{"class":109},[99,122270,122271,122274],{"class":101,"line":1603},[99,122272,122273],{"class":51281},"          auth",[99,122275,122176],{"class":109},[99,122277,122278,122281,122283,122286],{"class":101,"line":1609},[99,122279,122280],{"class":51281},"            key-management",[99,122282,51418],{"class":109},[99,122284,122285],{"class":214},"\"psk\"",[99,122287,2660],{"class":109},[99,122289,122290,122293,122295,122298],{"class":101,"line":1614},[99,122291,122292],{"class":51281},"            password",[99,122294,51418],{"class":109},[99,122296,122297],{"class":214},"\"vinci666\"",[99,122299,2660],{"class":109},[99,122301,122302,122305],{"class":101,"line":1628},[99,122303,122304],{"class":51281},"          networkmanager",[99,122306,122176],{"class":109},[99,122308,122309,122312,122314,122317],{"class":101,"line":1633},[99,122310,122311],{"class":51281},"            uuid",[99,122313,51418],{"class":109},[99,122315,122316],{"class":214},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[99,122318,2660],{"class":109},[99,122320,122321,122324,122326,122329],{"class":101,"line":1639},[99,122322,122323],{"class":51281},"            name",[99,122325,51418],{"class":109},[99,122327,122328],{"class":214},"\"EMIS_Vinci_Robocon_5G\"",[99,122330,2660],{"class":109},[99,122332,122333,122336],{"class":101,"line":1660},[99,122334,122335],{"class":51281},"            passthrough",[99,122337,122176],{"class":109},[99,122339,122340,122343,122345,122348],{"class":101,"line":1665},[99,122341,122342],{"class":51281},"              wifi-security.auth-alg",[99,122344,51418],{"class":109},[99,122346,122347],{"class":214},"\"open\"",[99,122349,2660],{"class":109},[99,122351,122352,122355,122357,122360],{"class":101,"line":1679},[99,122353,122354],{"class":51281},"              ipv6.addr-gen-mode",[99,122356,51418],{"class":109},[99,122358,122359],{"class":214},"\"default\"",[99,122361,2660],{"class":109},[99,122363,122364,122367,122369,122372],{"class":101,"line":1684},[99,122365,122366],{"class":51281},"              ipv6.ip6-privacy",[99,122368,51418],{"class":109},[99,122370,122371],{"class":214},"\"-1\"",[99,122373,2660],{"class":109},[99,122375,122376,122379,122381,122383],{"class":101,"line":1713},[99,122377,122378],{"class":51281},"              proxy._",[99,122380,51418],{"class":109},[99,122382,7639],{"class":214},[99,122384,2660],{"class":109},[99,122386,122387,122390],{"class":101,"line":1718},[99,122388,122389],{"class":51281},"      networkmanager",[99,122391,122176],{"class":109},[99,122393,122394,122397,122399,122401],{"class":101,"line":1735},[99,122395,122396],{"class":51281},"        uuid",[99,122398,51418],{"class":109},[99,122400,122316],{"class":214},[99,122402,2660],{"class":109},[99,122404,122405,122407,122409],{"class":101,"line":1740},[99,122406,122225],{"class":51281},[99,122408,51418],{"class":109},[99,122410,122411],{"class":214},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122413,122414],{},"将其改为新wifi的名和密码：",[90,122416,122418],{"className":122164,"code":122417,"language":122166,"meta":21,"style":21},"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",[96,122419,122420,122426,122435,122441,122448,122457,122465,122471,122477],{"__ignoreMap":21},[99,122421,122422,122424],{"class":101,"line":102},[99,122423,122173],{"class":51281},[99,122425,3725],{"class":109},[99,122427,122428,122430,122432],{"class":101,"line":22},[99,122429,122181],{"class":51281},[99,122431,51418],{"class":109},[99,122433,122434],{"class":158},"2\n",[99,122436,122437,122439],{"class":101,"line":1165},[99,122438,122192],{"class":51281},[99,122440,3725],{"class":109},[99,122442,122443,122446],{"class":101,"line":1180},[99,122444,122445],{"class":51281},"    wlan0",[99,122447,3725],{"class":109},[99,122449,122450,122452,122454],{"class":101,"line":1186},[99,122451,122237],{"class":51281},[99,122453,51418],{"class":109},[99,122455,122456],{"class":158},"true\n",[99,122458,122459,122461,122463],{"class":101,"line":1200},[99,122460,122248],{"class":51281},[99,122462,51418],{"class":109},[99,122464,122456],{"class":158},[99,122466,122467,122469],{"class":101,"line":1206},[99,122468,122259],{"class":51281},[99,122470,3725],{"class":109},[99,122472,122473,122475],{"class":101,"line":1297},[99,122474,122266],{"class":214},[99,122476,3725],{"class":109},[99,122478,122479,122482,122484],{"class":101,"line":1303},[99,122480,122481],{"class":51281},"          password",[99,122483,51418],{"class":109},[99,122485,122486],{"class":214},"\"vinci666\"\n",[14,122488,122489],{},"工控机开机即可连上网。",[41,122491,122493],{"id":122492},"_72-ssh远程开发","7.2 SSH远程开发",[70,122495,122497],{"id":122496},"_721-环境准备","7.2.1 环境准备",[14,122499,122500],{},[259,122501,122502],{},"1.硬件准备",[14,122504,122505],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122507,122508],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122510,122511],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122513,122514],{},[259,122515,122516],{},"2.设置固定IP",[14,122518,122519],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122521,122522],{},"1.进入设置界面",[14,122524,122525],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122527,122528],{},[1448,122529],{"alt":21,"src":122530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122532,122533],{},"2.配置所连接的网络",[14,122535,122536],{},[1448,122537],{"alt":21,"src":122538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122540,122541],{},"3.设置固定IP",[14,122543,122544],{},"查看当前IP地址。",[14,122546,122547],{},[1448,122548],{"alt":21,"src":122549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122551,122552],{},"设置固定IP。",[14,122554,122555],{},[1448,122556],{"alt":21,"src":122557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122559,122560],{},"至此，IP配置完毕。",[70,122562,122564],{"id":122563},"_722-环境搭建","7.2.2 环境搭建",[14,122566,122567],{},[259,122568,25742],{},[14,122570,122571],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122573,122574],{},[259,122575,122576],{},"实现",[14,122578,122579],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[53,122581,122582,122585,122588,122591],{},[56,122583,122584],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[56,122586,122587],{},"远程主机启动SSH服务；",[56,122589,122590],{},"本地主机登陆远程主机；",[56,122592,122593],{},"实现数据传输。",[14,122595,122596],{},"1.安装SSH客户端与服务端",[14,122598,122599],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[90,122601,122603],{"className":120797,"code":122602,"language":120799,"meta":120800,"style":21}," sudo apt install openssh-server\n",[96,122604,122605],{"__ignoreMap":21},[99,122606,122607],{"class":101,"line":102},[99,122608,122602],{},[14,122610,122611],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[90,122613,122615],{"className":120797,"code":122614,"language":120799,"meta":120800,"style":21},"sudo apt install openssh-client\n",[96,122616,122617],{"__ignoreMap":21},[99,122618,122619],{"class":101,"line":102},[99,122620,122614],{},[14,122622,122623],{},"2.远程主机启动SSH服务",[14,122625,122626],{},"远程主机启动 ssh 服务命令如下：",[90,122628,122630],{"className":120797,"code":122629,"language":120799,"meta":120800,"style":21},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[96,122631,122632],{"__ignoreMap":21},[99,122633,122634],{"class":101,"line":102},[99,122635,122629],{},[14,122637,122638],{},"启动后可使用如下命令查看服务是否正常运行：",[90,122640,122642],{"className":120797,"code":122641,"language":120799,"meta":120800,"style":21},"ps -e | grep ssh\n",[96,122643,122644],{"__ignoreMap":21},[99,122645,122646],{"class":101,"line":102},[99,122647,122641],{},[14,122649,122650],{},"如果启动成功，会包含 sshd 程序。",[14,122652,122653],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[90,122655,122657],{"className":120797,"code":122656,"language":120799,"meta":120800,"style":21},"sudo systemctl enable ssh\n",[96,122658,122659],{"__ignoreMap":21},[99,122660,122661],{"class":101,"line":102},[99,122662,122656],{},[14,122664,122665],{},"3.本地远程登录",[14,122667,122668],{},"登录远程主机可以调用如下命令:",[90,122670,122672],{"className":117277,"code":122671,"language":117279,"meta":21,"style":21},"ssh -X 用户名@ip地址\n",[96,122673,122674],{"__ignoreMap":21},[99,122675,122676,122678,122681],{"class":101,"line":102},[99,122677,121628],{"class":1949},[99,122679,122680],{"class":158}," -X",[99,122682,122683],{"class":214}," 用户名@ip地址\n",[14,122685,122686],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122688,122689],{},"如果退出，可以调用exit命令：",[90,122691,122693],{"className":120797,"code":122692,"language":120799,"meta":120800,"style":21},"exit\n",[96,122694,122695],{"__ignoreMap":21},[99,122696,122697],{"class":101,"line":102},[99,122698,122692],{},[14,122700,122701],{},[259,122702,122703],{},"4.实现数据传输",[14,122705,122706],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122708,122709],{},"上传文件指令格式如下：",[90,122711,122713],{"className":120797,"code":122712,"language":120799,"meta":120800,"style":21},"scp 本地文件路径 账号@ip:路径\n",[96,122714,122715],{"__ignoreMap":21},[99,122716,122717],{"class":101,"line":102},[99,122718,122712],{},[14,122720,122721],{},"上传文件夹指令格式如下：",[90,122723,122725],{"className":120797,"code":122724,"language":120799,"meta":120800,"style":21},"scp -r 本地文件夹路径 账号@ip:路径\n",[96,122726,122727],{"__ignoreMap":21},[99,122728,122729],{"class":101,"line":102},[99,122730,122724],{},[14,122732,122733],{},"下载文件指令格式如下：",[90,122735,122737],{"className":120797,"code":122736,"language":120799,"meta":120800,"style":21},"scp 账号@ip:路径 本地文件夹路径\n",[96,122738,122739],{"__ignoreMap":21},[99,122740,122741],{"class":101,"line":102},[99,122742,122736],{},[14,122744,122745],{},"下载文件夹指令格式如下：",[90,122747,122749],{"className":120797,"code":122748,"language":120799,"meta":120800,"style":21},"scp -r 账号@ip:路径 本地文件夹路径\n",[96,122750,122751],{"__ignoreMap":21},[99,122752,122753],{"class":101,"line":102},[99,122754,122748],{},[14,122756,122757],{},[259,122758,122759],{},"优化",[14,122761,122762],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[53,122764,122765,122768],{},[56,122766,122767],{},"本地生成密钥对；",[56,122769,122770],{},"将公钥上传至远程主机。",[14,122772,122773],{},[259,122774,122775],{},"1.生成密钥对",[14,122777,122778],{},"本地客户端生成公私钥：（一路回车默认即可）",[90,122780,122782],{"className":120797,"code":122781,"language":120799,"meta":120800,"style":21},"ssh-keygen\n",[96,122783,122784],{"__ignoreMap":21},[99,122785,122786],{"class":101,"line":102},[99,122787,122781],{},[14,122789,122790],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[53,122792,122793,122796],{},[56,122794,122795],{},"id_rsa （私钥）；",[56,122797,122798],{},"id_rsa.pub (公钥)。",[14,122800,122801],{},[259,122802,122803],{},"2.公钥上传",[14,122805,122806],{},"上传指令如下：",[90,122808,122810],{"className":120797,"code":122809,"language":120799,"meta":120800,"style":21},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[96,122811,122812],{"__ignoreMap":21},[99,122813,122814],{"class":101,"line":102},[99,122815,122809],{},[14,122817,122818],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122820,122821],{},"以后再远程登录就无需录入密码了。",[70,122823,122825],{"id":122824},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122827,122828],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122830,122831],{},[259,122832,122833],{},"1.准备工作",[14,122835,122836],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122838,122839],{},[259,122840,122841],{},"2.为VScode安装远程开发插件",[14,122843,122844,122845,122848,122849,122852,122853,28366],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[96,122846,122847],{},"扩展：商店","的搜索栏输入",[96,122850,122851],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[96,122854,122855],{},"安装",[14,122857,122858],{},[1448,122859],{"alt":21,"src":122860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122862,122863],{},[259,122864,122865],{},"3.配置远程连接",[14,122867,122868,122869,122872,122873,122876],{},"步骤1：使用快捷键",[96,122870,122871],{},"ctrl + shift + p","打开命令输入窗口，并输入",[96,122874,122875],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122878,122879],{},[1448,122880],{"alt":21,"src":122881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122883,122884,122885,28366],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[96,122886,122887],{},"Add New SSH Host",[14,122889,122890],{},[1448,122891],{"alt":21,"src":122892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122894,122895,122896,122899,122900,122903,122904,122907],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[96,122897,122898],{},"ssh +X ubuntu@192.168.43.164","，其中，",[96,122901,122902],{},"ubuntu","需要替换为你的登录用户名，",[96,122905,122906],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122909,122910],{},[1448,122911],{"alt":21,"src":122912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122914,122915],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122917,122918],{},[1448,122919],{"alt":21,"src":122920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122922,122923],{},[1448,122924],{"alt":21,"src":122925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122927,122928],{},[259,122929,122930],{},"4.使用",[14,122932,122933,122934,122872,122936,122938],{},"步骤1：继续使用快捷键",[96,122935,122871],{},[96,122937,122875],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122940,122941],{},[1448,122942],{"alt":21,"src":122943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122945,122946,122947,122950],{},"或者，也可以点击侧边栏的",[96,122948,122949],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122952,122953],{},[1448,122954],{"alt":21,"src":122955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122957,122958,122959,122962,122963,122966],{},"步骤2：选择菜单栏的",[96,122960,122961],{},"文件","下的",[96,122964,122965],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122968,122969],{},[1448,122970],{"alt":21,"src":122971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122973,122974],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[41,122976,122978],{"id":122977},"_73-远程桌面","7.3 远程桌面",[14,122980,122981],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122983,122984],{},"我们选择使用VNC来看。",[53,122986,122987],{},[56,122988,122989],{},"安装VNC服务器：",[14,122991,122992],{},"这里以TigerVNC为例进行安装：",[90,122994,122996],{"className":117277,"code":122995,"language":117279,"meta":21,"style":21},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[96,122997,122998],{"__ignoreMap":21},[99,122999,123000,123002,123004,123006,123009],{"class":101,"line":102},[99,123001,24565],{"class":1949},[99,123003,117298],{"class":214},[99,123005,23822],{"class":214},[99,123007,123008],{"class":214}," tigervnc-standalone-server",[99,123010,123011],{"class":214}," tigervnc-common\n",[53,123013,123014],{"start":22},[56,123015,123016],{},"设置VNC密码：",[14,123018,123019],{},"为VNC用户设置密码，运行以下命令：",[90,123021,123023],{"className":117277,"code":123022,"language":117279,"meta":21,"style":21},"vncpasswd\n",[96,123024,123025],{"__ignoreMap":21},[99,123026,123027],{"class":101,"line":102},[99,123028,123022],{"class":1949},[53,123030,123031],{"start":1165},[56,123032,123033],{},"配置VNC启动脚本:",[14,123035,123036],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[90,123038,123040],{"className":117277,"code":123039,"language":117279,"meta":21,"style":21},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[96,123041,123042,123051],{"__ignoreMap":21},[99,123043,123044,123046,123048],{"class":101,"line":102},[99,123045,101247],{"class":1949},[99,123047,29197],{"class":158},[99,123049,123050],{"class":214}," ~\u002F.vnc\n",[99,123052,123053,123056],{"class":101,"line":22},[99,123054,123055],{"class":1949},"nano",[99,123057,123058],{"class":214}," ~\u002F.vnc\u002Fxstartup\n",[14,123060,123061],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[90,123063,123065],{"className":117277,"code":123064,"language":117279,"meta":21,"style":21},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[96,123066,123067,123072,123080,123087],{"__ignoreMap":21},[99,123068,123069],{"class":101,"line":102},[99,123070,123071],{"class":168},"#!\u002Fbin\u002Fsh\n",[99,123073,123074,123077],{"class":101,"line":22},[99,123075,123076],{"class":158},"unset",[99,123078,123079],{"class":214}," SESSION_MANAGER\n",[99,123081,123082,123084],{"class":101,"line":1165},[99,123083,123076],{"class":158},[99,123085,123086],{"class":214}," DBUS_SESSION_BUS_ADDRESS\n",[99,123088,123089],{"class":101,"line":1180},[99,123090,123091],{"class":1949},"gnome-session\n",[14,123093,123094],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[53,123096,123097],{"start":1180},[56,123098,123099],{},"给予执行权限：",[14,123101,123102],{},"为xstartup文件设置执行权限：",[90,123104,123106],{"className":117277,"code":123105,"language":117279,"meta":21,"style":21},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[96,123107,123108],{"__ignoreMap":21},[99,123109,123110,123112,123115],{"class":101,"line":102},[99,123111,24600],{"class":1949},[99,123113,123114],{"class":214}," +x",[99,123116,123058],{"class":214},[53,123118,123119],{"start":1186},[56,123120,123121],{},"启动VNC服务器：",[90,123123,123125],{"className":117277,"code":123124,"language":117279,"meta":21,"style":21},"vncserver -geometry 1920x1080 -localhost=0\n",[96,123126,123127],{"__ignoreMap":21},[99,123128,123129,123132,123135,123138],{"class":101,"line":102},[99,123130,123131],{"class":1949},"vncserver",[99,123133,123134],{"class":158}," -geometry",[99,123136,123137],{"class":214}," 1920x1080",[99,123139,123140],{"class":158}," -localhost=0\n",[14,123142,123143],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123145,123146],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[53,123148,123149],{"start":1200},[56,123150,123151],{},"查看已开启的VNC服务器：",[90,123153,123155],{"className":117277,"code":123154,"language":117279,"meta":21,"style":21},"vncserver -list\n",[96,123156,123157],{"__ignoreMap":21},[99,123158,123159,123161],{"class":101,"line":102},[99,123160,123131],{"class":1949},[99,123162,123163],{"class":158}," -list\n",[14,123165,123166],{},[1448,123167],{"alt":21,"src":123168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[53,123170,123171],{"start":1206},[56,123172,123173],{},"连接到VNC服务器：",[14,123175,123176],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[53,123178,123179],{"start":1297},[56,123180,123181],{},"停止VNC服务器：",[14,123183,123184],{},"如果需要停止VNC服务器，可以使用以下命令：",[90,123186,123188],{"className":117277,"code":123187,"language":117279,"meta":21,"style":21},"vncserver -kill :1\n",[96,123189,123190],{"__ignoreMap":21},[99,123191,123192,123194,123197],{"class":101,"line":102},[99,123193,123131],{"class":1949},[99,123195,123196],{"class":158}," -kill",[99,123198,123199],{"class":214}," :1\n",[14,123201,123202],{},"将:1替换为你实际使用的显示编号。",[14,123204,123205],{},[1448,123206],{"alt":21,"src":123207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123209,123210],{},[1448,123211],{"alt":21,"src":123212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[41,123214,123216],{"id":123215},"_74-usb端口设置","7.4 USB端口设置",[14,123218,123219],{},[259,123220,123221],{},"首先先配置好权限",[90,123223,123225],{"className":117277,"code":123224,"language":117279,"meta":21,"style":21},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[96,123226,123227,123232,123245,123252,123257],{"__ignoreMap":21},[99,123228,123229],{"class":101,"line":102},[99,123230,123231],{"class":168},"# 将用户权限提高\n",[99,123233,123234,123236,123238,123240,123243],{"class":101,"line":22},[99,123235,24565],{"class":1949},[99,123237,26563],{"class":214},[99,123239,26566],{"class":158},[99,123241,123242],{"class":214}," dialout",[99,123244,26571],{"class":109},[99,123246,123247,123249],{"class":101,"line":1165},[99,123248,26590],{"class":1949},[99,123250,123251],{"class":214}," dialout\n",[99,123253,123254],{"class":101,"line":1180},[99,123255,123256],{"class":168},"# 查看下面命令是否输出dialout（若输出才正常）\n",[99,123258,123259],{"class":101,"line":1186},[99,123260,123261],{"class":1949},"groups\n",[14,123263,123264],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[70,123266,123268],{"id":123267},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123270,123271,123274],{},[259,123272,123273],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123276,123277,123280],{},[259,123278,123279],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123282,123283],{},[259,123284,123285],{},"流程如下：",[14,123287,123288],{},"（1）.查找设备idVendor和idProduct",[14,123290,123291,123292,123295],{},"接入两个USB设备，在终端调用指令",[96,123293,123294],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123297,123298],{},[1448,123299],{"alt":21,"src":123300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123302,123303,123304,123307],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[96,123305,123306],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123309,123310],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123312,123313],{},"（2）.编写映射规则",[14,123315,123316,123317,123320],{},"在",[96,123318,123319],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[90,123322,123324],{"className":117277,"code":123323,"language":117279,"meta":21,"style":21},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[96,123325,123326],{"__ignoreMap":21},[99,123327,123328,123330,123332],{"class":101,"line":102},[99,123329,24565],{"class":1949},[99,123331,118564],{"class":214},[99,123333,123334],{"class":214}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123336,123337],{},"输入如下内容：",[90,123339,123341],{"className":117277,"code":123340,"language":117279,"meta":21,"style":21},"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",[96,123342,123343,123373],{"__ignoreMap":21},[99,123344,123345,123348,123350,123353,123356,123359,123362,123364,123367,123370],{"class":101,"line":102},[99,123346,123347],{"class":109},"KERNEL",[99,123349,155],{"class":105},[99,123351,123352],{"class":214},"=\"ttyUSB*\",",[99,123354,123355],{"class":1949}," ATTRS",[99,123357,123358],{"class":214},"{idVendor}==",[99,123360,123361],{"class":1949},"\"10c4\"",[99,123363,488],{"class":1949},[99,123365,123366],{"class":214}," ATTRS{idProduct}==\"ea60\",",[99,123368,123369],{"class":214}," MODE:=\"0777\",",[99,123371,123372],{"class":214}," SYMLINK+=\"mylidar\"\n",[99,123374,123375,123377,123379,123381,123383,123385,123388,123390,123393,123395],{"class":101,"line":22},[99,123376,123347],{"class":109},[99,123378,155],{"class":105},[99,123380,123352],{"class":214},[99,123382,123355],{"class":1949},[99,123384,123358],{"class":214},[99,123386,123387],{"class":1949},"\"1a86\"",[99,123389,488],{"class":1949},[99,123391,123392],{"class":214}," ATTRS{idProduct}==\"7523\",",[99,123394,123369],{"class":214},[99,123396,123397],{"class":214}," SYMLINK+=\"mycar\"\n",[14,123399,123400],{},"代码解释：",[1117,123402,123403,123406,123409,123412],{},[56,123404,123405],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[56,123407,123408],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[56,123410,123411],{},"SYMLINK是符号连接，即绑定的别名；",[56,123413,123414],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123416,123417,123418,123421,123424],{},"***小提示：***",[23541,123419,123420],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[96,123422,123423],{},"\u002Fetc\u002Fudev\u002Frule.d",[23541,123425,123426],{},"目录即可。",[14,123428,123429],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123431,123432],{},"（3）.使规则生效",[14,123434,123435],{},"在终端下输入如下指令：",[90,123437,123439],{"className":117277,"code":123438,"language":117279,"meta":21,"style":21},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[96,123440,123441,123446,123458,123469,123473,123478,123491],{"__ignoreMap":21},[99,123442,123443],{"class":101,"line":102},[99,123444,123445],{"class":168},"# Ubuntu用下方命令\n",[99,123447,123448,123450,123452,123455],{"class":101,"line":22},[99,123449,24565],{"class":1949},[99,123451,120029],{"class":214},[99,123453,123454],{"class":214}," udev",[99,123456,123457],{"class":214}," reload\n",[99,123459,123460,123462,123464,123466],{"class":101,"line":1165},[99,123461,24565],{"class":1949},[99,123463,120029],{"class":214},[99,123465,123454],{"class":214},[99,123467,123468],{"class":214}," restart\n",[99,123470,123471],{"class":101,"line":1180},[99,123472,2386],{"emptyLinePlaceholder":26},[99,123474,123475],{"class":101,"line":1186},[99,123476,123477],{"class":168},"#Fedora用下方命令\n",[99,123479,123480,123482,123485,123488],{"class":101,"line":1200},[99,123481,24565],{"class":1949},[99,123483,123484],{"class":214}," udevadm",[99,123486,123487],{"class":214}," control",[99,123489,123490],{"class":158}," --reload\n",[99,123492,123493,123495,123497],{"class":101,"line":1206},[99,123494,24565],{"class":1949},[99,123496,123484],{"class":214},[99,123498,123499],{"class":214}," trigger\n",[14,123501,123502],{},"再重新插拔设备即可。",[14,123504,123505],{},"（4）.测试",[14,123507,123508],{},"终端下输入如下指令",[90,123510,123512],{"className":117277,"code":123511,"language":117279,"meta":21,"style":21},"ll \u002Fdev | grep ttyUSB\n",[96,123513,123514],{"__ignoreMap":21},[99,123515,123516,123519,123522,123524,123526],{"class":101,"line":102},[99,123517,123518],{"class":1949},"ll",[99,123520,123521],{"class":214}," \u002Fdev",[99,123523,25098],{"class":105},[99,123525,30217],{"class":1949},[99,123527,123528],{"class":214}," ttyUSB\n",[14,123530,123531],{},"运行结果如下：",[14,123533,123534],{},[1448,123535],{"alt":21,"src":123536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123538,123539,123540,123543],{},"也可以多次插拔USB设备，会发现设备端口",[96,123541,123542],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123545,123546],{},[259,123547,117945],{},[14,123549,123550],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[70,123552,123554],{"id":123553},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123556,123557,123559],{},[259,123558,123273],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123561,123562,123564],{},[259,123563,123279],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123566,123567],{},[259,123568,123285],{},[14,123570,123571],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123573,123574],{},"调用如下指令查看第一台雷达的USB信息：",[90,123576,123578],{"className":117277,"code":123577,"language":117279,"meta":21,"style":21},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[96,123579,123580,123600],{"__ignoreMap":21},[99,123581,123582,123585,123587,123590,123593,123595,123597],{"class":101,"line":102},[99,123583,123584],{"class":1949},"udevadm",[99,123586,69802],{"class":214},[99,123588,123589],{"class":158}," --attribute-walk",[99,123591,123592],{"class":158}," --name=\u002Fdev\u002FttyUSB0",[99,123594,25098],{"class":105},[99,123596,30217],{"class":1949},[99,123598,123599],{"class":214}," KERNELS\n",[99,123601,123602,123604,123606,123608,123611,123613,123615],{"class":101,"line":22},[99,123603,123584],{"class":1949},[99,123605,69802],{"class":214},[99,123607,123589],{"class":158},[99,123609,123610],{"class":158}," --name=\u002Fdev\u002FttyACM0",[99,123612,25098],{"class":105},[99,123614,30217],{"class":1949},[99,123616,123599],{"class":214},[14,123618,123619],{},[1448,123620],{"alt":21,"src":123621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123623,123624],{},"调用如下指令查看第二台雷达的USB信息：",[90,123626,123628],{"className":117277,"code":123627,"language":117279,"meta":21,"style":21},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[96,123629,123630],{"__ignoreMap":21},[99,123631,123632,123634,123636,123638,123641,123643,123645],{"class":101,"line":102},[99,123633,123584],{"class":1949},[99,123635,69802],{"class":214},[99,123637,123589],{"class":158},[99,123639,123640],{"class":158}," --name=\u002Fdev\u002FttyUSB1",[99,123642,25098],{"class":105},[99,123644,30217],{"class":1949},[99,123646,123599],{"class":214},[14,123648,123649,123650,123653,123654,123657,123658,123661],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[96,123651,123652],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[96,123655,123656],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[259,123659,123660],{},"唯一性标识","”。",[14,123663,123313],{},[14,123665,123316,123666,123668],{},[96,123667,123319],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[90,123670,123671],{"className":117277,"code":123323,"language":117279,"meta":21,"style":21},[96,123672,123673],{"__ignoreMap":21},[99,123674,123675,123677,123679],{"class":101,"line":102},[99,123676,24565],{"class":1949},[99,123678,118564],{"class":214},[99,123680,123334],{"class":214},[90,123682,123684],{"className":117277,"code":123683,"language":117279,"meta":21,"style":21},"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",[96,123685,123686,123715],{"__ignoreMap":21},[99,123687,123688,123690,123692,123694,123697,123699,123702,123705,123707,123710,123712],{"class":101,"line":102},[99,123689,123347],{"class":109},[99,123691,155],{"class":105},[99,123693,123352],{"class":214},[99,123695,123696],{"class":109}," KERNELS",[99,123698,155],{"class":105},[99,123700,123701],{"class":214},"=\"1-1.3:1.0\",",[99,123703,123704],{"class":1949}," MODE:",[99,123706,155],{"class":214},[99,123708,123709],{"class":1949},"\"0777\"",[99,123711,488],{"class":1949},[99,123713,123714],{"class":214}," SYMLINK+=\"rplidar_front\"\n",[99,123716,123717,123719,123721,123723,123725,123727,123730,123732,123734,123736,123738],{"class":101,"line":22},[99,123718,123347],{"class":109},[99,123720,155],{"class":105},[99,123722,123352],{"class":214},[99,123724,123696],{"class":109},[99,123726,155],{"class":105},[99,123728,123729],{"class":214},"=\"1-1.4:1.0\",",[99,123731,123704],{"class":1949},[99,123733,155],{"class":214},[99,123735,123709],{"class":1949},[99,123737,488],{"class":1949},[99,123739,123740],{"class":214}," SYMLINK+=\"rplidar_back\"\n",[14,123742,123432],{},[14,123744,123435],{},[90,123746,123747],{"className":117277,"code":123438,"language":117279,"meta":21,"style":21},[96,123748,123749,123753,123763,123773,123777,123781,123791],{"__ignoreMap":21},[99,123750,123751],{"class":101,"line":102},[99,123752,123445],{"class":168},[99,123754,123755,123757,123759,123761],{"class":101,"line":22},[99,123756,24565],{"class":1949},[99,123758,120029],{"class":214},[99,123760,123454],{"class":214},[99,123762,123457],{"class":214},[99,123764,123765,123767,123769,123771],{"class":101,"line":1165},[99,123766,24565],{"class":1949},[99,123768,120029],{"class":214},[99,123770,123454],{"class":214},[99,123772,123468],{"class":214},[99,123774,123775],{"class":101,"line":1180},[99,123776,2386],{"emptyLinePlaceholder":26},[99,123778,123779],{"class":101,"line":1186},[99,123780,123477],{"class":168},[99,123782,123783,123785,123787,123789],{"class":101,"line":1200},[99,123784,24565],{"class":1949},[99,123786,123484],{"class":214},[99,123788,123487],{"class":214},[99,123790,123490],{"class":158},[99,123792,123793,123795,123797],{"class":101,"line":1206},[99,123794,24565],{"class":1949},[99,123796,123484],{"class":214},[99,123798,123499],{"class":214},[14,123800,123502],{},[14,123802,123505],{},[14,123804,123508,123805,123808],{},[96,123806,123807],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123810,123811],{},[1448,123812],{"alt":21,"src":123813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123815,123816],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123818,123819,123821],{},[259,123820,117945],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[70,123823,123825],{"id":123824},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123827,123828],{},"（1）.查看所连接的主机USB接口的信息",[90,123830,123832],{"className":117277,"code":123831,"language":117279,"meta":21,"style":21},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[96,123833,123834,123864],{"__ignoreMap":21},[99,123835,123836,123838,123840,123843,123845,123847,123849,123851,123854,123857,123859,123862],{"class":101,"line":102},[99,123837,123584],{"class":1949},[99,123839,69802],{"class":214},[99,123841,123842],{"class":158}," -a",[99,123844,29197],{"class":158},[99,123846,28403],{"class":109},[99,123848,123584],{"class":1949},[99,123850,69802],{"class":214},[99,123852,123853],{"class":158}," -q",[99,123855,123856],{"class":214}," path",[99,123858,25104],{"class":158},[99,123860,123861],{"class":214}," \u002Fdev\u002FttyACM0",[99,123863,116],{"class":109},[99,123865,123866,123868,123870,123872,123874,123876,123878,123880,123882,123884,123886,123889],{"class":101,"line":22},[99,123867,123584],{"class":1949},[99,123869,69802],{"class":214},[99,123871,123842],{"class":158},[99,123873,29197],{"class":158},[99,123875,28403],{"class":109},[99,123877,123584],{"class":1949},[99,123879,69802],{"class":214},[99,123881,123853],{"class":158},[99,123883,123856],{"class":214},[99,123885,25104],{"class":158},[99,123887,123888],{"class":214}," \u002Fdev\u002FttyUSB0",[99,123890,116],{"class":109},[14,123892,123893],{},[1448,123894],{"alt":21,"src":123895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123897,123898],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123900,123313],{},[14,123902,123316,123903,123668],{},[96,123904,123319],{},[90,123906,123907],{"className":117277,"code":123323,"language":117279,"meta":21,"style":21},[96,123908,123909],{"__ignoreMap":21},[99,123910,123911,123913,123915],{"class":101,"line":102},[99,123912,24565],{"class":1949},[99,123914,118564],{"class":214},[99,123916,123334],{"class":214},[90,123918,123920],{"className":117277,"code":123919,"language":117279,"meta":21,"style":21},"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",[96,123921,123922,123950,123976],{"__ignoreMap":21},[99,123923,123924,123926,123928,123931,123933,123935,123937,123939,123942,123945,123947],{"class":101,"line":102},[99,123925,123347],{"class":109},[99,123927,155],{"class":105},[99,123929,123930],{"class":214},"=\"ttyACM*\",",[99,123932,123355],{"class":1949},[99,123934,123358],{"class":214},[99,123936,123387],{"class":1949},[99,123938,488],{"class":1949},[99,123940,123941],{"class":214}," ATTRS{idProduct}==\"55d4\",",[99,123943,123944],{"class":214}," ATTRS{serial}==\"0001\",",[99,123946,123369],{"class":214},[99,123948,123949],{"class":214}," SYMLINK+=\"ttyACM_MCU\"\n",[99,123951,123952,123954,123956,123958,123960,123962,123964,123966,123968,123971,123973],{"class":101,"line":22},[99,123953,123347],{"class":109},[99,123955,155],{"class":105},[99,123957,123930],{"class":214},[99,123959,123355],{"class":1949},[99,123961,123358],{"class":214},[99,123963,123387],{"class":1949},[99,123965,488],{"class":1949},[99,123967,123941],{"class":214},[99,123969,123970],{"class":214}," ATTRS{serial}==\"0002\",",[99,123972,123369],{"class":214},[99,123974,123975],{"class":214}," SYMLINK+=\"ttyACM_Lidar\"\n",[99,123977,123978,123980,123982,123984,123986,123988,123990,123992,123994,123996],{"class":101,"line":1165},[99,123979,123347],{"class":109},[99,123981,155],{"class":105},[99,123983,123352],{"class":214},[99,123985,123355],{"class":1949},[99,123987,123358],{"class":214},[99,123989,123387],{"class":1949},[99,123991,488],{"class":1949},[99,123993,123392],{"class":214},[99,123995,123369],{"class":214},[99,123997,123998],{"class":214}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124000,123432],{},[14,124002,123435],{},[90,124004,124005],{"className":117277,"code":123438,"language":117279,"meta":21,"style":21},[96,124006,124007,124011,124021,124031,124035,124039,124049],{"__ignoreMap":21},[99,124008,124009],{"class":101,"line":102},[99,124010,123445],{"class":168},[99,124012,124013,124015,124017,124019],{"class":101,"line":22},[99,124014,24565],{"class":1949},[99,124016,120029],{"class":214},[99,124018,123454],{"class":214},[99,124020,123457],{"class":214},[99,124022,124023,124025,124027,124029],{"class":101,"line":1165},[99,124024,24565],{"class":1949},[99,124026,120029],{"class":214},[99,124028,123454],{"class":214},[99,124030,123468],{"class":214},[99,124032,124033],{"class":101,"line":1180},[99,124034,2386],{"emptyLinePlaceholder":26},[99,124036,124037],{"class":101,"line":1186},[99,124038,123477],{"class":168},[99,124040,124041,124043,124045,124047],{"class":101,"line":1200},[99,124042,24565],{"class":1949},[99,124044,123484],{"class":214},[99,124046,123487],{"class":214},[99,124048,123490],{"class":158},[99,124050,124051,124053,124055],{"class":101,"line":1206},[99,124052,24565],{"class":1949},[99,124054,123484],{"class":214},[99,124056,123499],{"class":214},[14,124058,124059,124060],{},"再重新插拔设备即可，或者 ",[259,124061,124062],{},"直接重启系统。",[14,124064,123505],{},[14,124066,123508,124067,123808],{},[96,124068,123807],{},[14,124070,124071],{},[1448,124072],{"alt":21,"src":124073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124075,123816],{},[14,124077,124078,124080],{},[259,124079,117945],{}," 一些设备可能没有串口号等。",[70,124082,124084],{"id":124083},"_744-其他注意事项","7.4.4 其他注意事项",[14,124086,124087,124088,124090,124091,124094,124095,18397,124098,124101,124102,124104],{},"并非所有的USB设备端口号都是",[96,124089,123542],{},"的格式，比如Arduino的端口号可能是",[96,124092,124093],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[96,124096,124097],{},"videon",[96,124099,124100],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[96,124103,124097],{},"端口，绑定时需要关联的也是该接口。",[14,124106,124107,124108,124111,124112,124115,124116,124118,124119,124122,124123,124126,124127,124130,124131,124130,124134,124130,124137,28366],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[96,124109,124110],{},"KERNEL==\"ttyUSB*\"","修改为",[96,124113,124114],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[96,124117,124110],{},"修改为类似于",[96,124120,124121],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[96,124124,124125],{},"video[0,2,4,6]","表示可以绑定的端口为",[96,124128,124129],{},"video0","或",[96,124132,124133],{},"video2",[96,124135,124136],{},"video4",[96,124138,124139],{},"video6",[41,124141,124143],{"id":124142},"_75-挂载内网网页","7.5 挂载内网网页",[14,124145,124146],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124148,124149],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124151,124152],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124154,124155,124156],{},"Termux 下载地址（F-Droid）：",[348,124157,124158],{"href":124158,"rel":124159},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23853],[14,124161,124162],{},"首先打开app后，先更新软件缓存：",[90,124164,124166],{"className":117277,"code":124165,"language":117279,"meta":21,"style":21},"pkg update\n",[96,124167,124168],{"__ignoreMap":21},[99,124169,124170,124173],{"class":101,"line":102},[99,124171,124172],{"class":1949},"pkg",[99,124174,26231],{"class":214},[14,124176,124177],{},"然后换源",[90,124179,124181],{"className":117277,"code":124180,"language":117279,"meta":21,"style":21},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[96,124182,124183],{"__ignoreMap":21},[99,124184,124185,124187,124190],{"class":101,"line":102},[99,124186,123055],{"class":1949},[99,124188,124189],{"class":109}," $PREFIX",[99,124191,124192],{"class":214},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124194,124195],{},"将该文件内容替换为下面：",[90,124197,124199],{"className":117277,"code":124198,"language":117279,"meta":21,"style":21},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[96,124200,124201],{"__ignoreMap":21},[99,124202,124203,124206,124209,124212],{"class":101,"line":102},[99,124204,124205],{"class":1949},"deb",[99,124207,124208],{"class":214}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[99,124210,124211],{"class":214}," stable",[99,124213,124214],{"class":214}," main\n",[1117,124216,124217,124244],{},[56,124218,124219,124220,124222,124223],{},"如果你使用的是",[96,124221,123055],{},"编辑器：",[1117,124224,124225,124232,124238],{},[56,124226,124227,124228,124231],{},"按 ",[96,124229,124230],{},"Ctrl+O"," 保存文件。",[56,124233,124227,124234,124237],{},[96,124235,124236],{},"Enter"," 确认文件名。",[56,124239,124227,124240,124243],{},[96,124241,124242],{},"Ctrl+X"," 退出编辑器。",[56,124245,124219,124246,124222,124249],{},[96,124247,124248],{},"vim",[1117,124250,124251,124257],{},[56,124252,124227,124253,124256],{},[96,124254,124255],{},"Esc"," 退出编辑模式。",[56,124258,124259,124260,124262],{},"输入 ",[96,124261,119202],{}," 保存并退出。",[14,124264,124265],{},"接下来重新更新软件源：",[90,124267,124269],{"className":117277,"code":124268,"language":117279,"meta":21,"style":21},"pkg update && pkg upgrade\n",[96,124270,124271],{"__ignoreMap":21},[99,124272,124273,124275,124277,124279,124281],{"class":101,"line":102},[99,124274,124172],{"class":1949},[99,124276,117328],{"class":214},[99,124278,26179],{"class":109},[99,124280,124172],{"class":1949},[99,124282,117314],{"class":214},[14,124284,124285],{},"安装python：",[90,124287,124289],{"className":117277,"code":124288,"language":117279,"meta":21,"style":21},"pkg install python\n",[96,124290,124291],{"__ignoreMap":21},[99,124292,124293,124295,124297],{"class":101,"line":102},[99,124294,124172],{"class":1949},[99,124296,23822],{"class":214},[99,124298,124299],{"class":214}," python\n",[14,124301,124302,26462],{},[259,124303,124304],{},"通过Termux访问设备存储",[14,124306,124307],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[90,124309,124311],{"className":117277,"code":124310,"language":117279,"meta":21,"style":21},"termux-setup-storage\n",[96,124312,124313],{"__ignoreMap":21},[99,124314,124315],{"class":101,"line":102},[99,124316,124310],{"class":1949},[53,124318,124319],{},[56,124320,124321,26462,124324],{},[259,124322,124323],{},"进入HTML文件所在的目录",[53,124325,124326],{},[56,124327,124328,124329,124331],{},"使用",[96,124330,101257],{},"命令进入HTML文件所在的目录：",[90,124333,124335],{"className":117277,"code":124334,"language":117279,"meta":21,"style":21},"cd ~\u002Fyour_html_folder\n",[96,124336,124337],{"__ignoreMap":21},[99,124338,124339,124341],{"class":101,"line":102},[99,124340,101257],{"class":158},[99,124342,124343],{"class":214}," ~\u002Fyour_html_folder\n",[53,124345,124346],{"start":22},[56,124347,124348,26462,124351,124356,124373],{},[259,124349,124350],{},"启动Python HTTP服务器",[53,124352,124353],{},[56,124354,124355],{},"运行以下命令启动一个简单的HTTP服务器：",[90,124357,124359],{"className":117277,"code":124358,"language":117279,"meta":21,"style":21},"python -m http.server 8000\n",[96,124360,124361],{"__ignoreMap":21},[99,124362,124363,124365,124367,124370],{"class":101,"line":102},[99,124364,30361],{"class":1949},[99,124366,100863],{"class":158},[99,124368,124369],{"class":214}," http.server",[99,124371,124372],{"class":158}," 8000\n",[53,124374,124375],{"start":1165},[56,124376,124377,124378,124381],{},"这会在端口",[96,124379,124380],{},"8000","上启动一个Web服务器。",[1117,124383,124384],{},[56,124385,124386],{},"启动服务器后，Termux会显示日志信息，例如：",[90,124388,124390],{"className":120797,"code":124389,"language":120799,"meta":120800,"style":21},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[96,124391,124392],{"__ignoreMap":21},[99,124393,124394],{"class":101,"line":102},[99,124395,124389],{},[1117,124397,124398],{},[56,124399,124400],{},"这表示服务器已成功启动。",[14,124402,124403],{},[259,124404,124405],{},"在浏览器中访问HTML文件",[53,124407,124408],{},[56,124409,124410,26462,124413,124418],{},[259,124411,124412],{},"在同一设备上访问",[53,124414,124415],{},[56,124416,124417],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[90,124419,124422],{"className":124420,"code":124421,"language":71645,"meta":21,"style":21},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[96,124423,124424],{"__ignoreMap":21},[99,124425,124426,124429],{"class":101,"line":102},[99,124427,124428],{"class":109},"http:",[99,124430,124431],{"class":168},"\u002F\u002Flocalhost:8000\n",[1117,124433,124434],{},[56,124435,124436,124437,124440],{},"如果HTML文件中有",[96,124438,124439],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[41,124442,124444],{"id":124443},"_76-linux重点知识","7.6 Linux重点知识",[70,124446,124448],{"id":124447},"_761-关于点的说明","7.6.1 关于点的说明",[14,124450,124451],{},[1448,124452],{"alt":21,"src":124453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124455,124456],{},"一点本目录，两点上目录",[70,124458,124460],{"id":124459},"_762-目录","7.6.2 目录",[21985,124462,124464],{"id":124463},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124466,124467],{},[259,124468,124469],{},"\u002Fboot:",[14,124471,124472],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124474,124475],{},[259,124476,124477],{},"\u002Fetc:",[14,124479,124480],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124482,124483],{},[259,124484,124485],{},"\u002Flib：",[14,124487,124488],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124490,124491],{},[259,124492,124493],{},"\u002Fsys:",[14,124495,124496],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21985,124498,124500],{"id":124499},"_7622-指令集合","7.6.2.2 指令集合",[14,124502,124503],{},[259,124504,124505],{},"\u002Fbin:",[14,124507,124508],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124510,124511],{},[259,124512,124513],{},"\u002Fsbin:",[14,124515,124516],{},"只有系统管理员才能使用的程序和指令",[21985,124518,124520],{"id":124519},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124522,124523],{},[259,124524,124525],{},"\u002Fdev:",[14,124527,124528],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124530,124531],{},[259,124532,124533],{},"\u002Fmedia:",[14,124535,124536],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124538,124539],{},[259,124540,124541],{},"\u002Fmnt:",[14,124543,124544],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21985,124546,124548],{"id":124547},"_7624-临时文件","7.6.2.4 临时文件",[14,124550,124551],{},[259,124552,124553],{},"\u002Frun:",[14,124555,124556],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124558,124559],{},[259,124560,124561],{},"\u002Flost+found:",[14,124563,124564],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124566,124567],{},[259,124568,124569],{},"\u002Ftmp:",[14,124571,124572],{},"这个目录是用来存放一些临时文件的",[21985,124574,124576],{"id":124575},"_7625-账户","7.6.2.5 账户",[14,124578,124579],{},[259,124580,124581],{},"\u002Froot：",[14,124583,124584],{},"系统管理员的用户主目录",[14,124586,124587,26462],{},[259,124588,124589],{},"\u002Fhome",[14,124591,124592],{},"用户的主目录，以用户的账号命名的",[14,124594,124595,26462],{},[259,124596,124597],{},"\u002Fusr",[14,124599,124600],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124602,124603],{},[259,124604,124605],{},"\u002Fusr\u002Fbin：",[14,124607,124608],{},"系统用户使用的应用程序与指令",[14,124610,124611],{},[259,124612,124613],{},"\u002Fusr\u002Fsbin：",[14,124615,124616],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124618,124619],{},[259,124620,124621],{},"\u002Fusr\u002Fsrc：",[14,124623,124624],{},"内核源代码默认的放置目录",[21985,124626,124628],{"id":124627},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124630,124631],{},[259,124632,124633],{},"\u002Fvar：",[14,124635,124636],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124638,124639],{},[259,124640,124641],{},"\u002Fproc:",[14,124643,124644,124645,124648],{},"管理 ",[259,124646,124647],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21985,124650,124652],{"id":124651},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124654,124655],{},[259,124656,124657],{},"\u002Fopt:",[14,124659,124660],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124662,124663],{},[259,124664,124665],{},"\u002Fsrv:",[14,124667,124668],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[70,124670,124672],{"id":124671},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124674,124675],{},[1448,124676],{"alt":21,"src":124677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124679,124680],{},"windows-->linux:",[14,124682,124683],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124685,124686],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124688,124689],{},"linux传输文件到windows",[14,124691,124692],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[70,124694,124696],{"id":124695},"_764-易忘知识","7.6.4 易忘知识",[14,124698,124699],{},"操作系统内核查看",[90,124701,124702],{"className":117277,"code":121271,"language":117279,"meta":21,"style":21},[96,124703,124704],{"__ignoreMap":21},[99,124705,124706,124708],{"class":101,"line":102},[99,124707,70185],{"class":1949},[99,124709,121280],{"class":158},[14,124711,124712],{},[1448,124713],{"alt":21,"src":124714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124716,124717],{},[1448,124718],{"alt":21,"src":124719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[90,124721,124723],{"className":117277,"code":124722,"language":117279,"meta":21,"style":21},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[96,124724,124725,124737],{"__ignoreMap":21},[99,124726,124727,124729,124732,124735],{"class":101,"line":102},[99,124728,121488],{"class":1949},[99,124730,124731],{"class":214}," mvtest",[99,124733,124734],{"class":214}," mvtest2",[99,124736,2660],{"class":109},[99,124738,124739],{"class":101,"line":22},[99,124740,124741],{"class":1949},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124743,124744],{},[1448,124745],{"alt":21,"src":124746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124748,124749],{},[1448,124750],{"alt":21,"src":124751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124753,124754,124755,124758],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[96,124756,124757],{},"du -a"," 可以快速查看磁盘使用细节。",[70,124760,124762],{"id":124761},"_765-vim","7.6.5 Vim",[14,124764,124765],{},[1448,124766],{"alt":21,"src":124767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124769,124770],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124772,124773],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124775,124776],{},[259,124777,124778],{},"1.命令模式：",[14,124780,124781],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124783,124784],{},"x 删除当前光标所在处的字符",[14,124786,124787],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124789,124790],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124792,124793],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124795,124796],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124798,124799],{},"dd 剪切当前行",[14,124801,124802],{},"yy 复制当前行",[14,124804,124805],{},"p 粘贴剪贴板内容到光标下方",[14,124807,124808],{},"P 粘贴剪贴板内容到光标上方",[14,124810,124811],{},"u 撤销上一次操作",[14,124813,124814],{},"ctrl+r 重做上一次操作",[14,124816,124817,124819],{},[905,124818],{}," 保存文件",[14,124821,124822,124824],{},[755,124823],{}," 退出Vim编辑器",[14,124826,124827,124829],{},[755,124828],{},"! 强制退出Vim编辑器，不保存修改",[14,124831,124832],{},[259,124833,124834],{},"2.输入模式：",[14,124836,124837],{},[1448,124838],{"alt":21,"src":124839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124841,124842],{},[259,124843,124844],{},"3.底线命令模式：",[14,124846,124847],{},[1448,124848],{"alt":21,"src":124849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124851,124852],{},"按下esc可以退出底线命令模式",[70,124854,124856],{"id":124855},"_766-apt","7.6.6 apt",[14,124858,124859],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[70,124861,124863],{"id":124862},"_767-home与root的区别","7.6.7 home与root的区别",[14,124865,124866],{},[1448,124867],{"alt":21,"src":124868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124870,124871],{},[1448,124872],{"alt":21,"src":124873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124875,124876],{},[1448,124877],{"alt":21,"src":124878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124880,124881],{},[1448,124882],{"alt":21,"src":124883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[70,124885,124887],{"id":124886},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124889,124890],{},[348,124891,124892],{"href":124892,"rel":124893},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23853],[53,124895,124896,124899],{},[56,124897,124898],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[56,124900,124901],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124903,124904],{},[1448,124905],{"alt":21,"src":124906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124908,124909],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124911,124912],{},[1448,124913],{"alt":21,"src":124914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[90,124916,124918],{"className":120797,"code":124917,"language":120799,"meta":120800,"style":21},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[96,124919,124920,124925],{"__ignoreMap":21},[99,124921,124922],{"class":101,"line":102},[99,124923,124924],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[99,124926,124927],{"class":101,"line":22},[99,124928,124929],{},".\u002Fpycharm.sh\n",[14,124931,124932],{},"3️⃣创建.desktop文件",[14,124934,124935],{},[259,124936,124937],{},"原理：",[1117,124939,124940,124950],{},[56,124941,124942,124943,124949],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[259,124944,124945,124948],{},[96,124946,124947],{},".desktop"," 文件"," 来识别应用。",[56,124951,124952,124954,124955],{},[96,124953,124947],{}," 文件相当于一个“应用注册表”，告诉系统：",[1117,124956,124957,124960,124963,124966,124969],{},[56,124958,124959],{},"应用名字（Name）",[56,124961,124962],{},"图标（Icon）",[56,124964,124965],{},"执行命令（Exec）",[56,124967,124968],{},"分类（Categories）",[56,124970,124971],{},"是否需要终端（Terminal）",[90,124973,124975],{"className":120797,"code":124974,"language":120799,"meta":120800,"style":21},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[96,124976,124977,124982],{"__ignoreMap":21},[99,124978,124979],{"class":101,"line":102},[99,124980,124981],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[99,124983,124984],{"class":101,"line":22},[99,124985,124986],{},"nano pycharm.desktop\n",[14,124988,124989],{},"nano是一个命令行下的编辑器，也可以使用vim",[90,124991,124993],{"className":120797,"code":124992,"language":120799,"meta":120800,"style":21},"[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",[96,124994,124995,125000,125005,125010,125015,125020,125025,125030,125035,125040],{"__ignoreMap":21},[99,124996,124997],{"class":101,"line":102},[99,124998,124999],{},"[Desktop Entry]\n",[99,125001,125002],{"class":101,"line":22},[99,125003,125004],{},"Version=1.0\n",[99,125006,125007],{"class":101,"line":1165},[99,125008,125009],{},"Type=Application\n",[99,125011,125012],{"class":101,"line":1180},[99,125013,125014],{},"Name=PyCharm\n",[99,125016,125017],{"class":101,"line":1186},[99,125018,125019],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[99,125021,125022],{"class":101,"line":1200},[99,125023,125024],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[99,125026,125027],{"class":101,"line":1206},[99,125028,125029],{},"Comment=JetBrains PyCharm IDE\n",[99,125031,125032],{"class":101,"line":1297},[99,125033,125034],{},"Categories=Development;IDE;\n",[99,125036,125037],{"class":101,"line":1303},[99,125038,125039],{},"Terminal=false\n",[99,125041,125042],{"class":101,"line":1315},[99,125043,125044],{},"StartupWMClass=jetbrains-pycharm\n",[1117,125046,125047,125053,125059,125065],{},[56,125048,125049,125052],{},[96,125050,125051],{},"Exec"," → 点击图标时执行的命令",[56,125054,125055,125058],{},[96,125056,125057],{},"Icon"," → 显示在菜单和桌面上的图标",[56,125060,125061,125064],{},[96,125062,125063],{},"Terminal=false"," → 不打开终端",[56,125066,125067,125070],{},[96,125068,125069],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125072,125073,125074],"blockquote",{},[14,125075,125076,125077,125079,125080],{},"可以理解成 ",[96,125078,124947],{}," 文件是 Linux 的 ",[259,125081,125082],{},"快捷方式配置文件",[14,125084,125085],{},"4️⃣设置可执行权限",[90,125087,125089],{"className":120797,"code":125088,"language":120799,"meta":120800,"style":21},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[96,125090,125091],{"__ignoreMap":21},[99,125092,125093],{"class":101,"line":102},[99,125094,125088],{},[14,125096,125097],{},"5️⃣桌面图标启动的话如下：",[90,125099,125101],{"className":120797,"code":125100,"language":120799,"meta":120800,"style":21},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[96,125102,125103,125108],{"__ignoreMap":21},[99,125104,125105],{"class":101,"line":102},[99,125106,125107],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[99,125109,125110],{"class":101,"line":22},[99,125111,125112],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[53,125114,125115],{"start":1165},[56,125116,125117],{},"下载Appimage文件实现软件的安装",[14,125119,125120],{},"1️⃣先下载appimage",[14,125122,125123],{},[348,125124,125125],{"href":125125,"rel":125126},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23853],[14,125128,125129],{},[1448,125130],{"alt":21,"src":125131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125133,125134],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125136,125137],{},[1448,125138],{"alt":21,"src":125139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125141,125142],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125144,125145],{},[1448,125146],{"alt":21,"src":125147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125149,125150],{},[1448,125151],{"alt":21,"src":125152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125154,125155,125156,125159],{},"3️⃣给他们放在",[96,125157,125158],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125161,125162],{},"4️⃣给软件执行权限",[90,125164,125166],{"className":120797,"code":125165,"language":120799,"meta":120800,"style":21},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[96,125167,125168,125173],{"__ignoreMap":21},[99,125169,125170],{"class":101,"line":102},[99,125171,125172],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[99,125174,125175],{"class":101,"line":22},[99,125176,125177],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125179,125180],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[90,125182,125184],{"className":117277,"code":125183,"language":117279,"meta":21,"style":21},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[96,125185,125186,125193,125200,125206],{"__ignoreMap":21},[99,125187,125188,125190],{"class":101,"line":102},[99,125189,101257],{"class":158},[99,125191,125192],{"class":214}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[99,125194,125195,125197],{"class":101,"line":22},[99,125196,101264],{"class":1949},[99,125198,125199],{"class":214}," .\u002Fqqmusic.desktop\n",[99,125201,125202,125204],{"class":101,"line":1165},[99,125203,124248],{"class":1949},[99,125205,125199],{"class":214},[99,125207,125208,125210,125212,125214],{"class":101,"line":1180},[99,125209,24565],{"class":1949},[99,125211,24568],{"class":214},[99,125213,123114],{"class":214},[99,125215,125199],{"class":214},[14,125217,125218,125220],{},[96,125219,101264],{},"：一个 Linux 命令，主要功能是：",[1117,125222,125223,125226],{},[56,125224,125225],{},"如果文件不存在，就创建一个新的空文件",[56,125227,125228],{},"如果文件已存在，就更新该文件的最后修改时间",[90,125230,125232],{"className":120797,"code":125231,"language":120799,"meta":120800,"style":21},"[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",[96,125233,125234,125238,125243,125248,125253,125257,125262],{"__ignoreMap":21},[99,125235,125236],{"class":101,"line":102},[99,125237,124999],{},[99,125239,125240],{"class":101,"line":22},[99,125241,125242],{},"Name=QQ音乐\n",[99,125244,125245],{"class":101,"line":1165},[99,125246,125247],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[99,125249,125250],{"class":101,"line":1180},[99,125251,125252],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[99,125254,125255],{"class":101,"line":1186},[99,125256,125009],{},[99,125258,125259],{"class":101,"line":1200},[99,125260,125261],{},"Categories=Audio;Music;Player;\n",[99,125263,125264],{"class":101,"line":1206},[99,125265,125266],{},"Comment=QQ Music Client for Linux\n",[14,125268,125269],{},"将文件复制进去",[14,125271,125272],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125274,125275],{},[1448,125276],{"alt":21,"src":125277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125279,125280],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125282,125283],{},[1448,125284],{"alt":21,"src":125285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125287,125288,125289,125292,125293,125296],{},"如果你用的不是KDE，那么也可以直接修改",[96,125290,125291],{},"qqmuic.desktop","：在exec的末尾加上",[96,125294,125295],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[90,125298,125300],{"className":120797,"code":125299,"language":120799,"meta":120800,"style":21},"[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",[96,125301,125302,125306,125310,125315,125319,125323,125327],{"__ignoreMap":21},[99,125303,125304],{"class":101,"line":102},[99,125305,124999],{},[99,125307,125308],{"class":101,"line":22},[99,125309,125242],{},[99,125311,125312],{"class":101,"line":1165},[99,125313,125314],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[99,125316,125317],{"class":101,"line":1180},[99,125318,125252],{},[99,125320,125321],{"class":101,"line":1186},[99,125322,125009],{},[99,125324,125325],{"class":101,"line":1200},[99,125326,125261],{},[99,125328,125329],{"class":101,"line":1206},[99,125330,125266],{},[14,125332,125333],{},[1448,125334],{"alt":21,"src":125335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125337,125338],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[90,125340,125342],{"className":120797,"code":125341,"language":120799,"meta":120800,"style":21},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[96,125343,125344],{"__ignoreMap":21},[99,125345,125346],{"class":101,"line":102},[99,125347,125341],{},[53,125349,125350],{"start":1180},[56,125351,125352],{},"去Flathub上安装软件",[14,125354,125355],{},[348,125356,125357],{"href":125357,"rel":125358},"https:\u002F\u002Fflathub.org\u002F",[23853],[14,125360,125361],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125363,125364],{},[1448,125365],{"alt":21,"src":125366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[90,125368,125370],{"className":120797,"code":125369,"language":120799,"meta":120800,"style":21},"flatpak install flathub com.obsproject.Studio\n",[96,125371,125372],{"__ignoreMap":21},[99,125373,125374],{"class":101,"line":102},[99,125375,125369],{},[14,125377,125378],{},[1448,125379],{"alt":21,"src":125380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125382,125383],{},"2️⃣运行软件",[14,125385,125386],{},"a.官方方式：",[14,125388,125389],{},[1448,125390],{"alt":21,"src":125391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[90,125393,125394],{"className":120797,"code":125369,"language":120799,"meta":120800,"style":21},[96,125395,125396],{"__ignoreMap":21},[99,125397,125398],{"class":101,"line":102},[99,125399,125369],{},[14,125401,125402],{},"b.当普通软件运行：",[14,125404,125405],{},[1448,125406],{"alt":21,"src":125407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125409,125410],{},[1448,125411],{"alt":21,"src":125412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5113,125414,125415],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":21,"searchDepth":22,"depth":22,"links":125417},[125418,125419,125424,125425,125431,125432],{"id":122150,"depth":22,"text":122151},{"id":122492,"depth":22,"text":122493,"children":125420},[125421,125422,125423],{"id":122496,"depth":1165,"text":122497},{"id":122563,"depth":1165,"text":122564},{"id":122824,"depth":1165,"text":122825},{"id":122977,"depth":22,"text":122978},{"id":123215,"depth":22,"text":123216,"children":125426},[125427,125428,125429,125430],{"id":123267,"depth":1165,"text":123268},{"id":123553,"depth":1165,"text":123554},{"id":123824,"depth":1165,"text":123825},{"id":124083,"depth":1165,"text":124084},{"id":124142,"depth":22,"text":124143},{"id":124443,"depth":22,"text":124444,"children":125433},[125434,125435,125436,125437,125438,125439,125440,125441],{"id":124447,"depth":1165,"text":124448},{"id":124459,"depth":1165,"text":124460},{"id":124671,"depth":1165,"text":124672},{"id":124695,"depth":1165,"text":124696},{"id":124761,"depth":1165,"text":124762},{"id":124855,"depth":1165,"text":124856},{"id":124862,"depth":1165,"text":124863},{"id":124886,"depth":1165,"text":124887},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122142,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125448,"title":125449,"body":125450,"description":23364,"extension":24,"meta":125454,"navigation":26,"path":125455,"seo":125456,"stem":125457,"__hash__":125458},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125451,"toc":125452},[],{"title":21,"searchDepth":22,"depth":22,"links":125453},[],{"category":30244},"\u002Fwiki\u002F2025-01-27-linux",{"title":125449,"description":23364},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125460,"title":125461,"body":125462,"description":125466,"extension":24,"meta":125857,"navigation":26,"path":125858,"seo":125859,"stem":125860,"__hash__":125861},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125463,"toc":125855},[125464,125467,125471,125488,125491,125544,125548,125550,125590,125599,125603,125606,125847,125852],[14,125465,125466],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125468,125470],{"id":125469},"_1ubuntu环境配置","1.Ubuntu环境配置",[53,125472,125473,125476,125479,125482,125485],{},[56,125474,125475],{},"ubuntu环境换源",[56,125477,125478],{},"安装cuda",[56,125480,125481],{},"安装miniconda",[56,125483,125484],{},"安装pytorch",[56,125486,125487],{},"安装genesis",[14,125489,125490],{},"参考链接：",[90,125492,125494],{"className":23810,"code":125493,"language":23812,"meta":21,"style":21},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[96,125495,125496],{"__ignoreMap":21},[99,125497,125498,125501,125504,125507,125509,125512,125515,125517,125520,125523,125525,125528,125531,125533,125536,125539,125541],{"class":101,"line":102},[99,125499,125500],{"class":1949},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[99,125502,125503],{"class":214},"=blogdetail",[99,125505,125506],{"class":109},"&sharetype",[99,125508,155],{"class":105},[99,125510,125511],{"class":214},"blogdetail",[99,125513,125514],{"class":109},"&sharerId",[99,125516,155],{"class":105},[99,125518,125519],{"class":214},"144728092",[99,125521,125522],{"class":109},"&sharerefer",[99,125524,155],{"class":105},[99,125526,125527],{"class":214},"PC",[99,125529,125530],{"class":109},"&sharesource",[99,125532,155],{"class":105},[99,125534,125535],{"class":214},"qq_69379513",[99,125537,125538],{"class":109},"&sharefrom",[99,125540,155],{"class":105},[99,125542,125543],{"class":214},"from_link\n",[10,125545,125547],{"id":125546},"_2genesis-报错issue","2.Genesis 报错issue",[14,125549,125490],{},[90,125551,125552],{"className":23810,"code":125493,"language":23812,"meta":21,"style":21},[96,125553,125554],{"__ignoreMap":21},[99,125555,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588],{"class":101,"line":102},[99,125557,125500],{"class":1949},[99,125559,125503],{"class":214},[99,125561,125506],{"class":109},[99,125563,155],{"class":105},[99,125565,125511],{"class":214},[99,125567,125514],{"class":109},[99,125569,155],{"class":105},[99,125571,125519],{"class":214},[99,125573,125522],{"class":109},[99,125575,155],{"class":105},[99,125577,125527],{"class":214},[99,125579,125530],{"class":109},[99,125581,155],{"class":105},[99,125583,125535],{"class":214},[99,125585,125538],{"class":109},[99,125587,155],{"class":105},[99,125589,125543],{"class":214},[90,125591,125593],{"className":23810,"code":125592,"language":23812,"meta":21,"style":21},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[96,125594,125595],{"__ignoreMap":21},[99,125596,125597],{"class":101,"line":102},[99,125598,125592],{"class":1949},[10,125600,125602],{"id":125601},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125604,125605],{},"hello_robot.py",[90,125607,125609],{"className":30359,"code":125608,"language":30361,"meta":21,"style":21},"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",[96,125610,125611,125617,125632,125636,125648,125660,125664,125677,125681,125700,125710,125720,125734,125738,125742,125747,125751,125761,125768,125782,125789,125799,125804,125808,125826,125831,125835,125842],{"__ignoreMap":21},[99,125612,125613,125615],{"class":101,"line":102},[99,125614,30373],{"class":105},[99,125616,45286],{"class":109},[99,125618,125619,125622,125625,125627,125629],{"class":101,"line":22},[99,125620,125621],{"class":109},"os.environ[",[99,125623,125624],{"class":214},"'PYOPENGL_PLATFORM'",[99,125626,4429],{"class":109},[99,125628,155],{"class":105},[99,125630,125631],{"class":214}," 'glx'\n",[99,125633,125634],{"class":101,"line":1165},[99,125635,2386],{"emptyLinePlaceholder":26},[99,125637,125638,125640,125643,125645],{"class":101,"line":1180},[99,125639,30373],{"class":105},[99,125641,125642],{"class":109}," genesis ",[99,125644,31364],{"class":105},[99,125646,125647],{"class":109}," gs\n",[99,125649,125650,125652,125655,125657],{"class":101,"line":1186},[99,125651,30718],{"class":105},[99,125653,125654],{"class":109}," pynput ",[99,125656,30373],{"class":105},[99,125658,125659],{"class":109}," keyboard\n",[99,125661,125662],{"class":101,"line":1200},[99,125663,2386],{"emptyLinePlaceholder":26},[99,125665,125666,125669,125672,125674],{"class":101,"line":1206},[99,125667,125668],{"class":109},"gs.init(",[99,125670,125671],{"class":5203},"backend",[99,125673,155],{"class":105},[99,125675,125676],{"class":109},"gs.gpu)\n",[99,125678,125679],{"class":101,"line":1297},[99,125680,2386],{"emptyLinePlaceholder":26},[99,125682,125683,125686,125688,125691,125694,125696,125698],{"class":101,"line":1303},[99,125684,125685],{"class":109},"scene ",[99,125687,155],{"class":105},[99,125689,125690],{"class":109}," gs.Scene(",[99,125692,125693],{"class":5203},"show_viewer",[99,125695,155],{"class":105},[99,125697,31457],{"class":158},[99,125699,116],{"class":109},[99,125701,125702,125705,125707],{"class":101,"line":1315},[99,125703,125704],{"class":109},"plane ",[99,125706,155],{"class":105},[99,125708,125709],{"class":109}," scene.add_entity(gs.morphs.Plane())\n",[99,125711,125712,125715,125717],{"class":101,"line":1598},[99,125713,125714],{"class":109},"franka ",[99,125716,155],{"class":105},[99,125718,125719],{"class":109}," scene.add_entity(\n",[99,125721,125722,125725,125727,125729,125732],{"class":101,"line":1603},[99,125723,125724],{"class":109},"    gs.morphs.MJCF(",[99,125726,45335],{"class":5203},[99,125728,155],{"class":105},[99,125730,125731],{"class":214},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[99,125733,38028],{"class":109},[99,125735,125736],{"class":101,"line":1609},[99,125737,116],{"class":109},[99,125739,125740],{"class":101,"line":1614},[99,125741,2386],{"emptyLinePlaceholder":26},[99,125743,125744],{"class":101,"line":1628},[99,125745,125746],{"class":109},"scene.build()\n",[99,125748,125749],{"class":101,"line":1633},[99,125750,2386],{"emptyLinePlaceholder":26},[99,125752,125753,125755,125758],{"class":101,"line":1639},[99,125754,31928],{"class":105},[99,125756,125757],{"class":1949}," on_press",[99,125759,125760],{"class":109},"(key):\n",[99,125762,125763,125766],{"class":101,"line":1660},[99,125764,125765],{"class":105},"    try",[99,125767,3725],{"class":109},[99,125769,125770,125772,125775,125777,125780],{"class":101,"line":1665},[99,125771,2483],{"class":105},[99,125773,125774],{"class":109}," key.char ",[99,125776,2935],{"class":105},[99,125778,125779],{"class":214}," 'q'",[99,125781,3725],{"class":109},[99,125783,125784,125786],{"class":101,"line":1679},[99,125785,15719],{"class":105},[99,125787,125788],{"class":158}," False\n",[99,125790,125791,125794,125797],{"class":101,"line":1684},[99,125792,125793],{"class":105},"    except",[99,125795,125796],{"class":158}," AttributeError",[99,125798,3725],{"class":109},[99,125800,125801],{"class":101,"line":1713},[99,125802,125803],{"class":105},"        pass\n",[99,125805,125806],{"class":101,"line":1718},[99,125807,2386],{"emptyLinePlaceholder":26},[99,125809,125810,125813,125815,125818,125821,125823],{"class":101,"line":1735},[99,125811,125812],{"class":109},"listener ",[99,125814,155],{"class":105},[99,125816,125817],{"class":109}," keyboard.Listener(",[99,125819,125820],{"class":5203},"on_press",[99,125822,155],{"class":105},[99,125824,125825],{"class":109},"on_press)\n",[99,125827,125828],{"class":101,"line":1740},[99,125829,125830],{"class":109},"listener.start()\n",[99,125832,125833],{"class":101,"line":1745},[99,125834,2386],{"emptyLinePlaceholder":26},[99,125836,125837,125839],{"class":101,"line":1750},[99,125838,108644],{"class":105},[99,125840,125841],{"class":109}," listener.running:\n",[99,125843,125844],{"class":101,"line":1764},[99,125845,125846],{"class":109},"    scene.step()\n",[14,125848,125849],{},[1448,125850],{"alt":21,"src":125851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5113,125853,125854],{},"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":21,"searchDepth":22,"depth":22,"links":125856},[],{"category":23366},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125461,"description":125466},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125863,"title":125864,"body":125865,"description":23364,"extension":24,"meta":125880,"navigation":26,"path":125881,"seo":125882,"stem":125883,"__hash__":125884},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125866,"toc":125877},[125867,125870,125874],[10,125868,125864],{"id":125869},"_1-基础知识",[41,125871,125873],{"id":125872},"_11-js的组成","1.1 js的组成",[14,125875,125876],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":21,"searchDepth":22,"depth":22,"links":125878},[125879],{"id":125872,"depth":22,"text":125873},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125864,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125886,"title":125887,"body":125888,"description":23364,"extension":24,"meta":126027,"navigation":26,"path":126028,"seo":126029,"stem":126030,"__hash__":126031},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125889,"toc":126015},[125890,125893,125897,125900,125904,125914,125918,125921,125924,125927,125931,125938,125944,125948,125954,125965,125969,125972,125976,125979,125983,125986,125990,125993,125997,126000,126003,126006,126009,126012],[10,125891,125887],{"id":125892},"_2-vscode必备内容",[41,125894,125896],{"id":125895},"_21-标签分类","2.1 标签分类",[14,125898,125899],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[41,125901,125903],{"id":125902},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125905,125906,125907,125909,125910,125913],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[96,125908,336],{}," 然后按 ",[96,125911,125912],{},"Tab","，快速自动生成基本结构。",[41,125915,125917],{"id":125916},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125919,125920],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125922,125923],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125925,125926],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[41,125928,125930],{"id":125929},"_24-视图缩放","2.4 视图缩放",[14,125932,125933,125934,125937],{},"缩放视图 ",[96,125935,125936],{},"ctrl+"," 可实现代码增大。",[14,125939,125940,125943],{},[96,125941,125942],{},"ctrl-"," 可实现代码减小。",[41,125945,125947],{"id":125946},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125949,125950,125951,28366],{},"VSCode 新建文件快捷键为 ",[96,125952,125953],{},"ctrl+N",[14,125955,125956,125957,125960,125961,125964],{},"保存快捷键为 ",[96,125958,125959],{},"ctrl+S","，将文本保存为 ",[96,125962,125963],{},".html"," 文件。",[41,125966,125968],{"id":125967},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125970,125971],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[41,125973,125975],{"id":125974},"_27-vscode-icons","2.7 vscode-icons",[14,125977,125978],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[41,125980,125982],{"id":125981},"_28-easy-less","2.8 Easy LESS",[14,125984,125985],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[41,125987,125989],{"id":125988},"_29-会了吧插件","2.9 会了吧插件",[14,125991,125992],{},"会了吧插件可以展示代码中英语单词的意思。",[41,125994,125996],{"id":125995},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,125998,125999],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126001,126002],{},"②选定多个相同的单词:ctrl+D",[14,126004,126005],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126007,126008],{},"④全局替换某些单词:ctrl+h",[14,126010,126011],{},"⑤快速定位到某一行:ctrl+g",[14,126013,126014],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":21,"searchDepth":22,"depth":22,"links":126016},[126017,126018,126019,126020,126021,126022,126023,126024,126025,126026],{"id":125895,"depth":22,"text":125896},{"id":125902,"depth":22,"text":125903},{"id":125916,"depth":22,"text":125917},{"id":125929,"depth":22,"text":125930},{"id":125946,"depth":22,"text":125947},{"id":125967,"depth":22,"text":125968},{"id":125974,"depth":22,"text":125975},{"id":125981,"depth":22,"text":125982},{"id":125988,"depth":22,"text":125989},{"id":125995,"depth":22,"text":125996},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125887,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126033,"title":126034,"body":126035,"description":23364,"extension":24,"meta":126194,"navigation":26,"path":126195,"seo":126196,"stem":126197,"__hash__":126198},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126036,"toc":126186},[126037,126040,126044,126054,126060,126066,126070,126079,126083,126088,126091,126094,126098,126101,126111,126120,126129,126138,126148,126155,126160,126165,126178],[10,126038,126034],{"id":126039},"_3-html文本与容器标签",[41,126041,126043],{"id":126042},"_31-标题标签","3.1 标题标签",[14,126045,126046,126049,126050,126053],{},[96,126047,126048],{},"\u003Ch1>","我是一级标签",[96,126051,126052],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126055,126056,126049,126058],{},[96,126057,126048],{},[96,126059,126052],{},[14,126061,123316,126062,126065],{},[96,126063,126064],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[41,126067,126069],{"id":126068},"_32-段落标签","3.2 段落标签",[14,126071,126072,126075,126076],{},[96,126073,126074],{},"\u003Cp>","....",[96,126077,126078],{},"\u003C\u002Fp>",[41,126080,126082],{"id":126081},"_33-换行标签","3.3 换行标签",[14,126084,126085],{},[96,126086,126087],{},"\u003Cbr \u002F>",[14,126089,126090],{},"具有强制换行的作用",[14,126092,126093],{},"单标签",[41,126095,126097],{"id":126096},"_34-文本格式化标签","3.4 文本格式化标签",[14,126099,126100],{},"提供粗体、斜体和下划线等效果",[14,126102,126103,126104,82520,126107,126110],{},"加粗：",[96,126105,126106],{},"\u003Cstrong>...\u003C\u002Fstrong>",[96,126108,126109],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126112,126113,126114,82520,126117,126110],{},"斜体：",[96,126115,126116],{},"\u003Cem>...\u003C\u002Fem>",[96,126118,126119],{},"\u003Ci>...\u003C\u002Fi>",[14,126121,126122,126123,82520,126126,126110],{},"删除线：",[96,126124,126125],{},"\u003Cdel>...\u003C\u002Fdel>",[96,126127,126128],{},"\u003Cs>...\u003C\u002Fs>",[14,126130,126131,126132,82520,126135,126110],{},"下划线：",[96,126133,126134],{},"\u003Cins>...\u003C\u002Fins>",[96,126136,126137],{},"\u003Cu>...\u003C\u002Fu>",[41,126139,126141,126142,18397,126145,102674],{"id":126140},"_35-div和span标签","3.5 ",[96,126143,126144],{},"\u003Cdiv>",[96,126146,126147],{},"\u003Cspan>",[14,126149,126150,100999,126152,126154],{},[96,126151,126144],{},[96,126153,126147],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126156,126157],{},[96,126158,126159],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126161,126162],{},[96,126163,126164],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126166,126167,126168,126170,126171,126173,126174,126177],{},"两者特点：①",[96,126169,126144],{}," 标签用来布局，但一行通常只放一个 ",[96,126172,126144],{},"。可以理解为一个大盒子，独占一行，在 ",[96,126175,126176],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126179,77230,126180,126182,126183,126185],{},[96,126181,126147],{}," 标签也可用于布局，一行可以放多个 ",[96,126184,126147],{},"，可理解为小盒子。",{"title":21,"searchDepth":22,"depth":22,"links":126187},[126188,126189,126190,126191,126192],{"id":126042,"depth":22,"text":126043},{"id":126068,"depth":22,"text":126069},{"id":126081,"depth":22,"text":126082},{"id":126096,"depth":22,"text":126097},{"id":126140,"depth":22,"text":126193},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126034,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126200,"title":126201,"body":126202,"description":23364,"extension":24,"meta":126399,"navigation":26,"path":126400,"seo":126401,"stem":126402,"__hash__":126403},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126203,"toc":126391},[126204,126207,126211,126214,126220,126227,126233,126239,126242,126245,126248,126251,126254,126257,126260,126264,126267,126270,126273,126279,126285,126291,126298,126302,126308,126314,126317,126320,126326,126332,126338,126341,126344,126348,126351,126361,126367,126371,126380,126384,126387],[10,126205,126201],{"id":126206},"_4-html图像与链接",[41,126208,126210],{"id":126209},"_41-图像标签","4.1 图像标签",[14,126212,126213],{},"（1）标签",[14,126215,126216,126219],{},[96,126217,126218],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126221,126222,126223,126226],{},"src是",[96,126224,126225],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126228,126229,126230],{},"alt:文本，替换文本。图像不能显示的文字 ",[96,126231,126232],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126234,126235,126236],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[96,126237,126238],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126240,126241],{},"width:像素，设置图像的宽度",[14,126243,126244],{},"height:像素，设置图像的高度",[14,126246,126247],{},"border：像素，设置图像的边框粗细",[14,126249,126250],{},"（2）图像标签属性的注意点：",[14,126252,126253],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126255,126256],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126258,126259],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[41,126261,126263],{"id":126262},"_42-路径注意要点","4.2 路径注意要点：",[14,126265,126266],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126268,126269],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126271,126272],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126274,126275,126276],{},"①同一级路径：图像文件位于HTML文件同一级，如",[96,126277,126278],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126280,126281,126282],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[96,126283,126284],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126286,126287,126288],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[96,126289,126290],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126292,126293,126294,361],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[348,126295,126296],{"href":126296,"rel":126297},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23853],[41,126299,126301],{"id":126300},"_43-超链接标签","4.3 超链接标签",[14,126303,126304,126307],{},[96,126305,126306],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126309,126310,126311],{},"①语法格式：",[96,126312,126313],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126315,126316],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126318,126319],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126321,126322,126323],{},"③链接分类：外部链接：",[96,126324,126325],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126327,126328,126329],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[96,126330,126331],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126333,126334,126335],{},"空链接：如果当时没有确定链接目标时，",[96,126336,126337],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126339,126340],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126342,126343],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[41,126345,126347],{"id":126346},"_44-锚点链接","4.4 锚点链接",[14,126349,126350],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126352,126353,126354,126357,126358],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[96,126355,126356],{},"\u003Ca href=\"#two\">","第二级",[96,126359,126360],{},"\u003C\u002Fa>",[14,126362,126363,126364],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[96,126365,126366],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[41,126368,126370],{"id":126369},"_45-注释标签","4.5 注释标签",[14,126372,126373,126376,126377],{},[96,126374,126375],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[96,126378,126379],{},"ctrl+\u002F",[41,126381,126383],{"id":126382},"_46-特殊字符","4.6 特殊字符",[14,126385,126386],{},"可以实现添加多个空格",[1448,126388],{"style":126389,"src":126390},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":21,"searchDepth":22,"depth":22,"links":126392},[126393,126394,126395,126396,126397,126398],{"id":126209,"depth":22,"text":126210},{"id":126262,"depth":22,"text":126263},{"id":126300,"depth":22,"text":126301},{"id":126346,"depth":22,"text":126347},{"id":126369,"depth":22,"text":126370},{"id":126382,"depth":22,"text":126383},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126201,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126405,"title":126406,"body":126407,"description":23364,"extension":24,"meta":126700,"navigation":26,"path":126701,"seo":126702,"stem":126703,"__hash__":126704},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126408,"toc":126691},[126409,126412,126416,126419,126422,126425,126428,126431,126434,126437,126440,126443,126463,126469,126473,126476,126479,126482,126485,126488,126491,126495,126498,126501,126504,126507,126520,126525,126528,126531,126546,126549,126552,126555,126558,126561,126565,126568,126575,126578,126581,126584,126587,126590,126596,126599,126602,126608,126611,126614,126617,126623,126626,126629,126643,126650,126653,126656,126663,126672,126675,126678,126681,126685,126688],[10,126410,126406],{"id":126411},"_5-html表格列表与表单",[41,126413,126415],{"id":126414},"_51-表格标签","5.1 表格标签",[14,126417,126418],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126420,126421],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126423,126424],{},"②表格基本语法：",[1448,126426],{"style":126389,"src":126427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126429,126430],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1448,126432],{"style":126389,"src":126433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126435,126436],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1448,126438],{"style":126389,"src":126439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126441,126442],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126444,126445,126448,126449,126451,126452,126455,126456,126458,126459,126462],{},[96,126446,126447],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[96,126450,126447],{},"内部必须拥有",[96,126453,126454],{},"\u003Ctr>","标签，一般位于第一行，",[96,126457,126447],{},"比",[96,126460,126461],{},"\u003Cth>","范围广",[14,126464,126465,126468],{},[96,126466,126467],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[41,126470,126472],{"id":126471},"_52-合并单元格","5.2 合并单元格",[14,126474,126475],{},"（1）合并单元格方式：",[14,126477,126478],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126480,126481],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126483,126484],{},"（2）目标单元格：",[14,126486,126487],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126489,126490],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[41,126492,126494],{"id":126493},"_53-列表标签","5.3 列表标签",[14,126496,126497],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126499,126500],{},"①无序列表：",[1448,126502],{"style":126389,"src":126503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126505,126506],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126508,126509,126512,126513,126516,126517,126519],{},[96,126510,126511],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[96,126514,126515],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[96,126518,126511],{},"中输入其他标签或文字是不对的",[14,126521,126522,126524],{},[96,126523,126515],{},"之间相当于一个容器，可以容纳所有元素",[14,126526,126527],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126529,126530],{},"在css中去除前边的小圆点采用如下代码:",[90,126532,126536],{"className":126533,"code":126534,"language":126535,"meta":21,"style":21},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[96,126537,126538],{"__ignoreMap":21},[99,126539,126540,126543],{"class":101,"line":102},[99,126541,126542],{"class":51281},"list-style",[99,126544,126545],{"class":109},": none;\n",[14,126547,126548],{},"②有序列表：",[1448,126550],{"style":126389,"src":126551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126553,126554],{},"③自定义列表：",[1448,126556],{"style":126389,"src":126557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1448,126559],{"style":126389,"src":126560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[41,126562,126564],{"id":126563},"_54-表单标签","5.4 表单标签",[14,126566,126567],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126569,126570,126571,126574],{},"（1）表单域：包含单元素的区域，",[96,126572,126573],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1448,126576],{"style":126389,"src":126577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126579,126580],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126582,126583],{},"表单元素提交必须有name属性",[14,126585,126586],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126588,126589],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126591,77207,126592,126595],{},[96,126593,126594],{},"\u003Cinput>","输入表单元素",[1448,126597],{"style":126389,"src":126598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1448,126600],{"style":126389,"src":126601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126603,126604,126605],{},"单选按钮：",[96,126606,126607],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1448,126609],{"style":126389,"src":126610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126612,126613],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1448,126615],{"style":126389,"src":126616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126618,126619,126622],{},[259,126620,126621],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126624,126625],{},"②select下拉表单元素：可以节约页面控件",[1448,126627],{"style":126389,"src":126628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126630,126631,13782,126633,126636,126637,126639,126640,126642],{},[259,126632,139],{},[96,126634,126635],{},"\u003Cselect>","中至少包含一对",[96,126638,102695],{},"；在",[96,126641,102695],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126644,126645,126646,126649],{},"③",[96,126647,126648],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1448,126651],{"style":126389,"src":126652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126654,126655],{},"3行20列",[41,126657,126659,126660,102674],{"id":126658},"_55-lable标签","5.5 ",[96,126661,126662],{},"\u003Clable>",[14,126664,126665,126666,126668,126669,126671],{},"它不是表单标签，但常常与表单标签搭配使用，",[96,126667,126662],{},"标签用于绑定一个表单标签，当点击",[96,126670,126662],{},"标签内的文本",[14,126673,126674],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1448,126676],{"style":126389,"src":126677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1448,126679],{"style":126389,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[41,126682,126684],{"id":126683},"_56-实例","5.6 实例",[1448,126686],{"style":126389,"src":126687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5113,126689,126690],{},"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":21,"searchDepth":22,"depth":22,"links":126692},[126693,126694,126695,126696,126697,126699],{"id":126414,"depth":22,"text":126415},{"id":126471,"depth":22,"text":126472},{"id":126493,"depth":22,"text":126494},{"id":126563,"depth":22,"text":126564},{"id":126658,"depth":22,"text":126698},"5.5 \u003Clable>标签",{"id":126683,"depth":22,"text":126684},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126406,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126706,"title":126707,"body":126708,"description":23364,"extension":24,"meta":127257,"navigation":26,"path":127258,"seo":127259,"stem":127260,"__hash__":127261},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126709,"toc":127232},[126710,126713,126717,126720,126723,126727,126730,126733,126736,126739,126742,126745,126748,126752,126755,126759,126762,126765,126768,126772,126775,126778,126781,126787,126790,126793,126796,126799,126802,126805,126808,126841,126845,126848,126851,126854,126858,126861,126864,126867,126870,126873,126877,126880,126883,126886,126890,126893,126897,126900,126904,126907,126912,126916,126919,126923,126926,126929,126932,126935,126962,126965,126969,126972,126975,126980,126983,126986,126990,126993,126998,127001,127004,127007,127011,127014,127017,127020,127024,127027,127030,127033,127037,127041,127044,127084,127087,127091,127098,127101,127105,127108,127154,127158,127161,127164,127167,127195,127199,127202,127229],[10,126711,126707],{"id":126712},"_6-css语法与文本样式",[41,126714,126716],{"id":126715},"_61-css语法规范","6.1 css语法规范",[14,126718,126719],{},"由两部分组成，选择器及一条或多条声明",[1448,126721],{"style":126389,"src":126722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126724,126725],{},[259,126726,139],{},[14,126728,126729],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126731,126732],{},"②属性与属性值以“键值对”的形式出现",[14,126734,126735],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126737,126738],{},"④属性和属性值之间用英文“;”分开",[1448,126740],{"style":126389,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1448,126743],{"style":126389,"src":126744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1448,126746],{"style":126389,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[41,126749,126751],{"id":126750},"_62-css选择器","6.2 css选择器",[14,126753,126754],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[70,126756,126758],{"id":126757},"_621-标签选择器","6.2.1 标签选择器",[14,126760,126761],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126763,126764],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1448,126766],{"style":126389,"src":126767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[70,126769,126771],{"id":126770},"_622-类选择器","6.2.2 类选择器",[14,126773,126774],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126776,126777],{},"②样例",[1448,126779],{"style":126389,"src":126780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126782,126783,126784,126786],{},"③ ",[259,126785,126621],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126788,126789],{},"可以理解为给这个标签起了个名字，来表示；",[14,126791,126792],{},"长名称或词组可以使用横线来为选择器命名；",[14,126794,126795],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126797,126798],{},"命名要有意义；",[1448,126800],{"style":126389,"src":126801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126803,126804],{},"类选择器也可以指定特殊的元素p.center{}",[14,126806,126807],{},"p.center和.center都对",[90,126809,126811],{"className":126533,"code":126810,"language":126535,"meta":21,"style":21},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[96,126812,126813,126818,126827,126837],{"__ignoreMap":21},[99,126814,126815],{"class":101,"line":102},[99,126816,126817],{"class":168},"\u002F* 类选择器指定特殊元素 *\u002F\n",[99,126819,126820,126822,126825],{"class":101,"line":22},[99,126821,14],{"class":51281},[99,126823,126824],{"class":1949},".center",[99,126826,15559],{"class":109},[99,126828,126829,126831,126833,126835],{"class":101,"line":1165},[99,126830,70507],{"class":158},[99,126832,51418],{"class":109},[99,126834,51573],{"class":158},[99,126836,1276],{"class":109},[99,126838,126839],{"class":101,"line":1180},[99,126840,1551],{"class":109},[70,126842,126844],{"id":126843},"_623-多类名使用","6.2.3 多类名使用",[14,126846,126847],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1448,126849],{"style":126389,"src":126850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126852,126853],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[70,126855,126857],{"id":126856},"_624-id选择器","6.2.4 id选择器",[14,126859,126860],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126862,126863],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1448,126865],{"style":126389,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126868,126869],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126871,126872],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[70,126874,126876],{"id":126875},"_625-通配符选择器","6.2.5 通配符选择器",[14,126878,126879],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126881,126882],{},"* {",[14,126884,126885],{},"color=\"red\"}",[70,126887,126889],{"id":126888},"_626-总结","6.2.6 总结",[1448,126891],{"style":126389,"src":126892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[41,126894,126896],{"id":126895},"_63-css字体属性","6.3 css字体属性",[14,126898,126899],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[70,126901,126903],{"id":126902},"_631-字体系列","6.3.1 字体系列",[14,126905,126906],{},"font-family: '宋体';",[14,126908,126909,126911],{},[259,126910,139],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[70,126913,126915],{"id":126914},"_632-字体大小","6.3.2 字体大小",[14,126917,126918],{},"font-size: 20px",[14,126920,126921,26462],{},[259,126922,126621],{},[14,126924,126925],{},"①px（像素）大小是网页的最常用单位",[14,126927,126928],{},"②谷歌浏览器默认为16px",[14,126930,126931],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126933,126934],{},"④可以给body指定整个页面的大小：会自动引用",[90,126936,126938],{"className":126533,"code":126937,"language":126535,"meta":21,"style":21},"body {\n  font-size: 16px;\n}\n",[96,126939,126940,126946,126958],{"__ignoreMap":21},[99,126941,126942,126944],{"class":101,"line":102},[99,126943,51781],{"class":51281},[99,126945,15559],{"class":109},[99,126947,126948,126950,126952,126954,126956],{"class":101,"line":22},[99,126949,70607],{"class":158},[99,126951,51418],{"class":109},[99,126953,711],{"class":158},[99,126955,51473],{"class":105},[99,126957,1276],{"class":109},[99,126959,126960],{"class":101,"line":1165},[99,126961,1551],{"class":109},[14,126963,126964],{},"⑤标题标签比较特殊，需要单独指定大小",[70,126966,126968],{"id":126967},"_633-字体粗细","6.3.3 字体粗细",[14,126970,126971],{},"font-weight: bold;",[14,126973,126974],{},"font-weight: 100；",[14,126976,126977,126979],{},[259,126978,139],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126981,126982],{},"font-weight= 400;",[14,126984,126985],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[70,126987,126989],{"id":126988},"_634-文字样式","6.3.4 文字样式",[14,126991,126992],{},"font-style: normal；",[14,126994,126995,26462],{},[259,126996,126997],{},"属性值",[14,126999,127000],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127002,127003],{},"②italic：浏览器会显示斜体的字体样式",[1448,127005],{"style":126389,"src":127006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[70,127008,127010],{"id":127009},"_635-字体符合属性","6.3.5 字体符合属性",[1448,127012],{"style":126389,"src":127013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1448,127015],{"style":126389,"src":127016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127018,127019],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127021,127022,26462],{},[259,127023,126621],{},[14,127025,127026],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127028,127029],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127031,127032],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[41,127034,127036],{"id":127035},"_64-css-test文本属性","6.4 css test文本属性",[70,127038,127040],{"id":127039},"_641-文本颜色","6.4.1 文本颜色",[14,127042,127043],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[90,127045,127047],{"className":126533,"code":127046,"language":126535,"meta":21,"style":21},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[96,127048,127049,127054,127060,127070,127075,127080],{"__ignoreMap":21},[99,127050,127051],{"class":101,"line":102},[99,127052,127053],{"class":168},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[99,127055,127056,127058],{"class":101,"line":22},[99,127057,14],{"class":51281},[99,127059,15559],{"class":109},[99,127061,127062,127064,127066,127068],{"class":101,"line":1165},[99,127063,70886],{"class":158},[99,127065,51418],{"class":109},[99,127067,57402],{"class":158},[99,127069,1276],{"class":109},[99,127071,127072],{"class":101,"line":1180},[99,127073,127074],{"class":168},"  \u002F* color: #ff0000; *\u002F\n",[99,127076,127077],{"class":101,"line":1186},[99,127078,127079],{"class":168},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[99,127081,127082],{"class":101,"line":1200},[99,127083,1551],{"class":109},[1448,127085],{"style":126389,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[70,127088,127090],{"id":127089},"_642-对齐文本","6.4.2 对齐文本",[14,127092,127093,127094,127097],{},"text-align属于用于设置元素内文本内容的 ",[259,127095,127096],{},"水平对齐"," 方式",[14,127099,127100],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[70,127102,127104],{"id":127103},"_643-装饰文本","6.4.3 装饰文本",[14,127106,127107],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[90,127109,127111],{"className":126533,"code":127110,"language":126535,"meta":21,"style":21},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[96,127112,127113,127119,127129,127133,127139,127150],{"__ignoreMap":21},[99,127114,127115,127117],{"class":101,"line":102},[99,127116,348],{"class":51281},[99,127118,15559],{"class":109},[99,127120,127121,127123,127125,127127],{"class":101,"line":22},[99,127122,70483],{"class":158},[99,127124,51418],{"class":109},[99,127126,54718],{"class":158},[99,127128,1276],{"class":109},[99,127130,127131],{"class":101,"line":1165},[99,127132,1551],{"class":109},[99,127134,127135,127137],{"class":101,"line":1180},[99,127136,14],{"class":51281},[99,127138,15559],{"class":109},[99,127140,127141,127143,127145,127148],{"class":101,"line":1186},[99,127142,70483],{"class":158},[99,127144,51418],{"class":109},[99,127146,127147],{"class":158},"underline",[99,127149,1276],{"class":109},[99,127151,127152],{"class":101,"line":1200},[99,127153,1551],{"class":109},[70,127155,127157],{"id":127156},"_644-文本缩进","6.4.4 文本缩进",[14,127159,127160],{},"实现文本的第一行首行缩进自己指定的距离",[14,127162,127163],{},"20px往右边走；-20px往左边走",[14,127165,127166],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[90,127168,127170],{"className":126533,"code":127169,"language":126535,"meta":21,"style":21},"p {\n  text-indent: 2em;\n}\n",[96,127171,127172,127178,127191],{"__ignoreMap":21},[99,127173,127174,127176],{"class":101,"line":102},[99,127175,14],{"class":51281},[99,127177,15559],{"class":109},[99,127179,127180,127183,127185,127187,127189],{"class":101,"line":22},[99,127181,127182],{"class":158},"  text-indent",[99,127184,51418],{"class":109},[99,127186,187],{"class":158},[99,127188,23541],{"class":105},[99,127190,1276],{"class":109},[99,127192,127193],{"class":101,"line":1165},[99,127194,1551],{"class":109},[70,127196,127198],{"id":127197},"_645-行间距","6.4.5 行间距",[14,127200,127201],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[90,127203,127205],{"className":126533,"code":127204,"language":126535,"meta":21,"style":21},"p {\n  line-height: 1.6;\n}\n",[96,127206,127207,127213,127225],{"__ignoreMap":21},[99,127208,127209,127211],{"class":101,"line":102},[99,127210,14],{"class":51281},[99,127212,15559],{"class":109},[99,127214,127215,127218,127220,127223],{"class":101,"line":22},[99,127216,127217],{"class":158},"  line-height",[99,127219,51418],{"class":109},[99,127221,127222],{"class":158},"1.6",[99,127224,1276],{"class":109},[99,127226,127227],{"class":101,"line":1165},[99,127228,1551],{"class":109},[5113,127230,127231],{},"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":21,"searchDepth":22,"depth":22,"links":127233},[127234,127235,127243,127250],{"id":126715,"depth":22,"text":126716},{"id":126750,"depth":22,"text":126751,"children":127236},[127237,127238,127239,127240,127241,127242],{"id":126757,"depth":1165,"text":126758},{"id":126770,"depth":1165,"text":126771},{"id":126843,"depth":1165,"text":126844},{"id":126856,"depth":1165,"text":126857},{"id":126875,"depth":1165,"text":126876},{"id":126888,"depth":1165,"text":126889},{"id":126895,"depth":22,"text":126896,"children":127244},[127245,127246,127247,127248,127249],{"id":126902,"depth":1165,"text":126903},{"id":126914,"depth":1165,"text":126915},{"id":126967,"depth":1165,"text":126968},{"id":126988,"depth":1165,"text":126989},{"id":127009,"depth":1165,"text":127010},{"id":127035,"depth":22,"text":127036,"children":127251},[127252,127253,127254,127255,127256],{"id":127039,"depth":1165,"text":127040},{"id":127089,"depth":1165,"text":127090},{"id":127103,"depth":1165,"text":127104},{"id":127156,"depth":1165,"text":127157},{"id":127197,"depth":1165,"text":127198},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126707,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127263,"title":127264,"body":127265,"description":23364,"extension":24,"meta":127914,"navigation":26,"path":127915,"seo":127916,"stem":127917,"__hash__":127918},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127266,"toc":127895},[127267,127270,127274,127278,127338,127342,127352,127355,127358,127362,127387,127391,127394,127397,127400,127403,127406,127410,127413,127416,127458,127461,127487,127493,127496,127500,127504,127510,127513,127516,127519,127522,127525,127528,127573,127577,127580,127583,127587,127591,127620,127623,127628,127631,127634,127637,127640,127644,127648,127651,127653,127656,127660,127663,127667,127670,127673,127676,127680,127684,127690,127700,127703,127706,127709,127712,127715,127838,127846,127854,127892],[10,127268,127264],{"id":127269},"_7-css引入方式与选择器进阶",[41,127271,127273],{"id":127272},"_71-css引入方式","7.1 css引入方式",[70,127275,127277],{"id":127276},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[90,127279,127283],{"className":127280,"code":127281,"language":127282,"meta":21,"style":21},"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",[96,127284,127285,127293,127300,127312,127325,127330],{"__ignoreMap":21},[99,127286,127287,127289,127291],{"class":101,"line":102},[99,127288,1020],{"class":109},[99,127290,5113],{"class":51281},[99,127292,51288],{"class":109},[99,127294,127295,127298],{"class":101,"line":22},[99,127296,127297],{"class":51281},"  h1",[99,127299,15559],{"class":109},[99,127301,127302,127305,127307,127310],{"class":101,"line":1165},[99,127303,127304],{"class":158},"    color",[99,127306,51418],{"class":109},[99,127308,127309],{"class":158},"blue",[99,127311,1276],{"class":109},[99,127313,127314,127317,127319,127321,127323],{"class":101,"line":1180},[99,127315,127316],{"class":158},"    font-size",[99,127318,51418],{"class":109},[99,127320,910],{"class":158},[99,127322,51473],{"class":105},[99,127324,1276],{"class":109},[99,127326,127327],{"class":101,"line":1186},[99,127328,127329],{"class":109},"  }\n",[99,127331,127332,127334,127336],{"class":101,"line":1200},[99,127333,51766],{"class":109},[99,127335,5113],{"class":51281},[99,127337,51288],{"class":109},[14,127339,127340,26462],{},[259,127341,126621],{},[14,127343,77207,127344,127347,127348,127351],{},[96,127345,127346],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[96,127349,127350],{},"\u003Chead>","标签中",[14,127353,127354],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127356,127357],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[70,127359,127361],{"id":127360},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[90,127363,127365],{"className":127280,"code":127364,"language":127282,"meta":21,"style":21},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[96,127366,127367],{"__ignoreMap":21},[99,127368,127369,127371,127373,127375,127377,127380,127383,127385],{"class":101,"line":102},[99,127370,1020],{"class":109},[99,127372,14],{"class":51281},[99,127374,62607],{"class":1949},[99,127376,155],{"class":109},[99,127378,127379],{"class":214},"\"color: red; font-size: 16px;\"",[99,127381,127382],{"class":109},">这是一个段落\u003C\u002F",[99,127384,14],{"class":51281},[99,127386,51288],{"class":109},[14,127388,127389,26462],{},[259,127390,126621],{},[14,127392,127393],{},"①style其实就是标签的属性",[14,127395,127396],{},"②在双引号中间，写法要符合css规范",[14,127398,127399],{},"③可以控制当前的标签设置样式",[14,127401,127402],{},"④书写繁琐，简单时才用",[14,127404,127405],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[70,127407,127409],{"id":127408},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127411,127412],{},"使用最多，单独建一个css文件，然后html引用",[14,127414,127415],{},"①css文件部分： style.css",[90,127417,127419],{"className":126533,"code":127418,"language":126535,"meta":21,"style":21},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[96,127420,127421,127426,127432,127442,127454],{"__ignoreMap":21},[99,127422,127423],{"class":101,"line":102},[99,127424,127425],{"class":168},"\u002F* style.css *\u002F\n",[99,127427,127428,127430],{"class":101,"line":22},[99,127429,10],{"class":51281},[99,127431,15559],{"class":109},[99,127433,127434,127436,127438,127440],{"class":101,"line":1165},[99,127435,70886],{"class":158},[99,127437,51418],{"class":109},[99,127439,127309],{"class":158},[99,127441,1276],{"class":109},[99,127443,127444,127446,127448,127450,127452],{"class":101,"line":1180},[99,127445,70607],{"class":158},[99,127447,51418],{"class":109},[99,127449,910],{"class":158},[99,127451,51473],{"class":105},[99,127453,1276],{"class":109},[99,127455,127456],{"class":101,"line":1186},[99,127457,1551],{"class":109},[14,127459,127460],{},"②html部分",[90,127462,127464],{"className":127280,"code":127463,"language":127282,"meta":21,"style":21},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[96,127465,127466],{"__ignoreMap":21},[99,127467,127468,127470,127472,127474,127476,127478,127480,127482,127485],{"class":101,"line":102},[99,127469,1020],{"class":109},[99,127471,68986],{"class":51281},[99,127473,68989],{"class":1949},[99,127475,155],{"class":109},[99,127477,68994],{"class":214},[99,127479,61038],{"class":1949},[99,127481,155],{"class":109},[99,127483,127484],{"class":214},"\"style.css\"",[99,127486,51288],{"class":109},[14,127488,127489,127492],{},[96,127490,127491],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127494,127495],{},"ctrl+0回到页面原来大小",[41,127497,127499],{"id":127498},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[70,127501,127503],{"id":127502},"_721-快速生成html","7.2.1 快速生成html",[14,127505,127506,127507],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[96,127508,127509],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127511,127512],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127514,127515],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127517,127518],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127520,127521],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127523,127524],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127526,127527],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[90,127529,127531],{"className":127280,"code":127530,"language":127282,"meta":21,"style":21},"\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",[96,127532,127533,127538,127543,127548,127553,127558,127563,127568],{"__ignoreMap":21},[99,127534,127535],{"class":101,"line":102},[99,127536,127537],{"class":168},"\u003C!-- Emmet 语法示例 -->\n",[99,127539,127540],{"class":101,"line":22},[99,127541,127542],{"class":168},"\u003C!-- div*3        → 生成3个div -->\n",[99,127544,127545],{"class":101,"line":1165},[99,127546,127547],{"class":168},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[99,127549,127550],{"class":101,"line":1180},[99,127551,127552],{"class":168},"\u003C!-- div+p        → 兄弟div和p -->\n",[99,127554,127555],{"class":101,"line":1186},[99,127556,127557],{"class":168},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[99,127559,127560],{"class":101,"line":1200},[99,127561,127562],{"class":168},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[99,127564,127565],{"class":101,"line":1206},[99,127566,127567],{"class":168},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[99,127569,127570],{"class":101,"line":1297},[99,127571,127572],{"class":168},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[70,127574,127576],{"id":127575},"_722-快速生成css","7.2.2 快速生成css",[14,127578,127579],{},"简写开头",[14,127581,127582],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[41,127584,127586],{"id":127585},"_73-css复合选择器","7.3 css复合选择器",[70,127588,127590],{"id":127589},"_731-后代选择器","7.3.1 后代选择器",[90,127592,127594],{"className":126533,"code":127593,"language":126535,"meta":21,"style":21},".parent .child {\n  color: blue;\n}\n",[96,127595,127596,127606,127616],{"__ignoreMap":21},[99,127597,127598,127601,127604],{"class":101,"line":102},[99,127599,127600],{"class":1949},".parent",[99,127602,127603],{"class":1949}," .child",[99,127605,15559],{"class":109},[99,127607,127608,127610,127612,127614],{"class":101,"line":22},[99,127609,70886],{"class":158},[99,127611,51418],{"class":109},[99,127613,127309],{"class":158},[99,127615,1276],{"class":109},[99,127617,127618],{"class":101,"line":1165},[99,127619,1551],{"class":109},[14,127621,127622],{},"元素1 元素2 {样式声明}",[14,127624,127625],{},[259,127626,127627],{},"注意点:",[14,127629,127630],{},"①元素1和元素2中间用空格隔开",[14,127632,127633],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127635,127636],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127638,127639],{},"④元素1和元素2可以是任意基础选择器",[70,127641,127643],{"id":127642},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127645,127646],{},[259,127647,127627],{},[14,127649,127650],{},"①元素1和元素2中间用大于号隔开",[14,127652,127633],{},[14,127654,127655],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[70,127657,127659],{"id":127658},"_733-并集选择器","7.3.3 并集选择器",[14,127661,127662],{},"元素1，元素2 {样式声明}",[14,127664,127665],{},[259,127666,127627],{},[14,127668,127669],{},"①元素1和元素2中间用逗号隔开",[14,127671,127672],{},"②逗号可以理解为和的意思",[14,127674,127675],{},"③并集选择器通常用于集体声明",[70,127677,127679],{"id":127678},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127681,127682],{},[259,127683,127627],{},[14,127685,127686,127687,127689],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68986,127688],{},"－:visited－:hover－:active。",[14,127691,127692,127693,127696,127697,25729],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127694,127695],"hover",{}," 、 ",[127698,127699],"first-child",{},[14,127701,127702],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127704,127705],{},"link对没访问的进行设置",[14,127707,127708],{},"vistied对已访问的进行改变",[14,127710,127711],{},"hover鼠标经过就会变",[14,127713,127714],{},"active常按(点)就会变",[90,127716,127718],{"className":126533,"code":127717,"language":126535,"meta":21,"style":21},"\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",[96,127719,127720,127725,127734,127744,127754,127758,127767,127778,127782,127790,127800,127810,127814,127823,127834],{"__ignoreMap":21},[99,127721,127722],{"class":101,"line":102},[99,127723,127724],{"class":168},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[99,127726,127727,127729,127732],{"class":101,"line":22},[99,127728,348],{"class":51281},[99,127730,127731],{"class":1949},":link",[99,127733,15559],{"class":109},[99,127735,127736,127738,127740,127742],{"class":101,"line":1165},[99,127737,70886],{"class":158},[99,127739,51418],{"class":109},[99,127741,62350],{"class":158},[99,127743,1276],{"class":109},[99,127745,127746,127748,127750,127752],{"class":101,"line":1180},[99,127747,70483],{"class":158},[99,127749,51418],{"class":109},[99,127751,54718],{"class":158},[99,127753,1276],{"class":109},[99,127755,127756],{"class":101,"line":1186},[99,127757,1551],{"class":109},[99,127759,127760,127762,127765],{"class":101,"line":1200},[99,127761,348],{"class":51281},[99,127763,127764],{"class":1949},":visited",[99,127766,15559],{"class":109},[99,127768,127769,127771,127773,127776],{"class":101,"line":1206},[99,127770,70886],{"class":158},[99,127772,51418],{"class":109},[99,127774,127775],{"class":158},"purple",[99,127777,1276],{"class":109},[99,127779,127780],{"class":101,"line":1297},[99,127781,1551],{"class":109},[99,127783,127784,127786,127788],{"class":101,"line":1303},[99,127785,348],{"class":51281},[99,127787,60921],{"class":1949},[99,127789,15559],{"class":109},[99,127791,127792,127794,127796,127798],{"class":101,"line":1315},[99,127793,70886],{"class":158},[99,127795,51418],{"class":109},[99,127797,54870],{"class":158},[99,127799,1276],{"class":109},[99,127801,127802,127804,127806,127808],{"class":101,"line":1598},[99,127803,70483],{"class":158},[99,127805,51418],{"class":109},[99,127807,127147],{"class":158},[99,127809,1276],{"class":109},[99,127811,127812],{"class":101,"line":1603},[99,127813,1551],{"class":109},[99,127815,127816,127818,127821],{"class":101,"line":1609},[99,127817,348],{"class":51281},[99,127819,127820],{"class":1949},":active",[99,127822,15559],{"class":109},[99,127824,127825,127827,127829,127832],{"class":101,"line":1614},[99,127826,70886],{"class":158},[99,127828,51418],{"class":109},[99,127830,127831],{"class":158},"green",[99,127833,1276],{"class":109},[99,127835,127836],{"class":101,"line":1628},[99,127837,1551],{"class":109},[70,127839,127841,127842,127845],{"id":127840},"_735-伪类选择器","7.3.5 ",[127843,127844],"focus",{},"伪类选择器",[14,127847,127848,127850,127851,127853],{},[127843,127849],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[96,127852,126594],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[90,127855,127857],{"className":126533,"code":127856,"language":126535,"meta":21,"style":21},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[96,127858,127859,127867,127878,127888],{"__ignoreMap":21},[99,127860,127861,127863,127865],{"class":101,"line":102},[99,127862,53802],{"class":51281},[99,127864,61881],{"class":1949},[99,127866,15559],{"class":109},[99,127868,127869,127872,127874,127876],{"class":101,"line":22},[99,127870,127871],{"class":158},"  border-color",[99,127873,51418],{"class":109},[99,127875,54870],{"class":158},[99,127877,1276],{"class":109},[99,127879,127880,127882,127884,127886],{"class":101,"line":1165},[99,127881,70779],{"class":158},[99,127883,51418],{"class":109},[99,127885,54718],{"class":158},[99,127887,1276],{"class":109},[99,127889,127890],{"class":101,"line":1180},[99,127891,1551],{"class":109},[5113,127893,127894],{},"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":21,"searchDepth":22,"depth":22,"links":127896},[127897,127902,127906],{"id":127272,"depth":22,"text":127273,"children":127898},[127899,127900,127901],{"id":127276,"depth":1165,"text":127277},{"id":127360,"depth":1165,"text":127361},{"id":127408,"depth":1165,"text":127409},{"id":127498,"depth":22,"text":127499,"children":127903},[127904,127905],{"id":127502,"depth":1165,"text":127503},{"id":127575,"depth":1165,"text":127576},{"id":127585,"depth":22,"text":127586,"children":127907},[127908,127909,127910,127911,127912],{"id":127589,"depth":1165,"text":127590},{"id":127642,"depth":1165,"text":127643},{"id":127658,"depth":1165,"text":127659},{"id":127678,"depth":1165,"text":127679},{"id":127840,"depth":1165,"text":127913},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127264,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127920,"title":127921,"body":127922,"description":23364,"extension":24,"meta":129845,"navigation":26,"path":129846,"seo":129847,"stem":129848,"__hash__":129849},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127923,"toc":129819},[127924,127927,127931,127940,127944,127970,127975,127978,127981,127984,127987,127991,127994,128004,128012,128016,128051,128056,128059,128062,128065,128068,128072,128075,128084,128088,128101,128106,128109,128112,128115,128119,128122,128126,128129,128184,128187,128218,128221,128275,128279,128282,128448,128571,128574,128577,128580,128583,128587,128590,128594,128597,128600,128604,128607,128638,128665,128693,128696,128700,128726,128769,128773,128867,128870,128897,128900,128903,128906,128909,128912,128915,128918,128921,128924,128928,128985,129012,129016,129064,129068,129109,129111,129114,129117,129120,129123,129127,129219,129222,129225,129228,129232,129355,129556,129560,129564,129567,129570,129573,129577,129580,129583,129608,129611,129614,129617,129620,129623,129627,129635,129697,129700,129758,129761,129764,129767,129770,129773,129776,129779,129816],[10,127925,127921],{"id":127926},"_8-css显示模式与背景特性",[41,127928,127930],{"id":127929},"_81-css元素显示模式","8.1 css元素显示模式",[14,127932,127933,127934,127936,127937,127939],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[96,127935,126144],{},"自己占一行，比如一行可以放多个",[96,127938,126147],{},"，HTML 元素一般分为块元素和行内元素两种类型",[70,127941,127943],{"id":127942},"_811-块元素","8.1.1 块元素",[14,127945,127946,127947,127949,127950,322,127953,322,127955,322,127957,322,127960,322,127963,127966,127967,127969],{},"常见的块元素有",[96,127948,126048],{},"~",[96,127951,127952],{},"\u003Ch6>",[96,127954,126074],{},[96,127956,126144],{},[96,127958,127959],{},"\u003Cul>",[96,127961,127962],{},"\u003Col>",[96,127964,127965],{},"\u003Cli>","等，其中 ",[96,127968,126144],{}," 标签是最典型的块元素",[14,127971,127972],{},[259,127973,127974],{},"块级元素的特点：",[14,127976,127977],{},"① 比较霸道，自己独占一行。",[14,127979,127980],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127982,127983],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,127985,127986],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,127988,127989],{},[259,127990,139],{},[14,127992,127993],{},"①文字类的元素内不能使用块级元素",[14,127995,77230,127996,127998,127999,128001,128002],{},[96,127997,126074],{}," 标签主要用于存放文字，因此 ",[96,128000,126074],{}," 里面不能放块级元素，特别是不能放",[96,128003,126144],{},[14,128005,128006,128007,127949,128009,128011],{},"⑥同理， ",[96,128008,126048],{},[96,128010,127952],{},"等都是文字类块级标签，里面也不能放其他块级元素",[70,128013,128015],{"id":128014},"_812-行内元素","8.1.2 行内元素",[14,128017,128018,128019,322,128021,322,128024,322,128027,322,128030,322,128033,322,128036,322,128039,322,128042,322,128045,128047,128048,128050],{},"常见的行内元素有 ",[96,128020,126306],{},[96,128022,128023],{},"\u003Cstrong>",[96,128025,128026],{},"\u003Cb>",[96,128028,128029],{},"\u003Cem>",[96,128031,128032],{},"\u003Ci>",[96,128034,128035],{},"\u003Cdel>",[96,128037,128038],{},"\u003Cs>",[96,128040,128041],{},"\u003Cins>",[96,128043,128044],{},"\u003Cu>",[96,128046,126147],{}," 等，其中 ",[96,128049,126147],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128052,128053],{},[259,128054,128055],{},"特点：",[14,128057,128058],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128060,128061],{},"② 高、宽直接设置是无效的。",[14,128063,128064],{},"③ 默认宽度就是它本身内容的宽度。",[14,128066,128067],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128069,128070],{},[259,128071,139],{},[14,128073,128074],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128076,128077,128078,128080,128081,128083],{},"②特殊情况链接 ",[96,128079,126306],{}," 里面可以放块级元素，但是给 ",[96,128082,126306],{}," 转换一下块级模式最安全",[70,128085,128087],{"id":128086},"_813-行内块元素","8.1.3 行内块元素",[14,128089,128090,128091,322,128094,322,128097,128100],{},"在行内元素中有几个特殊的标签 —— ",[96,128092,128093],{},"\u003Cimg \u002F>",[96,128095,128096],{},"\u003Cinput \u002F>",[96,128098,128099],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128102,128103],{},[259,128104,128105],{},"行内块元素的特点：",[14,128107,128108],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128110,128111],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128113,128114],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[70,128116,128118],{"id":128117},"_814-总结","8.1.4 总结",[1448,128120],{"style":126389,"src":128121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[70,128123,128125],{"id":128124},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128127,128128],{},"①转换为块元素：display:block;",[90,128130,128132],{"className":126533,"code":128131,"language":126535,"meta":21,"style":21},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[96,128133,128134,128139,128145,128156,128168,128180],{"__ignoreMap":21},[99,128135,128136],{"class":101,"line":102},[99,128137,128138],{"class":168},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[99,128140,128141,128143],{"class":101,"line":22},[99,128142,348],{"class":51281},[99,128144,15559],{"class":109},[99,128146,128147,128150,128152,128154],{"class":101,"line":1165},[99,128148,128149],{"class":158},"  display",[99,128151,51418],{"class":109},[99,128153,60850],{"class":158},[99,128155,1276],{"class":109},[99,128157,128158,128160,128162,128164,128166],{"class":101,"line":1180},[99,128159,70549],{"class":158},[99,128161,51418],{"class":109},[99,128163,421],{"class":158},[99,128165,51473],{"class":105},[99,128167,1276],{"class":109},[99,128169,128170,128172,128174,128176,128178],{"class":101,"line":1186},[99,128171,70769],{"class":158},[99,128173,51418],{"class":109},[99,128175,511],{"class":158},[99,128177,51473],{"class":105},[99,128179,1276],{"class":109},[99,128181,128182],{"class":101,"line":1200},[99,128183,1551],{"class":109},[14,128185,128186],{},"②转换为行内元素：display:inline;",[90,128188,128190],{"className":126533,"code":128189,"language":126535,"meta":21,"style":21},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[96,128191,128192,128197,128203,128214],{"__ignoreMap":21},[99,128193,128194],{"class":101,"line":102},[99,128195,128196],{"class":168},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[99,128198,128199,128201],{"class":101,"line":22},[99,128200,51592],{"class":51281},[99,128202,15559],{"class":109},[99,128204,128205,128207,128209,128212],{"class":101,"line":1165},[99,128206,128149],{"class":158},[99,128208,51418],{"class":109},[99,128210,128211],{"class":158},"inline",[99,128213,1276],{"class":109},[99,128215,128216],{"class":101,"line":1180},[99,128217,1551],{"class":109},[14,128219,128220],{},"③转换为行内块：display:inline-block;",[90,128222,128224],{"className":126533,"code":128223,"language":126535,"meta":21,"style":21},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[96,128225,128226,128231,128237,128247,128259,128271],{"__ignoreMap":21},[99,128227,128228],{"class":101,"line":102},[99,128229,128230],{"class":168},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[99,128232,128233,128235],{"class":101,"line":22},[99,128234,99],{"class":51281},[99,128236,15559],{"class":109},[99,128238,128239,128241,128243,128245],{"class":101,"line":1165},[99,128240,128149],{"class":158},[99,128242,51418],{"class":109},[99,128244,72364],{"class":158},[99,128246,1276],{"class":109},[99,128248,128249,128251,128253,128255,128257],{"class":101,"line":1180},[99,128250,70549],{"class":158},[99,128252,51418],{"class":109},[99,128254,722],{"class":158},[99,128256,51473],{"class":105},[99,128258,1276],{"class":109},[99,128260,128261,128263,128265,128267,128269],{"class":101,"line":1186},[99,128262,70769],{"class":158},[99,128264,51418],{"class":109},[99,128266,1061],{"class":158},[99,128268,51473],{"class":105},[99,128270,1276],{"class":109},[99,128272,128273],{"class":101,"line":1200},[99,128274,1551],{"class":109},[70,128276,128278],{"id":128277},"_816-小米侧边栏","8.1.6 小米侧边栏",[1448,128280],{"style":126389,"src":128281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[90,128283,128285],{"className":127280,"code":128284,"language":127282,"meta":21,"style":21},"\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",[96,128286,128287,128292,128307,128326,128345,128364,128383,128402,128421,128440],{"__ignoreMap":21},[99,128288,128289],{"class":101,"line":102},[99,128290,128291],{"class":168},"\u003C!-- 小米侧边栏案例 -->\n",[99,128293,128294,128296,128298,128300,128302,128305],{"class":101,"line":22},[99,128295,1020],{"class":109},[99,128297,51592],{"class":51281},[99,128299,53467],{"class":1949},[99,128301,155],{"class":109},[99,128303,128304],{"class":214},"\"sidebar\"",[99,128306,51288],{"class":109},[99,128308,128309,128311,128313,128315,128317,128319,128322,128324],{"class":101,"line":1165},[99,128310,52125],{"class":109},[99,128312,348],{"class":51281},[99,128314,61038],{"class":1949},[99,128316,155],{"class":109},[99,128318,61043],{"class":214},[99,128320,128321],{"class":109},">手机 电话卡\u003C\u002F",[99,128323,348],{"class":51281},[99,128325,51288],{"class":109},[99,128327,128328,128330,128332,128334,128336,128338,128341,128343],{"class":101,"line":1180},[99,128329,52125],{"class":109},[99,128331,348],{"class":51281},[99,128333,61038],{"class":1949},[99,128335,155],{"class":109},[99,128337,61043],{"class":214},[99,128339,128340],{"class":109},">电视 盒子\u003C\u002F",[99,128342,348],{"class":51281},[99,128344,51288],{"class":109},[99,128346,128347,128349,128351,128353,128355,128357,128360,128362],{"class":101,"line":1186},[99,128348,52125],{"class":109},[99,128350,348],{"class":51281},[99,128352,61038],{"class":1949},[99,128354,155],{"class":109},[99,128356,61043],{"class":214},[99,128358,128359],{"class":109},">笔记本 平板\u003C\u002F",[99,128361,348],{"class":51281},[99,128363,51288],{"class":109},[99,128365,128366,128368,128370,128372,128374,128376,128379,128381],{"class":101,"line":1200},[99,128367,52125],{"class":109},[99,128369,348],{"class":51281},[99,128371,61038],{"class":1949},[99,128373,155],{"class":109},[99,128375,61043],{"class":214},[99,128377,128378],{"class":109},">出行 穿戴\u003C\u002F",[99,128380,348],{"class":51281},[99,128382,51288],{"class":109},[99,128384,128385,128387,128389,128391,128393,128395,128398,128400],{"class":101,"line":1206},[99,128386,52125],{"class":109},[99,128388,348],{"class":51281},[99,128390,61038],{"class":1949},[99,128392,155],{"class":109},[99,128394,61043],{"class":214},[99,128396,128397],{"class":109},">智能 路由器\u003C\u002F",[99,128399,348],{"class":51281},[99,128401,51288],{"class":109},[99,128403,128404,128406,128408,128410,128412,128414,128417,128419],{"class":101,"line":1297},[99,128405,52125],{"class":109},[99,128407,348],{"class":51281},[99,128409,61038],{"class":1949},[99,128411,155],{"class":109},[99,128413,61043],{"class":214},[99,128415,128416],{"class":109},">健康 儿童\u003C\u002F",[99,128418,348],{"class":51281},[99,128420,51288],{"class":109},[99,128422,128423,128425,128427,128429,128431,128433,128436,128438],{"class":101,"line":1303},[99,128424,52125],{"class":109},[99,128426,348],{"class":51281},[99,128428,61038],{"class":1949},[99,128430,155],{"class":109},[99,128432,61043],{"class":214},[99,128434,128435],{"class":109},">耳机 音响\u003C\u002F",[99,128437,348],{"class":51281},[99,128439,51288],{"class":109},[99,128441,128442,128444,128446],{"class":101,"line":1315},[99,128443,51766],{"class":109},[99,128445,51592],{"class":51281},[99,128447,51288],{"class":109},[90,128449,128451],{"className":126533,"code":128450,"language":126535,"meta":21,"style":21},".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",[96,128452,128453,128462,128472,128485,128497,128509,128521,128531,128542,128546,128556,128567],{"__ignoreMap":21},[99,128454,128455,128458,128460],{"class":101,"line":102},[99,128456,128457],{"class":1949},".sidebar",[99,128459,1384],{"class":51281},[99,128461,15559],{"class":109},[99,128463,128464,128466,128468,128470],{"class":101,"line":22},[99,128465,128149],{"class":158},[99,128467,51418],{"class":109},[99,128469,60850],{"class":158},[99,128471,1276],{"class":109},[99,128473,128474,128476,128478,128481,128483],{"class":101,"line":1165},[99,128475,70549],{"class":158},[99,128477,51418],{"class":109},[99,128479,128480],{"class":158},"234",[99,128482,51473],{"class":105},[99,128484,1276],{"class":109},[99,128486,128487,128489,128491,128493,128495],{"class":101,"line":1180},[99,128488,70769],{"class":158},[99,128490,51418],{"class":109},[99,128492,562],{"class":158},[99,128494,51473],{"class":105},[99,128496,1276],{"class":109},[99,128498,128499,128501,128503,128505,128507],{"class":101,"line":1186},[99,128500,127217],{"class":158},[99,128502,51418],{"class":109},[99,128504,562],{"class":158},[99,128506,51473],{"class":105},[99,128508,1276],{"class":109},[99,128510,128511,128513,128515,128517,128519],{"class":101,"line":1200},[99,128512,70804],{"class":158},[99,128514,51418],{"class":109},[99,128516,1061],{"class":158},[99,128518,51473],{"class":105},[99,128520,1276],{"class":109},[99,128522,128523,128525,128527,128529],{"class":101,"line":1206},[99,128524,70886],{"class":158},[99,128526,51418],{"class":109},[99,128528,60823],{"class":158},[99,128530,1276],{"class":109},[99,128532,128533,128535,128537,128540],{"class":101,"line":1297},[99,128534,70859],{"class":158},[99,128536,51418],{"class":109},[99,128538,128539],{"class":158},"#55585a",[99,128541,1276],{"class":109},[99,128543,128544],{"class":101,"line":1303},[99,128545,1551],{"class":109},[99,128547,128548,128550,128552,128554],{"class":101,"line":1315},[99,128549,128457],{"class":1949},[99,128551,1384],{"class":51281},[99,128553,60921],{"class":1949},[99,128555,15559],{"class":109},[99,128557,128558,128560,128562,128565],{"class":101,"line":1598},[99,128559,70859],{"class":158},[99,128561,51418],{"class":109},[99,128563,128564],{"class":158},"#ff6700",[99,128566,1276],{"class":109},[99,128568,128569],{"class":101,"line":1603},[99,128570,1551],{"class":109},[1448,128572],{"style":126389,"src":128573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128575,128576],{},"行高=盒子高度：实现文字的垂直居中",[14,128578,128579],{},"原理讲解：",[1448,128581],{"style":126389,"src":128582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[41,128584,128586],{"id":128585},"_82-css背景","8.2 css背景",[14,128588,128589],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[70,128591,128593],{"id":128592},"_821-背景颜色","8.2.1 背景颜色",[14,128595,128596],{},"background-color:颜色值;",[14,128598,128599],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[70,128601,128603],{"id":128602},"_822-背景图片","8.2.2 背景图片",[14,128605,128606],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[90,128608,128610],{"className":126533,"code":128609,"language":126535,"meta":21,"style":21},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[96,128611,128612,128618,128634],{"__ignoreMap":21},[99,128613,128614,128616],{"class":101,"line":102},[99,128615,51592],{"class":51281},[99,128617,15559],{"class":109},[99,128619,128620,128623,128625,128627,128629,128632],{"class":101,"line":22},[99,128621,128622],{"class":158},"  background-image",[99,128624,51418],{"class":109},[99,128626,61707],{"class":158},[99,128628,110],{"class":109},[99,128630,128631],{"class":5203},"images\u002Fbg.png",[99,128633,2705],{"class":109},[99,128635,128636],{"class":101,"line":1165},[99,128637,1551],{"class":109},[247,128639,128640,128649],{},[250,128641,128642],{},[253,128643,128644,128647],{},[256,128645,128646],{"align":23724},"参数值",[256,128648,102677],{"align":23724},[294,128650,128651,128658],{},[253,128652,128653,128655],{},[299,128654,54718],{"align":23724},[299,128656,128657],{"align":23724},"无背景图（默认的）",[253,128659,128660,128662],{},[299,128661,61707],{"align":23724},[299,128663,128664],{"align":23724},"使用绝对或相对地址指定背景图像",[90,128666,128667],{"className":126533,"code":128609,"language":126535,"meta":21,"style":21},[96,128668,128669,128675,128689],{"__ignoreMap":21},[99,128670,128671,128673],{"class":101,"line":102},[99,128672,51592],{"class":51281},[99,128674,15559],{"class":109},[99,128676,128677,128679,128681,128683,128685,128687],{"class":101,"line":22},[99,128678,128622],{"class":158},[99,128680,51418],{"class":109},[99,128682,61707],{"class":158},[99,128684,110],{"class":109},[99,128686,128631],{"class":5203},[99,128688,2705],{"class":109},[99,128690,128691],{"class":101,"line":1165},[99,128692,1551],{"class":109},[14,128694,128695],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[70,128697,128699],{"id":128698},"_823-背景平铺","8.2.3 背景平铺",[90,128701,128703],{"className":126533,"code":128702,"language":126535,"meta":21,"style":21},"div {\n  background-repeat: no-repeat;\n}\n",[96,128704,128705,128711,128722],{"__ignoreMap":21},[99,128706,128707,128709],{"class":101,"line":102},[99,128708,51592],{"class":51281},[99,128710,15559],{"class":109},[99,128712,128713,128716,128718,128720],{"class":101,"line":22},[99,128714,128715],{"class":158},"  background-repeat",[99,128717,51418],{"class":109},[99,128719,61717],{"class":158},[99,128721,1276],{"class":109},[99,128723,128724],{"class":101,"line":1165},[99,128725,1551],{"class":109},[247,128727,128728,128736],{},[250,128729,128730],{},[253,128731,128732,128734],{},[256,128733,128646],{"align":23724},[256,128735,102677],{"align":23724},[294,128737,128738,128746,128753,128761],{},[253,128739,128740,128743],{},[299,128741,128742],{"align":23724},"repeat",[299,128744,128745],{"align":23724},"背景图像在纵向和横向上平铺（默认的）",[253,128747,128748,128750],{},[299,128749,61717],{"align":23724},[299,128751,128752],{"align":23724},"背景图像不平铺",[253,128754,128755,128758],{},[299,128756,128757],{"align":23724},"repeat-x",[299,128759,128760],{"align":23724},"背景图像在横向上平铺",[253,128762,128763,128766],{},[299,128764,128765],{"align":23724},"repeat-y",[299,128767,128768],{"align":23724},"背景图像在纵向平铺",[70,128770,128772],{"id":128771},"_824-背景图片位置","8.2.4 背景图片位置",[90,128774,128776],{"className":126533,"code":128775,"language":126535,"meta":21,"style":21},"\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",[96,128777,128778,128783,128789,128803,128807,128812,128818,128834,128838,128843,128849,128863],{"__ignoreMap":21},[99,128779,128780],{"class":101,"line":102},[99,128781,128782],{"class":168},"\u002F* 方位名词 *\u002F\n",[99,128784,128785,128787],{"class":101,"line":22},[99,128786,51592],{"class":51281},[99,128788,15559],{"class":109},[99,128790,128791,128794,128796,128798,128801],{"class":101,"line":1165},[99,128792,128793],{"class":158},"  background-position",[99,128795,51418],{"class":109},[99,128797,51573],{"class":158},[99,128799,128800],{"class":158}," top",[99,128802,1276],{"class":109},[99,128804,128805],{"class":101,"line":1180},[99,128806,1551],{"class":109},[99,128808,128809],{"class":101,"line":1186},[99,128810,128811],{"class":168},"\u002F* 精确单位 *\u002F\n",[99,128813,128814,128816],{"class":101,"line":1200},[99,128815,51592],{"class":51281},[99,128817,15559],{"class":109},[99,128819,128820,128822,128824,128826,128828,128830,128832],{"class":101,"line":1206},[99,128821,128793],{"class":158},[99,128823,51418],{"class":109},[99,128825,810],{"class":158},[99,128827,51473],{"class":105},[99,128829,57485],{"class":158},[99,128831,51473],{"class":105},[99,128833,1276],{"class":109},[99,128835,128836],{"class":101,"line":1297},[99,128837,1551],{"class":109},[99,128839,128840],{"class":101,"line":1303},[99,128841,128842],{"class":168},"\u002F* 混合单位 *\u002F\n",[99,128844,128845,128847],{"class":101,"line":1315},[99,128846,51592],{"class":51281},[99,128848,15559],{"class":109},[99,128850,128851,128853,128855,128857,128859,128861],{"class":101,"line":1598},[99,128852,128793],{"class":158},[99,128854,51418],{"class":109},[99,128856,810],{"class":158},[99,128858,51473],{"class":105},[99,128860,17131],{"class":158},[99,128862,1276],{"class":109},[99,128864,128865],{"class":101,"line":1603},[99,128866,1551],{"class":109},[14,128868,128869],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[247,128871,128872,128880],{},[250,128873,128874],{},[253,128875,128876,128878],{},[256,128877,128646],{"align":23724},[256,128879,25858],{"align":23724},[294,128881,128882,128889],{},[253,128883,128884,128886],{},[299,128885,51949],{"align":23724},[299,128887,128888],{"align":23724},"百分数|由浮点数和单位标识符组成的长度值",[253,128890,128891,128894],{},[299,128892,128893],{"align":23724},"position",[299,128895,128896],{"align":23724},"top|center|bottom|left|center|right 方位名词",[14,128898,128899],{},"其他说明：",[14,128901,128902],{},"①参数是方位名词",[14,128904,128905],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128907,128908],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128910,128911],{},"②参数是精确单位",[14,128913,128914],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128916,128917],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128919,128920],{},"③参数是混合单位",[14,128922,128923],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[70,128925,128927],{"id":128926},"_825-背景图片固定","8.2.5 背景图片固定",[90,128929,128931],{"className":126533,"code":128930,"language":126535,"meta":21,"style":21},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[96,128932,128933,128938,128944,128956,128960,128965,128971,128981],{"__ignoreMap":21},[99,128934,128935],{"class":101,"line":102},[99,128936,128937],{"class":168},"\u002F* 背景滚动（默认） *\u002F\n",[99,128939,128940,128942],{"class":101,"line":22},[99,128941,51592],{"class":51281},[99,128943,15559],{"class":109},[99,128945,128946,128949,128951,128954],{"class":101,"line":1165},[99,128947,128948],{"class":158},"  background-attachment",[99,128950,51418],{"class":109},[99,128952,128953],{"class":158},"scroll",[99,128955,1276],{"class":109},[99,128957,128958],{"class":101,"line":1180},[99,128959,1551],{"class":109},[99,128961,128962],{"class":101,"line":1186},[99,128963,128964],{"class":168},"\u002F* 背景固定 *\u002F\n",[99,128966,128967,128969],{"class":101,"line":1200},[99,128968,51592],{"class":51281},[99,128970,15559],{"class":109},[99,128972,128973,128975,128977,128979],{"class":101,"line":1206},[99,128974,128948],{"class":158},[99,128976,51418],{"class":109},[99,128978,86214],{"class":158},[99,128980,1276],{"class":109},[99,128982,128983],{"class":101,"line":1297},[99,128984,1551],{"class":109},[247,128986,128987,128996],{},[250,128988,128989],{},[253,128990,128991,128994],{},[256,128992,128993],{"align":23724},"参数",[256,128995,102677],{"align":23724},[294,128997,128998,129005],{},[253,128999,129000,129002],{},[299,129001,128953],{"align":23724},[299,129003,129004],{"align":23724},"背景图像是随对象内容滚动",[253,129006,129007,129009],{},[299,129008,86214],{"align":23724},[299,129010,129011],{"align":23724},"背景图像固定",[70,129013,129015],{"id":129014},"_826-背景样式合写","8.2.6 背景样式合写",[90,129017,129019],{"className":126533,"code":129018,"language":126535,"meta":21,"style":21},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[96,129020,129021,129026,129032,129060],{"__ignoreMap":21},[99,129022,129023],{"class":101,"line":102},[99,129024,129025],{"class":168},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[99,129027,129028,129030],{"class":101,"line":22},[99,129029,51592],{"class":51281},[99,129031,15559],{"class":109},[99,129033,129034,129036,129038,129040,129043,129045,129047,129049,129051,129054,129056,129058],{"class":101,"line":1165},[99,129035,70592],{"class":158},[99,129037,51418],{"class":109},[99,129039,60823],{"class":158},[99,129041,129042],{"class":158}," url",[99,129044,110],{"class":109},[99,129046,128631],{"class":5203},[99,129048,13701],{"class":109},[99,129050,61717],{"class":158},[99,129052,129053],{"class":158}," fixed",[99,129055,17131],{"class":158},[99,129057,128800],{"class":158},[99,129059,1276],{"class":109},[99,129061,129062],{"class":101,"line":1180},[99,129063,1551],{"class":109},[70,129065,129067],{"id":129066},"_827-背景色半透明","8.2.7 背景色半透明",[90,129069,129071],{"className":126533,"code":129070,"language":126535,"meta":21,"style":21},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[96,129072,129073,129079,129105],{"__ignoreMap":21},[99,129074,129075,129077],{"class":101,"line":102},[99,129076,51592],{"class":51281},[99,129078,15559],{"class":109},[99,129080,129081,129083,129085,129087,129089,129091,129093,129095,129097,129099,129101,129103],{"class":101,"line":22},[99,129082,70592],{"class":158},[99,129084,51418],{"class":109},[99,129086,55091],{"class":158},[99,129088,110],{"class":109},[99,129090,301],{"class":158},[99,129092,12422],{"class":109},[99,129094,301],{"class":158},[99,129096,12422],{"class":109},[99,129098,301],{"class":158},[99,129100,12422],{"class":109},[99,129102,100502],{"class":158},[99,129104,2705],{"class":109},[99,129106,129107],{"class":101,"line":1165},[99,129108,1551],{"class":109},[14,129110,99377],{},[14,129112,129113],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129115,129116],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129118,129119],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129121,129122],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[70,129124,129126],{"id":129125},"_828-总结","8.2.8 总结",[247,129128,129129,129140],{},[250,129130,129131],{},[253,129132,129133,129136,129138],{},[256,129134,129135],{"align":23724},"属性",[256,129137,102677],{"align":23724},[256,129139,262],{"align":23724},[294,129141,129142,129153,129164,129175,129186,129197,129208],{},[253,129143,129144,129147,129150],{},[299,129145,129146],{"align":23724},"background-color",[299,129148,129149],{"align":23724},"背景颜色",[299,129151,129152],{"align":23724},"预定义的颜色值\u002F十六进制\u002FRGB代码",[253,129154,129155,129158,129161],{},[299,129156,129157],{"align":23724},"background-image",[299,129159,129160],{"align":23724},"背景图片",[299,129162,129163],{"align":23724},"url(图片路径)",[253,129165,129166,129169,129172],{},[299,129167,129168],{"align":23724},"background-repeat",[299,129170,129171],{"align":23724},"是否平铺",[299,129173,129174],{"align":23724},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[253,129176,129177,129180,129183],{},[299,129178,129179],{"align":23724},"background-position",[299,129181,129182],{"align":23724},"背景位置",[299,129184,129185],{"align":23724},"length\u002Fposition 分别是x和y坐标",[253,129187,129188,129191,129194],{},[299,129189,129190],{"align":23724},"background-attachment",[299,129192,129193],{"align":23724},"背景附着",[299,129195,129196],{"align":23724},"scroll(背景滚动) \u002Ffixed (背景固定)",[253,129198,129199,129202,129205],{},[299,129200,129201],{"align":23724},"背景简写",[299,129203,129204],{"align":23724},"书写更简单",[299,129206,129207],{"align":23724},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[253,129209,129210,129213,129216],{},[299,129211,129212],{"align":23724},"背景半透明",[299,129214,129215],{"align":23724},"背景颜色半透明",[299,129217,129218],{"align":23724},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129220,129221],{},"颜色渐变：",[1448,129223],{"style":126389,"src":129224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1448,129226],{"style":126389,"src":129227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[70,129229,129231],{"id":129230},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[90,129233,129235],{"className":127280,"code":129234,"language":127282,"meta":21,"style":21},"\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",[96,129236,129237,129252,129271,129290,129309,129328,129347],{"__ignoreMap":21},[99,129238,129239,129241,129243,129245,129247,129250],{"class":101,"line":102},[99,129240,1020],{"class":109},[99,129242,51592],{"class":51281},[99,129244,53467],{"class":1949},[99,129246,155],{"class":109},[99,129248,129249],{"class":214},"\"nav\"",[99,129251,51288],{"class":109},[99,129253,129254,129256,129258,129260,129262,129264,129267,129269],{"class":101,"line":22},[99,129255,52125],{"class":109},[99,129257,348],{"class":51281},[99,129259,61038],{"class":1949},[99,129261,155],{"class":109},[99,129263,61043],{"class":214},[99,129265,129266],{"class":109},">五彩导航1\u003C\u002F",[99,129268,348],{"class":51281},[99,129270,51288],{"class":109},[99,129272,129273,129275,129277,129279,129281,129283,129286,129288],{"class":101,"line":1165},[99,129274,52125],{"class":109},[99,129276,348],{"class":51281},[99,129278,61038],{"class":1949},[99,129280,155],{"class":109},[99,129282,61043],{"class":214},[99,129284,129285],{"class":109},">五彩导航2\u003C\u002F",[99,129287,348],{"class":51281},[99,129289,51288],{"class":109},[99,129291,129292,129294,129296,129298,129300,129302,129305,129307],{"class":101,"line":1180},[99,129293,52125],{"class":109},[99,129295,348],{"class":51281},[99,129297,61038],{"class":1949},[99,129299,155],{"class":109},[99,129301,61043],{"class":214},[99,129303,129304],{"class":109},">五彩导航3\u003C\u002F",[99,129306,348],{"class":51281},[99,129308,51288],{"class":109},[99,129310,129311,129313,129315,129317,129319,129321,129324,129326],{"class":101,"line":1186},[99,129312,52125],{"class":109},[99,129314,348],{"class":51281},[99,129316,61038],{"class":1949},[99,129318,155],{"class":109},[99,129320,61043],{"class":214},[99,129322,129323],{"class":109},">五彩导航4\u003C\u002F",[99,129325,348],{"class":51281},[99,129327,51288],{"class":109},[99,129329,129330,129332,129334,129336,129338,129340,129343,129345],{"class":101,"line":1200},[99,129331,52125],{"class":109},[99,129333,348],{"class":51281},[99,129335,61038],{"class":1949},[99,129337,155],{"class":109},[99,129339,61043],{"class":214},[99,129341,129342],{"class":109},">五彩导航5\u003C\u002F",[99,129344,348],{"class":51281},[99,129346,51288],{"class":109},[99,129348,129349,129351,129353],{"class":101,"line":1206},[99,129350,51766],{"class":109},[99,129352,51592],{"class":51281},[99,129354,51288],{"class":109},[90,129356,129358],{"className":126533,"code":129357,"language":126535,"meta":21,"style":21},".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",[96,129359,129360,129369,129379,129391,129403,129413,129425,129435,129439,129464,129487,129510,129533],{"__ignoreMap":21},[99,129361,129362,129365,129367],{"class":101,"line":102},[99,129363,129364],{"class":1949},".nav",[99,129366,1384],{"class":51281},[99,129368,15559],{"class":109},[99,129370,129371,129373,129375,129377],{"class":101,"line":22},[99,129372,128149],{"class":158},[99,129374,51418],{"class":109},[99,129376,72364],{"class":158},[99,129378,1276],{"class":109},[99,129380,129381,129383,129385,129387,129389],{"class":101,"line":1165},[99,129382,70549],{"class":158},[99,129384,51418],{"class":109},[99,129386,927],{"class":158},[99,129388,51473],{"class":105},[99,129390,1276],{"class":109},[99,129392,129393,129395,129397,129399,129401],{"class":101,"line":1180},[99,129394,70769],{"class":158},[99,129396,51418],{"class":109},[99,129398,966],{"class":158},[99,129400,51473],{"class":105},[99,129402,1276],{"class":109},[99,129404,129405,129407,129409,129411],{"class":101,"line":1186},[99,129406,70507],{"class":158},[99,129408,51418],{"class":109},[99,129410,51573],{"class":158},[99,129412,1276],{"class":109},[99,129414,129415,129417,129419,129421,129423],{"class":101,"line":1200},[99,129416,127217],{"class":158},[99,129418,51418],{"class":109},[99,129420,966],{"class":158},[99,129422,51473],{"class":105},[99,129424,1276],{"class":109},[99,129426,129427,129429,129431,129433],{"class":101,"line":1206},[99,129428,70886],{"class":158},[99,129430,51418],{"class":109},[99,129432,60823],{"class":158},[99,129434,1276],{"class":109},[99,129436,129437],{"class":101,"line":1297},[99,129438,1551],{"class":109},[99,129440,129441,129443,129445,129448,129450,129452,129455,129457,129459,129461],{"class":101,"line":1303},[99,129442,129364],{"class":1949},[99,129444,1384],{"class":51281},[99,129446,129447],{"class":1949},":nth-child",[99,129449,110],{"class":109},[99,129451,327],{"class":158},[99,129453,129454],{"class":109},") { ",[99,129456,129146],{"class":158},[99,129458,51418],{"class":109},[99,129460,128564],{"class":158},[99,129462,129463],{"class":109},"; }\n",[99,129465,129466,129468,129470,129472,129474,129476,129478,129480,129482,129485],{"class":101,"line":1315},[99,129467,129364],{"class":1949},[99,129469,1384],{"class":51281},[99,129471,129447],{"class":1949},[99,129473,110],{"class":109},[99,129475,187],{"class":158},[99,129477,129454],{"class":109},[99,129479,129146],{"class":158},[99,129481,51418],{"class":109},[99,129483,129484],{"class":158},"#ff0000",[99,129486,129463],{"class":109},[99,129488,129489,129491,129493,129495,129497,129499,129501,129503,129505,129508],{"class":101,"line":1598},[99,129490,129364],{"class":1949},[99,129492,1384],{"class":51281},[99,129494,129447],{"class":1949},[99,129496,110],{"class":109},[99,129498,181],{"class":158},[99,129500,129454],{"class":109},[99,129502,129146],{"class":158},[99,129504,51418],{"class":109},[99,129506,129507],{"class":158},"#00a4ff",[99,129509,129463],{"class":109},[99,129511,129512,129514,129516,129518,129520,129522,129524,129526,129528,129531],{"class":101,"line":1603},[99,129513,129364],{"class":1949},[99,129515,1384],{"class":51281},[99,129517,129447],{"class":1949},[99,129519,110],{"class":109},[99,129521,403],{"class":158},[99,129523,129454],{"class":109},[99,129525,129146],{"class":158},[99,129527,51418],{"class":109},[99,129529,129530],{"class":158},"#ff00ff",[99,129532,129463],{"class":109},[99,129534,129535,129537,129539,129541,129543,129545,129547,129549,129551,129554],{"class":101,"line":1609},[99,129536,129364],{"class":1949},[99,129538,1384],{"class":51281},[99,129540,129447],{"class":1949},[99,129542,110],{"class":109},[99,129544,429],{"class":158},[99,129546,129454],{"class":109},[99,129548,129146],{"class":158},[99,129550,51418],{"class":109},[99,129552,129553],{"class":158},"#00ff00",[99,129555,129463],{"class":109},[41,129557,129559],{"id":129558},"_83-css三大特性","8.3 css三大特性",[70,129561,129563],{"id":129562},"_831-层叠性","8.3.1 层叠性",[14,129565,129566],{},"为了解决样式冲突问题",[14,129568,129569],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129571,129572],{},"   ②样式不冲突，不会层叠",[70,129574,129576],{"id":129575},"_832-继承性","8.3.2 继承性",[14,129578,129579],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129581,129582],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[90,129584,129586],{"className":126533,"code":129585,"language":126535,"meta":21,"style":21},"p {\n  color: #333;\n}\n",[96,129587,129588,129594,129604],{"__ignoreMap":21},[99,129589,129590,129592],{"class":101,"line":102},[99,129591,14],{"class":51281},[99,129593,15559],{"class":109},[99,129595,129596,129598,129600,129602],{"class":101,"line":22},[99,129597,70886],{"class":158},[99,129599,51418],{"class":109},[99,129601,62350],{"class":158},[99,129603,1276],{"class":109},[99,129605,129606],{"class":101,"line":1165},[99,129607,1551],{"class":109},[1448,129609],{"style":126389,"src":129610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129612,129613],{},"解释：①行高可以跟单位也可以不跟单位",[14,129615,129616],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129618,129619],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129621,129622],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[70,129624,129626],{"id":129625},"_833-优先级","8.3.3 优先级",[53,129628,129629,129632],{},[56,129630,129631],{},"选择器相同，则执行层叠性",[56,129633,129634],{},"选择器不同，则根据选择器权重执行",[247,129636,129637,129647],{},[250,129638,129639],{},[253,129640,129641,129644],{},[256,129642,129643],{"align":23724},"选择器",[256,129645,129646],{"align":23724},"选择器权重",[294,129648,129649,129657,129665,129673,129681,129689],{},[253,129650,129651,129654],{},[299,129652,129653],{"align":23724},"继承 或者*",[299,129655,129656],{"align":23724},"0，0，0，0",[253,129658,129659,129662],{},[299,129660,129661],{"align":23724},"标签选择器",[299,129663,129664],{"align":23724},"0，0，0，1",[253,129666,129667,129670],{},[299,129668,129669],{"align":23724},"类选择器，伪类选择器",[299,129671,129672],{"align":23724},"0，0，1，0",[253,129674,129675,129678],{},[299,129676,129677],{"align":23724},"ID选择器",[299,129679,129680],{"align":23724},"0，1，0，0",[253,129682,129683,129686],{},[299,129684,129685],{"align":23724},"行内样式",[299,129687,129688],{"align":23724},"1，0，0，0",[253,129690,129691,129694],{},[299,129692,129693],{"align":23724},"！important",[299,129695,129696],{"align":23724},"无穷大",[14,129698,129699],{},"! important用法：",[90,129701,129703],{"className":126533,"code":129702,"language":126535,"meta":21,"style":21},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[96,129704,129705,129710,129716,129729,129733,129738,129744,129754],{"__ignoreMap":21},[99,129706,129707],{"class":101,"line":102},[99,129708,129709],{"class":168},"\u002F* !important 拥有最高优先级 *\u002F\n",[99,129711,129712,129714],{"class":101,"line":22},[99,129713,51592],{"class":51281},[99,129715,15559],{"class":109},[99,129717,129718,129720,129722,129724,129727],{"class":101,"line":1165},[99,129719,70886],{"class":158},[99,129721,51418],{"class":109},[99,129723,51626],{"class":158},[99,129725,129726],{"class":105}," !important",[99,129728,1276],{"class":109},[99,129730,129731],{"class":101,"line":1180},[99,129732,1551],{"class":109},[99,129734,129735],{"class":101,"line":1186},[99,129736,129737],{"class":168},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[99,129739,129740,129742],{"class":101,"line":1200},[99,129741,51592],{"class":51281},[99,129743,15559],{"class":109},[99,129745,129746,129748,129750,129752],{"class":101,"line":1206},[99,129747,70886],{"class":158},[99,129749,51418],{"class":109},[99,129751,57402],{"class":158},[99,129753,1276],{"class":109},[99,129755,129756],{"class":101,"line":1297},[99,129757,1551],{"class":109},[14,129759,129760],{},"优先级注意点：",[14,129762,129763],{},"①权重是有4组数字组成,但是不会有进位",[14,129765,129766],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129768,129769],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129771,129772],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129774,129775],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129777,129778],{},"⑥复合选择器",[247,129780,129781,129791],{},[250,129782,129783],{},[253,129784,129785,129788],{},[256,129786,129787],{"align":23724},"div ul li",[256,129789,129790],{"align":23724},"0,0,0,3",[294,129792,129793,129801,129809],{},[253,129794,129795,129798],{},[299,129796,129797],{"align":23724},".nav ul li",[299,129799,129800],{"align":23724},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[253,129802,129803,129806],{},[299,129804,129805],{"align":23724},"a:hover",[299,129807,129808],{"align":23724},"0,0,1,1",[253,129810,129811,129814],{},[299,129812,129813],{"align":23724},".nav a",[299,129815,129808],{"align":23724},[5113,129817,129818],{},"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":21,"searchDepth":22,"depth":22,"links":129820},[129821,129829,129840],{"id":127929,"depth":22,"text":127930,"children":129822},[129823,129824,129825,129826,129827,129828],{"id":127942,"depth":1165,"text":127943},{"id":128014,"depth":1165,"text":128015},{"id":128086,"depth":1165,"text":128087},{"id":128117,"depth":1165,"text":128118},{"id":128124,"depth":1165,"text":128125},{"id":128277,"depth":1165,"text":128278},{"id":128585,"depth":22,"text":128586,"children":129830},[129831,129832,129833,129834,129835,129836,129837,129838,129839],{"id":128592,"depth":1165,"text":128593},{"id":128602,"depth":1165,"text":128603},{"id":128698,"depth":1165,"text":128699},{"id":128771,"depth":1165,"text":128772},{"id":128926,"depth":1165,"text":128927},{"id":129014,"depth":1165,"text":129015},{"id":129066,"depth":1165,"text":129067},{"id":129125,"depth":1165,"text":129126},{"id":129230,"depth":1165,"text":129231},{"id":129558,"depth":22,"text":129559,"children":129841},[129842,129843,129844],{"id":129562,"depth":1165,"text":129563},{"id":129575,"depth":1165,"text":129576},{"id":129625,"depth":1165,"text":129626},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127921,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129851,"title":129852,"body":129853,"description":23364,"extension":24,"meta":131443,"navigation":26,"path":131444,"seo":131445,"stem":131446,"__hash__":131447},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129854,"toc":131422},[129855,129858,129862,129865,129868,129871,129874,129877,129880,129883,129887,129895,129932,129968,129971,129985,129990,130024,130027,130120,130125,130128,130158,130161,130166,130174,130178,130185,130231,130275,130280,130283,130286,130289,130292,130295,130298,130300,130303,130307,130312,130356,130361,130364,130367,130404,130409,130412,130415,130418,130421,130453,130456,130459,130462,130494,130497,130500,130503,130507,130510,130542,130545,130549,130569,130572,130580,130583,130587,130592,130595,130627,130632,130635,130673,130677,130682,130685,130688,130719,130722,130739,130744,130796,130856,130861,130915,130953,130957,130961,130964,130968,130976,130979,130981,130992,130997,131045,131079,131082,131085,131088,131091,131135,131138,131141,131144,131147,131150,131153,131197,131200,131203,131206,131209,131212,131215,131221,131224,131268,131271,131274,131277,131280,131283,131327,131330,131332,131335,131339,131343,131381,131385,131388,131391,131395,131403,131407,131410,131413,131416,131419],[10,129856,129852],{"id":129857},"_9-css盒模型浮动与切图",[41,129859,129861],{"id":129860},"_91-盒子模型","9.1 盒子模型",[14,129863,129864],{},"利用盒子来设计网页",[14,129866,129867],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129869,129870],{},"网页布局设置：",[14,129872,129873],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129875,129876],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129878,129879],{},"③往盒子里装内容",[1448,129881],{"style":126389,"src":129882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[70,129884,129886],{"id":129885},"_911-边框border","9.1.1 边框（border）",[53,129888,129889,129892],{},[56,129890,129891],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[56,129893,129894],{},"语法",[90,129896,129898],{"className":126533,"code":129897,"language":126535,"meta":21,"style":21},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[96,129899,129900,129905,129911,129928],{"__ignoreMap":21},[99,129901,129902],{"class":101,"line":102},[99,129903,129904],{"class":168},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[99,129906,129907,129909],{"class":101,"line":22},[99,129908,51592],{"class":51281},[99,129910,15559],{"class":109},[99,129912,129913,129915,129917,129919,129921,129923,129926],{"class":101,"line":1165},[99,129914,70877],{"class":158},[99,129916,51418],{"class":109},[99,129918,327],{"class":158},[99,129920,51473],{"class":105},[99,129922,51502],{"class":158},[99,129924,129925],{"class":158}," #ccc",[99,129927,1276],{"class":109},[99,129929,129930],{"class":101,"line":1180},[99,129931,1551],{"class":109},[247,129933,129934,129942],{},[250,129935,129936],{},[253,129937,129938,129940],{},[256,129939,129135],{"align":23724},[256,129941,102677],{"align":23724},[294,129943,129944,129952,129960],{},[253,129945,129946,129949],{},[299,129947,129948],{"align":23724},"border-width",[299,129950,129951],{"align":23724},"定义边框粗细，单位是px",[253,129953,129954,129957],{},[299,129955,129956],{"align":23724},"border-style",[299,129958,129959],{"align":23724},"边框的样式",[253,129961,129962,129965],{},[299,129963,129964],{"align":23724},"border-color",[299,129966,129967],{"align":23724},"边框的颜色",[14,129969,129970],{},"边框样式 border-style 可以设置如下值：",[1117,129972,129973,129976,129979,129982],{},[56,129974,129975],{},"none：没有边框即忽略所有边框的宽度（默认值）",[56,129977,129978],{},"solid：边框为单实线(最为常用的)",[56,129980,129981],{},"dashed：边框为虚线",[56,129983,129984],{},"dotted：边框为点线",[53,129986,129987],{"start":1165},[56,129988,129989],{},"边框的合写分写",[90,129991,129992],{"className":126533,"code":129897,"language":126535,"meta":21,"style":21},[96,129993,129994,129998,130004,130020],{"__ignoreMap":21},[99,129995,129996],{"class":101,"line":102},[99,129997,129904],{"class":168},[99,129999,130000,130002],{"class":101,"line":22},[99,130001,51592],{"class":51281},[99,130003,15559],{"class":109},[99,130005,130006,130008,130010,130012,130014,130016,130018],{"class":101,"line":1165},[99,130007,70877],{"class":158},[99,130009,51418],{"class":109},[99,130011,327],{"class":158},[99,130013,51473],{"class":105},[99,130015,51502],{"class":158},[99,130017,129925],{"class":158},[99,130019,1276],{"class":109},[99,130021,130022],{"class":101,"line":1180},[99,130023,1551],{"class":109},[14,130025,130026],{},"边框分开写法：",[90,130028,130030],{"className":126533,"code":130029,"language":126535,"meta":21,"style":21},"\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",[96,130031,130032,130037,130043,130061,130079,130098,130116],{"__ignoreMap":21},[99,130033,130034],{"class":101,"line":102},[99,130035,130036],{"class":168},"\u002F* 边框分开写法 *\u002F\n",[99,130038,130039,130041],{"class":101,"line":22},[99,130040,51592],{"class":51281},[99,130042,15559],{"class":109},[99,130044,130045,130048,130050,130052,130054,130056,130059],{"class":101,"line":1165},[99,130046,130047],{"class":158},"  border-top",[99,130049,51418],{"class":109},[99,130051,327],{"class":158},[99,130053,51473],{"class":105},[99,130055,51502],{"class":158},[99,130057,130058],{"class":158}," #000",[99,130060,1276],{"class":109},[99,130062,130063,130066,130068,130070,130072,130074,130077],{"class":101,"line":1180},[99,130064,130065],{"class":158},"  border-right",[99,130067,51418],{"class":109},[99,130069,187],{"class":158},[99,130071,51473],{"class":105},[99,130073,62222],{"class":158},[99,130075,130076],{"class":158}," #333",[99,130078,1276],{"class":109},[99,130080,130081,130084,130086,130088,130090,130093,130096],{"class":101,"line":1186},[99,130082,130083],{"class":158},"  border-bottom",[99,130085,51418],{"class":109},[99,130087,181],{"class":158},[99,130089,51473],{"class":105},[99,130091,130092],{"class":158}," dotted",[99,130094,130095],{"class":158}," #666",[99,130097,1276],{"class":109},[99,130099,130100,130103,130105,130107,130109,130111,130114],{"class":101,"line":1200},[99,130101,130102],{"class":158},"  border-left",[99,130104,51418],{"class":109},[99,130106,327],{"class":158},[99,130108,51473],{"class":105},[99,130110,51502],{"class":158},[99,130112,130113],{"class":158}," #999",[99,130115,1276],{"class":109},[99,130117,130118],{"class":101,"line":1206},[99,130119,1551],{"class":109},[53,130121,130122],{"start":1180},[56,130123,130124],{},"表格的细线边框",[14,130126,130127],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[90,130129,130131],{"className":126533,"code":130130,"language":126535,"meta":21,"style":21},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[96,130132,130133,130138,130144,130154],{"__ignoreMap":21},[99,130134,130135],{"class":101,"line":102},[99,130136,130137],{"class":168},"\u002F* 表格细线边框合并 *\u002F\n",[99,130139,130140,130142],{"class":101,"line":22},[99,130141,247],{"class":51281},[99,130143,15559],{"class":109},[99,130145,130146,130148,130150,130152],{"class":101,"line":1165},[99,130147,70559],{"class":158},[99,130149,51418],{"class":109},[99,130151,65016],{"class":158},[99,130153,1276],{"class":109},[99,130155,130156],{"class":101,"line":1180},[99,130157,1551],{"class":109},[14,130159,130160],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[53,130162,130163],{"start":1186},[56,130164,130165],{},"解决边框额外增加盒子的实际大小的方法：",[1117,130167,130168,130171],{},[56,130169,130170],{},"测量盒子大小的时候,不量边框",[56,130172,130173],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[70,130175,130177],{"id":130176},"_912-内边距","9.1.2 内边距",[53,130179,130180,130183],{},[56,130181,130182],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[56,130184,129894],{},[247,130186,130187,130197],{},[250,130188,130189],{},[253,130190,130191,130194],{},[256,130192,130193],{"align":23724},"值的个数",[256,130195,130196],{"align":23724},"表达意思",[294,130198,130199,130207,130215,130223],{},[253,130200,130201,130204],{},[299,130202,130203],{"align":23724},"padding: 5px;",[299,130205,130206],{"align":23724},"1个值，代表上下左右都有5个元素",[253,130208,130209,130212],{},[299,130210,130211],{"align":23724},"padding: 5px 10px;",[299,130213,130214],{"align":23724},"2个值，代表上下内边距为5像素，左右内边距为10像素",[253,130216,130217,130220],{},[299,130218,130219],{"align":23724},"padding: 5px 10px 20px;",[299,130221,130222],{"align":23724},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[253,130224,130225,130228],{},[299,130226,130227],{"align":23724},"padding: 5px 10px 20px 30px;",[299,130229,130230],{"align":23724},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[247,130232,130233,130241],{},[250,130234,130235],{},[253,130236,130237,130239],{},[256,130238,129135],{"align":23724},[256,130240,102677],{"align":23724},[294,130242,130243,130251,130259,130267],{},[253,130244,130245,130248],{},[299,130246,130247],{"align":23724},"padding-left",[299,130249,130250],{"align":23724},"左内边距",[253,130252,130253,130256],{},[299,130254,130255],{"align":23724},"padding-right",[299,130257,130258],{"align":23724},"右内边距",[253,130260,130261,130264],{},[299,130262,130263],{"align":23724},"padding-top",[299,130265,130266],{"align":23724},"上内边距",[253,130268,130269,130272],{},[299,130270,130271],{"align":23724},"padding-bottom",[299,130273,130274],{"align":23724},"下内边距",[53,130276,130277],{"start":1165},[56,130278,130279],{},"内边距会影响盒子的实际大小",[14,130281,130282],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130284,130285],{},"①内容和边框有了距离，添加了内边距",[14,130287,130288],{},"②padding影响了盒子实际大小",[14,130290,130291],{},"内边距对盒子大小的影响：",[14,130293,130294],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130296,130297],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130299,95201],{},[14,130301,130302],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[70,130304,130306],{"id":130305},"_913-外边距","9.1.3 外边距",[53,130308,130309],{},[56,130310,130311],{},"控制盒子与盒子之间的距离",[247,130313,130314,130322],{},[250,130315,130316],{},[253,130317,130318,130320],{},[256,130319,129135],{"align":23724},[256,130321,102677],{"align":23724},[294,130323,130324,130332,130340,130348],{},[253,130325,130326,130329],{},[299,130327,130328],{"align":23724},"margin-left",[299,130330,130331],{"align":23724},"左外边距",[253,130333,130334,130337],{},[299,130335,130336],{"align":23724},"margin-right",[299,130338,130339],{"align":23724},"右外边距",[253,130341,130342,130345],{},[299,130343,130344],{"align":23724},"margin-top",[299,130346,130347],{"align":23724},"上外边距",[253,130349,130350,130353],{},[299,130351,130352],{"align":23724},"margin-bottom",[299,130354,130355],{"align":23724},"下外边距",[53,130357,130358],{"start":22},[56,130359,130360],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130362,130363],{},"①盒子必须指定了宽度（width）",[14,130365,130366],{},"②盒子左右的外边距都设置为 auto",[90,130368,130370],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[96,130371,130372,130377,130384,130400],{"__ignoreMap":21},[99,130373,130374],{"class":101,"line":102},[99,130375,130376],{"class":168},"\u002F* margin 复合写法（同上） *\u002F\n",[99,130378,130379,130382],{"class":101,"line":22},[99,130380,130381],{"class":1949},".box",[99,130383,15559],{"class":109},[99,130385,130386,130388,130390,130392,130394,130397],{"class":101,"line":1165},[99,130387,70451],{"class":158},[99,130389,51418],{"class":109},[99,130391,301],{"class":158},[99,130393,51537],{"class":158},[99,130395,130396],{"class":109},";  ",[99,130398,130399],{"class":168},"\u002F* 块级盒子水平居中 *\u002F\n",[99,130401,130402],{"class":101,"line":1180},[99,130403,1551],{"class":109},[53,130405,130406],{"start":1165},[56,130407,130408],{},"外边距塌陷问题",[14,130410,130411],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1448,130413],{"style":126389,"src":130414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130416,130417],{},"解决方案：",[14,130419,130420],{},"①可以为父亲元素定义上边距",[90,130422,130423],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},[96,130424,130425,130429,130435,130449],{"__ignoreMap":21},[99,130426,130427],{"class":101,"line":102},[99,130428,130376],{"class":168},[99,130430,130431,130433],{"class":101,"line":22},[99,130432,130381],{"class":1949},[99,130434,15559],{"class":109},[99,130436,130437,130439,130441,130443,130445,130447],{"class":101,"line":1165},[99,130438,70451],{"class":158},[99,130440,51418],{"class":109},[99,130442,301],{"class":158},[99,130444,51537],{"class":158},[99,130446,130396],{"class":109},[99,130448,130399],{"class":168},[99,130450,130451],{"class":101,"line":1180},[99,130452,1551],{"class":109},[14,130454,130455],{},"②可以为父亲元素定义上内边距",[14,130457,130458],{},"③可以为父亲元素添加overflow:hidden",[1448,130460],{"style":126389,"src":130461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[90,130463,130464],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},[96,130465,130466,130470,130476,130490],{"__ignoreMap":21},[99,130467,130468],{"class":101,"line":102},[99,130469,130376],{"class":168},[99,130471,130472,130474],{"class":101,"line":22},[99,130473,130381],{"class":1949},[99,130475,15559],{"class":109},[99,130477,130478,130480,130482,130484,130486,130488],{"class":101,"line":1165},[99,130479,70451],{"class":158},[99,130481,51418],{"class":109},[99,130483,301],{"class":158},[99,130485,51537],{"class":158},[99,130487,130396],{"class":109},[99,130489,130399],{"class":168},[99,130491,130492],{"class":101,"line":1180},[99,130493,1551],{"class":109},[1448,130495],{"style":126389,"src":130496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130498,130499],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130501,130502],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[70,130504,130506],{"id":130505},"_914-清除内外边距","9.1.4 清除内外边距",[14,130508,130509],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[90,130511,130512],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},[96,130513,130514,130518,130524,130538],{"__ignoreMap":21},[99,130515,130516],{"class":101,"line":102},[99,130517,130376],{"class":168},[99,130519,130520,130522],{"class":101,"line":22},[99,130521,130381],{"class":1949},[99,130523,15559],{"class":109},[99,130525,130526,130528,130530,130532,130534,130536],{"class":101,"line":1165},[99,130527,70451],{"class":158},[99,130529,51418],{"class":109},[99,130531,301],{"class":158},[99,130533,51537],{"class":158},[99,130535,130396],{"class":109},[99,130537,130399],{"class":168},[99,130539,130540],{"class":101,"line":1180},[99,130541,1551],{"class":109},[14,130543,130544],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[70,130546,130548],{"id":130547},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1117,130550,130551,130554,130557,130560,130563,130566],{},[56,130552,130553],{},"文件→打开 ：可以打开我们要测量的图片",[56,130555,130556],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[56,130558,130559],{},"右击标尺，把里面的单位改为像素",[56,130561,130562],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[56,130564,130565],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[56,130567,130568],{},"用选区拖动 可以测量大小",[1448,130570],{"style":126389,"src":130571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1117,130573,130574,130577],{},[56,130575,130576],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[56,130578,130579],{},"吸管取色工具",[1448,130581],{"style":126389,"src":130582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[70,130584,130586],{"id":130585},"_916-案例","9.1.6 案例",[53,130588,130589],{},[56,130590,130591],{},"小米商品",[1448,130593],{"style":126389,"src":130594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[90,130596,130597],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},[96,130598,130599,130603,130609,130623],{"__ignoreMap":21},[99,130600,130601],{"class":101,"line":102},[99,130602,130376],{"class":168},[99,130604,130605,130607],{"class":101,"line":22},[99,130606,130381],{"class":1949},[99,130608,15559],{"class":109},[99,130610,130611,130613,130615,130617,130619,130621],{"class":101,"line":1165},[99,130612,70451],{"class":158},[99,130614,51418],{"class":109},[99,130616,301],{"class":158},[99,130618,51537],{"class":158},[99,130620,130396],{"class":109},[99,130622,130399],{"class":168},[99,130624,130625],{"class":101,"line":1180},[99,130626,1551],{"class":109},[53,130628,130629],{"start":22},[56,130630,130631],{},"快报模块",[1448,130633],{"style":126389,"src":130634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[90,130636,130638],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[96,130639,130640,130645,130660,130665],{"__ignoreMap":21},[99,130641,130642],{"class":101,"line":102},[99,130643,130644],{"class":168},"\u003C!-- HTML 代码示例 -->\n",[99,130646,130647,130649,130651,130653,130655,130658],{"class":101,"line":22},[99,130648,1020],{"class":109},[99,130650,51592],{"class":51281},[99,130652,53467],{"class":1949},[99,130654,155],{"class":109},[99,130656,130657],{"class":214},"\"example\"",[99,130659,51288],{"class":109},[99,130661,130662],{"class":101,"line":1165},[99,130663,130664],{"class":109},"  示例内容\n",[99,130666,130667,130669,130671],{"class":101,"line":1180},[99,130668,51766],{"class":109},[99,130670,51592],{"class":51281},[99,130672,51288],{"class":109},[70,130674,130676],{"id":130675},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[53,130678,130679],{},[56,130680,130681],{},"圆角边框",[14,130683,130684],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1448,130686],{"style":126389,"src":130687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[90,130689,130691],{"className":126533,"code":130690,"language":126535,"meta":21,"style":21},"div {\n  border: 1px solid #ccc;\n}\n",[96,130692,130693,130699,130715],{"__ignoreMap":21},[99,130694,130695,130697],{"class":101,"line":102},[99,130696,51592],{"class":51281},[99,130698,15559],{"class":109},[99,130700,130701,130703,130705,130707,130709,130711,130713],{"class":101,"line":22},[99,130702,70877],{"class":158},[99,130704,51418],{"class":109},[99,130706,327],{"class":158},[99,130708,51473],{"class":105},[99,130710,51502],{"class":158},[99,130712,129925],{"class":158},[99,130714,1276],{"class":109},[99,130716,130717],{"class":101,"line":1165},[99,130718,1551],{"class":109},[14,130720,130721],{},"解释:",[1117,130723,130724,130727,130730,130733,130736],{},[56,130725,130726],{},"参数值可以为数值或百分比的形式",[56,130728,130729],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[56,130731,130732],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[56,130734,130735],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[56,130737,130738],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[53,130740,130741],{"start":22},[56,130742,130743],{},"盒子阴影",[90,130745,130747],{"className":126533,"code":130746,"language":126535,"meta":21,"style":21},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[96,130748,130749,130755,130792],{"__ignoreMap":21},[99,130750,130751,130753],{"class":101,"line":102},[99,130752,51592],{"class":51281},[99,130754,15559],{"class":109},[99,130756,130757,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786,130788,130790],{"class":101,"line":22},[99,130758,130759],{"class":158},"  box-shadow",[99,130761,51418],{"class":109},[99,130763,301],{"class":158},[99,130765,14742],{"class":158},[99,130767,51473],{"class":105},[99,130769,2024],{"class":158},[99,130771,51473],{"class":105},[99,130773,78748],{"class":158},[99,130775,110],{"class":109},[99,130777,301],{"class":158},[99,130779,12422],{"class":109},[99,130781,301],{"class":158},[99,130783,12422],{"class":109},[99,130785,301],{"class":158},[99,130787,12422],{"class":109},[99,130789,86191],{"class":158},[99,130791,2705],{"class":109},[99,130793,130794],{"class":101,"line":1165},[99,130795,1551],{"class":109},[247,130797,130798,130806],{},[250,130799,130800],{},[253,130801,130802,130804],{},[256,130803,262],{"align":23724},[256,130805,27470],{"align":23724},[294,130807,130808,130816,130824,130832,130840,130848],{},[253,130809,130810,130813],{},[299,130811,130812],{"align":23724},"h-shadow",[299,130814,130815],{"align":23724},"必需,水平阴影的位置,允许负值",[253,130817,130818,130821],{},[299,130819,130820],{"align":23724},"v-shadow",[299,130822,130823],{"align":23724},"必需,垂直阴影的位置,允许负值",[253,130825,130826,130829],{},[299,130827,130828],{"align":23724},"blur",[299,130830,130831],{"align":23724},"可选,模糊距离,就是影子的虚实",[253,130833,130834,130837],{},[299,130835,130836],{"align":23724},"spread",[299,130838,130839],{"align":23724},"可选,阴影尺寸",[253,130841,130842,130845],{},[299,130843,130844],{"align":23724},"color",[299,130846,130847],{"align":23724},"可选,阴影的颜色",[253,130849,130850,130853],{},[299,130851,130852],{"align":23724},"inset",[299,130854,130855],{"align":23724},"可选,将外部阴影(outset)改为内部阴影",[53,130857,130858],{"start":1165},[56,130859,130860],{},"文字阴影",[90,130862,130864],{"className":126533,"code":130863,"language":126535,"meta":21,"style":21},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[96,130865,130866,130872,130911],{"__ignoreMap":21},[99,130867,130868,130870],{"class":101,"line":102},[99,130869,14],{"class":51281},[99,130871,15559],{"class":109},[99,130873,130874,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909],{"class":101,"line":22},[99,130875,130876],{"class":158},"  text-shadow",[99,130878,51418],{"class":109},[99,130880,327],{"class":158},[99,130882,51473],{"class":105},[99,130884,25107],{"class":158},[99,130886,51473],{"class":105},[99,130888,14742],{"class":158},[99,130890,51473],{"class":105},[99,130892,78748],{"class":158},[99,130894,110],{"class":109},[99,130896,301],{"class":158},[99,130898,12422],{"class":109},[99,130900,301],{"class":158},[99,130902,12422],{"class":109},[99,130904,301],{"class":158},[99,130906,12422],{"class":109},[99,130908,100502],{"class":158},[99,130910,2705],{"class":109},[99,130912,130913],{"class":101,"line":1165},[99,130914,1551],{"class":109},[247,130916,130917,130925],{},[250,130918,130919],{},[253,130920,130921,130923],{},[256,130922,262],{"align":23724},[256,130924,27470],{"align":23724},[294,130926,130927,130933,130940,130947],{},[253,130928,130929,130931],{},[299,130930,130812],{"align":23724},[299,130932,130815],{"align":23724},[253,130934,130935,130937],{},[299,130936,130820],{"align":23724},[299,130938,130939],{"align":23724},"必需,垂直阴影位置,允许负值",[253,130941,130942,130944],{},[299,130943,130828],{"align":23724},[299,130945,130946],{"align":23724},"可选,模糊的距离",[253,130948,130949,130951],{},[299,130950,130844],{"align":23724},[299,130952,130847],{"align":23724},[41,130954,130956],{"id":130955},"_92-浮动","9.2 浮动",[70,130958,130960],{"id":130959},"_921-浮动介绍","9.2.1 浮动介绍",[14,130962,130963],{},"在16.2中详细介绍",[70,130965,130967],{"id":130966},"_922-清除浮动","9.2.2 清除浮动",[53,130969,130970,130973],{},[56,130971,130972],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[56,130974,130975],{},"清除浮动的本质",[14,130977,130978],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130980,9012],{},[1117,130982,130983,130986,130989],{},[56,130984,130985],{},"如果父盒子本身有高度，则不需要清除浮动",[56,130987,130988],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[56,130990,130991],{},"父级有了高度，就不会影响下面的标准流了",[53,130993,130994],{"start":1165},[56,130995,130996],{},"清除浮动样式",[90,130998,131000],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[96,131001,131002,131009,131020,131024,131031,131041],{"__ignoreMap":21},[99,131003,131004,131007],{"class":101,"line":102},[99,131005,131006],{"class":1949},".left",[99,131008,15559],{"class":109},[99,131010,131011,131014,131016,131018],{"class":101,"line":22},[99,131012,131013],{"class":158},"  float",[99,131015,51418],{"class":109},[99,131017,23724],{"class":158},[99,131019,1276],{"class":109},[99,131021,131022],{"class":101,"line":1165},[99,131023,1551],{"class":109},[99,131025,131026,131029],{"class":101,"line":1180},[99,131027,131028],{"class":1949},".right",[99,131030,15559],{"class":109},[99,131032,131033,131035,131037,131039],{"class":101,"line":1186},[99,131034,131013],{"class":158},[99,131036,51418],{"class":109},[99,131038,72503],{"class":158},[99,131040,1276],{"class":109},[99,131042,131043],{"class":101,"line":1200},[99,131044,1551],{"class":109},[247,131046,131047,131055],{},[250,131048,131049],{},[253,131050,131051,131053],{},[256,131052,126997],{"align":23724},[256,131054,27470],{"align":23724},[294,131056,131057,131064,131071],{},[253,131058,131059,131061],{},[299,131060,23724],{"align":23724},[299,131062,131063],{"align":23724},"不允许左侧有浮动元素（清除左侧浮动的影响）",[253,131065,131066,131068],{},[299,131067,72503],{"align":23724},[299,131069,131070],{"align":23724},"不允许右侧有浮动元素（清除右侧浮动的影响）",[253,131072,131073,131076],{},[299,131074,131075],{"align":23724},"both",[299,131077,131078],{"align":23724},"同时清除左右侧浮动的影响",[14,131080,131081],{},"法一",[14,131083,131084],{},"额外标签法也称为隔墙法",[14,131086,131087],{},"使用方式：",[14,131089,131090],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[90,131092,131093],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,131094,131095,131101,131111,131115,131121,131131],{"__ignoreMap":21},[99,131096,131097,131099],{"class":101,"line":102},[99,131098,131006],{"class":1949},[99,131100,15559],{"class":109},[99,131102,131103,131105,131107,131109],{"class":101,"line":22},[99,131104,131013],{"class":158},[99,131106,51418],{"class":109},[99,131108,23724],{"class":158},[99,131110,1276],{"class":109},[99,131112,131113],{"class":101,"line":1165},[99,131114,1551],{"class":109},[99,131116,131117,131119],{"class":101,"line":1180},[99,131118,131028],{"class":1949},[99,131120,15559],{"class":109},[99,131122,131123,131125,131127,131129],{"class":101,"line":1186},[99,131124,131013],{"class":158},[99,131126,51418],{"class":109},[99,131128,72503],{"class":158},[99,131130,1276],{"class":109},[99,131132,131133],{"class":101,"line":1200},[99,131134,1551],{"class":109},[14,131136,131137],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131139,131140],{},"优点： 通俗易懂，书写方便",[14,131142,131143],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131145,131146],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131148,131149],{},"法二",[14,131151,131152],{},"父级添加overflow属性",[90,131154,131155],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,131156,131157,131163,131173,131177,131183,131193],{"__ignoreMap":21},[99,131158,131159,131161],{"class":101,"line":102},[99,131160,131006],{"class":1949},[99,131162,15559],{"class":109},[99,131164,131165,131167,131169,131171],{"class":101,"line":22},[99,131166,131013],{"class":158},[99,131168,51418],{"class":109},[99,131170,23724],{"class":158},[99,131172,1276],{"class":109},[99,131174,131175],{"class":101,"line":1165},[99,131176,1551],{"class":109},[99,131178,131179,131181],{"class":101,"line":1180},[99,131180,131028],{"class":1949},[99,131182,15559],{"class":109},[99,131184,131185,131187,131189,131191],{"class":101,"line":1186},[99,131186,131013],{"class":158},[99,131188,51418],{"class":109},[99,131190,72503],{"class":158},[99,131192,1276],{"class":109},[99,131194,131195],{"class":101,"line":1200},[99,131196,1551],{"class":109},[14,131198,131199],{},"overflow: hidden;",[14,131201,131202],{},"优点：代码简洁",[14,131204,131205],{},"缺点：无法显示溢出的部分",[14,131207,131208],{},"注意：是给父元素添加代码",[14,131210,131211],{},"法三",[14,131213,131214],{},"父级添加after伪元素",[14,131216,131217,131220],{},[131218,131219],"after",{}," 方式是额外标签法的升级版",[14,131222,131223],{},"使用的时候复制就可以",[90,131225,131226],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,131227,131228,131234,131244,131248,131254,131264],{"__ignoreMap":21},[99,131229,131230,131232],{"class":101,"line":102},[99,131231,131006],{"class":1949},[99,131233,15559],{"class":109},[99,131235,131236,131238,131240,131242],{"class":101,"line":22},[99,131237,131013],{"class":158},[99,131239,51418],{"class":109},[99,131241,23724],{"class":158},[99,131243,1276],{"class":109},[99,131245,131246],{"class":101,"line":1165},[99,131247,1551],{"class":109},[99,131249,131250,131252],{"class":101,"line":1180},[99,131251,131028],{"class":1949},[99,131253,15559],{"class":109},[99,131255,131256,131258,131260,131262],{"class":101,"line":1186},[99,131257,131013],{"class":158},[99,131259,51418],{"class":109},[99,131261,72503],{"class":158},[99,131263,1276],{"class":109},[99,131265,131266],{"class":101,"line":1200},[99,131267,1551],{"class":109},[14,131269,131270],{},"优点：没有增加标签，结构更简单",[14,131272,131273],{},"缺点：照顾低版本浏览器",[14,131275,131276],{},"代表网站： 百度、淘宝网、网易等",[14,131278,131279],{},"法四",[14,131281,131282],{},"父级添加双伪元素",[90,131284,131285],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,131286,131287,131293,131303,131307,131313,131323],{"__ignoreMap":21},[99,131288,131289,131291],{"class":101,"line":102},[99,131290,131006],{"class":1949},[99,131292,15559],{"class":109},[99,131294,131295,131297,131299,131301],{"class":101,"line":22},[99,131296,131013],{"class":158},[99,131298,51418],{"class":109},[99,131300,23724],{"class":158},[99,131302,1276],{"class":109},[99,131304,131305],{"class":101,"line":1165},[99,131306,1551],{"class":109},[99,131308,131309,131311],{"class":101,"line":1180},[99,131310,131028],{"class":1949},[99,131312,15559],{"class":109},[99,131314,131315,131317,131319,131321],{"class":101,"line":1186},[99,131316,131013],{"class":158},[99,131318,51418],{"class":109},[99,131320,72503],{"class":158},[99,131322,1276],{"class":109},[99,131324,131325],{"class":101,"line":1200},[99,131326,1551],{"class":109},[14,131328,131329],{},"优点：代码更简洁",[14,131331,131273],{},[14,131333,131334],{},"代表网站：小米、腾讯等",[41,131336,131338],{"id":131337},"_93-ps切图","9.3 PS切图",[70,131340,131342],{"id":131341},"_931-常见图片格式","9.3.1 常见图片格式",[247,131344,131345,131355],{},[250,131346,131347],{},[253,131348,131349,131352],{},[256,131350,131351],{"align":23724},"jpg图像格式",[256,131353,131354],{"align":23724},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[294,131356,131357,131365,131373],{},[253,131358,131359,131362],{},[299,131360,131361],{"align":23724},"gif图像格式",[299,131363,131364],{"align":23724},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[253,131366,131367,131370],{},[299,131368,131369],{"align":23724},"png图像格式",[299,131371,131372],{"align":23724},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[253,131374,131375,131378],{},[299,131376,131377],{"align":23724},"PSD图像格式",[299,131379,131380],{"align":23724},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[70,131382,131384],{"id":131383},"_932-图层切图","9.3.2 图层切图",[14,131386,131387],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131389,131390],{},"按住shift选中两个图层->图层菜单->合并图层",[70,131392,131394],{"id":131393},"_933-切片切图","9.3.3 切片切图",[1117,131396,131397,131400],{},[56,131398,131399],{},"利用切片工具手动划出",[56,131401,131402],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[70,131404,131406],{"id":131405},"_934-切图步骤","9.3.4 切图步骤",[14,131408,131409],{},"用切片工具选中：",[1448,131411],{"style":126389,"src":131412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131414,131415],{},"文件 -> 导出",[1448,131417],{"style":126389,"src":131418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5113,131420,131421],{},"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":21,"searchDepth":22,"depth":22,"links":131423},[131424,131433,131437],{"id":129860,"depth":22,"text":129861,"children":131425},[131426,131427,131428,131429,131430,131431,131432],{"id":129885,"depth":1165,"text":129886},{"id":130176,"depth":1165,"text":130177},{"id":130305,"depth":1165,"text":130306},{"id":130505,"depth":1165,"text":130506},{"id":130547,"depth":1165,"text":130548},{"id":130585,"depth":1165,"text":130586},{"id":130675,"depth":1165,"text":130676},{"id":130955,"depth":22,"text":130956,"children":131434},[131435,131436],{"id":130959,"depth":1165,"text":130960},{"id":130966,"depth":1165,"text":130967},{"id":131337,"depth":22,"text":131338,"children":131438},[131439,131440,131441,131442],{"id":131341,"depth":1165,"text":131342},{"id":131383,"depth":1165,"text":131384},{"id":131393,"depth":1165,"text":131394},{"id":131405,"depth":1165,"text":131406},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129852,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131449,"title":131450,"body":131451,"description":23364,"extension":24,"meta":132092,"navigation":26,"path":132093,"seo":132094,"stem":132095,"__hash__":132096},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131452,"toc":132080},[131453,131456,131460,131486,131520,131524,131528,131531,131573,131580,131590,131598,131600,131603,131606,131609,131616,131630,131634,131637,131666,131670,131673,131687,131691,131694,131722,131726,131729,131755,131759,131764,131797,131802,131830,131834,131851,131897,131902,131946,131963,132070,132078],[10,131454,131450],{"id":131455},"_10-css规范与学成在线案例",[41,131457,131459],{"id":131458},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[53,131461,131462,131468,131474,131480],{},[56,131463,131464,131467],{},[259,131465,131466],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[56,131469,131470,131473],{},[259,131471,131472],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[56,131475,131476,131479],{},[259,131477,131478],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[56,131481,131482,131485],{},[259,131483,131484],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[90,131487,131488],{"className":126533,"code":129897,"language":126535,"meta":21,"style":21},[96,131489,131490,131494,131500,131516],{"__ignoreMap":21},[99,131491,131492],{"class":101,"line":102},[99,131493,129904],{"class":168},[99,131495,131496,131498],{"class":101,"line":22},[99,131497,51592],{"class":51281},[99,131499,15559],{"class":109},[99,131501,131502,131504,131506,131508,131510,131512,131514],{"class":101,"line":1165},[99,131503,70877],{"class":158},[99,131505,51418],{"class":109},[99,131507,327],{"class":158},[99,131509,51473],{"class":105},[99,131511,51502],{"class":158},[99,131513,129925],{"class":158},[99,131515,1276],{"class":109},[99,131517,131518],{"class":101,"line":1180},[99,131519,1551],{"class":109},[41,131521,131523],{"id":131522},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[70,131525,131527],{"id":131526},"_1021-header头部制作","10.2.1 header头部制作",[1448,131529],{"style":126389,"src":131530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1117,131532,131533,131540,131547,131553,131560,131567],{},[56,131534,131535,131536,131539],{},"1号是版心盒子 ",[259,131537,131538],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[56,131541,131542,131543,131546],{},"版心盒子 里面包含 2号盒子 ",[259,131544,131545],{},"logo"," 图标",[56,131548,131549,131550,131552],{},"版心盒子 里面包含 3号盒子 ",[259,131551,53694],{}," 导航栏",[56,131554,131555,131556,131559],{},"版心盒子 里面包含 4号盒子 ",[259,131557,131558],{},"search"," 搜索框",[56,131561,131562,131563,131566],{},"版心盒子 里面包含 5号盒子 ",[259,131564,131565],{},"user"," 个人信息",[56,131568,131569,131570],{},"注意，要求里面的 ",[259,131571,131572],{},"4个子盒子 必须都浮动",[53,131574,131575],{},[56,131576,131577],{},[259,131578,131579],{},"导航栏注意点:",[14,131581,131582,131583,131586,131587],{},"实际开发中， ",[259,131584,131585],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[259,131588,131589],{},"用 li 包含链接(li+a)的做法",[1117,131591,131592,131595],{},[56,131593,131594],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[56,131596,131597],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131599,9012],{},[14,131601,131602],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131604,131605],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131607,131608],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[53,131610,131611],{"start":22},[56,131612,131613],{},[259,131614,131615],{},"4号盒子search的细节：",[1117,131617,131618,131621,131624],{},[56,131619,131620],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[56,131622,131623],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[56,131625,131626,131629],{},[96,131627,131628],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[70,131631,131633],{"id":131632},"_1022-banner制作","10.2.2 banner制作",[1448,131635],{"style":126389,"src":131636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1117,131638,131639,131646,131652,131659],{},[56,131640,131641,131642,131645],{},"1号盒子是通栏的大盒子 ",[259,131643,131644],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[56,131647,131648,131649,131651],{},"2号盒子是版心 ",[259,131650,905],{}," ， 要水平居中对齐",[56,131653,131654,131655,131658],{},"3号盒子版心内，左对齐 ",[259,131656,131657],{},"subnav"," 侧导航栏",[56,131660,131661,131662,131665],{},"4号盒子版心内，右对齐 ",[259,131663,131664],{},"course"," 课程",[70,131667,131669],{"id":131668},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1448,131671],{"style":126389,"src":131672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1117,131674,131675,131678,131681,131684],{},[56,131676,131677],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[56,131679,131680],{},"1号盒子是标题 H3 左侧浮动",[56,131682,131683],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[56,131685,131686],{},"3号盒子 右浮动 mod 修改",[70,131688,131690],{"id":131689},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1448,131692],{"style":126389,"src":131693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1117,131695,131696,131702,131709,131716,131719],{},[56,131697,131698,131699,131701],{},"1号盒子为最大的盒子 ",[259,131700,53695],{}," 版心水平居中对齐",[56,131703,131704,131705,131708],{},"2号盒子为上面部分 ",[259,131706,131707],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[56,131710,131711,131712,131715],{},"3号盒子为底下部分 ",[259,131713,131714],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[56,131717,131718],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[56,131720,131721],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[70,131723,131725],{"id":131724},"_1025-底部模块制作","10.2.5 底部模块制作",[1448,131727],{"style":126389,"src":131728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1117,131730,131731,131738,131741,131748],{},[56,131732,131733,131734,131737],{},"1号盒子通栏大盒子 底部 ",[259,131735,131736],{},"footer"," 给高度 底色是白色",[56,131739,131740],{},"2号盒子版心水平居中",[56,131742,131743,131744,131747],{},"3号盒子版权 ",[259,131745,131746],{},"copyright"," 左对齐",[56,131749,131750,131751,131754],{},"4号盒子 链接组 ",[259,131752,131753],{},"links"," 右对齐",[70,131756,131758],{"id":131757},"_1026-代码模块","10.2.6 代码模块",[53,131760,131761],{},[56,131762,131763],{},"html部分",[90,131765,131767],{"className":127280,"code":131766,"language":127282,"meta":21,"style":21},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[96,131768,131769],{"__ignoreMap":21},[99,131770,131771,131773,131775,131777,131779,131782,131785,131787,131790,131793,131795],{"class":101,"line":102},[99,131772,1020],{"class":109},[99,131774,348],{"class":51281},[99,131776,61038],{"class":1949},[99,131778,155],{"class":109},[99,131780,131781],{"class":214},"\"https:\u002F\u002Fexample.com\"",[99,131783,131784],{"class":1949}," target",[99,131786,155],{"class":109},[99,131788,131789],{"class":214},"\"_blank\"",[99,131791,131792],{"class":109},">链接文字\u003C\u002F",[99,131794,348],{"class":51281},[99,131796,51288],{"class":109},[53,131798,131799],{"start":22},[56,131800,131801],{},"css部分",[90,131803,131804],{"className":127280,"code":131766,"language":127282,"meta":21,"style":21},[96,131805,131806],{"__ignoreMap":21},[99,131807,131808,131810,131812,131814,131816,131818,131820,131822,131824,131826,131828],{"class":101,"line":102},[99,131809,1020],{"class":109},[99,131811,348],{"class":51281},[99,131813,61038],{"class":1949},[99,131815,155],{"class":109},[99,131817,131781],{"class":214},[99,131819,131784],{"class":1949},[99,131821,155],{"class":109},[99,131823,131789],{"class":214},[99,131825,131792],{"class":109},[99,131827,348],{"class":51281},[99,131829,51288],{"class":109},[70,131831,131833],{"id":131832},"_1027-收获","10.2.7 收获",[53,131835,131836,131839,131842,131845,131848],{},[56,131837,131838],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[56,131840,131841],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[56,131843,131844],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[56,131846,131847],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[56,131849,131850],{},"遗忘代码",[90,131852,131854],{"className":126533,"code":131853,"language":126535,"meta":21,"style":21},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[96,131855,131856,131878,131883,131893],{"__ignoreMap":21},[99,131857,131858,131860,131862,131864,131866,131868,131870,131872,131874,131876],{"class":101,"line":102},[99,131859,51592],{"class":51281},[99,131861,12422],{"class":109},[99,131863,14],{"class":51281},[99,131865,12422],{"class":109},[99,131867,10],{"class":51281},[99,131869,12422],{"class":109},[99,131871,1117],{"class":51281},[99,131873,12422],{"class":109},[99,131875,56],{"class":51281},[99,131877,15559],{"class":109},[99,131879,131880],{"class":101,"line":22},[99,131881,131882],{"class":168},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[99,131884,131885,131887,131889,131891],{"class":101,"line":1165},[99,131886,128149],{"class":158},[99,131888,51418],{"class":109},[99,131890,60850],{"class":158},[99,131892,1276],{"class":109},[99,131894,131895],{"class":101,"line":1180},[99,131896,1551],{"class":109},[53,131898,131899],{"start":1200},[56,131900,131901],{},"html引css的程序",[90,131903,131904],{"className":126533,"code":131853,"language":126535,"meta":21,"style":21},[96,131905,131906,131928,131932,131942],{"__ignoreMap":21},[99,131907,131908,131910,131912,131914,131916,131918,131920,131922,131924,131926],{"class":101,"line":102},[99,131909,51592],{"class":51281},[99,131911,12422],{"class":109},[99,131913,14],{"class":51281},[99,131915,12422],{"class":109},[99,131917,10],{"class":51281},[99,131919,12422],{"class":109},[99,131921,1117],{"class":51281},[99,131923,12422],{"class":109},[99,131925,56],{"class":51281},[99,131927,15559],{"class":109},[99,131929,131930],{"class":101,"line":22},[99,131931,131882],{"class":168},[99,131933,131934,131936,131938,131940],{"class":101,"line":1165},[99,131935,128149],{"class":158},[99,131937,51418],{"class":109},[99,131939,60850],{"class":158},[99,131941,1276],{"class":109},[99,131943,131944],{"class":101,"line":1180},[99,131945,1551],{"class":109},[53,131947,131948,131951,131954,131957,131960],{"start":1206},[56,131949,131950],{},"浮动的盒子不会有外边距合并问题",[56,131952,131953],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[56,131955,131956],{},"ctrl+g快速定位行；shift+alt多个光标",[56,131958,131959],{},"学习上方各个模块的选择器起名方法，以后就这样用",[56,131961,131962],{},"在写选择器时尽量写全一些，例如",[90,131964,131966],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},"\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",[96,131967,131968,131973,131989,131994,132009,132014,132029,132034,132049,132054],{"__ignoreMap":21},[99,131969,131970],{"class":101,"line":102},[99,131971,131972],{"class":168},"\u002F* 静态定位（默认） *\u002F\n",[99,131974,131975,131978,131980,131982,131984,131987],{"class":101,"line":22},[99,131976,131977],{"class":1949},".static",[99,131979,79788],{"class":109},[99,131981,128893],{"class":158},[99,131983,51418],{"class":109},[99,131985,131986],{"class":158},"static",[99,131988,129463],{"class":109},[99,131990,131991],{"class":101,"line":1165},[99,131992,131993],{"class":168},"\u002F* 相对定位 *\u002F\n",[99,131995,131996,131999,132001,132003,132005,132007],{"class":101,"line":1180},[99,131997,131998],{"class":1949},".relative",[99,132000,79788],{"class":109},[99,132002,128893],{"class":158},[99,132004,51418],{"class":109},[99,132006,54745],{"class":158},[99,132008,129463],{"class":109},[99,132010,132011],{"class":101,"line":1186},[99,132012,132013],{"class":168},"\u002F* 绝对定位 *\u002F\n",[99,132015,132016,132019,132021,132023,132025,132027],{"class":101,"line":1200},[99,132017,132018],{"class":1949},".absolute",[99,132020,79788],{"class":109},[99,132022,128893],{"class":158},[99,132024,51418],{"class":109},[99,132026,54812],{"class":158},[99,132028,129463],{"class":109},[99,132030,132031],{"class":101,"line":1206},[99,132032,132033],{"class":168},"\u002F* 固定定位 *\u002F\n",[99,132035,132036,132039,132041,132043,132045,132047],{"class":101,"line":1297},[99,132037,132038],{"class":1949},".fixed",[99,132040,79788],{"class":109},[99,132042,128893],{"class":158},[99,132044,51418],{"class":109},[99,132046,86214],{"class":158},[99,132048,129463],{"class":109},[99,132050,132051],{"class":101,"line":1303},[99,132052,132053],{"class":168},"\u002F* 粘性定位 *\u002F\n",[99,132055,132056,132059,132061,132063,132065,132068],{"class":101,"line":1315},[99,132057,132058],{"class":1949},".sticky",[99,132060,79788],{"class":109},[99,132062,128893],{"class":158},[99,132064,51418],{"class":109},[99,132066,132067],{"class":158},"sticky",[99,132069,129463],{"class":109},[53,132071,132072,132075],{"start":1603},[56,132073,132074],{},"一定要用好注释",[56,132076,132077],{},"浮动的盒子不会有外边距合并的问题",[5113,132079,131421],{},{"title":21,"searchDepth":22,"depth":22,"links":132081},[132082,132083],{"id":131458,"depth":22,"text":131459},{"id":131522,"depth":22,"text":131523,"children":132084},[132085,132086,132087,132088,132089,132090,132091],{"id":131526,"depth":1165,"text":131527},{"id":131632,"depth":1165,"text":131633},{"id":131668,"depth":1165,"text":131669},{"id":131689,"depth":1165,"text":131690},{"id":131724,"depth":1165,"text":131725},{"id":131757,"depth":1165,"text":131758},{"id":131832,"depth":1165,"text":131833},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131450,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132098,"title":132099,"body":132100,"description":23364,"extension":24,"meta":133586,"navigation":26,"path":133587,"seo":133588,"stem":133589,"__hash__":133590},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132101,"toc":133578},[132102,132105,132109,132113,132124,132128,132145,132189,132222,132225,132242,132245,132248,132292,132296,132300,132303,132306,132310,132313,132324,132387,132428,132431,132446,132500,132508,132511,132522,132576,132602,132605,132618,132672,132704,132758,132781,132835,132838,132841,132848,132902,132923,132977,132980,132983,133068,133076,133133,133156,133160,133163,133181,133185,133204,133258,133296,133300,133303,133306,133328,133332,133340,133343,133348,133359,133362,133366,133380,133424,133427,133431,133434,133439,133465,133470,133547,133550,133554,133557,133560,133563,133566,133569,133572,133575],[10,132103,132099],{"id":132104},"_11-传统布局与定位体系",[41,132106,132108],{"id":132107},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[70,132110,132112],{"id":132111},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1117,132114,132115,132118,132121],{},[56,132116,132117],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[56,132119,132120],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[56,132122,132123],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[70,132125,132127],{"id":132126},"_1112-浮动","11.1.2 浮动",[1117,132129,132130,132133,132136,132139,132142],{},[56,132131,132132],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[56,132134,132135],{},"浮动可以改变元素标签默认的排列方式",[56,132137,132138],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[56,132140,132141],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[56,132143,132144],{},"在使用行内块转换时盒子之间是有空隙的",[90,132146,132147],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,132148,132149,132155,132165,132169,132175,132185],{"__ignoreMap":21},[99,132150,132151,132153],{"class":101,"line":102},[99,132152,131006],{"class":1949},[99,132154,15559],{"class":109},[99,132156,132157,132159,132161,132163],{"class":101,"line":22},[99,132158,131013],{"class":158},[99,132160,51418],{"class":109},[99,132162,23724],{"class":158},[99,132164,1276],{"class":109},[99,132166,132167],{"class":101,"line":1165},[99,132168,1551],{"class":109},[99,132170,132171,132173],{"class":101,"line":1180},[99,132172,131028],{"class":1949},[99,132174,15559],{"class":109},[99,132176,132177,132179,132181,132183],{"class":101,"line":1186},[99,132178,131013],{"class":158},[99,132180,51418],{"class":109},[99,132182,72503],{"class":158},[99,132184,1276],{"class":109},[99,132186,132187],{"class":101,"line":1200},[99,132188,1551],{"class":109},[247,132190,132191,132199],{},[250,132192,132193],{},[253,132194,132195,132197],{},[256,132196,126997],{"align":23724},[256,132198,27470],{"align":23724},[294,132200,132201,132208,132215],{},[253,132202,132203,132205],{},[299,132204,54718],{"align":23724},[299,132206,132207],{"align":23724},"元素不浮动（默认值）",[253,132209,132210,132212],{},[299,132211,23724],{"align":23724},[299,132213,132214],{"align":23724},"元素向左浮动",[253,132216,132217,132219],{},[299,132218,72503],{"align":23724},[299,132220,132221],{"align":23724},"元素向右浮动",[14,132223,132224],{},"浮动重点：",[1117,132226,132227,132230,132233,132236,132239],{},[56,132228,132229],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[56,132231,132232],{},"浮动的元素会一行内显示并且元素顶部对齐",[56,132234,132235],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[56,132237,132238],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[56,132240,132241],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132243,132244],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132246,132247],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[90,132249,132250],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,132251,132252,132258,132268,132272,132278,132288],{"__ignoreMap":21},[99,132253,132254,132256],{"class":101,"line":102},[99,132255,131006],{"class":1949},[99,132257,15559],{"class":109},[99,132259,132260,132262,132264,132266],{"class":101,"line":22},[99,132261,131013],{"class":158},[99,132263,51418],{"class":109},[99,132265,23724],{"class":158},[99,132267,1276],{"class":109},[99,132269,132270],{"class":101,"line":1165},[99,132271,1551],{"class":109},[99,132273,132274,132276],{"class":101,"line":1180},[99,132275,131028],{"class":1949},[99,132277,15559],{"class":109},[99,132279,132280,132282,132284,132286],{"class":101,"line":1186},[99,132281,131013],{"class":158},[99,132283,51418],{"class":109},[99,132285,72503],{"class":158},[99,132287,1276],{"class":109},[99,132289,132290],{"class":101,"line":1200},[99,132291,1551],{"class":109},[70,132293,132295],{"id":132294},"_1113-定位","11.1.3 定位",[21985,132297,132299],{"id":132298},"_11131-使用场景","11.1.3.1 使用场景",[14,132301,132302],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132304,132305],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21985,132307,132309],{"id":132308},"_11132-定位组成","11.1.3.2 定位组成",[14,132311,132312],{},"定位 = 定位模式 + 边偏移",[53,132314,132315],{},[56,132316,132317,132320,132321],{},[259,132318,132319],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[259,132322,132323],{},"定位模式",[90,132325,132327],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[96,132328,132329,132335,132349,132366,132383],{"__ignoreMap":21},[99,132330,132331,132333],{"class":101,"line":102},[99,132332,130381],{"class":1949},[99,132334,15559],{"class":109},[99,132336,132337,132340,132342,132344,132346],{"class":101,"line":22},[99,132338,132339],{"class":158},"  position",[99,132341,51418],{"class":109},[99,132343,54745],{"class":158},[99,132345,130396],{"class":109},[99,132347,132348],{"class":168},"\u002F* 定位模式 *\u002F\n",[99,132350,132351,132354,132356,132358,132360,132363],{"class":101,"line":1165},[99,132352,132353],{"class":158},"  top",[99,132355,51418],{"class":109},[99,132357,556],{"class":158},[99,132359,51473],{"class":105},[99,132361,132362],{"class":109},";           ",[99,132364,132365],{"class":168},"\u002F* 边偏移：上 *\u002F\n",[99,132367,132368,132371,132373,132375,132377,132380],{"class":101,"line":1180},[99,132369,132370],{"class":158},"  left",[99,132372,51418],{"class":109},[99,132374,810],{"class":158},[99,132376,51473],{"class":105},[99,132378,132379],{"class":109},";          ",[99,132381,132382],{"class":168},"\u002F* 边偏移：左 *\u002F\n",[99,132384,132385],{"class":101,"line":1186},[99,132386,1551],{"class":109},[247,132388,132389,132398],{},[250,132390,132391],{},[253,132392,132393,132395],{},[256,132394,262],{"align":23724},[256,132396,132397],{"align":23724},"语义",[294,132399,132400,132407,132414,132421],{},[253,132401,132402,132404],{},[299,132403,131986],{"align":23724},[299,132405,132406],{"align":23724},"静态定位",[253,132408,132409,132411],{},[299,132410,54745],{"align":23724},[299,132412,132413],{"align":23724},"相对定位",[253,132415,132416,132418],{},[299,132417,54812],{"align":23724},[299,132419,132420],{"align":23724},"绝对定位",[253,132422,132423,132425],{},[299,132424,86214],{"align":23724},[299,132426,132427],{"align":23724},"固定定位",[14,132429,132430],{},"（1）静态定位：",[1117,132432,132433,132444],{},[56,132434,132435,132436,132439,132440,132443],{},"静态定位是元素的 ",[259,132437,132438],{},"默认定位方式"," ， ",[259,132441,132442],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[56,132445,5168],{},[90,132447,132448],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132449,132450,132456,132468,132482,132496],{"__ignoreMap":21},[99,132451,132452,132454],{"class":101,"line":102},[99,132453,130381],{"class":1949},[99,132455,15559],{"class":109},[99,132457,132458,132460,132462,132464,132466],{"class":101,"line":22},[99,132459,132339],{"class":158},[99,132461,51418],{"class":109},[99,132463,54745],{"class":158},[99,132465,130396],{"class":109},[99,132467,132348],{"class":168},[99,132469,132470,132472,132474,132476,132478,132480],{"class":101,"line":1165},[99,132471,132353],{"class":158},[99,132473,51418],{"class":109},[99,132475,556],{"class":158},[99,132477,51473],{"class":105},[99,132479,132362],{"class":109},[99,132481,132365],{"class":168},[99,132483,132484,132486,132488,132490,132492,132494],{"class":101,"line":1180},[99,132485,132370],{"class":158},[99,132487,51418],{"class":109},[99,132489,810],{"class":158},[99,132491,51473],{"class":105},[99,132493,132379],{"class":109},[99,132495,132382],{"class":168},[99,132497,132498],{"class":101,"line":1186},[99,132499,1551],{"class":109},[1117,132501,132502,132505],{},[56,132503,132504],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[56,132506,132507],{},"静态定位在布局时我们几乎不用的",[14,132509,132510],{},"（2）相对定位",[1117,132512,132513,132520],{},[56,132514,132515,132516,132519],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[259,132517,132518],{},"原来的位置"," 来说的（自恋型）",[56,132521,5168],{},[90,132523,132524],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132525,132526,132532,132544,132558,132572],{"__ignoreMap":21},[99,132527,132528,132530],{"class":101,"line":102},[99,132529,130381],{"class":1949},[99,132531,15559],{"class":109},[99,132533,132534,132536,132538,132540,132542],{"class":101,"line":22},[99,132535,132339],{"class":158},[99,132537,51418],{"class":109},[99,132539,54745],{"class":158},[99,132541,130396],{"class":109},[99,132543,132348],{"class":168},[99,132545,132546,132548,132550,132552,132554,132556],{"class":101,"line":1165},[99,132547,132353],{"class":158},[99,132549,51418],{"class":109},[99,132551,556],{"class":158},[99,132553,51473],{"class":105},[99,132555,132362],{"class":109},[99,132557,132365],{"class":168},[99,132559,132560,132562,132564,132566,132568,132570],{"class":101,"line":1180},[99,132561,132370],{"class":158},[99,132563,51418],{"class":109},[99,132565,810],{"class":158},[99,132567,51473],{"class":105},[99,132569,132379],{"class":109},[99,132571,132382],{"class":168},[99,132573,132574],{"class":101,"line":1186},[99,132575,1551],{"class":109},[1117,132577,132578],{},[56,132579,132580,132581,132583,132584,132586,132587,132590,132591,132594,132595,132597,132598,132601],{},"相对定位的特点：",[53697,132582],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53697,132585],{},"  ② ",[259,132588,132589],{},"原来"," 在标准流的 ",[259,132592,132593],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53697,132596],{},"  ③因此， ",[259,132599,132600],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132603,132604],{},"（3）绝对定位",[1117,132606,132607,132616],{},[56,132608,132609,132611,132612,132615],{},[259,132610,132420],{}," 是元素在移动位置的时候，是相对于它 ",[259,132613,132614],{},"祖先元素"," 来说的（拼爹型）",[56,132617,5168],{},[90,132619,132620],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132621,132622,132628,132640,132654,132668],{"__ignoreMap":21},[99,132623,132624,132626],{"class":101,"line":102},[99,132625,130381],{"class":1949},[99,132627,15559],{"class":109},[99,132629,132630,132632,132634,132636,132638],{"class":101,"line":22},[99,132631,132339],{"class":158},[99,132633,51418],{"class":109},[99,132635,54745],{"class":158},[99,132637,130396],{"class":109},[99,132639,132348],{"class":168},[99,132641,132642,132644,132646,132648,132650,132652],{"class":101,"line":1165},[99,132643,132353],{"class":158},[99,132645,51418],{"class":109},[99,132647,556],{"class":158},[99,132649,51473],{"class":105},[99,132651,132362],{"class":109},[99,132653,132365],{"class":168},[99,132655,132656,132658,132660,132662,132664,132666],{"class":101,"line":1180},[99,132657,132370],{"class":158},[99,132659,51418],{"class":109},[99,132661,810],{"class":158},[99,132663,51473],{"class":105},[99,132665,132379],{"class":109},[99,132667,132382],{"class":168},[99,132669,132670],{"class":101,"line":1186},[99,132671,1551],{"class":109},[1117,132673,132674,132689,132698,132701],{},[56,132675,132676,132677,132679,132680,132682,132683,132685,132686,132688],{},"绝对定位的特点：",[53697,132678],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53697,132681],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53697,132684],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53697,132687],{},"  (4)固定定位",[56,132690,132691,132693,132694,132697],{},[259,132692,132427],{}," 是元素 ",[259,132695,132696],{},"固定于浏览器可视区的位置"," 。（认死理型）",[56,132699,132700],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[56,132702,132703],{},"语法:",[90,132705,132706],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132707,132708,132714,132726,132740,132754],{"__ignoreMap":21},[99,132709,132710,132712],{"class":101,"line":102},[99,132711,130381],{"class":1949},[99,132713,15559],{"class":109},[99,132715,132716,132718,132720,132722,132724],{"class":101,"line":22},[99,132717,132339],{"class":158},[99,132719,51418],{"class":109},[99,132721,54745],{"class":158},[99,132723,130396],{"class":109},[99,132725,132348],{"class":168},[99,132727,132728,132730,132732,132734,132736,132738],{"class":101,"line":1165},[99,132729,132353],{"class":158},[99,132731,51418],{"class":109},[99,132733,556],{"class":158},[99,132735,51473],{"class":105},[99,132737,132362],{"class":109},[99,132739,132365],{"class":168},[99,132741,132742,132744,132746,132748,132750,132752],{"class":101,"line":1180},[99,132743,132370],{"class":158},[99,132745,51418],{"class":109},[99,132747,810],{"class":158},[99,132749,51473],{"class":105},[99,132751,132379],{"class":109},[99,132753,132382],{"class":168},[99,132755,132756],{"class":101,"line":1186},[99,132757,1551],{"class":109},[1117,132759,132760,132769],{},[56,132761,132762,132763,132765,132766,132768],{},"特点:",[53697,132764],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53697,132767],{},"  ②固定定位不再占有原先的位置,完全脱标",[56,132770,132771,132772,132774,132775,132777,132778,132780],{},"固定在版心位置的方法:",[53697,132773],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53697,132776],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53697,132779],{},"  实例：",[90,132782,132783],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132784,132785,132791,132803,132817,132831],{"__ignoreMap":21},[99,132786,132787,132789],{"class":101,"line":102},[99,132788,130381],{"class":1949},[99,132790,15559],{"class":109},[99,132792,132793,132795,132797,132799,132801],{"class":101,"line":22},[99,132794,132339],{"class":158},[99,132796,51418],{"class":109},[99,132798,54745],{"class":158},[99,132800,130396],{"class":109},[99,132802,132348],{"class":168},[99,132804,132805,132807,132809,132811,132813,132815],{"class":101,"line":1165},[99,132806,132353],{"class":158},[99,132808,51418],{"class":109},[99,132810,556],{"class":158},[99,132812,51473],{"class":105},[99,132814,132362],{"class":109},[99,132816,132365],{"class":168},[99,132818,132819,132821,132823,132825,132827,132829],{"class":101,"line":1180},[99,132820,132370],{"class":158},[99,132822,51418],{"class":109},[99,132824,810],{"class":158},[99,132826,51473],{"class":105},[99,132828,132379],{"class":109},[99,132830,132382],{"class":168},[99,132832,132833],{"class":101,"line":1186},[99,132834,1551],{"class":109},[1448,132836],{"style":126389,"src":132837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132839,132840],{},"(5)粘性定位",[1117,132842,132843,132846],{},[56,132844,132845],{},"粘性定位可以被认为是相对定位和固定定位的混合",[56,132847,5168],{},[90,132849,132850],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132851,132852,132858,132870,132884,132898],{"__ignoreMap":21},[99,132853,132854,132856],{"class":101,"line":102},[99,132855,130381],{"class":1949},[99,132857,15559],{"class":109},[99,132859,132860,132862,132864,132866,132868],{"class":101,"line":22},[99,132861,132339],{"class":158},[99,132863,51418],{"class":109},[99,132865,54745],{"class":158},[99,132867,130396],{"class":109},[99,132869,132348],{"class":168},[99,132871,132872,132874,132876,132878,132880,132882],{"class":101,"line":1165},[99,132873,132353],{"class":158},[99,132875,51418],{"class":109},[99,132877,556],{"class":158},[99,132879,51473],{"class":105},[99,132881,132362],{"class":109},[99,132883,132365],{"class":168},[99,132885,132886,132888,132890,132892,132894,132896],{"class":101,"line":1180},[99,132887,132370],{"class":158},[99,132889,51418],{"class":109},[99,132891,810],{"class":158},[99,132893,51473],{"class":105},[99,132895,132379],{"class":109},[99,132897,132382],{"class":168},[99,132899,132900],{"class":101,"line":1186},[99,132901,1551],{"class":109},[1117,132903,132904],{},[56,132905,132906,132907,132909,132910,132912,132913,132915,132916,132919,132920,132922],{},"粘性定位的特点：",[53697,132908],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53697,132911],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53697,132914],{},"  ③必须添加 top 、left、right、bottom ",[259,132917,132918],{},"其中一个"," 才有效",[53697,132921],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[90,132924,132925],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,132926,132927,132933,132945,132959,132973],{"__ignoreMap":21},[99,132928,132929,132931],{"class":101,"line":102},[99,132930,130381],{"class":1949},[99,132932,15559],{"class":109},[99,132934,132935,132937,132939,132941,132943],{"class":101,"line":22},[99,132936,132339],{"class":158},[99,132938,51418],{"class":109},[99,132940,54745],{"class":158},[99,132942,130396],{"class":109},[99,132944,132348],{"class":168},[99,132946,132947,132949,132951,132953,132955,132957],{"class":101,"line":1165},[99,132948,132353],{"class":158},[99,132950,51418],{"class":109},[99,132952,556],{"class":158},[99,132954,51473],{"class":105},[99,132956,132362],{"class":109},[99,132958,132365],{"class":168},[99,132960,132961,132963,132965,132967,132969,132971],{"class":101,"line":1180},[99,132962,132370],{"class":158},[99,132964,51418],{"class":109},[99,132966,810],{"class":158},[99,132968,51473],{"class":105},[99,132970,132379],{"class":109},[99,132972,132382],{"class":168},[99,132974,132975],{"class":101,"line":1186},[99,132976,1551],{"class":109},[1448,132978],{"style":126389,"src":132979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132981,132982],{},"(6)总结",[247,132984,132985,133000],{},[250,132986,132987],{},[253,132988,132989,132991,132994,132997],{},[256,132990,132323],{"align":23724},[256,132992,132993],{"align":23724},"是否脱标",[256,132995,132996],{"align":23724},"移动位置",[256,132998,132999],{"align":23724},"是否常用",[294,133001,133002,133015,133029,133043,133056],{},[253,133003,133004,133007,133009,133012],{},[299,133005,133006],{"align":23724},"Static 静态定位",[299,133008,104659],{"align":23724},[299,133010,133011],{"align":23724},"不能使用边偏移",[299,133013,133014],{"align":23724},"很少",[253,133016,133017,133020,133023,133026],{},[299,133018,133019],{"align":23724},"Relative 相对定位",[299,133021,133022],{"align":23724},"否(占有位置)",[299,133024,133025],{"align":23724},"相对于自身位置移动",[299,133027,133028],{"align":23724},"基本单独使用",[253,133030,133031,133034,133037,133040],{},[299,133032,133033],{"align":23724},"Absolute 绝对定位",[299,133035,133036],{"align":23724},"是(不占有位置)",[299,133038,133039],{"align":23724},"带有定位的父级",[299,133041,133042],{"align":23724},"要和定位父级元素搭配使用",[253,133044,133045,133048,133050,133053],{},[299,133046,133047],{"align":23724},"Fixed 固定定位",[299,133049,133036],{"align":23724},[299,133051,133052],{"align":23724},"浏览器可视区",[299,133054,133055],{"align":23724},"单独使用,不需要父级",[253,133057,133058,133061,133063,133065],{},[299,133059,133060],{"align":23724},"Sticky 粘性定位",[299,133062,133022],{"align":23724},[299,133064,133052],{"align":23724},[299,133066,133067],{"align":23724},"当前阶段少",[53,133069,133070],{"start":22},[56,133071,133072,133075],{},[259,133073,133074],{},"边偏移"," 则决定了该元素的最终位置",[247,133077,133078,133089],{},[250,133079,133080],{},[253,133081,133082,133085,133087],{},[256,133083,133084],{"align":23724},"边偏移属性",[256,133086,27473],{"align":23724},[256,133088,27470],{"align":23724},[294,133090,133091,133102,133113,133123],{},[253,133092,133093,133096,133099],{},[299,133094,133095],{"align":23724},"top",[299,133097,133098],{"align":23724},"top: 80px;",[299,133100,133101],{"align":23724},"顶端偏移量，定义元素相对于父元素上边线的距离",[253,133103,133104,133107,133110],{},[299,133105,133106],{"align":23724},"bottom",[299,133108,133109],{"align":23724},"bottom: 80px ;",[299,133111,133112],{"align":23724},"底部偏移量，定义元素相对于其父元素下边线的距离",[253,133114,133115,133117,133120],{},[299,133116,23724],{"align":23724},[299,133118,133119],{"align":23724},"left: 80px ;",[299,133121,133122],{"align":23724},"左侧偏移量，定义元素相对于其父元素左边线的距离",[253,133124,133125,133127,133130],{},[299,133126,72503],{"align":23724},[299,133128,133129],{"align":23724},"right: 80px ;",[299,133131,133132],{"align":23724},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1117,133134,133135],{},[56,133136,9012,133137,133139,133140,133142,133143,133145,133146,133149,133150,133152,133153,133155],{},[53697,133138],{},"  ① ",[259,133141,133074],{}," 需要和 ",[259,133144,132323],{}," 联合使用， ",[259,133147,133148],{},"单独使用无效"," ；",[53697,133151],{},"  ②top和bottom不要同时使用",[53697,133154],{},"  ③left和right不要同时使用",[21985,133157,133159],{"id":133158},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133161,133162],{},"子级是绝对定位的话，父级要用相对定位",[1117,133164,133165,133168,133171,133174],{},[56,133166,133167],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[56,133169,133170],{},"父盒子需要加定位限制子盒子在父盒子内显示",[56,133172,133173],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[56,133175,133176,133177,133180],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[259,133178,133179],{},"子绝父绝"," 也会遇到",[21985,133182,133184],{"id":133183},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1117,133186,133187,133202],{},[56,133188,133189,133190,133193,133194,133197,133198,133201],{},"在使用 ",[259,133191,133192],{},"定位"," 布局时，可能会 ",[259,133195,133196],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[259,133199,133200],{},"z-index"," 来控制盒子的前后次序 (z轴)",[56,133203,5168],{},[90,133205,133206],{"className":126533,"code":132326,"language":126535,"meta":21,"style":21},[96,133207,133208,133214,133226,133240,133254],{"__ignoreMap":21},[99,133209,133210,133212],{"class":101,"line":102},[99,133211,130381],{"class":1949},[99,133213,15559],{"class":109},[99,133215,133216,133218,133220,133222,133224],{"class":101,"line":22},[99,133217,132339],{"class":158},[99,133219,51418],{"class":109},[99,133221,54745],{"class":158},[99,133223,130396],{"class":109},[99,133225,132348],{"class":168},[99,133227,133228,133230,133232,133234,133236,133238],{"class":101,"line":1165},[99,133229,132353],{"class":158},[99,133231,51418],{"class":109},[99,133233,556],{"class":158},[99,133235,51473],{"class":105},[99,133237,132362],{"class":109},[99,133239,132365],{"class":168},[99,133241,133242,133244,133246,133248,133250,133252],{"class":101,"line":1180},[99,133243,132370],{"class":158},[99,133245,51418],{"class":109},[99,133247,810],{"class":158},[99,133249,51473],{"class":105},[99,133251,132379],{"class":109},[99,133253,132382],{"class":168},[99,133255,133256],{"class":101,"line":1186},[99,133257,1551],{"class":109},[1117,133259,133260],{},[56,133261,133262,133263,133139,133265,133267,133268,127696,133271,82520,133274,133276,133277,133279,133280,133283,133284,133149,133287,133289,133290,133293,133295],{},"z-index的特性",[53697,133264],{},[259,133266,126997],{}," ： ",[259,133269,133270],{},"正整数",[259,133272,133273],{},"负整数",[259,133275,301],{}," ，默认值是 0，数值越大，盒子越靠上；",[53697,133278],{},"  ②如果 ",[259,133281,133282],{},"属性值相同"," ，则按照书写顺序， ",[259,133285,133286],{},"后来居上",[53697,133288],{},"  ③数字后面 ",[259,133291,133292],{},"不能加单位",[53697,133294],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21985,133297,133299],{"id":133298},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133301,133302],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133304,133305],{},"方法:",[1117,133307,133308,133318],{},[56,133309,133310,133311,133314,133315],{},"left: 50%; 让 ",[259,133312,133313],{},"盒子的左侧"," 移动到 ",[259,133316,133317],{},"父级元素的水平中心位置",[56,133319,133320,133321,133324,133325],{},"margin-left: -100px; 让盒子 ",[259,133322,133323],{},"向左"," 移动 ",[259,133326,133327],{},"自身宽度的一半",[21985,133329,133331],{"id":133330},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[53,133333,133334,133337],{},[56,133335,133336],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[56,133338,133339],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133341,133342],{},"也就是说绝对定位和固定定位和浮动类似",[53,133344,133345],{"start":1165},[56,133346,133347],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1117,133349,133350,133353,133356],{},[56,133351,133352],{},"可以用inline-block 转换为行内块",[56,133354,133355],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[56,133357,133358],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133360,133361],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21985,133363,133365],{"id":133364},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[53,133367,133368,133371,133374,133377],{},[56,133369,133370],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[56,133372,133373],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[56,133375,133376],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[56,133378,133379],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[90,133381,133382],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,133383,133384,133390,133400,133404,133410,133420],{"__ignoreMap":21},[99,133385,133386,133388],{"class":101,"line":102},[99,133387,131006],{"class":1949},[99,133389,15559],{"class":109},[99,133391,133392,133394,133396,133398],{"class":101,"line":22},[99,133393,131013],{"class":158},[99,133395,51418],{"class":109},[99,133397,23724],{"class":158},[99,133399,1276],{"class":109},[99,133401,133402],{"class":101,"line":1165},[99,133403,1551],{"class":109},[99,133405,133406,133408],{"class":101,"line":1180},[99,133407,131028],{"class":1949},[99,133409,15559],{"class":109},[99,133411,133412,133414,133416,133418],{"class":101,"line":1186},[99,133413,131013],{"class":158},[99,133415,51418],{"class":109},[99,133417,72503],{"class":158},[99,133419,1276],{"class":109},[99,133421,133422],{"class":101,"line":1200},[99,133423,1551],{"class":109},[1448,133425],{"style":126389,"src":133426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21985,133428,133430],{"id":133429},"_11138-轮播图","11.1.3.8 轮播图",[1448,133432],{"style":126389,"src":133433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[53,133435,133436],{},[56,133437,133438],{},"制作顺序:",[1117,133440,133441,133444,133447,133456],{},[56,133442,133443],{},"大盒子我们类名为： tb-promo 淘宝广告",[56,133445,133446],{},"里面先放一张图片",[56,133448,133449,133450,133452,133453,133455],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53697,133451],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53697,133454],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[56,133457,133458,133459,133461,133462,133464],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53697,133460],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53697,133463],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[53,133466,133467],{"start":22},[56,133468,133469],{},"代码模块",[90,133471,133473],{"className":126533,"code":133472,"language":126535,"meta":21,"style":21},"\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",[96,133474,133475,133480,133487,133497,133507,133517,133521,133526,133533,133543],{"__ignoreMap":21},[99,133476,133477],{"class":101,"line":102},[99,133478,133479],{"class":168},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[99,133481,133482,133485],{"class":101,"line":22},[99,133483,133484],{"class":1949},".son",[99,133486,15559],{"class":109},[99,133488,133489,133491,133493,133495],{"class":101,"line":1165},[99,133490,132339],{"class":158},[99,133492,51418],{"class":109},[99,133494,54812],{"class":158},[99,133496,1276],{"class":109},[99,133498,133499,133501,133503,133505],{"class":101,"line":1180},[99,133500,132353],{"class":158},[99,133502,51418],{"class":109},[99,133504,301],{"class":158},[99,133506,1276],{"class":109},[99,133508,133509,133511,133513,133515],{"class":101,"line":1186},[99,133510,132370],{"class":158},[99,133512,51418],{"class":109},[99,133514,301],{"class":158},[99,133516,1276],{"class":109},[99,133518,133519],{"class":101,"line":1200},[99,133520,1551],{"class":109},[99,133522,133523],{"class":101,"line":1206},[99,133524,133525],{"class":168},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[99,133527,133528,133531],{"class":101,"line":1297},[99,133529,133530],{"class":1949},".father",[99,133532,15559],{"class":109},[99,133534,133535,133537,133539,133541],{"class":101,"line":1303},[99,133536,132339],{"class":158},[99,133538,51418],{"class":109},[99,133540,54745],{"class":158},[99,133542,1276],{"class":109},[99,133544,133545],{"class":101,"line":1315},[99,133546,1551],{"class":109},[14,133548,133549],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[70,133551,133553],{"id":133552},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1448,133555],{"style":126389,"src":133556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133558,133559],{},"✨ 黄金口诀：",[14,133561,133562],{},"\"TOP正下负上，LEFT正右负左\"",[14,133564,133565],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133567,133568],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133570,133571],{},"✨ 简单记：",[14,133573,133574],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5113,133576,133577],{},"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":21,"searchDepth":22,"depth":22,"links":133579},[133580],{"id":132107,"depth":22,"text":132108,"children":133581},[133582,133583,133584,133585],{"id":132111,"depth":1165,"text":132112},{"id":132126,"depth":1165,"text":132127},{"id":132294,"depth":1165,"text":132295},{"id":133552,"depth":1165,"text":133553},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132099,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133592,"title":133593,"body":133594,"description":23364,"extension":24,"meta":135017,"navigation":26,"path":135018,"seo":135019,"stem":135020,"__hash__":135021},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133595,"toc":134996},[133596,133599,133603,133611,133615,133620,133628,133640,133644,133649,133657,133668,133672,133677,133718,133726,133730,133733,133736,133739,133833,133836,133930,133933,134027,134030,134033,134068,134071,134074,134104,134107,134110,134113,134116,134119,134122,134125,134195,134198,134202,134206,134247,134251,134257,134260,134263,134267,134270,134273,134276,134357,134360,134363,134367,134371,134374,134377,134380,134383,134386,134392,134401,134405,134424,134428,134438,134441,134444,134447,134450,134453,134456,134459,134462,134471,134475,134484,134487,134492,134545,134550,134716,134719,134722,134727,134730,134733,134736,134739,134744,134892,134895,134898,134903,134906,134911,134945,134948,134951,134955,134958,134965,134968,134971,134974,134977,134980,134983,134986,134990,134993],[10,133597,133593],{"id":133598},"_12-显示隐藏与图形资源",[41,133600,133602],{"id":133601},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1117,133604,133605,133608],{},[56,133606,133607],{},"目的:让一个元素在页面中消失或者显示出来",[56,133609,133610],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[70,133612,133614],{"id":133613},"_1211-display-显示","12.1.1 display 显示",[53,133616,133617],{},[56,133618,133619],{},"display 设置或检索对象是否及如何显示",[1117,133621,133622,133625],{},[56,133623,133624],{},"display: none;隐藏对象",[56,133626,133627],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[53,133629,133630,133637],{"start":22},[56,133631,133632,133633,133636],{},"特点： display 隐藏元素后， ",[259,133634,133635],{},"不再占"," 有原来的位置",[56,133638,133639],{},"在js中使用非常的广泛",[70,133641,133643],{"id":133642},"_1212-visibility可见性","12.1.2 visibility可见性",[53,133645,133646],{},[56,133647,133648],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1117,133650,133651,133654],{},[56,133652,133653],{},"visibility： visible；元素可见",[56,133655,133656],{},"visibility：hidden；元素隐藏",[53,133658,133659,133662,133665],{"start":22},[56,133660,133661],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[56,133663,133664],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[56,133666,133667],{},"隐藏后继续占有原有位置",[70,133669,133671],{"id":133670},"_1213-overflow溢出","12.1.3 overflow溢出",[1117,133673,133674],{},[56,133675,133676],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[247,133678,133679,133687],{},[250,133680,133681],{},[253,133682,133683,133685],{},[256,133684,126997],{"align":23724},[256,133686,27470],{"align":23724},[294,133688,133689,133697,133704,133711],{},[253,133690,133691,133694],{},[299,133692,133693],{"align":23724},"visible",[299,133695,133696],{"align":23724},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[253,133698,133699,133701],{},[299,133700,61695],{"align":23724},[299,133702,133703],{"align":23724},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[253,133705,133706,133708],{},[299,133707,128953],{"align":23724},[299,133709,133710],{"align":23724},"不管超出内容否，总是显示滚动条",[253,133712,133713,133715],{},[299,133714,72644],{"align":23724},[299,133716,133717],{"align":23724},"超出自动显示滚动条，不超出不显示滚动条",[1117,133719,133720,133723],{},[56,133721,133722],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[56,133724,133725],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[70,133727,133729],{"id":133728},"_1214-案例收获","12.1.4 案例收获",[1448,133731],{"style":126389,"src":133732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133734,133735],{},"问题：没做出来动态效果，使用hover没实现",[14,133737,133738],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[90,133740,133741],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,133742,133743,133747,133761,133765,133779,133783,133797,133801,133815,133819],{"__ignoreMap":21},[99,133744,133745],{"class":101,"line":102},[99,133746,131972],{"class":168},[99,133748,133749,133751,133753,133755,133757,133759],{"class":101,"line":22},[99,133750,131977],{"class":1949},[99,133752,79788],{"class":109},[99,133754,128893],{"class":158},[99,133756,51418],{"class":109},[99,133758,131986],{"class":158},[99,133760,129463],{"class":109},[99,133762,133763],{"class":101,"line":1165},[99,133764,131993],{"class":168},[99,133766,133767,133769,133771,133773,133775,133777],{"class":101,"line":1180},[99,133768,131998],{"class":1949},[99,133770,79788],{"class":109},[99,133772,128893],{"class":158},[99,133774,51418],{"class":109},[99,133776,54745],{"class":158},[99,133778,129463],{"class":109},[99,133780,133781],{"class":101,"line":1186},[99,133782,132013],{"class":168},[99,133784,133785,133787,133789,133791,133793,133795],{"class":101,"line":1200},[99,133786,132018],{"class":1949},[99,133788,79788],{"class":109},[99,133790,128893],{"class":158},[99,133792,51418],{"class":109},[99,133794,54812],{"class":158},[99,133796,129463],{"class":109},[99,133798,133799],{"class":101,"line":1206},[99,133800,132033],{"class":168},[99,133802,133803,133805,133807,133809,133811,133813],{"class":101,"line":1297},[99,133804,132038],{"class":1949},[99,133806,79788],{"class":109},[99,133808,128893],{"class":158},[99,133810,51418],{"class":109},[99,133812,86214],{"class":158},[99,133814,129463],{"class":109},[99,133816,133817],{"class":101,"line":1303},[99,133818,132053],{"class":168},[99,133820,133821,133823,133825,133827,133829,133831],{"class":101,"line":1315},[99,133822,132058],{"class":1949},[99,133824,79788],{"class":109},[99,133826,128893],{"class":158},[99,133828,51418],{"class":109},[99,133830,132067],{"class":158},[99,133832,129463],{"class":109},[14,133834,133835],{},"完整代码：",[90,133837,133838],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,133839,133840,133844,133858,133862,133876,133880,133894,133898,133912,133916],{"__ignoreMap":21},[99,133841,133842],{"class":101,"line":102},[99,133843,131972],{"class":168},[99,133845,133846,133848,133850,133852,133854,133856],{"class":101,"line":22},[99,133847,131977],{"class":1949},[99,133849,79788],{"class":109},[99,133851,128893],{"class":158},[99,133853,51418],{"class":109},[99,133855,131986],{"class":158},[99,133857,129463],{"class":109},[99,133859,133860],{"class":101,"line":1165},[99,133861,131993],{"class":168},[99,133863,133864,133866,133868,133870,133872,133874],{"class":101,"line":1180},[99,133865,131998],{"class":1949},[99,133867,79788],{"class":109},[99,133869,128893],{"class":158},[99,133871,51418],{"class":109},[99,133873,54745],{"class":158},[99,133875,129463],{"class":109},[99,133877,133878],{"class":101,"line":1186},[99,133879,132013],{"class":168},[99,133881,133882,133884,133886,133888,133890,133892],{"class":101,"line":1200},[99,133883,132018],{"class":1949},[99,133885,79788],{"class":109},[99,133887,128893],{"class":158},[99,133889,51418],{"class":109},[99,133891,54812],{"class":158},[99,133893,129463],{"class":109},[99,133895,133896],{"class":101,"line":1206},[99,133897,132033],{"class":168},[99,133899,133900,133902,133904,133906,133908,133910],{"class":101,"line":1297},[99,133901,132038],{"class":1949},[99,133903,79788],{"class":109},[99,133905,128893],{"class":158},[99,133907,51418],{"class":109},[99,133909,86214],{"class":158},[99,133911,129463],{"class":109},[99,133913,133914],{"class":101,"line":1303},[99,133915,132053],{"class":168},[99,133917,133918,133920,133922,133924,133926,133928],{"class":101,"line":1315},[99,133919,132058],{"class":1949},[99,133921,79788],{"class":109},[99,133923,128893],{"class":158},[99,133925,51418],{"class":109},[99,133927,132067],{"class":158},[99,133929,129463],{"class":109},[14,133931,133932],{},"分布思路重点详解：",[90,133934,133935],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,133936,133937,133941,133955,133959,133973,133977,133991,133995,134009,134013],{"__ignoreMap":21},[99,133938,133939],{"class":101,"line":102},[99,133940,131972],{"class":168},[99,133942,133943,133945,133947,133949,133951,133953],{"class":101,"line":22},[99,133944,131977],{"class":1949},[99,133946,79788],{"class":109},[99,133948,128893],{"class":158},[99,133950,51418],{"class":109},[99,133952,131986],{"class":158},[99,133954,129463],{"class":109},[99,133956,133957],{"class":101,"line":1165},[99,133958,131993],{"class":168},[99,133960,133961,133963,133965,133967,133969,133971],{"class":101,"line":1180},[99,133962,131998],{"class":1949},[99,133964,79788],{"class":109},[99,133966,128893],{"class":158},[99,133968,51418],{"class":109},[99,133970,54745],{"class":158},[99,133972,129463],{"class":109},[99,133974,133975],{"class":101,"line":1186},[99,133976,132013],{"class":168},[99,133978,133979,133981,133983,133985,133987,133989],{"class":101,"line":1200},[99,133980,132018],{"class":1949},[99,133982,79788],{"class":109},[99,133984,128893],{"class":158},[99,133986,51418],{"class":109},[99,133988,54812],{"class":158},[99,133990,129463],{"class":109},[99,133992,133993],{"class":101,"line":1206},[99,133994,132033],{"class":168},[99,133996,133997,133999,134001,134003,134005,134007],{"class":101,"line":1297},[99,133998,132038],{"class":1949},[99,134000,79788],{"class":109},[99,134002,128893],{"class":158},[99,134004,51418],{"class":109},[99,134006,86214],{"class":158},[99,134008,129463],{"class":109},[99,134010,134011],{"class":101,"line":1303},[99,134012,132053],{"class":168},[99,134014,134015,134017,134019,134021,134023,134025],{"class":101,"line":1315},[99,134016,132058],{"class":1949},[99,134018,79788],{"class":109},[99,134020,128893],{"class":158},[99,134022,51418],{"class":109},[99,134024,132067],{"class":158},[99,134026,129463],{"class":109},[1448,134028],{"style":126389,"src":134029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134031,134032],{},"图片太大，盒子太小，此时需要修改图片的大小",[90,134034,134036],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[96,134037,134038],{"__ignoreMap":21},[99,134039,134040,134042,134044,134046,134048,134051,134053,134055,134058,134061,134063,134066],{"class":101,"line":102},[99,134041,1020],{"class":109},[99,134043,1448],{"class":51281},[99,134045,55220],{"class":1949},[99,134047,155],{"class":109},[99,134049,134050],{"class":214},"\"images\u002Fpic.jpg\"",[99,134052,55228],{"class":1949},[99,134054,155],{"class":109},[99,134056,134057],{"class":214},"\"描述文字\"",[99,134059,134060],{"class":1949}," title",[99,134062,155],{"class":109},[99,134064,134065],{"class":214},"\"悬停提示\"",[99,134067,51288],{"class":109},[1448,134069],{"style":126389,"src":134070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134072,134073],{},"制造遮罩层",[90,134075,134076],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,134077,134078],{"__ignoreMap":21},[99,134079,134080,134082,134084,134086,134088,134090,134092,134094,134096,134098,134100,134102],{"class":101,"line":102},[99,134081,1020],{"class":109},[99,134083,1448],{"class":51281},[99,134085,55220],{"class":1949},[99,134087,155],{"class":109},[99,134089,134050],{"class":214},[99,134091,55228],{"class":1949},[99,134093,155],{"class":109},[99,134095,134057],{"class":214},[99,134097,134060],{"class":1949},[99,134099,155],{"class":109},[99,134101,134065],{"class":214},[99,134103,51288],{"class":109},[14,134105,134106],{},"此时是这样的为标准流",[1448,134108],{"style":126389,"src":134109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134111,134112],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134114,134115],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134117,134118],{},"让他在中间，用center(background-position)",[14,134120,134121],{},"将需要变的尽可能放到一个盒子中",[14,134123,134124],{},"放大盒子上内部盒子发生变化",[90,134126,134128],{"className":126533,"code":134127,"language":126535,"meta":21,"style":21},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[96,134129,134130,134136,134146,134150,134157,134167,134179,134191],{"__ignoreMap":21},[99,134131,134132,134134],{"class":101,"line":102},[99,134133,127600],{"class":1949},[99,134135,15559],{"class":109},[99,134137,134138,134140,134142,134144],{"class":101,"line":22},[99,134139,132339],{"class":158},[99,134141,51418],{"class":109},[99,134143,54745],{"class":158},[99,134145,1276],{"class":109},[99,134147,134148],{"class":101,"line":1165},[99,134149,1551],{"class":109},[99,134151,134152,134155],{"class":101,"line":1180},[99,134153,134154],{"class":1949},".child",[99,134156,15559],{"class":109},[99,134158,134159,134161,134163,134165],{"class":101,"line":1186},[99,134160,132339],{"class":158},[99,134162,51418],{"class":109},[99,134164,54812],{"class":158},[99,134166,1276],{"class":109},[99,134168,134169,134171,134173,134175,134177],{"class":101,"line":1200},[99,134170,132353],{"class":158},[99,134172,51418],{"class":109},[99,134174,766],{"class":158},[99,134176,438],{"class":105},[99,134178,1276],{"class":109},[99,134180,134181,134183,134185,134187,134189],{"class":101,"line":1206},[99,134182,132370],{"class":158},[99,134184,51418],{"class":109},[99,134186,766],{"class":158},[99,134188,438],{"class":105},[99,134190,1276],{"class":109},[99,134192,134193],{"class":101,"line":1297},[99,134194,1551],{"class":109},[14,134196,134197],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[41,134199,134201],{"id":134200},"_122-精灵图","12.2 精灵图",[70,134203,134205],{"id":134204},"_1221-理解","12.2.1 理解",[53,134207,134208,134226],{},[56,134209,134210,134211,132439,134214,134217,134218,134221,134222,134225],{},"目的： ",[259,134212,134213],{},"为了有效地减少服务器接收和发送请求的次数",[259,134215,134216],{},"提高"," 页面的 ",[259,134219,134220],{},"加载速度"," ，出现了 ",[259,134223,134224],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[56,134227,134228,134229,134231,134232,134234,134235,134237,134238,134240,134241,134243,134244,134246],{},"使用精灵图核心：",[53697,134230],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53697,134233],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53697,134236],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53697,134239],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53697,134242],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53697,134245],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[70,134248,134250],{"id":134249},"_1222-扒图","12.2.2 扒图",[90,134252,134255],{"className":134253,"code":134254,"language":5174},[5172],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[96,134256,134254],{"__ignoreMap":21},[1448,134258],{"style":126389,"src":134259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1448,134261],{"style":126389,"src":134262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[70,134264,134266],{"id":134265},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1448,134268],{"style":126389,"src":134269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134271,134272],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1448,134274],{"style":126389,"src":134275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[90,134277,134279],{"className":126533,"code":134278,"language":126535,"meta":21,"style":21},"\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",[96,134280,134281,134286,134293,134305,134317,134336,134353],{"__ignoreMap":21},[99,134282,134283],{"class":101,"line":102},[99,134284,134285],{"class":168},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[99,134287,134288,134291],{"class":101,"line":22},[99,134289,134290],{"class":1949},".icon",[99,134292,15559],{"class":109},[99,134294,134295,134297,134299,134301,134303],{"class":101,"line":1165},[99,134296,70549],{"class":158},[99,134298,51418],{"class":109},[99,134300,810],{"class":158},[99,134302,51473],{"class":105},[99,134304,1276],{"class":109},[99,134306,134307,134309,134311,134313,134315],{"class":101,"line":1180},[99,134308,70769],{"class":158},[99,134310,51418],{"class":109},[99,134312,810],{"class":158},[99,134314,51473],{"class":105},[99,134316,1276],{"class":109},[99,134318,134319,134321,134323,134325,134327,134330,134332,134334],{"class":101,"line":1186},[99,134320,70592],{"class":158},[99,134322,51418],{"class":109},[99,134324,61707],{"class":158},[99,134326,110],{"class":109},[99,134328,134329],{"class":5203},"sprites.png",[99,134331,13701],{"class":109},[99,134333,61717],{"class":158},[99,134335,1276],{"class":109},[99,134337,134338,134340,134342,134344,134346,134349,134351],{"class":101,"line":1200},[99,134339,128793],{"class":158},[99,134341,51418],{"class":109},[99,134343,51744],{"class":158},[99,134345,51473],{"class":105},[99,134347,134348],{"class":158}," -20",[99,134350,51473],{"class":105},[99,134352,1276],{"class":109},[99,134354,134355],{"class":101,"line":1206},[99,134356,1551],{"class":109},[1448,134358],{"style":126389,"src":134359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134361,134362],{},"在前端中坐标轴的正方向是右和下",[41,134364,134366],{"id":134365},"_123-字体图标","12.3 字体图标",[70,134368,134370],{"id":134369},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134372,134373],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134375,134376],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134378,134379],{},"1.图片文件还是比较大的。",[14,134381,134382],{},"2.图片本身放大和缩小会失真。",[14,134384,134385],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134387,134388,134389,25729],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[259,134390,134391],{},"字体图标 iconfont",[14,134393,134394,134397,134398,28366],{},[259,134395,134396],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[259,134399,134400],{},"展示的是图标，本质属于字体",[70,134402,134404],{"id":134403},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1117,134406,134407,134412,134415,134418,134421],{},[56,134408,134409,134411],{},[259,134410,25865],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[56,134413,134414],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[56,134416,134417],{},"兼容性：几乎支持所有的浏览器，请放心使用",[56,134419,134420],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[56,134422,134423],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[70,134425,134427],{"id":134426},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1117,134429,134430],{},[56,134431,134432,134433],{},"icomoon字体库：",[348,134434,134437],{"href":134435,"rel":134436},"http:\u002F\u002Ficomoon.io\u002F",[23853],"http:\u002F\u002Ficomoon.io",[14,134439,134440],{},"进去之后点icomoon app",[1448,134442],{"style":126389,"src":134443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134445,134446],{},"可以对其编辑：",[1448,134448],{"style":126389,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134451,134452],{},"生成字体：",[1448,134454],{"style":126389,"src":134455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134457,134458],{},"下载：",[1448,134460],{"style":126389,"src":134461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1117,134463,134464],{},[56,134465,134466,134467],{},"阿里iconfont字体库： ",[348,134468,134469],{"href":134469,"rel":134470},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23853],[70,134472,134474],{"id":134473},"_1234-字体图标的引入","12.3.4 字体图标的引入",[53,134476,134477],{},[56,134478,134479,134480,134483],{},"把下载包里面的 ",[259,134481,134482],{},"fonts"," 文件夹放入页面根目录下",[1448,134485],{"style":126389,"src":134486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[53,134488,134489],{"start":22},[56,134490,134491],{},"字体文件格式",[247,134493,134494,134503],{},[250,134495,134496],{},[253,134497,134498,134501],{},[256,134499,134500],{"align":23724},"格式",[256,134502,23728],{"align":23724},[294,134504,134505,134515,134525,134535],{},[253,134506,134507,134512],{},[299,134508,134509],{"align":23724},[259,134510,134511],{},".ttf",[299,134513,134514],{"align":23724},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[253,134516,134517,134522],{},[299,134518,134519],{"align":23724},[259,134520,134521],{},".woff",[299,134523,134524],{"align":23724},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[253,134526,134527,134532],{},[299,134528,134529],{"align":23724},[259,134530,134531],{},".eot",[299,134533,134534],{"align":23724},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[253,134536,134537,134542],{},[299,134538,134539],{"align":23724},[259,134540,134541],{},"svg",[299,134543,134544],{"align":23724},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[53,134546,134547],{"start":1165},[56,134548,134549],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[90,134551,134553],{"className":126533,"code":134552,"language":126535,"meta":21,"style":21},"\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",[96,134554,134555,134560,134567,134579,134595,134620,134641,134661,134681,134685,134691,134701,134712],{"__ignoreMap":21},[99,134556,134557],{"class":101,"line":102},[99,134558,134559],{"class":168},"\u002F* 引入字体图标 *\u002F\n",[99,134561,134562,134565],{"class":101,"line":22},[99,134563,134564],{"class":105},"@font-face",[99,134566,15559],{"class":109},[99,134568,134569,134572,134574,134577],{"class":101,"line":1165},[99,134570,134571],{"class":158},"  font-family",[99,134573,51418],{"class":109},[99,134575,134576],{"class":214},"'icomoon'",[99,134578,1276],{"class":109},[99,134580,134581,134584,134586,134588,134590,134593],{"class":101,"line":1180},[99,134582,134583],{"class":158},"  src",[99,134585,51418],{"class":109},[99,134587,61707],{"class":158},[99,134589,110],{"class":109},[99,134591,134592],{"class":214},"'fonts\u002Ficomoon.eot'",[99,134594,2705],{"class":109},[99,134596,134597,134599,134601,134603,134605,134608,134610,134613,134615,134618],{"class":101,"line":1186},[99,134598,134583],{"class":158},[99,134600,51418],{"class":109},[99,134602,61707],{"class":158},[99,134604,110],{"class":109},[99,134606,134607],{"class":214},"'fonts\u002Ficomoon.eot?#iefix'",[99,134609,13701],{"class":109},[99,134611,134612],{"class":158},"format",[99,134614,110],{"class":109},[99,134616,134617],{"class":214},"'embedded-opentype'",[99,134619,38028],{"class":109},[99,134621,134622,134625,134627,134630,134632,134634,134636,134639],{"class":101,"line":1200},[99,134623,134624],{"class":158},"       url",[99,134626,110],{"class":109},[99,134628,134629],{"class":214},"'fonts\u002Ficomoon.woff'",[99,134631,13701],{"class":109},[99,134633,134612],{"class":158},[99,134635,110],{"class":109},[99,134637,134638],{"class":214},"'woff'",[99,134640,38028],{"class":109},[99,134642,134643,134645,134647,134650,134652,134654,134656,134659],{"class":101,"line":1206},[99,134644,134624],{"class":158},[99,134646,110],{"class":109},[99,134648,134649],{"class":214},"'fonts\u002Ficomoon.ttf'",[99,134651,13701],{"class":109},[99,134653,134612],{"class":158},[99,134655,110],{"class":109},[99,134657,134658],{"class":214},"'truetype'",[99,134660,38028],{"class":109},[99,134662,134663,134665,134667,134670,134672,134674,134676,134679],{"class":101,"line":1297},[99,134664,134624],{"class":158},[99,134666,110],{"class":109},[99,134668,134669],{"class":214},"'fonts\u002Ficomoon.svg#icomoon'",[99,134671,13701],{"class":109},[99,134673,134612],{"class":158},[99,134675,110],{"class":109},[99,134677,134678],{"class":214},"'svg'",[99,134680,2705],{"class":109},[99,134682,134683],{"class":101,"line":1303},[99,134684,1551],{"class":109},[99,134686,134687,134689],{"class":101,"line":1315},[99,134688,134290],{"class":1949},[99,134690,15559],{"class":109},[99,134692,134693,134695,134697,134699],{"class":101,"line":1598},[99,134694,134571],{"class":158},[99,134696,51418],{"class":109},[99,134698,134576],{"class":214},[99,134700,1276],{"class":109},[99,134702,134703,134706,134708,134710],{"class":101,"line":1603},[99,134704,134705],{"class":158},"  font-style",[99,134707,51418],{"class":109},[99,134709,63822],{"class":158},[99,134711,1276],{"class":109},[99,134713,134714],{"class":101,"line":1609},[99,134715,1551],{"class":109},[14,134717,134718],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1448,134720],{"style":126389,"src":134721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[53,134723,134724],{"start":1180},[56,134725,134726],{},"添加字体",[1448,134728],{"style":126389,"src":134729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134731,134732],{},"复制：",[1448,134734],{"style":126389,"src":134735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134737,134738],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[53,134740,134741],{"start":1186},[56,134742,134743],{},"代码展示：",[90,134745,134746],{"className":126533,"code":134552,"language":126535,"meta":21,"style":21},[96,134747,134748,134752,134758,134768,134782,134804,134822,134840,134858,134862,134868,134878,134888],{"__ignoreMap":21},[99,134749,134750],{"class":101,"line":102},[99,134751,134559],{"class":168},[99,134753,134754,134756],{"class":101,"line":22},[99,134755,134564],{"class":105},[99,134757,15559],{"class":109},[99,134759,134760,134762,134764,134766],{"class":101,"line":1165},[99,134761,134571],{"class":158},[99,134763,51418],{"class":109},[99,134765,134576],{"class":214},[99,134767,1276],{"class":109},[99,134769,134770,134772,134774,134776,134778,134780],{"class":101,"line":1180},[99,134771,134583],{"class":158},[99,134773,51418],{"class":109},[99,134775,61707],{"class":158},[99,134777,110],{"class":109},[99,134779,134592],{"class":214},[99,134781,2705],{"class":109},[99,134783,134784,134786,134788,134790,134792,134794,134796,134798,134800,134802],{"class":101,"line":1186},[99,134785,134583],{"class":158},[99,134787,51418],{"class":109},[99,134789,61707],{"class":158},[99,134791,110],{"class":109},[99,134793,134607],{"class":214},[99,134795,13701],{"class":109},[99,134797,134612],{"class":158},[99,134799,110],{"class":109},[99,134801,134617],{"class":214},[99,134803,38028],{"class":109},[99,134805,134806,134808,134810,134812,134814,134816,134818,134820],{"class":101,"line":1200},[99,134807,134624],{"class":158},[99,134809,110],{"class":109},[99,134811,134629],{"class":214},[99,134813,13701],{"class":109},[99,134815,134612],{"class":158},[99,134817,110],{"class":109},[99,134819,134638],{"class":214},[99,134821,38028],{"class":109},[99,134823,134824,134826,134828,134830,134832,134834,134836,134838],{"class":101,"line":1206},[99,134825,134624],{"class":158},[99,134827,110],{"class":109},[99,134829,134649],{"class":214},[99,134831,13701],{"class":109},[99,134833,134612],{"class":158},[99,134835,110],{"class":109},[99,134837,134658],{"class":214},[99,134839,38028],{"class":109},[99,134841,134842,134844,134846,134848,134850,134852,134854,134856],{"class":101,"line":1297},[99,134843,134624],{"class":158},[99,134845,110],{"class":109},[99,134847,134669],{"class":214},[99,134849,13701],{"class":109},[99,134851,134612],{"class":158},[99,134853,110],{"class":109},[99,134855,134678],{"class":214},[99,134857,2705],{"class":109},[99,134859,134860],{"class":101,"line":1303},[99,134861,1551],{"class":109},[99,134863,134864,134866],{"class":101,"line":1315},[99,134865,134290],{"class":1949},[99,134867,15559],{"class":109},[99,134869,134870,134872,134874,134876],{"class":101,"line":1598},[99,134871,134571],{"class":158},[99,134873,51418],{"class":109},[99,134875,134576],{"class":214},[99,134877,1276],{"class":109},[99,134879,134880,134882,134884,134886],{"class":101,"line":1603},[99,134881,134705],{"class":158},[99,134883,51418],{"class":109},[99,134885,63822],{"class":158},[99,134887,1276],{"class":109},[99,134889,134890],{"class":101,"line":1609},[99,134891,1551],{"class":109},[1448,134893],{"style":126389,"src":134894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134896,134897],{},"更加细节展示：",[53,134899,134900],{},[56,134901,134902],{},"html 标签内添加小图标",[1448,134904],{"style":126389,"src":134905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[53,134907,134908],{"start":22},[56,134909,134910],{},"给标签定义字体",[90,134912,134913],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,134914,134915,134919,134933,134937],{"__ignoreMap":21},[99,134916,134917],{"class":101,"line":102},[99,134918,130644],{"class":168},[99,134920,134921,134923,134925,134927,134929,134931],{"class":101,"line":22},[99,134922,1020],{"class":109},[99,134924,51592],{"class":51281},[99,134926,53467],{"class":1949},[99,134928,155],{"class":109},[99,134930,130657],{"class":214},[99,134932,51288],{"class":109},[99,134934,134935],{"class":101,"line":1165},[99,134936,130664],{"class":109},[99,134938,134939,134941,134943],{"class":101,"line":1180},[99,134940,51766],{"class":109},[99,134942,51592],{"class":51281},[99,134944,51288],{"class":109},[14,134946,134947],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1448,134949],{"style":126389,"src":134950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[70,134952,134954],{"id":134953},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134956,134957],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134959,134960,134961,134964],{},"把压缩包里面的 ",[259,134962,134963],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134966,134967],{},"打开网站，点下方：",[1448,134969],{"style":126389,"src":134970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1448,134972],{"style":126389,"src":134973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1448,134975],{"style":126389,"src":134976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134978,134979],{},"点yes重新加载",[14,134981,134982],{},"然后重复之前的操作就可以实现了",[14,134984,134985],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[70,134987,134989],{"id":134988},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1448,134991],{"style":126389,"src":134992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5113,134994,134995],{},"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":21,"searchDepth":22,"depth":22,"links":134997},[134998,135004,135009],{"id":133601,"depth":22,"text":133602,"children":134999},[135000,135001,135002,135003],{"id":133613,"depth":1165,"text":133614},{"id":133642,"depth":1165,"text":133643},{"id":133670,"depth":1165,"text":133671},{"id":133728,"depth":1165,"text":133729},{"id":134200,"depth":22,"text":134201,"children":135005},[135006,135007,135008],{"id":134204,"depth":1165,"text":134205},{"id":134249,"depth":1165,"text":134250},{"id":134265,"depth":1165,"text":134266},{"id":134365,"depth":22,"text":134366,"children":135010},[135011,135012,135013,135014,135015,135016],{"id":134369,"depth":1165,"text":134370},{"id":134403,"depth":1165,"text":134404},{"id":134426,"depth":1165,"text":134427},{"id":134473,"depth":1165,"text":134474},{"id":134953,"depth":1165,"text":134954},{"id":134988,"depth":1165,"text":134989},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133593,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135023,"title":135024,"body":135025,"description":23364,"extension":24,"meta":136252,"navigation":26,"path":136253,"seo":136254,"stem":136255,"__hash__":136256},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135026,"toc":136233},[135027,135030,135034,135037,135051,135119,135149,135152,135156,135160,135262,135309,135313,135316,135319,135353,135356,135359,135362,135365,135368,135371,135374,135376,135379,135382,135385,135388,135391,135394,135397,135425,135428,135432,135435,135442,135445,135448,135474,135477,135481,135484,135487,135494,135498,135501,135503,135535,135538,135541,135553,135559,135562,135565,135568,135570,135574,135577,135580,135583,135628,135632,135634,135637,135644,135686,135689,135693,135698,135712,135716,135719,135722,135725,135728,135731,135765,135768,135771,135825,135828,135831,135834,135837,135889,135892,135895,135944,135948,135950,135953,135956,135959,135962,135965,136023,136026,136032,136035,136038,136070,136073,136077,136081,136084,136116,136120,136123,136167,136171,136174,136177,136180,136183,136186,136189,136192,136194,136197,136199,136202,136205,136208,136211,136216,136219,136221,136224,136227,136230],[10,135028,135024],{"id":135029},"_13-界面样式与布局技巧",[41,135031,135033],{"id":135032},"_131-css三角","13.1 css三角",[14,135035,135036],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1117,135038,135039,135042,135045,135048],{},[56,135040,135041],{},"用css 边框可以模拟三角效果",[56,135043,135044],{},"宽度高度为0",[56,135046,135047],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[56,135049,135050],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[90,135052,135054],{"className":126533,"code":135053,"language":126535,"meta":21,"style":21},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[96,135055,135056,135061,135068,135078,135088,135104,135115],{"__ignoreMap":21},[99,135057,135058],{"class":101,"line":102},[99,135059,135060],{"class":168},"\u002F* CSS 实现三角形 *\u002F\n",[99,135062,135063,135066],{"class":101,"line":22},[99,135064,135065],{"class":1949},".triangle",[99,135067,15559],{"class":109},[99,135069,135070,135072,135074,135076],{"class":101,"line":1165},[99,135071,70549],{"class":158},[99,135073,51418],{"class":109},[99,135075,301],{"class":158},[99,135077,1276],{"class":109},[99,135079,135080,135082,135084,135086],{"class":101,"line":1180},[99,135081,70769],{"class":158},[99,135083,51418],{"class":109},[99,135085,301],{"class":158},[99,135087,1276],{"class":109},[99,135089,135090,135092,135094,135096,135098,135100,135102],{"class":101,"line":1186},[99,135091,70877],{"class":158},[99,135093,51418],{"class":109},[99,135095,556],{"class":158},[99,135097,51473],{"class":105},[99,135099,51502],{"class":158},[99,135101,63972],{"class":158},[99,135103,1276],{"class":109},[99,135105,135106,135109,135111,135113],{"class":101,"line":1200},[99,135107,135108],{"class":158},"  border-bottom-color",[99,135110,51418],{"class":109},[99,135112,62350],{"class":158},[99,135114,1276],{"class":109},[99,135116,135117],{"class":101,"line":1206},[99,135118,1551],{"class":109},[90,135120,135121],{"className":126533,"code":130690,"language":126535,"meta":21,"style":21},[96,135122,135123,135129,135145],{"__ignoreMap":21},[99,135124,135125,135127],{"class":101,"line":102},[99,135126,51592],{"class":51281},[99,135128,15559],{"class":109},[99,135130,135131,135133,135135,135137,135139,135141,135143],{"class":101,"line":22},[99,135132,70877],{"class":158},[99,135134,51418],{"class":109},[99,135136,327],{"class":158},[99,135138,51473],{"class":105},[99,135140,51502],{"class":158},[99,135142,129925],{"class":158},[99,135144,1276],{"class":109},[99,135146,135147],{"class":101,"line":1165},[99,135148,1551],{"class":109},[1448,135150],{"style":126389,"src":135151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[41,135153,135155],{"id":135154},"_132-css用户界面样式","13.2 css用户界面样式",[70,135157,135159],{"id":135158},"_1321-鼠标样式","13.2.1 鼠标样式",[90,135161,135163],{"className":126533,"code":135162,"language":126535,"meta":21,"style":21},"\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",[96,135164,135165,135170,135189,135207,135226,135243],{"__ignoreMap":21},[99,135166,135167],{"class":101,"line":102},[99,135168,135169],{"class":168},"\u002F* 鼠标样式 *\u002F\n",[99,135171,135172,135174,135176,135179,135181,135183,135186],{"class":101,"line":22},[99,135173,51592],{"class":51281},[99,135175,79788],{"class":109},[99,135177,135178],{"class":158},"cursor",[99,135180,51418],{"class":109},[99,135182,62011],{"class":158},[99,135184,135185],{"class":109},"; }   ",[99,135187,135188],{"class":168},"\u002F* 手型 *\u002F\n",[99,135190,135191,135193,135195,135197,135199,135202,135204],{"class":101,"line":1165},[99,135192,51592],{"class":51281},[99,135194,79788],{"class":109},[99,135196,135178],{"class":158},[99,135198,51418],{"class":109},[99,135200,135201],{"class":158},"default",[99,135203,135185],{"class":109},[99,135205,135206],{"class":168},"\u002F* 默认 *\u002F\n",[99,135208,135209,135211,135213,135215,135217,135220,135223],{"class":101,"line":1180},[99,135210,51592],{"class":51281},[99,135212,79788],{"class":109},[99,135214,135178],{"class":158},[99,135216,51418],{"class":109},[99,135218,135219],{"class":158},"move",[99,135221,135222],{"class":109},"; }      ",[99,135224,135225],{"class":168},"\u002F* 移动 *\u002F\n",[99,135227,135228,135230,135232,135234,135236,135238,135240],{"class":101,"line":1186},[99,135229,51592],{"class":51281},[99,135231,79788],{"class":109},[99,135233,135178],{"class":158},[99,135235,51418],{"class":109},[99,135237,5174],{"class":158},[99,135239,135222],{"class":109},[99,135241,135242],{"class":168},"\u002F* 文本 *\u002F\n",[99,135244,135245,135247,135249,135251,135253,135256,135259],{"class":101,"line":1200},[99,135246,51592],{"class":51281},[99,135248,79788],{"class":109},[99,135250,135178],{"class":158},[99,135252,51418],{"class":109},[99,135254,135255],{"class":158},"not-allowed",[99,135257,135258],{"class":109},"; } ",[99,135260,135261],{"class":168},"\u002F* 禁止 *\u002F\n",[247,135263,135264,135272],{},[250,135265,135266],{},[253,135267,135268,135270],{},[256,135269,126997],{"align":23724},[256,135271,27470],{"align":23724},[294,135273,135274,135281,135288,135295,135302],{},[253,135275,135276,135278],{},[299,135277,135201],{"align":23724},[299,135279,135280],{"align":23724},"小白 默认",[253,135282,135283,135285],{},[299,135284,62011],{"align":23724},[299,135286,135287],{"align":23724},"小手",[253,135289,135290,135292],{},[299,135291,135219],{"align":23724},[299,135293,135294],{"align":23724},"移动",[253,135296,135297,135299],{},[299,135298,5174],{"align":23724},[299,135300,135301],{"align":23724},"文本",[253,135303,135304,135306],{},[299,135305,135255],{"align":23724},[299,135307,135308],{"align":23724},"禁止",[70,135310,135312],{"id":135311},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135314,135315],{},"去除表单轮廓线",[14,135317,135318],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[90,135320,135321],{"className":126533,"code":129897,"language":126535,"meta":21,"style":21},[96,135322,135323,135327,135333,135349],{"__ignoreMap":21},[99,135324,135325],{"class":101,"line":102},[99,135326,129904],{"class":168},[99,135328,135329,135331],{"class":101,"line":22},[99,135330,51592],{"class":51281},[99,135332,15559],{"class":109},[99,135334,135335,135337,135339,135341,135343,135345,135347],{"class":101,"line":1165},[99,135336,70877],{"class":158},[99,135338,51418],{"class":109},[99,135340,327],{"class":158},[99,135342,51473],{"class":105},[99,135344,51502],{"class":158},[99,135346,129925],{"class":158},[99,135348,1276],{"class":109},[99,135350,135351],{"class":101,"line":1180},[99,135352,1551],{"class":109},[14,135354,135355],{},"文本域：",[1448,135357],{"style":126389,"src":135358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135360,135361],{},"此时会有一个空白区域",[1448,135363],{"style":126389,"src":135364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135366,135367],{},"写在同一行就不会出现这个问题",[1448,135369],{"style":126389,"src":135370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135372,135373],{},"文本域是行内块元素，一定记住！！！",[14,135375,98214],{},[1448,135377],{"style":126389,"src":135378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135380,135381],{},"文本域尽量放在一行",[14,135383,135384],{},"知识回顾：cols是列，rols是行",[1448,135386],{"style":126389,"src":135387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135389,135390],{},"它可以进行拖动，显然这是我们不愿意看到的",[1448,135392],{"style":126389,"src":135393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135395,135396],{},"使用resize进行解决",[90,135398,135400],{"className":126533,"code":135399,"language":126535,"meta":21,"style":21},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[96,135401,135402,135408,135421],{"__ignoreMap":21},[99,135403,135404,135406],{"class":101,"line":102},[99,135405,53802],{"class":51281},[99,135407,15559],{"class":109},[99,135409,135410,135412,135414,135416,135418],{"class":101,"line":22},[99,135411,70779],{"class":158},[99,135413,51418],{"class":109},[99,135415,54718],{"class":158},[99,135417,130396],{"class":109},[99,135419,135420],{"class":168},"\u002F* 取消表单轮廓线 *\u002F\n",[99,135422,135423],{"class":101,"line":1165},[99,135424,1551],{"class":109},[14,135426,135427],{},"此时就无法通过右下方实现拖动了",[70,135429,135431],{"id":135430},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135433,135434],{},"实现一个盒子中的文字和图片对齐",[14,135436,135437,135438,135441],{},"用于设置一个元素的 ",[259,135439,135440],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135443,135444],{},"图片和文字默认是基线对齐",[1448,135446],{"style":126389,"src":135447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[90,135449,135450],{"className":126533,"code":135399,"language":126535,"meta":21,"style":21},[96,135451,135452,135458,135470],{"__ignoreMap":21},[99,135453,135454,135456],{"class":101,"line":102},[99,135455,53802],{"class":51281},[99,135457,15559],{"class":109},[99,135459,135460,135462,135464,135466,135468],{"class":101,"line":22},[99,135461,70779],{"class":158},[99,135463,51418],{"class":109},[99,135465,54718],{"class":158},[99,135467,130396],{"class":109},[99,135469,135420],{"class":168},[99,135471,135472],{"class":101,"line":1165},[99,135473,1551],{"class":109},[1448,135475],{"style":126389,"src":135476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21985,135478,135480],{"id":135479},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135482,135483],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1448,135485],{"style":126389,"src":135486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135488,135489,135490,135493],{},"此时可以给图片、表单这些行内块元素的 ",[259,135491,135492],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21985,135495,135497],{"id":135496},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135499,135500],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135502,14620],{},[90,135504,135506],{"className":126533,"code":135505,"language":126535,"meta":21,"style":21},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[96,135507,135508,135513,135519,135531],{"__ignoreMap":21},[99,135509,135510],{"class":101,"line":102},[99,135511,135512],{"class":168},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[99,135514,135515,135517],{"class":101,"line":22},[99,135516,1448],{"class":51281},[99,135518,15559],{"class":109},[99,135520,135521,135524,135526,135529],{"class":101,"line":1165},[99,135522,135523],{"class":158},"  vertical-align",[99,135525,51418],{"class":109},[99,135527,135528],{"class":158},"middle",[99,135530,1276],{"class":109},[99,135532,135533],{"class":101,"line":1180},[99,135534,1551],{"class":109},[1448,135536],{"style":126389,"src":135537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135539,135540],{},"主要解决方法有两种：",[53,135542,135543],{},[56,135544,135545,135548,135549,135552],{},[259,135546,135547],{},"给图片"," 添加 ",[259,135550,135551],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135554,135555,135556],{},"2.把图片转换为块级元素 ",[259,135557,135558],{},"display: block",[14,135560,135561],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135563,135564],{},"img {",[14,135566,135567],{},"vertical-align:middle;",[14,135569,1056],{},[70,135571,135573],{"id":135572},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135575,135576],{},"效果：",[1448,135578],{"style":126389,"src":135579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135581,135582],{},"单行文本溢出显示省略号--必须满足三个条件：",[90,135584,135586],{"className":126533,"code":135585,"language":126535,"meta":21,"style":21},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[96,135587,135588,135593,135599,135609,135614,135624],{"__ignoreMap":21},[99,135589,135590],{"class":101,"line":102},[99,135591,135592],{"class":168},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[99,135594,135595,135597],{"class":101,"line":22},[99,135596,1448],{"class":51281},[99,135598,15559],{"class":109},[99,135600,135601,135603,135605,135607],{"class":101,"line":1165},[99,135602,135523],{"class":158},[99,135604,51418],{"class":109},[99,135606,135528],{"class":158},[99,135608,1276],{"class":109},[99,135610,135611],{"class":101,"line":1180},[99,135612,135613],{"class":168},"  \u002F* 或 *\u002F\n",[99,135615,135616,135618,135620,135622],{"class":101,"line":1186},[99,135617,128149],{"class":158},[99,135619,51418],{"class":109},[99,135621,60850],{"class":158},[99,135623,1276],{"class":109},[99,135625,135626],{"class":101,"line":1200},[99,135627,1551],{"class":109},[70,135629,135631],{"id":135630},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135633,135576],{},[1448,135635],{"style":126389,"src":135636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135638,135639,135640,135643],{},"多行文本溢出显示省略号， ",[259,135641,135642],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[90,135645,135646],{"className":126533,"code":135585,"language":126535,"meta":21,"style":21},[96,135647,135648,135652,135658,135668,135672,135682],{"__ignoreMap":21},[99,135649,135650],{"class":101,"line":102},[99,135651,135592],{"class":168},[99,135653,135654,135656],{"class":101,"line":22},[99,135655,1448],{"class":51281},[99,135657,15559],{"class":109},[99,135659,135660,135662,135664,135666],{"class":101,"line":1165},[99,135661,135523],{"class":158},[99,135663,51418],{"class":109},[99,135665,135528],{"class":158},[99,135667,1276],{"class":109},[99,135669,135670],{"class":101,"line":1180},[99,135671,135613],{"class":168},[99,135673,135674,135676,135678,135680],{"class":101,"line":1186},[99,135675,128149],{"class":158},[99,135677,51418],{"class":109},[99,135679,60850],{"class":158},[99,135681,1276],{"class":109},[99,135683,135684],{"class":101,"line":1200},[99,135685,1551],{"class":109},[14,135687,135688],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[41,135690,135692],{"id":135691},"_133-常见布局技巧","13.3 常见布局技巧",[14,135694,135695],{},[259,135696,135697],{},"巧妙利用一个技术更快更好的布局：",[53,135699,135700,135703,135706,135709],{},[56,135701,135702],{},"margin负值的运用",[56,135704,135705],{},"文字围绕浮动元素",[56,135707,135708],{},"行内块的巧妙运用",[56,135710,135711],{},"CSS三角强化",[70,135713,135715],{"id":135714},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135717,135718],{},"应用场景：",[1448,135720],{"style":126389,"src":135721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1448,135723],{"style":126389,"src":135724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135726,135727],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135729,135730],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[90,135732,135733],{"className":126533,"code":129897,"language":126535,"meta":21,"style":21},[96,135734,135735,135739,135745,135761],{"__ignoreMap":21},[99,135736,135737],{"class":101,"line":102},[99,135738,129904],{"class":168},[99,135740,135741,135743],{"class":101,"line":22},[99,135742,51592],{"class":51281},[99,135744,15559],{"class":109},[99,135746,135747,135749,135751,135753,135755,135757,135759],{"class":101,"line":1165},[99,135748,70877],{"class":158},[99,135750,51418],{"class":109},[99,135752,327],{"class":158},[99,135754,51473],{"class":105},[99,135756,51502],{"class":158},[99,135758,129925],{"class":158},[99,135760,1276],{"class":109},[99,135762,135763],{"class":101,"line":1180},[99,135764,1551],{"class":109},[1448,135766],{"style":126389,"src":135767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135769,135770],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[90,135772,135774],{"className":126533,"code":135773,"language":126535,"meta":21,"style":21},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[96,135775,135776,135781,135787,135797,135809,135821],{"__ignoreMap":21},[99,135777,135778],{"class":101,"line":102},[99,135779,135780],{"class":168},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[99,135782,135783,135785],{"class":101,"line":22},[99,135784,130381],{"class":1949},[99,135786,15559],{"class":109},[99,135788,135789,135791,135793,135795],{"class":101,"line":1165},[99,135790,132339],{"class":158},[99,135792,51418],{"class":109},[99,135794,54745],{"class":158},[99,135796,1276],{"class":109},[99,135798,135799,135801,135803,135805,135807],{"class":101,"line":1180},[99,135800,132353],{"class":158},[99,135802,51418],{"class":109},[99,135804,556],{"class":158},[99,135806,51473],{"class":105},[99,135808,1276],{"class":109},[99,135810,135811,135813,135815,135817,135819],{"class":101,"line":1186},[99,135812,132370],{"class":158},[99,135814,51418],{"class":109},[99,135816,810],{"class":158},[99,135818,51473],{"class":105},[99,135820,1276],{"class":109},[99,135822,135823],{"class":101,"line":1200},[99,135824,1551],{"class":109},[14,135826,135827],{},"加上上述代码会发现：",[1448,135829],{"style":126389,"src":135830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135832,135833],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135835,135836],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[90,135838,135839],{"className":126533,"code":135773,"language":126535,"meta":21,"style":21},[96,135840,135841,135845,135851,135861,135873,135885],{"__ignoreMap":21},[99,135842,135843],{"class":101,"line":102},[99,135844,135780],{"class":168},[99,135846,135847,135849],{"class":101,"line":22},[99,135848,130381],{"class":1949},[99,135850,15559],{"class":109},[99,135852,135853,135855,135857,135859],{"class":101,"line":1165},[99,135854,132339],{"class":158},[99,135856,51418],{"class":109},[99,135858,54745],{"class":158},[99,135860,1276],{"class":109},[99,135862,135863,135865,135867,135869,135871],{"class":101,"line":1180},[99,135864,132353],{"class":158},[99,135866,51418],{"class":109},[99,135868,556],{"class":158},[99,135870,51473],{"class":105},[99,135872,1276],{"class":109},[99,135874,135875,135877,135879,135881,135883],{"class":101,"line":1186},[99,135876,132370],{"class":158},[99,135878,51418],{"class":109},[99,135880,810],{"class":158},[99,135882,51473],{"class":105},[99,135884,1276],{"class":109},[99,135886,135887],{"class":101,"line":1200},[99,135888,1551],{"class":109},[14,135890,135891],{},"解决方式2：",[14,135893,135894],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[90,135896,135898],{"className":126533,"code":135897,"language":126535,"meta":21,"style":21},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[96,135899,135900,135906,135916,135928,135940],{"__ignoreMap":21},[99,135901,135902,135904],{"class":101,"line":102},[99,135903,51592],{"class":51281},[99,135905,15559],{"class":109},[99,135907,135908,135910,135912,135914],{"class":101,"line":22},[99,135909,132339],{"class":158},[99,135911,51418],{"class":109},[99,135913,54745],{"class":158},[99,135915,1276],{"class":109},[99,135917,135918,135920,135922,135924,135926],{"class":101,"line":1165},[99,135919,132353],{"class":158},[99,135921,51418],{"class":109},[99,135923,556],{"class":158},[99,135925,51473],{"class":105},[99,135927,1276],{"class":109},[99,135929,135930,135932,135934,135936,135938],{"class":101,"line":1180},[99,135931,132370],{"class":158},[99,135933,51418],{"class":109},[99,135935,810],{"class":158},[99,135937,51473],{"class":105},[99,135939,1276],{"class":109},[99,135941,135942],{"class":101,"line":1186},[99,135943,1551],{"class":109},[70,135945,135947],{"id":135946},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135949,135718],{},[1448,135951],{"style":126389,"src":135952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135954,135955],{},"实现结构图：",[1448,135957],{"style":126389,"src":135958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135960,135961],{},"巧妙运用浮动元素不会压住文字的特性",[14,135963,135964],{},"代码显示：",[90,135966,135968],{"className":126533,"code":135967,"language":126535,"meta":21,"style":21},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[96,135969,135970,135976,135986,135990,135995,135999,136005,136019],{"__ignoreMap":21},[99,135971,135972,135974],{"class":101,"line":102},[99,135973,130381],{"class":1949},[99,135975,15559],{"class":109},[99,135977,135978,135980,135982,135984],{"class":101,"line":22},[99,135979,131013],{"class":158},[99,135981,51418],{"class":109},[99,135983,23724],{"class":158},[99,135985,1276],{"class":109},[99,135987,135988],{"class":101,"line":1165},[99,135989,1551],{"class":109},[99,135991,135992],{"class":101,"line":1180},[99,135993,135994],{"class":109},"```Css\n",[99,135996,135997],{"class":101,"line":1186},[99,135998,130376],{"class":168},[99,136000,136001,136003],{"class":101,"line":1200},[99,136002,130381],{"class":1949},[99,136004,15559],{"class":109},[99,136006,136007,136009,136011,136013,136015,136017],{"class":101,"line":1206},[99,136008,70451],{"class":158},[99,136010,51418],{"class":109},[99,136012,301],{"class":158},[99,136014,51537],{"class":158},[99,136016,130396],{"class":109},[99,136018,130399],{"class":168},[99,136020,136021],{"class":101,"line":1297},[99,136022,1551],{"class":109},[14,136024,136025],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[90,136027,136030],{"className":136028,"code":136029,"language":5174},[5172],"\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",[96,136031,136029],{"__ignoreMap":21},[1448,136033],{"style":126389,"src":136034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136036,136037],{},"最终展示结果：",[90,136039,136040],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},[96,136041,136042,136046,136052,136066],{"__ignoreMap":21},[99,136043,136044],{"class":101,"line":102},[99,136045,130376],{"class":168},[99,136047,136048,136050],{"class":101,"line":22},[99,136049,130381],{"class":1949},[99,136051,15559],{"class":109},[99,136053,136054,136056,136058,136060,136062,136064],{"class":101,"line":1165},[99,136055,70451],{"class":158},[99,136057,51418],{"class":109},[99,136059,301],{"class":158},[99,136061,51537],{"class":158},[99,136063,130396],{"class":109},[99,136065,130399],{"class":168},[99,136067,136068],{"class":101,"line":1180},[99,136069,1551],{"class":109},[1448,136071],{"style":126389,"src":136072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[41,136074,136076],{"id":136075},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[70,136078,136080],{"id":136079},"_1341-原理","13.4.1 原理",[1448,136082],{"style":126389,"src":136083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[90,136085,136086],{"className":126533,"code":130369,"language":126535,"meta":21,"style":21},[96,136087,136088,136092,136098,136112],{"__ignoreMap":21},[99,136089,136090],{"class":101,"line":102},[99,136091,130376],{"class":168},[99,136093,136094,136096],{"class":101,"line":22},[99,136095,130381],{"class":1949},[99,136097,15559],{"class":109},[99,136099,136100,136102,136104,136106,136108,136110],{"class":101,"line":1165},[99,136101,70451],{"class":158},[99,136103,51418],{"class":109},[99,136105,301],{"class":158},[99,136107,51537],{"class":158},[99,136109,130396],{"class":109},[99,136111,130399],{"class":168},[99,136113,136114],{"class":101,"line":1180},[99,136115,1551],{"class":109},[70,136117,136119],{"id":136118},"_1342-实例","13.4.2 实例",[1448,136121],{"style":126389,"src":136122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[90,136124,136125],{"className":126533,"code":130999,"language":126535,"meta":21,"style":21},[96,136126,136127,136133,136143,136147,136153,136163],{"__ignoreMap":21},[99,136128,136129,136131],{"class":101,"line":102},[99,136130,131006],{"class":1949},[99,136132,15559],{"class":109},[99,136134,136135,136137,136139,136141],{"class":101,"line":22},[99,136136,131013],{"class":158},[99,136138,51418],{"class":109},[99,136140,23724],{"class":158},[99,136142,1276],{"class":109},[99,136144,136145],{"class":101,"line":1165},[99,136146,1551],{"class":109},[99,136148,136149,136151],{"class":101,"line":1180},[99,136150,131028],{"class":1949},[99,136152,15559],{"class":109},[99,136154,136155,136157,136159,136161],{"class":101,"line":1186},[99,136156,131013],{"class":158},[99,136158,51418],{"class":109},[99,136160,72503],{"class":158},[99,136162,1276],{"class":109},[99,136164,136165],{"class":101,"line":1200},[99,136166,1551],{"class":109},[41,136168,136170],{"id":136169},"_135-css的初始化","13.5 css的初始化",[14,136172,136173],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136175,136176],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136178,136179],{},"每个网页都必须首先进行 CSS初始化。",[14,136181,136182],{},"这里我们以 京东CSS初始化代码为例。",[14,136184,136185],{},"在网页右键查看网页源代码",[14,136187,136188],{},"找到css的link引入语句",[14,136190,136191],{},"然后ctrl+f 输入body",[14,136193,77207],{},[1448,136195],{"style":126389,"src":136196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136198,77230],{},[1448,136200],{"style":126389,"src":136201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136203,136204],{},"③打开了网页上传压缩的代码",[1448,136206],{"style":126389,"src":136207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136209,136210],{},"④从body前可以查看这个网页的初始化代码",[14,136212,136213],{},[259,136214,136215],{},"Unicode编码字体：",[14,136217,136218],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136220,83188],{},[14,136222,136223],{},"黑体 \\9ED1\\4F53",[14,136225,136226],{},"宋体 \\5B8B\\4F53",[14,136228,136229],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5113,136231,136232],{},"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":21,"searchDepth":22,"depth":22,"links":136234},[136235,136236,136243,136247,136251],{"id":135032,"depth":22,"text":135033},{"id":135154,"depth":22,"text":135155,"children":136237},[136238,136239,136240,136241,136242],{"id":135158,"depth":1165,"text":135159},{"id":135311,"depth":1165,"text":135312},{"id":135430,"depth":1165,"text":135431},{"id":135572,"depth":1165,"text":135573},{"id":135630,"depth":1165,"text":135631},{"id":135691,"depth":22,"text":135692,"children":136244},[136245,136246],{"id":135714,"depth":1165,"text":135715},{"id":135946,"depth":1165,"text":135947},{"id":136075,"depth":22,"text":136076,"children":136248},[136249,136250],{"id":136079,"depth":1165,"text":136080},{"id":136118,"depth":1165,"text":136119},{"id":136169,"depth":22,"text":136170},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135024,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136258,"title":136259,"body":136260,"description":23364,"extension":24,"meta":137946,"navigation":26,"path":137947,"seo":137948,"stem":137949,"__hash__":137950},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136261,"toc":137935},[136262,136265,136269,136273,136276,136283,136286,136289,136327,136330,136332,136346,136350,136359,136363,136368,136371,136374,136377,136412,136417,136420,136450,136453,136458,136461,136464,136494,136497,136551,136554,136558,136563,136575,136578,136582,136612,136615,136620,136623,136653,136656,136660,136677,136681,136685,136688,136721,136724,136728,136731,136734,136737,136740,136743,136854,136857,136860,136863,136965,136968,136972,136976,136980,136983,137023,137026,137028,137044,137048,137051,137056,137137,137140,137143,137269,137274,137277,137285,137288,137293,137378,137381,137385,137388,137391,137395,137415,137420,137504,137507,137512,137515,137518,137596,137599,137602,137605,137608,137611,137616,137619,137622,137694,137697,137702,137705,137802,137805,137811,137814,137817,137820,137823,137826,137829,137832,137835,137839,137844,137847,137880,137885,137888,137929,137932],[10,136263,136259],{"id":136264},"_14-html5与css3新特性",[41,136266,136268],{"id":136267},"_141-html5的新特性","14.1 HTML5的新特性",[70,136270,136272],{"id":136271},"_1411-基本标签","14.1.1 基本标签",[14,136274,136275],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136277,136278,136279,136282],{},"这些新特性都有兼容性问题，基本是 ",[259,136280,136281],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136284,136285],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136287,136288],{},"现在使用的是新特性：",[1117,136290,136291,136297,136303,136309,136315,136321],{},[56,136292,136293,136296],{},[96,136294,136295],{},"\u003Cheader>"," 头部标签",[56,136298,136299,136302],{},[96,136300,136301],{},"\u003Cnav>"," 导航标签",[56,136304,136305,136308],{},[96,136306,136307],{},"\u003Carticle>"," 内容标签",[56,136310,136311,136314],{},[96,136312,136313],{},"\u003Csection>"," 定义文档某个区域",[56,136316,136317,136320],{},[96,136318,136319],{},"\u003Caside>"," 侧边栏标签",[56,136322,136323,136326],{},[96,136324,136325],{},"\u003Cfooter>"," 尾部标签",[1448,136328],{"style":126389,"src":136329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136331,139],{},[1117,136333,136334,136337,136340,136343],{},[56,136335,136336],{},"这种语义化标准主要是针对搜索引擎的",[56,136338,136339],{},"这些标签页面中可以经常使用",[56,136341,136342],{},"在IE9中，需要把这些元素转换为块级元素",[56,136344,136345],{},"移动端更喜欢使用这些标签",[70,136347,136349],{"id":136348},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136351,136352,136353,136355,136356,136358],{},"音频 ",[259,136354,28155],{}," 和视频 ",[259,136357,28164],{}," 两个标签",[21985,136360,136362],{"id":136361},"_14121-视频标签-video","14.1.2.1 视频标签- video",[53,136364,136365],{},[56,136366,136367],{},"支持格式：",[1448,136369],{"style":126389,"src":136370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136372,136373],{},"尽量使用MP4，兼容性好",[14,136375,136376],{},"用MP4就可以",[90,136378,136380],{"className":127280,"code":136379,"language":127282,"meta":21,"style":21},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[96,136381,136382],{"__ignoreMap":21},[99,136383,136384,136386,136388,136390,136392,136395,136397,136400,136403,136406,136408,136410],{"class":101,"line":102},[99,136385,1020],{"class":109},[99,136387,28164],{"class":51281},[99,136389,55220],{"class":1949},[99,136391,155],{"class":109},[99,136393,136394],{"class":214},"\"movie.mp4\"",[99,136396,92404],{"class":1949},[99,136398,136399],{"class":1949}," autoplay",[99,136401,136402],{"class":1949}," muted",[99,136404,136405],{"class":1949}," loop",[99,136407,55295],{"class":109},[99,136409,28164],{"class":51281},[99,136411,51288],{"class":109},[53,136413,136414],{"start":22},[56,136415,136416],{},"兼容写法",[14,136418,136419],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[90,136421,136422],{"className":127280,"code":136379,"language":127282,"meta":21,"style":21},[96,136423,136424],{"__ignoreMap":21},[99,136425,136426,136428,136430,136432,136434,136436,136438,136440,136442,136444,136446,136448],{"class":101,"line":102},[99,136427,1020],{"class":109},[99,136429,28164],{"class":51281},[99,136431,55220],{"class":1949},[99,136433,155],{"class":109},[99,136435,136394],{"class":214},[99,136437,92404],{"class":1949},[99,136439,136399],{"class":1949},[99,136441,136402],{"class":1949},[99,136443,136405],{"class":1949},[99,136445,55295],{"class":109},[99,136447,28164],{"class":51281},[99,136449,51288],{"class":109},[14,136451,136452],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[53,136454,136455],{"start":1165},[56,136456,136457],{},"video常用属性",[1448,136459],{"style":126389,"src":136460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136462,136463],{},"poster属性后面是跟的等待加载图片的地址",[90,136465,136466],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,136467,136468],{"__ignoreMap":21},[99,136469,136470,136472,136474,136476,136478,136480,136482,136484,136486,136488,136490,136492],{"class":101,"line":102},[99,136471,1020],{"class":109},[99,136473,1448],{"class":51281},[99,136475,55220],{"class":1949},[99,136477,155],{"class":109},[99,136479,134050],{"class":214},[99,136481,55228],{"class":1949},[99,136483,155],{"class":109},[99,136485,134057],{"class":214},[99,136487,134060],{"class":1949},[99,136489,155],{"class":109},[99,136491,134065],{"class":214},[99,136493,51288],{"class":109},[14,136495,136496],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[90,136498,136500],{"className":126533,"code":136499,"language":126535,"meta":21,"style":21},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[96,136501,136502,136507,136513,136537,136542,136547],{"__ignoreMap":21},[99,136503,136504],{"class":101,"line":102},[99,136505,136506],{"class":168},"\u002F* 2D 位移 *\u002F\n",[99,136508,136509,136511],{"class":101,"line":22},[99,136510,51592],{"class":51281},[99,136512,15559],{"class":109},[99,136514,136515,136518,136520,136523,136525,136527,136529,136531,136533,136535],{"class":101,"line":1165},[99,136516,136517],{"class":158},"  transform",[99,136519,51418],{"class":109},[99,136521,136522],{"class":158},"translate",[99,136524,110],{"class":109},[99,136526,421],{"class":158},[99,136528,51473],{"class":105},[99,136530,12422],{"class":109},[99,136532,766],{"class":158},[99,136534,51473],{"class":105},[99,136536,2705],{"class":109},[99,136538,136539],{"class":101,"line":1180},[99,136540,136541],{"class":168},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[99,136543,136544],{"class":101,"line":1186},[99,136545,136546],{"class":168},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[99,136548,136549],{"class":101,"line":1200},[99,136550,1551],{"class":109},[14,136552,136553],{},"muted:自动静音属性",[21985,136555,136557],{"id":136556},"_14122-音频标签audio","14.1.2.2 音频标签audio",[53,136559,136560],{},[56,136561,136562],{},"基本使用",[14,136564,136565,136566,136571,136572],{},"当前 ",[259,136567,136568],{},[96,136569,136570],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[259,136573,136574],{},"mp3格式",[1448,136576],{"style":126389,"src":136577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[53,136579,136580],{"start":22},[56,136581,136416],{},[90,136583,136584],{"className":127280,"code":136379,"language":127282,"meta":21,"style":21},[96,136585,136586],{"__ignoreMap":21},[99,136587,136588,136590,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610],{"class":101,"line":102},[99,136589,1020],{"class":109},[99,136591,28164],{"class":51281},[99,136593,55220],{"class":1949},[99,136595,155],{"class":109},[99,136597,136394],{"class":214},[99,136599,92404],{"class":1949},[99,136601,136399],{"class":1949},[99,136603,136402],{"class":1949},[99,136605,136405],{"class":1949},[99,136607,55295],{"class":109},[99,136609,28164],{"class":51281},[99,136611,51288],{"class":109},[14,136613,136614],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[53,136616,136617],{"start":1165},[56,136618,136619],{},"常用属性",[1448,136621],{"style":126389,"src":136622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[90,136624,136625],{"className":127280,"code":136379,"language":127282,"meta":21,"style":21},[96,136626,136627],{"__ignoreMap":21},[99,136628,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647,136649,136651],{"class":101,"line":102},[99,136630,1020],{"class":109},[99,136632,28164],{"class":51281},[99,136634,55220],{"class":1949},[99,136636,155],{"class":109},[99,136638,136394],{"class":214},[99,136640,92404],{"class":1949},[99,136642,136399],{"class":1949},[99,136644,136402],{"class":1949},[99,136646,136405],{"class":1949},[99,136648,55295],{"class":109},[99,136650,28164],{"class":51281},[99,136652,51288],{"class":109},[14,136654,136655],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21985,136657,136659],{"id":136658},"_14123-总结","14.1.2.3 总结",[1117,136661,136662,136665,136668,136671,136674],{},[56,136663,136664],{},"音频标签和视频标签使用方式基本一致",[56,136666,136667],{},"浏览器支持情况不同",[56,136669,136670],{},"谷歌浏览器把音频和视频自动播放禁止了",[56,136672,136673],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[56,136675,136676],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[70,136678,136680],{"id":136679},"_1413-表单元素","14.1.3 表单元素",[21985,136682,136684],{"id":136683},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1448,136686],{"style":126389,"src":136687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[90,136689,136691],{"className":127280,"code":136690,"language":127282,"meta":21,"style":21},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[96,136692,136693],{"__ignoreMap":21},[99,136694,136695,136697,136699,136701,136703,136705,136707,136709,136712,136714,136716,136719],{"class":101,"line":102},[99,136696,1020],{"class":109},[99,136698,53802],{"class":51281},[99,136700,53805],{"class":1949},[99,136702,155],{"class":109},[99,136704,62680],{"class":214},[99,136706,14907],{"class":1949},[99,136708,155],{"class":109},[99,136710,136711],{"class":214},"\"username\"",[99,136713,61001],{"class":1949},[99,136715,155],{"class":109},[99,136717,136718],{"class":214},"\"请输入用户名\"",[99,136720,51288],{"class":109},[1448,136722],{"style":126389,"src":136723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21985,136725,136727],{"id":136726},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1448,136729],{"style":126389,"src":136730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136732,136733],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136735,136736],{},"快捷操作：",[1448,136738],{"style":126389,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136741,136742],{},"例子1：",[90,136744,136746],{"className":127280,"code":136745,"language":127282,"meta":21,"style":21},"\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",[96,136747,136748,136771,136798,136827,136846],{"__ignoreMap":21},[99,136749,136750,136752,136754,136756,136758,136761,136764,136766,136769],{"class":101,"line":102},[99,136751,1020],{"class":109},[99,136753,66606],{"class":51281},[99,136755,66609],{"class":1949},[99,136757,155],{"class":109},[99,136759,136760],{"class":214},"\"\u002Fsubmit\"",[99,136762,136763],{"class":1949}," method",[99,136765,155],{"class":109},[99,136767,136768],{"class":214},"\"post\"",[99,136770,51288],{"class":109},[99,136772,136773,136775,136777,136779,136781,136783,136785,136787,136789,136791,136793,136796],{"class":101,"line":22},[99,136774,52125],{"class":109},[99,136776,53802],{"class":51281},[99,136778,53805],{"class":1949},[99,136780,155],{"class":109},[99,136782,62680],{"class":214},[99,136784,14907],{"class":1949},[99,136786,155],{"class":109},[99,136788,136711],{"class":214},[99,136790,61001],{"class":1949},[99,136792,155],{"class":109},[99,136794,136795],{"class":214},"\"用户名\"",[99,136797,51288],{"class":109},[99,136799,136800,136802,136804,136806,136808,136811,136813,136815,136818,136820,136822,136825],{"class":101,"line":1165},[99,136801,52125],{"class":109},[99,136803,53802],{"class":51281},[99,136805,53805],{"class":1949},[99,136807,155],{"class":109},[99,136809,136810],{"class":214},"\"password\"",[99,136812,14907],{"class":1949},[99,136814,155],{"class":109},[99,136816,136817],{"class":214},"\"pwd\"",[99,136819,61001],{"class":1949},[99,136821,155],{"class":109},[99,136823,136824],{"class":214},"\"密码\"",[99,136826,51288],{"class":109},[99,136828,136829,136831,136833,136835,136837,136839,136842,136844],{"class":101,"line":1180},[99,136830,52125],{"class":109},[99,136832,53868],{"class":51281},[99,136834,53805],{"class":1949},[99,136836,155],{"class":109},[99,136838,66629],{"class":214},[99,136840,136841],{"class":109},">提交\u003C\u002F",[99,136843,53868],{"class":51281},[99,136845,51288],{"class":109},[99,136847,136848,136850,136852],{"class":101,"line":1186},[99,136849,51766],{"class":109},[99,136851,66606],{"class":51281},[99,136853,51288],{"class":109},[1448,136855],{"style":126389,"src":136856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136858,136859],{},"value是表单域的内容",[14,136861,136862],{},"例子2：",[90,136864,136865],{"className":127280,"code":136745,"language":127282,"meta":21,"style":21},[96,136866,136867,136887,136913,136939,136957],{"__ignoreMap":21},[99,136868,136869,136871,136873,136875,136877,136879,136881,136883,136885],{"class":101,"line":102},[99,136870,1020],{"class":109},[99,136872,66606],{"class":51281},[99,136874,66609],{"class":1949},[99,136876,155],{"class":109},[99,136878,136760],{"class":214},[99,136880,136763],{"class":1949},[99,136882,155],{"class":109},[99,136884,136768],{"class":214},[99,136886,51288],{"class":109},[99,136888,136889,136891,136893,136895,136897,136899,136901,136903,136905,136907,136909,136911],{"class":101,"line":22},[99,136890,52125],{"class":109},[99,136892,53802],{"class":51281},[99,136894,53805],{"class":1949},[99,136896,155],{"class":109},[99,136898,62680],{"class":214},[99,136900,14907],{"class":1949},[99,136902,155],{"class":109},[99,136904,136711],{"class":214},[99,136906,61001],{"class":1949},[99,136908,155],{"class":109},[99,136910,136795],{"class":214},[99,136912,51288],{"class":109},[99,136914,136915,136917,136919,136921,136923,136925,136927,136929,136931,136933,136935,136937],{"class":101,"line":1165},[99,136916,52125],{"class":109},[99,136918,53802],{"class":51281},[99,136920,53805],{"class":1949},[99,136922,155],{"class":109},[99,136924,136810],{"class":214},[99,136926,14907],{"class":1949},[99,136928,155],{"class":109},[99,136930,136817],{"class":214},[99,136932,61001],{"class":1949},[99,136934,155],{"class":109},[99,136936,136824],{"class":214},[99,136938,51288],{"class":109},[99,136940,136941,136943,136945,136947,136949,136951,136953,136955],{"class":101,"line":1180},[99,136942,52125],{"class":109},[99,136944,53868],{"class":51281},[99,136946,53805],{"class":1949},[99,136948,155],{"class":109},[99,136950,66629],{"class":214},[99,136952,136841],{"class":109},[99,136954,53868],{"class":51281},[99,136956,51288],{"class":109},[99,136958,136959,136961,136963],{"class":101,"line":1186},[99,136960,51766],{"class":109},[99,136962,66606],{"class":51281},[99,136964,51288],{"class":109},[1448,136966],{"style":126389,"src":136967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[41,136969,136971],{"id":136970},"_142-css新特性","14.2 CSS新特性",[70,136973,136975],{"id":136974},"_1421-新增选择器","14.2.1 新增选择器",[21985,136977,136979],{"id":136978},"_14211-属性选择器","14.2.1.1 属性选择器",[1448,136981],{"style":126389,"src":136982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[90,136984,136986],{"className":126533,"code":136985,"language":126535,"meta":21,"style":21},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[96,136987,136988,137003,137019],{"__ignoreMap":21},[99,136989,136990,136992,136994,136996,136998,137000],{"class":101,"line":102},[99,136991,53802],{"class":51281},[99,136993,1000],{"class":109},[99,136995,103088],{"class":1949},[99,136997,155],{"class":105},[99,136999,62680],{"class":214},[99,137001,137002],{"class":109},"] {\n",[99,137004,137005,137007,137009,137011,137013,137015,137017],{"class":101,"line":22},[99,137006,70877],{"class":158},[99,137008,51418],{"class":109},[99,137010,327],{"class":158},[99,137012,51473],{"class":105},[99,137014,51502],{"class":158},[99,137016,130113],{"class":158},[99,137018,1276],{"class":109},[99,137020,137021],{"class":101,"line":1165},[99,137022,1551],{"class":109},[1448,137024],{"style":126389,"src":137025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137027,139],{},[1117,137029,137030,137033,137036,137039],{},[56,137031,137032],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[56,137034,137035],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[56,137037,137038],{},"属性选择器也可以选择出来自定义的属性",[56,137040,137041,137043],{},[259,137042,9012],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21985,137045,137047],{"id":137046},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1448,137049],{"style":126389,"src":137050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[53,137052,137053],{},[56,137054,137055],{},"fist-child",[90,137057,137059],{"className":126533,"code":137058,"language":126535,"meta":21,"style":21},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[96,137060,137061,137066,137081,137101,137119],{"__ignoreMap":21},[99,137062,137063],{"class":101,"line":102},[99,137064,137065],{"class":168},"\u002F* 属性选择器 *\u002F\n",[99,137067,137068,137070,137072,137074,137076,137078],{"class":101,"line":22},[99,137069,53802],{"class":51281},[99,137071,1000],{"class":109},[99,137073,103088],{"class":1949},[99,137075,155],{"class":105},[99,137077,62680],{"class":214},[99,137079,137080],{"class":109},"] { }\n",[99,137082,137083,137085,137087,137089,137092,137095,137098],{"class":101,"line":1165},[99,137084,53802],{"class":51281},[99,137086,1000],{"class":109},[99,137088,14681],{"class":1949},[99,137090,137091],{"class":105},"^=",[99,137093,137094],{"class":214},"\"icon\"",[99,137096,137097],{"class":109},"] { }  ",[99,137099,137100],{"class":168},"\u002F* 以 icon 开头 *\u002F\n",[99,137102,137103,137105,137107,137109,137112,137114,137116],{"class":101,"line":1180},[99,137104,53802],{"class":51281},[99,137106,1000],{"class":109},[99,137108,14681],{"class":1949},[99,137110,137111],{"class":105},"$=",[99,137113,137094],{"class":214},[99,137115,137097],{"class":109},[99,137117,137118],{"class":168},"\u002F* 以 icon 结尾 *\u002F\n",[99,137120,137121,137123,137125,137127,137130,137132,137134],{"class":101,"line":1186},[99,137122,53802],{"class":51281},[99,137124,1000],{"class":109},[99,137126,14681],{"class":1949},[99,137128,137129],{"class":105},"*=",[99,137131,137094],{"class":214},[99,137133,137097],{"class":109},[99,137135,137136],{"class":168},"\u002F* 包含 icon *\u002F\n",[14,137138,137139],{},"ul的第一个儿子文本为红色",[14,137141,137142],{},"一定要在冒号前加空格，不然就是选中所有的了",[90,137144,137146],{"className":126533,"code":137145,"language":126535,"meta":21,"style":21},".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",[96,137147,137148,137154,137164,137168,137172,137177,137190,137203,137219,137236,137253],{"__ignoreMap":21},[99,137149,137150,137152],{"class":101,"line":102},[99,137151,126824],{"class":1949},[99,137153,15559],{"class":109},[99,137155,137156,137158,137160,137162],{"class":101,"line":22},[99,137157,70886],{"class":158},[99,137159,51418],{"class":109},[99,137161,57402],{"class":158},[99,137163,1276],{"class":109},[99,137165,137166],{"class":101,"line":1165},[99,137167,1551],{"class":109},[99,137169,137170],{"class":101,"line":1180},[99,137171,135994],{"class":109},[99,137173,137174],{"class":101,"line":1186},[99,137175,137176],{"class":168},"\u002F* 结构伪类选择器 *\u002F\n",[99,137178,137179,137181,137184,137187],{"class":101,"line":1200},[99,137180,56],{"class":51281},[99,137182,137183],{"class":1949},":first-child",[99,137185,137186],{"class":109}," { }           ",[99,137188,137189],{"class":168},"\u002F* 第一个 *\u002F\n",[99,137191,137192,137194,137197,137200],{"class":101,"line":1206},[99,137193,56],{"class":51281},[99,137195,137196],{"class":1949},":last-child",[99,137198,137199],{"class":109}," { }            ",[99,137201,137202],{"class":168},"\u002F* 最后一个 *\u002F\n",[99,137204,137205,137207,137209,137211,137213,137216],{"class":101,"line":1297},[99,137206,56],{"class":51281},[99,137208,129447],{"class":1949},[99,137210,110],{"class":109},[99,137212,187],{"class":158},[99,137214,137215],{"class":109},") { }          ",[99,137217,137218],{"class":168},"\u002F* 第2个 *\u002F\n",[99,137220,137221,137223,137225,137227,137230,137233],{"class":101,"line":1303},[99,137222,56],{"class":51281},[99,137224,129447],{"class":1949},[99,137226,110],{"class":109},[99,137228,137229],{"class":158},"2n",[99,137231,137232],{"class":109},") { }         ",[99,137234,137235],{"class":168},"\u002F* 偶数 *\u002F\n",[99,137237,137238,137240,137242,137244,137247,137250],{"class":101,"line":1315},[99,137239,56],{"class":51281},[99,137241,129447],{"class":1949},[99,137243,110],{"class":109},[99,137245,137246],{"class":158},"2n+1",[99,137248,137249],{"class":109},") { }       ",[99,137251,137252],{"class":168},"\u002F* 奇数 *\u002F\n",[99,137254,137255,137257,137259,137261,137264,137266],{"class":101,"line":1598},[99,137256,56],{"class":51281},[99,137258,129447],{"class":1949},[99,137260,110],{"class":109},[99,137262,137263],{"class":158},"-n+3",[99,137265,137249],{"class":109},[99,137267,137268],{"class":168},"\u002F* 前3个 *\u002F\n",[51592,137270,137273],{"className":137271},[137272],"example","\n  示例内容\n",[14,137275,137276],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1117,137278,137279],{},[56,137280,137281,137284],{},[96,137282,137283],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137286,137287],{},"也就是说它选择的是熊大",[53,137289,137290],{"start":1200},[56,137291,137292],{},"权重",[90,137294,137296],{"className":126533,"code":137295,"language":126535,"meta":21,"style":21},"\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",[96,137297,137298,137302,137312,137322,137336,137350,137364],{"__ignoreMap":21},[99,137299,137300],{"class":101,"line":102},[99,137301,137176],{"class":168},[99,137303,137304,137306,137308,137310],{"class":101,"line":22},[99,137305,56],{"class":51281},[99,137307,137183],{"class":1949},[99,137309,137186],{"class":109},[99,137311,137189],{"class":168},[99,137313,137314,137316,137318,137320],{"class":101,"line":1165},[99,137315,56],{"class":51281},[99,137317,137196],{"class":1949},[99,137319,137199],{"class":109},[99,137321,137202],{"class":168},[99,137323,137324,137326,137328,137330,137332,137334],{"class":101,"line":1180},[99,137325,56],{"class":51281},[99,137327,129447],{"class":1949},[99,137329,110],{"class":109},[99,137331,187],{"class":158},[99,137333,137215],{"class":109},[99,137335,137218],{"class":168},[99,137337,137338,137340,137342,137344,137346,137348],{"class":101,"line":1186},[99,137339,56],{"class":51281},[99,137341,129447],{"class":1949},[99,137343,110],{"class":109},[99,137345,137229],{"class":158},[99,137347,137232],{"class":109},[99,137349,137235],{"class":168},[99,137351,137352,137354,137356,137358,137360,137362],{"class":101,"line":1200},[99,137353,56],{"class":51281},[99,137355,129447],{"class":1949},[99,137357,110],{"class":109},[99,137359,137246],{"class":158},[99,137361,137249],{"class":109},[99,137363,137252],{"class":168},[99,137365,137366,137368,137370,137372,137374,137376],{"class":101,"line":1206},[99,137367,56],{"class":51281},[99,137369,129447],{"class":1949},[99,137371,110],{"class":109},[99,137373,137263],{"class":158},[99,137375,137249],{"class":109},[99,137377,137268],{"class":168},[14,137379,137380],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21985,137382,137384],{"id":137383},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137386,137387],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1448,137389],{"style":126389,"src":137390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[53,137392,137393],{},[56,137394,139],{},[1117,137396,137397,137400,137403,137406,137409,137412],{},[56,137398,137399],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[56,137401,137402],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[56,137404,137405],{},"语法： element::before {}",[56,137407,137408],{},"before 和 after 必须有 content 属性",[56,137410,137411],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[56,137413,137414],{},"伪元素选择器和标签选择器一样，权重为 1",[53,137416,137417],{"start":22},[56,137418,137419],{},"实例",[90,137421,137422],{"className":126533,"code":137295,"language":126535,"meta":21,"style":21},[96,137423,137424,137428,137438,137448,137462,137476,137490],{"__ignoreMap":21},[99,137425,137426],{"class":101,"line":102},[99,137427,137176],{"class":168},[99,137429,137430,137432,137434,137436],{"class":101,"line":22},[99,137431,56],{"class":51281},[99,137433,137183],{"class":1949},[99,137435,137186],{"class":109},[99,137437,137189],{"class":168},[99,137439,137440,137442,137444,137446],{"class":101,"line":1165},[99,137441,56],{"class":51281},[99,137443,137196],{"class":1949},[99,137445,137199],{"class":109},[99,137447,137202],{"class":168},[99,137449,137450,137452,137454,137456,137458,137460],{"class":101,"line":1180},[99,137451,56],{"class":51281},[99,137453,129447],{"class":1949},[99,137455,110],{"class":109},[99,137457,187],{"class":158},[99,137459,137215],{"class":109},[99,137461,137218],{"class":168},[99,137463,137464,137466,137468,137470,137472,137474],{"class":101,"line":1186},[99,137465,56],{"class":51281},[99,137467,129447],{"class":1949},[99,137469,110],{"class":109},[99,137471,137229],{"class":158},[99,137473,137232],{"class":109},[99,137475,137235],{"class":168},[99,137477,137478,137480,137482,137484,137486,137488],{"class":101,"line":1200},[99,137479,56],{"class":51281},[99,137481,129447],{"class":1949},[99,137483,110],{"class":109},[99,137485,137246],{"class":158},[99,137487,137249],{"class":109},[99,137489,137252],{"class":168},[99,137491,137492,137494,137496,137498,137500,137502],{"class":101,"line":1206},[99,137493,56],{"class":51281},[99,137495,129447],{"class":1949},[99,137497,110],{"class":109},[99,137499,137263],{"class":158},[99,137501,137249],{"class":109},[99,137503,137268],{"class":168},[1448,137505],{"style":126389,"src":137506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[53,137508,137509],{"start":1165},[56,137510,137511],{},"使用场景1",[1448,137513],{"style":126389,"src":137514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137516,137517],{},"不需要再加盒子来整红色那部分了",[90,137519,137521],{"className":126533,"code":137520,"language":126535,"meta":21,"style":21},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[96,137522,137523,137528,137537,137548,137558,137562,137571,137582,137592],{"__ignoreMap":21},[99,137524,137525],{"class":101,"line":102},[99,137526,137527],{"class":168},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[99,137529,137530,137532,137535],{"class":101,"line":22},[99,137531,51592],{"class":51281},[99,137533,137534],{"class":1949},"::before",[99,137536,15559],{"class":109},[99,137538,137539,137542,137544,137546],{"class":101,"line":1165},[99,137540,137541],{"class":158},"  content",[99,137543,51418],{"class":109},[99,137545,7639],{"class":214},[99,137547,1276],{"class":109},[99,137549,137550,137552,137554,137556],{"class":101,"line":1180},[99,137551,128149],{"class":158},[99,137553,51418],{"class":109},[99,137555,60850],{"class":158},[99,137557,1276],{"class":109},[99,137559,137560],{"class":101,"line":1186},[99,137561,1551],{"class":109},[99,137563,137564,137566,137569],{"class":101,"line":1200},[99,137565,51592],{"class":51281},[99,137567,137568],{"class":1949},"::after",[99,137570,15559],{"class":109},[99,137572,137573,137575,137577,137580],{"class":101,"line":1206},[99,137574,137541],{"class":158},[99,137576,51418],{"class":109},[99,137578,137579],{"class":214},"\"→\"",[99,137581,1276],{"class":109},[99,137583,137584,137586,137588,137590],{"class":101,"line":1297},[99,137585,70886],{"class":158},[99,137587,51418],{"class":109},[99,137589,62051],{"class":158},[99,137591,1276],{"class":109},[99,137593,137594],{"class":101,"line":1303},[99,137595,1551],{"class":109},[1448,137597],{"style":126389,"src":137598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137600,137601],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1448,137603],{"style":126389,"src":137604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137606,137607],{},"但是在引用时需要先转义一下",[14,137609,137610],{},"content='\\e930'",[53,137612,137613],{"start":1180},[56,137614,137615],{},"使用场景2",[14,137617,137618],{},"仿土豆效果",[14,137620,137621],{},"通过使用伪元素选择器可以减少body中盒子的数量",[90,137623,137624],{"className":126533,"code":137520,"language":126535,"meta":21,"style":21},[96,137625,137626,137630,137638,137648,137658,137662,137670,137680,137690],{"__ignoreMap":21},[99,137627,137628],{"class":101,"line":102},[99,137629,137527],{"class":168},[99,137631,137632,137634,137636],{"class":101,"line":22},[99,137633,51592],{"class":51281},[99,137635,137534],{"class":1949},[99,137637,15559],{"class":109},[99,137639,137640,137642,137644,137646],{"class":101,"line":1165},[99,137641,137541],{"class":158},[99,137643,51418],{"class":109},[99,137645,7639],{"class":214},[99,137647,1276],{"class":109},[99,137649,137650,137652,137654,137656],{"class":101,"line":1180},[99,137651,128149],{"class":158},[99,137653,51418],{"class":109},[99,137655,60850],{"class":158},[99,137657,1276],{"class":109},[99,137659,137660],{"class":101,"line":1186},[99,137661,1551],{"class":109},[99,137663,137664,137666,137668],{"class":101,"line":1200},[99,137665,51592],{"class":51281},[99,137667,137568],{"class":1949},[99,137669,15559],{"class":109},[99,137671,137672,137674,137676,137678],{"class":101,"line":1206},[99,137673,137541],{"class":158},[99,137675,51418],{"class":109},[99,137677,137579],{"class":214},[99,137679,1276],{"class":109},[99,137681,137682,137684,137686,137688],{"class":101,"line":1297},[99,137683,70886],{"class":158},[99,137685,51418],{"class":109},[99,137687,62051],{"class":158},[99,137689,1276],{"class":109},[99,137691,137692],{"class":101,"line":1303},[99,137693,1551],{"class":109},[1448,137695],{"style":126389,"src":137696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[53,137698,137699],{"start":1186},[56,137700,137701],{},"使用场景3",[14,137703,137704],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[90,137706,137708],{"className":126533,"code":137707,"language":126535,"meta":21,"style":21},".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",[96,137709,137710,137716,137726,137730,137734,137738,137746,137756,137766,137770,137778,137788,137798],{"__ignoreMap":21},[99,137711,137712,137714],{"class":101,"line":102},[99,137713,130381],{"class":1949},[99,137715,15559],{"class":109},[99,137717,137718,137720,137722,137724],{"class":101,"line":22},[99,137719,131013],{"class":158},[99,137721,51418],{"class":109},[99,137723,23724],{"class":158},[99,137725,1276],{"class":109},[99,137727,137728],{"class":101,"line":1165},[99,137729,1551],{"class":109},[99,137731,137732],{"class":101,"line":1180},[99,137733,135994],{"class":109},[99,137735,137736],{"class":101,"line":1186},[99,137737,137527],{"class":168},[99,137739,137740,137742,137744],{"class":101,"line":1200},[99,137741,51592],{"class":51281},[99,137743,137534],{"class":1949},[99,137745,15559],{"class":109},[99,137747,137748,137750,137752,137754],{"class":101,"line":1206},[99,137749,137541],{"class":158},[99,137751,51418],{"class":109},[99,137753,7639],{"class":214},[99,137755,1276],{"class":109},[99,137757,137758,137760,137762,137764],{"class":101,"line":1297},[99,137759,128149],{"class":158},[99,137761,51418],{"class":109},[99,137763,60850],{"class":158},[99,137765,1276],{"class":109},[99,137767,137768],{"class":101,"line":1303},[99,137769,1551],{"class":109},[99,137771,137772,137774,137776],{"class":101,"line":1315},[99,137773,51592],{"class":51281},[99,137775,137568],{"class":1949},[99,137777,15559],{"class":109},[99,137779,137780,137782,137784,137786],{"class":101,"line":1598},[99,137781,137541],{"class":158},[99,137783,51418],{"class":109},[99,137785,137579],{"class":214},[99,137787,1276],{"class":109},[99,137789,137790,137792,137794,137796],{"class":101,"line":1603},[99,137791,70886],{"class":158},[99,137793,51418],{"class":109},[99,137795,62051],{"class":158},[99,137797,1276],{"class":109},[99,137799,137800],{"class":101,"line":1609},[99,137801,1551],{"class":109},[14,137803,137804],{},"div {\nmargin: 0 auto;\n}",[90,137806,137809],{"className":137807,"code":137808,"language":5174},[5172],"\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",[96,137810,137808],{"__ignoreMap":21},[14,137812,137813],{},"如果想让多个元素都发生变化",[14,137815,137816],{},"不能如下操作：",[14,137818,137819],{},"transition: width 2s ease 0.5s;",[14,137821,137822],{},"transition: height 2s ease 0.5s;不对！！！",[14,137824,137825],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137827,137828],{},"使用如下：加逗号隔开",[14,137830,137831],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137833,137834],{},"transition all 2s ease;",[70,137836,137838],{"id":137837},"_1426-过渡练习","14.2.6 过渡练习",[53,137840,137841],{},[56,137842,137843],{},"进度条",[1448,137845],{"style":126389,"src":137846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[90,137848,137850],{"className":126533,"code":137849,"language":126535,"meta":21,"style":21},"div {\n  transition: all 0.3s ease;\n}\n",[96,137851,137852,137858,137876],{"__ignoreMap":21},[99,137853,137854,137856],{"class":101,"line":102},[99,137855,51592],{"class":51281},[99,137857,15559],{"class":109},[99,137859,137860,137863,137865,137867,137870,137872,137874],{"class":101,"line":22},[99,137861,137862],{"class":158},"  transition",[99,137864,51418],{"class":109},[99,137866,28102],{"class":158},[99,137868,137869],{"class":158}," 0.3",[99,137871,805],{"class":105},[99,137873,78661],{"class":158},[99,137875,1276],{"class":109},[99,137877,137878],{"class":101,"line":1165},[99,137879,1551],{"class":109},[53,137881,137882],{"start":22},[56,137883,137884],{},"小米logo",[14,137886,137887],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[90,137889,137891],{"className":126533,"code":137890,"language":126535,"meta":21,"style":21},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[96,137892,137893,137898,137904,137920,137925],{"__ignoreMap":21},[99,137894,137895],{"class":101,"line":102},[99,137896,137897],{"class":168},"\u002F* CSS3 过渡 *\u002F\n",[99,137899,137900,137902],{"class":101,"line":22},[99,137901,51592],{"class":51281},[99,137903,15559],{"class":109},[99,137905,137906,137908,137910,137912,137914,137916,137918],{"class":101,"line":1165},[99,137907,137862],{"class":158},[99,137909,51418],{"class":109},[99,137911,28102],{"class":158},[99,137913,137869],{"class":158},[99,137915,805],{"class":105},[99,137917,78661],{"class":158},[99,137919,1276],{"class":109},[99,137921,137922],{"class":101,"line":1180},[99,137923,137924],{"class":168},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[99,137926,137927],{"class":101,"line":1186},[99,137928,1551],{"class":109},[14,137930,137931],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5113,137933,137934],{},"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":21,"searchDepth":22,"depth":22,"links":137936},[137937,137942],{"id":136267,"depth":22,"text":136268,"children":137938},[137939,137940,137941],{"id":136271,"depth":1165,"text":136272},{"id":136348,"depth":1165,"text":136349},{"id":136679,"depth":1165,"text":136680},{"id":136970,"depth":22,"text":136971,"children":137943},[137944,137945],{"id":136974,"depth":1165,"text":136975},{"id":137837,"depth":1165,"text":137838},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136259,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137952,"title":137953,"body":137954,"description":23364,"extension":24,"meta":139698,"navigation":26,"path":139699,"seo":139700,"stem":139701,"__hash__":139702},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137955,"toc":139679},[137956,137959,137963,137966,137972,137978,137982,137984,137987,137990,137993,137996,137999,138002,138005,138009,138013,138016,138019,138022,138026,138029,138032,138037,138040,138043,138046,138050,138053,138062,138065,138068,138072,138075,138078,138083,138090,138104,138112,138119,138124,138127,138130,138133,138140,138144,138150,138156,138159,138162,138167,138173,138175,138183,138188,138191,138197,138199,138204,138209,138212,138214,138219,138222,138227,138232,138266,138270,138274,138277,138281,138284,138370,138373,138410,138413,138449,138453,138458,138471,138525,138527,138555,138557,138585,138591,138605,138607,138651,138653,138697,138700,138707,138718,138720,138747,138749,138775,138782,138798,138800,138894,138896,138990,138997,139000,139005,139011,139085,139088,139090,139126,139128,139164,139167,139174,139193,139196,139199,139201,139226,139228,139252,139255,139258,139288,139292,139295,139358,139360,139426,139428,139492,139495,139527,139529,139555,139557,139583,139586,139617,139619,139645,139647,139673,139676],[10,137957,137953],{"id":137958},"_15-品优购项目上篇-搭建与公共模块",[41,137960,137962],{"id":137961},"_151-项目规划","15.1 项目规划",[1448,137964],{"style":126389,"src":137965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137967,137968,137971],{},[259,137969,137970],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137973,137974,137977],{},[259,137975,137976],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[41,137979,137981],{"id":137980},"_152-项目介绍","15.2 项目介绍",[14,137983,137970],{},[1448,137985],{"style":126389,"src":137986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,137988,137989],{},"主页：",[1448,137991],{"style":126389,"src":137992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,137994,137995],{},"列表页：",[1448,137997],{"style":126389,"src":137998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138000,138001],{},"注册页：",[1448,138003],{"style":126389,"src":138004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[41,138006,138008],{"id":138007},"_153-项目搭建工作","15.3 项目搭建工作",[70,138010,138012],{"id":138011},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1448,138014],{"style":126389,"src":138015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138017,138018],{},"经常更换的图片要放到upload文件夹中",[14,138020,138021],{},"不经常换的放到images文件夹中",[70,138023,138025],{"id":138024},"_1532-创建文件如下","15.3.2 创建文件如下",[1448,138027],{"style":126389,"src":138028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1448,138030],{"style":126389,"src":138031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138033,138034],{},[259,138035,138036],{},"初始化样式：",[14,138038,138039],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138041,138042],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138044,138045],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[70,138047,138049],{"id":138048},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138051,138052],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138054,138055,138056,138061],{},"这里最典型的应用就是 ",[259,138057,138058],{},[96,138059,138060],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1448,138063],{"style":126389,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138066,138067],{},"通过link方法来引入",[70,138069,138071],{"id":138070},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1448,138073],{"style":126389,"src":138074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138076,138077],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[53,138079,138080],{},[56,138081,138082],{},"制作favicon图标",[14,138084,138085,138086,138089],{},"①把品优购图标切成 ",[96,138087,138088],{},"png"," 图片",[14,138091,138092,138093,138095,138096,138099,138100],{},"②把 ",[96,138094,138088],{}," 图片转换为 ",[96,138097,138098],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[348,138101,138102],{"href":138102,"rel":138103},"http:\u002F\u002Fwww.bitbug.net\u002F",[23853],[53,138105,138106,138109],{"start":22},[56,138107,138108],{},"favicon图标放到网站根目录下",[56,138110,138111],{},"HTML页面引入favicon",[14,138113,138114,138115,138118],{},"在html 页面里面的 ",[96,138116,138117],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138120,138121],{},[96,138122,138123],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138125,138126],{},"复制这行代码或者在生成这个的网站进行复制",[1448,138128],{"style":126389,"src":138129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138131,138132],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138134,138135,138136],{},"例如:",[348,138137,138138],{"href":138138,"rel":138139},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23853],[70,138141,138143],{"id":138142},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138145,138146,138149],{},[259,138147,138148],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138151,138152,138155],{},[259,138153,138154],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138157,138158],{},"页面必须有三个标签用来符合 SEO 优化",[1448,138160],{"style":126389,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[53,138163,138164],{},[56,138165,138166],{},"title网站标题",[14,138168,138169,138172],{},[259,138170,138171],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138174,68771],{},[1117,138176,138177,138180],{},[56,138178,138179],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[56,138181,138182],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[53,138184,138185],{"start":22},[56,138186,138187],{},"description网站描述",[14,138189,138190],{},"简要说明我们网站主要是做什么的",[14,138192,138193,138196],{},[259,138194,138195],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138198,68771],{},[14,138200,138201],{},[96,138202,138203],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[53,138205,138206],{"start":1165},[56,138207,138208],{},"keywords关键词",[14,138210,138211],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138213,68771],{},[14,138215,138216],{},[96,138217,138218],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138220,138221],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138223,138224],{},[259,138225,138226],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[53,138228,138229],{"start":1180},[56,138230,138231],{},"代码总结",[90,138233,138234],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,138235,138236,138240,138254,138258],{"__ignoreMap":21},[99,138237,138238],{"class":101,"line":102},[99,138239,130644],{"class":168},[99,138241,138242,138244,138246,138248,138250,138252],{"class":101,"line":22},[99,138243,1020],{"class":109},[99,138245,51592],{"class":51281},[99,138247,53467],{"class":1949},[99,138249,155],{"class":109},[99,138251,130657],{"class":214},[99,138253,51288],{"class":109},[99,138255,138256],{"class":101,"line":1165},[99,138257,130664],{"class":109},[99,138259,138260,138262,138264],{"class":101,"line":1180},[99,138261,51766],{"class":109},[99,138263,51592],{"class":51281},[99,138265,51288],{"class":109},[41,138267,138269],{"id":138268},"_154-项目公共部分制作","15.4 项目公共部分制作",[70,138271,138273],{"id":138272},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1448,138275],{"style":126389,"src":138276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[70,138278,138280],{"id":138279},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138282,138283],{},"布局思路：",[1117,138285,138286,138289,138292,138314,138347],{},[56,138287,138288],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[56,138290,138291],{},"里面包含版心的盒子",[56,138293,138294,138295],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1117,138296,138297,138305,138311],{},[56,138298,138299,138300,21487,138302,138304],{},"1 号盒子 里面包含一个",[96,138301,1117],{},[96,138303,1117],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[56,138306,138307,138308,138310],{},"里面的内容是水平排列，所以需要给",[96,138309,56],{},"设置浮动",[56,138312,138313],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[56,138315,138316,138317],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1117,138318,138319,138333,138338],{},[56,138320,138321,138322,21487,138324,138326,138327,138329,138330,138332],{},"2 号盒子 里面包含一个",[96,138323,1117],{},[96,138325,1117],{},"包裹",[96,138328,56],{},"，中间的",[96,138331,1031],{},"可以用样式去设置，也可以用字符 |",[56,138334,138335,138336,138310],{},"里面内容水平排列，给",[96,138337,56],{},[56,138339,138340,138341,138343,138344,138346],{},"找到里面所有偶数的 ",[96,138342,56],{}," 设置样式（偶数的 ",[96,138345,56],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[56,138348,138349,138350],{},"需要用到字体图标",[1117,138351,138352,138358,138361,138364,138367],{},[56,138353,138354,138355],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[96,138356,138357],{},"arrow-icon",[56,138359,138360],{},"先要引入字体图片的资源",[56,138362,138363],{},"在样式里面利用 font-face 来进行声明",[56,138365,138366],{},"在伪元素的 content属性设置 图标的编码",[56,138368,138369],{},"给伪元素设置font-family属性",[14,138371,138372],{},"结构实例代码：",[90,138374,138376],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},"div::before {\n  content: \"\";\n  display: block;\n}\n",[96,138377,138378,138386,138396,138406],{"__ignoreMap":21},[99,138379,138380,138382,138384],{"class":101,"line":102},[99,138381,51592],{"class":51281},[99,138383,137534],{"class":1949},[99,138385,15559],{"class":109},[99,138387,138388,138390,138392,138394],{"class":101,"line":22},[99,138389,137541],{"class":158},[99,138391,51418],{"class":109},[99,138393,7639],{"class":214},[99,138395,1276],{"class":109},[99,138397,138398,138400,138402,138404],{"class":101,"line":1165},[99,138399,128149],{"class":158},[99,138401,51418],{"class":109},[99,138403,60850],{"class":158},[99,138405,1276],{"class":109},[99,138407,138408],{"class":101,"line":1180},[99,138409,1551],{"class":109},[14,138411,138412],{},"样式实例代码：",[90,138414,138415],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,138416,138417,138425,138435,138445],{"__ignoreMap":21},[99,138418,138419,138421,138423],{"class":101,"line":102},[99,138420,51592],{"class":51281},[99,138422,137534],{"class":1949},[99,138424,15559],{"class":109},[99,138426,138427,138429,138431,138433],{"class":101,"line":22},[99,138428,137541],{"class":158},[99,138430,51418],{"class":109},[99,138432,7639],{"class":214},[99,138434,1276],{"class":109},[99,138436,138437,138439,138441,138443],{"class":101,"line":1165},[99,138438,128149],{"class":158},[99,138440,51418],{"class":109},[99,138442,60850],{"class":158},[99,138444,1276],{"class":109},[99,138446,138447],{"class":101,"line":1180},[99,138448,1551],{"class":109},[70,138450,138452],{"id":138451},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1117,138454,138455],{},[56,138456,138457],{},"header 盒子必须要有高度",[14,138459,138460,138461,138463,138464],{},"1 号盒子是 ",[96,138462,131545],{}," 标志定位，在正常开发过程中， ",[259,138465,138466,138467,138470],{},"logo的布局其实是有讲究的，需要进行 ",[96,138468,138469],{},"logoSEO","的优化 （★★★）",[1117,138472,138473,138481,138489,138516],{},[56,138474,138475,138477,138478,138480],{},[96,138476,131545],{}," 里面首先放一个 ",[96,138479,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[56,138482,138483,138485,138486,138488],{},[96,138484,10],{}," 里面再放一个链接，可以返回首页的，把 ",[96,138487,131545],{}," 的背景图片给链接即可",[56,138490,138491,138492],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1117,138493,138494,138509],{},[56,138495,138496,138497,138500,138501,138504,138505,138508],{},"方法1：",[96,138498,138499],{},"text-indent"," 移到盒子外面（",[96,138502,138503],{},"text-indent: -9999px",") ，然后 ",[96,138506,138507],{},"overflow:hidden"," ，淘宝的做法",[56,138510,138511,138512,138515],{},"方法2：直接给 ",[96,138513,138514],{},"font-size: 0;"," 就看不到文字了，京东的做法",[56,138517,138518,138519,138521,138522,138524],{},"最后给链接一个 ",[96,138520,51388],{}," 属性，这样鼠标放到 ",[96,138523,131545],{}," 上就可以看到提示文字了",[14,138526,138372],{},[90,138528,138529],{"className":127280,"code":131766,"language":127282,"meta":21,"style":21},[96,138530,138531],{"__ignoreMap":21},[99,138532,138533,138535,138537,138539,138541,138543,138545,138547,138549,138551,138553],{"class":101,"line":102},[99,138534,1020],{"class":109},[99,138536,348],{"class":51281},[99,138538,61038],{"class":1949},[99,138540,155],{"class":109},[99,138542,131781],{"class":214},[99,138544,131784],{"class":1949},[99,138546,155],{"class":109},[99,138548,131789],{"class":214},[99,138550,131792],{"class":109},[99,138552,348],{"class":51281},[99,138554,51288],{"class":109},[14,138556,138412],{},[90,138558,138559],{"className":127280,"code":131766,"language":127282,"meta":21,"style":21},[96,138560,138561],{"__ignoreMap":21},[99,138562,138563,138565,138567,138569,138571,138573,138575,138577,138579,138581,138583],{"class":101,"line":102},[99,138564,1020],{"class":109},[99,138566,348],{"class":51281},[99,138568,61038],{"class":1949},[99,138570,155],{"class":109},[99,138572,131781],{"class":214},[99,138574,131784],{"class":1949},[99,138576,155],{"class":109},[99,138578,131789],{"class":214},[99,138580,131792],{"class":109},[99,138582,348],{"class":51281},[99,138584,51288],{"class":109},[14,138586,138587,138588,138590],{},"2 号盒子是 ",[96,138589,131558],{}," 搜索模块定位",[1117,138592,138593,138596,138599,138602],{},[56,138594,138595],{},"search盒子利用定位的方式放在对应的位置",[56,138597,138598],{},"search盒子设置绝对定位，header盒子设置相对定位",[56,138600,138601],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[56,138603,138604],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138606,138372],{},[90,138608,138609],{"className":126533,"code":131853,"language":126535,"meta":21,"style":21},[96,138610,138611,138633,138637,138647],{"__ignoreMap":21},[99,138612,138613,138615,138617,138619,138621,138623,138625,138627,138629,138631],{"class":101,"line":102},[99,138614,51592],{"class":51281},[99,138616,12422],{"class":109},[99,138618,14],{"class":51281},[99,138620,12422],{"class":109},[99,138622,10],{"class":51281},[99,138624,12422],{"class":109},[99,138626,1117],{"class":51281},[99,138628,12422],{"class":109},[99,138630,56],{"class":51281},[99,138632,15559],{"class":109},[99,138634,138635],{"class":101,"line":22},[99,138636,131882],{"class":168},[99,138638,138639,138641,138643,138645],{"class":101,"line":1165},[99,138640,128149],{"class":158},[99,138642,51418],{"class":109},[99,138644,60850],{"class":158},[99,138646,1276],{"class":109},[99,138648,138649],{"class":101,"line":1180},[99,138650,1551],{"class":109},[14,138652,138412],{},[90,138654,138655],{"className":126533,"code":131853,"language":126535,"meta":21,"style":21},[96,138656,138657,138679,138683,138693],{"__ignoreMap":21},[99,138658,138659,138661,138663,138665,138667,138669,138671,138673,138675,138677],{"class":101,"line":102},[99,138660,51592],{"class":51281},[99,138662,12422],{"class":109},[99,138664,14],{"class":51281},[99,138666,12422],{"class":109},[99,138668,10],{"class":51281},[99,138670,12422],{"class":109},[99,138672,1117],{"class":51281},[99,138674,12422],{"class":109},[99,138676,56],{"class":51281},[99,138678,15559],{"class":109},[99,138680,138681],{"class":101,"line":22},[99,138682,131882],{"class":168},[99,138684,138685,138687,138689,138691],{"class":101,"line":1165},[99,138686,128149],{"class":158},[99,138688,51418],{"class":109},[99,138690,60850],{"class":158},[99,138692,1276],{"class":109},[99,138694,138695],{"class":101,"line":1180},[99,138696,1551],{"class":109},[14,138698,138699],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138701,138702,138703,138706],{},"3 号盒子是 ",[96,138704,138705],{},"hotwords"," 热词模块定位",[1117,138708,138709,138712,138715],{},[56,138710,138711],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[56,138713,138714],{},"给里面所有的a标签设置 左右10px的外边距",[56,138716,138717],{},"给第一个a标签设置文字变红色（#c81623）",[14,138719,138372],{},[90,138721,138723],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},"div {\n  margin: 0 auto;\n}\n",[96,138724,138725,138731,138743],{"__ignoreMap":21},[99,138726,138727,138729],{"class":101,"line":102},[99,138728,51592],{"class":51281},[99,138730,15559],{"class":109},[99,138732,138733,138735,138737,138739,138741],{"class":101,"line":22},[99,138734,70451],{"class":158},[99,138736,51418],{"class":109},[99,138738,301],{"class":158},[99,138740,51537],{"class":158},[99,138742,1276],{"class":109},[99,138744,138745],{"class":101,"line":1165},[99,138746,1551],{"class":109},[14,138748,138412],{},[90,138750,138751],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,138752,138753,138759,138771],{"__ignoreMap":21},[99,138754,138755,138757],{"class":101,"line":102},[99,138756,51592],{"class":51281},[99,138758,15559],{"class":109},[99,138760,138761,138763,138765,138767,138769],{"class":101,"line":22},[99,138762,70451],{"class":158},[99,138764,51418],{"class":109},[99,138766,301],{"class":158},[99,138768,51537],{"class":158},[99,138770,1276],{"class":109},[99,138772,138773],{"class":101,"line":1165},[99,138774,1551],{"class":109},[14,138776,138777,138778,138781],{},"4 号盒子是 ",[96,138779,138780],{},"shopcar"," 购物车模块",[1117,138783,138784,138789,138792,138795],{},[56,138785,123316,138786,138788],{},[96,138787,138780],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[56,138790,138791],{},"count 统计部分用绝对定位做",[56,138793,138794],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[56,138796,138797],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138799,138372],{},[90,138801,138802],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,138803,138804,138808,138822,138826,138840,138844,138858,138862,138876,138880],{"__ignoreMap":21},[99,138805,138806],{"class":101,"line":102},[99,138807,131972],{"class":168},[99,138809,138810,138812,138814,138816,138818,138820],{"class":101,"line":22},[99,138811,131977],{"class":1949},[99,138813,79788],{"class":109},[99,138815,128893],{"class":158},[99,138817,51418],{"class":109},[99,138819,131986],{"class":158},[99,138821,129463],{"class":109},[99,138823,138824],{"class":101,"line":1165},[99,138825,131993],{"class":168},[99,138827,138828,138830,138832,138834,138836,138838],{"class":101,"line":1180},[99,138829,131998],{"class":1949},[99,138831,79788],{"class":109},[99,138833,128893],{"class":158},[99,138835,51418],{"class":109},[99,138837,54745],{"class":158},[99,138839,129463],{"class":109},[99,138841,138842],{"class":101,"line":1186},[99,138843,132013],{"class":168},[99,138845,138846,138848,138850,138852,138854,138856],{"class":101,"line":1200},[99,138847,132018],{"class":1949},[99,138849,79788],{"class":109},[99,138851,128893],{"class":158},[99,138853,51418],{"class":109},[99,138855,54812],{"class":158},[99,138857,129463],{"class":109},[99,138859,138860],{"class":101,"line":1206},[99,138861,132033],{"class":168},[99,138863,138864,138866,138868,138870,138872,138874],{"class":101,"line":1297},[99,138865,132038],{"class":1949},[99,138867,79788],{"class":109},[99,138869,128893],{"class":158},[99,138871,51418],{"class":109},[99,138873,86214],{"class":158},[99,138875,129463],{"class":109},[99,138877,138878],{"class":101,"line":1303},[99,138879,132053],{"class":168},[99,138881,138882,138884,138886,138888,138890,138892],{"class":101,"line":1315},[99,138883,132058],{"class":1949},[99,138885,79788],{"class":109},[99,138887,128893],{"class":158},[99,138889,51418],{"class":109},[99,138891,132067],{"class":158},[99,138893,129463],{"class":109},[14,138895,138412],{},[90,138897,138898],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,138899,138900,138904,138918,138922,138936,138940,138954,138958,138972,138976],{"__ignoreMap":21},[99,138901,138902],{"class":101,"line":102},[99,138903,131972],{"class":168},[99,138905,138906,138908,138910,138912,138914,138916],{"class":101,"line":22},[99,138907,131977],{"class":1949},[99,138909,79788],{"class":109},[99,138911,128893],{"class":158},[99,138913,51418],{"class":109},[99,138915,131986],{"class":158},[99,138917,129463],{"class":109},[99,138919,138920],{"class":101,"line":1165},[99,138921,131993],{"class":168},[99,138923,138924,138926,138928,138930,138932,138934],{"class":101,"line":1180},[99,138925,131998],{"class":1949},[99,138927,79788],{"class":109},[99,138929,128893],{"class":158},[99,138931,51418],{"class":109},[99,138933,54745],{"class":158},[99,138935,129463],{"class":109},[99,138937,138938],{"class":101,"line":1186},[99,138939,132013],{"class":168},[99,138941,138942,138944,138946,138948,138950,138952],{"class":101,"line":1200},[99,138943,132018],{"class":1949},[99,138945,79788],{"class":109},[99,138947,128893],{"class":158},[99,138949,51418],{"class":109},[99,138951,54812],{"class":158},[99,138953,129463],{"class":109},[99,138955,138956],{"class":101,"line":1206},[99,138957,132033],{"class":168},[99,138959,138960,138962,138964,138966,138968,138970],{"class":101,"line":1297},[99,138961,132038],{"class":1949},[99,138963,79788],{"class":109},[99,138965,128893],{"class":158},[99,138967,51418],{"class":109},[99,138969,86214],{"class":158},[99,138971,129463],{"class":109},[99,138973,138974],{"class":101,"line":1303},[99,138975,132053],{"class":168},[99,138977,138978,138980,138982,138984,138986,138988],{"class":101,"line":1315},[99,138979,132058],{"class":1949},[99,138981,79788],{"class":109},[99,138983,128893],{"class":158},[99,138985,51418],{"class":109},[99,138987,132067],{"class":158},[99,138989,129463],{"class":109},[70,138991,138993,138994,138996],{"id":138992},"_1544-nav导航模块制作","15.4.4 ",[96,138995,53694],{},"导航模块制作",[1448,138998],{"style":126389,"src":138999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139001,139002,139004],{},[96,139003,53694],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139006,139007,139008],{},"1 号盒子左侧浮动，",[96,139009,139010],{},"dropdown",[1117,139012,139013,139023,139031,139037,139045,139055,139063,139074],{},[56,139014,139015,139016,100999,139019,139022],{},"1号盒子有讲究，根据相关性 里面包含 ",[96,139017,139018],{},".dt",[96,139020,139021],{},".dd"," 两个盒子",[56,139024,139025,139027,139028,139030],{},[96,139026,139018],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[96,139029,139021],{}," 挤到下面去了",[56,139032,139033,139034,139036],{},"给 ",[96,139035,139021],{}," 盒子设置宽度 和 高度，以及背景颜色",[56,139038,139033,139039,139041,139042,120218],{},[96,139040,139021],{}," 盒子里面定义 无序列表 （",[96,139043,139044],{},"ul > li > a",[56,139046,139047,139048,139050,139051,139054],{},"每个 ",[96,139049,56],{}," 都有一个高度（",[96,139052,139053],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[56,139056,139033,139057,139059,139060,120218],{},[96,139058,56],{}," 里面的a设置文字大小（",[96,139061,139062],{},"14px",[56,139064,139033,139065,139067,139068,139070,139071,139073],{},[96,139066,56],{}," 设置 ",[96,139069,127694],{},"，当鼠标移入的时候，让",[96,139072,56],{},"的背景变成白色，让里面的文字变成红色",[56,139075,139076,139078,139079,139081,139082,139084],{},[96,139077,56],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[96,139080,56],{},"的右侧，那么给",[96,139083,56],{},"设置相对定位",[14,139086,139087],{},"一定要注意相关性",[14,139089,138372],{},[90,139091,139092],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,139093,139094,139102,139112,139122],{"__ignoreMap":21},[99,139095,139096,139098,139100],{"class":101,"line":102},[99,139097,51592],{"class":51281},[99,139099,137534],{"class":1949},[99,139101,15559],{"class":109},[99,139103,139104,139106,139108,139110],{"class":101,"line":22},[99,139105,137541],{"class":158},[99,139107,51418],{"class":109},[99,139109,7639],{"class":214},[99,139111,1276],{"class":109},[99,139113,139114,139116,139118,139120],{"class":101,"line":1165},[99,139115,128149],{"class":158},[99,139117,51418],{"class":109},[99,139119,60850],{"class":158},[99,139121,1276],{"class":109},[99,139123,139124],{"class":101,"line":1180},[99,139125,1551],{"class":109},[14,139127,138412],{},[90,139129,139130],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,139131,139132,139140,139150,139160],{"__ignoreMap":21},[99,139133,139134,139136,139138],{"class":101,"line":102},[99,139135,51592],{"class":51281},[99,139137,137534],{"class":1949},[99,139139,15559],{"class":109},[99,139141,139142,139144,139146,139148],{"class":101,"line":22},[99,139143,137541],{"class":158},[99,139145,51418],{"class":109},[99,139147,7639],{"class":214},[99,139149,1276],{"class":109},[99,139151,139152,139154,139156,139158],{"class":101,"line":1165},[99,139153,128149],{"class":158},[99,139155,51418],{"class":109},[99,139157,60850],{"class":158},[99,139159,1276],{"class":109},[99,139161,139162],{"class":101,"line":1180},[99,139163,1551],{"class":109},[14,139165,139166],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139168,139169,139170,139173],{},"2 号盒子左侧浮动，",[96,139171,139172],{},"navitems"," 导航栏组",[1117,139175,139176,139181,139190],{},[56,139177,139178,139179],{},"里面结构是 ",[96,139180,139044],{},[56,139182,139183,139184,139186,139187,139189],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[96,139185,348],{},"左右的",[96,139188,30864],{},"把两侧撑开",[56,139191,139192],{},"让文字垂直居中（行高等于高度）",[1448,139194],{"style":126389,"src":139195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139197,139198],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139200,138372],{},[90,139202,139204],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},".box {\n  float: left;\n}\n",[96,139205,139206,139212,139222],{"__ignoreMap":21},[99,139207,139208,139210],{"class":101,"line":102},[99,139209,130381],{"class":1949},[99,139211,15559],{"class":109},[99,139213,139214,139216,139218,139220],{"class":101,"line":22},[99,139215,131013],{"class":158},[99,139217,51418],{"class":109},[99,139219,23724],{"class":158},[99,139221,1276],{"class":109},[99,139223,139224],{"class":101,"line":1165},[99,139225,1551],{"class":109},[14,139227,138412],{},[90,139229,139230],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,139231,139232,139238,139248],{"__ignoreMap":21},[99,139233,139234,139236],{"class":101,"line":102},[99,139235,130381],{"class":1949},[99,139237,15559],{"class":109},[99,139239,139240,139242,139244,139246],{"class":101,"line":22},[99,139241,131013],{"class":158},[99,139243,51418],{"class":109},[99,139245,23724],{"class":158},[99,139247,1276],{"class":109},[99,139249,139250],{"class":101,"line":1165},[99,139251,1551],{"class":109},[14,139253,139254],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1448,139256],{"style":126389,"src":139257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[90,139259,139260],{"className":126533,"code":130690,"language":126535,"meta":21,"style":21},[96,139261,139262,139268,139284],{"__ignoreMap":21},[99,139263,139264,139266],{"class":101,"line":102},[99,139265,51592],{"class":51281},[99,139267,15559],{"class":109},[99,139269,139270,139272,139274,139276,139278,139280,139282],{"class":101,"line":22},[99,139271,70877],{"class":158},[99,139273,51418],{"class":109},[99,139275,327],{"class":158},[99,139277,51473],{"class":105},[99,139279,51502],{"class":158},[99,139281,129925],{"class":158},[99,139283,1276],{"class":109},[99,139285,139286],{"class":101,"line":1165},[99,139287,1551],{"class":109},[70,139289,139291],{"id":139290},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1448,139293],{"style":126389,"src":139294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1117,139296,139297,139302,139307],{},[56,139298,139299,139301],{},[96,139300,131736],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[56,139303,139304,139306],{},[96,139305,131736],{}," 里面有一个大的版心",[56,139308,139309,139310,139313,139314],{},"版心里面包含 1 号盒子，",[96,139311,139312],{},"mod_service"," 是服务模块，mod 是模块的意思",[1117,139315,139316,139321,139334,139350,139355],{},[56,139317,139033,139318,139320],{},[96,139319,139312],{}," 设置高度（80px）和下边框",[56,139322,139323,139324,139327,139328,139330,139331,139333],{},"在里面定义 ",[96,139325,139326],{},"ul > li"," ,每个",[96,139329,56],{}," 宽度是300px 高度是 50px，给每个",[96,139332,56],{},"设置35px的左内边距",[56,139335,139336,139337,139339,139340,139342,139343,139345,139346,18397,139348,120218],{},"在每个",[96,139338,56],{},"里面，放一个 ",[96,139341,22897],{},"（里面放图标），一个",[96,139344,51592],{},"（里面放",[96,139347,51592],{},[96,139349,14],{},[56,139351,139033,139352,139354],{},[96,139353,22897],{},"设置浮动，让h5与这个div左右排列",[56,139356,139357],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139359,138372],{},[90,139361,139363],{"className":126533,"code":139362,"language":126535,"meta":21,"style":21},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[96,139364,139365,139371,139383,139395,139422],{"__ignoreMap":21},[99,139366,139367,139369],{"class":101,"line":102},[99,139368,134290],{"class":1949},[99,139370,15559],{"class":109},[99,139372,139373,139375,139377,139379,139381],{"class":101,"line":22},[99,139374,70549],{"class":158},[99,139376,51418],{"class":109},[99,139378,810],{"class":158},[99,139380,51473],{"class":105},[99,139382,1276],{"class":109},[99,139384,139385,139387,139389,139391,139393],{"class":101,"line":1165},[99,139386,70769],{"class":158},[99,139388,51418],{"class":109},[99,139390,810],{"class":158},[99,139392,51473],{"class":105},[99,139394,1276],{"class":109},[99,139396,139397,139399,139401,139403,139405,139407,139409,139411,139414,139416,139418,139420],{"class":101,"line":1180},[99,139398,70592],{"class":158},[99,139400,51418],{"class":109},[99,139402,61707],{"class":158},[99,139404,110],{"class":109},[99,139406,134329],{"class":5203},[99,139408,13701],{"class":109},[99,139410,61717],{"class":158},[99,139412,139413],{"class":158}," -10",[99,139415,51473],{"class":105},[99,139417,134348],{"class":158},[99,139419,51473],{"class":105},[99,139421,1276],{"class":109},[99,139423,139424],{"class":101,"line":1186},[99,139425,1551],{"class":109},[14,139427,138412],{},[90,139429,139430],{"className":126533,"code":139362,"language":126535,"meta":21,"style":21},[96,139431,139432,139438,139450,139462,139488],{"__ignoreMap":21},[99,139433,139434,139436],{"class":101,"line":102},[99,139435,134290],{"class":1949},[99,139437,15559],{"class":109},[99,139439,139440,139442,139444,139446,139448],{"class":101,"line":22},[99,139441,70549],{"class":158},[99,139443,51418],{"class":109},[99,139445,810],{"class":158},[99,139447,51473],{"class":105},[99,139449,1276],{"class":109},[99,139451,139452,139454,139456,139458,139460],{"class":101,"line":1165},[99,139453,70769],{"class":158},[99,139455,51418],{"class":109},[99,139457,810],{"class":158},[99,139459,51473],{"class":105},[99,139461,1276],{"class":109},[99,139463,139464,139466,139468,139470,139472,139474,139476,139478,139480,139482,139484,139486],{"class":101,"line":1180},[99,139465,70592],{"class":158},[99,139467,51418],{"class":109},[99,139469,61707],{"class":158},[99,139471,110],{"class":109},[99,139473,134329],{"class":5203},[99,139475,13701],{"class":109},[99,139477,61717],{"class":158},[99,139479,139413],{"class":158},[99,139481,51473],{"class":105},[99,139483,134348],{"class":158},[99,139485,51473],{"class":105},[99,139487,1276],{"class":109},[99,139489,139490],{"class":101,"line":1186},[99,139491,1551],{"class":109},[14,139493,139494],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1117,139496,139497,139500,139506,139512,139524],{},[56,139498,139499],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[56,139501,139502,139503,120218],{},"里面的布局利用 自定义列表来实现（",[96,139504,139505],{},"dl > dt + dd",[56,139507,139033,139508,139511],{},[96,139509,139510],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[56,139513,139033,139514,139517,139518,18397,139520,139523],{},[96,139515,139516],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[96,139519,139516],{},[96,139521,139522],{},"dd","之间有些距离",[56,139525,139526],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139528,138372],{},[90,139530,139531],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,139532,139533,139539,139551],{"__ignoreMap":21},[99,139534,139535,139537],{"class":101,"line":102},[99,139536,51592],{"class":51281},[99,139538,15559],{"class":109},[99,139540,139541,139543,139545,139547,139549],{"class":101,"line":22},[99,139542,70451],{"class":158},[99,139544,51418],{"class":109},[99,139546,301],{"class":158},[99,139548,51537],{"class":158},[99,139550,1276],{"class":109},[99,139552,139553],{"class":101,"line":1165},[99,139554,1551],{"class":109},[14,139556,138412],{},[90,139558,139559],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,139560,139561,139567,139579],{"__ignoreMap":21},[99,139562,139563,139565],{"class":101,"line":102},[99,139564,51592],{"class":51281},[99,139566,15559],{"class":109},[99,139568,139569,139571,139573,139575,139577],{"class":101,"line":22},[99,139570,70451],{"class":158},[99,139572,51418],{"class":109},[99,139574,301],{"class":158},[99,139576,51537],{"class":158},[99,139578,1276],{"class":109},[99,139580,139581],{"class":101,"line":1165},[99,139582,1551],{"class":109},[14,139584,139585],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1117,139587,139588,139597,139600,139611],{},[56,139589,139590,139591,139593,139594,139596],{},"分为上下两块，上面是 ",[96,139592,131753],{}," 友情链接，下面是 ",[96,139595,131746],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[56,139598,139599],{},"把内容分别复制到相应模块中",[56,139601,139033,139602,139604,139605,139607,139608,139610],{},[96,139603,131753],{}," 设置 15px 的下外边距，给",[96,139606,131753],{}," 里面 的 ",[96,139609,348],{}," 标签设置 左右 3px 的外边距",[56,139612,139613,139614,139616],{},"给",[96,139615,131746],{}," 设置 20px 的行高",[14,139618,138372],{},[90,139620,139621],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,139622,139623,139629,139641],{"__ignoreMap":21},[99,139624,139625,139627],{"class":101,"line":102},[99,139626,51592],{"class":51281},[99,139628,15559],{"class":109},[99,139630,139631,139633,139635,139637,139639],{"class":101,"line":22},[99,139632,70451],{"class":158},[99,139634,51418],{"class":109},[99,139636,301],{"class":158},[99,139638,51537],{"class":158},[99,139640,1276],{"class":109},[99,139642,139643],{"class":101,"line":1165},[99,139644,1551],{"class":109},[14,139646,138412],{},[90,139648,139649],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,139650,139651,139657,139669],{"__ignoreMap":21},[99,139652,139653,139655],{"class":101,"line":102},[99,139654,51592],{"class":51281},[99,139656,15559],{"class":109},[99,139658,139659,139661,139663,139665,139667],{"class":101,"line":22},[99,139660,70451],{"class":158},[99,139662,51418],{"class":109},[99,139664,301],{"class":158},[99,139666,51537],{"class":158},[99,139668,1276],{"class":109},[99,139670,139671],{"class":101,"line":1165},[99,139672,1551],{"class":109},[14,139674,139675],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5113,139677,139678],{},"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":21,"searchDepth":22,"depth":22,"links":139680},[139681,139682,139683,139690],{"id":137961,"depth":22,"text":137962},{"id":137980,"depth":22,"text":137981},{"id":138007,"depth":22,"text":138008,"children":139684},[139685,139686,139687,139688,139689],{"id":138011,"depth":1165,"text":138012},{"id":138024,"depth":1165,"text":138025},{"id":138048,"depth":1165,"text":138049},{"id":138070,"depth":1165,"text":138071},{"id":138142,"depth":1165,"text":138143},{"id":138268,"depth":22,"text":138269,"children":139691},[139692,139693,139694,139695,139697],{"id":138272,"depth":1165,"text":138273},{"id":138279,"depth":1165,"text":138280},{"id":138451,"depth":1165,"text":138452},{"id":138992,"depth":1165,"text":139696},"15.4.4 nav导航模块制作",{"id":139290,"depth":1165,"text":139291},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137953,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139704,"title":139705,"body":139706,"description":23364,"extension":24,"meta":142108,"navigation":26,"path":142109,"seo":142110,"stem":142111,"__hash__":142112},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139707,"toc":142085},[139708,139711,139715,139719,139731,139734,139737,139740,139751,139753,139777,139779,139803,139808,139811,139813,139849,139851,139887,139890,139895,139898,139901,139904,139934,139941,139944,139954,139956,139990,139993,140027,140033,140050,140052,140088,140090,140126,140131,140156,140158,140184,140186,140210,140217,140220,140284,140286,140328,140330,140370,140377,140382,140384,140414,140416,140446,140450,140453,140460,140472,140474,140500,140502,140526,140529,140531,140555,140561,140571,140573,140603,140605,140635,140642,140683,140685,140721,140723,140759,140763,140766,140769,140772,140778,140783,140786,140809,140812,140836,140839,140863,140868,140871,140874,140877,140880,140883,140957,140959,140989,140991,141021,141024,141027,141059,141063,141067,141081,141090,141093,141098,141100,141194,141196,141290,141313,141315,141339,141341,141365,141372,141375,141385,141387,141411,141416,141424,141426,141456,141461,141501,141503,141529,141531,141557,141561,141564,141569,141572,141576,141584,141591,141599,141601,141631,141633,141663,141671,141674,141677,141679,141709,141711,141741,141744,141749,141751,141775,141777,141801,141804,141889,141891,141915,141917,141941,141945,141947,141971,141973,142007,142011,142025,142028,142033,142036,142041,142044,142074,142082],[10,139709,139705],{"id":139710},"_16-品优购项目下篇-主体与页面开发",[41,139712,139714],{"id":139713},"_161-项目主体模块制作","16.1 项目主体模块制作",[70,139716,139718],{"id":139717},"_1611-首页制作","16.1.1 首页制作",[14,139720,139721,139723,139724,139726,139727,139730],{},[259,139722,102039],{}," 主体模块是 ",[259,139725,74039],{}," 里面专有的，注意需要新的样式文件 ",[259,139728,139729],{},"index.css，"," 就不要写在common.css中了",[1448,139732],{"style":126389,"src":139733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1448,139735],{"style":126389,"src":139736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139738,139739],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1117,139741,139742,139745,139748],{},[56,139743,139744],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[56,139746,139747],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[56,139749,139750],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139752,138372],{},[90,139754,139755],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,139756,139757,139763,139773],{"__ignoreMap":21},[99,139758,139759,139761],{"class":101,"line":102},[99,139760,130381],{"class":1949},[99,139762,15559],{"class":109},[99,139764,139765,139767,139769,139771],{"class":101,"line":22},[99,139766,131013],{"class":158},[99,139768,51418],{"class":109},[99,139770,23724],{"class":158},[99,139772,1276],{"class":109},[99,139774,139775],{"class":101,"line":1165},[99,139776,1551],{"class":109},[14,139778,138412],{},[90,139780,139781],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,139782,139783,139789,139799],{"__ignoreMap":21},[99,139784,139785,139787],{"class":101,"line":102},[99,139786,130381],{"class":1949},[99,139788,15559],{"class":109},[99,139790,139791,139793,139795,139797],{"class":101,"line":22},[99,139792,131013],{"class":158},[99,139794,51418],{"class":109},[99,139796,23724],{"class":158},[99,139798,1276],{"class":109},[99,139800,139801],{"class":101,"line":1165},[99,139802,1551],{"class":109},[53,139804,139805],{},[56,139806,139807],{},"左侧focus模块制作",[1448,139809],{"style":126389,"src":139810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139812,138372],{},[90,139814,139815],{"className":126533,"code":127856,"language":126535,"meta":21,"style":21},[96,139816,139817,139825,139835,139845],{"__ignoreMap":21},[99,139818,139819,139821,139823],{"class":101,"line":102},[99,139820,53802],{"class":51281},[99,139822,61881],{"class":1949},[99,139824,15559],{"class":109},[99,139826,139827,139829,139831,139833],{"class":101,"line":22},[99,139828,127871],{"class":158},[99,139830,51418],{"class":109},[99,139832,54870],{"class":158},[99,139834,1276],{"class":109},[99,139836,139837,139839,139841,139843],{"class":101,"line":1165},[99,139838,70779],{"class":158},[99,139840,51418],{"class":109},[99,139842,54718],{"class":158},[99,139844,1276],{"class":109},[99,139846,139847],{"class":101,"line":1180},[99,139848,1551],{"class":109},[14,139850,138412],{},[90,139852,139853],{"className":126533,"code":127856,"language":126535,"meta":21,"style":21},[96,139854,139855,139863,139873,139883],{"__ignoreMap":21},[99,139856,139857,139859,139861],{"class":101,"line":102},[99,139858,53802],{"class":51281},[99,139860,61881],{"class":1949},[99,139862,15559],{"class":109},[99,139864,139865,139867,139869,139871],{"class":101,"line":22},[99,139866,127871],{"class":158},[99,139868,51418],{"class":109},[99,139870,54870],{"class":158},[99,139872,1276],{"class":109},[99,139874,139875,139877,139879,139881],{"class":101,"line":1165},[99,139876,70779],{"class":158},[99,139878,51418],{"class":109},[99,139880,54718],{"class":158},[99,139882,1276],{"class":109},[99,139884,139885],{"class":101,"line":1180},[99,139886,1551],{"class":109},[14,139888,139889],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[53,139891,139892],{"start":22},[56,139893,139894],{},"右侧newsflash模块制作",[1448,139896],{"style":126389,"src":139897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139899,139900],{},"右侧的模块 分为上中下三个盒子",[14,139902,139903],{},"结构代码：",[90,139905,139906],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,139907,139908],{"__ignoreMap":21},[99,139909,139910,139912,139914,139916,139918,139920,139922,139924,139926,139928,139930,139932],{"class":101,"line":102},[99,139911,1020],{"class":109},[99,139913,1448],{"class":51281},[99,139915,55220],{"class":1949},[99,139917,155],{"class":109},[99,139919,134050],{"class":214},[99,139921,55228],{"class":1949},[99,139923,155],{"class":109},[99,139925,134057],{"class":214},[99,139927,134060],{"class":1949},[99,139929,155],{"class":109},[99,139931,134065],{"class":214},[99,139933,51288],{"class":109},[14,139935,139936,139937,139940],{},"1 号盒子为 ",[96,139938,139939],{},"news"," 新闻模块 高度为 165px",[1448,139942],{"style":126389,"src":139943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139945,139946,139947,139950,139951],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[96,139948,139949],{},"news-hd","，下面是 ",[96,139952,139953],{},"news-bd",[14,139955,139903],{},[90,139957,139958],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,139959,139960,139964,139978,139982],{"__ignoreMap":21},[99,139961,139962],{"class":101,"line":102},[99,139963,130644],{"class":168},[99,139965,139966,139968,139970,139972,139974,139976],{"class":101,"line":22},[99,139967,1020],{"class":109},[99,139969,51592],{"class":51281},[99,139971,53467],{"class":1949},[99,139973,155],{"class":109},[99,139975,130657],{"class":214},[99,139977,51288],{"class":109},[99,139979,139980],{"class":101,"line":1165},[99,139981,130664],{"class":109},[99,139983,139984,139986,139988],{"class":101,"line":1180},[99,139985,51766],{"class":109},[99,139987,51592],{"class":51281},[99,139989,51288],{"class":109},[14,139991,139992],{},"样式代码：",[90,139994,139995],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,139996,139997,140001,140015,140019],{"__ignoreMap":21},[99,139998,139999],{"class":101,"line":102},[99,140000,130644],{"class":168},[99,140002,140003,140005,140007,140009,140011,140013],{"class":101,"line":22},[99,140004,1020],{"class":109},[99,140006,51592],{"class":51281},[99,140008,53467],{"class":1949},[99,140010,155],{"class":109},[99,140012,130657],{"class":214},[99,140014,51288],{"class":109},[99,140016,140017],{"class":101,"line":1165},[99,140018,130664],{"class":109},[99,140020,140021,140023,140025],{"class":101,"line":1180},[99,140022,51766],{"class":109},[99,140024,51592],{"class":51281},[99,140026,51288],{"class":109},[14,140028,140029,140030,140032],{},"上面是",[96,140031,139949],{},"，设置高度是 33px，设置下边框",[1117,140034,140035,140041],{},[56,140036,140037,140038,140040],{},"里面放一个",[96,140039,22897],{}," 标题",[56,140042,140043,140044,140046,140047,140049],{},"放一个a",[96,140045,102674],{},"，内容是 更多，然后让 ",[96,140048,348],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140051,139903],{},[90,140053,140054],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,140055,140056,140064,140074,140084],{"__ignoreMap":21},[99,140057,140058,140060,140062],{"class":101,"line":102},[99,140059,51592],{"class":51281},[99,140061,137534],{"class":1949},[99,140063,15559],{"class":109},[99,140065,140066,140068,140070,140072],{"class":101,"line":22},[99,140067,137541],{"class":158},[99,140069,51418],{"class":109},[99,140071,7639],{"class":214},[99,140073,1276],{"class":109},[99,140075,140076,140078,140080,140082],{"class":101,"line":1165},[99,140077,128149],{"class":158},[99,140079,51418],{"class":109},[99,140081,60850],{"class":158},[99,140083,1276],{"class":109},[99,140085,140086],{"class":101,"line":1180},[99,140087,1551],{"class":109},[14,140089,139992],{},[90,140091,140092],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,140093,140094,140102,140112,140122],{"__ignoreMap":21},[99,140095,140096,140098,140100],{"class":101,"line":102},[99,140097,51592],{"class":51281},[99,140099,137534],{"class":1949},[99,140101,15559],{"class":109},[99,140103,140104,140106,140108,140110],{"class":101,"line":22},[99,140105,137541],{"class":158},[99,140107,51418],{"class":109},[99,140109,7639],{"class":214},[99,140111,1276],{"class":109},[99,140113,140114,140116,140118,140120],{"class":101,"line":1165},[99,140115,128149],{"class":158},[99,140117,51418],{"class":109},[99,140119,60850],{"class":158},[99,140121,1276],{"class":109},[99,140123,140124],{"class":101,"line":1180},[99,140125,1551],{"class":109},[14,140127,140128,140129],{},"下面是",[96,140130,139953],{},[1117,140132,140133,140141],{},[56,140134,140135,140136,100999,140138,140140],{},"里面包含 ",[96,140137,1117],{},[96,140139,56],{}," 还有链接",[56,140142,139613,140143,140145,140146,140148,140149,140152,140153],{},[96,140144,56],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[96,140147,131199],{}," 2.设置 ",[96,140150,140151],{},"white-space: nowrap;"," 3. 设置 ",[96,140154,140155],{},"text-overflow: ellipsis;",[14,140157,139903],{},[90,140159,140161],{"className":126533,"code":140160,"language":126535,"meta":21,"style":21},"div {\n  overflow: hidden;\n}\n",[96,140162,140163,140169,140180],{"__ignoreMap":21},[99,140164,140165,140167],{"class":101,"line":102},[99,140166,51592],{"class":51281},[99,140168,15559],{"class":109},[99,140170,140171,140174,140176,140178],{"class":101,"line":22},[99,140172,140173],{"class":158},"  overflow",[99,140175,51418],{"class":109},[99,140177,61695],{"class":158},[99,140179,1276],{"class":109},[99,140181,140182],{"class":101,"line":1165},[99,140183,1551],{"class":109},[14,140185,139992],{},[90,140187,140188],{"className":126533,"code":140160,"language":126535,"meta":21,"style":21},[96,140189,140190,140196,140206],{"__ignoreMap":21},[99,140191,140192,140194],{"class":101,"line":102},[99,140193,51592],{"class":51281},[99,140195,15559],{"class":109},[99,140197,140198,140200,140202,140204],{"class":101,"line":22},[99,140199,140173],{"class":158},[99,140201,51418],{"class":109},[99,140203,61695],{"class":158},[99,140205,1276],{"class":109},[99,140207,140208],{"class":101,"line":1165},[99,140209,1551],{"class":109},[14,140211,140212,140213,140216],{},"2 号盒子为 ",[96,140214,140215],{},"lifeservice"," 生活服务模块 高度为 209px",[1448,140218],{"style":126389,"src":140219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1117,140221,140222,140225,140235,140259,140270],{},[56,140223,140224],{},"设置边框（左右下边框）",[56,140226,140227,140228,140231,140232,140234],{},"里面的内容 是 ",[96,140229,140230],{},"ul > 12*li","，给",[96,140233,56],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[56,140236,140237,140238],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1117,140239,140240,140245,140254],{},[56,140241,140242,140244],{},[96,140243,140215],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[56,140246,140247,140248,140250,140251,140253],{},"可以让 ",[96,140249,140215],{}," 里面的 ",[96,140252,1117],{}," 宽度为 252，就可以装的下 4 个 小 li",[56,140255,140256,140258],{},[96,140257,140215],{}," 盒子 overflow 隐藏多余的部分就可以了",[56,140260,116448,140261,140263,140264,140266,140267,140269],{},[96,140262,56],{}," 里面放一个 ",[96,140265,551],{},"（里面放图标），下面的文本用 ",[96,140268,14],{}," 标签包裹",[56,140271,139033,140272,140274,140275,140277,140278,139067,140280,140283],{},[96,140273,551],{}," 设置 24px宽和28px的高（注意 ",[96,140276,551],{}," 是行内元素， 转成行内块），给 ",[96,140279,56],{},[96,140281,140282],{},"text-align:center"," 让里面内容居中显示",[14,140285,139903],{},[90,140287,140289],{"className":126533,"code":140288,"language":126535,"meta":21,"style":21},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[96,140290,140291,140309,140314,140324],{"__ignoreMap":21},[99,140292,140293,140295,140297,140299,140301,140303,140305,140307],{"class":101,"line":102},[99,140294,99],{"class":51281},[99,140296,12422],{"class":109},[99,140298,348],{"class":51281},[99,140300,12422],{"class":109},[99,140302,23541],{"class":51281},[99,140304,12422],{"class":109},[99,140306,259],{"class":51281},[99,140308,15559],{"class":109},[99,140310,140311],{"class":101,"line":22},[99,140312,140313],{"class":168},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[99,140315,140316,140318,140320,140322],{"class":101,"line":1165},[99,140317,128149],{"class":158},[99,140319,51418],{"class":109},[99,140321,128211],{"class":158},[99,140323,1276],{"class":109},[99,140325,140326],{"class":101,"line":1180},[99,140327,1551],{"class":109},[14,140329,139992],{},[90,140331,140332],{"className":126533,"code":140288,"language":126535,"meta":21,"style":21},[96,140333,140334,140352,140356,140366],{"__ignoreMap":21},[99,140335,140336,140338,140340,140342,140344,140346,140348,140350],{"class":101,"line":102},[99,140337,99],{"class":51281},[99,140339,12422],{"class":109},[99,140341,348],{"class":51281},[99,140343,12422],{"class":109},[99,140345,23541],{"class":51281},[99,140347,12422],{"class":109},[99,140349,259],{"class":51281},[99,140351,15559],{"class":109},[99,140353,140354],{"class":101,"line":22},[99,140355,140313],{"class":168},[99,140357,140358,140360,140362,140364],{"class":101,"line":1165},[99,140359,128149],{"class":158},[99,140361,51418],{"class":109},[99,140363,128211],{"class":158},[99,140365,1276],{"class":109},[99,140367,140368],{"class":101,"line":1180},[99,140369,1551],{"class":109},[14,140371,140372,140373,140376],{},"3 号盒子为 ",[96,140374,140375],{},"bargain"," 特价商品",[1117,140378,140379],{},[56,140380,140381],{},"这个比较简单，直接插入一张图片即可",[14,140383,139903],{},[90,140385,140386],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,140387,140388],{"__ignoreMap":21},[99,140389,140390,140392,140394,140396,140398,140400,140402,140404,140406,140408,140410,140412],{"class":101,"line":102},[99,140391,1020],{"class":109},[99,140393,1448],{"class":51281},[99,140395,55220],{"class":1949},[99,140397,155],{"class":109},[99,140399,134050],{"class":214},[99,140401,55228],{"class":1949},[99,140403,155],{"class":109},[99,140405,134057],{"class":214},[99,140407,134060],{"class":1949},[99,140409,155],{"class":109},[99,140411,134065],{"class":214},[99,140413,51288],{"class":109},[14,140415,139992],{},[90,140417,140418],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,140419,140420],{"__ignoreMap":21},[99,140421,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440,140442,140444],{"class":101,"line":102},[99,140423,1020],{"class":109},[99,140425,1448],{"class":51281},[99,140427,55220],{"class":1949},[99,140429,155],{"class":109},[99,140431,134050],{"class":214},[99,140433,55228],{"class":1949},[99,140435,155],{"class":109},[99,140437,134057],{"class":214},[99,140439,134060],{"class":1949},[99,140441,155],{"class":109},[99,140443,134065],{"class":214},[99,140445,51288],{"class":109},[70,140447,140449],{"id":140448},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1448,140451],{"style":126389,"src":140452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140454,140455,140456,140459],{},"大盒子 ",[96,140457,140458],{},"recom"," 推荐模块 recommend",[1117,140461,140462],{},[56,140463,140464,140465,140467,140468,140471],{},"给这个 ",[96,140466,140458],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[96,140469,140470],{},"#ebebeb","），设置距离上边 12px",[14,140473,139903],{},[90,140475,140477],{"className":126533,"code":140476,"language":126535,"meta":21,"style":21},"div {\n  background-color: #f0f0f0;\n}\n",[96,140478,140479,140485,140496],{"__ignoreMap":21},[99,140480,140481,140483],{"class":101,"line":102},[99,140482,51592],{"class":51281},[99,140484,15559],{"class":109},[99,140486,140487,140489,140491,140494],{"class":101,"line":22},[99,140488,70859],{"class":158},[99,140490,51418],{"class":109},[99,140492,140493],{"class":158},"#f0f0f0",[99,140495,1276],{"class":109},[99,140497,140498],{"class":101,"line":1165},[99,140499,1551],{"class":109},[14,140501,139992],{},[90,140503,140504],{"className":126533,"code":140476,"language":126535,"meta":21,"style":21},[96,140505,140506,140512,140522],{"__ignoreMap":21},[99,140507,140508,140510],{"class":101,"line":102},[99,140509,51592],{"class":51281},[99,140511,15559],{"class":109},[99,140513,140514,140516,140518,140520],{"class":101,"line":22},[99,140515,70859],{"class":158},[99,140517,51418],{"class":109},[99,140519,140493],{"class":158},[99,140521,1276],{"class":109},[99,140523,140524],{"class":101,"line":1165},[99,140525,1551],{"class":109},[14,140527,140528],{},"里面包含 2 个盒子， 浮动即可",[14,140530,139903],{},[90,140532,140533],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,140534,140535,140541,140551],{"__ignoreMap":21},[99,140536,140537,140539],{"class":101,"line":102},[99,140538,130381],{"class":1949},[99,140540,15559],{"class":109},[99,140542,140543,140545,140547,140549],{"class":101,"line":22},[99,140544,131013],{"class":158},[99,140546,51418],{"class":109},[99,140548,23724],{"class":158},[99,140550,1276],{"class":109},[99,140552,140553],{"class":101,"line":1165},[99,140554,1551],{"class":109},[14,140556,140557,140558],{},"1 号盒子 ",[96,140559,140560],{},"recom_hd",[1117,140562,140563,140566],{},[56,140564,140565],{},"设置宽度205px，高度163px",[56,140567,140037,140568,140570],{},[96,140569,1448],{},"标签，插入图片即可",[14,140572,139903],{},[90,140574,140575],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,140576,140577],{"__ignoreMap":21},[99,140578,140579,140581,140583,140585,140587,140589,140591,140593,140595,140597,140599,140601],{"class":101,"line":102},[99,140580,1020],{"class":109},[99,140582,1448],{"class":51281},[99,140584,55220],{"class":1949},[99,140586,155],{"class":109},[99,140588,134050],{"class":214},[99,140590,55228],{"class":1949},[99,140592,155],{"class":109},[99,140594,134057],{"class":214},[99,140596,134060],{"class":1949},[99,140598,155],{"class":109},[99,140600,134065],{"class":214},[99,140602,51288],{"class":109},[14,140604,139992],{},[90,140606,140607],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,140608,140609],{"__ignoreMap":21},[99,140610,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629,140631,140633],{"class":101,"line":102},[99,140612,1020],{"class":109},[99,140614,1448],{"class":51281},[99,140616,55220],{"class":1949},[99,140618,155],{"class":109},[99,140620,134050],{"class":214},[99,140622,55228],{"class":1949},[99,140624,155],{"class":109},[99,140626,134057],{"class":214},[99,140628,134060],{"class":1949},[99,140630,155],{"class":109},[99,140632,134065],{"class":214},[99,140634,51288],{"class":109},[14,140636,140637,140638,140641],{},"2 号盒子 ",[96,140639,140640],{},"recom_bd"," ，注意里面的小竖线",[1117,140643,140644,140655,140658,140663,140668],{},[56,140645,140646,140647,140649,140650,140652,140653],{},"右侧结构里面放 ",[96,140648,1117],{}," 包含 4个 ",[96,140651,56],{},"，每个li里面包含一个",[96,140654,1448],{},[56,140656,140657],{},"直接利用切片工具把里面的内容当成一张图片",[56,140659,139033,140660,140662],{},[96,140661,56],{}," 设置浮动",[56,140664,139033,140665,140667],{},[96,140666,1448],{}," 设置宽高，宽度 248px，高度 163px",[56,140669,140670,140671,140231,140674,140676,140677,140679,140680],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[96,140672,140673],{},"top 10px",[96,140675,56],{},"设置相对定位（注意，最后一个",[96,140678,56],{},"不用设置伪元素），可以利用 ",[96,140681,140682],{},"nth-child(-n+3){...}",[14,140684,139903],{},[90,140686,140687],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,140688,140689,140697,140707,140717],{"__ignoreMap":21},[99,140690,140691,140693,140695],{"class":101,"line":102},[99,140692,51592],{"class":51281},[99,140694,137534],{"class":1949},[99,140696,15559],{"class":109},[99,140698,140699,140701,140703,140705],{"class":101,"line":22},[99,140700,137541],{"class":158},[99,140702,51418],{"class":109},[99,140704,7639],{"class":214},[99,140706,1276],{"class":109},[99,140708,140709,140711,140713,140715],{"class":101,"line":1165},[99,140710,128149],{"class":158},[99,140712,51418],{"class":109},[99,140714,60850],{"class":158},[99,140716,1276],{"class":109},[99,140718,140719],{"class":101,"line":1180},[99,140720,1551],{"class":109},[14,140722,139992],{},[90,140724,140725],{"className":126533,"code":138375,"language":126535,"meta":21,"style":21},[96,140726,140727,140735,140745,140755],{"__ignoreMap":21},[99,140728,140729,140731,140733],{"class":101,"line":102},[99,140730,51592],{"class":51281},[99,140732,137534],{"class":1949},[99,140734,15559],{"class":109},[99,140736,140737,140739,140741,140743],{"class":101,"line":22},[99,140738,137541],{"class":158},[99,140740,51418],{"class":109},[99,140742,7639],{"class":214},[99,140744,1276],{"class":109},[99,140746,140747,140749,140751,140753],{"class":101,"line":1165},[99,140748,128149],{"class":158},[99,140750,51418],{"class":109},[99,140752,60850],{"class":158},[99,140754,1276],{"class":109},[99,140756,140757],{"class":101,"line":1180},[99,140758,1551],{"class":109},[70,140760,140762],{"id":140761},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1448,140764],{"style":126389,"src":140765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140767,140768],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140770,140771],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140773,140774,140777],{},[96,140775,140776],{},"box_hd"," 制作",[14,140779,140557,140780,140782],{},[96,140781,140776],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1448,140784],{"style":126389,"src":140785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1117,140787,140788,140793,140798,140801],{},[56,140789,140790,140792],{},[96,140791,140776],{}," 给 30px 的高度，2个像素的下边框",[56,140794,140795,140796],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[96,140797,139044],{},[56,140799,140800],{},"左侧盒左浮动，右侧盒子右浮动",[56,140802,140803,140805,140806,140808],{},[96,140804,348],{},"标签之间的距离用左右的",[96,140807,30864],{},"撑开即可",[14,140810,140811],{},"结构代码",[90,140813,140814],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,140815,140816,140822,140832],{"__ignoreMap":21},[99,140817,140818,140820],{"class":101,"line":102},[99,140819,130381],{"class":1949},[99,140821,15559],{"class":109},[99,140823,140824,140826,140828,140830],{"class":101,"line":22},[99,140825,131013],{"class":158},[99,140827,51418],{"class":109},[99,140829,23724],{"class":158},[99,140831,1276],{"class":109},[99,140833,140834],{"class":101,"line":1165},[99,140835,1551],{"class":109},[14,140837,140838],{},"样式代码",[90,140840,140841],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,140842,140843,140849,140859],{"__ignoreMap":21},[99,140844,140845,140847],{"class":101,"line":102},[99,140846,130381],{"class":1949},[99,140848,15559],{"class":109},[99,140850,140851,140853,140855,140857],{"class":101,"line":22},[99,140852,131013],{"class":158},[99,140854,51418],{"class":109},[99,140856,23724],{"class":158},[99,140858,1276],{"class":109},[99,140860,140861],{"class":101,"line":1165},[99,140862,1551],{"class":109},[14,140864,140865,140777],{},[96,140866,140867],{},"box_bd",[14,140869,140870],{},"2 号盒子 box_bd，不要给高度",[1448,140872],{"style":126389,"src":140873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140875,140876],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140878,140879],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140881,140882],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1117,140884,140885,140897,140913],{},[56,140886,140887,140889,140890,140893,140894,140896],{},[96,140888,140867],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[96,140891,140892],{},"tab_content","，在",[96,140895,140892],{}," 里面包裹tab选项卡对应的内容",[56,140898,140899,140900,140903,140904,140906,140907,140909,140910,140912],{},"内容被一个大盒子包裹（",[96,140901,140902],{},"tab_list_item","），里面是 ",[96,140905,1117],{}," 包裹 5个 ",[96,140908,56],{},"，每个",[96,140911,56],{},"设置对应的宽度，然后设置浮动",[56,140914,140915,140916,140918,140919,140921,140922],{},"而这5个",[96,140917,56],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[96,140920,56],{},"设置",[1117,140923,140924,140942,140945],{},[56,140925,140926,140927,140929,140930,140932,140933,140935,140936,140938,140939,140941],{},"第一个小 ",[96,140928,56],{}," 分为上下结构，上面是 ",[96,140931,1117],{}," 包裹 ",[96,140934,56],{}," ，",[96,140937,56],{},"里面包裹 ",[96,140940,348],{},"，下面插入一张图片",[56,140943,140944],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[56,140946,140947,140948,140950,140951,140953,140954,140956],{},"后面的小 ",[96,140949,56],{}," 里面先放一个",[96,140952,348],{},"标签，然后在",[96,140955,348],{},"标签里面插入图片即可",[14,140958,140811],{},[90,140960,140961],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,140962,140963],{"__ignoreMap":21},[99,140964,140965,140967,140969,140971,140973,140975,140977,140979,140981,140983,140985,140987],{"class":101,"line":102},[99,140966,1020],{"class":109},[99,140968,1448],{"class":51281},[99,140970,55220],{"class":1949},[99,140972,155],{"class":109},[99,140974,134050],{"class":214},[99,140976,55228],{"class":1949},[99,140978,155],{"class":109},[99,140980,134057],{"class":214},[99,140982,134060],{"class":1949},[99,140984,155],{"class":109},[99,140986,134065],{"class":214},[99,140988,51288],{"class":109},[14,140990,140838],{},[90,140992,140993],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,140994,140995],{"__ignoreMap":21},[99,140996,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015,141017,141019],{"class":101,"line":102},[99,140998,1020],{"class":109},[99,141000,1448],{"class":51281},[99,141002,55220],{"class":1949},[99,141004,155],{"class":109},[99,141006,134050],{"class":214},[99,141008,55228],{"class":1949},[99,141010,155],{"class":109},[99,141012,134057],{"class":214},[99,141014,134060],{"class":1949},[99,141016,155],{"class":109},[99,141018,134065],{"class":214},[99,141020,51288],{"class":109},[14,141022,141023],{},"tab栏切换需求！！！！！！介绍：",[1448,141025],{"style":126389,"src":141026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1117,141028,141029,141037,141043,141046],{},[56,141030,141031,141034,141035],{},[96,141032,141033],{},"tab","栏的布局是 ",[96,141036,139044],{},[56,141038,141039,141040,141042],{},"有多少个",[96,141041,141033],{},"选项卡，那么对应就有多少个内容",[56,141044,141045],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[56,141047,141048,141049,141052,141053,141055,141056,141058],{},"等后面我们学习了",[96,141050,141051],{},"js","之后，我们就会配合",[96,141054,141051],{},"来实现，",[96,141057,141033],{},"栏的切换",[41,141060,141062],{"id":141061},"_162-列表制作","16.2 列表制作",[70,141064,141066],{"id":141065},"_1621-准备工作","16.2.1 准备工作",[1117,141068,141069,141072,141075,141078],{},[56,141070,141071],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[56,141073,141074],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[56,141076,141077],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[56,141079,141080],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[70,141082,141084,141085,100999,141087,141089],{"id":141083},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[96,141086,131538],{},[96,141088,53694],{}," 修改",[1448,141091],{"style":126389,"src":141092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1117,141094,141095],{},[56,141096,141097],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141099,139903],{},[90,141101,141102],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,141103,141104,141108,141122,141126,141140,141144,141158,141162,141176,141180],{"__ignoreMap":21},[99,141105,141106],{"class":101,"line":102},[99,141107,131972],{"class":168},[99,141109,141110,141112,141114,141116,141118,141120],{"class":101,"line":22},[99,141111,131977],{"class":1949},[99,141113,79788],{"class":109},[99,141115,128893],{"class":158},[99,141117,51418],{"class":109},[99,141119,131986],{"class":158},[99,141121,129463],{"class":109},[99,141123,141124],{"class":101,"line":1165},[99,141125,131993],{"class":168},[99,141127,141128,141130,141132,141134,141136,141138],{"class":101,"line":1180},[99,141129,131998],{"class":1949},[99,141131,79788],{"class":109},[99,141133,128893],{"class":158},[99,141135,51418],{"class":109},[99,141137,54745],{"class":158},[99,141139,129463],{"class":109},[99,141141,141142],{"class":101,"line":1186},[99,141143,132013],{"class":168},[99,141145,141146,141148,141150,141152,141154,141156],{"class":101,"line":1200},[99,141147,132018],{"class":1949},[99,141149,79788],{"class":109},[99,141151,128893],{"class":158},[99,141153,51418],{"class":109},[99,141155,54812],{"class":158},[99,141157,129463],{"class":109},[99,141159,141160],{"class":101,"line":1206},[99,141161,132033],{"class":168},[99,141163,141164,141166,141168,141170,141172,141174],{"class":101,"line":1297},[99,141165,132038],{"class":1949},[99,141167,79788],{"class":109},[99,141169,128893],{"class":158},[99,141171,51418],{"class":109},[99,141173,86214],{"class":158},[99,141175,129463],{"class":109},[99,141177,141178],{"class":101,"line":1303},[99,141179,132053],{"class":168},[99,141181,141182,141184,141186,141188,141190,141192],{"class":101,"line":1315},[99,141183,132058],{"class":1949},[99,141185,79788],{"class":109},[99,141187,128893],{"class":158},[99,141189,51418],{"class":109},[99,141191,132067],{"class":158},[99,141193,129463],{"class":109},[14,141195,139992],{},[90,141197,141198],{"className":126533,"code":131965,"language":126535,"meta":21,"style":21},[96,141199,141200,141204,141218,141222,141236,141240,141254,141258,141272,141276],{"__ignoreMap":21},[99,141201,141202],{"class":101,"line":102},[99,141203,131972],{"class":168},[99,141205,141206,141208,141210,141212,141214,141216],{"class":101,"line":22},[99,141207,131977],{"class":1949},[99,141209,79788],{"class":109},[99,141211,128893],{"class":158},[99,141213,51418],{"class":109},[99,141215,131986],{"class":158},[99,141217,129463],{"class":109},[99,141219,141220],{"class":101,"line":1165},[99,141221,131993],{"class":168},[99,141223,141224,141226,141228,141230,141232,141234],{"class":101,"line":1180},[99,141225,131998],{"class":1949},[99,141227,79788],{"class":109},[99,141229,128893],{"class":158},[99,141231,51418],{"class":109},[99,141233,54745],{"class":158},[99,141235,129463],{"class":109},[99,141237,141238],{"class":101,"line":1186},[99,141239,132013],{"class":168},[99,141241,141242,141244,141246,141248,141250,141252],{"class":101,"line":1200},[99,141243,132018],{"class":1949},[99,141245,79788],{"class":109},[99,141247,128893],{"class":158},[99,141249,51418],{"class":109},[99,141251,54812],{"class":158},[99,141253,129463],{"class":109},[99,141255,141256],{"class":101,"line":1206},[99,141257,132033],{"class":168},[99,141259,141260,141262,141264,141266,141268,141270],{"class":101,"line":1297},[99,141261,132038],{"class":1949},[99,141263,79788],{"class":109},[99,141265,128893],{"class":158},[99,141267,51418],{"class":109},[99,141269,86214],{"class":158},[99,141271,129463],{"class":109},[99,141273,141274],{"class":101,"line":1303},[99,141275,132053],{"class":168},[99,141277,141278,141280,141282,141284,141286,141288],{"class":101,"line":1315},[99,141279,132058],{"class":1949},[99,141281,79788],{"class":109},[99,141283,128893],{"class":158},[99,141285,51418],{"class":109},[99,141287,132067],{"class":158},[99,141289,129463],{"class":109},[1117,141291,141292,141303],{},[56,141293,141294,141295,141298,141299,100999,141301],{},"1 号盒子左侧浮动 ",[96,141296,141297],{},"sk_list"," 里面包含 ",[96,141300,1117],{},[96,141302,56],{},[56,141304,141305,141306,141298,141309,100999,141311],{},"2 号盒子左侧浮动 ",[96,141307,141308],{},"sk_con",[96,141310,1117],{},[96,141312,56],{},[14,141314,139903],{},[90,141316,141317],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,141318,141319,141325,141335],{"__ignoreMap":21},[99,141320,141321,141323],{"class":101,"line":102},[99,141322,130381],{"class":1949},[99,141324,15559],{"class":109},[99,141326,141327,141329,141331,141333],{"class":101,"line":22},[99,141328,131013],{"class":158},[99,141330,51418],{"class":109},[99,141332,23724],{"class":158},[99,141334,1276],{"class":109},[99,141336,141337],{"class":101,"line":1165},[99,141338,1551],{"class":109},[14,141340,139992],{},[90,141342,141343],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,141344,141345,141351,141361],{"__ignoreMap":21},[99,141346,141347,141349],{"class":101,"line":102},[99,141348,130381],{"class":1949},[99,141350,15559],{"class":109},[99,141352,141353,141355,141357,141359],{"class":101,"line":22},[99,141354,131013],{"class":158},[99,141356,51418],{"class":109},[99,141358,23724],{"class":158},[99,141360,1276],{"class":109},[99,141362,141363],{"class":101,"line":1165},[99,141364,1551],{"class":109},[70,141366,141368,141369],{"id":141367},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[96,141370,141371],{},"sk_container",[1448,141373],{"style":126389,"src":141374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1117,141376,141377,141382],{},[56,141378,140557,141379,141381],{},[96,141380,141371],{}," 给宽度 1200，不要给高度",[56,141383,141384],{},"一定不要忘记清除浮动",[14,141386,139903],{},[90,141388,141389],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,141390,141391,141397,141407],{"__ignoreMap":21},[99,141392,141393,141395],{"class":101,"line":102},[99,141394,130381],{"class":1949},[99,141396,15559],{"class":109},[99,141398,141399,141401,141403,141405],{"class":101,"line":22},[99,141400,131013],{"class":158},[99,141402,51418],{"class":109},[99,141404,23724],{"class":158},[99,141406,1276],{"class":109},[99,141408,141409],{"class":101,"line":1165},[99,141410,1551],{"class":109},[53,141412,141413],{},[56,141414,141415],{},"sk_hd制作",[1117,141417,141418],{},[56,141419,140637,141420,141423],{},[96,141421,141422],{},"sk_hd"," ，插入图片即可",[14,141425,139903],{},[90,141427,141428],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,141429,141430],{"__ignoreMap":21},[99,141431,141432,141434,141436,141438,141440,141442,141444,141446,141448,141450,141452,141454],{"class":101,"line":102},[99,141433,1020],{"class":109},[99,141435,1448],{"class":51281},[99,141437,55220],{"class":1949},[99,141439,155],{"class":109},[99,141441,134050],{"class":214},[99,141443,55228],{"class":1949},[99,141445,155],{"class":109},[99,141447,134057],{"class":214},[99,141449,134060],{"class":1949},[99,141451,155],{"class":109},[99,141453,134065],{"class":214},[99,141455,51288],{"class":109},[53,141457,141458],{"start":22},[56,141459,141460],{},"sk_bd制作",[1117,141462,141463],{},[56,141464,141465,141466,141469,141470,100999,141472,141474],{},"3 号盒子 ",[96,141467,141468],{},"sk_bd"," ，里面包含很多的 ",[96,141471,1117],{},[96,141473,56],{},[1117,141475,141476,141485],{},[56,141477,141478,141479,141481,141482,141484],{},"当鼠标移入到 ",[96,141480,56],{}," 上面的时候显示红色的边框，在这里先给 ",[96,141483,56],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[56,141486,141487,141488,141490,141491,141493,141494,141497,141498,141500],{},"由于给每个 ",[96,141489,56],{}," 都设置了外边距，导致一行的最后一个 ",[96,141492,56],{}," 掉了下来，在这里我们利用 ",[96,141495,141496],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[96,141499,56],{},"，去掉外边距就好了",[14,141502,139903],{},[90,141504,141505],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,141506,141507,141513,141525],{"__ignoreMap":21},[99,141508,141509,141511],{"class":101,"line":102},[99,141510,51592],{"class":51281},[99,141512,15559],{"class":109},[99,141514,141515,141517,141519,141521,141523],{"class":101,"line":22},[99,141516,70451],{"class":158},[99,141518,51418],{"class":109},[99,141520,301],{"class":158},[99,141522,51537],{"class":158},[99,141524,1276],{"class":109},[99,141526,141527],{"class":101,"line":1165},[99,141528,1551],{"class":109},[14,141530,139992],{},[90,141532,141533],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,141534,141535,141541,141553],{"__ignoreMap":21},[99,141536,141537,141539],{"class":101,"line":102},[99,141538,51592],{"class":51281},[99,141540,15559],{"class":109},[99,141542,141543,141545,141547,141549,141551],{"class":101,"line":22},[99,141544,70451],{"class":158},[99,141546,51418],{"class":109},[99,141548,301],{"class":158},[99,141550,51537],{"class":158},[99,141552,1276],{"class":109},[99,141554,141555],{"class":101,"line":1165},[99,141556,1551],{"class":109},[41,141558,141560],{"id":141559},"_163-注册页面制作","16.3 注册页面制作",[1448,141562],{"style":126389,"src":141563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141565,141566,141568],{},[259,141567,9012],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1448,141570],{"style":126389,"src":141571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[70,141573,141575],{"id":141574},"_1631-准备工作","16.3.1 准备工作",[1117,141577,141578,141581],{},[56,141579,141580],{},"创建register.html，引入 base.css，引入favicon图标",[56,141582,141583],{},"创建register.css ，在html页面进行引入",[70,141585,141587,141588,141590],{"id":141586},"_1632-header-头部实现","16.3.2 ",[96,141589,131538],{}," 头部实现",[1117,141592,141593,141596],{},[56,141594,141595],{},"整个内容用 版心 进行包裹",[56,141597,141598],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141600,139903],{},[90,141602,141603],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,141604,141605],{"__ignoreMap":21},[99,141606,141607,141609,141611,141613,141615,141617,141619,141621,141623,141625,141627,141629],{"class":101,"line":102},[99,141608,1020],{"class":109},[99,141610,1448],{"class":51281},[99,141612,55220],{"class":1949},[99,141614,155],{"class":109},[99,141616,134050],{"class":214},[99,141618,55228],{"class":1949},[99,141620,155],{"class":109},[99,141622,134057],{"class":214},[99,141624,134060],{"class":1949},[99,141626,155],{"class":109},[99,141628,134065],{"class":214},[99,141630,51288],{"class":109},[14,141632,139992],{},[90,141634,141635],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,141636,141637],{"__ignoreMap":21},[99,141638,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657,141659,141661],{"class":101,"line":102},[99,141640,1020],{"class":109},[99,141642,1448],{"class":51281},[99,141644,55220],{"class":1949},[99,141646,155],{"class":109},[99,141648,134050],{"class":214},[99,141650,55228],{"class":1949},[99,141652,155],{"class":109},[99,141654,134057],{"class":214},[99,141656,134060],{"class":1949},[99,141658,155],{"class":109},[99,141660,134065],{"class":214},[99,141662,51288],{"class":109},[70,141664,141666,141667,141670],{"id":141665},"_1633-registerarea-主体模块实现","16.3.3 ",[96,141668,141669],{},"registerarea"," 主体模块实现",[1448,141672],{"style":126389,"src":141673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141675,141676],{},"整个大盒子 高度为 522px，设置4个边框",[14,141678,139903],{},[90,141680,141681],{"className":126533,"code":130690,"language":126535,"meta":21,"style":21},[96,141682,141683,141689,141705],{"__ignoreMap":21},[99,141684,141685,141687],{"class":101,"line":102},[99,141686,51592],{"class":51281},[99,141688,15559],{"class":109},[99,141690,141691,141693,141695,141697,141699,141701,141703],{"class":101,"line":22},[99,141692,70877],{"class":158},[99,141694,51418],{"class":109},[99,141696,327],{"class":158},[99,141698,51473],{"class":105},[99,141700,51502],{"class":158},[99,141702,129925],{"class":158},[99,141704,1276],{"class":109},[99,141706,141707],{"class":101,"line":1165},[99,141708,1551],{"class":109},[14,141710,139992],{},[90,141712,141713],{"className":126533,"code":130690,"language":126535,"meta":21,"style":21},[96,141714,141715,141721,141737],{"__ignoreMap":21},[99,141716,141717,141719],{"class":101,"line":102},[99,141718,51592],{"class":51281},[99,141720,15559],{"class":109},[99,141722,141723,141725,141727,141729,141731,141733,141735],{"class":101,"line":22},[99,141724,70877],{"class":158},[99,141726,51418],{"class":109},[99,141728,327],{"class":158},[99,141730,51473],{"class":105},[99,141732,51502],{"class":158},[99,141734,129925],{"class":158},[99,141736,1276],{"class":109},[99,141738,141739],{"class":101,"line":1165},[99,141740,1551],{"class":109},[14,141742,141743],{},"1号盒子 是一个 h3 标签，放标题",[1117,141745,141746],{},[56,141747,141748],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141750,139903],{},[90,141752,141753],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,141754,141755,141761,141771],{"__ignoreMap":21},[99,141756,141757,141759],{"class":101,"line":102},[99,141758,130381],{"class":1949},[99,141760,15559],{"class":109},[99,141762,141763,141765,141767,141769],{"class":101,"line":22},[99,141764,131013],{"class":158},[99,141766,51418],{"class":109},[99,141768,23724],{"class":158},[99,141770,1276],{"class":109},[99,141772,141773],{"class":101,"line":1165},[99,141774,1551],{"class":109},[14,141776,139992],{},[90,141778,141779],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,141780,141781,141787,141797],{"__ignoreMap":21},[99,141782,141783,141785],{"class":101,"line":102},[99,141784,130381],{"class":1949},[99,141786,15559],{"class":109},[99,141788,141789,141791,141793,141795],{"class":101,"line":22},[99,141790,131013],{"class":158},[99,141792,51418],{"class":109},[99,141794,23724],{"class":158},[99,141796,1276],{"class":109},[99,141798,141799],{"class":101,"line":1165},[99,141800,1551],{"class":109},[14,141802,141803],{},"2号盒子 里面放注册的内容",[1117,141805,141806,141809,141818,141832,141845,141848,141851,141869,141883],{},[56,141807,141808],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[56,141810,141811,141812,141814,141815,141817],{},"里面的内容利用 ",[96,141813,1117],{}," 包含 ",[96,141816,56],{}," 来实现的（不需要用表格）",[56,141819,139047,141820,141822,141823,141825,141826,141828,141829,141831],{},[96,141821,56],{}," 里面，左侧放 ",[96,141824,33589],{}," 标签， 中间放",[96,141827,53802],{}," 标签， 右侧放 ",[96,141830,99],{}," 提示信息",[56,141833,141834,141835,141837,141838,141840,141841,141844],{},"左侧 ",[96,141836,33589],{},"里面的文字都是右对齐，我们可以给",[96,141839,33589],{},"设置一个宽度（88px），然后利用",[96,141842,141843],{},"text-align"," 来设置右对齐",[56,141846,141847],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[56,141849,141850],{},"右侧 span修饰一下文字颜色",[56,141852,141853,141854],{},"提示信息的样式优化",[1117,141855,141856,141859,141862],{},[56,141857,141858],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[56,141860,141861],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[56,141863,141864,141865,141868],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[96,141866,141867],{},"vertical-algin"," 来设置 图片与文字对齐方式",[56,141870,141871,141872],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1117,141873,141874,141880],{},[56,141875,141876,141877,141879],{},"设置 ",[96,141878,23541],{}," 的 左右 12px 的内边距，设置一下文字颜色",[56,141881,141882],{},"分别设置 背景颜色",[56,141884,141885,141886,141888],{},"同意协议 和 完成注册 都是用 ",[96,141887,56],{}," 进行包裹",[14,141890,139903],{},[90,141892,141893],{"className":126533,"code":140476,"language":126535,"meta":21,"style":21},[96,141894,141895,141901,141911],{"__ignoreMap":21},[99,141896,141897,141899],{"class":101,"line":102},[99,141898,51592],{"class":51281},[99,141900,15559],{"class":109},[99,141902,141903,141905,141907,141909],{"class":101,"line":22},[99,141904,70859],{"class":158},[99,141906,51418],{"class":109},[99,141908,140493],{"class":158},[99,141910,1276],{"class":109},[99,141912,141913],{"class":101,"line":1165},[99,141914,1551],{"class":109},[14,141916,139992],{},[90,141918,141919],{"className":126533,"code":140476,"language":126535,"meta":21,"style":21},[96,141920,141921,141927,141937],{"__ignoreMap":21},[99,141922,141923,141925],{"class":101,"line":102},[99,141924,51592],{"class":51281},[99,141926,15559],{"class":109},[99,141928,141929,141931,141933,141935],{"class":101,"line":22},[99,141930,70859],{"class":158},[99,141932,51418],{"class":109},[99,141934,140493],{"class":158},[99,141936,1276],{"class":109},[99,141938,141939],{"class":101,"line":1165},[99,141940,1551],{"class":109},[70,141942,141944],{"id":141943},"_1634-底部实现","16.3.4 底部实现",[14,141946,139903],{},[90,141948,141949],{"className":126533,"code":140476,"language":126535,"meta":21,"style":21},[96,141950,141951,141957,141967],{"__ignoreMap":21},[99,141952,141953,141955],{"class":101,"line":102},[99,141954,51592],{"class":51281},[99,141956,15559],{"class":109},[99,141958,141959,141961,141963,141965],{"class":101,"line":22},[99,141960,70859],{"class":158},[99,141962,51418],{"class":109},[99,141964,140493],{"class":158},[99,141966,1276],{"class":109},[99,141968,141969],{"class":101,"line":1165},[99,141970,1551],{"class":109},[14,141972,139992],{},[90,141974,141975],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,141976,141977,141981,141995,141999],{"__ignoreMap":21},[99,141978,141979],{"class":101,"line":102},[99,141980,130644],{"class":168},[99,141982,141983,141985,141987,141989,141991,141993],{"class":101,"line":22},[99,141984,1020],{"class":109},[99,141986,51592],{"class":51281},[99,141988,53467],{"class":1949},[99,141990,155],{"class":109},[99,141992,130657],{"class":214},[99,141994,51288],{"class":109},[99,141996,141997],{"class":101,"line":1165},[99,141998,130664],{"class":109},[99,142000,142001,142003,142005],{"class":101,"line":1180},[99,142002,51766],{"class":109},[99,142004,51592],{"class":51281},[99,142006,51288],{"class":109},[41,142008,142010],{"id":142009},"_164-项目总结","16.4 项目总结",[53,142012,142013,142016,142019,142022],{},[56,142014,142015],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[56,142017,142018],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[56,142020,142021],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[56,142023,142024],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1448,142026],{"style":126389,"src":142027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[53,142029,142030],{"start":1186},[56,142031,142032],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1448,142034],{"style":126389,"src":142035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[53,142037,142038],{"start":1200},[56,142039,142040],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1448,142042],{"style":126389,"src":142043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[90,142045,142046],{"className":127280,"code":136690,"language":127282,"meta":21,"style":21},[96,142047,142048],{"__ignoreMap":21},[99,142049,142050,142052,142054,142056,142058,142060,142062,142064,142066,142068,142070,142072],{"class":101,"line":102},[99,142051,1020],{"class":109},[99,142053,53802],{"class":51281},[99,142055,53805],{"class":1949},[99,142057,155],{"class":109},[99,142059,62680],{"class":214},[99,142061,14907],{"class":1949},[99,142063,155],{"class":109},[99,142065,136711],{"class":214},[99,142067,61001],{"class":1949},[99,142069,155],{"class":109},[99,142071,136718],{"class":214},[99,142073,51288],{"class":109},[53,142075,142076,142079],{"start":1206},[56,142077,142078],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[56,142080,142081],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5113,142083,142084],{},"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":21,"searchDepth":22,"depth":22,"links":142086},[142087,142092,142099,142107],{"id":139713,"depth":22,"text":139714,"children":142088},[142089,142090,142091],{"id":139717,"depth":1165,"text":139718},{"id":140448,"depth":1165,"text":140449},{"id":140761,"depth":1165,"text":140762},{"id":141061,"depth":22,"text":141062,"children":142093},[142094,142095,142097],{"id":141065,"depth":1165,"text":141066},{"id":141083,"depth":1165,"text":142096},"16.2.2 列表页 header 和 nav 修改",{"id":141367,"depth":1165,"text":142098},"16.2.3 列表页主体 sk_container",{"id":141559,"depth":22,"text":141560,"children":142100},[142101,142102,142104,142106],{"id":141574,"depth":1165,"text":141575},{"id":141586,"depth":1165,"text":142103},"16.3.2 header 头部实现",{"id":141665,"depth":1165,"text":142105},"16.3.3 registerarea 主体模块实现",{"id":141943,"depth":1165,"text":141944},{"id":142009,"depth":22,"text":142010},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139705,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142114,"title":142115,"body":142116,"description":23364,"extension":24,"meta":142224,"navigation":26,"path":142225,"seo":142226,"stem":142227,"__hash__":142228},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142117,"toc":142219},[142118,142121,142125,142128,142131,142140,142149,142153,142158,142165,142183,142186,142189,142192,142195,142198,142201,142204,142207,142210,142213,142216],[10,142119,142115],{"id":142120},"_17-web服务器与网站发布",[41,142122,142124],{"id":142123},"_171-web服务器","17.1 Web服务器",[14,142126,142127],{},"把自己网站上传到服务器上，可以让其他人访问",[1448,142129],{"style":126389,"src":142130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142132,142133,142136,142137],{},[259,142134,142135],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[259,142138,142139],{},"Web 服务器等",[14,142141,142142,142143,100999,142146,25729],{},"根据服务器在网络中所在的位置不同，又可分为 ",[259,142144,142145],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[259,142147,142148],{},"远程服务器",[70,142150,142152],{"id":142151},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142154,142155],{},[259,142156,142157],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142159,142160,142161],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[348,142162,142163],{"href":142163,"rel":142164},"http:\u002F\u002Ffree.3v.do\u002F",[23853],[1117,142166,142167,142170,142173,142180],{},[56,142168,142169],{},"去免费空间网站注册账号。",[56,142171,142172],{},"记录下主机名、用户名、密码、域名。",[56,142174,142175,142176,142179],{},"利用 ",[96,142177,142178],{},"utftp"," 软件 上传网站到远程服务器",[56,142181,142182],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142184,142185],{},"使用软件上传，对上传软件文件进行解压",[1448,142187],{"style":126389,"src":142188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1448,142190],{"style":126389,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142193,142194],{},"输入刚刚申请的服务器账号信息：",[1448,142196],{"style":126389,"src":142197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1448,142199],{"style":126389,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1448,142202],{"style":126389,"src":142203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1448,142205],{"style":126389,"src":142206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142208,142209],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1448,142211],{"style":126389,"src":142212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142214,142215],{},"浏览器输入域名即可访问",[14,142217,142218],{},"首页一定必须是index",{"title":21,"searchDepth":22,"depth":22,"links":142220},[142221],{"id":142123,"depth":22,"text":142124,"children":142222},[142223],{"id":142151,"depth":1165,"text":142152},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142115,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142230,"title":142231,"body":142232,"description":23364,"extension":24,"meta":143159,"navigation":26,"path":143160,"seo":143161,"stem":143162,"__hash__":143163},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142233,"toc":143142},[142234,142237,142241,142244,142247,142258,142261,142265,142269,142274,142277,142280,142283,142286,142290,142316,142320,142324,142327,142330,142334,142367,142371,142374,142377,142441,142445,142449,142452,142455,142458,142462,142507,142511,142514,142544,142548,142552,142555,142558,142562,142565,142634,142637,142745,142747,142753,142757,142760,142763,142859,142862,142866,142890,142894,142897,142901,142904,142908,142911,142914,142917,142920,142924,142927,142930,142934,142938,142941,142944,142947,142950,142954,142957,142961,142964,142967,143012,143016,143020,143023,143026,143029,143061,143065,143068,143102,143106,143109,143139],[10,142235,142231],{"id":142236},"_18-2d动画与3d转换",[41,142238,142240],{"id":142239},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142242,142243],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142245,142246],{},"转换（transform）你可以简单理解为变形",[1117,142248,142249,142252,142255],{},[56,142250,142251],{},"移动：translate",[56,142253,142254],{},"旋转：rotate",[56,142256,142257],{},"缩放：scale",[1448,142259],{"style":126389,"src":142260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[70,142262,142264],{"id":142263},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21985,142266,142268],{"id":142267},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142270,142271,142272],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[259,142273,133192],{},[1448,142275],{"style":126389,"src":142276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142278,142279],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142281,142282],{},"对于行内元素无效",[14,142284,142285],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21985,142287,142289],{"id":142288},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[90,142291,142292],{"className":126533,"code":138722,"language":126535,"meta":21,"style":21},[96,142293,142294,142300,142312],{"__ignoreMap":21},[99,142295,142296,142298],{"class":101,"line":102},[99,142297,51592],{"class":51281},[99,142299,15559],{"class":109},[99,142301,142302,142304,142306,142308,142310],{"class":101,"line":22},[99,142303,70451],{"class":158},[99,142305,51418],{"class":109},[99,142307,301],{"class":158},[99,142309,51537],{"class":158},[99,142311,1276],{"class":109},[99,142313,142314],{"class":101,"line":1165},[99,142315,1551],{"class":109},[70,142317,142319],{"id":142318},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21985,142321,142323],{"id":142322},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142325,142326],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1448,142328],{"style":126389,"src":142329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21985,142331,142333],{"id":142332},"_18122-旋转效果","18.1.2.2 旋转效果",[90,142335,142337],{"className":126533,"code":142336,"language":126535,"meta":21,"style":21},"div {\n  transform: rotate(45deg);\n}\n",[96,142338,142339,142345,142363],{"__ignoreMap":21},[99,142340,142341,142343],{"class":101,"line":102},[99,142342,51592],{"class":51281},[99,142344,15559],{"class":109},[99,142346,142347,142349,142351,142354,142356,142358,142361],{"class":101,"line":22},[99,142348,136517],{"class":158},[99,142350,51418],{"class":109},[99,142352,142353],{"class":158},"rotate",[99,142355,110],{"class":109},[99,142357,639],{"class":158},[99,142359,142360],{"class":105},"deg",[99,142362,2705],{"class":109},[99,142364,142365],{"class":101,"line":1165},[99,142366,1551],{"class":109},[21985,142368,142370],{"id":142369},"_18123-三角做法","18.1.2.3 三角做法",[14,142372,142373],{},"该下标当经过最外层大盒子时会实现向上反转",[1448,142375],{"style":126389,"src":142376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[90,142378,142379],{"className":126533,"code":135053,"language":126535,"meta":21,"style":21},[96,142380,142381,142385,142391,142401,142411,142427,142437],{"__ignoreMap":21},[99,142382,142383],{"class":101,"line":102},[99,142384,135060],{"class":168},[99,142386,142387,142389],{"class":101,"line":22},[99,142388,135065],{"class":1949},[99,142390,15559],{"class":109},[99,142392,142393,142395,142397,142399],{"class":101,"line":1165},[99,142394,70549],{"class":158},[99,142396,51418],{"class":109},[99,142398,301],{"class":158},[99,142400,1276],{"class":109},[99,142402,142403,142405,142407,142409],{"class":101,"line":1180},[99,142404,70769],{"class":158},[99,142406,51418],{"class":109},[99,142408,301],{"class":158},[99,142410,1276],{"class":109},[99,142412,142413,142415,142417,142419,142421,142423,142425],{"class":101,"line":1186},[99,142414,70877],{"class":158},[99,142416,51418],{"class":109},[99,142418,556],{"class":158},[99,142420,51473],{"class":105},[99,142422,51502],{"class":158},[99,142424,63972],{"class":158},[99,142426,1276],{"class":109},[99,142428,142429,142431,142433,142435],{"class":101,"line":1200},[99,142430,135108],{"class":158},[99,142432,51418],{"class":109},[99,142434,62350],{"class":158},[99,142436,1276],{"class":109},[99,142438,142439],{"class":101,"line":1206},[99,142440,1551],{"class":109},[70,142442,142444],{"id":142443},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21985,142446,142448],{"id":142447},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142450,142451],{},"设置中心点",[1448,142453],{"style":126389,"src":142454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142456,142457],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21985,142459,142461],{"id":142460},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[90,142463,142465],{"className":126533,"code":142464,"language":126535,"meta":21,"style":21},"\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",[96,142466,142467,142472,142478,142493,142498,142503],{"__ignoreMap":21},[99,142468,142469],{"class":101,"line":102},[99,142470,142471],{"class":168},"\u002F* 转换中心点 *\u002F\n",[99,142473,142474,142476],{"class":101,"line":22},[99,142475,51592],{"class":51281},[99,142477,15559],{"class":109},[99,142479,142480,142483,142485,142487,142489,142491],{"class":101,"line":1165},[99,142481,142482],{"class":158},"  transform-origin",[99,142484,51418],{"class":109},[99,142486,51573],{"class":158},[99,142488,17131],{"class":158},[99,142490,130396],{"class":109},[99,142492,135206],{"class":168},[99,142494,142495],{"class":101,"line":1180},[99,142496,142497],{"class":168},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[99,142499,142500],{"class":101,"line":1186},[99,142501,142502],{"class":168},"  \u002F* transform-origin: left top; *\u002F\n",[99,142504,142505],{"class":101,"line":1200},[99,142506,1551],{"class":109},[21985,142508,142510],{"id":142509},"_18133-旋转案例","18.1.3.3 旋转案例",[1448,142512],{"style":126389,"src":142513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[90,142515,142516],{"className":126533,"code":142336,"language":126535,"meta":21,"style":21},[96,142517,142518,142524,142540],{"__ignoreMap":21},[99,142519,142520,142522],{"class":101,"line":102},[99,142521,51592],{"class":51281},[99,142523,15559],{"class":109},[99,142525,142526,142528,142530,142532,142534,142536,142538],{"class":101,"line":22},[99,142527,136517],{"class":158},[99,142529,51418],{"class":109},[99,142531,142353],{"class":158},[99,142533,110],{"class":109},[99,142535,639],{"class":158},[99,142537,142360],{"class":105},[99,142539,2705],{"class":109},[99,142541,142542],{"class":101,"line":1165},[99,142543,1551],{"class":109},[70,142545,142547],{"id":142546},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21985,142549,142551],{"id":142550},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142553,142554],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1448,142556],{"style":126389,"src":142557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21985,142559,142561],{"id":142560},"_18142-分页按钮","18.1.4.2 分页按钮",[1448,142563],{"style":126389,"src":142564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[90,142566,142568],{"className":126533,"code":142567,"language":126535,"meta":21,"style":21},"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",[96,142569,142570,142576,142592,142596,142600,142605,142611,142625,142630],{"__ignoreMap":21},[99,142571,142572,142574],{"class":101,"line":102},[99,142573,51592],{"class":51281},[99,142575,15559],{"class":109},[99,142577,142578,142580,142582,142585,142587,142590],{"class":101,"line":22},[99,142579,136517],{"class":158},[99,142581,51418],{"class":109},[99,142583,142584],{"class":158},"scale",[99,142586,110],{"class":109},[99,142588,142589],{"class":158},"1.2",[99,142591,2705],{"class":109},[99,142593,142594],{"class":101,"line":1165},[99,142595,1551],{"class":109},[99,142597,142598],{"class":101,"line":1180},[99,142599,135994],{"class":109},[99,142601,142602],{"class":101,"line":1186},[99,142603,142604],{"class":168},"\u002F* 2D 缩放 *\u002F\n",[99,142606,142607,142609],{"class":101,"line":1200},[99,142608,51592],{"class":51281},[99,142610,15559],{"class":109},[99,142612,142613,142615,142617,142619,142621,142623],{"class":101,"line":1206},[99,142614,136517],{"class":158},[99,142616,51418],{"class":109},[99,142618,142584],{"class":158},[99,142620,110],{"class":109},[99,142622,142589],{"class":158},[99,142624,2705],{"class":109},[99,142626,142627],{"class":101,"line":1297},[99,142628,142629],{"class":168},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[99,142631,142632],{"class":101,"line":1303},[99,142633,1551],{"class":109},[14,142635,142636],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[90,142638,142640],{"className":126533,"code":142639,"language":126535,"meta":21,"style":21},"\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",[96,142641,142642,142647,142657,142678,142699,142703,142708,142714,142741],{"__ignoreMap":21},[99,142643,142644],{"class":101,"line":102},[99,142645,142646],{"class":168},"\u002F* 定义动画 *\u002F\n",[99,142648,142649,142652,142655],{"class":101,"line":22},[99,142650,142651],{"class":105},"@keyframes",[99,142653,142654],{"class":5203}," move",[99,142656,15559],{"class":109},[99,142658,142659,142662,142664,142666,142668,142671,142673,142675],{"class":101,"line":1165},[99,142660,142661],{"class":1949},"  0%",[99,142663,79788],{"class":109},[99,142665,48115],{"class":158},[99,142667,51418],{"class":109},[99,142669,142670],{"class":158},"translateX",[99,142672,110],{"class":109},[99,142674,301],{"class":158},[99,142676,142677],{"class":109},"); }\n",[99,142679,142680,142683,142685,142687,142689,142691,142693,142695,142697],{"class":101,"line":1180},[99,142681,142682],{"class":1949},"  100%",[99,142684,79788],{"class":109},[99,142686,48115],{"class":158},[99,142688,51418],{"class":109},[99,142690,142670],{"class":158},[99,142692,110],{"class":109},[99,142694,421],{"class":158},[99,142696,51473],{"class":105},[99,142698,142677],{"class":109},[99,142700,142701],{"class":101,"line":1186},[99,142702,1551],{"class":109},[99,142704,142705],{"class":101,"line":1200},[99,142706,142707],{"class":168},"\u002F* 调用动画 *\u002F\n",[99,142709,142710,142712],{"class":101,"line":1206},[99,142711,51592],{"class":51281},[99,142713,15559],{"class":109},[99,142715,142716,142719,142721,142723,142725,142727,142729,142731,142733,142736,142739],{"class":101,"line":1297},[99,142717,142718],{"class":158},"  animation",[99,142720,51418],{"class":109},[99,142722,135219],{"class":158},[99,142724,25107],{"class":158},[99,142726,805],{"class":105},[99,142728,78661],{"class":158},[99,142730,4079],{"class":158},[99,142732,805],{"class":105},[99,142734,142735],{"class":158}," infinite",[99,142737,142738],{"class":158}," alternate",[99,142740,1276],{"class":109},[99,142742,142743],{"class":101,"line":1303},[99,142744,1551],{"class":109},[14,142746,142636],{},[90,142748,142751],{"className":142749,"code":142750,"language":5174},[5172],"\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",[96,142752,142750],{"__ignoreMap":21},[21985,142754,142756],{"id":142755},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142758,142759],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1448,142761],{"style":126389,"src":142762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[90,142764,142765],{"className":126533,"code":142639,"language":126535,"meta":21,"style":21},[96,142766,142767,142771,142779,142797,142817,142821,142825,142831,142855],{"__ignoreMap":21},[99,142768,142769],{"class":101,"line":102},[99,142770,142646],{"class":168},[99,142772,142773,142775,142777],{"class":101,"line":22},[99,142774,142651],{"class":105},[99,142776,142654],{"class":5203},[99,142778,15559],{"class":109},[99,142780,142781,142783,142785,142787,142789,142791,142793,142795],{"class":101,"line":1165},[99,142782,142661],{"class":1949},[99,142784,79788],{"class":109},[99,142786,48115],{"class":158},[99,142788,51418],{"class":109},[99,142790,142670],{"class":158},[99,142792,110],{"class":109},[99,142794,301],{"class":158},[99,142796,142677],{"class":109},[99,142798,142799,142801,142803,142805,142807,142809,142811,142813,142815],{"class":101,"line":1180},[99,142800,142682],{"class":1949},[99,142802,79788],{"class":109},[99,142804,48115],{"class":158},[99,142806,51418],{"class":109},[99,142808,142670],{"class":158},[99,142810,110],{"class":109},[99,142812,421],{"class":158},[99,142814,51473],{"class":105},[99,142816,142677],{"class":109},[99,142818,142819],{"class":101,"line":1186},[99,142820,1551],{"class":109},[99,142822,142823],{"class":101,"line":1200},[99,142824,142707],{"class":168},[99,142826,142827,142829],{"class":101,"line":1206},[99,142828,51592],{"class":51281},[99,142830,15559],{"class":109},[99,142832,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851,142853],{"class":101,"line":1297},[99,142834,142718],{"class":158},[99,142836,51418],{"class":109},[99,142838,135219],{"class":158},[99,142840,25107],{"class":158},[99,142842,805],{"class":105},[99,142844,78661],{"class":158},[99,142846,4079],{"class":158},[99,142848,805],{"class":105},[99,142850,142735],{"class":158},[99,142852,142738],{"class":158},[99,142854,1276],{"class":109},[99,142856,142857],{"class":101,"line":1303},[99,142858,1551],{"class":109},[14,142860,142861],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[70,142863,142865],{"id":142864},"_1823-知识点回顾","18.2.3 知识点回顾",[90,142867,142868],{"className":126533,"code":128702,"language":126535,"meta":21,"style":21},[96,142869,142870,142876,142886],{"__ignoreMap":21},[99,142871,142872,142874],{"class":101,"line":102},[99,142873,51592],{"class":51281},[99,142875,15559],{"class":109},[99,142877,142878,142880,142882,142884],{"class":101,"line":22},[99,142879,128715],{"class":158},[99,142881,51418],{"class":109},[99,142883,61717],{"class":158},[99,142885,1276],{"class":109},[99,142887,142888],{"class":101,"line":1165},[99,142889,1551],{"class":109},[41,142891,142893],{"id":142892},"_183-3d-转换","18.3 3D 转换",[14,142895,142896],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[70,142898,142900],{"id":142899},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1448,142902],{"style":126389,"src":142903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[70,142905,142907],{"id":142906},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1448,142909],{"style":126389,"src":142910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142912,142913],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142915,142916],{},"translate3d的效果需要搭配透视perspective来使用",[1448,142918],{"style":126389,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[70,142921,142923],{"id":142922},"_1833-透视-perspective","18.3.3 透视 perspective",[1448,142925],{"style":126389,"src":142926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142928,142929],{},"透视写在父盒子上，单位为像素",[70,142931,142933],{"id":142932},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21985,142935,142937],{"id":142936},"_18341-分开解释","18.3.4.1 分开解释",[1448,142939],{"style":126389,"src":142940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1448,142942],{"style":126389,"src":142943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1448,142945],{"style":126389,"src":142946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142948,142949],{},"总结来说就是左手原则",[21985,142951,142953],{"id":142952},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1448,142955],{"style":126389,"src":142956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[70,142958,142960],{"id":142959},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1448,142962],{"style":126389,"src":142963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1448,142965],{"style":126389,"src":142966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[90,142968,142970],{"className":126533,"code":142969,"language":126535,"meta":21,"style":21},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[96,142971,142972,142978,142991,143008],{"__ignoreMap":21},[99,142973,142974,142976],{"class":101,"line":102},[99,142975,51592],{"class":51281},[99,142977,15559],{"class":109},[99,142979,142980,142983,142985,142987,142989],{"class":101,"line":22},[99,142981,142982],{"class":158},"  perspective",[99,142984,51418],{"class":109},[99,142986,65055],{"class":158},[99,142988,51473],{"class":105},[99,142990,1276],{"class":109},[99,142992,142993,142995,142997,143000,143002,143004,143006],{"class":101,"line":1165},[99,142994,136517],{"class":158},[99,142996,51418],{"class":109},[99,142998,142999],{"class":158},"rotateX",[99,143001,110],{"class":109},[99,143003,639],{"class":158},[99,143005,142360],{"class":105},[99,143007,2705],{"class":109},[99,143009,143010],{"class":101,"line":1180},[99,143011,1551],{"class":109},[70,143013,143015],{"id":143014},"_1836-案例","18.3.6 案例",[21985,143017,143019],{"id":143018},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1448,143021],{"style":126389,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1448,143024],{"style":126389,"src":143025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1448,143027],{"style":126389,"src":143028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[90,143030,143032],{"className":126533,"code":143031,"language":126535,"meta":21,"style":21},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[96,143033,143034,143039,143045,143057],{"__ignoreMap":21},[99,143035,143036],{"class":101,"line":102},[99,143037,143038],{"class":168},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[99,143040,143041,143043],{"class":101,"line":22},[99,143042,133530],{"class":1949},[99,143044,15559],{"class":109},[99,143046,143047,143049,143051,143053,143055],{"class":101,"line":1165},[99,143048,142982],{"class":158},[99,143050,51418],{"class":109},[99,143052,65055],{"class":158},[99,143054,51473],{"class":105},[99,143056,1276],{"class":109},[99,143058,143059],{"class":101,"line":1180},[99,143060,1551],{"class":109},[21985,143062,143064],{"id":143063},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1448,143066],{"style":126389,"src":143067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[90,143069,143070],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,143071,143072,143076,143090,143094],{"__ignoreMap":21},[99,143073,143074],{"class":101,"line":102},[99,143075,130644],{"class":168},[99,143077,143078,143080,143082,143084,143086,143088],{"class":101,"line":22},[99,143079,1020],{"class":109},[99,143081,51592],{"class":51281},[99,143083,53467],{"class":1949},[99,143085,155],{"class":109},[99,143087,130657],{"class":214},[99,143089,51288],{"class":109},[99,143091,143092],{"class":101,"line":1165},[99,143093,130664],{"class":109},[99,143095,143096,143098,143100],{"class":101,"line":1180},[99,143097,51766],{"class":109},[99,143099,51592],{"class":51281},[99,143101,51288],{"class":109},[21985,143103,143105],{"id":143104},"_18363-旋转木马","18.3.6.3 旋转木马",[1448,143107],{"style":126389,"src":143108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[90,143110,143111],{"className":126533,"code":142336,"language":126535,"meta":21,"style":21},[96,143112,143113,143119,143135],{"__ignoreMap":21},[99,143114,143115,143117],{"class":101,"line":102},[99,143116,51592],{"class":51281},[99,143118,15559],{"class":109},[99,143120,143121,143123,143125,143127,143129,143131,143133],{"class":101,"line":22},[99,143122,136517],{"class":158},[99,143124,51418],{"class":109},[99,143126,142353],{"class":158},[99,143128,110],{"class":109},[99,143130,639],{"class":158},[99,143132,142360],{"class":105},[99,143134,2705],{"class":109},[99,143136,143137],{"class":101,"line":1165},[99,143138,1551],{"class":109},[5113,143140,143141],{},"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":21,"searchDepth":22,"depth":22,"links":143143},[143144,143151],{"id":142239,"depth":22,"text":142240,"children":143145},[143146,143147,143148,143149,143150],{"id":142263,"depth":1165,"text":142264},{"id":142318,"depth":1165,"text":142319},{"id":142443,"depth":1165,"text":142444},{"id":142546,"depth":1165,"text":142547},{"id":142864,"depth":1165,"text":142865},{"id":142892,"depth":22,"text":142893,"children":143152},[143153,143154,143155,143156,143157,143158],{"id":142899,"depth":1165,"text":142900},{"id":142906,"depth":1165,"text":142907},{"id":142922,"depth":1165,"text":142923},{"id":142932,"depth":1165,"text":142933},{"id":142959,"depth":1165,"text":142960},{"id":143014,"depth":1165,"text":143015},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142231,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143165,"title":143166,"body":143167,"description":23364,"extension":24,"meta":143370,"navigation":26,"path":143371,"seo":143372,"stem":143373,"__hash__":143374},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143168,"toc":143359},[143169,143172,143176,143179,143182,143186,143189,143192,143195,143199,143202,143206,143209,143213,143216,143220,143234,143238,143263,143266,143269,143286,143290,143294,143297,143300,143304,143307,143310,143328,143332,143335,143349,143353,143356],[10,143170,143166],{"id":143171},"_19-移动端基础-前缀现状与视口",[41,143173,143175],{"id":143174},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1448,143177],{"style":126389,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143180,143181],{},"意思就是加个前缀，增加兼容性",[41,143183,143185],{"id":143184},"_192-移动端现状认识","19.2 移动端现状认识",[1448,143187],{"style":126389,"src":143188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143190,143191],{},"调试方法：",[1448,143193],{"style":126389,"src":143194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[41,143196,143198],{"id":143197},"_193-视口","19.3 视口",[14,143200,143201],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[70,143203,143205],{"id":143204},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1448,143207],{"style":126389,"src":143208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[70,143210,143212],{"id":143211},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1448,143214],{"style":126389,"src":143215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[70,143217,143219],{"id":143218},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1117,143221,143222,143225,143228,143231],{},[56,143223,143224],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[56,143226,143227],{},"理想视口，对设备来讲，是最理想的视口尺寸",[56,143229,143230],{},"需要手动添写meta视口标签通知浏览器操作",[56,143232,143233],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[70,143235,143237],{"id":143236},"_1934-meta视口标签","19.3.4 meta视口标签",[90,143239,143241],{"className":127280,"code":143240,"language":127282,"meta":21,"style":21},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[96,143242,143243],{"__ignoreMap":21},[99,143244,143245,143247,143249,143251,143253,143255,143257,143259,143261],{"class":101,"line":102},[99,143246,1020],{"class":109},[99,143248,51325],{"class":51281},[99,143250,14907],{"class":1949},[99,143252,155],{"class":109},[99,143254,51372],{"class":214},[99,143256,51352],{"class":1949},[99,143258,155],{"class":109},[99,143260,51379],{"class":214},[99,143262,51288],{"class":109},[1448,143264],{"style":126389,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143267,143268],{},"标准视口设置：",[53,143270,143271,143274,143277,143280,143283],{},[56,143272,143273],{},"视口宽度和设备保持一致",[56,143275,143276],{},"视口的默认缩放比例1.0",[56,143278,143279],{},"不允许用户自行缩放",[56,143281,143282],{},"最大允许的缩放比例1.0",[56,143284,143285],{},"最小允许的缩放比例1.0",[70,143287,143289],{"id":143288},"_1935-二倍图","19.3.5 二倍图",[21985,143291,143293],{"id":143292},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1448,143295],{"style":126389,"src":143296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1448,143298],{"style":126389,"src":143299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21985,143301,143303],{"id":143302},"_19352-多倍图","19.3.5.2 多倍图",[1448,143305],{"style":126389,"src":143306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143308,143309],{},"二倍图法，代码如下：",[90,143311,143313],{"className":126533,"code":143312,"language":126535,"meta":21,"style":21},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[96,143314,143315,143320],{"__ignoreMap":21},[99,143316,143317],{"class":101,"line":102},[99,143318,143319],{"class":168},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[99,143321,143322,143325],{"class":101,"line":22},[99,143323,143324],{"class":51281},"background-size",[99,143326,143327],{"class":109},": 50% 50%;\n",[21985,143329,143331],{"id":143330},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1448,143333],{"style":126389,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[53,143336,143337,143340,143343,143346],{},[56,143338,143339],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[56,143341,143342],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[56,143344,143345],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[56,143347,143348],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21985,143350,143352],{"id":143351},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1448,143354],{"style":126389,"src":143355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5113,143357,143358],{},"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":21,"searchDepth":22,"depth":22,"links":143360},[143361,143362,143363],{"id":143174,"depth":22,"text":143175},{"id":143184,"depth":22,"text":143185},{"id":143197,"depth":22,"text":143198,"children":143364},[143365,143366,143367,143368,143369],{"id":143204,"depth":1165,"text":143205},{"id":143211,"depth":1165,"text":143212},{"id":143218,"depth":1165,"text":143219},{"id":143236,"depth":1165,"text":143237},{"id":143288,"depth":1165,"text":143289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143166,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143376,"title":143377,"body":143378,"description":23364,"extension":24,"meta":144255,"navigation":26,"path":144256,"seo":144257,"stem":144258,"__hash__":144259},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143379,"toc":144239},[143380,143383,143387,143394,143397,143404,143407,143412,143415,143419,143423,143430,143433,143436,143440,143443,143446,143449,143452,143455,143459,143462,143466,143468,143471,143474,143477,143480,143482,143485,143487,143517,143519,143549,143553,143556,143560,143563,143580,143583,143586,143662,143664,143667,143670,143673,143676,143678,143681,143684,143688,143710,143713,143716,143720,143723,143729,143732,143736,143739,143742,143746,143749,143752,143755,143759,143762,143765,143768,143771,143775,143778,143782,143789,143792,143795,143798,143801,143811,143814,143817,143824,143827,143831,143834,143837,143841,143844,143847,143850,143895,143898,143901,143904,143906,144035,144037,144075,144078,144081,144083,144201,144203,144237],[10,143381,143377],{"id":143382},"_20-移动端布局实战上篇",[41,143384,143386],{"id":143385},"_201-移动端主流方案","20.1 移动端主流方案",[53,143388,143389],{},[56,143390,143391],{},[259,143392,143393],{},"单独移动端页面（主流）",[1448,143395],{"style":126389,"src":143396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[53,143398,143399],{"start":22},[56,143400,143401],{},[259,143402,143403],{},"响应式兼容PC移动端",[1448,143405],{"style":126389,"src":143406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[53,143408,143409],{"start":1165},[56,143410,143411],{},"两种页面选型布局方式",[1448,143413],{"style":126389,"src":143414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[41,143416,143418],{"id":143417},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[70,143420,143422],{"id":143421},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143424,143425,143426],{},"官网地址： ",[348,143427,143428],{"href":143428,"rel":143429},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23853],[1448,143431],{"style":126389,"src":143432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1448,143434],{"style":126389,"src":143435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[70,143437,143439],{"id":143438},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1448,143441],{"style":126389,"src":143442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1448,143444],{"style":126389,"src":143445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143447,143448],{},"去除高亮：",[14,143450,143451],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143453,143454],{},"-webkit- tap-highlight-color: transparent;",[41,143456,143458],{"id":143457},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1448,143460],{"style":126389,"src":143461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[41,143463,143465],{"id":143464},"_204-流式布局案例","20.4 流式布局案例",[14,143467,139],{},[14,143469,143470],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143472,143473],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143475,143476],{},"图片格式：",[1448,143478],{"style":126389,"src":143479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143481,135576],{},[1448,143483],{"style":126389,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143486,139903],{},[90,143488,143489],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,143490,143491],{"__ignoreMap":21},[99,143492,143493,143495,143497,143499,143501,143503,143505,143507,143509,143511,143513,143515],{"class":101,"line":102},[99,143494,1020],{"class":109},[99,143496,1448],{"class":51281},[99,143498,55220],{"class":1949},[99,143500,155],{"class":109},[99,143502,134050],{"class":214},[99,143504,55228],{"class":1949},[99,143506,155],{"class":109},[99,143508,134057],{"class":214},[99,143510,134060],{"class":1949},[99,143512,155],{"class":109},[99,143514,134065],{"class":214},[99,143516,51288],{"class":109},[14,143518,139992],{},[90,143520,143521],{"className":127280,"code":134035,"language":127282,"meta":21,"style":21},[96,143522,143523],{"__ignoreMap":21},[99,143524,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543,143545,143547],{"class":101,"line":102},[99,143526,1020],{"class":109},[99,143528,1448],{"class":51281},[99,143530,55220],{"class":1949},[99,143532,155],{"class":109},[99,143534,134050],{"class":214},[99,143536,55228],{"class":1949},[99,143538,155],{"class":109},[99,143540,134057],{"class":214},[99,143542,134060],{"class":1949},[99,143544,155],{"class":109},[99,143546,134065],{"class":214},[99,143548,51288],{"class":109},[41,143550,143552],{"id":143551},"_205-flex布局","20.5 flex布局",[1448,143554],{"style":126389,"src":143555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[70,143557,143559],{"id":143558},"_2051-布局原理","20.5.1 布局原理",[14,143561,143562],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1117,143564,143565,143568,143571,143574,143577],{},[56,143566,143567],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[56,143569,143570],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[56,143572,143573],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[56,143575,143576],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[56,143578,143579],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143581,143582],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143584,143585],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[90,143587,143589],{"className":126533,"code":143588,"language":126535,"meta":21,"style":21},"\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",[96,143590,143591,143596,143603,143613,143625,143636,143647,143658],{"__ignoreMap":21},[99,143592,143593],{"class":101,"line":102},[99,143594,143595],{"class":168},"\u002F* Flex 弹性布局 *\u002F\n",[99,143597,143598,143601],{"class":101,"line":22},[99,143599,143600],{"class":1949},".container",[99,143602,15559],{"class":109},[99,143604,143605,143607,143609,143611],{"class":101,"line":1165},[99,143606,128149],{"class":158},[99,143608,51418],{"class":109},[99,143610,51458],{"class":158},[99,143612,1276],{"class":109},[99,143614,143615,143618,143620,143623],{"class":101,"line":1180},[99,143616,143617],{"class":158},"  flex-direction",[99,143619,51418],{"class":109},[99,143621,143622],{"class":158},"row",[99,143624,1276],{"class":109},[99,143626,143627,143630,143632,143634],{"class":101,"line":1186},[99,143628,143629],{"class":158},"  justify-content",[99,143631,51418],{"class":109},[99,143633,51649],{"class":158},[99,143635,1276],{"class":109},[99,143637,143638,143641,143643,143645],{"class":101,"line":1200},[99,143639,143640],{"class":158},"  align-items",[99,143642,51418],{"class":109},[99,143644,51573],{"class":158},[99,143646,1276],{"class":109},[99,143648,143649,143652,143654,143656],{"class":101,"line":1206},[99,143650,143651],{"class":158},"  flex-wrap",[99,143653,51418],{"class":109},[99,143655,78591],{"class":158},[99,143657,1276],{"class":109},[99,143659,143660],{"class":101,"line":1297},[99,143661,1551],{"class":109},[14,143663,70434],{},[14,143665,143666],{},".form-item .male-label {",[14,143668,143669],{},"   margin-right: 20px;",[14,143671,143672],{},"   display: inline-flex;",[14,143674,143675],{},"   align-items: center;",[14,143677,1056],{},[1448,143679],{"style":126389,"src":143680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1448,143682],{"style":126389,"src":143683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[70,143685,143687],{"id":143686},"_2052-常见父项属性","20.5.2 常见父项属性",[53,143689,143690,143693,143696,143699,143702,143705,143708],{},[56,143691,143692],{},"flex-direction：设置主轴的方向",[56,143694,143695],{},"justify-content：设置主轴上的子元素排列方式",[56,143697,143698],{},"flex-wrap：设置子元素是否换行",[56,143700,143701],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[56,143703,143704],{},"align-items：设置侧轴上的子元素排列方式（单行）",[56,143706,143707],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[56,143709,143692],{},[1448,143711],{"style":126389,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1448,143714],{"style":126389,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[53,143717,143718],{"start":22},[56,143719,143695],{},[1448,143721],{"style":126389,"src":143722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143724,143725,143728],{},[96,143726,143727],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143730,143731],{},"跟着主轴走",[53,143733,143734],{"start":1165},[56,143735,143698],{},[1448,143737],{"style":126389,"src":143738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143740,143741],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[53,143743,143744],{"start":1180},[56,143745,143701],{},[1448,143747],{"style":126389,"src":143748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143750,143751],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143753,143754],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[53,143756,143757],{"start":1186},[56,143758,143704],{},[1448,143760],{"style":126389,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143763,143764],{},"align-items与align-content之间的区别：",[14,143766,143767],{},"单找items，多找content",[1448,143769],{"style":126389,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[53,143772,143773],{"start":1200},[56,143774,143707],{},[1448,143776],{"style":126389,"src":143777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[70,143779,143781],{"id":143780},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[53,143783,143784],{},[56,143785,143786],{},[259,143787,143788],{},"flex 属性",[14,143790,143791],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1448,143793],{"style":126389,"src":143794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143796,143797],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143799,143800],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[53,143802,143803],{"start":22},[56,143804,143805,13782,143808],{},[259,143806,143807],{},"align-self",[259,143809,143810],{},"控制子项自己在侧轴上的排列方式",[1448,143812],{"style":126389,"src":143813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143815,143816],{},"单个子盒子在父盒子侧轴上的排列方式",[53,143818,143819],{"start":1165},[56,143820,143821,143823],{},[259,143822,95278],{}," 属性定义项目的排列顺序",[1448,143825],{"style":126389,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[70,143828,143830],{"id":143829},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1448,143832],{"style":126389,"src":143833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143835,143836],{},"必须要添加浏览器的私有前缀",[70,143838,143840],{"id":143839},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143842,143843],{},"学到最重要的知识：",[14,143845,143846],{},"flex处理这样的布局思路",[1448,143848],{"style":126389,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[90,143851,143853],{"className":126533,"code":143852,"language":126535,"meta":21,"style":21},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[96,143854,143855,143861,143871,143881,143891],{"__ignoreMap":21},[99,143856,143857,143859],{"class":101,"line":102},[99,143858,143600],{"class":1949},[99,143860,15559],{"class":109},[99,143862,143863,143865,143867,143869],{"class":101,"line":22},[99,143864,128149],{"class":158},[99,143866,51418],{"class":109},[99,143868,51458],{"class":158},[99,143870,1276],{"class":109},[99,143872,143873,143875,143877,143879],{"class":101,"line":1165},[99,143874,143629],{"class":158},[99,143876,51418],{"class":109},[99,143878,51573],{"class":158},[99,143880,1276],{"class":109},[99,143882,143883,143885,143887,143889],{"class":101,"line":1180},[99,143884,143640],{"class":158},[99,143886,51418],{"class":109},[99,143888,51573],{"class":158},[99,143890,1276],{"class":109},[99,143892,143893],{"class":101,"line":1186},[99,143894,1551],{"class":109},[14,143896,143897],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143899,143900],{},"使用属性选择器",[1448,143902],{"style":126389,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143905,68870],{},[90,143907,143909],{"className":127280,"code":143908,"language":127282,"meta":21,"style":21},"\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",[96,143910,143911,143916,143930,143935,143955,143960,143979,143984,144003,144008,144027],{"__ignoreMap":21},[99,143912,143913],{"class":101,"line":102},[99,143914,143915],{"class":168},"\u003C!-- 携程网移动端案例结构 -->\n",[99,143917,143918,143920,143922,143924,143926,143928],{"class":101,"line":22},[99,143919,1020],{"class":109},[99,143921,51592],{"class":51281},[99,143923,53467],{"class":1949},[99,143925,155],{"class":109},[99,143927,92304],{"class":214},[99,143929,51288],{"class":109},[99,143931,143932],{"class":101,"line":1165},[99,143933,143934],{"class":168},"  \u003C!-- 搜索栏 -->\n",[99,143936,143937,143939,143941,143943,143945,143948,143951,143953],{"class":101,"line":1180},[99,143938,52125],{"class":109},[99,143940,51592],{"class":51281},[99,143942,53467],{"class":1949},[99,143944,155],{"class":109},[99,143946,143947],{"class":214},"\"search-index\"",[99,143949,143950],{"class":109},">...\u003C\u002F",[99,143952,51592],{"class":51281},[99,143954,51288],{"class":109},[99,143956,143957],{"class":101,"line":1186},[99,143958,143959],{"class":168},"  \u003C!-- 焦点图 -->\n",[99,143961,143962,143964,143966,143968,143970,143973,143975,143977],{"class":101,"line":1200},[99,143963,52125],{"class":109},[99,143965,51592],{"class":51281},[99,143967,53467],{"class":1949},[99,143969,155],{"class":109},[99,143971,143972],{"class":214},"\"focus\"",[99,143974,143950],{"class":109},[99,143976,51592],{"class":51281},[99,143978,51288],{"class":109},[99,143980,143981],{"class":101,"line":1206},[99,143982,143983],{"class":168},"  \u003C!-- 主导航 -->\n",[99,143985,143986,143988,143990,143992,143994,143997,143999,144001],{"class":101,"line":1297},[99,143987,52125],{"class":109},[99,143989,51592],{"class":51281},[99,143991,53467],{"class":1949},[99,143993,155],{"class":109},[99,143995,143996],{"class":214},"\"local-nav\"",[99,143998,143950],{"class":109},[99,144000,51592],{"class":51281},[99,144002,51288],{"class":109},[99,144004,144005],{"class":101,"line":1303},[99,144006,144007],{"class":168},"  \u003C!-- 子导航 -->\n",[99,144009,144010,144012,144014,144016,144018,144021,144023,144025],{"class":101,"line":1315},[99,144011,52125],{"class":109},[99,144013,51592],{"class":51281},[99,144015,53467],{"class":1949},[99,144017,155],{"class":109},[99,144019,144020],{"class":214},"\"nav-common\"",[99,144022,143950],{"class":109},[99,144024,51592],{"class":51281},[99,144026,51288],{"class":109},[99,144028,144029,144031,144033],{"class":101,"line":1598},[99,144030,51766],{"class":109},[99,144032,51592],{"class":51281},[99,144034,51288],{"class":109},[14,144036,70434],{},[90,144038,144039],{"className":126533,"code":136985,"language":126535,"meta":21,"style":21},[96,144040,144041,144055,144071],{"__ignoreMap":21},[99,144042,144043,144045,144047,144049,144051,144053],{"class":101,"line":102},[99,144044,53802],{"class":51281},[99,144046,1000],{"class":109},[99,144048,103088],{"class":1949},[99,144050,155],{"class":105},[99,144052,62680],{"class":214},[99,144054,137002],{"class":109},[99,144056,144057,144059,144061,144063,144065,144067,144069],{"class":101,"line":22},[99,144058,70877],{"class":158},[99,144060,51418],{"class":109},[99,144062,327],{"class":158},[99,144064,51473],{"class":105},[99,144066,51502],{"class":158},[99,144068,130113],{"class":158},[99,144070,1276],{"class":109},[99,144072,144073],{"class":101,"line":1165},[99,144074,1551],{"class":109},[14,144076,144077],{},"总代码和效果展示：",[1448,144079],{"style":126389,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144082,68870],{},[90,144084,144085],{"className":127280,"code":143908,"language":127282,"meta":21,"style":21},[96,144086,144087,144091,144105,144109,144127,144131,144149,144153,144171,144175,144193],{"__ignoreMap":21},[99,144088,144089],{"class":101,"line":102},[99,144090,143915],{"class":168},[99,144092,144093,144095,144097,144099,144101,144103],{"class":101,"line":22},[99,144094,1020],{"class":109},[99,144096,51592],{"class":51281},[99,144098,53467],{"class":1949},[99,144100,155],{"class":109},[99,144102,92304],{"class":214},[99,144104,51288],{"class":109},[99,144106,144107],{"class":101,"line":1165},[99,144108,143934],{"class":168},[99,144110,144111,144113,144115,144117,144119,144121,144123,144125],{"class":101,"line":1180},[99,144112,52125],{"class":109},[99,144114,51592],{"class":51281},[99,144116,53467],{"class":1949},[99,144118,155],{"class":109},[99,144120,143947],{"class":214},[99,144122,143950],{"class":109},[99,144124,51592],{"class":51281},[99,144126,51288],{"class":109},[99,144128,144129],{"class":101,"line":1186},[99,144130,143959],{"class":168},[99,144132,144133,144135,144137,144139,144141,144143,144145,144147],{"class":101,"line":1200},[99,144134,52125],{"class":109},[99,144136,51592],{"class":51281},[99,144138,53467],{"class":1949},[99,144140,155],{"class":109},[99,144142,143972],{"class":214},[99,144144,143950],{"class":109},[99,144146,51592],{"class":51281},[99,144148,51288],{"class":109},[99,144150,144151],{"class":101,"line":1206},[99,144152,143983],{"class":168},[99,144154,144155,144157,144159,144161,144163,144165,144167,144169],{"class":101,"line":1297},[99,144156,52125],{"class":109},[99,144158,51592],{"class":51281},[99,144160,53467],{"class":1949},[99,144162,155],{"class":109},[99,144164,143996],{"class":214},[99,144166,143950],{"class":109},[99,144168,51592],{"class":51281},[99,144170,51288],{"class":109},[99,144172,144173],{"class":101,"line":1303},[99,144174,144007],{"class":168},[99,144176,144177,144179,144181,144183,144185,144187,144189,144191],{"class":101,"line":1315},[99,144178,52125],{"class":109},[99,144180,51592],{"class":51281},[99,144182,53467],{"class":1949},[99,144184,155],{"class":109},[99,144186,144020],{"class":214},[99,144188,143950],{"class":109},[99,144190,51592],{"class":51281},[99,144192,51288],{"class":109},[99,144194,144195,144197,144199],{"class":101,"line":1598},[99,144196,51766],{"class":109},[99,144198,51592],{"class":51281},[99,144200,51288],{"class":109},[14,144202,70434],{},[90,144204,144205],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,144206,144207,144211,144225,144229],{"__ignoreMap":21},[99,144208,144209],{"class":101,"line":102},[99,144210,130644],{"class":168},[99,144212,144213,144215,144217,144219,144221,144223],{"class":101,"line":22},[99,144214,1020],{"class":109},[99,144216,51592],{"class":51281},[99,144218,53467],{"class":1949},[99,144220,155],{"class":109},[99,144222,130657],{"class":214},[99,144224,51288],{"class":109},[99,144226,144227],{"class":101,"line":1165},[99,144228,130664],{"class":109},[99,144230,144231,144233,144235],{"class":101,"line":1180},[99,144232,51766],{"class":109},[99,144234,51592],{"class":51281},[99,144236,51288],{"class":109},[5113,144238,137934],{},{"title":21,"searchDepth":22,"depth":22,"links":144240},[144241,144242,144246,144247,144248],{"id":143385,"depth":22,"text":143386},{"id":143417,"depth":22,"text":143418,"children":144243},[144244,144245],{"id":143421,"depth":1165,"text":143422},{"id":143438,"depth":1165,"text":143439},{"id":143457,"depth":22,"text":143458},{"id":143464,"depth":22,"text":143465},{"id":143551,"depth":22,"text":143552,"children":144249},[144250,144251,144252,144253,144254],{"id":143558,"depth":1165,"text":143559},{"id":143686,"depth":1165,"text":143687},{"id":143780,"depth":1165,"text":143781},{"id":143829,"depth":1165,"text":143830},{"id":143839,"depth":1165,"text":143840},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143377,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144261,"title":144262,"body":144263,"description":23364,"extension":24,"meta":145490,"navigation":26,"path":145491,"seo":145492,"stem":145493,"__hash__":145494},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144264,"toc":145468},[144265,144268,144272,144276,144279,144282,144286,144291,144294,144297,144300,144303,144306,144363,144366,144371,144374,144377,144381,144392,144396,144399,144402,144409,144414,144418,144421,144427,144430,144434,144437,144444,144447,144450,144457,144460,144467,144470,144473,144480,144483,144486,144488,144505,144509,144512,144515,144518,144522,144525,144528,144531,144534,144537,144540,144542,144545,144548,144610,144613,144723,144730,144736,144739,144742,144746,144749,144753,144758,144761,144768,144771,144777,144782,144785,144788,144791,144794,144797,144800,144803,144806,144862,144864,144890,144894,144897,144900,144903,144911,144914,144917,144921,144977,144980,144984,144990,145001,145004,145009,145012,145015,145021,145024,145027,145030,145033,145036,145039,145042,145045,145070,145076,145079,145082,145085,145088,145091,145094,145099,145102,145105,145108,145116,145119,145126,145129,145132,145134,145158,145160,145163,145166,145169,145172,145175,145178,145181,145215,145218,145221,145255,145262,145265,145268,145271,145274,145277,145280,145287,145290,145293,145296,145299,145306,145309,145312,145319,145322,145325,145329,145332,145335,145338,145341,145344,145347,145350,145353,145355,145379,145381,145405,145409,145420,145423,145426,145429,145432,145435,145438,145441,145444,145447,145450,145453,145456,145459,145462,145465],[10,144266,144262],{"id":144267},"_21-移动端布局实战下篇",[41,144269,144271],{"id":144270},"_211-rem适配布局","21.1 rem适配布局",[70,144273,144275],{"id":144274},"_2111-rem单位","21.1.1 rem单位",[1448,144277],{"style":126389,"src":144278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144280,144281],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[70,144283,144285],{"id":144284},"_2112-媒体查询","21.1.2 媒体查询",[53,144287,144288],{},[56,144289,144290],{},"参数介绍",[1448,144292],{"style":126389,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1448,144295],{"style":126389,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1448,144298],{"style":126389,"src":144299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1448,144301],{"style":126389,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1448,144304],{"style":126389,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[90,144307,144309],{"className":126533,"code":144308,"language":126535,"meta":21,"style":21},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[96,144310,144311,144316,144335,144342,144355,144359],{"__ignoreMap":21},[99,144312,144313],{"class":101,"line":102},[99,144314,144315],{"class":168},"\u002F* 媒体查询 *\u002F\n",[99,144317,144318,144321,144323,144326,144328,144331,144333],{"class":101,"line":22},[99,144319,144320],{"class":105},"@media",[99,144322,1644],{"class":109},[99,144324,144325],{"class":158},"max-width",[99,144327,51418],{"class":109},[99,144329,144330],{"class":158},"768",[99,144332,51473],{"class":105},[99,144334,12429],{"class":109},[99,144336,144337,144340],{"class":101,"line":1165},[99,144338,144339],{"class":1949},"  .container",[99,144341,15559],{"class":109},[99,144343,144344,144347,144349,144351,144353],{"class":101,"line":1180},[99,144345,144346],{"class":158},"    width",[99,144348,51418],{"class":109},[99,144350,421],{"class":158},[99,144352,438],{"class":105},[99,144354,1276],{"class":109},[99,144356,144357],{"class":101,"line":1186},[99,144358,127329],{"class":109},[99,144360,144361],{"class":101,"line":1200},[99,144362,1551],{"class":109},[14,144364,144365],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[53,144367,144368],{"start":22},[56,144369,144370],{},"引入资源",[1448,144372],{"style":126389,"src":144373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144375,144376],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[70,144378,144380],{"id":144379},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1117,144382,144383,144386,144389],{},[56,144384,144385],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[56,144387,144388],{},"媒体查询可以根据不同设备宽度来修改样式",[56,144390,144391],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[41,144393,144395],{"id":144394},"_212-less基础","21.2 Less基础",[14,144397,144398],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144400,144401],{},"Less可以解决该问题，它是css的扩展语言",[14,144403,144404,144405],{},"Less中文网址： ",[348,144406,144407],{"href":144407,"rel":144408},"http:\u002F\u002Flesscss.cn\u002F",[23853],[14,144410,144411],{},[259,144412,144413],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[70,144415,144417],{"id":144416},"_2121-less安装","21.2.1 less安装",[14,144419,144420],{},"如果使用vscode，则无需进行下方安装步骤",[14,144422,144423],{},[348,144424,144425],{"href":144425,"rel":144426},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23853],[1448,144428],{"style":126389,"src":144429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[70,144431,144433],{"id":144432},"_2122-less使用","21.2.2 less使用",[14,144435,144436],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[53,144438,144439],{},[56,144440,144441],{},[259,144442,144443],{},"Less 变量",[1448,144445],{"style":126389,"src":144446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1448,144448],{"style":126389,"src":144449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[53,144451,144452],{"start":22},[56,144453,144454],{},[259,144455,144456],{},"Less 编译",[1448,144458],{"style":126389,"src":144459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[53,144461,144462],{"start":1165},[56,144463,144464],{},[259,144465,144466],{},"Less 嵌套",[1448,144468],{"style":126389,"src":144469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1448,144471],{"style":126389,"src":144472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[53,144474,144475],{"start":1180},[56,144476,144477],{},[259,144478,144479],{},"Less 运算",[1448,144481],{"style":126389,"src":144482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144484,144485],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144487,139],{},[1117,144489,144490,144493,144496,144499,144502],{},[56,144491,144492],{},"乘号（*）和除号（\u002F）的写法",[56,144494,144495],{},"运算符中间左右有个空格隔开 1px + 5",[56,144497,144498],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[56,144500,144501],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[56,144503,144504],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[41,144506,144508],{"id":144507},"_213-rem-适配方案","21.3 rem 适配方案",[14,144510,144511],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144513,144514],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1448,144516],{"style":126389,"src":144517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[70,144519,144521],{"id":144520},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144523,144524],{},"rem + 媒体查询 + less 技术",[1448,144526],{"style":126389,"src":144527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144529,144530],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144532,144533],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1448,144535],{"style":126389,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144538,144539],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144541,14620],{},[1448,144543],{"style":126389,"src":144544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144546,144547],{},"index.html:",[90,144549,144551],{"className":126533,"code":144550,"language":126535,"meta":21,"style":21},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[96,144552,144553,144558,144564,144580,144584,144590,144606],{"__ignoreMap":21},[99,144554,144555],{"class":101,"line":102},[99,144556,144557],{"class":168},"\u002F* rem 适配方案 *\u002F\n",[99,144559,144560,144562],{"class":101,"line":22},[99,144561,50616],{"class":51281},[99,144563,15559],{"class":109},[99,144565,144566,144568,144570,144573,144575,144577],{"class":101,"line":1165},[99,144567,70607],{"class":158},[99,144569,51418],{"class":109},[99,144571,144572],{"class":158},"62.5",[99,144574,438],{"class":105},[99,144576,130396],{"class":109},[99,144578,144579],{"class":168},"\u002F* 1rem = 10px *\u002F\n",[99,144581,144582],{"class":101,"line":1180},[99,144583,1551],{"class":109},[99,144585,144586,144588],{"class":101,"line":1186},[99,144587,130381],{"class":1949},[99,144589,15559],{"class":109},[99,144591,144592,144594,144596,144598,144601,144603],{"class":101,"line":1200},[99,144593,70549],{"class":158},[99,144595,51418],{"class":109},[99,144597,556],{"class":158},[99,144599,144600],{"class":105},"rem",[99,144602,130396],{"class":109},[99,144604,144605],{"class":168},"\u002F* 100px *\u002F\n",[99,144607,144608],{"class":101,"line":1206},[99,144609,1551],{"class":109},[14,144611,144612],{},"common.less",[90,144614,144616],{"className":126533,"code":144615,"language":126535,"meta":21,"style":21},"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",[96,144617,144618,144624,144639,144643,144649,144663,144667,144671,144675,144681,144695,144699,144705,144719],{"__ignoreMap":21},[99,144619,144620,144622],{"class":101,"line":102},[99,144621,50616],{"class":51281},[99,144623,15559],{"class":109},[99,144625,144626,144628,144630,144632,144634,144636],{"class":101,"line":22},[99,144627,70607],{"class":158},[99,144629,51418],{"class":109},[99,144631,144572],{"class":158},[99,144633,438],{"class":105},[99,144635,26056],{"class":109},[99,144637,144638],{"class":168},"\u002F* 10px *\u002F\n",[99,144640,144641],{"class":101,"line":1165},[99,144642,1551],{"class":109},[99,144644,144645,144647],{"class":101,"line":1180},[99,144646,51592],{"class":51281},[99,144648,15559],{"class":109},[99,144650,144651,144653,144655,144657,144659,144661],{"class":101,"line":1186},[99,144652,70549],{"class":158},[99,144654,51418],{"class":109},[99,144656,556],{"class":158},[99,144658,144600],{"class":105},[99,144660,26056],{"class":109},[99,144662,144605],{"class":168},[99,144664,144665],{"class":101,"line":1200},[99,144666,1551],{"class":109},[99,144668,144669],{"class":101,"line":1206},[99,144670,135994],{"class":109},[99,144672,144673],{"class":101,"line":1297},[99,144674,144557],{"class":168},[99,144676,144677,144679],{"class":101,"line":1303},[99,144678,50616],{"class":51281},[99,144680,15559],{"class":109},[99,144682,144683,144685,144687,144689,144691,144693],{"class":101,"line":1315},[99,144684,70607],{"class":158},[99,144686,51418],{"class":109},[99,144688,144572],{"class":158},[99,144690,438],{"class":105},[99,144692,130396],{"class":109},[99,144694,144579],{"class":168},[99,144696,144697],{"class":101,"line":1598},[99,144698,1551],{"class":109},[99,144700,144701,144703],{"class":101,"line":1603},[99,144702,130381],{"class":1949},[99,144704,15559],{"class":109},[99,144706,144707,144709,144711,144713,144715,144717],{"class":101,"line":1609},[99,144708,70549],{"class":158},[99,144710,51418],{"class":109},[99,144712,556],{"class":158},[99,144714,144600],{"class":105},[99,144716,130396],{"class":109},[99,144718,144605],{"class":168},[99,144720,144721],{"class":101,"line":1614},[99,144722,1551],{"class":109},[14,144724,144725,144726,144729],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23541,144727,144728],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[90,144731,144734],{"className":144732,"code":144733,"language":5174},[5172],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[96,144735,144733],{"__ignoreMap":21},[14,144737,144738],{},"less保存时会自动变成.css文件",[14,144740,144741],{},"好好搞懂上述代码写法",[70,144743,144745],{"id":144744},"_2132-样式导入样式","21.3.2 样式导入样式",[1448,144747],{"style":126389,"src":144748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[70,144750,144752],{"id":144751},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[53,144754,144755],{},[56,144756,144757],{},"准备工作",[1448,144759],{"style":126389,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144762,144763,144764],{},"github地址：",[348,144765,144766],{"href":144766,"rel":144767},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23853],[14,144769,144770],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144772,144773,144774],{},"js文件引入到index.html中使用的是",[96,144775,144776],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[53,144778,144779],{"start":22},[56,144780,144781],{},"vscode插件",[1448,144783],{"style":126389,"src":144784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144786,144787],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144789,144790],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1448,144792],{"style":126389,"src":144793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144795,144796],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1448,144798],{"style":126389,"src":144799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144801,144802],{},"修改成75就可以，alt+z为快捷键",[14,144804,144805],{},"index.css：",[90,144807,144808],{"className":126533,"code":144550,"language":126535,"meta":21,"style":21},[96,144809,144810,144814,144820,144834,144838,144844,144858],{"__ignoreMap":21},[99,144811,144812],{"class":101,"line":102},[99,144813,144557],{"class":168},[99,144815,144816,144818],{"class":101,"line":22},[99,144817,50616],{"class":51281},[99,144819,15559],{"class":109},[99,144821,144822,144824,144826,144828,144830,144832],{"class":101,"line":1165},[99,144823,70607],{"class":158},[99,144825,51418],{"class":109},[99,144827,144572],{"class":158},[99,144829,438],{"class":105},[99,144831,130396],{"class":109},[99,144833,144579],{"class":168},[99,144835,144836],{"class":101,"line":1180},[99,144837,1551],{"class":109},[99,144839,144840,144842],{"class":101,"line":1186},[99,144841,130381],{"class":1949},[99,144843,15559],{"class":109},[99,144845,144846,144848,144850,144852,144854,144856],{"class":101,"line":1200},[99,144847,70549],{"class":158},[99,144849,51418],{"class":109},[99,144851,556],{"class":158},[99,144853,144600],{"class":105},[99,144855,130396],{"class":109},[99,144857,144605],{"class":168},[99,144859,144860],{"class":101,"line":1206},[99,144861,1551],{"class":109},[14,144863,144547],{},[90,144865,144866],{"className":126533,"code":126937,"language":126535,"meta":21,"style":21},[96,144867,144868,144874,144886],{"__ignoreMap":21},[99,144869,144870,144872],{"class":101,"line":102},[99,144871,51781],{"class":51281},[99,144873,15559],{"class":109},[99,144875,144876,144878,144880,144882,144884],{"class":101,"line":22},[99,144877,70607],{"class":158},[99,144879,51418],{"class":109},[99,144881,711],{"class":158},[99,144883,51473],{"class":105},[99,144885,1276],{"class":109},[99,144887,144888],{"class":101,"line":1165},[99,144889,1551],{"class":109},[41,144891,144893],{"id":144892},"_214-响应式开发","21.4 响应式开发",[14,144895,144896],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1448,144898],{"style":126389,"src":144899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144901,144902],{},"做法：",[1117,144904,144905,144908],{},[56,144906,144907],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[56,144909,144910],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1448,144912],{"style":126389,"src":144913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144915,144916],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[70,144918,144920],{"id":144919},"_2141-简单代码示范","21.4.1 简单代码示范",[90,144922,144923],{"className":126533,"code":144550,"language":126535,"meta":21,"style":21},[96,144924,144925,144929,144935,144949,144953,144959,144973],{"__ignoreMap":21},[99,144926,144927],{"class":101,"line":102},[99,144928,144557],{"class":168},[99,144930,144931,144933],{"class":101,"line":22},[99,144932,50616],{"class":51281},[99,144934,15559],{"class":109},[99,144936,144937,144939,144941,144943,144945,144947],{"class":101,"line":1165},[99,144938,70607],{"class":158},[99,144940,51418],{"class":109},[99,144942,144572],{"class":158},[99,144944,438],{"class":105},[99,144946,130396],{"class":109},[99,144948,144579],{"class":168},[99,144950,144951],{"class":101,"line":1180},[99,144952,1551],{"class":109},[99,144954,144955,144957],{"class":101,"line":1186},[99,144956,130381],{"class":1949},[99,144958,15559],{"class":109},[99,144960,144961,144963,144965,144967,144969,144971],{"class":101,"line":1200},[99,144962,70549],{"class":158},[99,144964,51418],{"class":109},[99,144966,556],{"class":158},[99,144968,144600],{"class":105},[99,144970,130396],{"class":109},[99,144972,144605],{"class":168},[99,144974,144975],{"class":101,"line":1206},[99,144976,1551],{"class":109},[14,144978,144979],{},"父盒子一般命名为container",[70,144981,144983],{"id":144982},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,144985,144986,144987],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[259,144988,144989],{},"使得 Web 开发更加快捷",[1117,144991,144992],{},[56,144993,144994,144995],{},"官网：",[259,144996,144997],{},[348,144998,144999],{"href":144999,"rel":145000},"http:\u002F\u002Fgetbootstrap.com\u002F",[23853],[14,145002,145003],{},"可以直接去官网拿现成的东西",[53,145005,145006],{},[56,145007,145008],{},"Bootstrap的使用",[14,145010,145011],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145013,145014],{},"Bootstrap 使用四步曲：",[14,145016,145017,145020],{},[259,145018,145019],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1448,145022],{"style":126389,"src":145023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145025,145026],{},"打开Bootstrap官网，然后下载",[1448,145028],{"style":126389,"src":145029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1448,145031],{"style":126389,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145034,145035],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145037,145038],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145040,145041],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1448,145043],{"style":126389,"src":145044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[90,145046,145048],{"className":126533,"code":145047,"language":126535,"meta":21,"style":21},".center {\n  color: red;\n}\n",[96,145049,145050,145056,145066],{"__ignoreMap":21},[99,145051,145052,145054],{"class":101,"line":102},[99,145053,126824],{"class":1949},[99,145055,15559],{"class":109},[99,145057,145058,145060,145062,145064],{"class":101,"line":22},[99,145059,70886],{"class":158},[99,145061,51418],{"class":109},[99,145063,57402],{"class":158},[99,145065,1276],{"class":109},[99,145067,145068],{"class":101,"line":1165},[99,145069,1551],{"class":109},[14,145071,145072,145075],{},[96,145073,145074],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1448,145077],{"style":126389,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1448,145080],{"style":126389,"src":145081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1448,145083],{"style":126389,"src":145084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145086,145087],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1448,145089],{"style":126389,"src":145090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145092,145093],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[53,145095,145096],{"start":22},[56,145097,145098],{},"布局容器",[1448,145100],{"style":126389,"src":145101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145103,145104],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145106,145107],{},"container-fluid用于移动式布局比较方便",[53,145109,145110],{"start":1165},[56,145111,145112,145113],{},"bootstrap ",[259,145114,145115],{},"栅格系统原理",[1448,145117],{"style":126389,"src":145118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[53,145120,145121],{"start":1180},[56,145122,145123],{},[259,145124,145125],{},"栅格选项参数",[1448,145127],{"style":126389,"src":145128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145130,145131],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145133,14620],{},[90,145135,145136],{"className":126533,"code":145047,"language":126535,"meta":21,"style":21},[96,145137,145138,145144,145154],{"__ignoreMap":21},[99,145139,145140,145142],{"class":101,"line":102},[99,145141,126824],{"class":1949},[99,145143,15559],{"class":109},[99,145145,145146,145148,145150,145152],{"class":101,"line":22},[99,145147,70886],{"class":158},[99,145149,51418],{"class":109},[99,145151,57402],{"class":158},[99,145153,1276],{"class":109},[99,145155,145156],{"class":101,"line":1165},[99,145157,1551],{"class":109},[14,145159,135576],{},[1448,145161],{"style":126389,"src":145162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145164,145165],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145167,145168],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145170,145171],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145173,145174],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145176,145177],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145179,145180],{},"汇总展示说明：",[90,145182,145183],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,145184,145185,145189,145203,145207],{"__ignoreMap":21},[99,145186,145187],{"class":101,"line":102},[99,145188,130644],{"class":168},[99,145190,145191,145193,145195,145197,145199,145201],{"class":101,"line":22},[99,145192,1020],{"class":109},[99,145194,51592],{"class":51281},[99,145196,53467],{"class":1949},[99,145198,155],{"class":109},[99,145200,130657],{"class":214},[99,145202,51288],{"class":109},[99,145204,145205],{"class":101,"line":1165},[99,145206,130664],{"class":109},[99,145208,145209,145211,145213],{"class":101,"line":1180},[99,145210,51766],{"class":109},[99,145212,51592],{"class":51281},[99,145214,51288],{"class":109},[1448,145216],{"style":126389,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145219,145220],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[90,145222,145223],{"className":127280,"code":130637,"language":127282,"meta":21,"style":21},[96,145224,145225,145229,145243,145247],{"__ignoreMap":21},[99,145226,145227],{"class":101,"line":102},[99,145228,130644],{"class":168},[99,145230,145231,145233,145235,145237,145239,145241],{"class":101,"line":22},[99,145232,1020],{"class":109},[99,145234,51592],{"class":51281},[99,145236,53467],{"class":1949},[99,145238,155],{"class":109},[99,145240,130657],{"class":214},[99,145242,51288],{"class":109},[99,145244,145245],{"class":101,"line":1165},[99,145246,130664],{"class":109},[99,145248,145249,145251,145253],{"class":101,"line":1180},[99,145250,51766],{"class":109},[99,145252,51592],{"class":51281},[99,145254,51288],{"class":109},[53,145256,145257],{"start":1186},[56,145258,145259],{},[259,145260,145261],{},"列嵌套",[1448,145263],{"style":126389,"src":145264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145266,145267],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145269,145270],{},"没加row内部这样：",[1448,145272],{"style":126389,"src":145273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145275,145276],{},"加上row之后内部为：",[1448,145278],{"style":126389,"src":145279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[53,145281,145282],{"start":1200},[56,145283,145284],{},[259,145285,145286],{},"列偏移",[1448,145288],{"style":126389,"src":145289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145291,145292],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145294,145295],{},"要加偏移量，即偏移份数",[14,145297,145298],{},"偏移的份数=12-两个盒子的份数",[53,145300,145301],{"start":1206},[56,145302,145303],{},[259,145304,145305],{},"列排序",[1448,145307],{"style":126389,"src":145308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145310,145311],{},"pull拉左；push推右",[53,145313,145314],{"start":1297},[56,145315,145316],{},[259,145317,145318],{},"响应式工具",[1448,145320],{"style":126389,"src":145321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145323,145324],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[70,145326,145328],{"id":145327},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145330,145331],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145333,145334],{},"ul {",[14,145336,145337],{},"list-style: none;",[14,145339,145340],{},"margin:0;",[14,145342,145343],{},"padding:0; }",[1448,145345],{"style":126389,"src":145346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1448,145348],{"style":126389,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145351,145352],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145354,68870],{},[90,145356,145357],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,145358,145359,145365,145375],{"__ignoreMap":21},[99,145360,145361,145363],{"class":101,"line":102},[99,145362,130381],{"class":1949},[99,145364,15559],{"class":109},[99,145366,145367,145369,145371,145373],{"class":101,"line":22},[99,145368,131013],{"class":158},[99,145370,51418],{"class":109},[99,145372,23724],{"class":158},[99,145374,1276],{"class":109},[99,145376,145377],{"class":101,"line":1165},[99,145378,1551],{"class":109},[14,145380,70434],{},[90,145382,145383],{"className":126533,"code":139203,"language":126535,"meta":21,"style":21},[96,145384,145385,145391,145401],{"__ignoreMap":21},[99,145386,145387,145389],{"class":101,"line":102},[99,145388,130381],{"class":1949},[99,145390,15559],{"class":109},[99,145392,145393,145395,145397,145399],{"class":101,"line":22},[99,145394,131013],{"class":158},[99,145396,51418],{"class":109},[99,145398,23724],{"class":158},[99,145400,1276],{"class":109},[99,145402,145403],{"class":101,"line":1165},[99,145404,1551],{"class":109},[41,145406,145408],{"id":145407},"_215-swiper-插件使用","21.5 swiper 插件使用",[1117,145410,145411,145414,145417],{},[56,145412,145413],{},"下载需要的css和js文件html页面中 引入相关文件",[56,145415,145416],{},"官网找到类似案例，复制html结构，css样式 js 语法",[56,145418,145419],{},"根据需求定制修改模块",[1448,145421],{"style":126389,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145424,145425],{},"解压后将这两部分放到项目中",[1448,145427],{"style":126389,"src":145428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145430,145431],{},"这个插件可以帮助我们实现轮播图效果",[14,145433,145434],{},"用法：",[1448,145436],{"style":126389,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145439,145440],{},"找到自己喜欢的",[1448,145442],{"style":126389,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145445,145446],{},"右键，查看网页源代码",[1448,145448],{"style":126389,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145451,145452],{},"复制人家的结构内容",[14,145454,145455],{},"然后去看API文档：",[1448,145457],{"style":126389,"src":145458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145460,145461],{},"可以看看如何修改样式",[14,145463,145464],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5113,145466,145467],{},"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":21,"searchDepth":22,"depth":22,"links":145469},[145470,145475,145479,145484,145489],{"id":144270,"depth":22,"text":144271,"children":145471},[145472,145473,145474],{"id":144274,"depth":1165,"text":144275},{"id":144284,"depth":1165,"text":144285},{"id":144379,"depth":1165,"text":144380},{"id":144394,"depth":22,"text":144395,"children":145476},[145477,145478],{"id":144416,"depth":1165,"text":144417},{"id":144432,"depth":1165,"text":144433},{"id":144507,"depth":22,"text":144508,"children":145480},[145481,145482,145483],{"id":144520,"depth":1165,"text":144521},{"id":144744,"depth":1165,"text":144745},{"id":144751,"depth":1165,"text":144752},{"id":144892,"depth":22,"text":144893,"children":145485},[145486,145487,145488],{"id":144919,"depth":1165,"text":144920},{"id":144982,"depth":1165,"text":144983},{"id":145327,"depth":1165,"text":145328},{"id":145407,"depth":22,"text":145408},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144262,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145496,"title":145497,"body":145498,"description":23364,"extension":24,"meta":145718,"navigation":26,"path":145719,"seo":145720,"stem":145721,"__hash__":145722},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145499,"toc":145714},[145500,145503,145507,145510,145525,145530,145533,145538,145573,145578,145590,145595,145608,145613,145630,145635,145655,145660,145678,145681,145684,145687,145690,145694,145697,145700,145703,145706,145709,145712],[10,145501,145497],{"id":145502},"_22-代码提交与新型相对单位",[41,145504,145506],{"id":145505},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145508,145509],{},"法1：",[53,145511,145512,145519,145522],{},[56,145513,145514,145515],{},"登录网站注册：",[348,145516,145517],{"href":145517,"rel":145518},"https:\u002F\u002Fgitee.com\u002F",[23853],[56,145520,145521],{},"码云创建新的仓库",[56,145523,145524],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1117,145526,145527],{},[56,145528,145529],{},"在网站根目录右键-- Git Bash Here",[1448,145531],{"style":126389,"src":145532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1117,145534,145535],{},[56,145536,145537],{},"如果是第一次利用git提交，请配置好全局选项",[90,145539,145541],{"className":117277,"code":145540,"language":117279,"meta":21,"style":21},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[96,145542,145543,145559],{"__ignoreMap":21},[99,145544,145545,145548,145550,145553,145556],{"class":101,"line":102},[99,145546,145547],{"class":1949},"git",[99,145549,119700],{"class":214},[99,145551,145552],{"class":158}," --global",[99,145554,145555],{"class":214}," user.name",[99,145557,145558],{"class":214}," \"你的名字\"\n",[99,145560,145561,145563,145565,145567,145570],{"class":101,"line":22},[99,145562,145547],{"class":1949},[99,145564,119700],{"class":214},[99,145566,145552],{"class":158},[99,145568,145569],{"class":214}," user.email",[99,145571,145572],{"class":214}," \"你的邮箱\"\n",[1117,145574,145575],{},[56,145576,145577],{},"初始化仓库",[90,145579,145581],{"className":117277,"code":145580,"language":117279,"meta":21,"style":21},"git init\n",[96,145582,145583],{"__ignoreMap":21},[99,145584,145585,145587],{"class":101,"line":102},[99,145586,145547],{"class":1949},[99,145588,145589],{"class":214}," init\n",[1117,145591,145592],{},[56,145593,145594],{},"把本地文件放到暂存区",[90,145596,145598],{"className":117277,"code":145597,"language":117279,"meta":21,"style":21},"git add .\n",[96,145599,145600],{"__ignoreMap":21},[99,145601,145602,145604,145606],{"class":101,"line":102},[99,145603,145547],{"class":1949},[99,145605,5196],{"class":214},[99,145607,28722],{"class":214},[1117,145609,145610],{},[56,145611,145612],{},"把本地文件放到本地仓库里面",[90,145614,145616],{"className":117277,"code":145615,"language":117279,"meta":21,"style":21},"git commit -m \"first commit\"\n",[96,145617,145618],{"__ignoreMap":21},[99,145619,145620,145622,145625,145627],{"class":101,"line":102},[99,145621,145547],{"class":1949},[99,145623,145624],{"class":214}," commit",[99,145626,100863],{"class":158},[99,145628,145629],{"class":214}," \"first commit\"\n",[1117,145631,145632],{},[56,145633,145634],{},"链接远程仓库",[90,145636,145638],{"className":117277,"code":145637,"language":117279,"meta":21,"style":21},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[96,145639,145640],{"__ignoreMap":21},[99,145641,145642,145644,145647,145649,145652],{"class":101,"line":102},[99,145643,145547],{"class":1949},[99,145645,145646],{"class":214}," remote",[99,145648,5196],{"class":214},[99,145650,145651],{"class":214}," origin",[99,145653,145654],{"class":214}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1117,145656,145657],{},[56,145658,145659],{},"把本地仓库的文件推送到远程仓库 push",[90,145661,145663],{"className":117277,"code":145662,"language":117279,"meta":21,"style":21},"git push -u origin master\n",[96,145664,145665],{"__ignoreMap":21},[99,145666,145667,145669,145671,145673,145675],{"class":101,"line":102},[99,145668,145547],{"class":1949},[99,145670,28997],{"class":214},[99,145672,28271],{"class":158},[99,145674,145651],{"class":214},[99,145676,145677],{"class":214}," master\n",[1448,145679],{"style":126389,"src":145680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145682,145683],{},"上方方法暂未实现，后边学完git后在整",[14,145685,145686],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1448,145688],{"style":126389,"src":145689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[41,145691,145693],{"id":145692},"_222-新型相对单位","22.2 新型相对单位",[1448,145695],{"style":126389,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1448,145698],{"style":126389,"src":145699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145701,145702],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145704,145705],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1448,145707],{"style":126389,"src":145708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145710,145711],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5113,145713,23946],{},{"title":21,"searchDepth":22,"depth":22,"links":145715},[145716,145717],{"id":145505,"depth":22,"text":145506},{"id":145692,"depth":22,"text":145693},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145497,"description":23364},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145724,"title":145725,"body":145726,"description":145730,"extension":24,"meta":145731,"navigation":26,"path":145732,"seo":145733,"stem":145734,"__hash__":145735},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145727,"toc":145728},[],{"title":21,"searchDepth":22,"depth":22,"links":145729},[],"自己正经开始学编程的第一门语言！",{"category":92820},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145725,"description":145730},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145737,"title":145738,"body":145739,"description":23364,"extension":24,"meta":146886,"navigation":26,"path":146887,"seo":146888,"stem":146889,"__hash__":146890},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145740,"toc":146862},[145741,145744,145748,145751,145754,145779,145782,145788,145792,145795,145822,145825,145865,145868,145880,145883,145889,145893,145897,145924,145941,145948,145952,145955,145981,145984,145988,145991,146031,146034,146051,146057,146061,146066,146110,146113,146131,146134,146202,146206,146213,146216,146231,146234,146243,146246,146257,146260,146269,146272,146289,146292,146307,146311,146315,146318,146320,146340,146344,146347,146350,146361,146364,146370,146374,146380,146407,146410,146422,146425,146436,146439,146445,146449,146455,146505,146508,146550,146553,146586,146589,146623,146627,146630,146650,146653,146689,146692,146705,146709,146713,146719,146722,146735,146739,146742,146748,146751,146755,146758,146761,146810,146814,146830,146836,146843,146849,146859],[10,145742,145738],{"id":145743},"_1-python环境与第一个程序",[41,145745,145747],{"id":145746},"_11-什么是python","1.1 什么是Python",[14,145749,145750],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145752,145753],{},"理解 Python 时抓住三个关键词：",[53,145755,145756,145759,145762],{},[56,145757,145758],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[56,145760,145761],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[56,145763,145764,145765,322,145768,322,145771,322,145774,322,145776,28366],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[96,145766,145767],{},"os",[96,145769,145770],{},"sys",[96,145772,145773],{},"json",[96,145775,57841],{},[96,145777,145778],{},"datetime",[14,145780,145781],{},"Python 程序的运行链路：",[90,145783,145786],{"className":145784,"code":145785,"language":5174,"meta":21},[5172],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[96,145787,145785],{"__ignoreMap":21},[41,145789,145791],{"id":145790},"_12-python解释器","1.2 Python解释器",[14,145793,145794],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[90,145796,145798],{"className":23810,"code":145797,"language":23812,"meta":21,"style":21},"python --version\npython3 --version\npython\npython3\n",[96,145799,145800,145806,145812,145817],{"__ignoreMap":21},[99,145801,145802,145804],{"class":101,"line":102},[99,145803,30361],{"class":1949},[99,145805,26282],{"class":158},[99,145807,145808,145810],{"class":101,"line":22},[99,145809,100860],{"class":1949},[99,145811,26282],{"class":158},[99,145813,145814],{"class":101,"line":1165},[99,145815,145816],{"class":1949},"python\n",[99,145818,145819],{"class":101,"line":1180},[99,145820,145821],{"class":1949},"python3\n",[14,145823,145824],{},"进入交互模式后，可以直接输入表达式：",[90,145826,145828],{"className":30359,"code":145827,"language":30361,"meta":21,"style":21},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[96,145829,145830,145841,145846,145860],{"__ignoreMap":21},[99,145831,145832,145835,145837,145839],{"class":101,"line":102},[99,145833,145834],{"class":105},">>>",[99,145836,25107],{"class":158},[99,145838,45547],{"class":105},[99,145840,47704],{"class":158},[99,145842,145843],{"class":101,"line":22},[99,145844,145845],{"class":158},"3\n",[99,145847,145848,145850,145853,145855,145858],{"class":101,"line":1165},[99,145849,145834],{"class":105},[99,145851,145852],{"class":158}," print",[99,145854,110],{"class":109},[99,145856,145857],{"class":214},"\"hello python\"",[99,145859,116],{"class":109},[99,145861,145862],{"class":101,"line":1180},[99,145863,145864],{"class":109},"hello python\n",[14,145866,145867],{},"退出交互模式：",[90,145869,145871],{"className":30359,"code":145870,"language":30361,"meta":21,"style":21},"exit()\n",[96,145872,145873],{"__ignoreMap":21},[99,145874,145875,145878],{"class":101,"line":102},[99,145876,145877],{"class":158},"exit",[99,145879,1962],{"class":109},[14,145881,145882],{},"或使用快捷键：",[90,145884,145887],{"className":145885,"code":145886,"language":5174,"meta":21},[5172],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[96,145888,145886],{"__ignoreMap":21},[41,145890,145892],{"id":145891},"_13-安装python","1.3 安装Python",[70,145894,145896],{"id":145895},"_131-windows安装","1.3.1 Windows安装",[53,145898,145899,145906,145909,145915,145921],{},[56,145900,145901,145902],{},"打开 Python 官网：",[348,145903,145904],{"href":145904,"rel":145905},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23853],[56,145907,145908],{},"下载 Windows Installer。",[56,145910,145911,145912,28366],{},"安装时勾选 ",[96,145913,145914],{},"Add Python to PATH",[56,145916,145917,145918,28366],{},"点击 ",[96,145919,145920],{},"Install Now",[56,145922,145923],{},"安装完成后打开命令提示符验证：",[90,145925,145927],{"className":23810,"code":145926,"language":23812,"meta":21,"style":21},"python --version\npip --version\n",[96,145928,145929,145935],{"__ignoreMap":21},[99,145930,145931,145933],{"class":101,"line":102},[99,145932,30361],{"class":1949},[99,145934,26282],{"class":158},[99,145936,145937,145939],{"class":101,"line":22},[99,145938,23819],{"class":1949},[99,145940,26282],{"class":158},[14,145942,145943,145944,145947],{},"如果提示 ",[96,145945,145946],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[70,145949,145951],{"id":145950},"_132-macos安装","1.3.2 macOS安装",[14,145953,145954],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[90,145956,145958],{"className":23810,"code":145957,"language":23812,"meta":21,"style":21},"brew install python\npython3 --version\npip3 --version\n",[96,145959,145960,145969,145975],{"__ignoreMap":21},[99,145961,145962,145965,145967],{"class":101,"line":102},[99,145963,145964],{"class":1949},"brew",[99,145966,23822],{"class":214},[99,145968,124299],{"class":214},[99,145970,145971,145973],{"class":101,"line":22},[99,145972,100860],{"class":1949},[99,145974,26282],{"class":158},[99,145976,145977,145979],{"class":101,"line":1165},[99,145978,119681],{"class":1949},[99,145980,26282],{"class":158},[14,145982,145983],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[70,145985,145987],{"id":145986},"_133-linux安装","1.3.3 Linux安装",[14,145989,145990],{},"Ubuntu\u002FDebian：",[90,145992,145994],{"className":23810,"code":145993,"language":23812,"meta":21,"style":21},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[96,145995,145996,146004,146019,146025],{"__ignoreMap":21},[99,145997,145998,146000,146002],{"class":101,"line":102},[99,145999,24565],{"class":1949},[99,146001,117298],{"class":214},[99,146003,26231],{"class":214},[99,146005,146006,146008,146010,146012,146014,146016],{"class":101,"line":22},[99,146007,24565],{"class":1949},[99,146009,117298],{"class":214},[99,146011,23822],{"class":214},[99,146013,104384],{"class":214},[99,146015,100779],{"class":214},[99,146017,146018],{"class":214}," python3-venv\n",[99,146020,146021,146023],{"class":101,"line":1165},[99,146022,100860],{"class":1949},[99,146024,26282],{"class":158},[99,146026,146027,146029],{"class":101,"line":1180},[99,146028,119681],{"class":1949},[99,146030,26282],{"class":158},[14,146032,146033],{},"Fedora：",[90,146035,146037],{"className":23810,"code":146036,"language":23812,"meta":21,"style":21},"sudo dnf install python3 python3-pip\n",[96,146038,146039],{"__ignoreMap":21},[99,146040,146041,146043,146045,146047,146049],{"class":101,"line":102},[99,146042,24565],{"class":1949},[99,146044,26304],{"class":214},[99,146046,23822],{"class":214},[99,146048,104384],{"class":214},[99,146050,119746],{"class":214},[14,146052,146053,146054,146056],{},"Linux 上通常使用 ",[96,146055,100860],{}," 命令，避免和系统旧版本 Python 冲突。",[41,146058,146060],{"id":146059},"_14-pip包管理器","1.4 pip包管理器",[14,146062,146063,146065],{},[96,146064,23819],{}," 用来安装第三方库。",[90,146067,146069],{"className":23810,"code":146068,"language":23812,"meta":21,"style":21},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[96,146070,146071,146080,146089,146097,146103],{"__ignoreMap":21},[99,146072,146073,146075,146077],{"class":101,"line":102},[99,146074,23819],{"class":1949},[99,146076,23822],{"class":214},[99,146078,146079],{"class":214}," requests\n",[99,146081,146082,146084,146087],{"class":101,"line":22},[99,146083,23819],{"class":1949},[99,146085,146086],{"class":214}," uninstall",[99,146088,146079],{"class":214},[99,146090,146091,146093,146095],{"class":101,"line":1165},[99,146092,23819],{"class":1949},[99,146094,117555],{"class":214},[99,146096,146079],{"class":214},[99,146098,146099,146101],{"class":101,"line":1180},[99,146100,23819],{"class":1949},[99,146102,118936],{"class":214},[99,146104,146105,146107],{"class":101,"line":1186},[99,146106,23819],{"class":1949},[99,146108,146109],{"class":214}," freeze\n",[14,146111,146112],{},"国内网络较慢时可以临时使用镜像：",[90,146114,146116],{"className":23810,"code":146115,"language":23812,"meta":21,"style":21},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[96,146117,146118],{"__ignoreMap":21},[99,146119,146120,146122,146124,146127,146129],{"class":101,"line":102},[99,146121,23819],{"class":1949},[99,146123,23822],{"class":214},[99,146125,146126],{"class":214}," requests",[99,146128,26419],{"class":158},[99,146130,119709],{"class":214},[14,146132,146133],{},"常见第三方库：",[247,146135,146136,146145],{},[250,146137,146138],{},[253,146139,146140,146143],{},[256,146141,146142],{},"库",[256,146144,102677],{},[294,146146,146147,146155,146162,146170,146178,146186,146194],{},[253,146148,146149,146152],{},[299,146150,146151],{},"requests",[299,146153,146154],{},"网络请求",[253,146156,146157,146159],{},[299,146158,100607],{},[299,146160,146161],{},"数值计算",[253,146163,146164,146167],{},[299,146165,146166],{},"pandas",[299,146168,146169],{},"表格数据处理",[253,146171,146172,146175],{},[299,146173,146174],{},"matplotlib",[299,146176,146177],{},"绘图",[253,146179,146180,146183],{},[299,146181,146182],{},"pyecharts",[299,146184,146185],{},"ECharts 图表",[253,146187,146188,146191],{},[299,146189,146190],{},"flask",[299,146192,146193],{},"Web 后端",[253,146195,146196,146199],{},[299,146197,146198],{},"pytest",[299,146200,146201],{},"自动化测试",[41,146203,146205],{"id":146204},"_15-虚拟环境","1.5 虚拟环境",[14,146207,146208,146209,146212],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[96,146210,146211],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146214,146215],{},"创建虚拟环境：",[90,146217,146219],{"className":23810,"code":146218,"language":23812,"meta":21,"style":21},"python -m venv .venv\n",[96,146220,146221],{"__ignoreMap":21},[99,146222,146223,146225,146227,146229],{"class":101,"line":102},[99,146224,30361],{"class":1949},[99,146226,100863],{"class":158},[99,146228,100866],{"class":214},[99,146230,100869],{"class":214},[14,146232,146233],{},"Windows 激活：",[90,146235,146237],{"className":23810,"code":146236,"language":23812,"meta":21,"style":21},".venv\\Scripts\\activate\n",[96,146238,146239],{"__ignoreMap":21},[99,146240,146241],{"class":101,"line":102},[99,146242,146236],{"class":1949},[14,146244,146245],{},"macOS\u002FLinux 激活：",[90,146247,146249],{"className":23810,"code":146248,"language":23812,"meta":21,"style":21},"source .venv\u002Fbin\u002Factivate\n",[96,146250,146251],{"__ignoreMap":21},[99,146252,146253,146255],{"class":101,"line":102},[99,146254,100874],{"class":158},[99,146256,100877],{"class":214},[14,146258,146259],{},"退出虚拟环境：",[90,146261,146263],{"className":23810,"code":146262,"language":23812,"meta":21,"style":21},"deactivate\n",[96,146264,146265],{"__ignoreMap":21},[99,146266,146267],{"class":101,"line":102},[99,146268,146262],{"class":1949},[14,146270,146271],{},"保存依赖：",[90,146273,146275],{"className":23810,"code":146274,"language":23812,"meta":21,"style":21},"pip freeze > requirements.txt\n",[96,146276,146277],{"__ignoreMap":21},[99,146278,146279,146281,146284,146286],{"class":101,"line":102},[99,146280,23819],{"class":1949},[99,146282,146283],{"class":214}," freeze",[99,146285,26211],{"class":105},[99,146287,146288],{"class":214}," requirements.txt\n",[14,146290,146291],{},"安装依赖：",[90,146293,146295],{"className":23810,"code":146294,"language":23812,"meta":21,"style":21},"pip install -r requirements.txt\n",[96,146296,146297],{"__ignoreMap":21},[99,146298,146299,146301,146303,146305],{"class":101,"line":102},[99,146300,23819],{"class":1949},[99,146302,23822],{"class":214},[99,146304,119620],{"class":158},[99,146306,146288],{"class":214},[41,146308,146310],{"id":146309},"_16-开发工具","1.6 开发工具",[70,146312,146314],{"id":146313},"_161-pycharm","1.6.1 PyCharm",[14,146316,146317],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146319,122043],{},[53,146321,146322,146325,146328,146334,146337],{},[56,146323,146324],{},"New Project：创建项目。",[56,146326,146327],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[56,146329,146330,146331,125964],{},"New Python File：创建 ",[96,146332,146333],{},".py",[56,146335,146336],{},"Run：运行当前文件。",[56,146338,146339],{},"Debug：断点调试。",[70,146341,146343],{"id":146342},"_162-vs-code","1.6.2 VS Code",[14,146345,146346],{},"VS Code 轻量，适合后续多语言开发。",[14,146348,146349],{},"建议安装插件：",[53,146351,146352,146355,146358],{},[56,146353,146354],{},"Python。",[56,146356,146357],{},"Pylance。",[56,146359,146360],{},"Jupyter。",[14,146362,146363],{},"选择解释器：",[90,146365,146368],{"className":146366,"code":146367,"language":5174,"meta":21},[5172],"Ctrl + Shift + P -> Python: Select Interpreter\n",[96,146369,146367],{"__ignoreMap":21},[41,146371,146373],{"id":146372},"_17-第一个python程序","1.7 第一个Python程序",[14,146375,146376,146377,24607],{},"创建文件 ",[96,146378,146379],{},"hello.py",[90,146381,146383],{"className":30359,"code":146382,"language":30361,"meta":21,"style":21},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[96,146384,146385,146396],{"__ignoreMap":21},[99,146386,146387,146389,146391,146394],{"class":101,"line":102},[99,146388,30396],{"class":158},[99,146390,110],{"class":109},[99,146392,146393],{"class":214},"\"Hello World\"",[99,146395,116],{"class":109},[99,146397,146398,146400,146402,146405],{"class":101,"line":22},[99,146399,30396],{"class":158},[99,146401,110],{"class":109},[99,146403,146404],{"class":214},"\"你好，Python\"",[99,146406,116],{"class":109},[14,146408,146409],{},"在终端运行：",[90,146411,146413],{"className":23810,"code":146412,"language":23812,"meta":21,"style":21},"python hello.py\n",[96,146414,146415],{"__ignoreMap":21},[99,146416,146417,146419],{"class":101,"line":102},[99,146418,30361],{"class":1949},[99,146420,146421],{"class":214}," hello.py\n",[14,146423,146424],{},"或：",[90,146426,146428],{"className":23810,"code":146427,"language":23812,"meta":21,"style":21},"python3 hello.py\n",[96,146429,146430],{"__ignoreMap":21},[99,146431,146432,146434],{"class":101,"line":102},[99,146433,100860],{"class":1949},[99,146435,146421],{"class":214},[14,146437,146438],{},"输出：",[90,146440,146443],{"className":146441,"code":146442,"language":5174,"meta":21},[5172],"Hello World\n你好，Python\n",[96,146444,146442],{"__ignoreMap":21},[41,146446,146448],{"id":146447},"_18-print函数","1.8 print函数",[14,146450,146451,146454],{},[96,146452,146453],{},"print()"," 用来输出内容。",[90,146456,146458],{"className":30359,"code":146457,"language":30361,"meta":21,"style":21},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[96,146459,146460,146470,146480,146490],{"__ignoreMap":21},[99,146461,146462,146464,146466,146468],{"class":101,"line":102},[99,146463,30396],{"class":158},[99,146465,110],{"class":109},[99,146467,5831],{"class":214},[99,146469,116],{"class":109},[99,146471,146472,146474,146476,146478],{"class":101,"line":22},[99,146473,30396],{"class":158},[99,146475,110],{"class":109},[99,146477,421],{"class":158},[99,146479,116],{"class":109},[99,146481,146482,146484,146486,146488],{"class":101,"line":1165},[99,146483,30396],{"class":158},[99,146485,110],{"class":109},[99,146487,159],{"class":158},[99,146489,116],{"class":109},[99,146491,146492,146494,146496,146499,146501,146503],{"class":101,"line":1180},[99,146493,30396],{"class":158},[99,146495,110],{"class":109},[99,146497,146498],{"class":214},"\"年龄:\"",[99,146500,12422],{"class":109},[99,146502,760],{"class":158},[99,146504,116],{"class":109},[14,146506,146507],{},"多个内容用逗号隔开，默认中间加空格：",[90,146509,146511],{"className":30359,"code":146510,"language":30361,"meta":21,"style":21},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[96,146512,146513,146523,146533],{"__ignoreMap":21},[99,146514,146515,146518,146520],{"class":101,"line":102},[99,146516,146517],{"class":109},"name ",[99,146519,155],{"class":105},[99,146521,146522],{"class":214}," \"张三\"\n",[99,146524,146525,146528,146530],{"class":101,"line":22},[99,146526,146527],{"class":109},"age ",[99,146529,155],{"class":105},[99,146531,146532],{"class":158}," 18\n",[99,146534,146535,146537,146539,146542,146545,146547],{"class":101,"line":1165},[99,146536,30396],{"class":158},[99,146538,110],{"class":109},[99,146540,146541],{"class":214},"\"姓名:\"",[99,146543,146544],{"class":109},", name, ",[99,146546,146498],{"class":214},[99,146548,146549],{"class":109},", age)\n",[14,146551,146552],{},"修改分隔符：",[90,146554,146556],{"className":30359,"code":146555,"language":30361,"meta":21,"style":21},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[96,146557,146558],{"__ignoreMap":21},[99,146559,146560,146562,146564,146567,146569,146571,146573,146575,146577,146580,146582,146584],{"class":101,"line":102},[99,146561,30396],{"class":158},[99,146563,110],{"class":109},[99,146565,146566],{"class":214},"\"2024\"",[99,146568,12422],{"class":109},[99,146570,54297],{"class":214},[99,146572,12422],{"class":109},[99,146574,54297],{"class":214},[99,146576,12422],{"class":109},[99,146578,146579],{"class":5203},"sep",[99,146581,155],{"class":105},[99,146583,32464],{"class":214},[99,146585,116],{"class":109},[14,146587,146588],{},"修改结尾符：",[90,146590,146592],{"className":30359,"code":146591,"language":30361,"meta":21,"style":21},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[96,146593,146594,146612],{"__ignoreMap":21},[99,146595,146596,146598,146600,146602,146604,146606,146608,146610],{"class":101,"line":102},[99,146597,30396],{"class":158},[99,146599,110],{"class":109},[99,146601,5831],{"class":214},[99,146603,12422],{"class":109},[99,146605,45782],{"class":5203},[99,146607,155],{"class":105},[99,146609,4345],{"class":214},[99,146611,116],{"class":109},[99,146613,146614,146616,146618,146621],{"class":101,"line":22},[99,146615,30396],{"class":158},[99,146617,110],{"class":109},[99,146619,146620],{"class":214},"\"python\"",[99,146622,116],{"class":109},[41,146624,146626],{"id":146625},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146628,146629],{},"交互运行适合临时验证：",[90,146631,146633],{"className":30359,"code":146632,"language":30361,"meta":21,"style":21},">>> 10 * 3\n30\n",[96,146634,146635,146645],{"__ignoreMap":21},[99,146636,146637,146639,146641,146643],{"class":101,"line":102},[99,146638,145834],{"class":105},[99,146640,2024],{"class":158},[99,146642,6505],{"class":105},[99,146644,120017],{"class":158},[99,146646,146647],{"class":101,"line":22},[99,146648,146649],{"class":158},"30\n",[14,146651,146652],{},"脚本运行适合保存程序：",[90,146654,146656],{"className":30359,"code":146655,"language":30361,"meta":21,"style":21},"price = 8\ncount = 5\nprint(price * count)\n",[96,146657,146658,146668,146677],{"__ignoreMap":21},[99,146659,146660,146663,146665],{"class":101,"line":102},[99,146661,146662],{"class":109},"price ",[99,146664,155],{"class":105},[99,146666,146667],{"class":158}," 8\n",[99,146669,146670,146673,146675],{"class":101,"line":22},[99,146671,146672],{"class":109},"count ",[99,146674,155],{"class":105},[99,146676,54408],{"class":158},[99,146678,146679,146681,146684,146686],{"class":101,"line":1165},[99,146680,30396],{"class":158},[99,146682,146683],{"class":109},"(price ",[99,146685,565],{"class":105},[99,146687,146688],{"class":109}," count)\n",[14,146690,146691],{},"实际学习中推荐：",[53,146693,146694,146697,146702],{},[56,146695,146696],{},"临时试一个语法，用交互模式。",[56,146698,146699,146700,125964],{},"写完整练习，用 ",[96,146701,146333],{},[56,146703,146704],{},"写项目，用独立目录和虚拟环境。",[41,146706,146708],{"id":146707},"_110-常见错误","1.10 常见错误",[70,146710,146712],{"id":146711},"_1101-命令找不到","1.10.1 命令找不到",[90,146714,146717],{"className":146715,"code":146716,"language":5174,"meta":21},[5172],"python: command not found\n",[96,146718,146716],{"__ignoreMap":21},[14,146720,146721],{},"原因：",[53,146723,146724,146727,146730],{},[56,146725,146726],{},"没安装 Python。",[56,146728,146729],{},"PATH 没配置。",[56,146731,146732,146733,28366],{},"Linux\u002FmacOS 应该使用 ",[96,146734,100860],{},[70,146736,146738],{"id":146737},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146740,146741],{},"不要把文件命名为：",[90,146743,146746],{"className":146744,"code":146745,"language":5174,"meta":21},[5172],"random.py\njson.py\ntime.py\nrequests.py\n",[96,146747,146745],{"__ignoreMap":21},[14,146749,146750],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[70,146752,146754],{"id":146753},"_1103-中文乱码","1.10.3 中文乱码",[14,146756,146757],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146759,146760],{},"如果读写文件出现乱码，要明确指定编码：",[90,146762,146764],{"className":30359,"code":146763,"language":30361,"meta":21,"style":21},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[96,146765,146766,146800],{"__ignoreMap":21},[99,146767,146768,146770,146773,146775,146778,146780,146783,146785,146788,146790,146793,146795,146797],{"class":101,"line":102},[99,146769,107814],{"class":105},[99,146771,146772],{"class":158}," open",[99,146774,110],{"class":109},[99,146776,146777],{"class":214},"\"data.txt\"",[99,146779,12422],{"class":109},[99,146781,146782],{"class":214},"\"r\"",[99,146784,12422],{"class":109},[99,146786,146787],{"class":5203},"encoding",[99,146789,155],{"class":105},[99,146791,146792],{"class":214},"\"utf-8\"",[99,146794,13701],{"class":109},[99,146796,31364],{"class":105},[99,146798,146799],{"class":109}," f:\n",[99,146801,146802,146805,146807],{"class":101,"line":22},[99,146803,146804],{"class":109},"    content ",[99,146806,155],{"class":105},[99,146808,146809],{"class":109}," f.read()\n",[41,146811,146813],{"id":146812},"_111-本章练习","1.11 本章练习",[53,146815,146816,146819,146825],{},[56,146817,146818],{},"安装 Python，并在终端输出版本号。",[56,146820,146821,146822,146824],{},"新建 ",[96,146823,146379],{},"，输出自己的姓名、年龄、学习目标。",[56,146826,104347,146827,146829],{},[96,146828,146453],{}," 输出下面格式：",[90,146831,146834],{"className":146832,"code":146833,"language":5174,"meta":21},[5172],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[96,146835,146833],{"__ignoreMap":21},[53,146837,146838],{"start":1180},[56,146839,104347,146840,146842],{},[96,146841,146579],{}," 输出日期：",[90,146844,146847],{"className":146845,"code":146846,"language":5174,"meta":21},[5172],"2024-10-10\n",[96,146848,146846],{"__ignoreMap":21},[53,146850,146851],{"start":1186},[56,146852,104347,146853,146855,146856,146858],{},[96,146854,45782],{}," 让两次 ",[96,146857,146453],{}," 输出在同一行。",[5113,146860,146861],{},"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":21,"searchDepth":22,"depth":22,"links":146863},[146864,146865,146866,146871,146872,146873,146877,146878,146879,146880,146885],{"id":145746,"depth":22,"text":145747},{"id":145790,"depth":22,"text":145791},{"id":145891,"depth":22,"text":145892,"children":146867},[146868,146869,146870],{"id":145895,"depth":1165,"text":145896},{"id":145950,"depth":1165,"text":145951},{"id":145986,"depth":1165,"text":145987},{"id":146059,"depth":22,"text":146060},{"id":146204,"depth":22,"text":146205},{"id":146309,"depth":22,"text":146310,"children":146874},[146875,146876],{"id":146313,"depth":1165,"text":146314},{"id":146342,"depth":1165,"text":146343},{"id":146372,"depth":22,"text":146373},{"id":146447,"depth":22,"text":146448},{"id":146625,"depth":22,"text":146626},{"id":146707,"depth":22,"text":146708,"children":146881},[146882,146883,146884],{"id":146711,"depth":1165,"text":146712},{"id":146737,"depth":1165,"text":146738},{"id":146753,"depth":1165,"text":146754},{"id":146812,"depth":22,"text":146813},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145738,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146892,"title":146893,"body":146894,"description":23364,"extension":24,"meta":149298,"navigation":26,"path":149299,"seo":149300,"stem":149301,"__hash__":149302},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146895,"toc":149283},[146896,146899,146903,146906,146909,146926,146929,146971,146974,146978,146981,146984,147021,147024,147058,147061,147153,147157,147171,147174,147201,147204,147208,147311,147318,147321,147338,147342,147349,147538,147541,147614,147618,147621,147705,147708,147740,147744,147948,147951,147955,147961,148063,148066,148322,148326,148329,148332,148346,148348,148534,148538,148900,148906,148910,148913,149037,149040,149219,149222,149226,149259,149263,149280],[10,146897,146893],{"id":146898},"_10-json与pyecharts折线图",[41,146900,146902],{"id":146901},"_101-数据可视化","10.1 数据可视化",[14,146904,146905],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146907,146908],{},"常见图表：",[53,146910,146911,146914,146917,146920,146923],{},[56,146912,146913],{},"折线图：看趋势。",[56,146915,146916],{},"柱状图：看分类对比。",[56,146918,146919],{},"饼图：看占比。",[56,146921,146922],{},"地图：看地域分布。",[56,146924,146925],{},"散点图：看两个变量之间的关系。",[14,146927,146928],{},"Python 可视化常用库：",[247,146930,146931,146939],{},[250,146932,146933],{},[253,146934,146935,146937],{},[256,146936,146142],{},[256,146938,23728],{},[294,146940,146941,146948,146956,146963],{},[253,146942,146943,146945],{},[299,146944,146174],{},[299,146946,146947],{},"基础、经典、可定制",[253,146949,146950,146953],{},[299,146951,146952],{},"seaborn",[299,146954,146955],{},"统计图表更美观",[253,146957,146958,146960],{},[299,146959,146182],{},[299,146961,146962],{},"生成交互式网页图表",[253,146964,146965,146968],{},[299,146966,146967],{},"plotly",[299,146969,146970],{},"交互图表能力强",[14,146972,146973],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[41,146975,146977],{"id":146976},"_102-json回顾","10.2 JSON回顾",[14,146979,146980],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146982,146983],{},"Python 字典：",[90,146985,146987],{"className":30359,"code":146986,"language":30361,"meta":21,"style":21},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[96,146988,146989,146997,147008,147017],{"__ignoreMap":21},[99,146990,146991,146993,146995],{"class":101,"line":102},[99,146992,101639],{"class":109},[99,146994,155],{"class":105},[99,146996,15559],{"class":109},[99,146998,146999,147002,147004,147006],{"class":101,"line":22},[99,147000,147001],{"class":214},"    \"name\"",[99,147003,51418],{"class":109},[99,147005,69250],{"class":214},[99,147007,31447],{"class":109},[99,147009,147010,147013,147015],{"class":101,"line":1165},[99,147011,147012],{"class":214},"    \"value\"",[99,147014,51418],{"class":109},[99,147016,97439],{"class":158},[99,147018,147019],{"class":101,"line":1180},[99,147020,1551],{"class":109},[14,147022,147023],{},"JSON 字符串：",[90,147025,147028],{"className":147026,"code":147027,"language":145773,"meta":21,"style":21},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[96,147029,147030,147034,147045,147054],{"__ignoreMap":21},[99,147031,147032],{"class":101,"line":102},[99,147033,1532],{"class":109},[99,147035,147036,147039,147041,147043],{"class":101,"line":22},[99,147037,147038],{"class":158},"  \"name\"",[99,147040,51418],{"class":109},[99,147042,69250],{"class":214},[99,147044,31447],{"class":109},[99,147046,147047,147050,147052],{"class":101,"line":1165},[99,147048,147049],{"class":158},"  \"value\"",[99,147051,51418],{"class":109},[99,147053,97439],{"class":158},[99,147055,147056],{"class":101,"line":1180},[99,147057,1551],{"class":109},[14,147059,147060],{},"Python 与 JSON 的转换：",[90,147062,147064],{"className":30359,"code":147063,"language":30361,"meta":21,"style":21},"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",[96,147065,147066,147073,147077,147102,147106,147125,147132,147136,147146],{"__ignoreMap":21},[99,147067,147068,147070],{"class":101,"line":102},[99,147069,30373],{"class":105},[99,147071,147072],{"class":109}," json\n",[99,147074,147075],{"class":101,"line":22},[99,147076,2386],{"emptyLinePlaceholder":26},[99,147078,147079,147081,147083,147085,147087,147089,147091,147093,147096,147098,147100],{"class":101,"line":1165},[99,147080,101639],{"class":109},[99,147082,155],{"class":105},[99,147084,4434],{"class":109},[99,147086,62660],{"class":214},[99,147088,51418],{"class":109},[99,147090,69250],{"class":214},[99,147092,12422],{"class":109},[99,147094,147095],{"class":214},"\"value\"",[99,147097,51418],{"class":109},[99,147099,421],{"class":158},[99,147101,1551],{"class":109},[99,147103,147104],{"class":101,"line":1180},[99,147105,2386],{"emptyLinePlaceholder":26},[99,147107,147108,147111,147113,147116,147119,147121,147123],{"class":101,"line":1186},[99,147109,147110],{"class":109},"json_text ",[99,147112,155],{"class":105},[99,147114,147115],{"class":109}," json.dumps(data, ",[99,147117,147118],{"class":5203},"ensure_ascii",[99,147120,155],{"class":105},[99,147122,33968],{"class":158},[99,147124,116],{"class":109},[99,147126,147127,147129],{"class":101,"line":1200},[99,147128,30396],{"class":158},[99,147130,147131],{"class":109},"(json_text)\n",[99,147133,147134],{"class":101,"line":1206},[99,147135,2386],{"emptyLinePlaceholder":26},[99,147137,147138,147141,147143],{"class":101,"line":1297},[99,147139,147140],{"class":109},"new_data ",[99,147142,155],{"class":105},[99,147144,147145],{"class":109}," json.loads(json_text)\n",[99,147147,147148,147150],{"class":101,"line":1303},[99,147149,30396],{"class":158},[99,147151,147152],{"class":109},"(new_data)\n",[41,147154,147156],{"id":147155},"_103-安装pyecharts","10.3 安装pyecharts",[90,147158,147160],{"className":23810,"code":147159,"language":23812,"meta":21,"style":21},"pip install pyecharts\n",[96,147161,147162],{"__ignoreMap":21},[99,147163,147164,147166,147168],{"class":101,"line":102},[99,147165,23819],{"class":1949},[99,147167,23822],{"class":214},[99,147169,147170],{"class":214}," pyecharts\n",[14,147172,147173],{},"验证：",[90,147175,147177],{"className":30359,"code":147176,"language":30361,"meta":21,"style":21},"import pyecharts\n\nprint(pyecharts.__version__)\n",[96,147178,147179,147185,147189],{"__ignoreMap":21},[99,147180,147181,147183],{"class":101,"line":102},[99,147182,30373],{"class":105},[99,147184,147170],{"class":109},[99,147186,147187],{"class":101,"line":22},[99,147188,2386],{"emptyLinePlaceholder":26},[99,147190,147191,147193,147196,147199],{"class":101,"line":1165},[99,147192,30396],{"class":158},[99,147194,147195],{"class":109},"(pyecharts.",[99,147197,147198],{"class":158},"__version__",[99,147200,116],{"class":109},[14,147202,147203],{},"如果使用虚拟环境，要先激活环境再安装。",[41,147205,147207],{"id":147206},"_104-第一个折线图","10.4 第一个折线图",[90,147209,147211],{"className":30359,"code":147210,"language":30361,"meta":21,"style":21},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[96,147212,147213,147225,147229,147239,147269,147301],{"__ignoreMap":21},[99,147214,147215,147217,147220,147222],{"class":101,"line":102},[99,147216,30718],{"class":105},[99,147218,147219],{"class":109}," pyecharts.charts ",[99,147221,30373],{"class":105},[99,147223,147224],{"class":109}," Line\n",[99,147226,147227],{"class":101,"line":22},[99,147228,2386],{"emptyLinePlaceholder":26},[99,147230,147231,147234,147236],{"class":101,"line":1165},[99,147232,147233],{"class":109},"line ",[99,147235,155],{"class":105},[99,147237,147238],{"class":109}," Line()\n",[99,147240,147241,147244,147247,147249,147252,147254,147257,147259,147262,147264,147267],{"class":101,"line":1180},[99,147242,147243],{"class":109},"line.add_xaxis([",[99,147245,147246],{"class":214},"\"周一\"",[99,147248,12422],{"class":109},[99,147250,147251],{"class":214},"\"周二\"",[99,147253,12422],{"class":109},[99,147255,147256],{"class":214},"\"周三\"",[99,147258,12422],{"class":109},[99,147260,147261],{"class":214},"\"周四\"",[99,147263,12422],{"class":109},[99,147265,147266],{"class":214},"\"周五\"",[99,147268,4643],{"class":109},[99,147270,147271,147274,147277,147279,147281,147283,147285,147287,147289,147291,147294,147296,147299],{"class":101,"line":1186},[99,147272,147273],{"class":109},"line.add_yaxis(",[99,147275,147276],{"class":214},"\"销售额\"",[99,147278,77499],{"class":109},[99,147280,421],{"class":158},[99,147282,12422],{"class":109},[99,147284,927],{"class":158},[99,147286,12422],{"class":109},[99,147288,972],{"class":158},[99,147290,12422],{"class":109},[99,147292,147293],{"class":158},"150",[99,147295,12422],{"class":109},[99,147297,147298],{"class":158},"180",[99,147300,4643],{"class":109},[99,147302,147303,147306,147309],{"class":101,"line":1200},[99,147304,147305],{"class":109},"line.render(",[99,147307,147308],{"class":214},"\"line.html\"",[99,147310,116],{"class":109},[14,147312,147313,147314,147317],{},"运行后会生成 ",[96,147315,147316],{},"line.html","，用浏览器打开即可看到图表。",[14,147319,147320],{},"核心步骤：",[53,147322,147323,147326,147329,147332,147335],{},[56,147324,147325],{},"导入图表类。",[56,147327,147328],{},"创建图表对象。",[56,147330,147331],{},"添加 x 轴数据。",[56,147333,147334],{},"添加 y 轴数据。",[56,147336,147337],{},"渲染为 HTML。",[41,147339,147341],{"id":147340},"_105-全局配置","10.5 全局配置",[14,147343,147344,147345,147348],{},"常用配置在 ",[96,147346,147347],{},"pyecharts.options"," 中。",[90,147350,147352],{"className":30359,"code":147351,"language":30361,"meta":21,"style":21},"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",[96,147353,147354,147371,147381,147385,147393,147417,147445,147450,147469,147488,147506,147526,147530],{"__ignoreMap":21},[99,147355,147356,147358,147361,147363,147366,147368],{"class":101,"line":102},[99,147357,30718],{"class":105},[99,147359,147360],{"class":109}," pyecharts ",[99,147362,30373],{"class":105},[99,147364,147365],{"class":109}," options ",[99,147367,31364],{"class":105},[99,147369,147370],{"class":109}," opts\n",[99,147372,147373,147375,147377,147379],{"class":101,"line":22},[99,147374,30718],{"class":105},[99,147376,147219],{"class":109},[99,147378,30373],{"class":105},[99,147380,147224],{"class":109},[99,147382,147383],{"class":101,"line":1165},[99,147384,2386],{"emptyLinePlaceholder":26},[99,147386,147387,147389,147391],{"class":101,"line":1180},[99,147388,147233],{"class":109},[99,147390,155],{"class":105},[99,147392,147238],{"class":109},[99,147394,147395,147397,147399,147401,147403,147405,147407,147409,147411,147413,147415],{"class":101,"line":1186},[99,147396,147243],{"class":109},[99,147398,147246],{"class":214},[99,147400,12422],{"class":109},[99,147402,147251],{"class":214},[99,147404,12422],{"class":109},[99,147406,147256],{"class":214},[99,147408,12422],{"class":109},[99,147410,147261],{"class":214},[99,147412,12422],{"class":109},[99,147414,147266],{"class":214},[99,147416,4643],{"class":109},[99,147418,147419,147421,147423,147425,147427,147429,147431,147433,147435,147437,147439,147441,147443],{"class":101,"line":1200},[99,147420,147273],{"class":109},[99,147422,147276],{"class":214},[99,147424,77499],{"class":109},[99,147426,421],{"class":158},[99,147428,12422],{"class":109},[99,147430,927],{"class":158},[99,147432,12422],{"class":109},[99,147434,972],{"class":158},[99,147436,12422],{"class":109},[99,147438,147293],{"class":158},[99,147440,12422],{"class":109},[99,147442,147298],{"class":158},[99,147444,4643],{"class":109},[99,147446,147447],{"class":101,"line":1206},[99,147448,147449],{"class":109},"line.set_global_opts(\n",[99,147451,147452,147455,147457,147460,147462,147464,147467],{"class":101,"line":1297},[99,147453,147454],{"class":5203},"    title_opts",[99,147456,155],{"class":105},[99,147458,147459],{"class":109},"opts.TitleOpts(",[99,147461,51388],{"class":5203},[99,147463,155],{"class":105},[99,147465,147466],{"class":214},"\"一周销售额\"",[99,147468,38028],{"class":109},[99,147470,147471,147474,147476,147479,147481,147483,147486],{"class":101,"line":1303},[99,147472,147473],{"class":5203},"    xaxis_opts",[99,147475,155],{"class":105},[99,147477,147478],{"class":109},"opts.AxisOpts(",[99,147480,79791],{"class":5203},[99,147482,155],{"class":105},[99,147484,147485],{"class":214},"\"日期\"",[99,147487,38028],{"class":109},[99,147489,147490,147493,147495,147497,147499,147501,147504],{"class":101,"line":1315},[99,147491,147492],{"class":5203},"    yaxis_opts",[99,147494,155],{"class":105},[99,147496,147478],{"class":109},[99,147498,79791],{"class":5203},[99,147500,155],{"class":105},[99,147502,147503],{"class":214},"\"金额\"",[99,147505,38028],{"class":109},[99,147507,147508,147511,147513,147516,147519,147521,147524],{"class":101,"line":1598},[99,147509,147510],{"class":5203},"    tooltip_opts",[99,147512,155],{"class":105},[99,147514,147515],{"class":109},"opts.TooltipOpts(",[99,147517,147518],{"class":5203},"trigger",[99,147520,155],{"class":105},[99,147522,147523],{"class":214},"\"axis\"",[99,147525,38028],{"class":109},[99,147527,147528],{"class":101,"line":1603},[99,147529,116],{"class":109},[99,147531,147532,147534,147536],{"class":101,"line":1609},[99,147533,147305],{"class":109},[99,147535,147308],{"class":214},[99,147537,116],{"class":109},[14,147539,147540],{},"常见全局配置：",[247,147542,147543,147552],{},[250,147544,147545],{},[253,147546,147547,147550],{},[256,147548,147549],{},"配置",[256,147551,102677],{},[294,147553,147554,147564,147574,147584,147594,147604],{},[253,147555,147556,147561],{},[299,147557,147558],{},[96,147559,147560],{},"TitleOpts",[299,147562,147563],{},"标题",[253,147565,147566,147571],{},[299,147567,147568],{},[96,147569,147570],{},"LegendOpts",[299,147572,147573],{},"图例",[253,147575,147576,147581],{},[299,147577,147578],{},[96,147579,147580],{},"TooltipOpts",[299,147582,147583],{},"提示框",[253,147585,147586,147591],{},[299,147587,147588],{},[96,147589,147590],{},"AxisOpts",[299,147592,147593],{},"坐标轴",[253,147595,147596,147601],{},[299,147597,147598],{},[96,147599,147600],{},"VisualMapOpts",[299,147602,147603],{},"视觉映射",[253,147605,147606,147611],{},[299,147607,147608],{},[96,147609,147610],{},"DataZoomOpts",[299,147612,147613],{},"区域缩放",[41,147615,147617],{"id":147616},"_106-系列配置","10.6 系列配置",[14,147619,147620],{},"系列配置作用于某一组数据。",[90,147622,147624],{"className":30359,"code":147623,"language":30361,"meta":21,"style":21},"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",[96,147625,147626,147631,147642,147671,147682,147701],{"__ignoreMap":21},[99,147627,147628],{"class":101,"line":102},[99,147629,147630],{"class":109},"line.add_yaxis(\n",[99,147632,147633,147636,147638,147640],{"class":101,"line":22},[99,147634,147635],{"class":5203},"    series_name",[99,147637,155],{"class":105},[99,147639,147276],{"class":214},[99,147641,31447],{"class":109},[99,147643,147644,147647,147649,147651,147653,147655,147657,147659,147661,147663,147665,147667,147669],{"class":101,"line":1165},[99,147645,147646],{"class":5203},"    y_axis",[99,147648,155],{"class":105},[99,147650,1000],{"class":109},[99,147652,421],{"class":158},[99,147654,12422],{"class":109},[99,147656,927],{"class":158},[99,147658,12422],{"class":109},[99,147660,972],{"class":158},[99,147662,12422],{"class":109},[99,147664,147293],{"class":158},[99,147666,12422],{"class":109},[99,147668,147298],{"class":158},[99,147670,87817],{"class":109},[99,147672,147673,147676,147678,147680],{"class":101,"line":1180},[99,147674,147675],{"class":5203},"    is_smooth",[99,147677,155],{"class":105},[99,147679,31457],{"class":158},[99,147681,31447],{"class":109},[99,147683,147684,147687,147689,147692,147695,147697,147699],{"class":101,"line":1186},[99,147685,147686],{"class":5203},"    label_opts",[99,147688,155],{"class":105},[99,147690,147691],{"class":109},"opts.LabelOpts(",[99,147693,147694],{"class":5203},"is_show",[99,147696,155],{"class":105},[99,147698,31457],{"class":158},[99,147700,38028],{"class":109},[99,147702,147703],{"class":101,"line":1200},[99,147704,116],{"class":109},[14,147706,147707],{},"常用参数：",[53,147709,147710,147716,147722,147728,147734],{},[56,147711,147712,147715],{},[96,147713,147714],{},"series_name","：系列名称。",[56,147717,147718,147721],{},[96,147719,147720],{},"y_axis","：y 轴数据。",[56,147723,147724,147727],{},[96,147725,147726],{},"is_smooth","：是否平滑曲线。",[56,147729,147730,147733],{},[96,147731,147732],{},"label_opts","：标签配置。",[56,147735,147736,147739],{},[96,147737,147738],{},"symbol_size","：标记点大小。",[41,147741,147743],{"id":147742},"_107-多条折线","10.7 多条折线",[90,147745,147747],{"className":30359,"code":147746,"language":30361,"meta":21,"style":21},"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",[96,147748,147749,147763,147773,147777,147806,147810,147818,147823,147861,147898,147902,147919,147935,147939],{"__ignoreMap":21},[99,147750,147751,147753,147755,147757,147759,147761],{"class":101,"line":102},[99,147752,30718],{"class":105},[99,147754,147360],{"class":109},[99,147756,30373],{"class":105},[99,147758,147365],{"class":109},[99,147760,31364],{"class":105},[99,147762,147370],{"class":109},[99,147764,147765,147767,147769,147771],{"class":101,"line":22},[99,147766,30718],{"class":105},[99,147768,147219],{"class":109},[99,147770,30373],{"class":105},[99,147772,147224],{"class":109},[99,147774,147775],{"class":101,"line":1165},[99,147776,2386],{"emptyLinePlaceholder":26},[99,147778,147779,147782,147784,147786,147788,147790,147792,147794,147796,147798,147800,147802,147804],{"class":101,"line":1180},[99,147780,147781],{"class":109},"dates ",[99,147783,155],{"class":105},[99,147785,52207],{"class":109},[99,147787,147246],{"class":214},[99,147789,12422],{"class":109},[99,147791,147251],{"class":214},[99,147793,12422],{"class":109},[99,147795,147256],{"class":214},[99,147797,12422],{"class":109},[99,147799,147261],{"class":214},[99,147801,12422],{"class":109},[99,147803,147266],{"class":214},[99,147805,33227],{"class":109},[99,147807,147808],{"class":101,"line":1186},[99,147809,2386],{"emptyLinePlaceholder":26},[99,147811,147812,147814,147816],{"class":101,"line":1200},[99,147813,147233],{"class":109},[99,147815,155],{"class":105},[99,147817,147238],{"class":109},[99,147819,147820],{"class":101,"line":1206},[99,147821,147822],{"class":109},"line.add_xaxis(dates)\n",[99,147824,147825,147827,147830,147832,147834,147836,147839,147841,147843,147845,147847,147849,147851,147853,147855,147857,147859],{"class":101,"line":1297},[99,147826,147273],{"class":109},[99,147828,147829],{"class":214},"\"线上销售\"",[99,147831,77499],{"class":109},[99,147833,421],{"class":158},[99,147835,12422],{"class":109},[99,147837,147838],{"class":158},"130",[99,147840,12422],{"class":109},[99,147842,927],{"class":158},[99,147844,12422],{"class":109},[99,147846,21035],{"class":158},[99,147848,12422],{"class":109},[99,147850,1708],{"class":158},[99,147852,112183],{"class":109},[99,147854,147726],{"class":5203},[99,147856,155],{"class":105},[99,147858,31457],{"class":158},[99,147860,116],{"class":109},[99,147862,147863,147865,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892,147894,147896],{"class":101,"line":1303},[99,147864,147273],{"class":109},[99,147866,147867],{"class":214},"\"线下销售\"",[99,147869,77499],{"class":109},[99,147871,722],{"class":158},[99,147873,12422],{"class":109},[99,147875,972],{"class":158},[99,147877,12422],{"class":109},[99,147879,421],{"class":158},[99,147881,12422],{"class":109},[99,147883,927],{"class":158},[99,147885,12422],{"class":109},[99,147887,147293],{"class":158},[99,147889,112183],{"class":109},[99,147891,147726],{"class":5203},[99,147893,155],{"class":105},[99,147895,31457],{"class":158},[99,147897,116],{"class":109},[99,147899,147900],{"class":101,"line":1315},[99,147901,147449],{"class":109},[99,147903,147904,147906,147908,147910,147912,147914,147917],{"class":101,"line":1598},[99,147905,147454],{"class":5203},[99,147907,155],{"class":105},[99,147909,147459],{"class":109},[99,147911,51388],{"class":5203},[99,147913,155],{"class":105},[99,147915,147916],{"class":214},"\"线上线下销售趋势\"",[99,147918,38028],{"class":109},[99,147920,147921,147923,147925,147927,147929,147931,147933],{"class":101,"line":1603},[99,147922,147510],{"class":5203},[99,147924,155],{"class":105},[99,147926,147515],{"class":109},[99,147928,147518],{"class":5203},[99,147930,155],{"class":105},[99,147932,147523],{"class":214},[99,147934,38028],{"class":109},[99,147936,147937],{"class":101,"line":1609},[99,147938,116],{"class":109},[99,147940,147941,147943,147946],{"class":101,"line":1614},[99,147942,147305],{"class":109},[99,147944,147945],{"class":214},"\"sales.html\"",[99,147947,116],{"class":109},[14,147949,147950],{},"多条折线适合比较不同指标或不同地区。",[41,147952,147954],{"id":147953},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147956,147957,147958,24607],{},"假设 ",[96,147959,147960],{},"sales.json",[90,147962,147964],{"className":147026,"code":147963,"language":145773,"meta":21,"style":21},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[96,147965,147966,147971,148003,148031,148059],{"__ignoreMap":21},[99,147967,147968],{"class":101,"line":102},[99,147969,147970],{"class":109},"[\n",[99,147972,147973,147976,147979,147981,147983,147985,147988,147990,147992,147994,147997,147999,148001],{"class":101,"line":22},[99,147974,147975],{"class":109},"  {",[99,147977,147978],{"class":158},"\"date\"",[99,147980,51418],{"class":109},[99,147982,147246],{"class":214},[99,147984,12422],{"class":109},[99,147986,147987],{"class":158},"\"online\"",[99,147989,51418],{"class":109},[99,147991,421],{"class":158},[99,147993,12422],{"class":109},[99,147995,147996],{"class":158},"\"offline\"",[99,147998,51418],{"class":109},[99,148000,722],{"class":158},[99,148002,4916],{"class":109},[99,148004,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023,148025,148027,148029],{"class":101,"line":1165},[99,148006,147975],{"class":109},[99,148008,147978],{"class":158},[99,148010,51418],{"class":109},[99,148012,147251],{"class":214},[99,148014,12422],{"class":109},[99,148016,147987],{"class":158},[99,148018,51418],{"class":109},[99,148020,147838],{"class":158},[99,148022,12422],{"class":109},[99,148024,147996],{"class":158},[99,148026,51418],{"class":109},[99,148028,972],{"class":158},[99,148030,4916],{"class":109},[99,148032,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055,148057],{"class":101,"line":1180},[99,148034,147975],{"class":109},[99,148036,147978],{"class":158},[99,148038,51418],{"class":109},[99,148040,147256],{"class":214},[99,148042,12422],{"class":109},[99,148044,147987],{"class":158},[99,148046,51418],{"class":109},[99,148048,927],{"class":158},[99,148050,12422],{"class":109},[99,148052,147996],{"class":158},[99,148054,51418],{"class":109},[99,148056,421],{"class":158},[99,148058,1551],{"class":109},[99,148060,148061],{"class":101,"line":1186},[99,148062,33227],{"class":109},[14,148064,148065],{},"读取并绘图：",[90,148067,148069],{"className":30359,"code":148068,"language":30361,"meta":21,"style":21},"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",[96,148070,148071,148077,148091,148101,148105,148137,148150,148154,148162,148171,148180,148184,148196,148205,148214,148223,148227,148235,148239,148256,148273,148277,148294,148310,148314],{"__ignoreMap":21},[99,148072,148073,148075],{"class":101,"line":102},[99,148074,30373],{"class":105},[99,148076,147072],{"class":109},[99,148078,148079,148081,148083,148085,148087,148089],{"class":101,"line":22},[99,148080,30718],{"class":105},[99,148082,147360],{"class":109},[99,148084,30373],{"class":105},[99,148086,147365],{"class":109},[99,148088,31364],{"class":105},[99,148090,147370],{"class":109},[99,148092,148093,148095,148097,148099],{"class":101,"line":1165},[99,148094,30718],{"class":105},[99,148096,147219],{"class":109},[99,148098,30373],{"class":105},[99,148100,147224],{"class":109},[99,148102,148103],{"class":101,"line":1180},[99,148104,2386],{"emptyLinePlaceholder":26},[99,148106,148107,148109,148111,148113,148116,148118,148120,148122,148124,148126,148128,148130,148132,148135],{"class":101,"line":1186},[99,148108,107814],{"class":105},[99,148110,146772],{"class":158},[99,148112,110],{"class":109},[99,148114,148115],{"class":214},"\"sales.json\"",[99,148117,12422],{"class":109},[99,148119,146782],{"class":214},[99,148121,12422],{"class":109},[99,148123,146787],{"class":5203},[99,148125,155],{"class":105},[99,148127,146792],{"class":214},[99,148129,13701],{"class":109},[99,148131,31364],{"class":105},[99,148133,148134],{"class":5203}," file",[99,148136,3725],{"class":109},[99,148138,148139,148141,148143,148146,148148],{"class":101,"line":1200},[99,148140,101402],{"class":109},[99,148142,155],{"class":105},[99,148144,148145],{"class":109}," json.load(",[99,148147,45335],{"class":5203},[99,148149,116],{"class":109},[99,148151,148152],{"class":101,"line":1206},[99,148153,2386],{"emptyLinePlaceholder":26},[99,148155,148156,148158,148160],{"class":101,"line":1297},[99,148157,147781],{"class":109},[99,148159,155],{"class":105},[99,148161,51819],{"class":109},[99,148163,148164,148167,148169],{"class":101,"line":1303},[99,148165,148166],{"class":109},"online_sales ",[99,148168,155],{"class":105},[99,148170,51819],{"class":109},[99,148172,148173,148176,148178],{"class":101,"line":1315},[99,148174,148175],{"class":109},"offline_sales ",[99,148177,155],{"class":105},[99,148179,51819],{"class":109},[99,148181,148182],{"class":101,"line":1598},[99,148183,2386],{"emptyLinePlaceholder":26},[99,148185,148186,148188,148191,148193],{"class":101,"line":1603},[99,148187,3011],{"class":105},[99,148189,148190],{"class":109}," item ",[99,148192,26032],{"class":105},[99,148194,148195],{"class":109}," data:\n",[99,148197,148198,148201,148203],{"class":101,"line":1609},[99,148199,148200],{"class":109},"    dates.append(item[",[99,148202,147978],{"class":214},[99,148204,4643],{"class":109},[99,148206,148207,148210,148212],{"class":101,"line":1614},[99,148208,148209],{"class":109},"    online_sales.append(item[",[99,148211,147987],{"class":214},[99,148213,4643],{"class":109},[99,148215,148216,148219,148221],{"class":101,"line":1628},[99,148217,148218],{"class":109},"    offline_sales.append(item[",[99,148220,147996],{"class":214},[99,148222,4643],{"class":109},[99,148224,148225],{"class":101,"line":1633},[99,148226,2386],{"emptyLinePlaceholder":26},[99,148228,148229,148231,148233],{"class":101,"line":1639},[99,148230,147233],{"class":109},[99,148232,155],{"class":105},[99,148234,147238],{"class":109},[99,148236,148237],{"class":101,"line":1660},[99,148238,147822],{"class":109},[99,148240,148241,148243,148245,148248,148250,148252,148254],{"class":101,"line":1665},[99,148242,147273],{"class":109},[99,148244,147829],{"class":214},[99,148246,148247],{"class":109},", online_sales, ",[99,148249,147726],{"class":5203},[99,148251,155],{"class":105},[99,148253,31457],{"class":158},[99,148255,116],{"class":109},[99,148257,148258,148260,148262,148265,148267,148269,148271],{"class":101,"line":1679},[99,148259,147273],{"class":109},[99,148261,147867],{"class":214},[99,148263,148264],{"class":109},", offline_sales, ",[99,148266,147726],{"class":5203},[99,148268,155],{"class":105},[99,148270,31457],{"class":158},[99,148272,116],{"class":109},[99,148274,148275],{"class":101,"line":1684},[99,148276,147449],{"class":109},[99,148278,148279,148281,148283,148285,148287,148289,148292],{"class":101,"line":1713},[99,148280,147454],{"class":5203},[99,148282,155],{"class":105},[99,148284,147459],{"class":109},[99,148286,51388],{"class":5203},[99,148288,155],{"class":105},[99,148290,148291],{"class":214},"\"销售趋势\"",[99,148293,38028],{"class":109},[99,148295,148296,148298,148300,148302,148304,148306,148308],{"class":101,"line":1718},[99,148297,147510],{"class":5203},[99,148299,155],{"class":105},[99,148301,147515],{"class":109},[99,148303,147518],{"class":5203},[99,148305,155],{"class":105},[99,148307,147523],{"class":214},[99,148309,38028],{"class":109},[99,148311,148312],{"class":101,"line":1735},[99,148313,116],{"class":109},[99,148315,148316,148318,148320],{"class":101,"line":1740},[99,148317,147305],{"class":109},[99,148319,147945],{"class":214},[99,148321,116],{"class":109},[41,148323,148325],{"id":148324},"_109-数据清洗","10.9 数据清洗",[14,148327,148328],{},"真实数据经常不整齐，需要清洗。",[14,148330,148331],{},"常见问题：",[53,148333,148334,148337,148340,148343],{},[56,148335,148336],{},"数字是字符串。",[56,148338,148339],{},"字段缺失。",[56,148341,148342],{},"空值。",[56,148344,148345],{},"日期格式不统一。",[14,148347,15122],{},[90,148349,148351],{"className":30359,"code":148350,"language":30361,"meta":21,"style":21},"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",[96,148352,148353,148362,148385,148405,148426,148430,148434,148442,148451,148455,148466,148480,148489,148494,148498,148506,148516,148520,148527],{"__ignoreMap":21},[99,148354,148355,148358,148360],{"class":101,"line":102},[99,148356,148357],{"class":109},"raw_data ",[99,148359,155],{"class":105},[99,148361,55428],{"class":109},[99,148363,148364,148367,148369,148371,148373,148375,148378,148380,148383],{"class":101,"line":22},[99,148365,148366],{"class":109},"    {",[99,148368,147978],{"class":214},[99,148370,51418],{"class":109},[99,148372,147246],{"class":214},[99,148374,12422],{"class":109},[99,148376,148377],{"class":214},"\"sales\"",[99,148379,51418],{"class":109},[99,148381,148382],{"class":214},"\"100\"",[99,148384,4916],{"class":109},[99,148386,148387,148389,148391,148393,148395,148397,148399,148401,148403],{"class":101,"line":1165},[99,148388,148366],{"class":109},[99,148390,147978],{"class":214},[99,148392,51418],{"class":109},[99,148394,147251],{"class":214},[99,148396,12422],{"class":109},[99,148398,148377],{"class":214},[99,148400,51418],{"class":109},[99,148402,7639],{"class":214},[99,148404,4916],{"class":109},[99,148406,148407,148409,148411,148413,148415,148417,148419,148421,148424],{"class":101,"line":1180},[99,148408,148366],{"class":109},[99,148410,147978],{"class":214},[99,148412,51418],{"class":109},[99,148414,147256],{"class":214},[99,148416,12422],{"class":109},[99,148418,148377],{"class":214},[99,148420,51418],{"class":109},[99,148422,148423],{"class":214},"\"120\"",[99,148425,4916],{"class":109},[99,148427,148428],{"class":101,"line":1186},[99,148429,33227],{"class":109},[99,148431,148432],{"class":101,"line":1200},[99,148433,2386],{"emptyLinePlaceholder":26},[99,148435,148436,148438,148440],{"class":101,"line":1206},[99,148437,147781],{"class":109},[99,148439,155],{"class":105},[99,148441,51819],{"class":109},[99,148443,148444,148447,148449],{"class":101,"line":1297},[99,148445,148446],{"class":109},"sales ",[99,148448,155],{"class":105},[99,148450,51819],{"class":109},[99,148452,148453],{"class":101,"line":1303},[99,148454,2386],{"emptyLinePlaceholder":26},[99,148456,148457,148459,148461,148463],{"class":101,"line":1315},[99,148458,3011],{"class":105},[99,148460,148190],{"class":109},[99,148462,26032],{"class":105},[99,148464,148465],{"class":109}," raw_data:\n",[99,148467,148468,148471,148473,148476,148478],{"class":101,"line":1598},[99,148469,148470],{"class":109},"    value ",[99,148472,155],{"class":105},[99,148474,148475],{"class":109}," item.get(",[99,148477,148377],{"class":214},[99,148479,116],{"class":109},[99,148481,148482,148484,148486],{"class":101,"line":1603},[99,148483,3087],{"class":105},[99,148485,38911],{"class":105},[99,148487,148488],{"class":109}," value:\n",[99,148490,148491],{"class":101,"line":1609},[99,148492,148493],{"class":105},"        continue\n",[99,148495,148496],{"class":101,"line":1614},[99,148497,2386],{"emptyLinePlaceholder":26},[99,148499,148500,148502,148504],{"class":101,"line":1628},[99,148501,148200],{"class":109},[99,148503,147978],{"class":214},[99,148505,4643],{"class":109},[99,148507,148508,148511,148513],{"class":101,"line":1633},[99,148509,148510],{"class":109},"    sales.append(",[99,148512,113],{"class":158},[99,148514,148515],{"class":109},"(value))\n",[99,148517,148518],{"class":101,"line":1639},[99,148519,2386],{"emptyLinePlaceholder":26},[99,148521,148522,148524],{"class":101,"line":1660},[99,148523,30396],{"class":158},[99,148525,148526],{"class":109},"(dates)\n",[99,148528,148529,148531],{"class":101,"line":1665},[99,148530,30396],{"class":158},[99,148532,148533],{"class":109},"(sales)\n",[41,148535,148537],{"id":148536},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[90,148539,148541],{"className":30359,"code":148540,"language":30361,"meta":21,"style":21},"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",[96,148542,148543,148557,148567,148571,148579,148600,148622,148644,148666,148688,148692,148696,148718,148739,148743,148751,148755,148759,148769,148778,148788,148804,148808,148812,148829,148845,148861,148877,148887,148891],{"__ignoreMap":21},[99,148544,148545,148547,148549,148551,148553,148555],{"class":101,"line":102},[99,148546,30718],{"class":105},[99,148548,147360],{"class":109},[99,148550,30373],{"class":105},[99,148552,147365],{"class":109},[99,148554,31364],{"class":105},[99,148556,147370],{"class":109},[99,148558,148559,148561,148563,148565],{"class":101,"line":22},[99,148560,30718],{"class":105},[99,148562,147219],{"class":109},[99,148564,30373],{"class":105},[99,148566,147224],{"class":109},[99,148568,148569],{"class":101,"line":1165},[99,148570,2386],{"emptyLinePlaceholder":26},[99,148572,148573,148575,148577],{"class":101,"line":1180},[99,148574,148446],{"class":109},[99,148576,155],{"class":105},[99,148578,55428],{"class":109},[99,148580,148581,148583,148585,148587,148590,148592,148594,148596,148598],{"class":101,"line":1186},[99,148582,148366],{"class":109},[99,148584,147978],{"class":214},[99,148586,51418],{"class":109},[99,148588,148589],{"class":214},"\"2024-10-01\"",[99,148591,12422],{"class":109},[99,148593,84065],{"class":214},[99,148595,51418],{"class":109},[99,148597,92004],{"class":158},[99,148599,4916],{"class":109},[99,148601,148602,148604,148606,148608,148611,148613,148615,148617,148620],{"class":101,"line":1200},[99,148603,148366],{"class":109},[99,148605,147978],{"class":214},[99,148607,51418],{"class":109},[99,148609,148610],{"class":214},"\"2024-10-02\"",[99,148612,12422],{"class":109},[99,148614,84065],{"class":214},[99,148616,51418],{"class":109},[99,148618,148619],{"class":158},"1800",[99,148621,4916],{"class":109},[99,148623,148624,148626,148628,148630,148633,148635,148637,148639,148642],{"class":101,"line":1206},[99,148625,148366],{"class":109},[99,148627,147978],{"class":214},[99,148629,51418],{"class":109},[99,148631,148632],{"class":214},"\"2024-10-03\"",[99,148634,12422],{"class":109},[99,148636,84065],{"class":214},[99,148638,51418],{"class":109},[99,148640,148641],{"class":158},"1500",[99,148643,4916],{"class":109},[99,148645,148646,148648,148650,148652,148655,148657,148659,148661,148664],{"class":101,"line":1297},[99,148647,148366],{"class":109},[99,148649,147978],{"class":214},[99,148651,51418],{"class":109},[99,148653,148654],{"class":214},"\"2024-10-04\"",[99,148656,12422],{"class":109},[99,148658,84065],{"class":214},[99,148660,51418],{"class":109},[99,148662,148663],{"class":158},"2100",[99,148665,4916],{"class":109},[99,148667,148668,148670,148672,148674,148677,148679,148681,148683,148686],{"class":101,"line":1303},[99,148669,148366],{"class":109},[99,148671,147978],{"class":214},[99,148673,51418],{"class":109},[99,148675,148676],{"class":214},"\"2024-10-05\"",[99,148678,12422],{"class":109},[99,148680,84065],{"class":214},[99,148682,51418],{"class":109},[99,148684,148685],{"class":158},"2600",[99,148687,4916],{"class":109},[99,148689,148690],{"class":101,"line":1315},[99,148691,33227],{"class":109},[99,148693,148694],{"class":101,"line":1598},[99,148695,2386],{"emptyLinePlaceholder":26},[99,148697,148698,148700,148702,148705,148707,148709,148711,148713,148715],{"class":101,"line":1603},[99,148699,147781],{"class":109},[99,148701,155],{"class":105},[99,148703,148704],{"class":109}," [item[",[99,148706,147978],{"class":214},[99,148708,4429],{"class":109},[99,148710,3011],{"class":105},[99,148712,148190],{"class":109},[99,148714,26032],{"class":105},[99,148716,148717],{"class":109}," sales]\n",[99,148719,148720,148723,148725,148727,148729,148731,148733,148735,148737],{"class":101,"line":1609},[99,148721,148722],{"class":109},"amounts ",[99,148724,155],{"class":105},[99,148726,148704],{"class":109},[99,148728,84065],{"class":214},[99,148730,4429],{"class":109},[99,148732,3011],{"class":105},[99,148734,148190],{"class":109},[99,148736,26032],{"class":105},[99,148738,148717],{"class":109},[99,148740,148741],{"class":101,"line":1614},[99,148742,2386],{"emptyLinePlaceholder":26},[99,148744,148745,148747,148749],{"class":101,"line":1628},[99,148746,147233],{"class":109},[99,148748,155],{"class":105},[99,148750,147238],{"class":109},[99,148752,148753],{"class":101,"line":1633},[99,148754,147822],{"class":109},[99,148756,148757],{"class":101,"line":1639},[99,148758,147630],{"class":109},[99,148760,148761,148763,148765,148767],{"class":101,"line":1660},[99,148762,147635],{"class":5203},[99,148764,155],{"class":105},[99,148766,147276],{"class":214},[99,148768,31447],{"class":109},[99,148770,148771,148773,148775],{"class":101,"line":1665},[99,148772,147646],{"class":5203},[99,148774,155],{"class":105},[99,148776,148777],{"class":109},"amounts,\n",[99,148779,148780,148782,148784,148786],{"class":101,"line":1679},[99,148781,147675],{"class":5203},[99,148783,155],{"class":105},[99,148785,31457],{"class":158},[99,148787,31447],{"class":109},[99,148789,148790,148792,148794,148796,148798,148800,148802],{"class":101,"line":1684},[99,148791,147686],{"class":5203},[99,148793,155],{"class":105},[99,148795,147691],{"class":109},[99,148797,147694],{"class":5203},[99,148799,155],{"class":105},[99,148801,31457],{"class":158},[99,148803,38028],{"class":109},[99,148805,148806],{"class":101,"line":1713},[99,148807,116],{"class":109},[99,148809,148810],{"class":101,"line":1718},[99,148811,147449],{"class":109},[99,148813,148814,148816,148818,148820,148822,148824,148827],{"class":101,"line":1735},[99,148815,147454],{"class":5203},[99,148817,155],{"class":105},[99,148819,147459],{"class":109},[99,148821,51388],{"class":5203},[99,148823,155],{"class":105},[99,148825,148826],{"class":214},"\"每日销售额\"",[99,148828,38028],{"class":109},[99,148830,148831,148833,148835,148837,148839,148841,148843],{"class":101,"line":1740},[99,148832,147473],{"class":5203},[99,148834,155],{"class":105},[99,148836,147478],{"class":109},[99,148838,79791],{"class":5203},[99,148840,155],{"class":105},[99,148842,147485],{"class":214},[99,148844,38028],{"class":109},[99,148846,148847,148849,148851,148853,148855,148857,148859],{"class":101,"line":1745},[99,148848,147492],{"class":5203},[99,148850,155],{"class":105},[99,148852,147478],{"class":109},[99,148854,79791],{"class":5203},[99,148856,155],{"class":105},[99,148858,147503],{"class":214},[99,148860,38028],{"class":109},[99,148862,148863,148865,148867,148869,148871,148873,148875],{"class":101,"line":1750},[99,148864,147510],{"class":5203},[99,148866,155],{"class":105},[99,148868,147515],{"class":109},[99,148870,147518],{"class":5203},[99,148872,155],{"class":105},[99,148874,147523],{"class":214},[99,148876,38028],{"class":109},[99,148878,148879,148882,148884],{"class":101,"line":1764},[99,148880,148881],{"class":5203},"    datazoom_opts",[99,148883,155],{"class":105},[99,148885,148886],{"class":109},"[opts.DataZoomOpts()],\n",[99,148888,148889],{"class":101,"line":1769},[99,148890,116],{"class":109},[99,148892,148893,148895,148898],{"class":101,"line":2563},[99,148894,147305],{"class":109},[99,148896,148897],{"class":214},"\"daily_sales.html\"",[99,148899,116],{"class":109},[14,148901,148902,148905],{},[96,148903,148904],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[41,148907,148909],{"id":148908},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148911,148912],{},"如果数据结构如下：",[90,148914,148916],{"className":30359,"code":148915,"language":30361,"meta":21,"style":21},"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",[96,148917,148918,148926,148934,148956,148977,148982,148989,149009,149029,149033],{"__ignoreMap":21},[99,148919,148920,148922,148924],{"class":101,"line":102},[99,148921,101639],{"class":109},[99,148923,155],{"class":105},[99,148925,15559],{"class":109},[99,148927,148928,148931],{"class":101,"line":22},[99,148929,148930],{"class":214},"    \"北京\"",[99,148932,148933],{"class":109},": [\n",[99,148935,148936,148938,148940,148942,148945,148947,148950,148952,148954],{"class":101,"line":1165},[99,148937,4903],{"class":109},[99,148939,147978],{"class":214},[99,148941,51418],{"class":109},[99,148943,148944],{"class":214},"\"2024-01-01\"",[99,148946,12422],{"class":109},[99,148948,148949],{"class":214},"\"confirm\"",[99,148951,51418],{"class":109},[99,148953,556],{"class":158},[99,148955,4916],{"class":109},[99,148957,148958,148960,148962,148964,148967,148969,148971,148973,148975],{"class":101,"line":1180},[99,148959,4903],{"class":109},[99,148961,147978],{"class":214},[99,148963,51418],{"class":109},[99,148965,148966],{"class":214},"\"2024-01-02\"",[99,148968,12422],{"class":109},[99,148970,148949],{"class":214},[99,148972,51418],{"class":109},[99,148974,608],{"class":158},[99,148976,4916],{"class":109},[99,148978,148979],{"class":101,"line":1186},[99,148980,148981],{"class":109},"    ],\n",[99,148983,148984,148987],{"class":101,"line":1200},[99,148985,148986],{"class":214},"    \"上海\"",[99,148988,148933],{"class":109},[99,148990,148991,148993,148995,148997,148999,149001,149003,149005,149007],{"class":101,"line":1206},[99,148992,4903],{"class":109},[99,148994,147978],{"class":214},[99,148996,51418],{"class":109},[99,148998,148944],{"class":214},[99,149000,12422],{"class":109},[99,149002,148949],{"class":214},[99,149004,51418],{"class":109},[99,149006,505],{"class":158},[99,149008,4916],{"class":109},[99,149010,149011,149013,149015,149017,149019,149021,149023,149025,149027],{"class":101,"line":1297},[99,149012,4903],{"class":109},[99,149014,147978],{"class":214},[99,149016,51418],{"class":109},[99,149018,148966],{"class":214},[99,149020,12422],{"class":109},[99,149022,148949],{"class":214},[99,149024,51418],{"class":109},[99,149026,633],{"class":158},[99,149028,4916],{"class":109},[99,149030,149031],{"class":101,"line":1303},[99,149032,148981],{"class":109},[99,149034,149035],{"class":101,"line":1315},[99,149036,1551],{"class":109},[14,149038,149039],{},"绘制多地区趋势：",[90,149041,149043],{"className":30359,"code":149042,"language":30361,"meta":21,"style":21},"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",[96,149044,149045,149059,149069,149073,149098,149102,149110,149114,149118,149130,149152,149165,149169,149173,149190,149206,149210],{"__ignoreMap":21},[99,149046,149047,149049,149051,149053,149055,149057],{"class":101,"line":102},[99,149048,30718],{"class":105},[99,149050,147360],{"class":109},[99,149052,30373],{"class":105},[99,149054,147365],{"class":109},[99,149056,31364],{"class":105},[99,149058,147370],{"class":109},[99,149060,149061,149063,149065,149067],{"class":101,"line":22},[99,149062,30718],{"class":105},[99,149064,147219],{"class":109},[99,149066,30373],{"class":105},[99,149068,147224],{"class":109},[99,149070,149071],{"class":101,"line":1165},[99,149072,2386],{"emptyLinePlaceholder":26},[99,149074,149075,149077,149079,149081,149083,149085,149087,149089,149091,149094,149096],{"class":101,"line":1180},[99,149076,147781],{"class":109},[99,149078,155],{"class":105},[99,149080,148704],{"class":109},[99,149082,147978],{"class":214},[99,149084,4429],{"class":109},[99,149086,3011],{"class":105},[99,149088,148190],{"class":109},[99,149090,26032],{"class":105},[99,149092,149093],{"class":109}," data[",[99,149095,69250],{"class":214},[99,149097,77508],{"class":109},[99,149099,149100],{"class":101,"line":1186},[99,149101,2386],{"emptyLinePlaceholder":26},[99,149103,149104,149106,149108],{"class":101,"line":1200},[99,149105,147233],{"class":109},[99,149107,155],{"class":105},[99,149109,147238],{"class":109},[99,149111,149112],{"class":101,"line":1206},[99,149113,147822],{"class":109},[99,149115,149116],{"class":101,"line":1297},[99,149117,2386],{"emptyLinePlaceholder":26},[99,149119,149120,149122,149125,149127],{"class":101,"line":1303},[99,149121,3011],{"class":105},[99,149123,149124],{"class":109}," city, records ",[99,149126,26032],{"class":105},[99,149128,149129],{"class":109}," data.items():\n",[99,149131,149132,149135,149137,149139,149141,149143,149145,149147,149149],{"class":101,"line":1315},[99,149133,149134],{"class":109},"    values ",[99,149136,155],{"class":105},[99,149138,148704],{"class":109},[99,149140,148949],{"class":214},[99,149142,4429],{"class":109},[99,149144,3011],{"class":105},[99,149146,148190],{"class":109},[99,149148,26032],{"class":105},[99,149150,149151],{"class":109}," records]\n",[99,149153,149154,149157,149159,149161,149163],{"class":101,"line":1598},[99,149155,149156],{"class":109},"    line.add_yaxis(city, values, ",[99,149158,147726],{"class":5203},[99,149160,155],{"class":105},[99,149162,31457],{"class":158},[99,149164,116],{"class":109},[99,149166,149167],{"class":101,"line":1603},[99,149168,2386],{"emptyLinePlaceholder":26},[99,149170,149171],{"class":101,"line":1609},[99,149172,147449],{"class":109},[99,149174,149175,149177,149179,149181,149183,149185,149188],{"class":101,"line":1614},[99,149176,147454],{"class":5203},[99,149178,155],{"class":105},[99,149180,147459],{"class":109},[99,149182,51388],{"class":5203},[99,149184,155],{"class":105},[99,149186,149187],{"class":214},"\"多地区趋势图\"",[99,149189,38028],{"class":109},[99,149191,149192,149194,149196,149198,149200,149202,149204],{"class":101,"line":1628},[99,149193,147510],{"class":5203},[99,149195,155],{"class":105},[99,149197,147515],{"class":109},[99,149199,147518],{"class":5203},[99,149201,155],{"class":105},[99,149203,147523],{"class":214},[99,149205,38028],{"class":109},[99,149207,149208],{"class":101,"line":1633},[99,149209,116],{"class":109},[99,149211,149212,149214,149217],{"class":101,"line":1639},[99,149213,147305],{"class":109},[99,149215,149216],{"class":214},"\"trend.html\"",[99,149218,116],{"class":109},[14,149220,149221],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[41,149223,149225],{"id":149224},"_1012-易错点","10.12 易错点",[53,149227,149228,149234,149240,149250,149256],{},[56,149229,149230,149233],{},[96,149231,149232],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[56,149235,149236,149239],{},[96,149237,149238],{},"render()"," 生成的是 HTML，不是图片。",[56,149241,149242,149243,149246,149247,28366],{},"JSON 字符串用 ",[96,149244,149245],{},"json.loads()","，JSON 文件用 ",[96,149248,149249],{},"json.load()",[56,149251,149252,149253,28366],{},"中文 JSON 保存时加 ",[96,149254,149255],{},"ensure_ascii=False",[56,149257,149258],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[41,149260,149262],{"id":149261},"_1013-本章练习","10.13 本章练习",[53,149264,149265,149268,149271,149274,149277],{},[56,149266,149267],{},"安装 pyecharts 并生成第一个折线图。",[56,149269,149270],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[56,149272,149273],{},"绘制两条折线，对比线上和线下销售额。",[56,149275,149276],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[56,149278,149279],{},"对含有空值的销售数据进行清洗后再绘图。",[5113,149281,149282],{},"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":21,"searchDepth":22,"depth":22,"links":149284},[149285,149286,149287,149288,149289,149290,149291,149292,149293,149294,149295,149296,149297],{"id":146901,"depth":22,"text":146902},{"id":146976,"depth":22,"text":146977},{"id":147155,"depth":22,"text":147156},{"id":147206,"depth":22,"text":147207},{"id":147340,"depth":22,"text":147341},{"id":147616,"depth":22,"text":147617},{"id":147742,"depth":22,"text":147743},{"id":147953,"depth":22,"text":147954},{"id":148324,"depth":22,"text":148325},{"id":148536,"depth":22,"text":148537},{"id":148908,"depth":22,"text":148909},{"id":149224,"depth":22,"text":149225},{"id":149261,"depth":22,"text":149262},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146893,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149304,"title":149305,"body":149306,"description":23364,"extension":24,"meta":151666,"navigation":26,"path":151667,"seo":151668,"stem":151669,"__hash__":151670},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149307,"toc":151643},[149308,149311,149315,149318,149321,149397,149400,149491,149494,149498,149501,149545,149558,149562,149565,149632,149635,149639,149642,149726,149734,149738,149743,149884,149887,149898,149904,149910,150024,150028,150031,150034,150287,150290,150294,150297,150401,150404,150408,150559,150563,150570,150683,150687,150690,150796,150799,150803,150806,150837,150840,150945,150948,150952,150956,150966,151034,151038,151045,151109,151112,151116,151122,151218,151227,151231,151555,151564,151568,151596,151600,151640],[10,149309,149305],{"id":149310},"_11-面向对象基础",[41,149312,149314],{"id":149313},"_111-什么是面向对象","11.1 什么是面向对象",[14,149316,149317],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149319,149320],{},"面向过程：",[90,149322,149324],{"className":30359,"code":149323,"language":30361,"meta":21,"style":21},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[96,149325,149326,149335,149343,149347,149357,149388,149392],{"__ignoreMap":21},[99,149327,149328,149330,149332],{"class":101,"line":102},[99,149329,146517],{"class":109},[99,149331,155],{"class":105},[99,149333,149334],{"class":214}," \"小明\"\n",[99,149336,149337,149339,149341],{"class":101,"line":22},[99,149338,146527],{"class":109},[99,149340,155],{"class":105},[99,149342,146532],{"class":158},[99,149344,149345],{"class":101,"line":1165},[99,149346,2386],{"emptyLinePlaceholder":26},[99,149348,149349,149351,149354],{"class":101,"line":1180},[99,149350,31928],{"class":105},[99,149352,149353],{"class":1949}," introduce",[99,149355,149356],{"class":109},"(name, age):\n",[99,149358,149359,149361,149363,149365,149368,149370,149372,149374,149377,149379,149381,149383,149386],{"class":101,"line":1186},[99,149360,31280],{"class":158},[99,149362,110],{"class":109},[99,149364,162],{"class":105},[99,149366,149367],{"class":214},"\"我叫",[99,149369,1006],{"class":158},[99,149371,79791],{"class":109},[99,149373,1056],{"class":158},[99,149375,149376],{"class":214},"，今年",[99,149378,1006],{"class":158},[99,149380,70202],{"class":109},[99,149382,1056],{"class":158},[99,149384,149385],{"class":214},"岁\"",[99,149387,116],{"class":109},[99,149389,149390],{"class":101,"line":1200},[99,149391,2386],{"emptyLinePlaceholder":26},[99,149393,149394],{"class":101,"line":1206},[99,149395,149396],{"class":109},"introduce(name, age)\n",[14,149398,149399],{},"面向对象：",[90,149401,149403],{"className":30359,"code":149402,"language":30361,"meta":21,"style":21},"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",[96,149404,149405,149413,149421,149450,149454,149458,149468,149477,149486],{"__ignoreMap":21},[99,149406,149407,149409,149411],{"class":101,"line":102},[99,149408,14681],{"class":105},[99,149410,7885],{"class":1949},[99,149412,3725],{"class":109},[99,149414,149415,149417,149419],{"class":101,"line":22},[99,149416,30782],{"class":105},[99,149418,149353],{"class":1949},[99,149420,30788],{"class":109},[99,149422,149423,149425,149427,149429,149431,149434,149436,149438,149440,149442,149444,149446,149448],{"class":101,"line":1165},[99,149424,32432],{"class":158},[99,149426,110],{"class":109},[99,149428,162],{"class":105},[99,149430,149367],{"class":214},[99,149432,149433],{"class":158},"{self",[99,149435,80282],{"class":109},[99,149437,1056],{"class":158},[99,149439,149376],{"class":214},[99,149441,149433],{"class":158},[99,149443,80294],{"class":109},[99,149445,1056],{"class":158},[99,149447,149385],{"class":214},[99,149449,116],{"class":109},[99,149451,149452],{"class":101,"line":1180},[99,149453,2386],{"emptyLinePlaceholder":26},[99,149455,149456],{"class":101,"line":1186},[99,149457,2386],{"emptyLinePlaceholder":26},[99,149459,149460,149463,149465],{"class":101,"line":1200},[99,149461,149462],{"class":109},"student ",[99,149464,155],{"class":105},[99,149466,149467],{"class":109}," Student()\n",[99,149469,149470,149473,149475],{"class":101,"line":1206},[99,149471,149472],{"class":109},"student.name ",[99,149474,155],{"class":105},[99,149476,149334],{"class":214},[99,149478,149479,149482,149484],{"class":101,"line":1297},[99,149480,149481],{"class":109},"student.age ",[99,149483,155],{"class":105},[99,149485,146532],{"class":158},[99,149487,149488],{"class":101,"line":1303},[99,149489,149490],{"class":109},"student.introduce()\n",[14,149492,149493],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[41,149495,149497],{"id":149496},"_112-类和对象","11.2 类和对象",[14,149499,149500],{},"类是模板，对象是根据模板创建出来的具体实例。",[90,149502,149504],{"className":30359,"code":149503,"language":30361,"meta":21,"style":21},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[96,149505,149506,149514,149519,149523,149527,149536],{"__ignoreMap":21},[99,149507,149508,149510,149512],{"class":101,"line":102},[99,149509,14681],{"class":105},[99,149511,7885],{"class":1949},[99,149513,3725],{"class":109},[99,149515,149516],{"class":101,"line":22},[99,149517,149518],{"class":105},"    pass\n",[99,149520,149521],{"class":101,"line":1165},[99,149522,2386],{"emptyLinePlaceholder":26},[99,149524,149525],{"class":101,"line":1180},[99,149526,2386],{"emptyLinePlaceholder":26},[99,149528,149529,149532,149534],{"class":101,"line":1186},[99,149530,149531],{"class":109},"student1 ",[99,149533,155],{"class":105},[99,149535,149467],{"class":109},[99,149537,149538,149541,149543],{"class":101,"line":1200},[99,149539,149540],{"class":109},"student2 ",[99,149542,155],{"class":105},[99,149544,149467],{"class":109},[14,149546,149547,149550,149551,100999,149554,149557],{},[96,149548,149549],{},"Student"," 是类，",[96,149552,149553],{},"student1",[96,149555,149556],{},"student2"," 是对象。",[41,149559,149561],{"id":149560},"_113-属性","11.3 属性",[14,149563,149564],{},"属性是对象保存的数据。",[90,149566,149568],{"className":30359,"code":149567,"language":30361,"meta":21,"style":21},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[96,149569,149570,149578,149582,149586,149590,149598,149606,149614,149618,149625],{"__ignoreMap":21},[99,149571,149572,149574,149576],{"class":101,"line":102},[99,149573,14681],{"class":105},[99,149575,7885],{"class":1949},[99,149577,3725],{"class":109},[99,149579,149580],{"class":101,"line":22},[99,149581,149518],{"class":105},[99,149583,149584],{"class":101,"line":1165},[99,149585,2386],{"emptyLinePlaceholder":26},[99,149587,149588],{"class":101,"line":1180},[99,149589,2386],{"emptyLinePlaceholder":26},[99,149591,149592,149594,149596],{"class":101,"line":1186},[99,149593,149462],{"class":109},[99,149595,155],{"class":105},[99,149597,149467],{"class":109},[99,149599,149600,149602,149604],{"class":101,"line":1200},[99,149601,149472],{"class":109},[99,149603,155],{"class":105},[99,149605,149334],{"class":214},[99,149607,149608,149610,149612],{"class":101,"line":1206},[99,149609,149481],{"class":109},[99,149611,155],{"class":105},[99,149613,146532],{"class":158},[99,149615,149616],{"class":101,"line":1297},[99,149617,2386],{"emptyLinePlaceholder":26},[99,149619,149620,149622],{"class":101,"line":1303},[99,149621,30396],{"class":158},[99,149623,149624],{"class":109},"(student.name)\n",[99,149626,149627,149629],{"class":101,"line":1315},[99,149628,30396],{"class":158},[99,149630,149631],{"class":109},"(student.age)\n",[14,149633,149634],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[41,149636,149638],{"id":149637},"_114-方法","11.4 方法",[14,149640,149641],{},"类中的函数叫方法。",[90,149643,149644],{"className":30359,"code":149402,"language":30361,"meta":21,"style":21},[96,149645,149646,149654,149662,149690,149694,149698,149706,149714,149722],{"__ignoreMap":21},[99,149647,149648,149650,149652],{"class":101,"line":102},[99,149649,14681],{"class":105},[99,149651,7885],{"class":1949},[99,149653,3725],{"class":109},[99,149655,149656,149658,149660],{"class":101,"line":22},[99,149657,30782],{"class":105},[99,149659,149353],{"class":1949},[99,149661,30788],{"class":109},[99,149663,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682,149684,149686,149688],{"class":101,"line":1165},[99,149665,32432],{"class":158},[99,149667,110],{"class":109},[99,149669,162],{"class":105},[99,149671,149367],{"class":214},[99,149673,149433],{"class":158},[99,149675,80282],{"class":109},[99,149677,1056],{"class":158},[99,149679,149376],{"class":214},[99,149681,149433],{"class":158},[99,149683,80294],{"class":109},[99,149685,1056],{"class":158},[99,149687,149385],{"class":214},[99,149689,116],{"class":109},[99,149691,149692],{"class":101,"line":1180},[99,149693,2386],{"emptyLinePlaceholder":26},[99,149695,149696],{"class":101,"line":1186},[99,149697,2386],{"emptyLinePlaceholder":26},[99,149699,149700,149702,149704],{"class":101,"line":1200},[99,149701,149462],{"class":109},[99,149703,155],{"class":105},[99,149705,149467],{"class":109},[99,149707,149708,149710,149712],{"class":101,"line":1206},[99,149709,149472],{"class":109},[99,149711,155],{"class":105},[99,149713,149334],{"class":214},[99,149715,149716,149718,149720],{"class":101,"line":1297},[99,149717,149481],{"class":109},[99,149719,155],{"class":105},[99,149721,146532],{"class":158},[99,149723,149724],{"class":101,"line":1303},[99,149725,149490],{"class":109},[14,149727,149728,149730,149731,149733],{},[96,149729,30804],{}," 表示当前对象。调用方法时不需要手动传入 ",[96,149732,30804],{},"，Python 会自动传。",[41,149735,149737],{"id":149736},"_115-构造方法__init__","11.5 构造方法__init__",[14,149739,149740,149742],{},[96,149741,30810],{}," 在对象创建时自动执行，用于初始化属性。",[90,149744,149746],{"className":30359,"code":149745,"language":30361,"meta":21,"style":21},"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",[96,149747,149748,149756,149765,149777,149789,149800,149804,149812,149850,149854,149858,149880],{"__ignoreMap":21},[99,149749,149750,149752,149754],{"class":101,"line":102},[99,149751,14681],{"class":105},[99,149753,7885],{"class":1949},[99,149755,3725],{"class":109},[99,149757,149758,149760,149762],{"class":101,"line":22},[99,149759,30782],{"class":105},[99,149761,30785],{"class":158},[99,149763,149764],{"class":109},"(self, name, age, score):\n",[99,149766,149767,149769,149772,149774],{"class":101,"line":1165},[99,149768,30826],{"class":158},[99,149770,149771],{"class":109},".name ",[99,149773,155],{"class":105},[99,149775,149776],{"class":109}," name\n",[99,149778,149779,149781,149784,149786],{"class":101,"line":1180},[99,149780,30826],{"class":158},[99,149782,149783],{"class":109},".age ",[99,149785,155],{"class":105},[99,149787,149788],{"class":109}," age\n",[99,149790,149791,149793,149796,149798],{"class":101,"line":1186},[99,149792,30826],{"class":158},[99,149794,149795],{"class":109},".score ",[99,149797,155],{"class":105},[99,149799,1565],{"class":109},[99,149801,149802],{"class":101,"line":1200},[99,149803,2386],{"emptyLinePlaceholder":26},[99,149805,149806,149808,149810],{"class":101,"line":1206},[99,149807,30782],{"class":105},[99,149809,149353],{"class":1949},[99,149811,30788],{"class":109},[99,149813,149814,149816,149818,149820,149822,149824,149826,149828,149830,149832,149834,149836,149839,149841,149844,149846,149848],{"class":101,"line":1297},[99,149815,32432],{"class":158},[99,149817,110],{"class":109},[99,149819,162],{"class":105},[99,149821,149367],{"class":214},[99,149823,149433],{"class":158},[99,149825,80282],{"class":109},[99,149827,1056],{"class":158},[99,149829,149376],{"class":214},[99,149831,149433],{"class":158},[99,149833,80294],{"class":109},[99,149835,1056],{"class":158},[99,149837,149838],{"class":214},"岁，成绩",[99,149840,149433],{"class":158},[99,149842,149843],{"class":109},".score",[99,149845,1056],{"class":158},[99,149847,361],{"class":214},[99,149849,116],{"class":109},[99,149851,149852],{"class":101,"line":1303},[99,149853,2386],{"emptyLinePlaceholder":26},[99,149855,149856],{"class":101,"line":1315},[99,149857,2386],{"emptyLinePlaceholder":26},[99,149859,149860,149862,149864,149867,149870,149872,149874,149876,149878],{"class":101,"line":1598},[99,149861,149462],{"class":109},[99,149863,155],{"class":105},[99,149865,149866],{"class":109}," Student(",[99,149868,149869],{"class":214},"\"小明\"",[99,149871,12422],{"class":109},[99,149873,760],{"class":158},[99,149875,12422],{"class":109},[99,149877,1099],{"class":158},[99,149879,116],{"class":109},[99,149881,149882],{"class":101,"line":1603},[99,149883,149490],{"class":109},[14,149885,149886],{},"构造方法的好处：",[53,149888,149889,149892,149895],{},[56,149890,149891],{},"创建对象时必须提供必要数据。",[56,149893,149894],{},"属性初始化集中，不容易漏。",[56,149896,149897],{},"对象状态更完整。",[41,149899,149901,149902],{"id":149900},"_116-str","11.6 ",[259,149903,1285],{},[14,149905,149906,149907,28366],{},"直接打印对象时，默认输出不直观。可以定义 ",[96,149908,149909],{},"__str__",[90,149911,149913],{"className":30359,"code":149912,"language":30361,"meta":21,"style":21},"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",[96,149914,149915,149923,149932,149942,149952,149956,149965,149993,149997,150001,150017],{"__ignoreMap":21},[99,149916,149917,149919,149921],{"class":101,"line":102},[99,149918,14681],{"class":105},[99,149920,7885],{"class":1949},[99,149922,3725],{"class":109},[99,149924,149925,149927,149929],{"class":101,"line":22},[99,149926,30782],{"class":105},[99,149928,30785],{"class":158},[99,149930,149931],{"class":109},"(self, name, age):\n",[99,149933,149934,149936,149938,149940],{"class":101,"line":1165},[99,149935,30826],{"class":158},[99,149937,149771],{"class":109},[99,149939,155],{"class":105},[99,149941,149776],{"class":109},[99,149943,149944,149946,149948,149950],{"class":101,"line":1180},[99,149945,30826],{"class":158},[99,149947,149783],{"class":109},[99,149949,155],{"class":105},[99,149951,149788],{"class":109},[99,149953,149954],{"class":101,"line":1186},[99,149955,2386],{"emptyLinePlaceholder":26},[99,149957,149958,149960,149963],{"class":101,"line":1200},[99,149959,30782],{"class":105},[99,149961,149962],{"class":158}," __str__",[99,149964,30788],{"class":109},[99,149966,149967,149969,149972,149975,149977,149979,149981,149984,149986,149988,149990],{"class":101,"line":1206},[99,149968,14739],{"class":105},[99,149970,149971],{"class":105}," f",[99,149973,149974],{"class":214},"\"Student(name=",[99,149976,149433],{"class":158},[99,149978,80282],{"class":109},[99,149980,1056],{"class":158},[99,149982,149983],{"class":214},", age=",[99,149985,149433],{"class":158},[99,149987,80294],{"class":109},[99,149989,1056],{"class":158},[99,149991,149992],{"class":214},")\"\n",[99,149994,149995],{"class":101,"line":1297},[99,149996,2386],{"emptyLinePlaceholder":26},[99,149998,149999],{"class":101,"line":1303},[99,150000,2386],{"emptyLinePlaceholder":26},[99,150002,150003,150005,150007,150009,150011,150013,150015],{"class":101,"line":1315},[99,150004,149462],{"class":109},[99,150006,155],{"class":105},[99,150008,149866],{"class":109},[99,150010,149869],{"class":214},[99,150012,12422],{"class":109},[99,150014,760],{"class":158},[99,150016,116],{"class":109},[99,150018,150019,150021],{"class":101,"line":1598},[99,150020,30396],{"class":158},[99,150022,150023],{"class":109},"(student)\n",[41,150025,150027],{"id":150026},"_117-封装","11.7 封装",[14,150029,150030],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150032,150033],{},"Python 中以双下划线开头的属性通常视为私有属性。",[90,150035,150037],{"className":30359,"code":150036,"language":30361,"meta":21,"style":21},"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",[96,150038,150039,150048,150057,150069,150081,150085,150094,150103,150107,150117,150130,150141,150146,150157,150161,150170,150182,150193,150197,150210,150221,150225,150236,150240,150244,150262,150271,150280],{"__ignoreMap":21},[99,150040,150041,150043,150046],{"class":101,"line":102},[99,150042,14681],{"class":105},[99,150044,150045],{"class":1949}," Account",[99,150047,3725],{"class":109},[99,150049,150050,150052,150054],{"class":101,"line":22},[99,150051,30782],{"class":105},[99,150053,30785],{"class":158},[99,150055,150056],{"class":109},"(self, owner, balance):\n",[99,150058,150059,150061,150064,150066],{"class":101,"line":1165},[99,150060,30826],{"class":158},[99,150062,150063],{"class":109},".owner ",[99,150065,155],{"class":105},[99,150067,150068],{"class":109}," owner\n",[99,150070,150071,150073,150076,150078],{"class":101,"line":1180},[99,150072,30826],{"class":158},[99,150074,150075],{"class":109},".__balance ",[99,150077,155],{"class":105},[99,150079,150080],{"class":109}," balance\n",[99,150082,150083],{"class":101,"line":1186},[99,150084,2386],{"emptyLinePlaceholder":26},[99,150086,150087,150089,150092],{"class":101,"line":1200},[99,150088,30782],{"class":105},[99,150090,150091],{"class":1949}," get_balance",[99,150093,30788],{"class":109},[99,150095,150096,150098,150100],{"class":101,"line":1206},[99,150097,14739],{"class":105},[99,150099,38854],{"class":158},[99,150101,150102],{"class":109},".__balance\n",[99,150104,150105],{"class":101,"line":1297},[99,150106,2386],{"emptyLinePlaceholder":26},[99,150108,150109,150111,150114],{"class":101,"line":1303},[99,150110,30782],{"class":105},[99,150112,150113],{"class":1949}," deposit",[99,150115,150116],{"class":109},"(self, money):\n",[99,150118,150119,150121,150124,150126,150128],{"class":101,"line":1315},[99,150120,2483],{"class":105},[99,150122,150123],{"class":109}," money ",[99,150125,1574],{"class":105},[99,150127,4079],{"class":158},[99,150129,3725],{"class":109},[99,150131,150132,150134,150136,150139],{"class":101,"line":1598},[99,150133,34631],{"class":158},[99,150135,110],{"class":109},[99,150137,150138],{"class":214},"\"存款金额必须大于0\"",[99,150140,116],{"class":109},[99,150142,150143],{"class":101,"line":1603},[99,150144,150145],{"class":105},"            return\n",[99,150147,150148,150150,150152,150154],{"class":101,"line":1609},[99,150149,30826],{"class":158},[99,150151,150075],{"class":109},[99,150153,9464],{"class":105},[99,150155,150156],{"class":109}," money\n",[99,150158,150159],{"class":101,"line":1614},[99,150160,2386],{"emptyLinePlaceholder":26},[99,150162,150163,150165,150168],{"class":101,"line":1628},[99,150164,30782],{"class":105},[99,150166,150167],{"class":1949}," withdraw",[99,150169,150116],{"class":109},[99,150171,150172,150174,150176,150178,150180],{"class":101,"line":1633},[99,150173,2483],{"class":105},[99,150175,150123],{"class":109},[99,150177,1574],{"class":105},[99,150179,4079],{"class":158},[99,150181,3725],{"class":109},[99,150183,150184,150186,150188,150191],{"class":101,"line":1639},[99,150185,34631],{"class":158},[99,150187,110],{"class":109},[99,150189,150190],{"class":214},"\"取款金额必须大于0\"",[99,150192,116],{"class":109},[99,150194,150195],{"class":101,"line":1660},[99,150196,150145],{"class":105},[99,150198,150199,150201,150203,150205,150207],{"class":101,"line":1665},[99,150200,2483],{"class":105},[99,150202,150123],{"class":109},[99,150204,1070],{"class":105},[99,150206,38854],{"class":158},[99,150208,150209],{"class":109},".__balance:\n",[99,150211,150212,150214,150216,150219],{"class":101,"line":1679},[99,150213,34631],{"class":158},[99,150215,110],{"class":109},[99,150217,150218],{"class":214},"\"余额不足\"",[99,150220,116],{"class":109},[99,150222,150223],{"class":101,"line":1684},[99,150224,150145],{"class":105},[99,150226,150227,150229,150231,150234],{"class":101,"line":1713},[99,150228,30826],{"class":158},[99,150230,150075],{"class":109},[99,150232,150233],{"class":105},"-=",[99,150235,150156],{"class":109},[99,150237,150238],{"class":101,"line":1718},[99,150239,2386],{"emptyLinePlaceholder":26},[99,150241,150242],{"class":101,"line":1735},[99,150243,2386],{"emptyLinePlaceholder":26},[99,150245,150246,150249,150251,150254,150256,150258,150260],{"class":101,"line":1740},[99,150247,150248],{"class":109},"account ",[99,150250,155],{"class":105},[99,150252,150253],{"class":109}," Account(",[99,150255,149869],{"class":214},[99,150257,12422],{"class":109},[99,150259,6397],{"class":158},[99,150261,116],{"class":109},[99,150263,150264,150267,150269],{"class":101,"line":1745},[99,150265,150266],{"class":109},"account.deposit(",[99,150268,1708],{"class":158},[99,150270,116],{"class":109},[99,150272,150273,150276,150278],{"class":101,"line":1750},[99,150274,150275],{"class":109},"account.withdraw(",[99,150277,421],{"class":158},[99,150279,116],{"class":109},[99,150281,150282,150284],{"class":101,"line":1764},[99,150283,30396],{"class":158},[99,150285,150286],{"class":109},"(account.get_balance())\n",[14,150288,150289],{},"封装的意义是避免外部随意修改内部状态。",[41,150291,150293],{"id":150292},"_118-继承","11.8 继承",[14,150295,150296],{},"继承可以让子类复用父类的属性和方法。",[90,150298,150300],{"className":30359,"code":150299,"language":30361,"meta":21,"style":21},"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",[96,150301,150302,150311,150320,150331,150335,150339,150353,150362,150373,150377,150381,150391,150396],{"__ignoreMap":21},[99,150303,150304,150306,150309],{"class":101,"line":102},[99,150305,14681],{"class":105},[99,150307,150308],{"class":1949}," Animal",[99,150310,3725],{"class":109},[99,150312,150313,150315,150318],{"class":101,"line":22},[99,150314,30782],{"class":105},[99,150316,150317],{"class":1949}," eat",[99,150319,30788],{"class":109},[99,150321,150322,150324,150326,150329],{"class":101,"line":1165},[99,150323,32432],{"class":158},[99,150325,110],{"class":109},[99,150327,150328],{"class":214},"\"吃东西\"",[99,150330,116],{"class":109},[99,150332,150333],{"class":101,"line":1180},[99,150334,2386],{"emptyLinePlaceholder":26},[99,150336,150337],{"class":101,"line":1186},[99,150338,2386],{"emptyLinePlaceholder":26},[99,150340,150341,150343,150346,150348,150351],{"class":101,"line":1200},[99,150342,14681],{"class":105},[99,150344,150345],{"class":1949}," Dog",[99,150347,110],{"class":109},[99,150349,150350],{"class":1949},"Animal",[99,150352,30767],{"class":109},[99,150354,150355,150357,150360],{"class":101,"line":1206},[99,150356,30782],{"class":105},[99,150358,150359],{"class":1949}," bark",[99,150361,30788],{"class":109},[99,150363,150364,150366,150368,150371],{"class":101,"line":1297},[99,150365,32432],{"class":158},[99,150367,110],{"class":109},[99,150369,150370],{"class":214},"\"汪汪\"",[99,150372,116],{"class":109},[99,150374,150375],{"class":101,"line":1303},[99,150376,2386],{"emptyLinePlaceholder":26},[99,150378,150379],{"class":101,"line":1315},[99,150380,2386],{"emptyLinePlaceholder":26},[99,150382,150383,150386,150388],{"class":101,"line":1598},[99,150384,150385],{"class":109},"dog ",[99,150387,155],{"class":105},[99,150389,150390],{"class":109}," Dog()\n",[99,150392,150393],{"class":101,"line":1603},[99,150394,150395],{"class":109},"dog.eat()\n",[99,150397,150398],{"class":101,"line":1609},[99,150399,150400],{"class":109},"dog.bark()\n",[14,150402,150403],{},"子类可以扩展新方法，也可以重写父类方法。",[41,150405,150407],{"id":150406},"_119-方法重写","11.9 方法重写",[90,150409,150411],{"className":30359,"code":150410,"language":30361,"meta":21,"style":21},"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",[96,150412,150413,150421,150430,150441,150445,150449,150461,150469,150479,150483,150487,150500,150508,150519,150523,150527,150535,150545,150549,150554],{"__ignoreMap":21},[99,150414,150415,150417,150419],{"class":101,"line":102},[99,150416,14681],{"class":105},[99,150418,150308],{"class":1949},[99,150420,3725],{"class":109},[99,150422,150423,150425,150428],{"class":101,"line":22},[99,150424,30782],{"class":105},[99,150426,150427],{"class":1949}," speak",[99,150429,30788],{"class":109},[99,150431,150432,150434,150436,150439],{"class":101,"line":1165},[99,150433,32432],{"class":158},[99,150435,110],{"class":109},[99,150437,150438],{"class":214},"\"动物叫\"",[99,150440,116],{"class":109},[99,150442,150443],{"class":101,"line":1180},[99,150444,2386],{"emptyLinePlaceholder":26},[99,150446,150447],{"class":101,"line":1186},[99,150448,2386],{"emptyLinePlaceholder":26},[99,150450,150451,150453,150455,150457,150459],{"class":101,"line":1200},[99,150452,14681],{"class":105},[99,150454,150345],{"class":1949},[99,150456,110],{"class":109},[99,150458,150350],{"class":1949},[99,150460,30767],{"class":109},[99,150462,150463,150465,150467],{"class":101,"line":1206},[99,150464,30782],{"class":105},[99,150466,150427],{"class":1949},[99,150468,30788],{"class":109},[99,150470,150471,150473,150475,150477],{"class":101,"line":1297},[99,150472,32432],{"class":158},[99,150474,110],{"class":109},[99,150476,150370],{"class":214},[99,150478,116],{"class":109},[99,150480,150481],{"class":101,"line":1303},[99,150482,2386],{"emptyLinePlaceholder":26},[99,150484,150485],{"class":101,"line":1315},[99,150486,2386],{"emptyLinePlaceholder":26},[99,150488,150489,150491,150494,150496,150498],{"class":101,"line":1598},[99,150490,14681],{"class":105},[99,150492,150493],{"class":1949}," Cat",[99,150495,110],{"class":109},[99,150497,150350],{"class":1949},[99,150499,30767],{"class":109},[99,150501,150502,150504,150506],{"class":101,"line":1603},[99,150503,30782],{"class":105},[99,150505,150427],{"class":1949},[99,150507,30788],{"class":109},[99,150509,150510,150512,150514,150517],{"class":101,"line":1609},[99,150511,32432],{"class":158},[99,150513,110],{"class":109},[99,150515,150516],{"class":214},"\"喵喵\"",[99,150518,116],{"class":109},[99,150520,150521],{"class":101,"line":1614},[99,150522,2386],{"emptyLinePlaceholder":26},[99,150524,150525],{"class":101,"line":1628},[99,150526,2386],{"emptyLinePlaceholder":26},[99,150528,150529,150531,150533],{"class":101,"line":1633},[99,150530,150385],{"class":109},[99,150532,155],{"class":105},[99,150534,150390],{"class":109},[99,150536,150537,150540,150542],{"class":101,"line":1639},[99,150538,150539],{"class":109},"cat ",[99,150541,155],{"class":105},[99,150543,150544],{"class":109}," Cat()\n",[99,150546,150547],{"class":101,"line":1660},[99,150548,2386],{"emptyLinePlaceholder":26},[99,150550,150551],{"class":101,"line":1665},[99,150552,150553],{"class":109},"dog.speak()\n",[99,150555,150556],{"class":101,"line":1679},[99,150557,150558],{"class":109},"cat.speak()\n",[41,150560,150562],{"id":150561},"_1110-super","11.10 super",[14,150564,150565,150566,150569],{},"子类可以通过 ",[96,150567,150568],{},"super()"," 调用父类方法。",[90,150571,150573],{"className":30359,"code":150572,"language":30361,"meta":21,"style":21},"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",[96,150574,150575,150583,150592,150602,150606,150610,150622,150631,150642,150652,150656,150660,150676],{"__ignoreMap":21},[99,150576,150577,150579,150581],{"class":101,"line":102},[99,150578,14681],{"class":105},[99,150580,15556],{"class":1949},[99,150582,3725],{"class":109},[99,150584,150585,150587,150589],{"class":101,"line":22},[99,150586,30782],{"class":105},[99,150588,30785],{"class":158},[99,150590,150591],{"class":109},"(self, name):\n",[99,150593,150594,150596,150598,150600],{"class":101,"line":1165},[99,150595,30826],{"class":158},[99,150597,149771],{"class":109},[99,150599,155],{"class":105},[99,150601,149776],{"class":109},[99,150603,150604],{"class":101,"line":1180},[99,150605,2386],{"emptyLinePlaceholder":26},[99,150607,150608],{"class":101,"line":1186},[99,150609,2386],{"emptyLinePlaceholder":26},[99,150611,150612,150614,150616,150618,150620],{"class":101,"line":1200},[99,150613,14681],{"class":105},[99,150615,7885],{"class":1949},[99,150617,110],{"class":109},[99,150619,19033],{"class":1949},[99,150621,30767],{"class":109},[99,150623,150624,150626,150628],{"class":101,"line":1206},[99,150625,30782],{"class":105},[99,150627,30785],{"class":158},[99,150629,150630],{"class":109},"(self, name, score):\n",[99,150632,150633,150635,150637,150639],{"class":101,"line":1297},[99,150634,30798],{"class":158},[99,150636,17248],{"class":109},[99,150638,30810],{"class":158},[99,150640,150641],{"class":109},"(name)\n",[99,150643,150644,150646,150648,150650],{"class":101,"line":1303},[99,150645,30826],{"class":158},[99,150647,149795],{"class":109},[99,150649,155],{"class":105},[99,150651,1565],{"class":109},[99,150653,150654],{"class":101,"line":1315},[99,150655,2386],{"emptyLinePlaceholder":26},[99,150657,150658],{"class":101,"line":1598},[99,150659,2386],{"emptyLinePlaceholder":26},[99,150661,150662,150664,150666,150668,150670,150672,150674],{"class":101,"line":1603},[99,150663,149462],{"class":109},[99,150665,155],{"class":105},[99,150667,149866],{"class":109},[99,150669,149869],{"class":214},[99,150671,12422],{"class":109},[99,150673,1099],{"class":158},[99,150675,116],{"class":109},[99,150677,150678,150680],{"class":101,"line":1609},[99,150679,30396],{"class":158},[99,150681,150682],{"class":109},"(student.name, student.score)\n",[41,150684,150686],{"id":150685},"_1111-多态","11.11 多态",[14,150688,150689],{},"多态指不同对象响应同一个方法，表现出不同结果。",[90,150691,150693],{"className":30359,"code":150692,"language":30361,"meta":21,"style":21},"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",[96,150694,150695,150703,150711,150721,150725,150729,150737,150745,150755,150759,150763,150773,150778,150782,150786,150791],{"__ignoreMap":21},[99,150696,150697,150699,150701],{"class":101,"line":102},[99,150698,14681],{"class":105},[99,150700,150345],{"class":1949},[99,150702,3725],{"class":109},[99,150704,150705,150707,150709],{"class":101,"line":22},[99,150706,30782],{"class":105},[99,150708,150427],{"class":1949},[99,150710,30788],{"class":109},[99,150712,150713,150715,150717,150719],{"class":101,"line":1165},[99,150714,32432],{"class":158},[99,150716,110],{"class":109},[99,150718,150370],{"class":214},[99,150720,116],{"class":109},[99,150722,150723],{"class":101,"line":1180},[99,150724,2386],{"emptyLinePlaceholder":26},[99,150726,150727],{"class":101,"line":1186},[99,150728,2386],{"emptyLinePlaceholder":26},[99,150730,150731,150733,150735],{"class":101,"line":1200},[99,150732,14681],{"class":105},[99,150734,150493],{"class":1949},[99,150736,3725],{"class":109},[99,150738,150739,150741,150743],{"class":101,"line":1206},[99,150740,30782],{"class":105},[99,150742,150427],{"class":1949},[99,150744,30788],{"class":109},[99,150746,150747,150749,150751,150753],{"class":101,"line":1297},[99,150748,32432],{"class":158},[99,150750,110],{"class":109},[99,150752,150516],{"class":214},[99,150754,116],{"class":109},[99,150756,150757],{"class":101,"line":1303},[99,150758,2386],{"emptyLinePlaceholder":26},[99,150760,150761],{"class":101,"line":1315},[99,150762,2386],{"emptyLinePlaceholder":26},[99,150764,150765,150767,150770],{"class":101,"line":1598},[99,150766,31928],{"class":105},[99,150768,150769],{"class":1949}," make_sound",[99,150771,150772],{"class":109},"(animal):\n",[99,150774,150775],{"class":101,"line":1603},[99,150776,150777],{"class":109},"    animal.speak()\n",[99,150779,150780],{"class":101,"line":1609},[99,150781,2386],{"emptyLinePlaceholder":26},[99,150783,150784],{"class":101,"line":1614},[99,150785,2386],{"emptyLinePlaceholder":26},[99,150787,150788],{"class":101,"line":1628},[99,150789,150790],{"class":109},"make_sound(Dog())\n",[99,150792,150793],{"class":101,"line":1633},[99,150794,150795],{"class":109},"make_sound(Cat())\n",[14,150797,150798],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[41,150800,150802],{"id":150801},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150804,150805],{},"实例属性属于对象：",[90,150807,150809],{"className":30359,"code":150808,"language":30361,"meta":21,"style":21},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[96,150810,150811,150819,150827],{"__ignoreMap":21},[99,150812,150813,150815,150817],{"class":101,"line":102},[99,150814,14681],{"class":105},[99,150816,7885],{"class":1949},[99,150818,3725],{"class":109},[99,150820,150821,150823,150825],{"class":101,"line":22},[99,150822,30782],{"class":105},[99,150824,30785],{"class":158},[99,150826,150591],{"class":109},[99,150828,150829,150831,150833,150835],{"class":101,"line":1165},[99,150830,30826],{"class":158},[99,150832,149771],{"class":109},[99,150834,155],{"class":105},[99,150836,149776],{"class":109},[14,150838,150839],{},"类属性属于类，所有对象共享：",[90,150841,150843],{"className":30359,"code":150842,"language":30361,"meta":21,"style":21},"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",[96,150844,150845,150853,150863,150867,150875,150885,150889,150893,150906,150920,150924,150931,150938],{"__ignoreMap":21},[99,150846,150847,150849,150851],{"class":101,"line":102},[99,150848,14681],{"class":105},[99,150850,7885],{"class":1949},[99,150852,3725],{"class":109},[99,150854,150855,150858,150860],{"class":101,"line":22},[99,150856,150857],{"class":109},"    school ",[99,150859,155],{"class":105},[99,150861,150862],{"class":214}," \"黑马学校\"\n",[99,150864,150865],{"class":101,"line":1165},[99,150866,2386],{"emptyLinePlaceholder":26},[99,150868,150869,150871,150873],{"class":101,"line":1180},[99,150870,30782],{"class":105},[99,150872,30785],{"class":158},[99,150874,150591],{"class":109},[99,150876,150877,150879,150881,150883],{"class":101,"line":1186},[99,150878,30826],{"class":158},[99,150880,149771],{"class":109},[99,150882,155],{"class":105},[99,150884,149776],{"class":109},[99,150886,150887],{"class":101,"line":1200},[99,150888,2386],{"emptyLinePlaceholder":26},[99,150890,150891],{"class":101,"line":1206},[99,150892,2386],{"emptyLinePlaceholder":26},[99,150894,150895,150898,150900,150902,150904],{"class":101,"line":1297},[99,150896,150897],{"class":109},"s1 ",[99,150899,155],{"class":105},[99,150901,149866],{"class":109},[99,150903,149869],{"class":214},[99,150905,116],{"class":109},[99,150907,150908,150911,150913,150915,150918],{"class":101,"line":1303},[99,150909,150910],{"class":109},"s2 ",[99,150912,155],{"class":105},[99,150914,149866],{"class":109},[99,150916,150917],{"class":214},"\"小红\"",[99,150919,116],{"class":109},[99,150921,150922],{"class":101,"line":1315},[99,150923,2386],{"emptyLinePlaceholder":26},[99,150925,150926,150928],{"class":101,"line":1598},[99,150927,30396],{"class":158},[99,150929,150930],{"class":109},"(s1.school)\n",[99,150932,150933,150935],{"class":101,"line":1603},[99,150934,30396],{"class":158},[99,150936,150937],{"class":109},"(s2.school)\n",[99,150939,150940,150942],{"class":101,"line":1609},[99,150941,30396],{"class":158},[99,150943,150944],{"class":109},"(Student.school)\n",[14,150946,150947],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[41,150949,150951],{"id":150950},"_1113-类方法和静态方法","11.13 类方法和静态方法",[70,150953,150955],{"id":150954},"_11131-类方法","11.13.1 类方法",[14,150957,150958,150959,150962,150963,28366],{},"类方法使用 ",[96,150960,150961],{},"@classmethod","，第一个参数通常是 ",[96,150964,150965],{},"cls",[90,150967,150969],{"className":30359,"code":150968,"language":30361,"meta":21,"style":21},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[96,150970,150971,150979,150987,150991,150999,151009,151019,151023,151027],{"__ignoreMap":21},[99,150972,150973,150975,150977],{"class":101,"line":102},[99,150974,14681],{"class":105},[99,150976,7885],{"class":1949},[99,150978,3725],{"class":109},[99,150980,150981,150983,150985],{"class":101,"line":22},[99,150982,150857],{"class":109},[99,150984,155],{"class":105},[99,150986,150862],{"class":214},[99,150988,150989],{"class":101,"line":1165},[99,150990,2386],{"emptyLinePlaceholder":26},[99,150992,150993,150996],{"class":101,"line":1180},[99,150994,150995],{"class":1949},"    @",[99,150997,150998],{"class":158},"classmethod\n",[99,151000,151001,151003,151006],{"class":101,"line":1186},[99,151002,30782],{"class":105},[99,151004,151005],{"class":1949}," get_school",[99,151007,151008],{"class":109},"(cls):\n",[99,151010,151011,151013,151016],{"class":101,"line":1200},[99,151012,14739],{"class":105},[99,151014,151015],{"class":158}," cls",[99,151017,151018],{"class":109},".school\n",[99,151020,151021],{"class":101,"line":1206},[99,151022,2386],{"emptyLinePlaceholder":26},[99,151024,151025],{"class":101,"line":1297},[99,151026,2386],{"emptyLinePlaceholder":26},[99,151028,151029,151031],{"class":101,"line":1303},[99,151030,30396],{"class":158},[99,151032,151033],{"class":109},"(Student.get_school())\n",[70,151035,151037],{"id":151036},"_11132-静态方法","11.13.2 静态方法",[14,151039,151040,151041,151044],{},"静态方法使用 ",[96,151042,151043],{},"@staticmethod","，不需要访问实例和类。",[90,151046,151048],{"className":30359,"code":151047,"language":30361,"meta":21,"style":21},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[96,151049,151050,151059,151066,151075,151086,151090,151094],{"__ignoreMap":21},[99,151051,151052,151054,151057],{"class":101,"line":102},[99,151053,14681],{"class":105},[99,151055,151056],{"class":1949}," MathUtils",[99,151058,3725],{"class":109},[99,151060,151061,151063],{"class":101,"line":22},[99,151062,150995],{"class":1949},[99,151064,151065],{"class":158},"staticmethod\n",[99,151067,151068,151070,151072],{"class":101,"line":1165},[99,151069,30782],{"class":105},[99,151071,5196],{"class":1949},[99,151073,151074],{"class":109},"(a, b):\n",[99,151076,151077,151079,151081,151083],{"class":101,"line":1180},[99,151078,14739],{"class":105},[99,151080,10856],{"class":109},[99,151082,591],{"class":105},[99,151084,151085],{"class":109}," b\n",[99,151087,151088],{"class":101,"line":1186},[99,151089,2386],{"emptyLinePlaceholder":26},[99,151091,151092],{"class":101,"line":1200},[99,151093,2386],{"emptyLinePlaceholder":26},[99,151095,151096,151098,151101,151103,151105,151107],{"class":101,"line":1206},[99,151097,30396],{"class":158},[99,151099,151100],{"class":109},"(MathUtils.add(",[99,151102,327],{"class":158},[99,151104,12422],{"class":109},[99,151106,187],{"class":158},[99,151108,30478],{"class":109},[14,151110,151111],{},"静态方法本质上是放在类命名空间里的普通函数。",[41,151113,151115],{"id":151114},"_1114-dataclass","11.14 dataclass",[14,151117,151118,151121],{},[96,151119,151120],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[90,151123,151125],{"className":30359,"code":151124,"language":30361,"meta":21,"style":21},"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",[96,151126,151127,151139,151143,151147,151152,151160,151168,151176,151184,151188,151192,151212],{"__ignoreMap":21},[99,151128,151129,151131,151134,151136],{"class":101,"line":102},[99,151130,30718],{"class":105},[99,151132,151133],{"class":109}," dataclasses ",[99,151135,30373],{"class":105},[99,151137,151138],{"class":109}," dataclass\n",[99,151140,151141],{"class":101,"line":22},[99,151142,2386],{"emptyLinePlaceholder":26},[99,151144,151145],{"class":101,"line":1165},[99,151146,2386],{"emptyLinePlaceholder":26},[99,151148,151149],{"class":101,"line":1180},[99,151150,151151],{"class":1949},"@dataclass\n",[99,151153,151154,151156,151158],{"class":101,"line":1186},[99,151155,14681],{"class":105},[99,151157,7885],{"class":1949},[99,151159,3725],{"class":109},[99,151161,151162,151165],{"class":101,"line":1200},[99,151163,151164],{"class":109},"    name: ",[99,151166,151167],{"class":158},"str\n",[99,151169,151170,151173],{"class":101,"line":1206},[99,151171,151172],{"class":109},"    age: ",[99,151174,151175],{"class":158},"int\n",[99,151177,151178,151181],{"class":101,"line":1297},[99,151179,151180],{"class":109},"    score: ",[99,151182,151183],{"class":158},"float\n",[99,151185,151186],{"class":101,"line":1303},[99,151187,2386],{"emptyLinePlaceholder":26},[99,151189,151190],{"class":101,"line":1315},[99,151191,2386],{"emptyLinePlaceholder":26},[99,151193,151194,151196,151198,151200,151202,151204,151206,151208,151210],{"class":101,"line":1598},[99,151195,149462],{"class":109},[99,151197,155],{"class":105},[99,151199,149866],{"class":109},[99,151201,149869],{"class":214},[99,151203,12422],{"class":109},[99,151205,760],{"class":158},[99,151207,12422],{"class":109},[99,151209,1099],{"class":158},[99,151211,116],{"class":109},[99,151213,151214,151216],{"class":101,"line":1603},[99,151215,30396],{"class":158},[99,151217,150023],{"class":109},[14,151219,151220,151221,322,151223,151226],{},"它会自动生成 ",[96,151222,30810],{},[96,151224,151225],{},"__repr__"," 等方法。适合数据模型类。",[41,151228,151230],{"id":151229},"_1115-小案例学生类","11.15 小案例：学生类",[90,151232,151234],{"className":30359,"code":151233,"language":30361,"meta":21,"style":21},"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",[96,151235,151236,151244,151253,151265,151275,151285,151295,151299,151308,151321,151325,151334,151340,151352,151364,151376,151388,151392,151396,151402,151412,151421,151431,151439,151447,151456,151460,151464,151472,151508,151512,151516,151541,151548],{"__ignoreMap":21},[99,151237,151238,151240,151242],{"class":101,"line":102},[99,151239,14681],{"class":105},[99,151241,7885],{"class":1949},[99,151243,3725],{"class":109},[99,151245,151246,151248,151250],{"class":101,"line":22},[99,151247,30782],{"class":105},[99,151249,30785],{"class":158},[99,151251,151252],{"class":109},"(self, student_id, name, age, score):\n",[99,151254,151255,151257,151260,151262],{"class":101,"line":1165},[99,151256,30826],{"class":158},[99,151258,151259],{"class":109},".student_id ",[99,151261,155],{"class":105},[99,151263,151264],{"class":109}," student_id\n",[99,151266,151267,151269,151271,151273],{"class":101,"line":1180},[99,151268,30826],{"class":158},[99,151270,149771],{"class":109},[99,151272,155],{"class":105},[99,151274,149776],{"class":109},[99,151276,151277,151279,151281,151283],{"class":101,"line":1186},[99,151278,30826],{"class":158},[99,151280,149783],{"class":109},[99,151282,155],{"class":105},[99,151284,149788],{"class":109},[99,151286,151287,151289,151291,151293],{"class":101,"line":1200},[99,151288,30826],{"class":158},[99,151290,149795],{"class":109},[99,151292,155],{"class":105},[99,151294,1565],{"class":109},[99,151296,151297],{"class":101,"line":1206},[99,151298,2386],{"emptyLinePlaceholder":26},[99,151300,151301,151303,151306],{"class":101,"line":1297},[99,151302,30782],{"class":105},[99,151304,151305],{"class":1949}," is_passed",[99,151307,30788],{"class":109},[99,151309,151310,151312,151314,151316,151318],{"class":101,"line":1303},[99,151311,14739],{"class":105},[99,151313,38854],{"class":158},[99,151315,149795],{"class":109},[99,151317,1696],{"class":105},[99,151319,151320],{"class":158}," 60\n",[99,151322,151323],{"class":101,"line":1315},[99,151324,2386],{"emptyLinePlaceholder":26},[99,151326,151327,151329,151332],{"class":101,"line":1598},[99,151328,30782],{"class":105},[99,151330,151331],{"class":1949}," to_dict",[99,151333,30788],{"class":109},[99,151335,151336,151338],{"class":101,"line":1603},[99,151337,14739],{"class":105},[99,151339,15559],{"class":109},[99,151341,151342,151345,151347,151349],{"class":101,"line":1609},[99,151343,151344],{"class":214},"            \"student_id\"",[99,151346,51418],{"class":109},[99,151348,30804],{"class":158},[99,151350,151351],{"class":109},".student_id,\n",[99,151353,151354,151357,151359,151361],{"class":101,"line":1614},[99,151355,151356],{"class":214},"            \"name\"",[99,151358,51418],{"class":109},[99,151360,30804],{"class":158},[99,151362,151363],{"class":109},".name,\n",[99,151365,151366,151369,151371,151373],{"class":101,"line":1628},[99,151367,151368],{"class":214},"            \"age\"",[99,151370,51418],{"class":109},[99,151372,30804],{"class":158},[99,151374,151375],{"class":109},".age,\n",[99,151377,151378,151381,151383,151385],{"class":101,"line":1633},[99,151379,151380],{"class":214},"            \"score\"",[99,151382,51418],{"class":109},[99,151384,30804],{"class":158},[99,151386,151387],{"class":109},".score,\n",[99,151389,151390],{"class":101,"line":1639},[99,151391,2515],{"class":109},[99,151393,151394],{"class":101,"line":1660},[99,151395,2386],{"emptyLinePlaceholder":26},[99,151397,151398,151400],{"class":101,"line":1665},[99,151399,150995],{"class":1949},[99,151401,150998],{"class":158},[99,151403,151404,151406,151409],{"class":101,"line":1679},[99,151405,30782],{"class":105},[99,151407,151408],{"class":1949}," from_dict",[99,151410,151411],{"class":109},"(cls, data):\n",[99,151413,151414,151416,151418],{"class":101,"line":1684},[99,151415,14739],{"class":105},[99,151417,151015],{"class":158},[99,151419,151420],{"class":109},"(\n",[99,151422,151423,151426,151429],{"class":101,"line":1713},[99,151424,151425],{"class":109},"            data[",[99,151427,151428],{"class":214},"\"student_id\"",[99,151430,87817],{"class":109},[99,151432,151433,151435,151437],{"class":101,"line":1718},[99,151434,151425],{"class":109},[99,151436,62660],{"class":214},[99,151438,87817],{"class":109},[99,151440,151441,151443,151445],{"class":101,"line":1735},[99,151442,151425],{"class":109},[99,151444,69105],{"class":214},[99,151446,87817],{"class":109},[99,151448,151449,151451,151454],{"class":101,"line":1740},[99,151450,151425],{"class":109},[99,151452,151453],{"class":214},"\"score\"",[99,151455,87817],{"class":109},[99,151457,151458],{"class":101,"line":1745},[99,151459,38107],{"class":109},[99,151461,151462],{"class":101,"line":1750},[99,151463,2386],{"emptyLinePlaceholder":26},[99,151465,151466,151468,151470],{"class":101,"line":1764},[99,151467,30782],{"class":105},[99,151469,149962],{"class":158},[99,151471,30788],{"class":109},[99,151473,151474,151476,151478,151480,151482,151485,151487,151490,151492,151494,151496,151498,151500,151502,151504,151506],{"class":101,"line":1769},[99,151475,14739],{"class":105},[99,151477,149971],{"class":105},[99,151479,361],{"class":214},[99,151481,149433],{"class":158},[99,151483,151484],{"class":109},".student_id",[99,151486,1056],{"class":158},[99,151488,151489],{"class":158}," {self",[99,151491,80282],{"class":109},[99,151493,1056],{"class":158},[99,151495,151489],{"class":158},[99,151497,80294],{"class":109},[99,151499,1056],{"class":158},[99,151501,151489],{"class":158},[99,151503,149843],{"class":109},[99,151505,1056],{"class":158},[99,151507,25122],{"class":214},[99,151509,151510],{"class":101,"line":2563},[99,151511,2386],{"emptyLinePlaceholder":26},[99,151513,151514],{"class":101,"line":2577},[99,151515,2386],{"emptyLinePlaceholder":26},[99,151517,151518,151520,151522,151524,151527,151529,151531,151533,151535,151537,151539],{"class":101,"line":2585},[99,151519,149462],{"class":109},[99,151521,155],{"class":105},[99,151523,149866],{"class":109},[99,151525,151526],{"class":214},"\"001\"",[99,151528,12422],{"class":109},[99,151530,149869],{"class":214},[99,151532,12422],{"class":109},[99,151534,760],{"class":158},[99,151536,12422],{"class":109},[99,151538,1099],{"class":158},[99,151540,116],{"class":109},[99,151542,151543,151545],{"class":101,"line":2590},[99,151544,30396],{"class":158},[99,151546,151547],{"class":109},"(student.is_passed())\n",[99,151549,151550,151552],{"class":101,"line":2596},[99,151551,30396],{"class":158},[99,151553,151554],{"class":109},"(student.to_dict())\n",[14,151556,151557,100999,151560,151563],{},[96,151558,151559],{},"to_dict()",[96,151561,151562],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[41,151565,151567],{"id":151566},"_1116-易错点","11.16 易错点",[53,151569,151570,151576,151582,151587,151590,151593],{},[56,151571,151572,151573,28366],{},"类名推荐使用大驼峰，如 ",[96,151574,151575],{},"StudentManager",[56,151577,151578,151579,151581],{},"方法第一个参数必须写 ",[96,151580,30804],{},"，调用时不用传。",[56,151583,151584,151586],{},[96,151585,30810],{}," 不是普通方法，它在创建对象时自动执行。",[56,151588,151589],{},"私有属性不是绝对安全，只是约定和名称改写。",[56,151591,151592],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[56,151594,151595],{},"类中方法太多时，说明职责可能过重。",[41,151597,151599],{"id":151598},"_1117-本章练习","11.17 本章练习",[53,151601,151602,151608,151614,151619,151632],{},[56,151603,151604,151605,151607],{},"定义 ",[96,151606,149549],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[56,151609,151604,151610,151613],{},[96,151611,151612],{},"Account"," 类，实现存款、取款、查询余额。",[56,151615,151604,151616,151618],{},[96,151617,17213],{}," 类，计算圆的周长和面积。",[56,151620,151604,151621,322,151624,151627,151628,151631],{},[96,151622,151623],{},"Dog",[96,151625,151626],{},"Cat"," 类，并用同一个函数调用它们的 ",[96,151629,151630],{},"speak()"," 方法。",[56,151633,104347,151634,151636,151637,28366],{},[96,151635,151120],{}," 定义一个商品类 ",[96,151638,151639],{},"Product",[5113,151641,151642],{},"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":21,"searchDepth":22,"depth":22,"links":151644},[151645,151646,151647,151648,151649,151650,151652,151653,151654,151655,151656,151657,151658,151662,151663,151664,151665],{"id":149313,"depth":22,"text":149314},{"id":149496,"depth":22,"text":149497},{"id":149560,"depth":22,"text":149561},{"id":149637,"depth":22,"text":149638},{"id":149736,"depth":22,"text":149737},{"id":149900,"depth":22,"text":151651},"11.6 str",{"id":150026,"depth":22,"text":150027},{"id":150292,"depth":22,"text":150293},{"id":150406,"depth":22,"text":150407},{"id":150561,"depth":22,"text":150562},{"id":150685,"depth":22,"text":150686},{"id":150801,"depth":22,"text":150802},{"id":150950,"depth":22,"text":150951,"children":151659},[151660,151661],{"id":150954,"depth":1165,"text":150955},{"id":151036,"depth":1165,"text":151037},{"id":151114,"depth":22,"text":151115},{"id":151229,"depth":22,"text":151230},{"id":151566,"depth":22,"text":151567},{"id":151598,"depth":22,"text":151599},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149305,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151672,"title":151673,"body":151674,"description":23364,"extension":24,"meta":154987,"navigation":26,"path":154988,"seo":154989,"stem":154990,"__hash__":154991},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151675,"toc":154963},[151676,151679,151683,151686,151689,151718,151721,151729,151733,151737,151740,151763,151766,151772,151776,153222,153225,153246,153250,153253,153265,153268,153452,153455,153581,153584,153588,153592,153728,153732,153818,153822,153904,153908,153945,153949,154138,154142,154145,154375,154379,154382,154563,154566,154570,154573,154579,154582,154608,154612,154615,154629,154632,154657,154660,154674,154677,154694,154697,154714,154717,154734,154738,154764,154768,154791,154795,154798,154800,154806,154808,154829,154832,154838,154844,154848,154851,154927,154930,154934,154960],[10,151677,151673],{"id":151678},"_12-综合案例与复习路线",[41,151680,151682],{"id":151681},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151684,151685],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151687,151688],{},"一个合格的入门综合项目最好覆盖：",[53,151690,151691,151694,151697,151700,151703,151706,151709,151712,151715],{},[56,151692,151693],{},"输入输出。",[56,151695,151696],{},"判断和循环。",[56,151698,151699],{},"函数拆分。",[56,151701,151702],{},"列表、字典等容器。",[56,151704,151705],{},"文件持久化。",[56,151707,151708],{},"异常处理。",[56,151710,151711],{},"模块拆分。",[56,151713,151714],{},"可选：面向对象。",[56,151716,151717],{},"可选：数据可视化。",[14,151719,151720],{},"本章整理两个方向：",[53,151722,151723,151726],{},[56,151724,151725],{},"学生管理系统。",[56,151727,151728],{},"销售数据统计和可视化。",[41,151730,151732],{"id":151731},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[70,151734,151736],{"id":151735},"_1221-需求","12.2.1 需求",[14,151738,151739],{},"实现一个命令行学生管理系统：",[53,151741,151742,151745,151748,151751,151754,151757,151760],{},[56,151743,151744],{},"添加学生。",[56,151746,151747],{},"删除学生。",[56,151749,151750],{},"修改学生。",[56,151752,151753],{},"查询学生。",[56,151755,151756],{},"显示所有学生。",[56,151758,151759],{},"保存到 JSON 文件。",[56,151761,151762],{},"程序启动时自动读取 JSON 文件。",[14,151764,151765],{},"学生字段：",[90,151767,151770],{"className":151768,"code":151769,"language":5174,"meta":21},[5172],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[96,151771,151769],{"__ignoreMap":21},[41,151773,151775],{"id":151774},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[90,151777,151779],{"className":30359,"code":151778,"language":30361,"meta":21,"style":21},"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",[96,151780,151781,151787,151797,151801,151815,151819,151823,151832,151844,151850,151854,151860,151891,151901,151908,151919,151925,151929,151933,151943,151974,152000,152004,152008,152017,152028,152039,152050,152061,152072,152083,152094,152098,152102,152112,152124,152140,152147,152154,152158,152162,152172,152180,152187,152200,152210,152221,152225,152229,152238,152246,152252,152264,152272,152283,152287,152291,152300,152316,152320,152327,152338,152343,152347,152363,152378,152393,152397,152402,152410,152418,152426,152434,152438,152443,152454,152458,152462,152471,152486,152496,152500,152512,152523,152527,152531,152536,152540,152551,152555,152559,152568,152583,152591,152595,152607,152617,152621,152625,152640,152653,152666,152670,152683,152695,152707,152711,152715,152726,152730,152734,152743,152758,152766,152770,152782,152792,152796,152800,152805,152809,152813,152823,152829,152851,152870,152889,152908,152913,152917,152921,152930,152938,152949,152953,152957,152983,152993,152998,153002,153006,153014,153024,153028,153036,153041,153057,153061,153075,153080,153094,153099,153112,153117,153130,153135,153148,153153,153166,153177,153181,153187,153198,153202,153206,153218],{"__ignoreMap":21},[99,151782,151783,151785],{"class":101,"line":102},[99,151784,30373],{"class":105},[99,151786,147072],{"class":109},[99,151788,151789,151791,151793,151795],{"class":101,"line":22},[99,151790,30718],{"class":105},[99,151792,108292],{"class":109},[99,151794,30373],{"class":105},[99,151796,108297],{"class":109},[99,151798,151799],{"class":101,"line":1165},[99,151800,2386],{"emptyLinePlaceholder":26},[99,151802,151803,151806,151808,151810,151813],{"class":101,"line":1180},[99,151804,151805],{"class":158},"DATA_FILE",[99,151807,13551],{"class":105},[99,151809,108526],{"class":109},[99,151811,151812],{"class":214},"\"students.json\"",[99,151814,116],{"class":109},[99,151816,151817],{"class":101,"line":1186},[99,151818,2386],{"emptyLinePlaceholder":26},[99,151820,151821],{"class":101,"line":1200},[99,151822,2386],{"emptyLinePlaceholder":26},[99,151824,151825,151827,151830],{"class":101,"line":1206},[99,151826,31928],{"class":105},[99,151828,151829],{"class":1949}," load_students",[99,151831,31934],{"class":109},[99,151833,151834,151836,151838,151841],{"class":101,"line":1297},[99,151835,3087],{"class":105},[99,151837,38911],{"class":105},[99,151839,151840],{"class":158}," DATA_FILE",[99,151842,151843],{"class":109},".exists():\n",[99,151845,151846,151848],{"class":101,"line":1303},[99,151847,14739],{"class":105},[99,151849,51819],{"class":109},[99,151851,151852],{"class":101,"line":1315},[99,151853,2386],{"emptyLinePlaceholder":26},[99,151855,151856,151858],{"class":101,"line":1598},[99,151857,125765],{"class":105},[99,151859,3725],{"class":109},[99,151861,151862,151865,151867,151869,151871,151873,151875,151877,151879,151881,151883,151885,151887,151889],{"class":101,"line":1603},[99,151863,151864],{"class":105},"        with",[99,151866,146772],{"class":158},[99,151868,110],{"class":109},[99,151870,151805],{"class":158},[99,151872,12422],{"class":109},[99,151874,146782],{"class":214},[99,151876,12422],{"class":109},[99,151878,146787],{"class":5203},[99,151880,155],{"class":105},[99,151882,146792],{"class":214},[99,151884,13701],{"class":109},[99,151886,31364],{"class":105},[99,151888,148134],{"class":5203},[99,151890,3725],{"class":109},[99,151892,151893,151895,151897,151899],{"class":101,"line":1609},[99,151894,15719],{"class":105},[99,151896,148145],{"class":109},[99,151898,45335],{"class":5203},[99,151900,116],{"class":109},[99,151902,151903,151905],{"class":101,"line":1614},[99,151904,125793],{"class":105},[99,151906,151907],{"class":109}," json.JSONDecodeError:\n",[99,151909,151910,151912,151914,151917],{"class":101,"line":1628},[99,151911,32432],{"class":158},[99,151913,110],{"class":109},[99,151915,151916],{"class":214},"\"数据文件格式错误，已使用空数据启动\"",[99,151918,116],{"class":109},[99,151920,151921,151923],{"class":101,"line":1633},[99,151922,14739],{"class":105},[99,151924,51819],{"class":109},[99,151926,151927],{"class":101,"line":1639},[99,151928,2386],{"emptyLinePlaceholder":26},[99,151930,151931],{"class":101,"line":1660},[99,151932,2386],{"emptyLinePlaceholder":26},[99,151934,151935,151937,151940],{"class":101,"line":1665},[99,151936,31928],{"class":105},[99,151938,151939],{"class":1949}," save_students",[99,151941,151942],{"class":109},"(students):\n",[99,151944,151945,151947,151949,151951,151953,151955,151958,151960,151962,151964,151966,151968,151970,151972],{"class":101,"line":1679},[99,151946,34159],{"class":105},[99,151948,146772],{"class":158},[99,151950,110],{"class":109},[99,151952,151805],{"class":158},[99,151954,12422],{"class":109},[99,151956,151957],{"class":214},"\"w\"",[99,151959,12422],{"class":109},[99,151961,146787],{"class":5203},[99,151963,155],{"class":105},[99,151965,146792],{"class":214},[99,151967,13701],{"class":109},[99,151969,31364],{"class":105},[99,151971,148134],{"class":5203},[99,151973,3725],{"class":109},[99,151975,151976,151979,151981,151983,151985,151987,151989,151991,151994,151996,151998],{"class":101,"line":1684},[99,151977,151978],{"class":109},"        json.dump(students, ",[99,151980,45335],{"class":5203},[99,151982,12422],{"class":109},[99,151984,147118],{"class":5203},[99,151986,155],{"class":105},[99,151988,33968],{"class":158},[99,151990,12422],{"class":109},[99,151992,151993],{"class":5203},"indent",[99,151995,155],{"class":105},[99,151997,187],{"class":158},[99,151999,116],{"class":109},[99,152001,152002],{"class":101,"line":1713},[99,152003,2386],{"emptyLinePlaceholder":26},[99,152005,152006],{"class":101,"line":1718},[99,152007,2386],{"emptyLinePlaceholder":26},[99,152009,152010,152012,152015],{"class":101,"line":1735},[99,152011,31928],{"class":105},[99,152013,152014],{"class":1949}," show_menu",[99,152016,31934],{"class":109},[99,152018,152019,152021,152023,152026],{"class":101,"line":1740},[99,152020,31280],{"class":158},[99,152022,110],{"class":109},[99,152024,152025],{"class":214},"\"====== 学生管理系统 ======\"",[99,152027,116],{"class":109},[99,152029,152030,152032,152034,152037],{"class":101,"line":1745},[99,152031,31280],{"class":158},[99,152033,110],{"class":109},[99,152035,152036],{"class":214},"\"1. 添加学生\"",[99,152038,116],{"class":109},[99,152040,152041,152043,152045,152048],{"class":101,"line":1750},[99,152042,31280],{"class":158},[99,152044,110],{"class":109},[99,152046,152047],{"class":214},"\"2. 删除学生\"",[99,152049,116],{"class":109},[99,152051,152052,152054,152056,152059],{"class":101,"line":1764},[99,152053,31280],{"class":158},[99,152055,110],{"class":109},[99,152057,152058],{"class":214},"\"3. 修改学生\"",[99,152060,116],{"class":109},[99,152062,152063,152065,152067,152070],{"class":101,"line":1769},[99,152064,31280],{"class":158},[99,152066,110],{"class":109},[99,152068,152069],{"class":214},"\"4. 查询学生\"",[99,152071,116],{"class":109},[99,152073,152074,152076,152078,152081],{"class":101,"line":2563},[99,152075,31280],{"class":158},[99,152077,110],{"class":109},[99,152079,152080],{"class":214},"\"5. 显示所有学生\"",[99,152082,116],{"class":109},[99,152084,152085,152087,152089,152092],{"class":101,"line":2577},[99,152086,31280],{"class":158},[99,152088,110],{"class":109},[99,152090,152091],{"class":214},"\"0. 退出系统\"",[99,152093,116],{"class":109},[99,152095,152096],{"class":101,"line":2585},[99,152097,2386],{"emptyLinePlaceholder":26},[99,152099,152100],{"class":101,"line":2590},[99,152101,2386],{"emptyLinePlaceholder":26},[99,152103,152104,152106,152109],{"class":101,"line":2596},[99,152105,31928],{"class":105},[99,152107,152108],{"class":1949}," find_student",[99,152110,152111],{"class":109},"(students, student_id):\n",[99,152113,152114,152116,152119,152121],{"class":101,"line":2602},[99,152115,3187],{"class":105},[99,152117,152118],{"class":109}," student ",[99,152120,26032],{"class":105},[99,152122,152123],{"class":109}," students:\n",[99,152125,152126,152128,152131,152133,152135,152137],{"class":101,"line":2607},[99,152127,2483],{"class":105},[99,152129,152130],{"class":109}," student[",[99,152132,151428],{"class":214},[99,152134,4429],{"class":109},[99,152136,2935],{"class":105},[99,152138,152139],{"class":109}," student_id:\n",[99,152141,152142,152144],{"class":101,"line":7935},[99,152143,15719],{"class":105},[99,152145,152146],{"class":109}," student\n",[99,152148,152149,152151],{"class":101,"line":7959},[99,152150,4076],{"class":105},[99,152152,152153],{"class":158}," None\n",[99,152155,152156],{"class":101,"line":7964},[99,152157,2386],{"emptyLinePlaceholder":26},[99,152159,152160],{"class":101,"line":7970},[99,152161,2386],{"emptyLinePlaceholder":26},[99,152163,152164,152166,152169],{"class":101,"line":7997},[99,152165,31928],{"class":105},[99,152167,152168],{"class":1949}," input_int",[99,152170,152171],{"class":109},"(prompt):\n",[99,152173,152174,152176,152178],{"class":101,"line":8002},[99,152175,2237],{"class":105},[99,152177,95273],{"class":158},[99,152179,3725],{"class":109},[99,152181,152182,152185],{"class":101,"line":8008},[99,152183,152184],{"class":105},"        try",[99,152186,3725],{"class":109},[99,152188,152189,152191,152193,152195,152197],{"class":101,"line":8020},[99,152190,15719],{"class":105},[99,152192,2368],{"class":158},[99,152194,110],{"class":109},[99,152196,53802],{"class":158},[99,152198,152199],{"class":109},"(prompt))\n",[99,152201,152202,152205,152208],{"class":101,"line":8032},[99,152203,152204],{"class":105},"        except",[99,152206,152207],{"class":158}," ValueError",[99,152209,3725],{"class":109},[99,152211,152212,152214,152216,152219],{"class":101,"line":8044},[99,152213,34631],{"class":158},[99,152215,110],{"class":109},[99,152217,152218],{"class":214},"\"请输入整数\"",[99,152220,116],{"class":109},[99,152222,152223],{"class":101,"line":9703},[99,152224,2386],{"emptyLinePlaceholder":26},[99,152226,152227],{"class":101,"line":9728},[99,152228,2386],{"emptyLinePlaceholder":26},[99,152230,152231,152233,152236],{"class":101,"line":9751},[99,152232,31928],{"class":105},[99,152234,152235],{"class":1949}," input_float",[99,152237,152171],{"class":109},[99,152239,152240,152242,152244],{"class":101,"line":9775},[99,152241,2237],{"class":105},[99,152243,95273],{"class":158},[99,152245,3725],{"class":109},[99,152247,152248,152250],{"class":101,"line":9780},[99,152249,152184],{"class":105},[99,152251,3725],{"class":109},[99,152253,152254,152256,152258,152260,152262],{"class":101,"line":9785},[99,152255,15719],{"class":105},[99,152257,109778],{"class":158},[99,152259,110],{"class":109},[99,152261,53802],{"class":158},[99,152263,152199],{"class":109},[99,152265,152266,152268,152270],{"class":101,"line":9790},[99,152267,152204],{"class":105},[99,152269,152207],{"class":158},[99,152271,3725],{"class":109},[99,152273,152274,152276,152278,152281],{"class":101,"line":9799},[99,152275,34631],{"class":158},[99,152277,110],{"class":109},[99,152279,152280],{"class":214},"\"请输入数字\"",[99,152282,116],{"class":109},[99,152284,152285],{"class":101,"line":9804},[99,152286,2386],{"emptyLinePlaceholder":26},[99,152288,152289],{"class":101,"line":9810},[99,152290,2386],{"emptyLinePlaceholder":26},[99,152292,152293,152295,152298],{"class":101,"line":9831},[99,152294,31928],{"class":105},[99,152296,152297],{"class":1949}," add_student",[99,152299,151942],{"class":109},[99,152301,152302,152305,152307,152309,152311,152314],{"class":101,"line":9837},[99,152303,152304],{"class":109},"    student_id ",[99,152306,155],{"class":105},[99,152308,60586],{"class":158},[99,152310,110],{"class":109},[99,152312,152313],{"class":214},"\"请输入学号:\"",[99,152315,116],{"class":109},[99,152317,152318],{"class":101,"line":9851},[99,152319,2386],{"emptyLinePlaceholder":26},[99,152321,152322,152324],{"class":101,"line":9857},[99,152323,3087],{"class":105},[99,152325,152326],{"class":109}," find_student(students, student_id):\n",[99,152328,152329,152331,152333,152336],{"class":101,"line":9884},[99,152330,32432],{"class":158},[99,152332,110],{"class":109},[99,152334,152335],{"class":214},"\"学号已存在\"",[99,152337,116],{"class":109},[99,152339,152340],{"class":101,"line":9893},[99,152341,152342],{"class":105},"        return\n",[99,152344,152345],{"class":101,"line":9899},[99,152346,2386],{"emptyLinePlaceholder":26},[99,152348,152349,152352,152354,152356,152358,152361],{"class":101,"line":9907},[99,152350,152351],{"class":109},"    name ",[99,152353,155],{"class":105},[99,152355,60586],{"class":158},[99,152357,110],{"class":109},[99,152359,152360],{"class":214},"\"请输入姓名:\"",[99,152362,116],{"class":109},[99,152364,152365,152368,152370,152373,152376],{"class":101,"line":9912},[99,152366,152367],{"class":109},"    age ",[99,152369,155],{"class":105},[99,152371,152372],{"class":109}," input_int(",[99,152374,152375],{"class":214},"\"请输入年龄:\"",[99,152377,116],{"class":109},[99,152379,152380,152383,152385,152388,152391],{"class":101,"line":16591},[99,152381,152382],{"class":109},"    score ",[99,152384,155],{"class":105},[99,152386,152387],{"class":109}," input_float(",[99,152389,152390],{"class":214},"\"请输入成绩:\"",[99,152392,116],{"class":109},[99,152394,152395],{"class":101,"line":16597},[99,152396,2386],{"emptyLinePlaceholder":26},[99,152398,152399],{"class":101,"line":16620},[99,152400,152401],{"class":109},"    students.append({\n",[99,152403,152404,152407],{"class":101,"line":16626},[99,152405,152406],{"class":214},"        \"student_id\"",[99,152408,152409],{"class":109},": student_id,\n",[99,152411,152412,152415],{"class":101,"line":16649},[99,152413,152414],{"class":214},"        \"name\"",[99,152416,152417],{"class":109},": name,\n",[99,152419,152420,152423],{"class":101,"line":16663},[99,152421,152422],{"class":214},"        \"age\"",[99,152424,152425],{"class":109},": age,\n",[99,152427,152428,152431],{"class":101,"line":16683},[99,152429,152430],{"class":214},"        \"score\"",[99,152432,152433],{"class":109},": score,\n",[99,152435,152436],{"class":101,"line":16689},[99,152437,33442],{"class":109},[99,152439,152440],{"class":101,"line":16700},[99,152441,152442],{"class":109},"    save_students(students)\n",[99,152444,152445,152447,152449,152452],{"class":101,"line":16723},[99,152446,31280],{"class":158},[99,152448,110],{"class":109},[99,152450,152451],{"class":214},"\"添加成功\"",[99,152453,116],{"class":109},[99,152455,152456],{"class":101,"line":16745},[99,152457,2386],{"emptyLinePlaceholder":26},[99,152459,152460],{"class":101,"line":16750},[99,152461,2386],{"emptyLinePlaceholder":26},[99,152463,152464,152466,152469],{"class":101,"line":16756},[99,152465,31928],{"class":105},[99,152467,152468],{"class":1949}," delete_student",[99,152470,151942],{"class":109},[99,152472,152473,152475,152477,152479,152481,152484],{"class":101,"line":16770},[99,152474,152304],{"class":109},[99,152476,155],{"class":105},[99,152478,60586],{"class":158},[99,152480,110],{"class":109},[99,152482,152483],{"class":214},"\"请输入要删除的学号:\"",[99,152485,116],{"class":109},[99,152487,152488,152491,152493],{"class":101,"line":16783},[99,152489,152490],{"class":109},"    student ",[99,152492,155],{"class":105},[99,152494,152495],{"class":109}," find_student(students, student_id)\n",[99,152497,152498],{"class":101,"line":16788},[99,152499,2386],{"emptyLinePlaceholder":26},[99,152501,152502,152504,152506,152508,152510],{"class":101,"line":16802},[99,152503,3087],{"class":105},[99,152505,152118],{"class":109},[99,152507,38908],{"class":105},[99,152509,38914],{"class":158},[99,152511,3725],{"class":109},[99,152513,152514,152516,152518,152521],{"class":101,"line":16807},[99,152515,32432],{"class":158},[99,152517,110],{"class":109},[99,152519,152520],{"class":214},"\"学生不存在\"",[99,152522,116],{"class":109},[99,152524,152525],{"class":101,"line":16813},[99,152526,152342],{"class":105},[99,152528,152529],{"class":101,"line":16818},[99,152530,2386],{"emptyLinePlaceholder":26},[99,152532,152533],{"class":101,"line":16832},[99,152534,152535],{"class":109},"    students.remove(student)\n",[99,152537,152538],{"class":101,"line":16837},[99,152539,152442],{"class":109},[99,152541,152542,152544,152546,152549],{"class":101,"line":16842},[99,152543,31280],{"class":158},[99,152545,110],{"class":109},[99,152547,152548],{"class":214},"\"删除成功\"",[99,152550,116],{"class":109},[99,152552,152553],{"class":101,"line":16856},[99,152554,2386],{"emptyLinePlaceholder":26},[99,152556,152557],{"class":101,"line":16868},[99,152558,2386],{"emptyLinePlaceholder":26},[99,152560,152561,152563,152566],{"class":101,"line":16873},[99,152562,31928],{"class":105},[99,152564,152565],{"class":1949}," update_student",[99,152567,151942],{"class":109},[99,152569,152570,152572,152574,152576,152578,152581],{"class":101,"line":16886},[99,152571,152304],{"class":109},[99,152573,155],{"class":105},[99,152575,60586],{"class":158},[99,152577,110],{"class":109},[99,152579,152580],{"class":214},"\"请输入要修改的学号:\"",[99,152582,116],{"class":109},[99,152584,152585,152587,152589],{"class":101,"line":16891},[99,152586,152490],{"class":109},[99,152588,155],{"class":105},[99,152590,152495],{"class":109},[99,152592,152593],{"class":101,"line":16896},[99,152594,2386],{"emptyLinePlaceholder":26},[99,152596,152597,152599,152601,152603,152605],{"class":101,"line":16901},[99,152598,3087],{"class":105},[99,152600,152118],{"class":109},[99,152602,38908],{"class":105},[99,152604,38914],{"class":158},[99,152606,3725],{"class":109},[99,152608,152609,152611,152613,152615],{"class":101,"line":16914},[99,152610,32432],{"class":158},[99,152612,110],{"class":109},[99,152614,152520],{"class":214},[99,152616,116],{"class":109},[99,152618,152619],{"class":101,"line":16919},[99,152620,152342],{"class":105},[99,152622,152623],{"class":101,"line":32614},[99,152624,2386],{"emptyLinePlaceholder":26},[99,152626,152627,152629,152631,152633,152635,152638],{"class":101,"line":32620},[99,152628,152351],{"class":109},[99,152630,155],{"class":105},[99,152632,60586],{"class":158},[99,152634,110],{"class":109},[99,152636,152637],{"class":214},"\"请输入新姓名:\"",[99,152639,116],{"class":109},[99,152641,152642,152644,152646,152648,152651],{"class":101,"line":32626},[99,152643,152367],{"class":109},[99,152645,155],{"class":105},[99,152647,152372],{"class":109},[99,152649,152650],{"class":214},"\"请输入新年龄:\"",[99,152652,116],{"class":109},[99,152654,152655,152657,152659,152661,152664],{"class":101,"line":32632},[99,152656,152382],{"class":109},[99,152658,155],{"class":105},[99,152660,152387],{"class":109},[99,152662,152663],{"class":214},"\"请输入新成绩:\"",[99,152665,116],{"class":109},[99,152667,152668],{"class":101,"line":32638},[99,152669,2386],{"emptyLinePlaceholder":26},[99,152671,152672,152675,152677,152679,152681],{"class":101,"line":32649},[99,152673,152674],{"class":109},"    student[",[99,152676,62660],{"class":214},[99,152678,4429],{"class":109},[99,152680,155],{"class":105},[99,152682,149776],{"class":109},[99,152684,152685,152687,152689,152691,152693],{"class":101,"line":32655},[99,152686,152674],{"class":109},[99,152688,69105],{"class":214},[99,152690,4429],{"class":109},[99,152692,155],{"class":105},[99,152694,149788],{"class":109},[99,152696,152697,152699,152701,152703,152705],{"class":101,"line":32675},[99,152698,152674],{"class":109},[99,152700,151453],{"class":214},[99,152702,4429],{"class":109},[99,152704,155],{"class":105},[99,152706,1565],{"class":109},[99,152708,152709],{"class":101,"line":32681},[99,152710,2386],{"emptyLinePlaceholder":26},[99,152712,152713],{"class":101,"line":32692},[99,152714,152442],{"class":109},[99,152716,152717,152719,152721,152724],{"class":101,"line":32698},[99,152718,31280],{"class":158},[99,152720,110],{"class":109},[99,152722,152723],{"class":214},"\"修改成功\"",[99,152725,116],{"class":109},[99,152727,152728],{"class":101,"line":32704},[99,152729,2386],{"emptyLinePlaceholder":26},[99,152731,152732],{"class":101,"line":32710},[99,152733,2386],{"emptyLinePlaceholder":26},[99,152735,152736,152738,152741],{"class":101,"line":32716},[99,152737,31928],{"class":105},[99,152739,152740],{"class":1949}," query_student",[99,152742,151942],{"class":109},[99,152744,152745,152747,152749,152751,152753,152756],{"class":101,"line":32722},[99,152746,152304],{"class":109},[99,152748,155],{"class":105},[99,152750,60586],{"class":158},[99,152752,110],{"class":109},[99,152754,152755],{"class":214},"\"请输入要查询的学号:\"",[99,152757,116],{"class":109},[99,152759,152760,152762,152764],{"class":101,"line":32728},[99,152761,152490],{"class":109},[99,152763,155],{"class":105},[99,152765,152495],{"class":109},[99,152767,152768],{"class":101,"line":32734},[99,152769,2386],{"emptyLinePlaceholder":26},[99,152771,152772,152774,152776,152778,152780],{"class":101,"line":32754},[99,152773,3087],{"class":105},[99,152775,152118],{"class":109},[99,152777,38908],{"class":105},[99,152779,38914],{"class":158},[99,152781,3725],{"class":109},[99,152783,152784,152786,152788,152790],{"class":101,"line":32760},[99,152785,32432],{"class":158},[99,152787,110],{"class":109},[99,152789,152520],{"class":214},[99,152791,116],{"class":109},[99,152793,152794],{"class":101,"line":32776},[99,152795,152342],{"class":105},[99,152797,152798],{"class":101,"line":32782},[99,152799,2386],{"emptyLinePlaceholder":26},[99,152801,152802],{"class":101,"line":32796},[99,152803,152804],{"class":109},"    print_student(student)\n",[99,152806,152807],{"class":101,"line":32802},[99,152808,2386],{"emptyLinePlaceholder":26},[99,152810,152811],{"class":101,"line":32817},[99,152812,2386],{"emptyLinePlaceholder":26},[99,152814,152815,152817,152820],{"class":101,"line":32823},[99,152816,31928],{"class":105},[99,152818,152819],{"class":1949}," print_student",[99,152821,152822],{"class":109},"(student):\n",[99,152824,152825,152827],{"class":101,"line":32832},[99,152826,31280],{"class":158},[99,152828,151420],{"class":109},[99,152830,152831,152834,152836,152838,152841,152844,152846,152849],{"class":101,"line":32838},[99,152832,152833],{"class":105},"        f",[99,152835,361],{"class":214},[99,152837,1006],{"class":158},[99,152839,152840],{"class":109},"student[",[99,152842,152843],{"class":214},"'student_id'",[99,152845,1050],{"class":109},[99,152847,152848],{"class":158},"}\\t",[99,152850,25122],{"class":214},[99,152852,152853,152855,152857,152859,152861,152864,152866,152868],{"class":101,"line":32847},[99,152854,152833],{"class":105},[99,152856,361],{"class":214},[99,152858,1006],{"class":158},[99,152860,152840],{"class":109},[99,152862,152863],{"class":214},"'name'",[99,152865,1050],{"class":109},[99,152867,152848],{"class":158},[99,152869,25122],{"class":214},[99,152871,152872,152874,152876,152878,152880,152883,152885,152887],{"class":101,"line":32853},[99,152873,152833],{"class":105},[99,152875,361],{"class":214},[99,152877,1006],{"class":158},[99,152879,152840],{"class":109},[99,152881,152882],{"class":214},"'age'",[99,152884,1050],{"class":109},[99,152886,152848],{"class":158},[99,152888,25122],{"class":214},[99,152890,152891,152893,152895,152897,152899,152902,152904,152906],{"class":101,"line":32859},[99,152892,152833],{"class":105},[99,152894,361],{"class":214},[99,152896,1006],{"class":158},[99,152898,152840],{"class":109},[99,152900,152901],{"class":214},"'score'",[99,152903,1050],{"class":109},[99,152905,1056],{"class":158},[99,152907,25122],{"class":214},[99,152909,152910],{"class":101,"line":32868},[99,152911,152912],{"class":109},"    )\n",[99,152914,152915],{"class":101,"line":32874},[99,152916,2386],{"emptyLinePlaceholder":26},[99,152918,152919],{"class":101,"line":32885},[99,152920,2386],{"emptyLinePlaceholder":26},[99,152922,152923,152925,152928],{"class":101,"line":32891},[99,152924,31928],{"class":105},[99,152926,152927],{"class":1949}," show_all_students",[99,152929,151942],{"class":109},[99,152931,152932,152934,152936],{"class":101,"line":32910},[99,152933,3087],{"class":105},[99,152935,38911],{"class":105},[99,152937,152123],{"class":109},[99,152939,152940,152942,152944,152947],{"class":101,"line":32916},[99,152941,32432],{"class":158},[99,152943,110],{"class":109},[99,152945,152946],{"class":214},"\"暂无学生\"",[99,152948,116],{"class":109},[99,152950,152951],{"class":101,"line":32927},[99,152952,152342],{"class":105},[99,152954,152955],{"class":101,"line":32933},[99,152956,2386],{"emptyLinePlaceholder":26},[99,152958,152959,152961,152963,152966,152968,152971,152973,152976,152978,152981],{"class":101,"line":32953},[99,152960,31280],{"class":158},[99,152962,110],{"class":109},[99,152964,152965],{"class":214},"\"学号",[99,152967,1216],{"class":158},[99,152969,152970],{"class":214},"姓名",[99,152972,1216],{"class":158},[99,152974,152975],{"class":214},"年龄",[99,152977,1216],{"class":158},[99,152979,152980],{"class":214},"成绩\"",[99,152982,116],{"class":109},[99,152984,152985,152987,152989,152991],{"class":101,"line":32969},[99,152986,3187],{"class":105},[99,152988,152118],{"class":109},[99,152990,26032],{"class":105},[99,152992,152123],{"class":109},[99,152994,152995],{"class":101,"line":32975},[99,152996,152997],{"class":109},"        print_student(student)\n",[99,152999,153000],{"class":101,"line":32989},[99,153001,2386],{"emptyLinePlaceholder":26},[99,153003,153004],{"class":101,"line":32995},[99,153005,2386],{"emptyLinePlaceholder":26},[99,153007,153008,153010,153012],{"class":101,"line":33001},[99,153009,31928],{"class":105},[99,153011,1959],{"class":1949},[99,153013,31934],{"class":109},[99,153015,153016,153019,153021],{"class":101,"line":33012},[99,153017,153018],{"class":109},"    students ",[99,153020,155],{"class":105},[99,153022,153023],{"class":109}," load_students()\n",[99,153025,153026],{"class":101,"line":33018},[99,153027,2386],{"emptyLinePlaceholder":26},[99,153029,153030,153032,153034],{"class":101,"line":33024},[99,153031,2237],{"class":105},[99,153033,95273],{"class":158},[99,153035,3725],{"class":109},[99,153037,153038],{"class":101,"line":33034},[99,153039,153040],{"class":109},"        show_menu()\n",[99,153042,153043,153046,153048,153050,153052,153055],{"class":101,"line":33040},[99,153044,153045],{"class":109},"        choice ",[99,153047,155],{"class":105},[99,153049,60586],{"class":158},[99,153051,110],{"class":109},[99,153053,153054],{"class":214},"\"请输入操作:\"",[99,153056,116],{"class":109},[99,153058,153059],{"class":101,"line":33051},[99,153060,2386],{"emptyLinePlaceholder":26},[99,153062,153063,153065,153068,153070,153073],{"class":101,"line":33057},[99,153064,2483],{"class":105},[99,153066,153067],{"class":109}," choice ",[99,153069,2935],{"class":105},[99,153071,153072],{"class":214}," \"1\"",[99,153074,3725],{"class":109},[99,153076,153077],{"class":101,"line":33067},[99,153078,153079],{"class":109},"            add_student(students)\n",[99,153081,153082,153085,153087,153089,153092],{"class":101,"line":33072},[99,153083,153084],{"class":105},"        elif",[99,153086,153067],{"class":109},[99,153088,2935],{"class":105},[99,153090,153091],{"class":214}," \"2\"",[99,153093,3725],{"class":109},[99,153095,153096],{"class":101,"line":33078},[99,153097,153098],{"class":109},"            delete_student(students)\n",[99,153100,153101,153103,153105,153107,153110],{"class":101,"line":33127},[99,153102,153084],{"class":105},[99,153104,153067],{"class":109},[99,153106,2935],{"class":105},[99,153108,153109],{"class":214}," \"3\"",[99,153111,3725],{"class":109},[99,153113,153114],{"class":101,"line":33174},[99,153115,153116],{"class":109},"            update_student(students)\n",[99,153118,153119,153121,153123,153125,153128],{"class":101,"line":33179},[99,153120,153084],{"class":105},[99,153122,153067],{"class":109},[99,153124,2935],{"class":105},[99,153126,153127],{"class":214}," \"4\"",[99,153129,3725],{"class":109},[99,153131,153132],{"class":101,"line":33185},[99,153133,153134],{"class":109},"            query_student(students)\n",[99,153136,153137,153139,153141,153143,153146],{"class":101,"line":33204},[99,153138,153084],{"class":105},[99,153140,153067],{"class":109},[99,153142,2935],{"class":105},[99,153144,153145],{"class":214}," \"5\"",[99,153147,3725],{"class":109},[99,153149,153150],{"class":101,"line":33210},[99,153151,153152],{"class":109},"            show_all_students(students)\n",[99,153154,153155,153157,153159,153161,153164],{"class":101,"line":33230},[99,153156,153084],{"class":105},[99,153158,153067],{"class":109},[99,153160,2935],{"class":105},[99,153162,153163],{"class":214}," \"0\"",[99,153165,3725],{"class":109},[99,153167,153168,153170,153172,153175],{"class":101,"line":33236},[99,153169,34631],{"class":158},[99,153171,110],{"class":109},[99,153173,153174],{"class":214},"\"退出系统\"",[99,153176,116],{"class":109},[99,153178,153179],{"class":101,"line":33242},[99,153180,115079],{"class":105},[99,153182,153183,153185],{"class":101,"line":33252},[99,153184,2520],{"class":105},[99,153186,3725],{"class":109},[99,153188,153189,153191,153193,153196],{"class":101,"line":33257},[99,153190,34631],{"class":158},[99,153192,110],{"class":109},[99,153194,153195],{"class":214},"\"输入错误\"",[99,153197,116],{"class":109},[99,153199,153200],{"class":101,"line":33263},[99,153201,2386],{"emptyLinePlaceholder":26},[99,153203,153204],{"class":101,"line":33279},[99,153205,2386],{"emptyLinePlaceholder":26},[99,153207,153208,153210,153212,153214,153216],{"class":101,"line":33324},[99,153209,1517],{"class":105},[99,153211,31201],{"class":158},[99,153213,101540],{"class":105},[99,153215,101543],{"class":214},[99,153217,3725],{"class":109},[99,153219,153220],{"class":101,"line":33330},[99,153221,101550],{"class":109},[14,153223,153224],{},"这个项目串联了：",[53,153226,153227,153230,153233,153236,153239,153241],{},[56,153228,153229],{},"菜单循环。",[56,153231,153232],{},"函数封装。",[56,153234,153235],{},"列表字典。",[56,153237,153238],{},"JSON 读写。",[56,153240,151708],{},[56,153242,153243,28366],{},[96,153244,153245],{},"if __name__ == \"__main__\"",[41,153247,153249],{"id":153248},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153251,153252],{},"可以进一步拆成两个类：",[53,153254,153255,153260],{},[56,153256,153257,153259],{},[96,153258,149549],{},"：表示单个学生。",[56,153261,153262,153264],{},[96,153263,151575],{},"：负责学生增删改查和文件保存。",[14,153266,153267],{},"示意代码：",[90,153269,153271],{"className":30359,"code":153270,"language":30361,"meta":21,"style":21},"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",[96,153272,153273,153283,153287,153291,153295,153303,153310,153316,153322,153328,153332,153340,153346,153356,153366,153376,153386,153390,153394,153400,153408,153416,153424,153432,153440,153448],{"__ignoreMap":21},[99,153274,153275,153277,153279,153281],{"class":101,"line":102},[99,153276,30718],{"class":105},[99,153278,151133],{"class":109},[99,153280,30373],{"class":105},[99,153282,151138],{"class":109},[99,153284,153285],{"class":101,"line":22},[99,153286,2386],{"emptyLinePlaceholder":26},[99,153288,153289],{"class":101,"line":1165},[99,153290,2386],{"emptyLinePlaceholder":26},[99,153292,153293],{"class":101,"line":1180},[99,153294,151151],{"class":1949},[99,153296,153297,153299,153301],{"class":101,"line":1186},[99,153298,14681],{"class":105},[99,153300,7885],{"class":1949},[99,153302,3725],{"class":109},[99,153304,153305,153308],{"class":101,"line":1200},[99,153306,153307],{"class":109},"    student_id: ",[99,153309,151167],{"class":158},[99,153311,153312,153314],{"class":101,"line":1206},[99,153313,151164],{"class":109},[99,153315,151167],{"class":158},[99,153317,153318,153320],{"class":101,"line":1297},[99,153319,151172],{"class":109},[99,153321,151175],{"class":158},[99,153323,153324,153326],{"class":101,"line":1303},[99,153325,151180],{"class":109},[99,153327,151183],{"class":158},[99,153329,153330],{"class":101,"line":1315},[99,153331,2386],{"emptyLinePlaceholder":26},[99,153333,153334,153336,153338],{"class":101,"line":1598},[99,153335,30782],{"class":105},[99,153337,151331],{"class":1949},[99,153339,30788],{"class":109},[99,153341,153342,153344],{"class":101,"line":1603},[99,153343,14739],{"class":105},[99,153345,15559],{"class":109},[99,153347,153348,153350,153352,153354],{"class":101,"line":1609},[99,153349,151344],{"class":214},[99,153351,51418],{"class":109},[99,153353,30804],{"class":158},[99,153355,151351],{"class":109},[99,153357,153358,153360,153362,153364],{"class":101,"line":1614},[99,153359,151356],{"class":214},[99,153361,51418],{"class":109},[99,153363,30804],{"class":158},[99,153365,151363],{"class":109},[99,153367,153368,153370,153372,153374],{"class":101,"line":1628},[99,153369,151368],{"class":214},[99,153371,51418],{"class":109},[99,153373,30804],{"class":158},[99,153375,151375],{"class":109},[99,153377,153378,153380,153382,153384],{"class":101,"line":1633},[99,153379,151380],{"class":214},[99,153381,51418],{"class":109},[99,153383,30804],{"class":158},[99,153385,151387],{"class":109},[99,153387,153388],{"class":101,"line":1639},[99,153389,2515],{"class":109},[99,153391,153392],{"class":101,"line":1660},[99,153393,2386],{"emptyLinePlaceholder":26},[99,153395,153396,153398],{"class":101,"line":1665},[99,153397,150995],{"class":1949},[99,153399,150998],{"class":158},[99,153401,153402,153404,153406],{"class":101,"line":1679},[99,153403,30782],{"class":105},[99,153405,151408],{"class":1949},[99,153407,151411],{"class":109},[99,153409,153410,153412,153414],{"class":101,"line":1684},[99,153411,14739],{"class":105},[99,153413,151015],{"class":158},[99,153415,151420],{"class":109},[99,153417,153418,153420,153422],{"class":101,"line":1713},[99,153419,151425],{"class":109},[99,153421,151428],{"class":214},[99,153423,87817],{"class":109},[99,153425,153426,153428,153430],{"class":101,"line":1718},[99,153427,151425],{"class":109},[99,153429,62660],{"class":214},[99,153431,87817],{"class":109},[99,153433,153434,153436,153438],{"class":101,"line":1735},[99,153435,151425],{"class":109},[99,153437,69105],{"class":214},[99,153439,87817],{"class":109},[99,153441,153442,153444,153446],{"class":101,"line":1740},[99,153443,151425],{"class":109},[99,153445,151453],{"class":214},[99,153447,87817],{"class":109},[99,153449,153450],{"class":101,"line":1745},[99,153451,38107],{"class":109},[14,153453,153454],{},"管理器示意：",[90,153456,153458],{"className":30359,"code":153457,"language":30361,"meta":21,"style":21},"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",[96,153459,153460,153469,153477,153488,153492,153502,153515,153526,153533,153539,153543,153552,153561,153567,153574],{"__ignoreMap":21},[99,153461,153462,153464,153467],{"class":101,"line":102},[99,153463,14681],{"class":105},[99,153465,153466],{"class":1949}," StudentManager",[99,153468,3725],{"class":109},[99,153470,153471,153473,153475],{"class":101,"line":22},[99,153472,30782],{"class":105},[99,153474,30785],{"class":158},[99,153476,30788],{"class":109},[99,153478,153479,153481,153484,153486],{"class":101,"line":1165},[99,153480,30826],{"class":158},[99,153482,153483],{"class":109},".students ",[99,153485,155],{"class":105},[99,153487,51819],{"class":109},[99,153489,153490],{"class":101,"line":1180},[99,153491,2386],{"emptyLinePlaceholder":26},[99,153493,153494,153496,153499],{"class":101,"line":1186},[99,153495,30782],{"class":105},[99,153497,153498],{"class":1949}," find_by_id",[99,153500,153501],{"class":109},"(self, student_id):\n",[99,153503,153504,153506,153508,153510,153512],{"class":101,"line":1200},[99,153505,3389],{"class":105},[99,153507,152118],{"class":109},[99,153509,26032],{"class":105},[99,153511,38854],{"class":158},[99,153513,153514],{"class":109},".students:\n",[99,153516,153517,153519,153522,153524],{"class":101,"line":1206},[99,153518,4628],{"class":105},[99,153520,153521],{"class":109}," student.student_id ",[99,153523,2935],{"class":105},[99,153525,152139],{"class":109},[99,153527,153528,153531],{"class":101,"line":1297},[99,153529,153530],{"class":105},"                return",[99,153532,152146],{"class":109},[99,153534,153535,153537],{"class":101,"line":1303},[99,153536,14739],{"class":105},[99,153538,152153],{"class":158},[99,153540,153541],{"class":101,"line":1315},[99,153542,2386],{"emptyLinePlaceholder":26},[99,153544,153545,153547,153549],{"class":101,"line":1598},[99,153546,30782],{"class":105},[99,153548,5196],{"class":1949},[99,153550,153551],{"class":109},"(self, student):\n",[99,153553,153554,153556,153558],{"class":101,"line":1603},[99,153555,2483],{"class":105},[99,153557,38854],{"class":158},[99,153559,153560],{"class":109},".find_by_id(student.student_id):\n",[99,153562,153563,153565],{"class":101,"line":1609},[99,153564,15719],{"class":105},[99,153566,125788],{"class":158},[99,153568,153569,153571],{"class":101,"line":1614},[99,153570,30826],{"class":158},[99,153572,153573],{"class":109},".students.append(student)\n",[99,153575,153576,153578],{"class":101,"line":1628},[99,153577,14739],{"class":105},[99,153579,153580],{"class":158}," True\n",[14,153582,153583],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[41,153585,153587],{"id":153586},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[70,153589,153591],{"id":153590},"_1251-数据结构","12.5.1 数据结构",[90,153593,153595],{"className":30359,"code":153594,"language":30361,"meta":21,"style":21},"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",[96,153596,153597,153605,153636,153666,153695,153724],{"__ignoreMap":21},[99,153598,153599,153601,153603],{"class":101,"line":102},[99,153600,148446],{"class":109},[99,153602,155],{"class":105},[99,153604,55428],{"class":109},[99,153606,153607,153609,153611,153613,153615,153617,153620,153622,153625,153627,153629,153631,153634],{"class":101,"line":22},[99,153608,148366],{"class":109},[99,153610,147978],{"class":214},[99,153612,51418],{"class":109},[99,153614,148589],{"class":214},[99,153616,12422],{"class":109},[99,153618,153619],{"class":214},"\"category\"",[99,153621,51418],{"class":109},[99,153623,153624],{"class":214},"\"手机\"",[99,153626,12422],{"class":109},[99,153628,84065],{"class":214},[99,153630,51418],{"class":109},[99,153632,153633],{"class":158},"12000",[99,153635,4916],{"class":109},[99,153637,153638,153640,153642,153644,153646,153648,153650,153652,153655,153657,153659,153661,153664],{"class":101,"line":1165},[99,153639,148366],{"class":109},[99,153641,147978],{"class":214},[99,153643,51418],{"class":109},[99,153645,148589],{"class":214},[99,153647,12422],{"class":109},[99,153649,153619],{"class":214},[99,153651,51418],{"class":109},[99,153653,153654],{"class":214},"\"电脑\"",[99,153656,12422],{"class":109},[99,153658,84065],{"class":214},[99,153660,51418],{"class":109},[99,153662,153663],{"class":158},"18000",[99,153665,4916],{"class":109},[99,153667,153668,153670,153672,153674,153676,153678,153680,153682,153684,153686,153688,153690,153693],{"class":101,"line":1180},[99,153669,148366],{"class":109},[99,153671,147978],{"class":214},[99,153673,51418],{"class":109},[99,153675,148610],{"class":214},[99,153677,12422],{"class":109},[99,153679,153619],{"class":214},[99,153681,51418],{"class":109},[99,153683,153624],{"class":214},[99,153685,12422],{"class":109},[99,153687,84065],{"class":214},[99,153689,51418],{"class":109},[99,153691,153692],{"class":158},"15000",[99,153694,4916],{"class":109},[99,153696,153697,153699,153701,153703,153705,153707,153709,153711,153713,153715,153717,153719,153722],{"class":101,"line":1186},[99,153698,148366],{"class":109},[99,153700,147978],{"class":214},[99,153702,51418],{"class":109},[99,153704,148610],{"class":214},[99,153706,12422],{"class":109},[99,153708,153619],{"class":214},[99,153710,51418],{"class":109},[99,153712,153654],{"class":214},[99,153714,12422],{"class":109},[99,153716,84065],{"class":214},[99,153718,51418],{"class":109},[99,153720,153721],{"class":158},"16000",[99,153723,4916],{"class":109},[99,153725,153726],{"class":101,"line":1200},[99,153727,33227],{"class":109},[70,153729,153731],{"id":153730},"_1252-按日期统计","12.5.2 按日期统计",[90,153733,153735],{"className":30359,"code":153734,"language":30361,"meta":21,"style":21},"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",[96,153736,153737,153746,153750,153761,153775,153788,153807,153811],{"__ignoreMap":21},[99,153738,153739,153742,153744],{"class":101,"line":102},[99,153740,153741],{"class":109},"daily_total ",[99,153743,155],{"class":105},[99,153745,87849],{"class":109},[99,153747,153748],{"class":101,"line":22},[99,153749,2386],{"emptyLinePlaceholder":26},[99,153751,153752,153754,153756,153758],{"class":101,"line":1165},[99,153753,3011],{"class":105},[99,153755,148190],{"class":109},[99,153757,26032],{"class":105},[99,153759,153760],{"class":109}," sales:\n",[99,153762,153763,153766,153768,153771,153773],{"class":101,"line":1180},[99,153764,153765],{"class":109},"    date ",[99,153767,155],{"class":105},[99,153769,153770],{"class":109}," item[",[99,153772,147978],{"class":214},[99,153774,33227],{"class":109},[99,153776,153777,153780,153782,153784,153786],{"class":101,"line":1186},[99,153778,153779],{"class":109},"    amount ",[99,153781,155],{"class":105},[99,153783,153770],{"class":109},[99,153785,84065],{"class":214},[99,153787,33227],{"class":109},[99,153789,153790,153793,153795,153798,153800,153802,153804],{"class":101,"line":1200},[99,153791,153792],{"class":109},"    daily_total[date] ",[99,153794,155],{"class":105},[99,153796,153797],{"class":109}," daily_total.get(date, ",[99,153799,301],{"class":158},[99,153801,13701],{"class":109},[99,153803,591],{"class":105},[99,153805,153806],{"class":109}," amount\n",[99,153808,153809],{"class":101,"line":1206},[99,153810,2386],{"emptyLinePlaceholder":26},[99,153812,153813,153815],{"class":101,"line":1297},[99,153814,30396],{"class":158},[99,153816,153817],{"class":109},"(daily_total)\n",[70,153819,153821],{"id":153820},"_1253-按类别统计","12.5.3 按类别统计",[90,153823,153825],{"className":30359,"code":153824,"language":30361,"meta":21,"style":21},"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",[96,153826,153827,153836,153840,153850,153863,153875,153893,153897],{"__ignoreMap":21},[99,153828,153829,153832,153834],{"class":101,"line":102},[99,153830,153831],{"class":109},"category_total ",[99,153833,155],{"class":105},[99,153835,87849],{"class":109},[99,153837,153838],{"class":101,"line":22},[99,153839,2386],{"emptyLinePlaceholder":26},[99,153841,153842,153844,153846,153848],{"class":101,"line":1165},[99,153843,3011],{"class":105},[99,153845,148190],{"class":109},[99,153847,26032],{"class":105},[99,153849,153760],{"class":109},[99,153851,153852,153855,153857,153859,153861],{"class":101,"line":1180},[99,153853,153854],{"class":109},"    category ",[99,153856,155],{"class":105},[99,153858,153770],{"class":109},[99,153860,153619],{"class":214},[99,153862,33227],{"class":109},[99,153864,153865,153867,153869,153871,153873],{"class":101,"line":1186},[99,153866,153779],{"class":109},[99,153868,155],{"class":105},[99,153870,153770],{"class":109},[99,153872,84065],{"class":214},[99,153874,33227],{"class":109},[99,153876,153877,153880,153882,153885,153887,153889,153891],{"class":101,"line":1200},[99,153878,153879],{"class":109},"    category_total[category] ",[99,153881,155],{"class":105},[99,153883,153884],{"class":109}," category_total.get(category, ",[99,153886,301],{"class":158},[99,153888,13701],{"class":109},[99,153890,591],{"class":105},[99,153892,153806],{"class":109},[99,153894,153895],{"class":101,"line":1206},[99,153896,2386],{"emptyLinePlaceholder":26},[99,153898,153899,153901],{"class":101,"line":1297},[99,153900,30396],{"class":158},[99,153902,153903],{"class":109},"(category_total)\n",[70,153905,153907],{"id":153906},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[90,153909,153911],{"className":30359,"code":153910,"language":30361,"meta":21,"style":21},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[96,153912,153913,153938],{"__ignoreMap":21},[99,153914,153915,153918,153920,153922,153925,153928,153931,153934,153936],{"class":101,"line":102},[99,153916,153917],{"class":109},"top_date, top_amount ",[99,153919,155],{"class":105},[99,153921,5938],{"class":158},[99,153923,153924],{"class":109},"(daily_total.items(), ",[99,153926,153927],{"class":5203},"key",[99,153929,153930],{"class":105},"=lambda",[99,153932,153933],{"class":109}," item: item[",[99,153935,327],{"class":158},[99,153937,4643],{"class":109},[99,153939,153940,153942],{"class":101,"line":22},[99,153941,30396],{"class":158},[99,153943,153944],{"class":109},"(top_date, top_amount)\n",[41,153946,153948],{"id":153947},"_126-绘制柱状图","12.6 绘制柱状图",[90,153950,153952],{"className":30359,"code":153951,"language":30361,"meta":21,"style":21},"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",[96,153953,153954,153968,153979,153983,153991,154003,154015,154026,154030,154034,154044,154055,154069,154074,154091,154108,154124,154128],{"__ignoreMap":21},[99,153955,153956,153958,153960,153962,153964,153966],{"class":101,"line":102},[99,153957,30718],{"class":105},[99,153959,147360],{"class":109},[99,153961,30373],{"class":105},[99,153963,147365],{"class":109},[99,153965,31364],{"class":105},[99,153967,147370],{"class":109},[99,153969,153970,153972,153974,153976],{"class":101,"line":22},[99,153971,30718],{"class":105},[99,153973,147219],{"class":109},[99,153975,30373],{"class":105},[99,153977,153978],{"class":109}," Bar\n",[99,153980,153981],{"class":101,"line":1165},[99,153982,2386],{"emptyLinePlaceholder":26},[99,153984,153985,153987,153989],{"class":101,"line":1180},[99,153986,153831],{"class":109},[99,153988,155],{"class":105},[99,153990,15559],{"class":109},[99,153992,153993,153996,153998,154001],{"class":101,"line":1186},[99,153994,153995],{"class":214},"    \"手机\"",[99,153997,51418],{"class":109},[99,153999,154000],{"class":158},"27000",[99,154002,31447],{"class":109},[99,154004,154005,154008,154010,154013],{"class":101,"line":1200},[99,154006,154007],{"class":214},"    \"电脑\"",[99,154009,51418],{"class":109},[99,154011,154012],{"class":158},"34000",[99,154014,31447],{"class":109},[99,154016,154017,154020,154022,154024],{"class":101,"line":1206},[99,154018,154019],{"class":214},"    \"耳机\"",[99,154021,51418],{"class":109},[99,154023,124380],{"class":158},[99,154025,31447],{"class":109},[99,154027,154028],{"class":101,"line":1297},[99,154029,1551],{"class":109},[99,154031,154032],{"class":101,"line":1303},[99,154033,2386],{"emptyLinePlaceholder":26},[99,154035,154036,154039,154041],{"class":101,"line":1315},[99,154037,154038],{"class":109},"bar ",[99,154040,155],{"class":105},[99,154042,154043],{"class":109}," Bar()\n",[99,154045,154046,154049,154052],{"class":101,"line":1598},[99,154047,154048],{"class":109},"bar.add_xaxis(",[99,154050,154051],{"class":158},"list",[99,154053,154054],{"class":109},"(category_total.keys()))\n",[99,154056,154057,154060,154062,154064,154066],{"class":101,"line":1603},[99,154058,154059],{"class":109},"bar.add_yaxis(",[99,154061,147276],{"class":214},[99,154063,12422],{"class":109},[99,154065,154051],{"class":158},[99,154067,154068],{"class":109},"(category_total.values()))\n",[99,154070,154071],{"class":101,"line":1609},[99,154072,154073],{"class":109},"bar.set_global_opts(\n",[99,154075,154076,154078,154080,154082,154084,154086,154089],{"class":101,"line":1614},[99,154077,147454],{"class":5203},[99,154079,155],{"class":105},[99,154081,147459],{"class":109},[99,154083,51388],{"class":5203},[99,154085,155],{"class":105},[99,154087,154088],{"class":214},"\"品类销售额\"",[99,154090,38028],{"class":109},[99,154092,154093,154095,154097,154099,154101,154103,154106],{"class":101,"line":1628},[99,154094,147473],{"class":5203},[99,154096,155],{"class":105},[99,154098,147478],{"class":109},[99,154100,79791],{"class":5203},[99,154102,155],{"class":105},[99,154104,154105],{"class":214},"\"品类\"",[99,154107,38028],{"class":109},[99,154109,154110,154112,154114,154116,154118,154120,154122],{"class":101,"line":1633},[99,154111,147492],{"class":5203},[99,154113,155],{"class":105},[99,154115,147478],{"class":109},[99,154117,79791],{"class":5203},[99,154119,155],{"class":105},[99,154121,147276],{"class":214},[99,154123,38028],{"class":109},[99,154125,154126],{"class":101,"line":1639},[99,154127,116],{"class":109},[99,154129,154130,154133,154136],{"class":101,"line":1660},[99,154131,154132],{"class":109},"bar.render(",[99,154134,154135],{"class":214},"\"category_sales.html\"",[99,154137,116],{"class":109},[41,154139,154141],{"id":154140},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154143,154144],{},"时间线适合展示不同日期、月份、年份的数据变化。",[90,154146,154148],{"className":30359,"code":154147,"language":30361,"meta":21,"style":21},"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",[96,154149,154150,154164,154175,154179,154187,154211,154234,154259,154263,154267,154277,154281,154292,154301,154311,154325,154356,154361,154365],{"__ignoreMap":21},[99,154151,154152,154154,154156,154158,154160,154162],{"class":101,"line":102},[99,154153,30718],{"class":105},[99,154155,147360],{"class":109},[99,154157,30373],{"class":105},[99,154159,147365],{"class":109},[99,154161,31364],{"class":105},[99,154163,147370],{"class":109},[99,154165,154166,154168,154170,154172],{"class":101,"line":22},[99,154167,30718],{"class":105},[99,154169,147219],{"class":109},[99,154171,30373],{"class":105},[99,154173,154174],{"class":109}," Bar, Timeline\n",[99,154176,154177],{"class":101,"line":1165},[99,154178,2386],{"emptyLinePlaceholder":26},[99,154180,154181,154183,154185],{"class":101,"line":1180},[99,154182,101639],{"class":109},[99,154184,155],{"class":105},[99,154186,15559],{"class":109},[99,154188,154189,154192,154195,154197,154199,154201,154203,154205,154207,154209],{"class":101,"line":1186},[99,154190,154191],{"class":214},"    \"2024-10-01\"",[99,154193,154194],{"class":109},": {",[99,154196,153624],{"class":214},[99,154198,51418],{"class":109},[99,154200,153633],{"class":158},[99,154202,12422],{"class":109},[99,154204,153654],{"class":214},[99,154206,51418],{"class":109},[99,154208,153663],{"class":158},[99,154210,4916],{"class":109},[99,154212,154213,154216,154218,154220,154222,154224,154226,154228,154230,154232],{"class":101,"line":1200},[99,154214,154215],{"class":214},"    \"2024-10-02\"",[99,154217,154194],{"class":109},[99,154219,153624],{"class":214},[99,154221,51418],{"class":109},[99,154223,153692],{"class":158},[99,154225,12422],{"class":109},[99,154227,153654],{"class":214},[99,154229,51418],{"class":109},[99,154231,153721],{"class":158},[99,154233,4916],{"class":109},[99,154235,154236,154239,154241,154243,154245,154248,154250,154252,154254,154257],{"class":101,"line":1206},[99,154237,154238],{"class":214},"    \"2024-10-03\"",[99,154240,154194],{"class":109},[99,154242,153624],{"class":214},[99,154244,51418],{"class":109},[99,154246,154247],{"class":158},"17000",[99,154249,12422],{"class":109},[99,154251,153654],{"class":214},[99,154253,51418],{"class":109},[99,154255,154256],{"class":158},"19000",[99,154258,4916],{"class":109},[99,154260,154261],{"class":101,"line":1297},[99,154262,1551],{"class":109},[99,154264,154265],{"class":101,"line":1303},[99,154266,2386],{"emptyLinePlaceholder":26},[99,154268,154269,154272,154274],{"class":101,"line":1315},[99,154270,154271],{"class":109},"timeline ",[99,154273,155],{"class":105},[99,154275,154276],{"class":109}," Timeline()\n",[99,154278,154279],{"class":101,"line":1598},[99,154280,2386],{"emptyLinePlaceholder":26},[99,154282,154283,154285,154288,154290],{"class":101,"line":1603},[99,154284,3011],{"class":105},[99,154286,154287],{"class":109}," date, category_data ",[99,154289,26032],{"class":105},[99,154291,149129],{"class":109},[99,154293,154294,154297,154299],{"class":101,"line":1609},[99,154295,154296],{"class":109},"    bar ",[99,154298,155],{"class":105},[99,154300,154043],{"class":109},[99,154302,154303,154306,154308],{"class":101,"line":1614},[99,154304,154305],{"class":109},"    bar.add_xaxis(",[99,154307,154051],{"class":158},[99,154309,154310],{"class":109},"(category_data.keys()))\n",[99,154312,154313,154316,154318,154320,154322],{"class":101,"line":1628},[99,154314,154315],{"class":109},"    bar.add_yaxis(",[99,154317,147276],{"class":214},[99,154319,12422],{"class":109},[99,154321,154051],{"class":158},[99,154323,154324],{"class":109},"(category_data.values()))\n",[99,154326,154327,154330,154333,154335,154337,154339,154341,154343,154345,154347,154349,154351,154354],{"class":101,"line":1633},[99,154328,154329],{"class":109},"    bar.set_global_opts(",[99,154331,154332],{"class":5203},"title_opts",[99,154334,155],{"class":105},[99,154336,147459],{"class":109},[99,154338,51388],{"class":5203},[99,154340,155],{"class":105},[99,154342,162],{"class":105},[99,154344,361],{"class":214},[99,154346,1006],{"class":158},[99,154348,73907],{"class":109},[99,154350,1056],{"class":158},[99,154352,154353],{"class":214},"销售额\"",[99,154355,30478],{"class":109},[99,154357,154358],{"class":101,"line":1639},[99,154359,154360],{"class":109},"    timeline.add(bar, date)\n",[99,154362,154363],{"class":101,"line":1660},[99,154364,2386],{"emptyLinePlaceholder":26},[99,154366,154367,154370,154373],{"class":101,"line":1665},[99,154368,154369],{"class":109},"timeline.render(",[99,154371,154372],{"class":214},"\"timeline_sales.html\"",[99,154374,116],{"class":109},[41,154376,154378],{"id":154377},"_128-绘制地图","12.8 绘制地图",[14,154380,154381],{},"地图适合展示地区数据。",[90,154383,154385],{"className":30359,"code":154384,"language":30361,"meta":21,"style":21},"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",[96,154386,154387,154401,154412,154416,154424,154437,154449,154462,154475,154479,154483,154493,154508,154513,154530,154549,154553],{"__ignoreMap":21},[99,154388,154389,154391,154393,154395,154397,154399],{"class":101,"line":102},[99,154390,30718],{"class":105},[99,154392,147360],{"class":109},[99,154394,30373],{"class":105},[99,154396,147365],{"class":109},[99,154398,31364],{"class":105},[99,154400,147370],{"class":109},[99,154402,154403,154405,154407,154409],{"class":101,"line":22},[99,154404,30718],{"class":105},[99,154406,147219],{"class":109},[99,154408,30373],{"class":105},[99,154410,154411],{"class":109}," Map\n",[99,154413,154414],{"class":101,"line":1165},[99,154415,2386],{"emptyLinePlaceholder":26},[99,154417,154418,154420,154422],{"class":101,"line":1180},[99,154419,101639],{"class":109},[99,154421,155],{"class":105},[99,154423,55428],{"class":109},[99,154425,154426,154429,154431,154433,154435],{"class":101,"line":1186},[99,154427,154428],{"class":109},"    (",[99,154430,69250],{"class":214},[99,154432,12422],{"class":109},[99,154434,927],{"class":158},[99,154436,38028],{"class":109},[99,154438,154439,154441,154443,154445,154447],{"class":101,"line":1200},[99,154440,154428],{"class":109},[99,154442,69270],{"class":214},[99,154444,12422],{"class":109},[99,154446,147293],{"class":158},[99,154448,38028],{"class":109},[99,154450,154451,154453,154456,154458,154460],{"class":101,"line":1206},[99,154452,154428],{"class":109},[99,154454,154455],{"class":214},"\"广东\"",[99,154457,12422],{"class":109},[99,154459,1708],{"class":158},[99,154461,38028],{"class":109},[99,154463,154464,154466,154469,154471,154473],{"class":101,"line":1297},[99,154465,154428],{"class":109},[99,154467,154468],{"class":214},"\"浙江\"",[99,154470,12422],{"class":109},[99,154472,147298],{"class":158},[99,154474,38028],{"class":109},[99,154476,154477],{"class":101,"line":1303},[99,154478,33227],{"class":109},[99,154480,154481],{"class":101,"line":1315},[99,154482,2386],{"emptyLinePlaceholder":26},[99,154484,154485,154488,154490],{"class":101,"line":1598},[99,154486,154487],{"class":109},"map_chart ",[99,154489,155],{"class":105},[99,154491,154492],{"class":109}," Map()\n",[99,154494,154495,154498,154500,154503,154506],{"class":101,"line":1603},[99,154496,154497],{"class":109},"map_chart.add(",[99,154499,147276],{"class":214},[99,154501,154502],{"class":109},", data, ",[99,154504,154505],{"class":214},"\"china\"",[99,154507,116],{"class":109},[99,154509,154510],{"class":101,"line":1609},[99,154511,154512],{"class":109},"map_chart.set_global_opts(\n",[99,154514,154515,154517,154519,154521,154523,154525,154528],{"class":101,"line":1614},[99,154516,147454],{"class":5203},[99,154518,155],{"class":105},[99,154520,147459],{"class":109},[99,154522,51388],{"class":5203},[99,154524,155],{"class":105},[99,154526,154527],{"class":214},"\"地区销售额\"",[99,154529,38028],{"class":109},[99,154531,154532,154535,154537,154540,154543,154545,154547],{"class":101,"line":1628},[99,154533,154534],{"class":5203},"    visualmap_opts",[99,154536,155],{"class":105},[99,154538,154539],{"class":109},"opts.VisualMapOpts(",[99,154541,154542],{"class":5203},"max_",[99,154544,155],{"class":105},[99,154546,1708],{"class":158},[99,154548,38028],{"class":109},[99,154550,154551],{"class":101,"line":1633},[99,154552,116],{"class":109},[99,154554,154555,154558,154561],{"class":101,"line":1639},[99,154556,154557],{"class":109},"map_chart.render(",[99,154559,154560],{"class":214},"\"map_sales.html\"",[99,154562,116],{"class":109},[14,154564,154565],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[41,154567,154569],{"id":154568},"_129-项目拆分建议","12.9 项目拆分建议",[14,154571,154572],{},"当代码超过一个文件时，可以这样组织：",[90,154574,154577],{"className":154575,"code":154576,"language":5174,"meta":21},[5172],"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",[96,154578,154576],{"__ignoreMap":21},[14,154580,154581],{},"职责：",[53,154583,154584,154590,154596,154602],{},[56,154585,154586,154589],{},[96,154587,154588],{},"main.py","：程序入口。",[56,154591,154592,154595],{},[96,154593,154594],{},"file_utils.py","：读写 JSON。",[56,154597,154598,154601],{},[96,154599,154600],{},"sales_service.py","：统计销售数据。",[56,154603,154604,154607],{},[96,154605,154606],{},"chart_builder.py","：生成图表。",[41,154609,154611],{"id":154610},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154613,154614],{},"语法基础：",[53,154616,154617,154620,154623,154626],{},[56,154618,154619],{},"会写变量、注释、输入输出。",[56,154621,154622],{},"会使用 int、float、str、bool。",[56,154624,154625],{},"会做类型转换。",[56,154627,154628],{},"会使用 f-string 格式化输出。",[14,154630,154631],{},"流程控制：",[53,154633,154634,154640,154646,154654],{},[56,154635,154636,154637,28366],{},"会写 ",[96,154638,154639],{},"if elif else",[56,154641,154636,154642,100999,154644,28366],{},[96,154643,108644],{},[96,154645,3011],{},[56,154647,154648,154649,100999,154651,28366],{},"理解 ",[96,154650,2039],{},[96,154652,154653],{},"continue",[56,154655,154656],{},"能写嵌套循环。",[14,154658,154659],{},"函数：",[53,154661,154662,154665,154668,154671],{},[56,154663,154664],{},"会定义和调用函数。",[56,154666,154667],{},"理解参数和返回值。",[56,154669,154670],{},"知道局部变量和全局变量。",[56,154672,154673],{},"会使用默认参数、关键字参数、不定长参数。",[14,154675,154676],{},"容器：",[53,154678,154679,154682,154685,154688,154691],{},[56,154680,154681],{},"会使用列表增删改查。",[56,154683,154684],{},"会遍历列表、字典。",[56,154686,154687],{},"会使用切片。",[56,154689,154690],{},"会用集合去重。",[56,154692,154693],{},"会处理列表嵌套字典。",[14,154695,154696],{},"文件和模块：",[53,154698,154699,154702,154705,154708,154711],{},[56,154700,154701],{},"会读写文本文件。",[56,154703,154704],{},"会读写 JSON。",[56,154706,154707],{},"会捕获常见异常。",[56,154709,154710],{},"会导入模块和第三方包。",[56,154712,154713],{},"会创建简单包结构。",[14,154715,154716],{},"项目能力：",[53,154718,154719,154722,154725,154728,154731],{},[56,154720,154721],{},"能把代码拆成函数。",[56,154723,154724],{},"能把数据保存到文件。",[56,154726,154727],{},"能处理用户输入错误。",[56,154729,154730],{},"能写一个完整菜单程序。",[56,154732,154733],{},"能用 pyecharts 生成图表。",[41,154735,154737],{"id":154736},"_1211-推荐练习顺序","12.11 推荐练习顺序",[53,154739,154740,154743,154746,154749,154752,154755,154758,154761],{},[56,154741,154742],{},"猜数字游戏。",[56,154744,154745],{},"ATM 菜单程序。",[56,154747,154748],{},"学生成绩统计。",[56,154750,154751],{},"学生管理系统函数版。",[56,154753,154754],{},"学生管理系统文件持久化版。",[56,154756,154757],{},"学生管理系统面向对象版。",[56,154759,154760],{},"销售数据统计。",[56,154762,154763],{},"销售数据可视化。",[41,154765,154767],{"id":154766},"_1212-常见学习误区","12.12 常见学习误区",[53,154769,154770,154773,154776,154779,154782,154785,154788],{},[56,154771,154772],{},"只看视频不敲代码。",[56,154774,154775],{},"一报错就复制错误去搜，不先读报错位置。",[56,154777,154778],{},"变量名随便写，后续自己看不懂。",[56,154780,154781],{},"所有代码都写在一个文件一个函数里。",[56,154783,154784],{},"不保存练习代码，复习时没有材料。",[56,154786,154787],{},"还没掌握列表字典就急着学框架。",[56,154789,154790],{},"不会读官方文档，只依赖教程。",[41,154792,154794],{"id":154793},"_1213-如何读报错","12.13 如何读报错",[14,154796,154797],{},"报错通常从下往上看最后几行。",[14,154799,15122],{},[90,154801,154804],{"className":154802,"code":154803,"language":5174,"meta":21},[5172],"ValueError: invalid literal for int() with base 10: 'abc'\n",[96,154805,154803],{"__ignoreMap":21},[14,154807,24588],{},[53,154809,154810,154816,154826],{},[56,154811,154812,154813,28366],{},"异常类型是 ",[96,154814,154815],{},"ValueError",[56,154817,107326,154818,154821,154822,154825],{},[96,154819,154820],{},"int()"," 无法把 ",[96,154823,154824],{},"'abc'"," 转成整数。",[56,154827,154828],{},"应该检查输入内容或增加异常处理。",[14,154830,154831],{},"再看文件名和行号：",[90,154833,154836],{"className":154834,"code":154835,"language":5174,"meta":21},[5172],"File \"main.py\", line 10, in \u003Cmodule>\n",[96,154837,154835],{"__ignoreMap":21},[14,154839,154840,154841,154843],{},"表示错误发生在 ",[96,154842,154588],{}," 第 10 行。",[41,154845,154847],{"id":154846},"_1214-后续学习方向","12.14 后续学习方向",[14,154849,154850],{},"Python 基础完成后，可以按兴趣选择方向：",[53,154852,154853,154865,154874,154886,154897,154906,154916],{},[56,154854,154855,154856,322,154859,322,154862,28366],{},"自动化办公：",[96,154857,154858],{},"openpyxl",[96,154860,154861],{},"python-docx",[96,154863,154864],{},"pdfplumber",[56,154866,154867,154868,322,154870,322,154872,28366],{},"数据分析：",[96,154869,100607],{},[96,154871,146166],{},[96,154873,146174],{},[56,154875,154876,154877,322,154880,322,154883,28366],{},"Web 后端：",[96,154878,154879],{},"Flask",[96,154881,154882],{},"FastAPI",[96,154884,154885],{},"Django",[56,154887,154888,154889,322,154891,322,154894,28366],{},"爬虫：",[96,154890,146151],{},[96,154892,154893],{},"BeautifulSoup",[96,154895,154896],{},"Scrapy",[56,154898,154899,154900,322,154902,154905],{},"测试开发：",[96,154901,146198],{},[96,154903,154904],{},"selenium","、接口测试。",[56,154907,154908,154909,322,154911,322,154913,28366],{},"人工智能：",[96,154910,100607],{},[96,154912,146166],{},[96,154914,154915],{},"pytorch",[56,154917,154918,154919,322,154921,322,154924,28366],{},"运维脚本：",[96,154920,145767],{},[96,154922,154923],{},"subprocess",[96,154925,154926],{},"paramiko",[14,154928,154929],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[41,154931,154933],{"id":154932},"_1215-结课练习","12.15 结课练习",[53,154935,154936,154939,154942,154945,154948,154951,154954,154957],{},[56,154937,154938],{},"完成函数版学生管理系统。",[56,154940,154941],{},"给学生管理系统增加 JSON 持久化。",[56,154943,154944],{},"给学生管理系统增加异常处理。",[56,154946,154947],{},"把学生管理系统改成面向对象版。",[56,154949,154950],{},"使用 pyecharts 绘制学生成绩柱状图。",[56,154952,154953],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[56,154955,154956],{},"按品类统计销售额并绘制柱状图。",[56,154958,154959],{},"写一份自己的 Python 学习路线图。",[5113,154961,154962],{},"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":21,"searchDepth":22,"depth":22,"links":154964},[154965,154966,154969,154970,154971,154977,154978,154979,154980,154981,154982,154983,154984,154985,154986],{"id":151681,"depth":22,"text":151682},{"id":151731,"depth":22,"text":151732,"children":154967},[154968],{"id":151735,"depth":1165,"text":151736},{"id":151774,"depth":22,"text":151775},{"id":153248,"depth":22,"text":153249},{"id":153586,"depth":22,"text":153587,"children":154972},[154973,154974,154975,154976],{"id":153590,"depth":1165,"text":153591},{"id":153730,"depth":1165,"text":153731},{"id":153820,"depth":1165,"text":153821},{"id":153906,"depth":1165,"text":153907},{"id":153947,"depth":22,"text":153948},{"id":154140,"depth":22,"text":154141},{"id":154377,"depth":22,"text":154378},{"id":154568,"depth":22,"text":154569},{"id":154610,"depth":22,"text":154611},{"id":154736,"depth":22,"text":154737},{"id":154766,"depth":22,"text":154767},{"id":154793,"depth":22,"text":154794},{"id":154846,"depth":22,"text":154847},{"id":154932,"depth":22,"text":154933},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151673,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154993,"title":154994,"body":154995,"description":23364,"extension":24,"meta":157464,"navigation":26,"path":157465,"seo":157466,"stem":157467,"__hash__":157468},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154996,"toc":157439},[154997,155000,155004,155007,155010,155030,155033,155056,155059,155062,155084,155087,155109,155113,155116,155156,155159,155280,155284,155287,155327,155330,155354,155357,155361,155364,155378,155411,155414,155449,155452,155475,155478,155511,155514,155516,155522,155597,155600,155606,155623,155663,155667,155670,155716,155718,155756,155759,155794,155797,155832,155835,155867,155870,155889,155893,155897,156010,156012,156087,156091,156137,156140,156166,156175,156179,156182,156245,156253,156281,156285,156325,156390,156394,156397,156436,156439,156484,156487,156548,156552,156579,156582,156610,156613,156617,156621,156686,156689,156727,156730,156762,156766,156865,156869,156872,156945,156948,156996,157000,157006,157046,157049,157096,157099,157148,157152,157154,157168,157170,157351,157355,157382,157402,157409,157413,157430,157436],[10,154998,154994],{"id":154999},"_2-基础语法变量与字符串",[41,155001,155003],{"id":155002},"_21-注释","2.1 注释",[14,155005,155006],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155008,155009],{},"单行注释：",[90,155011,155013],{"className":30359,"code":155012,"language":30361,"meta":21,"style":21},"# 这是单行注释\nprint(\"hello\")\n",[96,155014,155015,155020],{"__ignoreMap":21},[99,155016,155017],{"class":101,"line":102},[99,155018,155019],{"class":168},"# 这是单行注释\n",[99,155021,155022,155024,155026,155028],{"class":101,"line":22},[99,155023,30396],{"class":158},[99,155025,110],{"class":109},[99,155027,5831],{"class":214},[99,155029,116],{"class":109},[14,155031,155032],{},"多行说明常用三引号：",[90,155034,155036],{"className":30359,"code":155035,"language":30361,"meta":21,"style":21},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[96,155037,155038,155042,155047,155052],{"__ignoreMap":21},[99,155039,155040],{"class":101,"line":102},[99,155041,95679],{"class":214},[99,155043,155044],{"class":101,"line":22},[99,155045,155046],{"class":214},"这是多行说明。\n",[99,155048,155049],{"class":101,"line":1165},[99,155050,155051],{"class":214},"常用于文件顶部说明、函数说明等。\n",[99,155053,155054],{"class":101,"line":1180},[99,155055,95679],{"class":214},[14,155057,155058],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155060,155061],{},"不好：",[90,155063,155065],{"className":30359,"code":155064,"language":30361,"meta":21,"style":21},"# age 加 1\nage = age + 1\n",[96,155066,155067,155072],{"__ignoreMap":21},[99,155068,155069],{"class":101,"line":102},[99,155070,155071],{"class":168},"# age 加 1\n",[99,155073,155074,155076,155078,155080,155082],{"class":101,"line":22},[99,155075,146527],{"class":109},[99,155077,155],{"class":105},[99,155079,15694],{"class":109},[99,155081,591],{"class":105},[99,155083,55680],{"class":158},[14,155085,155086],{},"较好：",[90,155088,155090],{"className":30359,"code":155089,"language":30361,"meta":21,"style":21},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[96,155091,155092,155097],{"__ignoreMap":21},[99,155093,155094],{"class":101,"line":102},[99,155095,155096],{"class":168},"# 用户过完生日后，年龄增加一岁\n",[99,155098,155099,155101,155103,155105,155107],{"class":101,"line":22},[99,155100,146527],{"class":109},[99,155102,155],{"class":105},[99,155104,15694],{"class":109},[99,155106,591],{"class":105},[99,155108,55680],{"class":158},[41,155110,155112],{"id":155111},"_22-字面量","2.2 字面量",[14,155114,155115],{},"字面量就是代码中直接写出来的数据。",[90,155117,155119],{"className":30359,"code":155118,"language":30361,"meta":21,"style":21},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[96,155120,155121,155128,155135,155142,155149],{"__ignoreMap":21},[99,155122,155123,155125],{"class":101,"line":102},[99,155124,421],{"class":158},[99,155126,155127],{"class":168},"          # 整数\n",[99,155129,155130,155132],{"class":101,"line":22},[99,155131,159],{"class":158},[99,155133,155134],{"class":168},"         # 小数\n",[99,155136,155137,155139],{"class":101,"line":1165},[99,155138,5831],{"class":214},[99,155140,155141],{"class":168},"      # 字符串\n",[99,155143,155144,155146],{"class":101,"line":1180},[99,155145,31457],{"class":158},[99,155147,155148],{"class":168},"         # 布尔值\n",[99,155150,155151,155153],{"class":101,"line":1186},[99,155152,95667],{"class":158},[99,155154,155155],{"class":168},"         # 空值\n",[14,155157,155158],{},"常见字面量类型：",[247,155160,155161,155171],{},[250,155162,155163],{},[253,155164,155165,155167,155169],{},[256,155166,23725],{},[256,155168,27473],{},[256,155170,25858],{},[294,155172,155173,155184,155195,155206,155218,155230,155242,155255,155267],{},[253,155174,155175,155177,155181],{},[299,155176,113],{},[299,155178,155179],{},[96,155180,421],{},[299,155182,155183],{},"整数",[253,155185,155186,155188,155192],{},[299,155187,149],{},[299,155189,155190],{},[96,155191,159],{},[299,155193,155194],{},"浮点数",[253,155196,155197,155199,155203],{},[299,155198,1285],{},[299,155200,155201],{},[96,155202,5831],{},[299,155204,155205],{},"字符串",[253,155207,155208,155210,155216],{},[299,155209,1340],{},[299,155211,155212,322,155214],{},[96,155213,31457],{},[96,155215,33968],{},[299,155217,65996],{},[253,155219,155220,155223,155227],{},[299,155221,155222],{},"NoneType",[299,155224,155225],{},[96,155226,95667],{},[299,155228,155229],{},"空值",[253,155231,155232,155234,155239],{},[299,155233,154051],{},[299,155235,155236],{},[96,155237,155238],{},"[1, 2, 3]",[299,155240,155241],{},"列表",[253,155243,155244,155247,155252],{},[299,155245,155246],{},"tuple",[299,155248,155249],{},[96,155250,155251],{},"(1, 2, 3)",[299,155253,155254],{},"元组",[253,155256,155257,155259,155264],{},[299,155258,114527],{},[299,155260,155261],{},[96,155262,155263],{},"{\"name\": \"张三\"}",[299,155265,155266],{},"字典",[253,155268,155269,155272,155277],{},[299,155270,155271],{},"set",[299,155273,155274],{},[96,155275,155276],{},"{1, 2, 3}",[299,155278,155279],{},"集合",[41,155281,155283],{"id":155282},"_23-变量","2.3 变量",[14,155285,155286],{},"变量是保存数据的名字。",[90,155288,155290],{"className":30359,"code":155289,"language":30361,"meta":21,"style":21},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[96,155291,155292,155300,155308,155318],{"__ignoreMap":21},[99,155293,155294,155296,155298],{"class":101,"line":102},[99,155295,146517],{"class":109},[99,155297,155],{"class":105},[99,155299,149334],{"class":214},[99,155301,155302,155304,155306],{"class":101,"line":22},[99,155303,146527],{"class":109},[99,155305,155],{"class":105},[99,155307,146532],{"class":158},[99,155309,155310,155313,155315],{"class":101,"line":1165},[99,155311,155312],{"class":109},"height ",[99,155314,155],{"class":105},[99,155316,155317],{"class":158}," 1.75\n",[99,155319,155320,155323,155325],{"class":101,"line":1180},[99,155321,155322],{"class":109},"is_student ",[99,155324,155],{"class":105},[99,155326,153580],{"class":158},[14,155328,155329],{},"Python 的变量不需要提前声明类型：",[90,155331,155333],{"className":30359,"code":155332,"language":30361,"meta":21,"style":21},"score = 100\nscore = \"满分\"\n",[96,155334,155335,155345],{"__ignoreMap":21},[99,155336,155337,155340,155342],{"class":101,"line":102},[99,155338,155339],{"class":109},"score ",[99,155341,155],{"class":105},[99,155343,155344],{"class":158}," 100\n",[99,155346,155347,155349,155351],{"class":101,"line":22},[99,155348,155339],{"class":109},[99,155350,155],{"class":105},[99,155352,155353],{"class":214}," \"满分\"\n",[14,155355,155356],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[41,155358,155360],{"id":155359},"_24-变量命名规则","2.4 变量命名规则",[14,155362,155363],{},"硬性规则：",[53,155365,155366,155369,155372,155375],{},[56,155367,155368],{},"只能由字母、数字、下划线组成。",[56,155370,155371],{},"不能以数字开头。",[56,155373,155374],{},"不能使用 Python 关键字。",[56,155376,155377],{},"区分大小写。",[90,155379,155381],{"className":30359,"code":155380,"language":30361,"meta":21,"style":21},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[96,155382,155383,155392,155401],{"__ignoreMap":21},[99,155384,155385,155388,155390],{"class":101,"line":102},[99,155386,155387],{"class":109},"user_name ",[99,155389,155],{"class":105},[99,155391,146522],{"class":214},[99,155393,155394,155397,155399],{"class":101,"line":22},[99,155395,155396],{"class":109},"age2 ",[99,155398,155],{"class":105},[99,155400,146532],{"class":158},[99,155402,155403,155406,155408],{"class":101,"line":1165},[99,155404,155405],{"class":109},"_token ",[99,155407,155],{"class":105},[99,155409,155410],{"class":214}," \"abc\"\n",[14,155412,155413],{},"错误写法：",[90,155415,155417],{"className":30359,"code":155416,"language":30361,"meta":21,"style":21},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[96,155418,155419,155428,155440],{"__ignoreMap":21},[99,155420,155421,155424,155426],{"class":101,"line":102},[99,155422,155423],{"class":77384},"2age",[99,155425,13551],{"class":105},[99,155427,146532],{"class":158},[99,155429,155430,155432,155434,155436,155438],{"class":101,"line":22},[99,155431,131565],{"class":109},[99,155433,642],{"class":105},[99,155435,146517],{"class":109},[99,155437,155],{"class":105},[99,155439,146522],{"class":214},[99,155441,155442,155444,155446],{"class":101,"line":1165},[99,155443,14681],{"class":105},[99,155445,13551],{"class":105},[99,155447,155448],{"class":214}," \"一班\"\n",[14,155450,155451],{},"查看关键字：",[90,155453,155455],{"className":30359,"code":155454,"language":30361,"meta":21,"style":21},"import keyword\n\nprint(keyword.kwlist)\n",[96,155456,155457,155464,155468],{"__ignoreMap":21},[99,155458,155459,155461],{"class":101,"line":102},[99,155460,30373],{"class":105},[99,155462,155463],{"class":109}," keyword\n",[99,155465,155466],{"class":101,"line":22},[99,155467,2386],{"emptyLinePlaceholder":26},[99,155469,155470,155472],{"class":101,"line":1165},[99,155471,30396],{"class":158},[99,155473,155474],{"class":109},"(keyword.kwlist)\n",[14,155476,155477],{},"推荐命名风格：",[90,155479,155481],{"className":30359,"code":155480,"language":30361,"meta":21,"style":21},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[96,155482,155483,155492,155502],{"__ignoreMap":21},[99,155484,155485,155488,155490],{"class":101,"line":102},[99,155486,155487],{"class":109},"student_name ",[99,155489,155],{"class":105},[99,155491,149334],{"class":214},[99,155493,155494,155497,155499],{"class":101,"line":22},[99,155495,155496],{"class":109},"total_price ",[99,155498,155],{"class":105},[99,155500,155501],{"class":158}," 99.8\n",[99,155503,155504,155507,155509],{"class":101,"line":1165},[99,155505,155506],{"class":109},"is_finished ",[99,155508,155],{"class":105},[99,155510,125788],{"class":158},[14,155512,155513],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[41,155515,50713],{"id":50712},[14,155517,104347,155518,155521],{},[96,155519,155520],{},"type()"," 查看数据类型：",[90,155523,155525],{"className":30359,"code":155524,"language":30361,"meta":21,"style":21},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[96,155526,155527,155541,155555,155569,155583],{"__ignoreMap":21},[99,155528,155529,155531,155533,155535,155537,155539],{"class":101,"line":102},[99,155530,30396],{"class":158},[99,155532,110],{"class":109},[99,155534,103088],{"class":158},[99,155536,110],{"class":109},[99,155538,421],{"class":158},[99,155540,30478],{"class":109},[99,155542,155543,155545,155547,155549,155551,155553],{"class":101,"line":22},[99,155544,30396],{"class":158},[99,155546,110],{"class":109},[99,155548,103088],{"class":158},[99,155550,110],{"class":109},[99,155552,159],{"class":158},[99,155554,30478],{"class":109},[99,155556,155557,155559,155561,155563,155565,155567],{"class":101,"line":1165},[99,155558,30396],{"class":158},[99,155560,110],{"class":109},[99,155562,103088],{"class":158},[99,155564,110],{"class":109},[99,155566,5831],{"class":214},[99,155568,30478],{"class":109},[99,155570,155571,155573,155575,155577,155579,155581],{"class":101,"line":1180},[99,155572,30396],{"class":158},[99,155574,110],{"class":109},[99,155576,103088],{"class":158},[99,155578,110],{"class":109},[99,155580,31457],{"class":158},[99,155582,30478],{"class":109},[99,155584,155585,155587,155589,155591,155593,155595],{"class":101,"line":1186},[99,155586,30396],{"class":158},[99,155588,110],{"class":109},[99,155590,103088],{"class":158},[99,155592,110],{"class":109},[99,155594,95667],{"class":158},[99,155596,30478],{"class":109},[14,155598,155599],{},"输出类似：",[90,155601,155604],{"className":155602,"code":155603,"language":5174,"meta":21},[5172],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[96,155605,155603],{"__ignoreMap":21},[14,155607,9012,155608,107264,155610,155612,155613,155615,155616,21487,155618,155615,155620,155622],{},[96,155609,1340],{},[96,155611,113],{}," 的子类，",[96,155614,31457],{}," 可以当作 ",[96,155617,327],{},[96,155619,33968],{},[96,155621,301],{},"，但业务代码中不要滥用。",[90,155624,155626],{"className":30359,"code":155625,"language":30361,"meta":21,"style":21},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[96,155627,155628,155646],{"__ignoreMap":21},[99,155629,155630,155632,155634,155636,155638,155640,155643],{"class":101,"line":102},[99,155631,30396],{"class":158},[99,155633,110],{"class":109},[99,155635,31457],{"class":158},[99,155637,45547],{"class":105},[99,155639,25107],{"class":158},[99,155641,155642],{"class":109},")   ",[99,155644,155645],{"class":168},"# 2\n",[99,155647,155648,155650,155652,155654,155656,155658,155660],{"class":101,"line":22},[99,155649,30396],{"class":158},[99,155651,110],{"class":109},[99,155653,33968],{"class":158},[99,155655,45547],{"class":105},[99,155657,25107],{"class":158},[99,155659,45789],{"class":109},[99,155661,155662],{"class":168},"# 1\n",[41,155664,155666],{"id":155665},"_26-类型转换","2.6 类型转换",[14,155668,155669],{},"常用转换函数：",[90,155671,155673],{"className":30359,"code":155672,"language":30361,"meta":21,"style":21},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[96,155674,155675,155685,155696,155706],{"__ignoreMap":21},[99,155676,155677,155679,155681,155683],{"class":101,"line":102},[99,155678,113],{"class":158},[99,155680,110],{"class":109},[99,155682,54297],{"class":214},[99,155684,116],{"class":109},[99,155686,155687,155689,155691,155694],{"class":101,"line":22},[99,155688,149],{"class":158},[99,155690,110],{"class":109},[99,155692,155693],{"class":214},"\"3.14\"",[99,155695,116],{"class":109},[99,155697,155698,155700,155702,155704],{"class":101,"line":1165},[99,155699,1285],{"class":158},[99,155701,110],{"class":109},[99,155703,421],{"class":158},[99,155705,116],{"class":109},[99,155707,155708,155710,155712,155714],{"class":101,"line":1180},[99,155709,1340],{"class":158},[99,155711,110],{"class":109},[99,155713,327],{"class":158},[99,155715,116],{"class":109},[14,155717,15122],{},[90,155719,155721],{"className":30359,"code":155720,"language":30361,"meta":21,"style":21},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[96,155722,155723,155732,155743],{"__ignoreMap":21},[99,155724,155725,155727,155729],{"class":101,"line":102},[99,155726,146527],{"class":109},[99,155728,155],{"class":105},[99,155730,155731],{"class":214}," \"18\"\n",[99,155733,155734,155736,155738,155740],{"class":101,"line":22},[99,155735,146527],{"class":109},[99,155737,155],{"class":105},[99,155739,2368],{"class":158},[99,155741,155742],{"class":109},"(age)\n",[99,155744,155745,155747,155750,155752,155754],{"class":101,"line":1165},[99,155746,30396],{"class":158},[99,155748,155749],{"class":109},"(age ",[99,155751,591],{"class":105},[99,155753,25107],{"class":158},[99,155755,116],{"class":109},[14,155757,155758],{},"输入得到的内容永远是字符串：",[90,155760,155762],{"className":30359,"code":155761,"language":30361,"meta":21,"style":21},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[96,155763,155764,155780],{"__ignoreMap":21},[99,155765,155766,155769,155771,155773,155775,155778],{"class":101,"line":102},[99,155767,155768],{"class":109},"num ",[99,155770,155],{"class":105},[99,155772,60586],{"class":158},[99,155774,110],{"class":109},[99,155776,155777],{"class":214},"\"请输入数字:\"",[99,155779,116],{"class":109},[99,155781,155782,155784,155786,155788,155791],{"class":101,"line":22},[99,155783,30396],{"class":158},[99,155785,110],{"class":109},[99,155787,103088],{"class":158},[99,155789,155790],{"class":109},"(num))  ",[99,155792,155793],{"class":168},"# str\n",[14,155795,155796],{},"如果要做数学运算，必须转换：",[90,155798,155800],{"className":30359,"code":155799,"language":30361,"meta":21,"style":21},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[96,155801,155802,155820],{"__ignoreMap":21},[99,155803,155804,155806,155808,155810,155812,155814,155816,155818],{"class":101,"line":102},[99,155805,155768],{"class":109},[99,155807,155],{"class":105},[99,155809,2368],{"class":158},[99,155811,110],{"class":109},[99,155813,53802],{"class":158},[99,155815,110],{"class":109},[99,155817,155777],{"class":214},[99,155819,30478],{"class":109},[99,155821,155822,155824,155826,155828,155830],{"class":101,"line":22},[99,155823,30396],{"class":158},[99,155825,45600],{"class":109},[99,155827,591],{"class":105},[99,155829,2024],{"class":158},[99,155831,116],{"class":109},[14,155833,155834],{},"常见错误：",[90,155836,155838],{"className":30359,"code":155837,"language":30361,"meta":21,"style":21},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[96,155839,155840,155853],{"__ignoreMap":21},[99,155841,155842,155844,155846,155848,155850],{"class":101,"line":102},[99,155843,113],{"class":158},[99,155845,110],{"class":109},[99,155847,155693],{"class":214},[99,155849,155642],{"class":109},[99,155851,155852],{"class":168},"# 错误\n",[99,155854,155855,155857,155859,155862,155865],{"class":101,"line":22},[99,155856,113],{"class":158},[99,155858,110],{"class":109},[99,155860,155861],{"class":214},"\"abc\"",[99,155863,155864],{"class":109},")    ",[99,155866,155852],{"class":168},[14,155868,155869],{},"正确写法：",[90,155871,155873],{"className":30359,"code":155872,"language":30361,"meta":21,"style":21},"num = float(\"3.14\")\n",[96,155874,155875],{"__ignoreMap":21},[99,155876,155877,155879,155881,155883,155885,155887],{"class":101,"line":102},[99,155878,155768],{"class":109},[99,155880,155],{"class":105},[99,155882,109778],{"class":158},[99,155884,110],{"class":109},[99,155886,155693],{"class":214},[99,155888,116],{"class":109},[41,155890,155892],{"id":155891},"_27-运算符","2.7 运算符",[70,155894,155896],{"id":155895},"_271-算术运算符","2.7.1 算术运算符",[247,155898,155899,155910],{},[250,155900,155901],{},[253,155902,155903,155906,155908],{},[256,155904,155905],{},"运算符",[256,155907,25858],{},[256,155909,27473],{},[294,155911,155912,155926,155940,155954,155968,155982,155996],{},[253,155913,155914,155918,155921],{},[299,155915,155916],{},[96,155917,591],{},[299,155919,155920],{},"加法",[299,155922,155923],{},[96,155924,155925],{},"1 + 2",[253,155927,155928,155932,155935],{},[299,155929,155930],{},[96,155931,642],{},[299,155933,155934],{},"减法",[299,155936,155937],{},[96,155938,155939],{},"5 - 3",[253,155941,155942,155946,155949],{},[299,155943,155944],{},[96,155945,565],{},[299,155947,155948],{},"乘法",[299,155950,155951],{},[96,155952,155953],{},"2 * 3",[253,155955,155956,155960,155963],{},[299,155957,155958],{},[96,155959,694],{},[299,155961,155962],{},"除法，结果是浮点数",[299,155964,155965],{},[96,155966,155967],{},"5 \u002F 2",[253,155969,155970,155974,155977],{},[299,155971,155972],{},[96,155973,33310],{},[299,155975,155976],{},"整除",[299,155978,155979],{},[96,155980,155981],{},"5 \u002F\u002F 2",[253,155983,155984,155988,155991],{},[299,155985,155986],{},[96,155987,438],{},[299,155989,155990],{},"取余",[299,155992,155993],{},[96,155994,155995],{},"5 % 2",[253,155997,155998,156002,156005],{},[299,155999,156000],{},[96,156001,10648],{},[299,156003,156004],{},"幂运算",[299,156006,156007],{},[96,156008,156009],{},"2 ** 3",[14,156011,15122],{},[90,156013,156015],{"className":30359,"code":156014,"language":30361,"meta":21,"style":21},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[96,156016,156017,156035,156052,156069],{"__ignoreMap":21},[99,156018,156019,156021,156023,156025,156028,156030,156032],{"class":101,"line":102},[99,156020,30396],{"class":158},[99,156022,110],{"class":109},[99,156024,429],{"class":158},[99,156026,156027],{"class":105}," \u002F",[99,156029,14742],{"class":158},[99,156031,155642],{"class":109},[99,156033,156034],{"class":168},"# 2.5\n",[99,156036,156037,156039,156041,156043,156046,156048,156050],{"class":101,"line":22},[99,156038,30396],{"class":158},[99,156040,110],{"class":109},[99,156042,429],{"class":158},[99,156044,156045],{"class":105}," \u002F\u002F",[99,156047,14742],{"class":158},[99,156049,45789],{"class":109},[99,156051,155645],{"class":168},[99,156053,156054,156056,156058,156060,156063,156065,156067],{"class":101,"line":1165},[99,156055,30396],{"class":158},[99,156057,110],{"class":109},[99,156059,429],{"class":158},[99,156061,156062],{"class":105}," %",[99,156064,14742],{"class":158},[99,156066,155642],{"class":109},[99,156068,155662],{"class":168},[99,156070,156071,156073,156075,156077,156080,156082,156084],{"class":101,"line":1180},[99,156072,30396],{"class":158},[99,156074,110],{"class":109},[99,156076,187],{"class":158},[99,156078,156079],{"class":105}," **",[99,156081,78051],{"class":158},[99,156083,45789],{"class":109},[99,156085,156086],{"class":168},"# 8\n",[70,156088,156090],{"id":156089},"_272-赋值运算符","2.7.2 赋值运算符",[90,156092,156094],{"className":30359,"code":156093,"language":30361,"meta":21,"style":21},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[96,156095,156096,156104,156112,156120,156128],{"__ignoreMap":21},[99,156097,156098,156100,156102],{"class":101,"line":102},[99,156099,155768],{"class":109},[99,156101,155],{"class":105},[99,156103,58409],{"class":158},[99,156105,156106,156108,156110],{"class":101,"line":22},[99,156107,155768],{"class":109},[99,156109,9464],{"class":105},[99,156111,54408],{"class":158},[99,156113,156114,156116,156118],{"class":101,"line":1165},[99,156115,155768],{"class":109},[99,156117,150233],{"class":105},[99,156119,47704],{"class":158},[99,156121,156122,156124,156126],{"class":101,"line":1180},[99,156123,155768],{"class":109},[99,156125,137129],{"class":105},[99,156127,120017],{"class":158},[99,156129,156130,156132,156135],{"class":101,"line":1186},[99,156131,155768],{"class":109},[99,156133,156134],{"class":105},"\u002F=",[99,156136,47704],{"class":158},[14,156138,156139],{},"等价关系：",[90,156141,156143],{"className":30359,"code":156142,"language":30361,"meta":21,"style":21},"num += 1\nnum = num + 1\n",[96,156144,156145,156153],{"__ignoreMap":21},[99,156146,156147,156149,156151],{"class":101,"line":102},[99,156148,155768],{"class":109},[99,156150,9464],{"class":105},[99,156152,55680],{"class":158},[99,156154,156155,156157,156159,156162,156164],{"class":101,"line":22},[99,156156,155768],{"class":109},[99,156158,155],{"class":105},[99,156160,156161],{"class":109}," num ",[99,156163,591],{"class":105},[99,156165,55680],{"class":158},[14,156167,156168,156169,100999,156172,28366],{},"Python 没有 ",[96,156170,156171],{},"num++",[96,156173,156174],{},"num--",[70,156176,156178],{"id":156177},"_273-比较运算符","2.7.3 比较运算符",[14,156180,156181],{},"比较运算结果是布尔值。",[90,156183,156185],{"className":30359,"code":156184,"language":30361,"meta":21,"style":21},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[96,156186,156187,156201,156216,156230],{"__ignoreMap":21},[99,156188,156189,156191,156193,156195,156197,156199],{"class":101,"line":102},[99,156190,30396],{"class":158},[99,156192,110],{"class":109},[99,156194,556],{"class":158},[99,156196,26211],{"class":105},[99,156198,2134],{"class":158},[99,156200,116],{"class":109},[99,156202,156203,156205,156207,156209,156212,156214],{"class":101,"line":22},[99,156204,30396],{"class":158},[99,156206,110],{"class":109},[99,156208,556],{"class":158},[99,156210,156211],{"class":105}," >=",[99,156213,2024],{"class":158},[99,156215,116],{"class":109},[99,156217,156218,156220,156222,156224,156226,156228],{"class":101,"line":1165},[99,156219,30396],{"class":158},[99,156221,110],{"class":109},[99,156223,556],{"class":158},[99,156225,101540],{"class":105},[99,156227,2069],{"class":158},[99,156229,116],{"class":109},[99,156231,156232,156234,156236,156238,156241,156243],{"class":101,"line":1180},[99,156233,30396],{"class":158},[99,156235,110],{"class":109},[99,156237,556],{"class":158},[99,156239,156240],{"class":105}," !=",[99,156242,2069],{"class":158},[99,156244,116],{"class":109},[14,156246,156247,156248,156250,156251,28366],{},"注意：判断相等用 ",[96,156249,2935],{},"，赋值用 ",[96,156252,155],{},[90,156254,156256],{"className":30359,"code":156255,"language":30361,"meta":21,"style":21},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[96,156257,156258,156270],{"__ignoreMap":21},[99,156259,156260,156262,156264,156267],{"class":101,"line":102},[99,156261,146527],{"class":109},[99,156263,155],{"class":105},[99,156265,156266],{"class":158}," 18",[99,156268,156269],{"class":168},"       # 赋值\n",[99,156271,156272,156274,156276,156278],{"class":101,"line":22},[99,156273,146527],{"class":109},[99,156275,2935],{"class":105},[99,156277,156266],{"class":158},[99,156279,156280],{"class":168},"      # 判断是否相等\n",[70,156282,156284],{"id":156283},"_274-逻辑运算符","2.7.4 逻辑运算符",[247,156286,156287,156295],{},[250,156288,156289],{},[253,156290,156291,156293],{},[256,156292,155905],{},[256,156294,25858],{},[294,156296,156297,156306,156315],{},[253,156298,156299,156303],{},[299,156300,156301],{},[96,156302,30443],{},[299,156304,156305],{},"并且",[253,156307,156308,156312],{},[299,156309,156310],{},[96,156311,115071],{},[299,156313,156314],{},"或者",[253,156316,156317,156322],{},[299,156318,156319],{},[96,156320,156321],{},"not",[299,156323,156324],{},"取反",[90,156326,156328],{"className":30359,"code":156327,"language":30361,"meta":21,"style":21},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[96,156329,156330,156338,156347,156351,156366,156380],{"__ignoreMap":21},[99,156331,156332,156334,156336],{"class":101,"line":102},[99,156333,146527],{"class":109},[99,156335,155],{"class":105},[99,156337,88046],{"class":158},[99,156339,156340,156343,156345],{"class":101,"line":22},[99,156341,156342],{"class":109},"has_ticket ",[99,156344,155],{"class":105},[99,156346,153580],{"class":158},[99,156348,156349],{"class":101,"line":1165},[99,156350,2386],{"emptyLinePlaceholder":26},[99,156352,156353,156355,156357,156359,156361,156363],{"class":101,"line":1180},[99,156354,30396],{"class":158},[99,156356,155749],{"class":109},[99,156358,1696],{"class":105},[99,156360,156266],{"class":158},[99,156362,120410],{"class":105},[99,156364,156365],{"class":109}," has_ticket)\n",[99,156367,156368,156370,156372,156374,156376,156378],{"class":101,"line":1186},[99,156369,30396],{"class":158},[99,156371,155749],{"class":109},[99,156373,1020],{"class":105},[99,156375,156266],{"class":158},[99,156377,114182],{"class":105},[99,156379,156365],{"class":109},[99,156381,156382,156384,156386,156388],{"class":101,"line":1200},[99,156383,30396],{"class":158},[99,156385,110],{"class":109},[99,156387,156321],{"class":105},[99,156389,156365],{"class":109},[41,156391,156393],{"id":156392},"_28-字符串定义","2.8 字符串定义",[14,156395,156396],{},"三种常见写法：",[90,156398,156400],{"className":30359,"code":156399,"language":30361,"meta":21,"style":21},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[96,156401,156402,156412,156421,156431],{"__ignoreMap":21},[99,156403,156404,156407,156409],{"class":101,"line":102},[99,156405,156406],{"class":109},"name1 ",[99,156408,155],{"class":105},[99,156410,156411],{"class":214}," '小明'\n",[99,156413,156414,156417,156419],{"class":101,"line":22},[99,156415,156416],{"class":109},"name2 ",[99,156418,155],{"class":105},[99,156420,149334],{"class":214},[99,156422,156423,156426,156428],{"class":101,"line":1165},[99,156424,156425],{"class":109},"text ",[99,156427,155],{"class":105},[99,156429,156430],{"class":214}," \"\"\"这是多行字符串\n",[99,156432,156433],{"class":101,"line":1180},[99,156434,156435],{"class":214},"可以换行\"\"\"\n",[14,156437,156438],{},"字符串中包含引号：",[90,156440,156442],{"className":30359,"code":156441,"language":30361,"meta":21,"style":21},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[96,156443,156444,156454,156464],{"__ignoreMap":21},[99,156445,156446,156449,156451],{"class":101,"line":102},[99,156447,156448],{"class":109},"msg ",[99,156450,155],{"class":105},[99,156452,156453],{"class":214}," \"他说:'你好'\"\n",[99,156455,156456,156459,156461],{"class":101,"line":22},[99,156457,156458],{"class":109},"msg2 ",[99,156460,155],{"class":105},[99,156462,156463],{"class":214}," '他说:\"你好\"'\n",[99,156465,156466,156469,156471,156474,156477,156480,156482],{"class":101,"line":1165},[99,156467,156468],{"class":109},"msg3 ",[99,156470,155],{"class":105},[99,156472,156473],{"class":214}," \"他说:",[99,156475,156476],{"class":158},"\\\"",[99,156478,156479],{"class":214},"你好",[99,156481,156476],{"class":158},[99,156483,25122],{"class":214},[14,156485,156486],{},"常见转义字符：",[247,156488,156489,156498],{},[250,156490,156491],{},[253,156492,156493,156496],{},[256,156494,156495],{},"写法",[256,156497,100681],{},[294,156499,156500,156510,156519,156529,156538],{},[253,156501,156502,156507],{},[299,156503,156504],{},[96,156505,156506],{},"\\n",[299,156508,156509],{},"换行",[253,156511,156512,156516],{},[299,156513,156514],{},[96,156515,1216],{},[299,156517,156518],{},"制表符",[253,156520,156521,156526],{},[299,156522,156523],{},[96,156524,156525],{},"\\\\",[299,156527,156528],{},"反斜杠",[253,156530,156531,156535],{},[299,156532,156533],{},[96,156534,156476],{},[299,156536,156537],{},"双引号",[253,156539,156540,156545],{},[299,156541,156542],{},[96,156543,156544],{},"\\'",[299,156546,156547],{},"单引号",[41,156549,156551],{"id":156550},"_29-字符串拼接","2.9 字符串拼接",[90,156553,156555],{"className":30359,"code":156554,"language":30361,"meta":21,"style":21},"name = \"小明\"\nprint(\"你好，\" + name)\n",[96,156556,156557,156565],{"__ignoreMap":21},[99,156558,156559,156561,156563],{"class":101,"line":102},[99,156560,146517],{"class":109},[99,156562,155],{"class":105},[99,156564,149334],{"class":214},[99,156566,156567,156569,156571,156574,156576],{"class":101,"line":22},[99,156568,30396],{"class":158},[99,156570,110],{"class":109},[99,156572,156573],{"class":214},"\"你好，\"",[99,156575,45547],{"class":105},[99,156577,156578],{"class":109}," name)\n",[14,156580,156581],{},"字符串只能和字符串拼接：",[90,156583,156585],{"className":30359,"code":156584,"language":30361,"meta":21,"style":21},"age = 18\nprint(\"年龄:\" + str(age))\n",[96,156586,156587,156595],{"__ignoreMap":21},[99,156588,156589,156591,156593],{"class":101,"line":102},[99,156590,146527],{"class":109},[99,156592,155],{"class":105},[99,156594,146532],{"class":158},[99,156596,156597,156599,156601,156603,156605,156607],{"class":101,"line":22},[99,156598,30396],{"class":158},[99,156600,110],{"class":109},[99,156602,146498],{"class":214},[99,156604,45547],{"class":105},[99,156606,73900],{"class":158},[99,156608,156609],{"class":109},"(age))\n",[14,156611,156612],{},"更推荐使用格式化字符串。",[41,156614,156616],{"id":156615},"_210-字符串格式化","2.10 字符串格式化",[70,156618,156620],{"id":156619},"_2101-百分号格式化","2.10.1 百分号格式化",[90,156622,156624],{"className":30359,"code":156623,"language":30361,"meta":21,"style":21},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[96,156625,156626,156634,156642,156651,156655],{"__ignoreMap":21},[99,156627,156628,156630,156632],{"class":101,"line":102},[99,156629,146517],{"class":109},[99,156631,155],{"class":105},[99,156633,149334],{"class":214},[99,156635,156636,156638,156640],{"class":101,"line":22},[99,156637,146527],{"class":109},[99,156639,155],{"class":105},[99,156641,146532],{"class":158},[99,156643,156644,156646,156648],{"class":101,"line":1165},[99,156645,155339],{"class":109},[99,156647,155],{"class":105},[99,156649,156650],{"class":158}," 95.5\n",[99,156652,156653],{"class":101,"line":1180},[99,156654,2386],{"emptyLinePlaceholder":26},[99,156656,156657,156659,156661,156664,156667,156670,156673,156676,156679,156681,156683],{"class":101,"line":1186},[99,156658,30396],{"class":158},[99,156660,110],{"class":109},[99,156662,156663],{"class":214},"\"姓名:",[99,156665,156666],{"class":158},"%s",[99,156668,156669],{"class":214}," 年龄:",[99,156671,156672],{"class":158},"%d",[99,156674,156675],{"class":214}," 分数:",[99,156677,156678],{"class":158},"%.1f",[99,156680,361],{"class":214},[99,156682,156062],{"class":105},[99,156684,156685],{"class":109}," (name, age, score))\n",[14,156687,156688],{},"常用占位符：",[247,156690,156691,156700],{},[250,156692,156693],{},[253,156694,156695,156698],{},[256,156696,156697],{},"占位符",[256,156699,25858],{},[294,156701,156702,156710,156718],{},[253,156703,156704,156708],{},[299,156705,156706],{},[96,156707,156666],{},[299,156709,155205],{},[253,156711,156712,156716],{},[299,156713,156714],{},[96,156715,156672],{},[299,156717,155183],{},[253,156719,156720,156725],{},[299,156721,156722],{},[96,156723,156724],{},"%f",[299,156726,155194],{},[14,156728,156729],{},"精度控制：",[90,156731,156733],{"className":30359,"code":156732,"language":30361,"meta":21,"style":21},"price = 12.3456\nprint(\"%.2f\" % price)\n",[96,156734,156735,156744],{"__ignoreMap":21},[99,156736,156737,156739,156741],{"class":101,"line":102},[99,156738,146662],{"class":109},[99,156740,155],{"class":105},[99,156742,156743],{"class":158}," 12.3456\n",[99,156745,156746,156748,156750,156752,156755,156757,156759],{"class":101,"line":22},[99,156747,30396],{"class":158},[99,156749,110],{"class":109},[99,156751,361],{"class":214},[99,156753,156754],{"class":158},"%.2f",[99,156756,361],{"class":214},[99,156758,156062],{"class":105},[99,156760,156761],{"class":109}," price)\n",[70,156763,156765],{"id":156764},"_2102-format方法","2.10.2 format方法",[90,156767,156769],{"className":30359,"code":156768,"language":30361,"meta":21,"style":21},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[96,156770,156771,156779,156787,156791,156810,156830],{"__ignoreMap":21},[99,156772,156773,156775,156777],{"class":101,"line":102},[99,156774,146517],{"class":109},[99,156776,155],{"class":105},[99,156778,149334],{"class":214},[99,156780,156781,156783,156785],{"class":101,"line":22},[99,156782,146527],{"class":109},[99,156784,155],{"class":105},[99,156786,146532],{"class":158},[99,156788,156789],{"class":101,"line":1165},[99,156790,2386],{"emptyLinePlaceholder":26},[99,156792,156793,156795,156797,156799,156801,156803,156805,156807],{"class":101,"line":1180},[99,156794,30396],{"class":158},[99,156796,110],{"class":109},[99,156798,156663],{"class":214},[99,156800,32440],{"class":158},[99,156802,156669],{"class":214},[99,156804,32440],{"class":158},[99,156806,361],{"class":214},[99,156808,156809],{"class":109},".format(name, age))\n",[99,156811,156812,156814,156816,156818,156821,156823,156826,156828],{"class":101,"line":1186},[99,156813,30396],{"class":158},[99,156815,110],{"class":109},[99,156817,156663],{"class":214},[99,156819,156820],{"class":158},"{0}",[99,156822,156669],{"class":214},[99,156824,156825],{"class":158},"{1}",[99,156827,361],{"class":214},[99,156829,156809],{"class":109},[99,156831,156832,156834,156836,156838,156841,156843,156846,156848,156851,156853,156855,156858,156860,156862],{"class":101,"line":1200},[99,156833,30396],{"class":158},[99,156835,110],{"class":109},[99,156837,156663],{"class":214},[99,156839,156840],{"class":158},"{name}",[99,156842,156669],{"class":214},[99,156844,156845],{"class":158},"{age}",[99,156847,361],{"class":214},[99,156849,156850],{"class":109},".format(",[99,156852,79791],{"class":5203},[99,156854,155],{"class":105},[99,156856,156857],{"class":109},"name, ",[99,156859,70202],{"class":5203},[99,156861,155],{"class":105},[99,156863,156864],{"class":109},"age))\n",[70,156866,156868],{"id":156867},"_2103-f-string","2.10.3 f-string",[14,156870,156871],{},"推荐写法：",[90,156873,156875],{"className":30359,"code":156874,"language":30361,"meta":21,"style":21},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[96,156876,156877,156885,156893,156901,156905],{"__ignoreMap":21},[99,156878,156879,156881,156883],{"class":101,"line":102},[99,156880,146517],{"class":109},[99,156882,155],{"class":105},[99,156884,149334],{"class":214},[99,156886,156887,156889,156891],{"class":101,"line":22},[99,156888,146527],{"class":109},[99,156890,155],{"class":105},[99,156892,146532],{"class":158},[99,156894,156895,156897,156899],{"class":101,"line":1165},[99,156896,155339],{"class":109},[99,156898,155],{"class":105},[99,156900,156650],{"class":158},[99,156902,156903],{"class":101,"line":1180},[99,156904,2386],{"emptyLinePlaceholder":26},[99,156906,156907,156909,156911,156913,156915,156917,156919,156921,156923,156925,156927,156929,156931,156933,156936,156939,156941,156943],{"class":101,"line":1186},[99,156908,30396],{"class":158},[99,156910,110],{"class":109},[99,156912,162],{"class":105},[99,156914,156663],{"class":214},[99,156916,1006],{"class":158},[99,156918,79791],{"class":109},[99,156920,1056],{"class":158},[99,156922,156669],{"class":214},[99,156924,1006],{"class":158},[99,156926,70202],{"class":109},[99,156928,1056],{"class":158},[99,156930,156675],{"class":214},[99,156932,1006],{"class":158},[99,156934,156935],{"class":109},"score",[99,156937,156938],{"class":105},":.1f",[99,156940,1056],{"class":158},[99,156942,361],{"class":214},[99,156944,116],{"class":109},[14,156946,156947],{},"表达式也可以放进去：",[90,156949,156951],{"className":30359,"code":156950,"language":30361,"meta":21,"style":21},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[96,156952,156953,156961,156969],{"__ignoreMap":21},[99,156954,156955,156957,156959],{"class":101,"line":102},[99,156956,146662],{"class":109},[99,156958,155],{"class":105},[99,156960,146667],{"class":158},[99,156962,156963,156965,156967],{"class":101,"line":22},[99,156964,146672],{"class":109},[99,156966,155],{"class":105},[99,156968,54408],{"class":158},[99,156970,156971,156973,156975,156977,156980,156982,156984,156986,156989,156991,156994],{"class":101,"line":1165},[99,156972,30396],{"class":158},[99,156974,110],{"class":109},[99,156976,162],{"class":105},[99,156978,156979],{"class":214},"\"总价:",[99,156981,1006],{"class":158},[99,156983,146662],{"class":109},[99,156985,565],{"class":105},[99,156987,156988],{"class":109}," count",[99,156990,1056],{"class":158},[99,156992,156993],{"class":214},"元\"",[99,156995,116],{"class":109},[41,156997,156999],{"id":156998},"_211-input输入","2.11 input输入",[14,157001,157002,157005],{},[96,157003,157004],{},"input()"," 会暂停程序，等待用户输入。",[90,157007,157009],{"className":30359,"code":157008,"language":30361,"meta":21,"style":21},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[96,157010,157011,157025],{"__ignoreMap":21},[99,157012,157013,157015,157017,157019,157021,157023],{"class":101,"line":102},[99,157014,146517],{"class":109},[99,157016,155],{"class":105},[99,157018,60586],{"class":158},[99,157020,110],{"class":109},[99,157022,152360],{"class":214},[99,157024,116],{"class":109},[99,157026,157027,157029,157031,157033,157036,157038,157040,157042,157044],{"class":101,"line":22},[99,157028,30396],{"class":158},[99,157030,110],{"class":109},[99,157032,162],{"class":105},[99,157034,157035],{"class":214},"\"你好，",[99,157037,1006],{"class":158},[99,157039,79791],{"class":109},[99,157041,1056],{"class":158},[99,157043,361],{"class":214},[99,157045,116],{"class":109},[14,157047,157048],{},"输入整数：",[90,157050,157052],{"className":30359,"code":157051,"language":30361,"meta":21,"style":21},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[96,157053,157054,157072],{"__ignoreMap":21},[99,157055,157056,157058,157060,157062,157064,157066,157068,157070],{"class":101,"line":102},[99,157057,146527],{"class":109},[99,157059,155],{"class":105},[99,157061,2368],{"class":158},[99,157063,110],{"class":109},[99,157065,53802],{"class":158},[99,157067,110],{"class":109},[99,157069,152375],{"class":214},[99,157071,30478],{"class":109},[99,157073,157074,157076,157078,157080,157083,157085,157087,157089,157092,157094],{"class":101,"line":22},[99,157075,30396],{"class":158},[99,157077,110],{"class":109},[99,157079,162],{"class":105},[99,157081,157082],{"class":214},"\"明年你",[99,157084,1006],{"class":158},[99,157086,146527],{"class":109},[99,157088,591],{"class":105},[99,157090,157091],{"class":158}," 1}",[99,157093,149385],{"class":214},[99,157095,116],{"class":109},[14,157097,157098],{},"输入小数：",[90,157100,157102],{"className":30359,"code":157101,"language":30361,"meta":21,"style":21},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[96,157103,157104,157123],{"__ignoreMap":21},[99,157105,157106,157108,157110,157112,157114,157116,157118,157121],{"class":101,"line":102},[99,157107,155312],{"class":109},[99,157109,155],{"class":105},[99,157111,109778],{"class":158},[99,157113,110],{"class":109},[99,157115,53802],{"class":158},[99,157117,110],{"class":109},[99,157119,157120],{"class":214},"\"请输入身高:\"",[99,157122,30478],{"class":109},[99,157124,157125,157127,157129,157131,157134,157136,157138,157141,157143,157146],{"class":101,"line":22},[99,157126,30396],{"class":158},[99,157128,110],{"class":109},[99,157130,162],{"class":105},[99,157132,157133],{"class":214},"\"身高:",[99,157135,1006],{"class":158},[99,157137,24970],{"class":109},[99,157139,157140],{"class":105},":.2f",[99,157142,1056],{"class":158},[99,157144,157145],{"class":214},"米\"",[99,157147,116],{"class":109},[41,157149,157151],{"id":157150},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157153,123273],{},[53,157155,157156,157159,157162,157165],{},[56,157157,157158],{},"输入商品单价。",[56,157160,157161],{},"输入购买数量。",[56,157163,157164],{},"输入折扣，例如 0.8 表示八折。",[56,157166,157167],{},"输出最终金额，保留两位小数。",[14,157169,10022],{},[90,157171,157173],{"className":30359,"code":157172,"language":30361,"meta":21,"style":21},"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",[96,157174,157175,157194,157213,157233,157237,157257,157261,157284,157305,157327],{"__ignoreMap":21},[99,157176,157177,157179,157181,157183,157185,157187,157189,157192],{"class":101,"line":102},[99,157178,146662],{"class":109},[99,157180,155],{"class":105},[99,157182,109778],{"class":158},[99,157184,110],{"class":109},[99,157186,53802],{"class":158},[99,157188,110],{"class":109},[99,157190,157191],{"class":214},"\"请输入商品单价:\"",[99,157193,30478],{"class":109},[99,157195,157196,157198,157200,157202,157204,157206,157208,157211],{"class":101,"line":22},[99,157197,146672],{"class":109},[99,157199,155],{"class":105},[99,157201,2368],{"class":158},[99,157203,110],{"class":109},[99,157205,53802],{"class":158},[99,157207,110],{"class":109},[99,157209,157210],{"class":214},"\"请输入购买数量:\"",[99,157212,30478],{"class":109},[99,157214,157215,157218,157220,157222,157224,157226,157228,157231],{"class":101,"line":1165},[99,157216,157217],{"class":109},"discount ",[99,157219,155],{"class":105},[99,157221,109778],{"class":158},[99,157223,110],{"class":109},[99,157225,53802],{"class":158},[99,157227,110],{"class":109},[99,157229,157230],{"class":214},"\"请输入折扣:\"",[99,157232,30478],{"class":109},[99,157234,157235],{"class":101,"line":1180},[99,157236,2386],{"emptyLinePlaceholder":26},[99,157238,157239,157242,157244,157247,157249,157252,157254],{"class":101,"line":1186},[99,157240,157241],{"class":109},"total ",[99,157243,155],{"class":105},[99,157245,157246],{"class":109}," price ",[99,157248,565],{"class":105},[99,157250,157251],{"class":109}," count ",[99,157253,565],{"class":105},[99,157255,157256],{"class":109}," discount\n",[99,157258,157259],{"class":101,"line":1200},[99,157260,2386],{"emptyLinePlaceholder":26},[99,157262,157263,157265,157267,157269,157272,157274,157276,157278,157280,157282],{"class":101,"line":1206},[99,157264,30396],{"class":158},[99,157266,110],{"class":109},[99,157268,162],{"class":105},[99,157270,157271],{"class":214},"\"商品单价:",[99,157273,1006],{"class":158},[99,157275,79796],{"class":109},[99,157277,157140],{"class":105},[99,157279,1056],{"class":158},[99,157281,361],{"class":214},[99,157283,116],{"class":109},[99,157285,157286,157288,157290,157292,157295,157297,157299,157301,157303],{"class":101,"line":1297},[99,157287,30396],{"class":158},[99,157289,110],{"class":109},[99,157291,162],{"class":105},[99,157293,157294],{"class":214},"\"购买数量:",[99,157296,1006],{"class":158},[99,157298,84415],{"class":109},[99,157300,1056],{"class":158},[99,157302,361],{"class":214},[99,157304,116],{"class":109},[99,157306,157307,157309,157311,157313,157316,157318,157321,157323,157325],{"class":101,"line":1303},[99,157308,30396],{"class":158},[99,157310,110],{"class":109},[99,157312,162],{"class":105},[99,157314,157315],{"class":214},"\"折扣:",[99,157317,1006],{"class":158},[99,157319,157320],{"class":109},"discount",[99,157322,1056],{"class":158},[99,157324,361],{"class":214},[99,157326,116],{"class":109},[99,157328,157329,157331,157333,157335,157338,157340,157343,157345,157347,157349],{"class":101,"line":1315},[99,157330,30396],{"class":158},[99,157332,110],{"class":109},[99,157334,162],{"class":105},[99,157336,157337],{"class":214},"\"应付金额:",[99,157339,1006],{"class":158},[99,157341,157342],{"class":109},"total",[99,157344,157140],{"class":105},[99,157346,1056],{"class":158},[99,157348,156993],{"class":214},[99,157350,116],{"class":109},[41,157352,157354],{"id":157353},"_213-易错点","2.13 易错点",[53,157356,157357,157362,157368,157376,157379],{},[56,157358,157359,157361],{},[96,157360,157004],{}," 的结果是字符串，做运算前要转换。",[56,157363,157364,157365,28366],{},"字符串拼接时，数字要先 ",[96,157366,157367],{},"str()",[56,157369,157370,157372,157373,157375],{},[96,157371,155],{}," 是赋值，",[96,157374,2935],{}," 是比较。",[56,157377,157378],{},"Python 没有自增自减运算符。",[56,157380,157381],{},"浮点数计算可能有精度误差：",[90,157383,157385],{"className":30359,"code":157384,"language":30361,"meta":21,"style":21},"print(0.1 + 0.2)\n",[96,157386,157387],{"__ignoreMap":21},[99,157388,157389,157391,157393,157395,157397,157400],{"class":101,"line":102},[99,157390,30396],{"class":158},[99,157392,110],{"class":109},[99,157394,86191],{"class":158},[99,157396,45547],{"class":105},[99,157398,157399],{"class":158}," 0.2",[99,157401,116],{"class":109},[14,157403,157404,157405,157408],{},"金额计算如果要求严格，可以后续学习 ",[96,157406,157407],{},"decimal"," 模块。",[41,157410,157412],{"id":157411},"_214-本章练习","2.14 本章练习",[53,157414,157415,157418,157421,157424,157427],{},[56,157416,157417],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[56,157419,157420],{},"输入圆的半径，计算面积，保留两位小数。",[56,157422,157423],{},"输入工资和奖金，计算总收入。",[56,157425,157426],{},"输入摄氏温度，转换为华氏温度。",[56,157428,157429],{},"写一个 BMI 计算程序：",[90,157431,157434],{"className":157432,"code":157433,"language":5174,"meta":21},[5172],"BMI = 体重kg \u002F 身高m ** 2\n",[96,157435,157433],{"__ignoreMap":21},[5113,157437,157438],{},"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":21,"searchDepth":22,"depth":22,"links":157440},[157441,157442,157443,157444,157445,157446,157447,157453,157454,157455,157460,157461,157462,157463],{"id":155002,"depth":22,"text":155003},{"id":155111,"depth":22,"text":155112},{"id":155282,"depth":22,"text":155283},{"id":155359,"depth":22,"text":155360},{"id":50712,"depth":22,"text":50713},{"id":155665,"depth":22,"text":155666},{"id":155891,"depth":22,"text":155892,"children":157448},[157449,157450,157451,157452],{"id":155895,"depth":1165,"text":155896},{"id":156089,"depth":1165,"text":156090},{"id":156177,"depth":1165,"text":156178},{"id":156283,"depth":1165,"text":156284},{"id":156392,"depth":22,"text":156393},{"id":156550,"depth":22,"text":156551},{"id":156615,"depth":22,"text":156616,"children":157456},[157457,157458,157459],{"id":156619,"depth":1165,"text":156620},{"id":156764,"depth":1165,"text":156765},{"id":156867,"depth":1165,"text":156868},{"id":156998,"depth":22,"text":156999},{"id":157150,"depth":22,"text":157151},{"id":157353,"depth":22,"text":157354},{"id":157411,"depth":22,"text":157412},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154994,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157470,"title":157471,"body":157472,"description":23364,"extension":24,"meta":159108,"navigation":26,"path":159109,"seo":159110,"stem":159111,"__hash__":159112},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157473,"toc":159089},[157474,157477,157481,157484,157499,157502,157530,157534,157584,157586,157602,157605,157631,157634,157638,157705,157708,157724,157728,157731,157849,157852,157859,157908,157914,157918,157921,158034,158037,158041,158045,158048,158098,158102,158105,158155,158159,158162,158200,158204,158207,158253,158256,158291,158295,158300,158303,158349,158351,158418,158422,158428,158539,158548,158552,158554,158565,158567,158733,158737,158739,158753,158755,158969,158973,158992,159009,159012,159058,159062,159086],[10,157475,157471],{"id":157476},"_3-判断语句",[41,157478,157480],{"id":157479},"_31-布尔值","3.1 布尔值",[14,157482,157483],{},"判断语句依赖布尔值：",[90,157485,157487],{"className":30359,"code":157486,"language":30361,"meta":21,"style":21},"True\nFalse\n",[96,157488,157489,157494],{"__ignoreMap":21},[99,157490,157491],{"class":101,"line":102},[99,157492,157493],{"class":158},"True\n",[99,157495,157496],{"class":101,"line":22},[99,157497,157498],{"class":158},"False\n",[14,157500,157501],{},"比较表达式会产生布尔值：",[90,157503,157505],{"className":30359,"code":157504,"language":30361,"meta":21,"style":21},"age = 18\nprint(age >= 18)  # True\n",[96,157506,157507,157515],{"__ignoreMap":21},[99,157508,157509,157511,157513],{"class":101,"line":102},[99,157510,146527],{"class":109},[99,157512,155],{"class":105},[99,157514,146532],{"class":158},[99,157516,157517,157519,157521,157523,157525,157527],{"class":101,"line":22},[99,157518,30396],{"class":158},[99,157520,155749],{"class":109},[99,157522,1696],{"class":105},[99,157524,156266],{"class":158},[99,157526,45789],{"class":109},[99,157528,157529],{"class":168},"# True\n",[41,157531,157533],{"id":157532},"_32-if基础语法","3.2 if基础语法",[90,157535,157537],{"className":30359,"code":157536,"language":30361,"meta":21,"style":21},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[96,157538,157539,157557,157561,157573],{"__ignoreMap":21},[99,157540,157541,157543,157545,157547,157549,157551,157553,157555],{"class":101,"line":102},[99,157542,146527],{"class":109},[99,157544,155],{"class":105},[99,157546,2368],{"class":158},[99,157548,110],{"class":109},[99,157550,53802],{"class":158},[99,157552,110],{"class":109},[99,157554,152375],{"class":214},[99,157556,30478],{"class":109},[99,157558,157559],{"class":101,"line":22},[99,157560,2386],{"emptyLinePlaceholder":26},[99,157562,157563,157565,157567,157569,157571],{"class":101,"line":1165},[99,157564,1517],{"class":105},[99,157566,15694],{"class":109},[99,157568,1696],{"class":105},[99,157570,156266],{"class":158},[99,157572,3725],{"class":109},[99,157574,157575,157577,157579,157582],{"class":101,"line":1180},[99,157576,31280],{"class":158},[99,157578,110],{"class":109},[99,157580,157581],{"class":214},"\"可以进入网吧\"",[99,157583,116],{"class":109},[14,157585,9012],{},[53,157587,157588,157593,157596,157599],{},[56,157589,157590,157592],{},[96,157591,1517],{}," 后面是条件表达式。",[56,157594,157595],{},"条件后面必须写冒号。",[56,157597,157598],{},"条件成立时执行缩进代码块。",[56,157600,157601],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157603,157604],{},"错误示例：",[90,157606,157608],{"className":30359,"code":157607,"language":30361,"meta":21,"style":21},"if age >= 18\n    print(\"可以进入\")\n",[96,157609,157610,157620],{"__ignoreMap":21},[99,157611,157612,157614,157616,157618],{"class":101,"line":102},[99,157613,1517],{"class":105},[99,157615,15694],{"class":109},[99,157617,1696],{"class":105},[99,157619,146532],{"class":158},[99,157621,157622,157624,157626,157629],{"class":101,"line":22},[99,157623,31280],{"class":158},[99,157625,110],{"class":109},[99,157627,157628],{"class":214},"\"可以进入\"",[99,157630,116],{"class":109},[14,157632,157633],{},"缺少冒号。",[41,157635,157637],{"id":157636},"_33-if-else","3.3 if else",[90,157639,157641],{"className":30359,"code":157640,"language":30361,"meta":21,"style":21},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[96,157642,157643,157661,157665,157677,157688,157694],{"__ignoreMap":21},[99,157644,157645,157647,157649,157651,157653,157655,157657,157659],{"class":101,"line":102},[99,157646,146527],{"class":109},[99,157648,155],{"class":105},[99,157650,2368],{"class":158},[99,157652,110],{"class":109},[99,157654,53802],{"class":158},[99,157656,110],{"class":109},[99,157658,152375],{"class":214},[99,157660,30478],{"class":109},[99,157662,157663],{"class":101,"line":22},[99,157664,2386],{"emptyLinePlaceholder":26},[99,157666,157667,157669,157671,157673,157675],{"class":101,"line":1165},[99,157668,1517],{"class":105},[99,157670,15694],{"class":109},[99,157672,1696],{"class":105},[99,157674,156266],{"class":158},[99,157676,3725],{"class":109},[99,157678,157679,157681,157683,157686],{"class":101,"line":1180},[99,157680,31280],{"class":158},[99,157682,110],{"class":109},[99,157684,157685],{"class":214},"\"成年人\"",[99,157687,116],{"class":109},[99,157689,157690,157692],{"class":101,"line":1186},[99,157691,1687],{"class":105},[99,157693,3725],{"class":109},[99,157695,157696,157698,157700,157703],{"class":101,"line":1200},[99,157697,31280],{"class":158},[99,157699,110],{"class":109},[99,157701,157702],{"class":214},"\"未成年人\"",[99,157704,116],{"class":109},[14,157706,157707],{},"执行逻辑：",[53,157709,157710,157716,157721],{},[56,157711,157712,157713,157715],{},"条件成立，执行 ",[96,157714,1517],{}," 代码块。",[56,157717,157718,157719,157715],{},"条件不成立，执行 ",[96,157720,1687],{},[56,157722,157723],{},"两个代码块只会执行其中一个。",[41,157725,157727],{"id":157726},"_34-if-elif-else","3.4 if elif else",[14,157729,157730],{},"多条件判断：",[90,157732,157734],{"className":30359,"code":157733,"language":30361,"meta":21,"style":21},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[96,157735,157736,157754,157758,157772,157783,157797,157808,157821,157832,157838],{"__ignoreMap":21},[99,157737,157738,157740,157742,157744,157746,157748,157750,157752],{"class":101,"line":102},[99,157739,155339],{"class":109},[99,157741,155],{"class":105},[99,157743,2368],{"class":158},[99,157745,110],{"class":109},[99,157747,53802],{"class":158},[99,157749,110],{"class":109},[99,157751,152390],{"class":214},[99,157753,30478],{"class":109},[99,157755,157756],{"class":101,"line":22},[99,157757,2386],{"emptyLinePlaceholder":26},[99,157759,157760,157762,157765,157767,157770],{"class":101,"line":1165},[99,157761,1517],{"class":105},[99,157763,157764],{"class":109}," score ",[99,157766,1696],{"class":105},[99,157768,157769],{"class":158}," 90",[99,157771,3725],{"class":109},[99,157773,157774,157776,157778,157781],{"class":101,"line":1180},[99,157775,31280],{"class":158},[99,157777,110],{"class":109},[99,157779,157780],{"class":214},"\"优秀\"",[99,157782,116],{"class":109},[99,157784,157785,157788,157790,157792,157795],{"class":101,"line":1186},[99,157786,157787],{"class":105},"elif",[99,157789,157764],{"class":109},[99,157791,1696],{"class":105},[99,157793,157794],{"class":158}," 80",[99,157796,3725],{"class":109},[99,157798,157799,157801,157803,157806],{"class":101,"line":1200},[99,157800,31280],{"class":158},[99,157802,110],{"class":109},[99,157804,157805],{"class":214},"\"良好\"",[99,157807,116],{"class":109},[99,157809,157810,157812,157814,157816,157819],{"class":101,"line":1206},[99,157811,157787],{"class":105},[99,157813,157764],{"class":109},[99,157815,1696],{"class":105},[99,157817,157818],{"class":158}," 60",[99,157820,3725],{"class":109},[99,157822,157823,157825,157827,157830],{"class":101,"line":1297},[99,157824,31280],{"class":158},[99,157826,110],{"class":109},[99,157828,157829],{"class":214},"\"及格\"",[99,157831,116],{"class":109},[99,157833,157834,157836],{"class":101,"line":1303},[99,157835,1687],{"class":105},[99,157837,3725],{"class":109},[99,157839,157840,157842,157844,157847],{"class":101,"line":1315},[99,157841,31280],{"class":158},[99,157843,110],{"class":109},[99,157845,157846],{"class":214},"\"不及格\"",[99,157848,116],{"class":109},[14,157850,157851],{},"注意判断顺序很重要。",[14,157853,157854,157855,157858],{},"如果把 ",[96,157856,157857],{},"score >= 60"," 放在最前面：",[90,157860,157862],{"className":30359,"code":157861,"language":30361,"meta":21,"style":21},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[96,157863,157864,157876,157886,157898],{"__ignoreMap":21},[99,157865,157866,157868,157870,157872,157874],{"class":101,"line":102},[99,157867,1517],{"class":105},[99,157869,157764],{"class":109},[99,157871,1696],{"class":105},[99,157873,157818],{"class":158},[99,157875,3725],{"class":109},[99,157877,157878,157880,157882,157884],{"class":101,"line":22},[99,157879,31280],{"class":158},[99,157881,110],{"class":109},[99,157883,157829],{"class":214},[99,157885,116],{"class":109},[99,157887,157888,157890,157892,157894,157896],{"class":101,"line":1165},[99,157889,157787],{"class":105},[99,157891,157764],{"class":109},[99,157893,1696],{"class":105},[99,157895,157769],{"class":158},[99,157897,3725],{"class":109},[99,157899,157900,157902,157904,157906],{"class":101,"line":1180},[99,157901,31280],{"class":158},[99,157903,110],{"class":109},[99,157905,157780],{"class":214},[99,157907,116],{"class":109},[14,157909,157910,157911,157913],{},"成绩 95 会先满足 ",[96,157912,157857],{},"，后面的优秀分支就不会执行。",[41,157915,157917],{"id":157916},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157919,157920],{},"嵌套判断就是在一个判断内部再写判断。",[90,157922,157924],{"className":30359,"code":157923,"language":30361,"meta":21,"style":21},"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",[96,157925,157926,157944,157959,157963,157975,157989,157999,158006,158017,158023],{"__ignoreMap":21},[99,157927,157928,157930,157932,157934,157936,157938,157940,157942],{"class":101,"line":102},[99,157929,146527],{"class":109},[99,157931,155],{"class":105},[99,157933,2368],{"class":158},[99,157935,110],{"class":109},[99,157937,53802],{"class":158},[99,157939,110],{"class":109},[99,157941,152375],{"class":214},[99,157943,30478],{"class":109},[99,157945,157946,157948,157950,157952,157954,157957],{"class":101,"line":22},[99,157947,156342],{"class":109},[99,157949,155],{"class":105},[99,157951,60586],{"class":158},[99,157953,110],{"class":109},[99,157955,157956],{"class":214},"\"是否有票(y\u002Fn):\"",[99,157958,116],{"class":109},[99,157960,157961],{"class":101,"line":1165},[99,157962,2386],{"emptyLinePlaceholder":26},[99,157964,157965,157967,157969,157971,157973],{"class":101,"line":1180},[99,157966,1517],{"class":105},[99,157968,15694],{"class":109},[99,157970,1696],{"class":105},[99,157972,156266],{"class":158},[99,157974,3725],{"class":109},[99,157976,157977,157979,157982,157984,157987],{"class":101,"line":1186},[99,157978,3087],{"class":105},[99,157980,157981],{"class":109}," has_ticket ",[99,157983,2935],{"class":105},[99,157985,157986],{"class":214}," \"y\"",[99,157988,3725],{"class":109},[99,157990,157991,157993,157995,157997],{"class":101,"line":1200},[99,157992,32432],{"class":158},[99,157994,110],{"class":109},[99,157996,157628],{"class":214},[99,157998,116],{"class":109},[99,158000,158001,158004],{"class":101,"line":1206},[99,158002,158003],{"class":105},"    else",[99,158005,3725],{"class":109},[99,158007,158008,158010,158012,158015],{"class":101,"line":1297},[99,158009,32432],{"class":158},[99,158011,110],{"class":109},[99,158013,158014],{"class":214},"\"请先买票\"",[99,158016,116],{"class":109},[99,158018,158019,158021],{"class":101,"line":1303},[99,158020,1687],{"class":105},[99,158022,3725],{"class":109},[99,158024,158025,158027,158029,158032],{"class":101,"line":1315},[99,158026,31280],{"class":158},[99,158028,110],{"class":109},[99,158030,158031],{"class":214},"\"未成年人禁止进入\"",[99,158033,116],{"class":109},[14,158035,158036],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[41,158038,158040],{"id":158039},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[70,158042,158044],{"id":158043},"_361-and","3.6.1 and",[14,158046,158047],{},"两个条件都成立才成立。",[90,158049,158051],{"className":30359,"code":158050,"language":30361,"meta":21,"style":21},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[96,158052,158053,158061,158069,158073,158088],{"__ignoreMap":21},[99,158054,158055,158057,158059],{"class":101,"line":102},[99,158056,146527],{"class":109},[99,158058,155],{"class":105},[99,158060,88046],{"class":158},[99,158062,158063,158065,158067],{"class":101,"line":22},[99,158064,156342],{"class":109},[99,158066,155],{"class":105},[99,158068,153580],{"class":158},[99,158070,158071],{"class":101,"line":1165},[99,158072,2386],{"emptyLinePlaceholder":26},[99,158074,158075,158077,158079,158081,158083,158085],{"class":101,"line":1180},[99,158076,1517],{"class":105},[99,158078,15694],{"class":109},[99,158080,1696],{"class":105},[99,158082,156266],{"class":158},[99,158084,120410],{"class":105},[99,158086,158087],{"class":109}," has_ticket:\n",[99,158089,158090,158092,158094,158096],{"class":101,"line":1186},[99,158091,31280],{"class":158},[99,158093,110],{"class":109},[99,158095,157628],{"class":214},[99,158097,116],{"class":109},[70,158099,158101],{"id":158100},"_362-or","3.6.2 or",[14,158103,158104],{},"只要一个条件成立就成立。",[90,158106,158108],{"className":30359,"code":158107,"language":30361,"meta":21,"style":21},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[96,158109,158110,158119,158128,158132,158144],{"__ignoreMap":21},[99,158111,158112,158115,158117],{"class":101,"line":102},[99,158113,158114],{"class":109},"is_vip ",[99,158116,155],{"class":105},[99,158118,125788],{"class":158},[99,158120,158121,158124,158126],{"class":101,"line":22},[99,158122,158123],{"class":109},"coupon ",[99,158125,155],{"class":105},[99,158127,153580],{"class":158},[99,158129,158130],{"class":101,"line":1165},[99,158131,2386],{"emptyLinePlaceholder":26},[99,158133,158134,158136,158139,158141],{"class":101,"line":1180},[99,158135,1517],{"class":105},[99,158137,158138],{"class":109}," is_vip ",[99,158140,115071],{"class":105},[99,158142,158143],{"class":109}," coupon:\n",[99,158145,158146,158148,158150,158153],{"class":101,"line":1186},[99,158147,31280],{"class":158},[99,158149,110],{"class":109},[99,158151,158152],{"class":214},"\"可以享受优惠\"",[99,158154,116],{"class":109},[70,158156,158158],{"id":158157},"_363-not","3.6.3 not",[14,158160,158161],{},"取反。",[90,158163,158165],{"className":30359,"code":158164,"language":30361,"meta":21,"style":21},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[96,158166,158167,158176,158180,158189],{"__ignoreMap":21},[99,158168,158169,158172,158174],{"class":101,"line":102},[99,158170,158171],{"class":109},"is_closed ",[99,158173,155],{"class":105},[99,158175,125788],{"class":158},[99,158177,158178],{"class":101,"line":22},[99,158179,2386],{"emptyLinePlaceholder":26},[99,158181,158182,158184,158186],{"class":101,"line":1165},[99,158183,1517],{"class":105},[99,158185,38911],{"class":105},[99,158187,158188],{"class":109}," is_closed:\n",[99,158190,158191,158193,158195,158198],{"class":101,"line":1180},[99,158192,31280],{"class":158},[99,158194,110],{"class":109},[99,158196,158197],{"class":214},"\"店铺营业中\"",[99,158199,116],{"class":109},[41,158201,158203],{"id":158202},"_37-链式比较","3.7 链式比较",[14,158205,158206],{},"Python 支持链式比较：",[90,158208,158210],{"className":30359,"code":158209,"language":30361,"meta":21,"style":21},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[96,158211,158212,158221,158225,158242],{"__ignoreMap":21},[99,158213,158214,158216,158218],{"class":101,"line":102},[99,158215,155339],{"class":109},[99,158217,155],{"class":105},[99,158219,158220],{"class":158}," 85\n",[99,158222,158223],{"class":101,"line":22},[99,158224,2386],{"emptyLinePlaceholder":26},[99,158226,158227,158229,158231,158234,158236,158238,158240],{"class":101,"line":1165},[99,158228,1517],{"class":105},[99,158230,4079],{"class":158},[99,158232,158233],{"class":105}," \u003C=",[99,158235,157764],{"class":109},[99,158237,1574],{"class":105},[99,158239,5741],{"class":158},[99,158241,3725],{"class":109},[99,158243,158244,158246,158248,158251],{"class":101,"line":1180},[99,158245,31280],{"class":158},[99,158247,110],{"class":109},[99,158249,158250],{"class":214},"\"成绩合法\"",[99,158252,116],{"class":109},[14,158254,158255],{},"等价于：",[90,158257,158259],{"className":30359,"code":158258,"language":30361,"meta":21,"style":21},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[96,158260,158261,158281],{"__ignoreMap":21},[99,158262,158263,158265,158267,158269,158271,158273,158275,158277,158279],{"class":101,"line":102},[99,158264,1517],{"class":105},[99,158266,157764],{"class":109},[99,158268,1696],{"class":105},[99,158270,4079],{"class":158},[99,158272,120410],{"class":105},[99,158274,157764],{"class":109},[99,158276,1574],{"class":105},[99,158278,5741],{"class":158},[99,158280,3725],{"class":109},[99,158282,158283,158285,158287,158289],{"class":101,"line":22},[99,158284,31280],{"class":158},[99,158286,110],{"class":109},[99,158288,158250],{"class":214},[99,158290,116],{"class":109},[41,158292,158294],{"id":158293},"_38-真值和假值","3.8 真值和假值",[14,158296,116448,158297,158299],{},[96,158298,1517],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158301,158302],{},"假值：",[90,158304,158306],{"className":30359,"code":158305,"language":30361,"meta":21,"style":21},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[96,158307,158308,158312,158317,158321,158325,158330,158334,158338,158343],{"__ignoreMap":21},[99,158309,158310],{"class":101,"line":102},[99,158311,157498],{"class":158},[99,158313,158314],{"class":101,"line":22},[99,158315,158316],{"class":158},"None\n",[99,158318,158319],{"class":101,"line":1165},[99,158320,3071],{"class":158},[99,158322,158323],{"class":101,"line":1180},[99,158324,32323],{"class":158},[99,158326,158327],{"class":101,"line":1186},[99,158328,158329],{"class":214},"\"\"\n",[99,158331,158332],{"class":101,"line":1200},[99,158333,32338],{"class":109},[99,158335,158336],{"class":101,"line":1206},[99,158337,1962],{"class":109},[99,158339,158340],{"class":101,"line":1297},[99,158341,158342],{"class":109},"{}\n",[99,158344,158345,158347],{"class":101,"line":1303},[99,158346,155271],{"class":158},[99,158348,1962],{"class":109},[14,158350,15122],{},[90,158352,158354],{"className":30359,"code":158353,"language":30361,"meta":21,"style":21},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[96,158355,158356,158370,158374,158381,158401,158407],{"__ignoreMap":21},[99,158357,158358,158360,158362,158364,158366,158368],{"class":101,"line":102},[99,158359,146517],{"class":109},[99,158361,155],{"class":105},[99,158363,60586],{"class":158},[99,158365,110],{"class":109},[99,158367,152360],{"class":214},[99,158369,116],{"class":109},[99,158371,158372],{"class":101,"line":22},[99,158373,2386],{"emptyLinePlaceholder":26},[99,158375,158376,158378],{"class":101,"line":1165},[99,158377,1517],{"class":105},[99,158379,158380],{"class":109}," name:\n",[99,158382,158383,158385,158387,158389,158391,158393,158395,158397,158399],{"class":101,"line":1180},[99,158384,31280],{"class":158},[99,158386,110],{"class":109},[99,158388,162],{"class":105},[99,158390,157035],{"class":214},[99,158392,1006],{"class":158},[99,158394,79791],{"class":109},[99,158396,1056],{"class":158},[99,158398,361],{"class":214},[99,158400,116],{"class":109},[99,158402,158403,158405],{"class":101,"line":1186},[99,158404,1687],{"class":105},[99,158406,3725],{"class":109},[99,158408,158409,158411,158413,158416],{"class":101,"line":1200},[99,158410,31280],{"class":158},[99,158412,110],{"class":109},[99,158414,158415],{"class":214},"\"姓名不能为空\"",[99,158417,116],{"class":109},[41,158419,158421],{"id":158420},"_39-match语句","3.9 match语句",[14,158423,158424,158425,158427],{},"Python 3.10 开始支持 ",[96,158426,71246],{},"。它适合处理固定选项。",[90,158429,158431],{"className":30359,"code":158430,"language":30361,"meta":21,"style":21},"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",[96,158432,158433,158449,158453,158460,158470,158481,158490,158501,158510,158521,158528],{"__ignoreMap":21},[99,158434,158435,158438,158440,158442,158444,158447],{"class":101,"line":102},[99,158436,158437],{"class":109},"command ",[99,158439,155],{"class":105},[99,158441,60586],{"class":158},[99,158443,110],{"class":109},[99,158445,158446],{"class":214},"\"请输入命令:\"",[99,158448,116],{"class":109},[99,158450,158451],{"class":101,"line":22},[99,158452,2386],{"emptyLinePlaceholder":26},[99,158454,158455,158457],{"class":101,"line":1165},[99,158456,71246],{"class":105},[99,158458,158459],{"class":109}," command:\n",[99,158461,158462,158465,158468],{"class":101,"line":1180},[99,158463,158464],{"class":105},"    case",[99,158466,158467],{"class":214}," \"start\"",[99,158469,3725],{"class":109},[99,158471,158472,158474,158476,158479],{"class":101,"line":1186},[99,158473,32432],{"class":158},[99,158475,110],{"class":109},[99,158477,158478],{"class":214},"\"启动\"",[99,158480,116],{"class":109},[99,158482,158483,158485,158488],{"class":101,"line":1200},[99,158484,158464],{"class":105},[99,158486,158487],{"class":214}," \"stop\"",[99,158489,3725],{"class":109},[99,158491,158492,158494,158496,158499],{"class":101,"line":1206},[99,158493,32432],{"class":158},[99,158495,110],{"class":109},[99,158497,158498],{"class":214},"\"停止\"",[99,158500,116],{"class":109},[99,158502,158503,158505,158508],{"class":101,"line":1297},[99,158504,158464],{"class":105},[99,158506,158507],{"class":214}," \"restart\"",[99,158509,3725],{"class":109},[99,158511,158512,158514,158516,158519],{"class":101,"line":1303},[99,158513,32432],{"class":158},[99,158515,110],{"class":109},[99,158517,158518],{"class":214},"\"重启\"",[99,158520,116],{"class":109},[99,158522,158523,158525],{"class":101,"line":1315},[99,158524,158464],{"class":105},[99,158526,158527],{"class":109}," _:\n",[99,158529,158530,158532,158534,158537],{"class":101,"line":1598},[99,158531,32432],{"class":158},[99,158533,110],{"class":109},[99,158535,158536],{"class":214},"\"未知命令\"",[99,158538,116],{"class":109},[14,158540,158541,158542,158544,158545,158547],{},"入门阶段掌握 ",[96,158543,154639],{}," 更重要，",[96,158546,71246],{}," 可以作为补充。",[41,158549,158551],{"id":158550},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158553,123273],{},[53,158555,158556,158559,158562],{},[56,158557,158558],{},"输入成绩。",[56,158560,158561],{},"判断成绩是否合法。",[56,158563,158564],{},"输出等级。",[14,158566,10022],{},[90,158568,158570],{"className":30359,"code":158569,"language":30361,"meta":21,"style":21},"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",[96,158571,158572,158590,158594,158612,158623,158635,158646,158658,158669,158682,158693,158705,158716,158722],{"__ignoreMap":21},[99,158573,158574,158576,158578,158580,158582,158584,158586,158588],{"class":101,"line":102},[99,158575,155339],{"class":109},[99,158577,155],{"class":105},[99,158579,109778],{"class":158},[99,158581,110],{"class":109},[99,158583,53802],{"class":158},[99,158585,110],{"class":109},[99,158587,152390],{"class":214},[99,158589,30478],{"class":109},[99,158591,158592],{"class":101,"line":22},[99,158593,2386],{"emptyLinePlaceholder":26},[99,158595,158596,158598,158600,158602,158604,158606,158608,158610],{"class":101,"line":1165},[99,158597,1517],{"class":105},[99,158599,38911],{"class":105},[99,158601,4079],{"class":158},[99,158603,158233],{"class":105},[99,158605,157764],{"class":109},[99,158607,1574],{"class":105},[99,158609,5741],{"class":158},[99,158611,3725],{"class":109},[99,158613,158614,158616,158618,158621],{"class":101,"line":1180},[99,158615,31280],{"class":158},[99,158617,110],{"class":109},[99,158619,158620],{"class":214},"\"成绩不合法\"",[99,158622,116],{"class":109},[99,158624,158625,158627,158629,158631,158633],{"class":101,"line":1186},[99,158626,157787],{"class":105},[99,158628,157764],{"class":109},[99,158630,1696],{"class":105},[99,158632,157769],{"class":158},[99,158634,3725],{"class":109},[99,158636,158637,158639,158641,158644],{"class":101,"line":1200},[99,158638,31280],{"class":158},[99,158640,110],{"class":109},[99,158642,158643],{"class":214},"\"等级:A\"",[99,158645,116],{"class":109},[99,158647,158648,158650,158652,158654,158656],{"class":101,"line":1206},[99,158649,157787],{"class":105},[99,158651,157764],{"class":109},[99,158653,1696],{"class":105},[99,158655,157794],{"class":158},[99,158657,3725],{"class":109},[99,158659,158660,158662,158664,158667],{"class":101,"line":1297},[99,158661,31280],{"class":158},[99,158663,110],{"class":109},[99,158665,158666],{"class":214},"\"等级:B\"",[99,158668,116],{"class":109},[99,158670,158671,158673,158675,158677,158680],{"class":101,"line":1303},[99,158672,157787],{"class":105},[99,158674,157764],{"class":109},[99,158676,1696],{"class":105},[99,158678,158679],{"class":158}," 70",[99,158681,3725],{"class":109},[99,158683,158684,158686,158688,158691],{"class":101,"line":1315},[99,158685,31280],{"class":158},[99,158687,110],{"class":109},[99,158689,158690],{"class":214},"\"等级:C\"",[99,158692,116],{"class":109},[99,158694,158695,158697,158699,158701,158703],{"class":101,"line":1598},[99,158696,157787],{"class":105},[99,158698,157764],{"class":109},[99,158700,1696],{"class":105},[99,158702,157818],{"class":158},[99,158704,3725],{"class":109},[99,158706,158707,158709,158711,158714],{"class":101,"line":1603},[99,158708,31280],{"class":158},[99,158710,110],{"class":109},[99,158712,158713],{"class":214},"\"等级:D\"",[99,158715,116],{"class":109},[99,158717,158718,158720],{"class":101,"line":1609},[99,158719,1687],{"class":105},[99,158721,3725],{"class":109},[99,158723,158724,158726,158728,158731],{"class":101,"line":1614},[99,158725,31280],{"class":158},[99,158727,110],{"class":109},[99,158729,158730],{"class":214},"\"等级:E\"",[99,158732,116],{"class":109},[41,158734,158736],{"id":158735},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158738,123273],{},[53,158740,158741,158744,158747,158750],{},[56,158742,158743],{},"输入消费金额。",[56,158745,158746],{},"输入会员等级，普通、银卡、金卡。",[56,158748,158749],{},"普通不打折，银卡 9 折，金卡 8 折。",[56,158751,158752],{},"满 500 再减 50。",[14,158754,10022],{},[90,158756,158758],{"className":30359,"code":158757,"language":30361,"meta":21,"style":21},"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",[96,158759,158760,158780,158796,158800,158808,158812,158826,158836,158849,158858,158871,158879,158885,158896,158900,158914,158918,158932,158942,158946],{"__ignoreMap":21},[99,158761,158762,158765,158767,158769,158771,158773,158775,158778],{"class":101,"line":102},[99,158763,158764],{"class":109},"amount ",[99,158766,155],{"class":105},[99,158768,109778],{"class":158},[99,158770,110],{"class":109},[99,158772,53802],{"class":158},[99,158774,110],{"class":109},[99,158776,158777],{"class":214},"\"请输入消费金额:\"",[99,158779,30478],{"class":109},[99,158781,158782,158785,158787,158789,158791,158794],{"class":101,"line":22},[99,158783,158784],{"class":109},"level ",[99,158786,155],{"class":105},[99,158788,60586],{"class":158},[99,158790,110],{"class":109},[99,158792,158793],{"class":214},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[99,158795,116],{"class":109},[99,158797,158798],{"class":101,"line":1165},[99,158799,2386],{"emptyLinePlaceholder":26},[99,158801,158802,158804,158806],{"class":101,"line":1180},[99,158803,157217],{"class":109},[99,158805,155],{"class":105},[99,158807,55680],{"class":158},[99,158809,158810],{"class":101,"line":1186},[99,158811,2386],{"emptyLinePlaceholder":26},[99,158813,158814,158816,158819,158821,158824],{"class":101,"line":1200},[99,158815,1517],{"class":105},[99,158817,158818],{"class":109}," level ",[99,158820,2935],{"class":105},[99,158822,158823],{"class":214}," \"银卡\"",[99,158825,3725],{"class":109},[99,158827,158828,158831,158833],{"class":101,"line":1206},[99,158829,158830],{"class":109},"    discount ",[99,158832,155],{"class":105},[99,158834,158835],{"class":158}," 0.9\n",[99,158837,158838,158840,158842,158844,158847],{"class":101,"line":1297},[99,158839,157787],{"class":105},[99,158841,158818],{"class":109},[99,158843,2935],{"class":105},[99,158845,158846],{"class":214}," \"金卡\"",[99,158848,3725],{"class":109},[99,158850,158851,158853,158855],{"class":101,"line":1303},[99,158852,158830],{"class":109},[99,158854,155],{"class":105},[99,158856,158857],{"class":158}," 0.8\n",[99,158859,158860,158862,158864,158866,158869],{"class":101,"line":1315},[99,158861,157787],{"class":105},[99,158863,158818],{"class":109},[99,158865,2935],{"class":105},[99,158867,158868],{"class":214}," \"普通\"",[99,158870,3725],{"class":109},[99,158872,158873,158875,158877],{"class":101,"line":1598},[99,158874,158830],{"class":109},[99,158876,155],{"class":105},[99,158878,55680],{"class":158},[99,158880,158881,158883],{"class":101,"line":1603},[99,158882,1687],{"class":105},[99,158884,3725],{"class":109},[99,158886,158887,158889,158891,158894],{"class":101,"line":1609},[99,158888,31280],{"class":158},[99,158890,110],{"class":109},[99,158892,158893],{"class":214},"\"会员等级输入错误，按普通会员计算\"",[99,158895,116],{"class":109},[99,158897,158898],{"class":101,"line":1614},[99,158899,2386],{"emptyLinePlaceholder":26},[99,158901,158902,158905,158907,158910,158912],{"class":101,"line":1628},[99,158903,158904],{"class":109},"pay ",[99,158906,155],{"class":105},[99,158908,158909],{"class":109}," amount ",[99,158911,565],{"class":105},[99,158913,157256],{"class":109},[99,158915,158916],{"class":101,"line":1633},[99,158917,2386],{"emptyLinePlaceholder":26},[99,158919,158920,158922,158925,158927,158930],{"class":101,"line":1639},[99,158921,1517],{"class":105},[99,158923,158924],{"class":109}," pay ",[99,158926,1696],{"class":105},[99,158928,158929],{"class":158}," 500",[99,158931,3725],{"class":109},[99,158933,158934,158937,158939],{"class":101,"line":1660},[99,158935,158936],{"class":109},"    pay ",[99,158938,150233],{"class":105},[99,158940,158941],{"class":158}," 50\n",[99,158943,158944],{"class":101,"line":1665},[99,158945,2386],{"emptyLinePlaceholder":26},[99,158947,158948,158950,158952,158954,158956,158958,158961,158963,158965,158967],{"class":101,"line":1679},[99,158949,30396],{"class":158},[99,158951,110],{"class":109},[99,158953,162],{"class":105},[99,158955,157337],{"class":214},[99,158957,1006],{"class":158},[99,158959,158960],{"class":109},"pay",[99,158962,157140],{"class":105},[99,158964,1056],{"class":158},[99,158966,156993],{"class":214},[99,158968,116],{"class":109},[41,158970,158972],{"id":158971},"_312-易错点","3.12 易错点",[53,158974,158975,158978,158981,158984,158989],{},[56,158976,158977],{},"冒号不能漏。",[56,158979,158980],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[56,158982,158983],{},"多分支判断要注意顺序。",[56,158985,158986,158987,28366],{},"判断相等用 ",[96,158988,2935],{},[56,158990,158991],{},"字符串比较区分大小写：",[90,158993,158995],{"className":30359,"code":158994,"language":30361,"meta":21,"style":21},"\"Y\" == \"y\"  # False\n",[96,158996,158997],{"__ignoreMap":21},[99,158998,158999,159002,159004,159006],{"class":101,"line":102},[99,159000,159001],{"class":214},"\"Y\"",[99,159003,101540],{"class":105},[99,159005,157986],{"class":214},[99,159007,159008],{"class":168},"  # False\n",[14,159010,159011],{},"可转换后再判断：",[90,159013,159015],{"className":30359,"code":159014,"language":30361,"meta":21,"style":21},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[96,159016,159017,159034,159047],{"__ignoreMap":21},[99,159018,159019,159022,159024,159026,159028,159031],{"class":101,"line":102},[99,159020,159021],{"class":109},"answer ",[99,159023,155],{"class":105},[99,159025,60586],{"class":158},[99,159027,110],{"class":109},[99,159029,159030],{"class":214},"\"是否继续(y\u002Fn):\"",[99,159032,159033],{"class":109},").lower()\n",[99,159035,159036,159038,159041,159043,159045],{"class":101,"line":22},[99,159037,1517],{"class":105},[99,159039,159040],{"class":109}," answer ",[99,159042,2935],{"class":105},[99,159044,157986],{"class":214},[99,159046,3725],{"class":109},[99,159048,159049,159051,159053,159056],{"class":101,"line":1165},[99,159050,31280],{"class":158},[99,159052,110],{"class":109},[99,159054,159055],{"class":214},"\"继续\"",[99,159057,116],{"class":109},[41,159059,159061],{"id":159060},"_313-本章练习","3.13 本章练习",[53,159063,159064,159067,159070,159073,159083],{},[56,159065,159066],{},"输入年龄，判断是否成年。",[56,159068,159069],{},"输入年份，判断是否为闰年。",[56,159071,159072],{},"输入三个数字，输出最大值。",[56,159074,159075,159076,159079,159080,159082],{},"写登录判断：用户名是 ",[96,159077,159078],{},"admin"," 且密码是 ",[96,159081,15071],{}," 才登录成功。",[56,159084,159085],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5113,159087,159088],{},"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":21,"searchDepth":22,"depth":22,"links":159090},[159091,159092,159093,159094,159095,159096,159101,159102,159103,159104,159105,159106,159107],{"id":157479,"depth":22,"text":157480},{"id":157532,"depth":22,"text":157533},{"id":157636,"depth":22,"text":157637},{"id":157726,"depth":22,"text":157727},{"id":157916,"depth":22,"text":157917},{"id":158039,"depth":22,"text":158040,"children":159097},[159098,159099,159100],{"id":158043,"depth":1165,"text":158044},{"id":158100,"depth":1165,"text":158101},{"id":158157,"depth":1165,"text":158158},{"id":158202,"depth":22,"text":158203},{"id":158293,"depth":22,"text":158294},{"id":158420,"depth":22,"text":158421},{"id":158550,"depth":22,"text":158551},{"id":158735,"depth":22,"text":158736},{"id":158971,"depth":22,"text":158972},{"id":159060,"depth":22,"text":159061},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157471,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159114,"title":159115,"body":159116,"description":23364,"extension":24,"meta":160885,"navigation":26,"path":160886,"seo":160887,"stem":160888,"__hash__":160889},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159117,"toc":160865},[159118,159121,159125,159131,159134,159151,159155,159157,159174,159176,159221,159223,159240,159244,159247,159313,159316,159334,159338,159499,159508,159512,159516,159521,159568,159570,159576,159580,159585,159632,159634,159640,159644,159649,159685,159688,159735,159739,159745,159803,159808,159839,159844,159848,159903,159906,159978,159981,160040,160044,160047,160122,160125,160129,160235,160238,160264,160268,160280,160349,160352,160444,160448,160450,160461,160463,160593,160597,160799,160807,160811,160841,160845,160862],[10,159119,159115],{"id":159120},"_4-循环语句",[41,159122,159124],{"id":159123},"_41-为什么需要循环","4.1 为什么需要循环",[14,159126,159127,159128,159130],{},"如果要输出 1 到 100，不应该写 100 行 ",[96,159129,146453],{},"，而应该用循环。",[14,159132,159133],{},"循环适合处理重复任务：",[53,159135,159136,159139,159142,159145,159148],{},[56,159137,159138],{},"重复输出。",[56,159140,159141],{},"重复输入。",[56,159143,159144],{},"遍历数据。",[56,159146,159147],{},"持续执行菜单。",[56,159149,159150],{},"批量处理文件或数据。",[41,159152,159154],{"id":159153},"_42-while循环","4.2 while循环",[14,159156,5168],{},[90,159158,159160],{"className":30359,"code":159159,"language":30361,"meta":21,"style":21},"while 条件:\n    循环体\n",[96,159161,159162,159169],{"__ignoreMap":21},[99,159163,159164,159166],{"class":101,"line":102},[99,159165,108644],{"class":105},[99,159167,159168],{"class":109}," 条件:\n",[99,159170,159171],{"class":101,"line":22},[99,159172,159173],{"class":109},"    循环体\n",[14,159175,15122],{},[90,159177,159179],{"className":30359,"code":159178,"language":30361,"meta":21,"style":21},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[96,159180,159181,159189,159193,159205,159212],{"__ignoreMap":21},[99,159182,159183,159185,159187],{"class":101,"line":102},[99,159184,100129],{"class":109},[99,159186,155],{"class":105},[99,159188,55680],{"class":158},[99,159190,159191],{"class":101,"line":22},[99,159192,2386],{"emptyLinePlaceholder":26},[99,159194,159195,159197,159199,159201,159203],{"class":101,"line":1165},[99,159196,108644],{"class":105},[99,159198,9425],{"class":109},[99,159200,1574],{"class":105},[99,159202,2134],{"class":158},[99,159204,3725],{"class":109},[99,159206,159207,159209],{"class":101,"line":1180},[99,159208,31280],{"class":158},[99,159210,159211],{"class":109},"(i)\n",[99,159213,159214,159217,159219],{"class":101,"line":1186},[99,159215,159216],{"class":109},"    i ",[99,159218,9464],{"class":105},[99,159220,55680],{"class":158},[14,159222,80910],{},[53,159224,159225,159231,159234,159237],{},[56,159226,159227,159228,28366],{},"判断条件 ",[96,159229,159230],{},"i \u003C= 5",[56,159232,159233],{},"条件成立，执行循环体。",[56,159235,159236],{},"执行完后回到条件判断。",[56,159238,159239],{},"条件不成立，退出循环。",[41,159241,159243],{"id":159242},"_43-while累加","4.3 while累加",[14,159245,159246],{},"计算 1 到 100 的和：",[90,159248,159250],{"className":30359,"code":159249,"language":30361,"meta":21,"style":21},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[96,159251,159252,159260,159268,159272,159284,159294,159302,159306],{"__ignoreMap":21},[99,159253,159254,159256,159258],{"class":101,"line":102},[99,159255,100129],{"class":109},[99,159257,155],{"class":105},[99,159259,55680],{"class":158},[99,159261,159262,159264,159266],{"class":101,"line":22},[99,159263,157241],{"class":109},[99,159265,155],{"class":105},[99,159267,47314],{"class":158},[99,159269,159270],{"class":101,"line":1165},[99,159271,2386],{"emptyLinePlaceholder":26},[99,159273,159274,159276,159278,159280,159282],{"class":101,"line":1180},[99,159275,108644],{"class":105},[99,159277,9425],{"class":109},[99,159279,1574],{"class":105},[99,159281,5741],{"class":158},[99,159283,3725],{"class":109},[99,159285,159286,159289,159291],{"class":101,"line":1186},[99,159287,159288],{"class":109},"    total ",[99,159290,9464],{"class":105},[99,159292,159293],{"class":109}," i\n",[99,159295,159296,159298,159300],{"class":101,"line":1200},[99,159297,159216],{"class":109},[99,159299,9464],{"class":105},[99,159301,55680],{"class":158},[99,159303,159304],{"class":101,"line":1206},[99,159305,2386],{"emptyLinePlaceholder":26},[99,159307,159308,159310],{"class":101,"line":1297},[99,159309,30396],{"class":158},[99,159311,159312],{"class":109},"(total)\n",[14,159314,159315],{},"核心思想：",[53,159317,159318,159323,159328],{},[56,159319,159320,159322],{},[96,159321,551],{}," 控制循环次数。",[56,159324,159325,159327],{},[96,159326,157342],{}," 保存累加结果。",[56,159329,159330,159331,159333],{},"每轮循环都要更新 ",[96,159332,551],{},"，否则可能死循环。",[41,159335,159337],{"id":159336},"_44-while猜数字","4.4 while猜数字",[90,159339,159341],{"className":30359,"code":159340,"language":30361,"meta":21,"style":21},"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",[96,159342,159343,159349,159353,159370,159378,159382,159390,159410,159419,159423,159435,159446,159456,159467,159473,159495],{"__ignoreMap":21},[99,159344,159345,159347],{"class":101,"line":102},[99,159346,30373],{"class":105},[99,159348,45309],{"class":109},[99,159350,159351],{"class":101,"line":22},[99,159352,2386],{"emptyLinePlaceholder":26},[99,159354,159355,159357,159359,159362,159364,159366,159368],{"class":101,"line":1165},[99,159356,159021],{"class":109},[99,159358,155],{"class":105},[99,159360,159361],{"class":109}," random.randint(",[99,159363,327],{"class":158},[99,159365,12422],{"class":109},[99,159367,421],{"class":158},[99,159369,116],{"class":109},[99,159371,159372,159374,159376],{"class":101,"line":1180},[99,159373,146672],{"class":109},[99,159375,155],{"class":105},[99,159377,47314],{"class":158},[99,159379,159380],{"class":101,"line":1186},[99,159381,2386],{"emptyLinePlaceholder":26},[99,159383,159384,159386,159388],{"class":101,"line":1200},[99,159385,108644],{"class":105},[99,159387,95273],{"class":158},[99,159389,3725],{"class":109},[99,159391,159392,159395,159397,159399,159401,159403,159405,159408],{"class":101,"line":1206},[99,159393,159394],{"class":109},"    guess ",[99,159396,155],{"class":105},[99,159398,2368],{"class":158},[99,159400,110],{"class":109},[99,159402,53802],{"class":158},[99,159404,110],{"class":109},[99,159406,159407],{"class":214},"\"请输入1到100之间的数字:\"",[99,159409,30478],{"class":109},[99,159411,159412,159415,159417],{"class":101,"line":1297},[99,159413,159414],{"class":109},"    count ",[99,159416,9464],{"class":105},[99,159418,55680],{"class":158},[99,159420,159421],{"class":101,"line":1303},[99,159422,2386],{"emptyLinePlaceholder":26},[99,159424,159425,159427,159430,159432],{"class":101,"line":1315},[99,159426,3087],{"class":105},[99,159428,159429],{"class":109}," guess ",[99,159431,1070],{"class":105},[99,159433,159434],{"class":109}," answer:\n",[99,159436,159437,159439,159441,159444],{"class":101,"line":1598},[99,159438,32432],{"class":158},[99,159440,110],{"class":109},[99,159442,159443],{"class":214},"\"猜大了\"",[99,159445,116],{"class":109},[99,159447,159448,159450,159452,159454],{"class":101,"line":1603},[99,159449,39274],{"class":105},[99,159451,159429],{"class":109},[99,159453,1020],{"class":105},[99,159455,159434],{"class":109},[99,159457,159458,159460,159462,159465],{"class":101,"line":1609},[99,159459,32432],{"class":158},[99,159461,110],{"class":109},[99,159463,159464],{"class":214},"\"猜小了\"",[99,159466,116],{"class":109},[99,159468,159469,159471],{"class":101,"line":1614},[99,159470,158003],{"class":105},[99,159472,3725],{"class":109},[99,159474,159475,159477,159479,159481,159484,159486,159488,159490,159493],{"class":101,"line":1628},[99,159476,32432],{"class":158},[99,159478,110],{"class":109},[99,159480,162],{"class":105},[99,159482,159483],{"class":214},"\"猜对了，一共猜了",[99,159485,1006],{"class":158},[99,159487,84415],{"class":109},[99,159489,1056],{"class":158},[99,159491,159492],{"class":214},"次\"",[99,159494,116],{"class":109},[99,159496,159497],{"class":101,"line":1633},[99,159498,31608],{"class":105},[14,159500,159501,159504,159505,159507],{},[96,159502,159503],{},"while True"," 表示无限循环，通常配合 ",[96,159506,2039],{}," 使用。",[41,159509,159511],{"id":159510},"_45-break和continue","4.5 break和continue",[70,159513,159515],{"id":159514},"_451-break","4.5.1 break",[14,159517,159518,159520],{},[96,159519,2039],{}," 直接结束整个循环。",[90,159522,159524],{"className":30359,"code":159523,"language":30361,"meta":21,"style":21},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[96,159525,159526,159546,159558,159562],{"__ignoreMap":21},[99,159527,159528,159530,159532,159534,159536,159538,159540,159542,159544],{"class":101,"line":102},[99,159529,3011],{"class":105},[99,159531,9425],{"class":109},[99,159533,26032],{"class":105},[99,159535,32424],{"class":158},[99,159537,110],{"class":109},[99,159539,327],{"class":158},[99,159541,12422],{"class":109},[99,159543,454],{"class":158},[99,159545,30767],{"class":109},[99,159547,159548,159550,159552,159554,159556],{"class":101,"line":22},[99,159549,3087],{"class":105},[99,159551,9425],{"class":109},[99,159553,2935],{"class":105},[99,159555,78051],{"class":158},[99,159557,3725],{"class":109},[99,159559,159560],{"class":101,"line":1165},[99,159561,31608],{"class":105},[99,159563,159564,159566],{"class":101,"line":1180},[99,159565,31280],{"class":158},[99,159567,159211],{"class":109},[14,159569,146438],{},[90,159571,159574],{"className":159572,"code":159573,"language":5174,"meta":21},[5172],"1\n2\n",[96,159575,159573],{"__ignoreMap":21},[70,159577,159579],{"id":159578},"_452-continue","4.5.2 continue",[14,159581,159582,159584],{},[96,159583,154653],{}," 跳过本轮剩余代码，进入下一轮循环。",[90,159586,159588],{"className":30359,"code":159587,"language":30361,"meta":21,"style":21},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[96,159589,159590,159610,159622,159626],{"__ignoreMap":21},[99,159591,159592,159594,159596,159598,159600,159602,159604,159606,159608],{"class":101,"line":102},[99,159593,3011],{"class":105},[99,159595,9425],{"class":109},[99,159597,26032],{"class":105},[99,159599,32424],{"class":158},[99,159601,110],{"class":109},[99,159603,327],{"class":158},[99,159605,12422],{"class":109},[99,159607,454],{"class":158},[99,159609,30767],{"class":109},[99,159611,159612,159614,159616,159618,159620],{"class":101,"line":22},[99,159613,3087],{"class":105},[99,159615,9425],{"class":109},[99,159617,2935],{"class":105},[99,159619,78051],{"class":158},[99,159621,3725],{"class":109},[99,159623,159624],{"class":101,"line":1165},[99,159625,148493],{"class":105},[99,159627,159628,159630],{"class":101,"line":1180},[99,159629,31280],{"class":158},[99,159631,159211],{"class":109},[14,159633,146438],{},[90,159635,159638],{"className":159636,"code":159637,"language":5174,"meta":21},[5172],"1\n2\n4\n5\n",[96,159639,159637],{"__ignoreMap":21},[41,159641,159643],{"id":159642},"_46-for循环","4.6 for循环",[14,159645,159646,159648],{},[96,159647,3011],{}," 常用于遍历序列。",[90,159650,159652],{"className":30359,"code":159651,"language":30361,"meta":21,"style":21},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[96,159653,159654,159663,159667,159678],{"__ignoreMap":21},[99,159655,159656,159658,159660],{"class":101,"line":102},[99,159657,146517],{"class":109},[99,159659,155],{"class":105},[99,159661,159662],{"class":214}," \"python\"\n",[99,159664,159665],{"class":101,"line":22},[99,159666,2386],{"emptyLinePlaceholder":26},[99,159668,159669,159671,159674,159676],{"class":101,"line":1165},[99,159670,3011],{"class":105},[99,159672,159673],{"class":109}," ch ",[99,159675,26032],{"class":105},[99,159677,158380],{"class":109},[99,159679,159680,159682],{"class":101,"line":1180},[99,159681,31280],{"class":158},[99,159683,159684],{"class":109},"(ch)\n",[14,159686,159687],{},"遍历列表：",[90,159689,159691],{"className":30359,"code":159690,"language":30361,"meta":21,"style":21},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[96,159692,159693,159715,159719,159729],{"__ignoreMap":21},[99,159694,159695,159698,159700,159702,159704,159706,159708,159710,159713],{"class":101,"line":102},[99,159696,159697],{"class":109},"students ",[99,159699,155],{"class":105},[99,159701,52207],{"class":109},[99,159703,149869],{"class":214},[99,159705,12422],{"class":109},[99,159707,150917],{"class":214},[99,159709,12422],{"class":109},[99,159711,159712],{"class":214},"\"小刚\"",[99,159714,33227],{"class":109},[99,159716,159717],{"class":101,"line":22},[99,159718,2386],{"emptyLinePlaceholder":26},[99,159720,159721,159723,159725,159727],{"class":101,"line":1165},[99,159722,3011],{"class":105},[99,159724,152118],{"class":109},[99,159726,26032],{"class":105},[99,159728,152123],{"class":109},[99,159730,159731,159733],{"class":101,"line":1180},[99,159732,31280],{"class":158},[99,159734,150023],{"class":109},[41,159736,159738],{"id":159737},"_47-range函数","4.7 range函数",[14,159740,159741,159744],{},[96,159742,159743],{},"range()"," 用于生成整数序列。",[90,159746,159748],{"className":30359,"code":159747,"language":30361,"meta":21,"style":21},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[96,159749,159750,159764,159782],{"__ignoreMap":21},[99,159751,159752,159754,159756,159758,159761],{"class":101,"line":102},[99,159753,33397],{"class":158},[99,159755,110],{"class":109},[99,159757,429],{"class":158},[99,159759,159760],{"class":109},")          ",[99,159762,159763],{"class":168},"# 0,1,2,3,4\n",[99,159765,159766,159768,159770,159772,159774,159776,159779],{"class":101,"line":22},[99,159767,33397],{"class":158},[99,159769,110],{"class":109},[99,159771,327],{"class":158},[99,159773,12422],{"class":109},[99,159775,429],{"class":158},[99,159777,159778],{"class":109},")       ",[99,159780,159781],{"class":168},"# 1,2,3,4\n",[99,159783,159784,159786,159788,159790,159792,159794,159796,159798,159800],{"class":101,"line":1165},[99,159785,33397],{"class":158},[99,159787,110],{"class":109},[99,159789,327],{"class":158},[99,159791,12422],{"class":109},[99,159793,556],{"class":158},[99,159795,12422],{"class":109},[99,159797,187],{"class":158},[99,159799,155642],{"class":109},[99,159801,159802],{"class":168},"# 1,3,5,7,9\n",[14,159804,159805,159806,24607],{},"配合 ",[96,159807,3011],{},[90,159809,159811],{"className":30359,"code":159810,"language":30361,"meta":21,"style":21},"for i in range(1, 6):\n    print(i)\n",[96,159812,159813,159833],{"__ignoreMap":21},[99,159814,159815,159817,159819,159821,159823,159825,159827,159829,159831],{"class":101,"line":102},[99,159816,3011],{"class":105},[99,159818,9425],{"class":109},[99,159820,26032],{"class":105},[99,159822,32424],{"class":158},[99,159824,110],{"class":109},[99,159826,327],{"class":158},[99,159828,12422],{"class":109},[99,159830,454],{"class":158},[99,159832,30767],{"class":109},[99,159834,159835,159837],{"class":101,"line":22},[99,159836,31280],{"class":158},[99,159838,159211],{"class":109},[14,159840,9012,159841,159843],{},[96,159842,33397],{}," 的结束值不包含在内。",[41,159845,159847],{"id":159846},"_48-for循环求和","4.8 for循环求和",[90,159849,159851],{"className":30359,"code":159850,"language":30361,"meta":21,"style":21},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[96,159852,159853,159861,159865,159885,159893,159897],{"__ignoreMap":21},[99,159854,159855,159857,159859],{"class":101,"line":102},[99,159856,157241],{"class":109},[99,159858,155],{"class":105},[99,159860,47314],{"class":158},[99,159862,159863],{"class":101,"line":22},[99,159864,2386],{"emptyLinePlaceholder":26},[99,159866,159867,159869,159871,159873,159875,159877,159879,159881,159883],{"class":101,"line":1165},[99,159868,3011],{"class":105},[99,159870,9425],{"class":109},[99,159872,26032],{"class":105},[99,159874,32424],{"class":158},[99,159876,110],{"class":109},[99,159878,327],{"class":158},[99,159880,12422],{"class":109},[99,159882,447],{"class":158},[99,159884,30767],{"class":109},[99,159886,159887,159889,159891],{"class":101,"line":1180},[99,159888,159288],{"class":109},[99,159890,9464],{"class":105},[99,159892,159293],{"class":109},[99,159894,159895],{"class":101,"line":1186},[99,159896,2386],{"emptyLinePlaceholder":26},[99,159898,159899,159901],{"class":101,"line":1200},[99,159900,30396],{"class":158},[99,159902,159312],{"class":109},[14,159904,159905],{},"求偶数和：",[90,159907,159909],{"className":30359,"code":159908,"language":30361,"meta":21,"style":21},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[96,159910,159911,159919,159923,159943,159959,159968,159972],{"__ignoreMap":21},[99,159912,159913,159915,159917],{"class":101,"line":102},[99,159914,157241],{"class":109},[99,159916,155],{"class":105},[99,159918,47314],{"class":158},[99,159920,159921],{"class":101,"line":22},[99,159922,2386],{"emptyLinePlaceholder":26},[99,159924,159925,159927,159929,159931,159933,159935,159937,159939,159941],{"class":101,"line":1165},[99,159926,3011],{"class":105},[99,159928,9425],{"class":109},[99,159930,26032],{"class":105},[99,159932,32424],{"class":158},[99,159934,110],{"class":109},[99,159936,327],{"class":158},[99,159938,12422],{"class":109},[99,159940,447],{"class":158},[99,159942,30767],{"class":109},[99,159944,159945,159947,159949,159951,159953,159955,159957],{"class":101,"line":1180},[99,159946,3087],{"class":105},[99,159948,9425],{"class":109},[99,159950,438],{"class":105},[99,159952,14742],{"class":158},[99,159954,101540],{"class":105},[99,159956,4079],{"class":158},[99,159958,3725],{"class":109},[99,159960,159961,159964,159966],{"class":101,"line":1186},[99,159962,159963],{"class":109},"        total ",[99,159965,9464],{"class":105},[99,159967,159293],{"class":109},[99,159969,159970],{"class":101,"line":1200},[99,159971,2386],{"emptyLinePlaceholder":26},[99,159973,159974,159976],{"class":101,"line":1206},[99,159975,30396],{"class":158},[99,159977,159312],{"class":109},[14,159979,159980],{},"也可以：",[90,159982,159984],{"className":30359,"code":159983,"language":30361,"meta":21,"style":21},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[96,159985,159986,159994,159998,160022,160030,160034],{"__ignoreMap":21},[99,159987,159988,159990,159992],{"class":101,"line":102},[99,159989,157241],{"class":109},[99,159991,155],{"class":105},[99,159993,47314],{"class":158},[99,159995,159996],{"class":101,"line":22},[99,159997,2386],{"emptyLinePlaceholder":26},[99,159999,160000,160002,160004,160006,160008,160010,160012,160014,160016,160018,160020],{"class":101,"line":1165},[99,160001,3011],{"class":105},[99,160003,9425],{"class":109},[99,160005,26032],{"class":105},[99,160007,32424],{"class":158},[99,160009,110],{"class":109},[99,160011,187],{"class":158},[99,160013,12422],{"class":109},[99,160015,447],{"class":158},[99,160017,12422],{"class":109},[99,160019,187],{"class":158},[99,160021,30767],{"class":109},[99,160023,160024,160026,160028],{"class":101,"line":1180},[99,160025,159288],{"class":109},[99,160027,9464],{"class":105},[99,160029,159293],{"class":109},[99,160031,160032],{"class":101,"line":1186},[99,160033,2386],{"emptyLinePlaceholder":26},[99,160035,160036,160038],{"class":101,"line":1200},[99,160037,30396],{"class":158},[99,160039,159312],{"class":109},[41,160041,160043],{"id":160042},"_49-循环嵌套","4.9 循环嵌套",[14,160045,160046],{},"嵌套循环就是循环里面再写循环。",[90,160048,160050],{"className":30359,"code":160049,"language":30361,"meta":21,"style":21},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[96,160051,160052,160072,160092],{"__ignoreMap":21},[99,160053,160054,160056,160058,160060,160062,160064,160066,160068,160070],{"class":101,"line":102},[99,160055,3011],{"class":105},[99,160057,9425],{"class":109},[99,160059,26032],{"class":105},[99,160061,32424],{"class":158},[99,160063,110],{"class":109},[99,160065,327],{"class":158},[99,160067,12422],{"class":109},[99,160069,403],{"class":158},[99,160071,30767],{"class":109},[99,160073,160074,160076,160078,160080,160082,160084,160086,160088,160090],{"class":101,"line":22},[99,160075,3187],{"class":105},[99,160077,9487],{"class":109},[99,160079,26032],{"class":105},[99,160081,32424],{"class":158},[99,160083,110],{"class":109},[99,160085,327],{"class":158},[99,160087,12422],{"class":109},[99,160089,403],{"class":158},[99,160091,30767],{"class":109},[99,160093,160094,160096,160098,160100,160103,160105,160107,160109,160112,160114,160116,160118,160120],{"class":101,"line":1165},[99,160095,32432],{"class":158},[99,160097,110],{"class":109},[99,160099,162],{"class":105},[99,160101,160102],{"class":214},"\"i=",[99,160104,1006],{"class":158},[99,160106,551],{"class":109},[99,160108,1056],{"class":158},[99,160110,160111],{"class":214},", j=",[99,160113,1006],{"class":158},[99,160115,577],{"class":109},[99,160117,1056],{"class":158},[99,160119,361],{"class":214},[99,160121,116],{"class":109},[14,160123,160124],{},"外层循环执行一次，内层循环执行完整一轮。",[41,160126,160128],{"id":160127},"_410-九九乘法表","4.10 九九乘法表",[90,160130,160132],{"className":30359,"code":160131,"language":30361,"meta":21,"style":21},"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",[96,160133,160134,160154,160177,160229],{"__ignoreMap":21},[99,160135,160136,160138,160140,160142,160144,160146,160148,160150,160152],{"class":101,"line":102},[99,160137,3011],{"class":105},[99,160139,9425],{"class":109},[99,160141,26032],{"class":105},[99,160143,32424],{"class":158},[99,160145,110],{"class":109},[99,160147,327],{"class":158},[99,160149,12422],{"class":109},[99,160151,556],{"class":158},[99,160153,30767],{"class":109},[99,160155,160156,160158,160160,160162,160164,160166,160168,160171,160173,160175],{"class":101,"line":22},[99,160157,3187],{"class":105},[99,160159,9487],{"class":109},[99,160161,26032],{"class":105},[99,160163,32424],{"class":158},[99,160165,110],{"class":109},[99,160167,327],{"class":158},[99,160169,160170],{"class":109},", i ",[99,160172,591],{"class":105},[99,160174,25107],{"class":158},[99,160176,30767],{"class":109},[99,160178,160179,160181,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227],{"class":101,"line":1165},[99,160180,32432],{"class":158},[99,160182,110],{"class":109},[99,160184,162],{"class":105},[99,160186,361],{"class":214},[99,160188,1006],{"class":158},[99,160190,577],{"class":109},[99,160192,1056],{"class":158},[99,160194,565],{"class":214},[99,160196,1006],{"class":158},[99,160198,551],{"class":109},[99,160200,1056],{"class":158},[99,160202,155],{"class":214},[99,160204,1006],{"class":158},[99,160206,100129],{"class":109},[99,160208,565],{"class":105},[99,160210,3396],{"class":109},[99,160212,1056],{"class":158},[99,160214,361],{"class":214},[99,160216,12422],{"class":109},[99,160218,45782],{"class":5203},[99,160220,155],{"class":105},[99,160222,361],{"class":214},[99,160224,1216],{"class":158},[99,160226,361],{"class":214},[99,160228,116],{"class":109},[99,160230,160231,160233],{"class":101,"line":1180},[99,160232,31280],{"class":158},[99,160234,1962],{"class":109},[14,160236,160237],{},"关键点：",[53,160239,160240,160246,160252,160258],{},[56,160241,160242,160243,160245],{},"外层 ",[96,160244,551],{}," 控制行。",[56,160247,160248,160249,160251],{},"内层 ",[96,160250,577],{}," 控制列。",[56,160253,160254,160255,160257],{},"每行结束后用 ",[96,160256,146453],{}," 换行。",[56,160259,160260,160263],{},[96,160261,160262],{},"end=\"\\t\""," 让同一行的内容横向排列。",[41,160265,160267],{"id":160266},"_411-循环else","4.11 循环else",[14,160269,160270,160271,160273,160274,160276,160277,160279],{},"Python 的循环可以带 ",[96,160272,1687],{},"。当循环正常结束时执行 ",[96,160275,1687],{},"，如果被 ",[96,160278,2039],{}," 打断，则不执行。",[90,160281,160283],{"className":30359,"code":160282,"language":30361,"meta":21,"style":21},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[96,160284,160285,160305,160317,160328,160332,160338],{"__ignoreMap":21},[99,160286,160287,160289,160291,160293,160295,160297,160299,160301,160303],{"class":101,"line":102},[99,160288,3011],{"class":105},[99,160290,9425],{"class":109},[99,160292,26032],{"class":105},[99,160294,32424],{"class":158},[99,160296,110],{"class":109},[99,160298,327],{"class":158},[99,160300,12422],{"class":109},[99,160302,454],{"class":158},[99,160304,30767],{"class":109},[99,160306,160307,160309,160311,160313,160315],{"class":101,"line":22},[99,160308,3087],{"class":105},[99,160310,9425],{"class":109},[99,160312,2935],{"class":105},[99,160314,2024],{"class":158},[99,160316,3725],{"class":109},[99,160318,160319,160321,160323,160326],{"class":101,"line":1165},[99,160320,32432],{"class":158},[99,160322,110],{"class":109},[99,160324,160325],{"class":214},"\"找到了\"",[99,160327,116],{"class":109},[99,160329,160330],{"class":101,"line":1180},[99,160331,31608],{"class":105},[99,160333,160334,160336],{"class":101,"line":1186},[99,160335,1687],{"class":105},[99,160337,3725],{"class":109},[99,160339,160340,160342,160344,160347],{"class":101,"line":1200},[99,160341,31280],{"class":158},[99,160343,110],{"class":109},[99,160345,160346],{"class":214},"\"没找到\"",[99,160348,116],{"class":109},[14,160350,160351],{},"常用于搜索。",[90,160353,160355],{"className":30359,"code":160354,"language":30361,"meta":21,"style":21},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[96,160356,160357,160378,160387,160391,160403,160414,160424,160428,160434],{"__ignoreMap":21},[99,160358,160359,160362,160364,160366,160368,160370,160372,160374,160376],{"class":101,"line":102},[99,160360,160361],{"class":109},"names ",[99,160363,155],{"class":105},[99,160365,52207],{"class":109},[99,160367,149869],{"class":214},[99,160369,12422],{"class":109},[99,160371,150917],{"class":214},[99,160373,12422],{"class":109},[99,160375,159712],{"class":214},[99,160377,33227],{"class":109},[99,160379,160380,160382,160384],{"class":101,"line":22},[99,160381,111559],{"class":109},[99,160383,155],{"class":105},[99,160385,160386],{"class":214}," \"小李\"\n",[99,160388,160389],{"class":101,"line":1165},[99,160390,2386],{"emptyLinePlaceholder":26},[99,160392,160393,160395,160398,160400],{"class":101,"line":1180},[99,160394,3011],{"class":105},[99,160396,160397],{"class":109}," name ",[99,160399,26032],{"class":105},[99,160401,160402],{"class":109}," names:\n",[99,160404,160405,160407,160409,160411],{"class":101,"line":1186},[99,160406,3087],{"class":105},[99,160408,160397],{"class":109},[99,160410,2935],{"class":105},[99,160412,160413],{"class":109}," target:\n",[99,160415,160416,160418,160420,160422],{"class":101,"line":1200},[99,160417,32432],{"class":158},[99,160419,110],{"class":109},[99,160421,160325],{"class":214},[99,160423,116],{"class":109},[99,160425,160426],{"class":101,"line":1206},[99,160427,31608],{"class":105},[99,160429,160430,160432],{"class":101,"line":1297},[99,160431,1687],{"class":105},[99,160433,3725],{"class":109},[99,160435,160436,160438,160440,160442],{"class":101,"line":1303},[99,160437,31280],{"class":158},[99,160439,110],{"class":109},[99,160441,160346],{"class":214},[99,160443,116],{"class":109},[41,160445,160447],{"id":160446},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160449,123273],{},[53,160451,160452,160455,160458],{},[56,160453,160454],{},"用户最多输入 3 次密码。",[56,160456,160457],{},"密码正确则登录成功。",[56,160459,160460],{},"3 次都错误则锁定账号。",[14,160462,10022],{},[90,160464,160466],{"className":30359,"code":160465,"language":30361,"meta":21,"style":21},"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",[96,160467,160468,160478,160482,160498,160514,160518,160530,160541,160545,160551,160576,160582],{"__ignoreMap":21},[99,160469,160470,160473,160475],{"class":101,"line":102},[99,160471,160472],{"class":109},"password ",[99,160474,155],{"class":105},[99,160476,160477],{"class":214}," \"123456\"\n",[99,160479,160480],{"class":101,"line":22},[99,160481,2386],{"emptyLinePlaceholder":26},[99,160483,160484,160486,160488,160490,160492,160494,160496],{"class":101,"line":1165},[99,160485,3011],{"class":105},[99,160487,9425],{"class":109},[99,160489,26032],{"class":105},[99,160491,32424],{"class":158},[99,160493,110],{"class":109},[99,160495,181],{"class":158},[99,160497,30767],{"class":109},[99,160499,160500,160503,160505,160507,160509,160512],{"class":101,"line":1180},[99,160501,160502],{"class":109},"    user_password ",[99,160504,155],{"class":105},[99,160506,60586],{"class":158},[99,160508,110],{"class":109},[99,160510,160511],{"class":214},"\"请输入密码:\"",[99,160513,116],{"class":109},[99,160515,160516],{"class":101,"line":1186},[99,160517,2386],{"emptyLinePlaceholder":26},[99,160519,160520,160522,160525,160527],{"class":101,"line":1200},[99,160521,3087],{"class":105},[99,160523,160524],{"class":109}," user_password ",[99,160526,2935],{"class":105},[99,160528,160529],{"class":109}," password:\n",[99,160531,160532,160534,160536,160539],{"class":101,"line":1206},[99,160533,32432],{"class":158},[99,160535,110],{"class":109},[99,160537,160538],{"class":214},"\"登录成功\"",[99,160540,116],{"class":109},[99,160542,160543],{"class":101,"line":1297},[99,160544,31608],{"class":105},[99,160546,160547,160549],{"class":101,"line":1303},[99,160548,158003],{"class":105},[99,160550,3725],{"class":109},[99,160552,160553,160555,160557,160559,160562,160565,160567,160569,160571,160574],{"class":101,"line":1315},[99,160554,32432],{"class":158},[99,160556,110],{"class":109},[99,160558,162],{"class":105},[99,160560,160561],{"class":214},"\"密码错误，还剩",[99,160563,160564],{"class":158},"{2",[99,160566,52252],{"class":105},[99,160568,3018],{"class":109},[99,160570,1056],{"class":158},[99,160572,160573],{"class":214},"次机会\"",[99,160575,116],{"class":109},[99,160577,160578,160580],{"class":101,"line":1598},[99,160579,1687],{"class":105},[99,160581,3725],{"class":109},[99,160583,160584,160586,160588,160591],{"class":101,"line":1603},[99,160585,31280],{"class":158},[99,160587,110],{"class":109},[99,160589,160590],{"class":214},"\"账号已锁定\"",[99,160592,116],{"class":109},[41,160594,160596],{"id":160595},"_413-小案例菜单程序","4.13 小案例：菜单程序",[90,160598,160600],{"className":30359,"code":160599,"language":30361,"meta":21,"style":21},"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",[96,160601,160602,160610,160621,160632,160643,160654,160665,160669,160684,160688,160700,160711,160723,160734,160746,160757,160769,160779,160783,160789],{"__ignoreMap":21},[99,160603,160604,160606,160608],{"class":101,"line":102},[99,160605,108644],{"class":105},[99,160607,95273],{"class":158},[99,160609,3725],{"class":109},[99,160611,160612,160614,160616,160619],{"class":101,"line":22},[99,160613,31280],{"class":158},[99,160615,110],{"class":109},[99,160617,160618],{"class":214},"\"====== 菜单 ======\"",[99,160620,116],{"class":109},[99,160622,160623,160625,160627,160630],{"class":101,"line":1165},[99,160624,31280],{"class":158},[99,160626,110],{"class":109},[99,160628,160629],{"class":214},"\"1. 查询余额\"",[99,160631,116],{"class":109},[99,160633,160634,160636,160638,160641],{"class":101,"line":1180},[99,160635,31280],{"class":158},[99,160637,110],{"class":109},[99,160639,160640],{"class":214},"\"2. 存款\"",[99,160642,116],{"class":109},[99,160644,160645,160647,160649,160652],{"class":101,"line":1186},[99,160646,31280],{"class":158},[99,160648,110],{"class":109},[99,160650,160651],{"class":214},"\"3. 取款\"",[99,160653,116],{"class":109},[99,160655,160656,160658,160660,160663],{"class":101,"line":1200},[99,160657,31280],{"class":158},[99,160659,110],{"class":109},[99,160661,160662],{"class":214},"\"0. 退出\"",[99,160664,116],{"class":109},[99,160666,160667],{"class":101,"line":1206},[99,160668,2386],{"emptyLinePlaceholder":26},[99,160670,160671,160674,160676,160678,160680,160682],{"class":101,"line":1297},[99,160672,160673],{"class":109},"    choice ",[99,160675,155],{"class":105},[99,160677,60586],{"class":158},[99,160679,110],{"class":109},[99,160681,153054],{"class":214},[99,160683,116],{"class":109},[99,160685,160686],{"class":101,"line":1303},[99,160687,2386],{"emptyLinePlaceholder":26},[99,160689,160690,160692,160694,160696,160698],{"class":101,"line":1315},[99,160691,3087],{"class":105},[99,160693,153067],{"class":109},[99,160695,2935],{"class":105},[99,160697,153072],{"class":214},[99,160699,3725],{"class":109},[99,160701,160702,160704,160706,160709],{"class":101,"line":1598},[99,160703,32432],{"class":158},[99,160705,110],{"class":109},[99,160707,160708],{"class":214},"\"余额为1000元\"",[99,160710,116],{"class":109},[99,160712,160713,160715,160717,160719,160721],{"class":101,"line":1603},[99,160714,39274],{"class":105},[99,160716,153067],{"class":109},[99,160718,2935],{"class":105},[99,160720,153091],{"class":214},[99,160722,3725],{"class":109},[99,160724,160725,160727,160729,160732],{"class":101,"line":1609},[99,160726,32432],{"class":158},[99,160728,110],{"class":109},[99,160730,160731],{"class":214},"\"存款功能\"",[99,160733,116],{"class":109},[99,160735,160736,160738,160740,160742,160744],{"class":101,"line":1614},[99,160737,39274],{"class":105},[99,160739,153067],{"class":109},[99,160741,2935],{"class":105},[99,160743,153109],{"class":214},[99,160745,3725],{"class":109},[99,160747,160748,160750,160752,160755],{"class":101,"line":1628},[99,160749,32432],{"class":158},[99,160751,110],{"class":109},[99,160753,160754],{"class":214},"\"取款功能\"",[99,160756,116],{"class":109},[99,160758,160759,160761,160763,160765,160767],{"class":101,"line":1633},[99,160760,39274],{"class":105},[99,160762,153067],{"class":109},[99,160764,2935],{"class":105},[99,160766,153163],{"class":214},[99,160768,3725],{"class":109},[99,160770,160771,160773,160775,160777],{"class":101,"line":1639},[99,160772,32432],{"class":158},[99,160774,110],{"class":109},[99,160776,153174],{"class":214},[99,160778,116],{"class":109},[99,160780,160781],{"class":101,"line":1660},[99,160782,31608],{"class":105},[99,160784,160785,160787],{"class":101,"line":1665},[99,160786,158003],{"class":105},[99,160788,3725],{"class":109},[99,160790,160791,160793,160795,160797],{"class":101,"line":1679},[99,160792,32432],{"class":158},[99,160794,110],{"class":109},[99,160796,153195],{"class":214},[99,160798,116],{"class":109},[14,160800,160801,160802,160804,160805,28366],{},"菜单类程序通常使用 ",[96,160803,159503],{},"，用户选择退出时 ",[96,160806,2039],{},[41,160808,160810],{"id":160809},"_414-易错点","4.14 易错点",[53,160812,160813,160818,160824,160832,160838],{},[56,160814,160815,160817],{},[96,160816,108644],{}," 循环必须更新控制变量。",[56,160819,160820,160823],{},[96,160821,160822],{},"range(1, 10)"," 不包含 10。",[56,160825,160826,160828,160829,160831],{},[96,160827,2039],{}," 结束整个循环，",[96,160830,154653],{}," 只跳过本轮。",[56,160833,160834,160835,160837],{},"嵌套循环中，",[96,160836,2039],{}," 只跳出当前所在的一层循环。",[56,160839,160840],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[41,160842,160844],{"id":160843},"_415-本章练习","4.15 本章练习",[53,160846,160847,160850,160853,160856,160859],{},[56,160848,160849],{},"输出 1 到 100。",[56,160851,160852],{},"计算 1 到 100 的偶数和。",[56,160854,160855],{},"输出 100 以内能被 3 和 5 同时整除的数。",[56,160857,160858],{},"编写猜数字游戏，限制最多猜 7 次。",[56,160860,160861],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5113,160863,160864],{},"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":21,"searchDepth":22,"depth":22,"links":160866},[160867,160868,160869,160870,160871,160875,160876,160877,160878,160879,160880,160881,160882,160883,160884],{"id":159123,"depth":22,"text":159124},{"id":159153,"depth":22,"text":159154},{"id":159242,"depth":22,"text":159243},{"id":159336,"depth":22,"text":159337},{"id":159510,"depth":22,"text":159511,"children":160872},[160873,160874],{"id":159514,"depth":1165,"text":159515},{"id":159578,"depth":1165,"text":159579},{"id":159642,"depth":22,"text":159643},{"id":159737,"depth":22,"text":159738},{"id":159846,"depth":22,"text":159847},{"id":160042,"depth":22,"text":160043},{"id":160127,"depth":22,"text":160128},{"id":160266,"depth":22,"text":160267},{"id":160446,"depth":22,"text":160447},{"id":160595,"depth":22,"text":160596},{"id":160809,"depth":22,"text":160810},{"id":160843,"depth":22,"text":160844},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159115,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160891,"title":160892,"body":160893,"description":23364,"extension":24,"meta":162898,"navigation":26,"path":162899,"seo":162900,"stem":162901,"__hash__":162902},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160894,"toc":162878},[160895,160898,160902,160905,160908,160922,160925,160939,160943,160945,160964,160966,161013,161015,161029,161033,161107,161110,161114,161117,161176,161184,161187,161240,161243,161247,161252,161307,161315,161365,161369,161374,161382,161481,161487,161491,161496,161499,161510,161551,161564,161568,161571,161607,161610,161623,161626,161686,161690,161694,161697,161748,161752,161755,161802,161808,161874,161877,161881,161884,162000,162003,162007,162010,162116,162120,162123,162161,162164,162206,162209,162269,162272,162276,162740,162743,162747,162774,162780,162841,162845,162875],[10,160896,160892],{"id":160897},"_5-函数基础",[41,160899,160901],{"id":160900},"_51-为什么需要函数","5.1 为什么需要函数",[14,160903,160904],{},"函数用于封装一段可以重复使用的代码。",[14,160906,160907],{},"不使用函数的问题：",[53,160909,160910,160913,160916,160919],{},[56,160911,160912],{},"重复代码多。",[56,160914,160915],{},"修改逻辑时容易漏改。",[56,160917,160918],{},"主流程不清晰。",[56,160920,160921],{},"程序越写越长，难以维护。",[14,160923,160924],{},"使用函数后的好处：",[53,160926,160927,160930,160933,160936],{},[56,160928,160929],{},"提高复用性。",[56,160931,160932],{},"提高可读性。",[56,160934,160935],{},"便于调试。",[56,160937,160938],{},"便于分工。",[41,160940,160942],{"id":160941},"_52-函数定义","5.2 函数定义",[14,160944,5168],{},[90,160946,160948],{"className":30359,"code":160947,"language":30361,"meta":21,"style":21},"def 函数名():\n    函数体\n",[96,160949,160950,160959],{"__ignoreMap":21},[99,160951,160952,160954,160957],{"class":101,"line":102},[99,160953,31928],{"class":105},[99,160955,160956],{"class":1949}," 函数名",[99,160958,31934],{"class":109},[99,160960,160961],{"class":101,"line":22},[99,160962,160963],{"class":109},"    函数体\n",[14,160965,15122],{},[90,160967,160969],{"className":30359,"code":160968,"language":30361,"meta":21,"style":21},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[96,160970,160971,160980,160990,161000,161004,161008],{"__ignoreMap":21},[99,160972,160973,160975,160978],{"class":101,"line":102},[99,160974,31928],{"class":105},[99,160976,160977],{"class":1949}," say_hello",[99,160979,31934],{"class":109},[99,160981,160982,160984,160986,160988],{"class":101,"line":22},[99,160983,31280],{"class":158},[99,160985,110],{"class":109},[99,160987,5831],{"class":214},[99,160989,116],{"class":109},[99,160991,160992,160994,160996,160998],{"class":101,"line":1165},[99,160993,31280],{"class":158},[99,160995,110],{"class":109},[99,160997,146620],{"class":214},[99,160999,116],{"class":109},[99,161001,161002],{"class":101,"line":1180},[99,161003,2386],{"emptyLinePlaceholder":26},[99,161005,161006],{"class":101,"line":1186},[99,161007,2386],{"emptyLinePlaceholder":26},[99,161009,161010],{"class":101,"line":1200},[99,161011,161012],{"class":109},"say_hello()\n",[14,161014,9012],{},[53,161016,161017,161020,161023,161026],{},[56,161018,161019],{},"函数必须先定义，再调用。",[56,161021,161022],{},"函数名遵循变量命名规则。",[56,161024,161025],{},"函数体需要缩进。",[56,161027,161028],{},"函数不调用就不会执行。",[41,161030,161032],{"id":161031},"_53-函数调用","5.3 函数调用",[90,161034,161036],{"className":30359,"code":161035,"language":30361,"meta":21,"style":21},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[96,161037,161038,161047,161058,161069,161080,161090,161094,161098,161103],{"__ignoreMap":21},[99,161039,161040,161042,161045],{"class":101,"line":102},[99,161041,31928],{"class":105},[99,161043,161044],{"class":1949}," print_menu",[99,161046,31934],{"class":109},[99,161048,161049,161051,161053,161056],{"class":101,"line":22},[99,161050,31280],{"class":158},[99,161052,110],{"class":109},[99,161054,161055],{"class":214},"\"1. 查询\"",[99,161057,116],{"class":109},[99,161059,161060,161062,161064,161067],{"class":101,"line":1165},[99,161061,31280],{"class":158},[99,161063,110],{"class":109},[99,161065,161066],{"class":214},"\"2. 添加\"",[99,161068,116],{"class":109},[99,161070,161071,161073,161075,161078],{"class":101,"line":1180},[99,161072,31280],{"class":158},[99,161074,110],{"class":109},[99,161076,161077],{"class":214},"\"3. 删除\"",[99,161079,116],{"class":109},[99,161081,161082,161084,161086,161088],{"class":101,"line":1186},[99,161083,31280],{"class":158},[99,161085,110],{"class":109},[99,161087,160662],{"class":214},[99,161089,116],{"class":109},[99,161091,161092],{"class":101,"line":1200},[99,161093,2386],{"emptyLinePlaceholder":26},[99,161095,161096],{"class":101,"line":1206},[99,161097,2386],{"emptyLinePlaceholder":26},[99,161099,161100],{"class":101,"line":1297},[99,161101,161102],{"class":109},"print_menu()\n",[99,161104,161105],{"class":101,"line":1303},[99,161106,161102],{"class":109},[14,161108,161109],{},"函数可以多次调用，每次调用都会执行函数体。",[41,161111,161113],{"id":161112},"_54-参数","5.4 参数",[14,161115,161116],{},"参数用于向函数传递数据。",[90,161118,161120],{"className":30359,"code":161119,"language":30361,"meta":21,"style":21},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[96,161121,161122,161131,161151,161155,161159,161168],{"__ignoreMap":21},[99,161123,161124,161126,161128],{"class":101,"line":102},[99,161125,31928],{"class":105},[99,161127,160977],{"class":1949},[99,161129,161130],{"class":109},"(name):\n",[99,161132,161133,161135,161137,161139,161141,161143,161145,161147,161149],{"class":101,"line":22},[99,161134,31280],{"class":158},[99,161136,110],{"class":109},[99,161138,162],{"class":105},[99,161140,157035],{"class":214},[99,161142,1006],{"class":158},[99,161144,79791],{"class":109},[99,161146,1056],{"class":158},[99,161148,361],{"class":214},[99,161150,116],{"class":109},[99,161152,161153],{"class":101,"line":1165},[99,161154,2386],{"emptyLinePlaceholder":26},[99,161156,161157],{"class":101,"line":1180},[99,161158,2386],{"emptyLinePlaceholder":26},[99,161160,161161,161164,161166],{"class":101,"line":1186},[99,161162,161163],{"class":109},"say_hello(",[99,161165,149869],{"class":214},[99,161167,116],{"class":109},[99,161169,161170,161172,161174],{"class":101,"line":1200},[99,161171,161163],{"class":109},[99,161173,150917],{"class":214},[99,161175,116],{"class":109},[14,161177,161178,161180,161181,161183],{},[96,161179,79791],{}," 是形参，",[96,161182,149869],{}," 是实参。",[14,161185,161186],{},"多个参数：",[90,161188,161190],{"className":30359,"code":161189,"language":30361,"meta":21,"style":21},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[96,161191,161192,161200,161213,161219,161223,161227],{"__ignoreMap":21},[99,161193,161194,161196,161198],{"class":101,"line":102},[99,161195,31928],{"class":105},[99,161197,5196],{"class":1949},[99,161199,151074],{"class":109},[99,161201,161202,161205,161207,161209,161211],{"class":101,"line":22},[99,161203,161204],{"class":109},"    result ",[99,161206,155],{"class":105},[99,161208,10856],{"class":109},[99,161210,591],{"class":105},[99,161212,151085],{"class":109},[99,161214,161215,161217],{"class":101,"line":1165},[99,161216,31280],{"class":158},[99,161218,76566],{"class":109},[99,161220,161221],{"class":101,"line":1180},[99,161222,2386],{"emptyLinePlaceholder":26},[99,161224,161225],{"class":101,"line":1186},[99,161226,2386],{"emptyLinePlaceholder":26},[99,161228,161229,161232,161234,161236,161238],{"class":101,"line":1200},[99,161230,161231],{"class":109},"add(",[99,161233,556],{"class":158},[99,161235,12422],{"class":109},[99,161237,810],{"class":158},[99,161239,116],{"class":109},[14,161241,161242],{},"调用时参数数量必须匹配。",[41,161244,161246],{"id":161245},"_55-返回值","5.5 返回值",[14,161248,161249,161251],{},[96,161250,17033],{}," 用于把函数内部的结果返回给调用者。",[90,161253,161255],{"className":30359,"code":161254,"language":30361,"meta":21,"style":21},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[96,161256,161257,161265,161275,161279,161283,161301],{"__ignoreMap":21},[99,161258,161259,161261,161263],{"class":101,"line":102},[99,161260,31928],{"class":105},[99,161262,5196],{"class":1949},[99,161264,151074],{"class":109},[99,161266,161267,161269,161271,161273],{"class":101,"line":22},[99,161268,4076],{"class":105},[99,161270,10856],{"class":109},[99,161272,591],{"class":105},[99,161274,151085],{"class":109},[99,161276,161277],{"class":101,"line":1165},[99,161278,2386],{"emptyLinePlaceholder":26},[99,161280,161281],{"class":101,"line":1180},[99,161282,2386],{"emptyLinePlaceholder":26},[99,161284,161285,161288,161290,161293,161295,161297,161299],{"class":101,"line":1186},[99,161286,161287],{"class":109},"result ",[99,161289,155],{"class":105},[99,161291,161292],{"class":109}," add(",[99,161294,556],{"class":158},[99,161296,12422],{"class":109},[99,161298,810],{"class":158},[99,161300,116],{"class":109},[99,161302,161303,161305],{"class":101,"line":1200},[99,161304,30396],{"class":158},[99,161306,76566],{"class":109},[14,161308,161309,161310,161312,161313,28366],{},"如果函数没有写 ",[96,161311,17033],{},"，默认返回 ",[96,161314,95667],{},[90,161316,161318],{"className":30359,"code":161317,"language":30361,"meta":21,"style":21},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[96,161319,161320,161328,161338,161342,161346,161355],{"__ignoreMap":21},[99,161321,161322,161324,161326],{"class":101,"line":102},[99,161323,31928],{"class":105},[99,161325,160977],{"class":1949},[99,161327,31934],{"class":109},[99,161329,161330,161332,161334,161336],{"class":101,"line":22},[99,161331,31280],{"class":158},[99,161333,110],{"class":109},[99,161335,5831],{"class":214},[99,161337,116],{"class":109},[99,161339,161340],{"class":101,"line":1165},[99,161341,2386],{"emptyLinePlaceholder":26},[99,161343,161344],{"class":101,"line":1180},[99,161345,2386],{"emptyLinePlaceholder":26},[99,161347,161348,161350,161352],{"class":101,"line":1186},[99,161349,161287],{"class":109},[99,161351,155],{"class":105},[99,161353,161354],{"class":109}," say_hello()\n",[99,161356,161357,161359,161362],{"class":101,"line":1200},[99,161358,30396],{"class":158},[99,161360,161361],{"class":109},"(result)  ",[99,161363,161364],{"class":168},"# None\n",[41,161366,161368],{"id":161367},"_56-return的作用","5.6 return的作用",[14,161370,161371,161373],{},[96,161372,17033],{}," 有两个作用：",[53,161375,161376,161379],{},[56,161377,161378],{},"返回结果。",[56,161380,161381],{},"结束函数。",[90,161383,161385],{"className":30359,"code":161384,"language":30361,"meta":21,"style":21},"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",[96,161386,161387,161397,161409,161416,161420,161432,161439,161443,161450,161454,161458,161469],{"__ignoreMap":21},[99,161388,161389,161391,161394],{"class":101,"line":102},[99,161390,31928],{"class":105},[99,161392,161393],{"class":1949}," check_age",[99,161395,161396],{"class":109},"(age):\n",[99,161398,161399,161401,161403,161405,161407],{"class":101,"line":22},[99,161400,3087],{"class":105},[99,161402,15694],{"class":109},[99,161404,1020],{"class":105},[99,161406,4079],{"class":158},[99,161408,3725],{"class":109},[99,161410,161411,161413],{"class":101,"line":1165},[99,161412,14739],{"class":105},[99,161414,161415],{"class":214}," \"年龄不合法\"\n",[99,161417,161418],{"class":101,"line":1180},[99,161419,2386],{"emptyLinePlaceholder":26},[99,161421,161422,161424,161426,161428,161430],{"class":101,"line":1186},[99,161423,3087],{"class":105},[99,161425,15694],{"class":109},[99,161427,1696],{"class":105},[99,161429,156266],{"class":158},[99,161431,3725],{"class":109},[99,161433,161434,161436],{"class":101,"line":1200},[99,161435,14739],{"class":105},[99,161437,161438],{"class":214}," \"成年人\"\n",[99,161440,161441],{"class":101,"line":1206},[99,161442,2386],{"emptyLinePlaceholder":26},[99,161444,161445,161447],{"class":101,"line":1297},[99,161446,4076],{"class":105},[99,161448,161449],{"class":214}," \"未成年人\"\n",[99,161451,161452],{"class":101,"line":1303},[99,161453,2386],{"emptyLinePlaceholder":26},[99,161455,161456],{"class":101,"line":1315},[99,161457,2386],{"emptyLinePlaceholder":26},[99,161459,161460,161462,161465,161467],{"class":101,"line":1598},[99,161461,30396],{"class":158},[99,161463,161464],{"class":109},"(check_age(",[99,161466,810],{"class":158},[99,161468,30478],{"class":109},[99,161470,161471,161473,161475,161477,161479],{"class":101,"line":1603},[99,161472,30396],{"class":158},[99,161474,161464],{"class":109},[99,161476,642],{"class":105},[99,161478,327],{"class":158},[99,161480,30478],{"class":109},[14,161482,161483,161484,161486],{},"函数执行到 ",[96,161485,17033],{}," 后，后面的代码不会继续执行。",[41,161488,161490],{"id":161489},"_57-none","5.7 None",[14,161492,161493,161495],{},[96,161494,95667],{}," 表示空值或没有结果。",[14,161497,161498],{},"常见使用场景：",[53,161500,161501,161504,161507],{},[56,161502,161503],{},"函数没有返回值。",[56,161505,161506],{},"变量暂时没有具体值。",[56,161508,161509],{},"表示查询不到结果。",[90,161511,161513],{"className":30359,"code":161512,"language":30361,"meta":21,"style":21},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[96,161514,161515,161523,161527,161540],{"__ignoreMap":21},[99,161516,161517,161519,161521],{"class":101,"line":102},[99,161518,161287],{"class":109},[99,161520,155],{"class":105},[99,161522,152153],{"class":158},[99,161524,161525],{"class":101,"line":22},[99,161526,2386],{"emptyLinePlaceholder":26},[99,161528,161529,161531,161534,161536,161538],{"class":101,"line":1165},[99,161530,1517],{"class":105},[99,161532,161533],{"class":109}," result ",[99,161535,38908],{"class":105},[99,161537,38914],{"class":158},[99,161539,3725],{"class":109},[99,161541,161542,161544,161546,161549],{"class":101,"line":1180},[99,161543,31280],{"class":158},[99,161545,110],{"class":109},[99,161547,161548],{"class":214},"\"没有数据\"",[99,161550,116],{"class":109},[14,161552,161553,161554,161556,161557,161560,161561,28366],{},"判断 ",[96,161555,95667],{}," 推荐使用 ",[96,161558,161559],{},"is None","，不要写成 ",[96,161562,161563],{},"== None",[41,161565,161567],{"id":161566},"_58-函数文档字符串","5.8 函数文档字符串",[14,161569,161570],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[90,161572,161574],{"className":30359,"code":161573,"language":30361,"meta":21,"style":21},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[96,161575,161576,161586,161591],{"__ignoreMap":21},[99,161577,161578,161580,161583],{"class":101,"line":102},[99,161579,31928],{"class":105},[99,161581,161582],{"class":1949}," calculate_bmi",[99,161584,161585],{"class":109},"(weight, height):\n",[99,161587,161588],{"class":101,"line":22},[99,161589,161590],{"class":214},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[99,161592,161593,161595,161598,161600,161603,161605],{"class":101,"line":1165},[99,161594,4076],{"class":105},[99,161596,161597],{"class":109}," weight ",[99,161599,694],{"class":105},[99,161601,161602],{"class":109}," height ",[99,161604,10648],{"class":105},[99,161606,47704],{"class":158},[14,161608,161609],{},"查看说明：",[90,161611,161613],{"className":30359,"code":161612,"language":30361,"meta":21,"style":21},"help(calculate_bmi)\n",[96,161614,161615],{"__ignoreMap":21},[99,161616,161617,161620],{"class":101,"line":102},[99,161618,161619],{"class":158},"help",[99,161621,161622],{"class":109},"(calculate_bmi)\n",[14,161624,161625],{},"较完整的写法：",[90,161627,161629],{"className":30359,"code":161628,"language":30361,"meta":21,"style":21},"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",[96,161630,161631,161639,161644,161649,161653,161658,161663,161668,161672],{"__ignoreMap":21},[99,161632,161633,161635,161637],{"class":101,"line":102},[99,161634,31928],{"class":105},[99,161636,161582],{"class":1949},[99,161638,161585],{"class":109},[99,161640,161641],{"class":101,"line":22},[99,161642,161643],{"class":214},"    \"\"\"\n",[99,161645,161646],{"class":101,"line":1165},[99,161647,161648],{"class":214},"    计算BMI。\n",[99,161650,161651],{"class":101,"line":1180},[99,161652,2386],{"emptyLinePlaceholder":26},[99,161654,161655],{"class":101,"line":1186},[99,161656,161657],{"class":214},"    :param weight: 体重，单位kg\n",[99,161659,161660],{"class":101,"line":1200},[99,161661,161662],{"class":214},"    :param height: 身高，单位m\n",[99,161664,161665],{"class":101,"line":1206},[99,161666,161667],{"class":214},"    :return: BMI数值\n",[99,161669,161670],{"class":101,"line":1297},[99,161671,161643],{"class":214},[99,161673,161674,161676,161678,161680,161682,161684],{"class":101,"line":1303},[99,161675,4076],{"class":105},[99,161677,161597],{"class":109},[99,161679,694],{"class":105},[99,161681,161602],{"class":109},[99,161683,10648],{"class":105},[99,161685,47704],{"class":158},[41,161687,161689],{"id":161688},"_59-变量作用域","5.9 变量作用域",[70,161691,161693],{"id":161692},"_591-局部变量","5.9.1 局部变量",[14,161695,161696],{},"在函数内部定义的变量，只能在函数内部使用。",[90,161698,161700],{"className":30359,"code":161699,"language":30361,"meta":21,"style":21},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[96,161701,161702,161711,161719,161725,161729,161733,161738],{"__ignoreMap":21},[99,161703,161704,161706,161709],{"class":101,"line":102},[99,161705,31928],{"class":105},[99,161707,161708],{"class":1949}," test",[99,161710,31934],{"class":109},[99,161712,161713,161715,161717],{"class":101,"line":22},[99,161714,45574],{"class":109},[99,161716,155],{"class":105},[99,161718,58409],{"class":158},[99,161720,161721,161723],{"class":101,"line":1165},[99,161722,31280],{"class":158},[99,161724,123],{"class":109},[99,161726,161727],{"class":101,"line":1180},[99,161728,2386],{"emptyLinePlaceholder":26},[99,161730,161731],{"class":101,"line":1186},[99,161732,2386],{"emptyLinePlaceholder":26},[99,161734,161735],{"class":101,"line":1200},[99,161736,161737],{"class":109},"test()\n",[99,161739,161740,161742,161745],{"class":101,"line":1206},[99,161741,30396],{"class":158},[99,161743,161744],{"class":109},"(num)  ",[99,161746,161747],{"class":168},"# 报错\n",[70,161749,161751],{"id":161750},"_592-全局变量","5.9.2 全局变量",[14,161753,161754],{},"在函数外部定义的变量，可以在函数内部读取。",[90,161756,161758],{"className":30359,"code":161757,"language":30361,"meta":21,"style":21},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[96,161759,161760,161768,161772,161776,161784,161790,161794,161798],{"__ignoreMap":21},[99,161761,161762,161764,161766],{"class":101,"line":102},[99,161763,146517],{"class":109},[99,161765,155],{"class":105},[99,161767,149334],{"class":214},[99,161769,161770],{"class":101,"line":22},[99,161771,2386],{"emptyLinePlaceholder":26},[99,161773,161774],{"class":101,"line":1165},[99,161775,2386],{"emptyLinePlaceholder":26},[99,161777,161778,161780,161782],{"class":101,"line":1180},[99,161779,31928],{"class":105},[99,161781,160977],{"class":1949},[99,161783,31934],{"class":109},[99,161785,161786,161788],{"class":101,"line":1186},[99,161787,31280],{"class":158},[99,161789,150641],{"class":109},[99,161791,161792],{"class":101,"line":1200},[99,161793,2386],{"emptyLinePlaceholder":26},[99,161795,161796],{"class":101,"line":1206},[99,161797,2386],{"emptyLinePlaceholder":26},[99,161799,161800],{"class":101,"line":1297},[99,161801,161012],{"class":109},[14,161803,161804,161805,28366],{},"如果要在函数内部修改全局变量，需要 ",[96,161806,161807],{},"global",[90,161809,161811],{"className":30359,"code":161810,"language":30361,"meta":21,"style":21},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[96,161812,161813,161821,161825,161829,161838,161846,161854,161858,161862,161867],{"__ignoreMap":21},[99,161814,161815,161817,161819],{"class":101,"line":102},[99,161816,146672],{"class":109},[99,161818,155],{"class":105},[99,161820,47314],{"class":158},[99,161822,161823],{"class":101,"line":22},[99,161824,2386],{"emptyLinePlaceholder":26},[99,161826,161827],{"class":101,"line":1165},[99,161828,2386],{"emptyLinePlaceholder":26},[99,161830,161831,161833,161836],{"class":101,"line":1180},[99,161832,31928],{"class":105},[99,161834,161835],{"class":1949}," add_count",[99,161837,31934],{"class":109},[99,161839,161840,161843],{"class":101,"line":1186},[99,161841,161842],{"class":105},"    global",[99,161844,161845],{"class":109}," count\n",[99,161847,161848,161850,161852],{"class":101,"line":1200},[99,161849,159414],{"class":109},[99,161851,9464],{"class":105},[99,161853,55680],{"class":158},[99,161855,161856],{"class":101,"line":1206},[99,161857,2386],{"emptyLinePlaceholder":26},[99,161859,161860],{"class":101,"line":1297},[99,161861,2386],{"emptyLinePlaceholder":26},[99,161863,161864],{"class":101,"line":1303},[99,161865,161866],{"class":109},"add_count()\n",[99,161868,161869,161871],{"class":101,"line":1315},[99,161870,30396],{"class":158},[99,161872,161873],{"class":109},"(count)\n",[14,161875,161876],{},"不建议大量使用全局变量，项目变大后很难维护。",[41,161878,161880],{"id":161879},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161882,161883],{},"一个函数中可以调用另一个函数。",[90,161885,161887],{"className":30359,"code":161886,"language":30361,"meta":21,"style":21},"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",[96,161888,161889,161898,161912,161916,161920,161929,161934,161954,161975,161979,161983,161987],{"__ignoreMap":21},[99,161890,161891,161893,161896],{"class":101,"line":102},[99,161892,31928],{"class":105},[99,161894,161895],{"class":1949}," print_line",[99,161897,31934],{"class":109},[99,161899,161900,161902,161904,161906,161908,161910],{"class":101,"line":22},[99,161901,31280],{"class":158},[99,161903,110],{"class":109},[99,161905,32464],{"class":214},[99,161907,6505],{"class":105},[99,161909,78646],{"class":158},[99,161911,116],{"class":109},[99,161913,161914],{"class":101,"line":1165},[99,161915,2386],{"emptyLinePlaceholder":26},[99,161917,161918],{"class":101,"line":1180},[99,161919,2386],{"emptyLinePlaceholder":26},[99,161921,161922,161924,161927],{"class":101,"line":1186},[99,161923,31928],{"class":105},[99,161925,161926],{"class":1949}," print_info",[99,161928,149356],{"class":109},[99,161930,161931],{"class":101,"line":1200},[99,161932,161933],{"class":109},"    print_line()\n",[99,161935,161936,161938,161940,161942,161944,161946,161948,161950,161952],{"class":101,"line":1206},[99,161937,31280],{"class":158},[99,161939,110],{"class":109},[99,161941,162],{"class":105},[99,161943,156663],{"class":214},[99,161945,1006],{"class":158},[99,161947,79791],{"class":109},[99,161949,1056],{"class":158},[99,161951,361],{"class":214},[99,161953,116],{"class":109},[99,161955,161956,161958,161960,161962,161965,161967,161969,161971,161973],{"class":101,"line":1297},[99,161957,31280],{"class":158},[99,161959,110],{"class":109},[99,161961,162],{"class":105},[99,161963,161964],{"class":214},"\"年龄:",[99,161966,1006],{"class":158},[99,161968,70202],{"class":109},[99,161970,1056],{"class":158},[99,161972,361],{"class":214},[99,161974,116],{"class":109},[99,161976,161977],{"class":101,"line":1303},[99,161978,161933],{"class":109},[99,161980,161981],{"class":101,"line":1315},[99,161982,2386],{"emptyLinePlaceholder":26},[99,161984,161985],{"class":101,"line":1598},[99,161986,2386],{"emptyLinePlaceholder":26},[99,161988,161989,161992,161994,161996,161998],{"class":101,"line":1603},[99,161990,161991],{"class":109},"print_info(",[99,161993,149869],{"class":214},[99,161995,12422],{"class":109},[99,161997,760],{"class":158},[99,161999,116],{"class":109},[14,162001,162002],{},"这种方式可以把小功能组合成大功能。",[41,162004,162006],{"id":162005},"_511-参数检查","5.11 参数检查",[14,162008,162009],{},"函数内部可以检查参数是否合法。",[90,162011,162013],{"className":30359,"code":162012,"language":30361,"meta":21,"style":21},"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",[96,162014,162015,162024,162036,162042,162052,162056,162060,162077,162081,162093,162104,162110],{"__ignoreMap":21},[99,162016,162017,162019,162022],{"class":101,"line":102},[99,162018,31928],{"class":105},[99,162020,162021],{"class":1949}," divide",[99,162023,151074],{"class":109},[99,162025,162026,162028,162030,162032,162034],{"class":101,"line":22},[99,162027,3087],{"class":105},[99,162029,10869],{"class":109},[99,162031,2935],{"class":105},[99,162033,4079],{"class":158},[99,162035,3725],{"class":109},[99,162037,162038,162040],{"class":101,"line":1165},[99,162039,14739],{"class":105},[99,162041,152153],{"class":158},[99,162043,162044,162046,162048,162050],{"class":101,"line":1180},[99,162045,4076],{"class":105},[99,162047,10856],{"class":109},[99,162049,694],{"class":105},[99,162051,151085],{"class":109},[99,162053,162054],{"class":101,"line":1186},[99,162055,2386],{"emptyLinePlaceholder":26},[99,162057,162058],{"class":101,"line":1200},[99,162059,2386],{"emptyLinePlaceholder":26},[99,162061,162062,162064,162066,162069,162071,162073,162075],{"class":101,"line":1206},[99,162063,161287],{"class":109},[99,162065,155],{"class":105},[99,162067,162068],{"class":109}," divide(",[99,162070,556],{"class":158},[99,162072,12422],{"class":109},[99,162074,301],{"class":158},[99,162076,116],{"class":109},[99,162078,162079],{"class":101,"line":1297},[99,162080,2386],{"emptyLinePlaceholder":26},[99,162082,162083,162085,162087,162089,162091],{"class":101,"line":1303},[99,162084,1517],{"class":105},[99,162086,161533],{"class":109},[99,162088,38908],{"class":105},[99,162090,38914],{"class":158},[99,162092,3725],{"class":109},[99,162094,162095,162097,162099,162102],{"class":101,"line":1315},[99,162096,31280],{"class":158},[99,162098,110],{"class":109},[99,162100,162101],{"class":214},"\"除数不能为0\"",[99,162103,116],{"class":109},[99,162105,162106,162108],{"class":101,"line":1598},[99,162107,1687],{"class":105},[99,162109,3725],{"class":109},[99,162111,162112,162114],{"class":101,"line":1603},[99,162113,31280],{"class":158},[99,162115,76566],{"class":109},[41,162117,162119],{"id":162118},"_512-类型提示","5.12 类型提示",[14,162121,162122],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[90,162124,162126],{"className":30359,"code":162125,"language":30361,"meta":21,"style":21},"def add(a: int, b: int) -> int:\n    return a + b\n",[96,162127,162128,162151],{"__ignoreMap":21},[99,162129,162130,162132,162134,162137,162139,162142,162144,162147,162149],{"class":101,"line":102},[99,162131,31928],{"class":105},[99,162133,5196],{"class":1949},[99,162135,162136],{"class":109},"(a: ",[99,162138,113],{"class":158},[99,162140,162141],{"class":109},", b: ",[99,162143,113],{"class":158},[99,162145,162146],{"class":109},") -> ",[99,162148,113],{"class":158},[99,162150,3725],{"class":109},[99,162152,162153,162155,162157,162159],{"class":101,"line":22},[99,162154,4076],{"class":105},[99,162156,10856],{"class":109},[99,162158,591],{"class":105},[99,162160,151085],{"class":109},[14,162162,162163],{},"字符串参数：",[90,162165,162167],{"className":30359,"code":162166,"language":30361,"meta":21,"style":21},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[96,162168,162169,162186],{"__ignoreMap":21},[99,162170,162171,162173,162175,162178,162180,162182,162184],{"class":101,"line":102},[99,162172,31928],{"class":105},[99,162174,160977],{"class":1949},[99,162176,162177],{"class":109},"(name: ",[99,162179,1285],{"class":158},[99,162181,162146],{"class":109},[99,162183,95667],{"class":158},[99,162185,3725],{"class":109},[99,162187,162188,162190,162192,162194,162196,162198,162200,162202,162204],{"class":101,"line":22},[99,162189,31280],{"class":158},[99,162191,110],{"class":109},[99,162193,162],{"class":105},[99,162195,157035],{"class":214},[99,162197,1006],{"class":158},[99,162199,79791],{"class":109},[99,162201,1056],{"class":158},[99,162203,361],{"class":214},[99,162205,116],{"class":109},[14,162207,162208],{},"列表参数：",[90,162210,162212],{"className":30359,"code":162211,"language":30361,"meta":21,"style":21},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[96,162213,162214,162233,162241,162253,162262],{"__ignoreMap":21},[99,162215,162216,162218,162221,162224,162226,162229,162231],{"class":101,"line":102},[99,162217,31928],{"class":105},[99,162219,162220],{"class":1949}," get_total",[99,162222,162223],{"class":109},"(numbers: list[",[99,162225,113],{"class":158},[99,162227,162228],{"class":109},"]) -> ",[99,162230,113],{"class":158},[99,162232,3725],{"class":109},[99,162234,162235,162237,162239],{"class":101,"line":22},[99,162236,159288],{"class":109},[99,162238,155],{"class":105},[99,162240,47314],{"class":158},[99,162242,162243,162245,162248,162250],{"class":101,"line":1165},[99,162244,3187],{"class":105},[99,162246,162247],{"class":109}," number ",[99,162249,26032],{"class":105},[99,162251,162252],{"class":109}," numbers:\n",[99,162254,162255,162257,162259],{"class":101,"line":1180},[99,162256,159963],{"class":109},[99,162258,9464],{"class":105},[99,162260,162261],{"class":109}," number\n",[99,162263,162264,162266],{"class":101,"line":1186},[99,162265,4076],{"class":105},[99,162267,162268],{"class":109}," total\n",[14,162270,162271],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[41,162273,162275],{"id":162274},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[90,162277,162279],{"className":30359,"code":162278,"language":30361,"meta":21,"style":21},"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",[96,162280,162281,162291,162295,162299,162307,162318,162328,162338,162348,162358,162362,162366,162375,162397,162401,162405,162414,162420,162440,162452,162463,162467,162476,162487,162492,162496,162500,162509,162515,162534,162546,162556,162560,162571,162581,162585,162593,162604,162608,162612,162616,162624,162629,162643,162647,162659,162664,162676,162681,162693,162698,162710,162720,162724,162730],{"__ignoreMap":21},[99,162282,162283,162286,162288],{"class":101,"line":102},[99,162284,162285],{"class":109},"balance ",[99,162287,155],{"class":105},[99,162289,162290],{"class":158}," 1000\n",[99,162292,162293],{"class":101,"line":22},[99,162294,2386],{"emptyLinePlaceholder":26},[99,162296,162297],{"class":101,"line":1165},[99,162298,2386],{"emptyLinePlaceholder":26},[99,162300,162301,162303,162305],{"class":101,"line":1180},[99,162302,31928],{"class":105},[99,162304,152014],{"class":1949},[99,162306,31934],{"class":109},[99,162308,162309,162311,162313,162316],{"class":101,"line":1186},[99,162310,31280],{"class":158},[99,162312,110],{"class":109},[99,162314,162315],{"class":214},"\"====== ATM ======\"",[99,162317,116],{"class":109},[99,162319,162320,162322,162324,162326],{"class":101,"line":1200},[99,162321,31280],{"class":158},[99,162323,110],{"class":109},[99,162325,160629],{"class":214},[99,162327,116],{"class":109},[99,162329,162330,162332,162334,162336],{"class":101,"line":1206},[99,162331,31280],{"class":158},[99,162333,110],{"class":109},[99,162335,160640],{"class":214},[99,162337,116],{"class":109},[99,162339,162340,162342,162344,162346],{"class":101,"line":1297},[99,162341,31280],{"class":158},[99,162343,110],{"class":109},[99,162345,160651],{"class":214},[99,162347,116],{"class":109},[99,162349,162350,162352,162354,162356],{"class":101,"line":1303},[99,162351,31280],{"class":158},[99,162353,110],{"class":109},[99,162355,160662],{"class":214},[99,162357,116],{"class":109},[99,162359,162360],{"class":101,"line":1315},[99,162361,2386],{"emptyLinePlaceholder":26},[99,162363,162364],{"class":101,"line":1598},[99,162365,2386],{"emptyLinePlaceholder":26},[99,162367,162368,162370,162373],{"class":101,"line":1603},[99,162369,31928],{"class":105},[99,162371,162372],{"class":1949}," show_balance",[99,162374,31934],{"class":109},[99,162376,162377,162379,162381,162383,162386,162388,162391,162393,162395],{"class":101,"line":1609},[99,162378,31280],{"class":158},[99,162380,110],{"class":109},[99,162382,162],{"class":105},[99,162384,162385],{"class":214},"\"当前余额:",[99,162387,1006],{"class":158},[99,162389,162390],{"class":109},"balance",[99,162392,1056],{"class":158},[99,162394,156993],{"class":214},[99,162396,116],{"class":109},[99,162398,162399],{"class":101,"line":1614},[99,162400,2386],{"emptyLinePlaceholder":26},[99,162402,162403],{"class":101,"line":1628},[99,162404,2386],{"emptyLinePlaceholder":26},[99,162406,162407,162409,162412],{"class":101,"line":1633},[99,162408,31928],{"class":105},[99,162410,162411],{"class":1949}," save_money",[99,162413,31934],{"class":109},[99,162415,162416,162418],{"class":101,"line":1639},[99,162417,161842],{"class":105},[99,162419,150080],{"class":109},[99,162421,162422,162425,162427,162429,162431,162433,162435,162438],{"class":101,"line":1660},[99,162423,162424],{"class":109},"    money ",[99,162426,155],{"class":105},[99,162428,109778],{"class":158},[99,162430,110],{"class":109},[99,162432,53802],{"class":158},[99,162434,110],{"class":109},[99,162436,162437],{"class":214},"\"请输入存款金额:\"",[99,162439,30478],{"class":109},[99,162441,162442,162444,162446,162448,162450],{"class":101,"line":1665},[99,162443,3087],{"class":105},[99,162445,150123],{"class":109},[99,162447,1574],{"class":105},[99,162449,4079],{"class":158},[99,162451,3725],{"class":109},[99,162453,162454,162456,162458,162461],{"class":101,"line":1679},[99,162455,32432],{"class":158},[99,162457,110],{"class":109},[99,162459,162460],{"class":214},"\"金额必须大于0\"",[99,162462,116],{"class":109},[99,162464,162465],{"class":101,"line":1684},[99,162466,152342],{"class":105},[99,162468,162469,162472,162474],{"class":101,"line":1713},[99,162470,162471],{"class":109},"    balance ",[99,162473,9464],{"class":105},[99,162475,150156],{"class":109},[99,162477,162478,162480,162482,162485],{"class":101,"line":1718},[99,162479,31280],{"class":158},[99,162481,110],{"class":109},[99,162483,162484],{"class":214},"\"存款成功\"",[99,162486,116],{"class":109},[99,162488,162489],{"class":101,"line":1735},[99,162490,162491],{"class":109},"    show_balance()\n",[99,162493,162494],{"class":101,"line":1740},[99,162495,2386],{"emptyLinePlaceholder":26},[99,162497,162498],{"class":101,"line":1745},[99,162499,2386],{"emptyLinePlaceholder":26},[99,162501,162502,162504,162507],{"class":101,"line":1750},[99,162503,31928],{"class":105},[99,162505,162506],{"class":1949}," withdraw_money",[99,162508,31934],{"class":109},[99,162510,162511,162513],{"class":101,"line":1764},[99,162512,161842],{"class":105},[99,162514,150080],{"class":109},[99,162516,162517,162519,162521,162523,162525,162527,162529,162532],{"class":101,"line":1769},[99,162518,162424],{"class":109},[99,162520,155],{"class":105},[99,162522,109778],{"class":158},[99,162524,110],{"class":109},[99,162526,53802],{"class":158},[99,162528,110],{"class":109},[99,162530,162531],{"class":214},"\"请输入取款金额:\"",[99,162533,30478],{"class":109},[99,162535,162536,162538,162540,162542,162544],{"class":101,"line":2563},[99,162537,3087],{"class":105},[99,162539,150123],{"class":109},[99,162541,1574],{"class":105},[99,162543,4079],{"class":158},[99,162545,3725],{"class":109},[99,162547,162548,162550,162552,162554],{"class":101,"line":2577},[99,162549,32432],{"class":158},[99,162551,110],{"class":109},[99,162553,162460],{"class":214},[99,162555,116],{"class":109},[99,162557,162558],{"class":101,"line":2585},[99,162559,152342],{"class":105},[99,162561,162562,162564,162566,162568],{"class":101,"line":2590},[99,162563,3087],{"class":105},[99,162565,150123],{"class":109},[99,162567,1070],{"class":105},[99,162569,162570],{"class":109}," balance:\n",[99,162572,162573,162575,162577,162579],{"class":101,"line":2596},[99,162574,32432],{"class":158},[99,162576,110],{"class":109},[99,162578,150218],{"class":214},[99,162580,116],{"class":109},[99,162582,162583],{"class":101,"line":2602},[99,162584,152342],{"class":105},[99,162586,162587,162589,162591],{"class":101,"line":2607},[99,162588,162471],{"class":109},[99,162590,150233],{"class":105},[99,162592,150156],{"class":109},[99,162594,162595,162597,162599,162602],{"class":101,"line":7935},[99,162596,31280],{"class":158},[99,162598,110],{"class":109},[99,162600,162601],{"class":214},"\"取款成功\"",[99,162603,116],{"class":109},[99,162605,162606],{"class":101,"line":7959},[99,162607,162491],{"class":109},[99,162609,162610],{"class":101,"line":7964},[99,162611,2386],{"emptyLinePlaceholder":26},[99,162613,162614],{"class":101,"line":7970},[99,162615,2386],{"emptyLinePlaceholder":26},[99,162617,162618,162620,162622],{"class":101,"line":7997},[99,162619,108644],{"class":105},[99,162621,95273],{"class":158},[99,162623,3725],{"class":109},[99,162625,162626],{"class":101,"line":8002},[99,162627,162628],{"class":109},"    show_menu()\n",[99,162630,162631,162633,162635,162637,162639,162641],{"class":101,"line":8008},[99,162632,160673],{"class":109},[99,162634,155],{"class":105},[99,162636,60586],{"class":158},[99,162638,110],{"class":109},[99,162640,153054],{"class":214},[99,162642,116],{"class":109},[99,162644,162645],{"class":101,"line":8020},[99,162646,2386],{"emptyLinePlaceholder":26},[99,162648,162649,162651,162653,162655,162657],{"class":101,"line":8032},[99,162650,3087],{"class":105},[99,162652,153067],{"class":109},[99,162654,2935],{"class":105},[99,162656,153072],{"class":214},[99,162658,3725],{"class":109},[99,162660,162661],{"class":101,"line":8044},[99,162662,162663],{"class":109},"        show_balance()\n",[99,162665,162666,162668,162670,162672,162674],{"class":101,"line":9703},[99,162667,39274],{"class":105},[99,162669,153067],{"class":109},[99,162671,2935],{"class":105},[99,162673,153091],{"class":214},[99,162675,3725],{"class":109},[99,162677,162678],{"class":101,"line":9728},[99,162679,162680],{"class":109},"        save_money()\n",[99,162682,162683,162685,162687,162689,162691],{"class":101,"line":9751},[99,162684,39274],{"class":105},[99,162686,153067],{"class":109},[99,162688,2935],{"class":105},[99,162690,153109],{"class":214},[99,162692,3725],{"class":109},[99,162694,162695],{"class":101,"line":9775},[99,162696,162697],{"class":109},"        withdraw_money()\n",[99,162699,162700,162702,162704,162706,162708],{"class":101,"line":9780},[99,162701,39274],{"class":105},[99,162703,153067],{"class":109},[99,162705,2935],{"class":105},[99,162707,153163],{"class":214},[99,162709,3725],{"class":109},[99,162711,162712,162714,162716,162718],{"class":101,"line":9785},[99,162713,32432],{"class":158},[99,162715,110],{"class":109},[99,162717,153174],{"class":214},[99,162719,116],{"class":109},[99,162721,162722],{"class":101,"line":9790},[99,162723,31608],{"class":105},[99,162725,162726,162728],{"class":101,"line":9799},[99,162727,158003],{"class":105},[99,162729,3725],{"class":109},[99,162731,162732,162734,162736,162738],{"class":101,"line":9804},[99,162733,32432],{"class":158},[99,162735,110],{"class":109},[99,162737,153195],{"class":214},[99,162739,116],{"class":109},[14,162741,162742],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[41,162744,162746],{"id":162745},"_514-易错点","5.14 易错点",[53,162748,162749,162752,162755,162760,162765,162768],{},[56,162750,162751],{},"函数定义后必须调用才会执行。",[56,162753,162754],{},"函数名后面有括号才是调用。",[56,162756,162757,162759],{},[96,162758,17033],{}," 后面的代码不会执行。",[56,162761,162762,162763,28366],{},"没有返回值的函数默认返回 ",[96,162764,95667],{},[56,162766,162767],{},"局部变量不能在函数外部访问。",[56,162769,162770,162771,162773],{},"不要滥用 ",[96,162772,161807],{},"，更好的方式是让函数返回新值。",[14,162775,162776,162777,162779],{},"例如不用 ",[96,162778,161807],{}," 改写存款：",[90,162781,162783],{"className":30359,"code":162782,"language":30361,"meta":21,"style":21},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[96,162784,162785,162794,162805,162809,162813,162821,162834],{"__ignoreMap":21},[99,162786,162787,162789,162791],{"class":101,"line":102},[99,162788,31928],{"class":105},[99,162790,162411],{"class":1949},[99,162792,162793],{"class":109},"(balance, money):\n",[99,162795,162796,162798,162801,162803],{"class":101,"line":22},[99,162797,4076],{"class":105},[99,162799,162800],{"class":109}," balance ",[99,162802,591],{"class":105},[99,162804,150156],{"class":109},[99,162806,162807],{"class":101,"line":1165},[99,162808,2386],{"emptyLinePlaceholder":26},[99,162810,162811],{"class":101,"line":1180},[99,162812,2386],{"emptyLinePlaceholder":26},[99,162814,162815,162817,162819],{"class":101,"line":1186},[99,162816,162285],{"class":109},[99,162818,155],{"class":105},[99,162820,162290],{"class":158},[99,162822,162823,162825,162827,162830,162832],{"class":101,"line":1200},[99,162824,162285],{"class":109},[99,162826,155],{"class":105},[99,162828,162829],{"class":109}," save_money(balance, ",[99,162831,1708],{"class":158},[99,162833,116],{"class":109},[99,162835,162836,162838],{"class":101,"line":1206},[99,162837,30396],{"class":158},[99,162839,162840],{"class":109},"(balance)\n",[41,162842,162844],{"id":162843},"_515-本章练习","5.15 本章练习",[53,162846,162847,162854,162860,162866,162872],{},[56,162848,162849,162850,162853],{},"定义函数 ",[96,162851,162852],{},"print_student(name, age)","，输出学生信息。",[56,162855,162849,162856,162859],{},[96,162857,162858],{},"get_max(a, b, c)","，返回三个数中的最大值。",[56,162861,162849,162862,162865],{},[96,162863,162864],{},"is_even(num)","，判断一个数是否为偶数。",[56,162867,162849,162868,162871],{},[96,162869,162870],{},"calculate_bmi(weight, height)","，返回 BMI。",[56,162873,162874],{},"把第 4 章的菜单程序拆分成多个函数。",[5113,162876,162877],{},"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":21,"searchDepth":22,"depth":22,"links":162879},[162880,162881,162882,162883,162884,162885,162886,162887,162888,162892,162893,162894,162895,162896,162897],{"id":160900,"depth":22,"text":160901},{"id":160941,"depth":22,"text":160942},{"id":161031,"depth":22,"text":161032},{"id":161112,"depth":22,"text":161113},{"id":161245,"depth":22,"text":161246},{"id":161367,"depth":22,"text":161368},{"id":161489,"depth":22,"text":161490},{"id":161566,"depth":22,"text":161567},{"id":161688,"depth":22,"text":161689,"children":162889},[162890,162891],{"id":161692,"depth":1165,"text":161693},{"id":161750,"depth":1165,"text":161751},{"id":161879,"depth":22,"text":161880},{"id":162005,"depth":22,"text":162006},{"id":162118,"depth":22,"text":162119},{"id":162274,"depth":22,"text":162275},{"id":162745,"depth":22,"text":162746},{"id":162843,"depth":22,"text":162844},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160892,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162904,"title":162905,"body":162906,"description":23364,"extension":24,"meta":165950,"navigation":26,"path":165951,"seo":165952,"stem":165953,"__hash__":165954},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162907,"toc":165931},[162908,162911,162915,162918,162921,163025,163028,163032,163035,163115,163118,163122,163125,163185,163188,163224,163227,163242,163246,163319,163322,163377,163380,163450,163453,163537,163547,163605,163609,163654,163657,163683,163686,163792,163796,163799,163841,163844,163908,163911,163915,163918,163979,163982,164012,164015,164053,164057,164060,164069,164072,164196,164199,164240,164244,164247,164258,164298,164301,164316,164321,164324,164391,164394,164484,164488,164491,164539,164542,164569,164571,164601,164604,164624,164627,164658,164661,164694,164698,164701,164725,164728,164752,164755,164779,164783,164786,164916,164919,164999,165002,165077,165081,165084,165134,165137,165179,165182,165206,165208,165232,165235,165290,165293,165359,165363,165366,165369,165407,165410,165463,165466,165512,165515,165548,165551,165555,165874,165878,165907,165911,165928],[10,162909,162905],{"id":162910},"_6-数据容器",[41,162912,162914],{"id":162913},"_61-什么是数据容器","6.1 什么是数据容器",[14,162916,162917],{},"数据容器用于一次保存多个数据。",[14,162919,162920],{},"常见容器：",[247,162922,162923,162940],{},[250,162924,162925],{},[253,162926,162927,162929,162932,162935,162938],{},[256,162928,25760],{},[256,162930,162931],{},"是否有序",[256,162933,162934],{},"是否可变",[256,162936,162937],{},"是否允许重复",[256,162939,27473],{},[294,162941,162942,162960,162976,162991,163008],{},[253,162943,162944,162947,162950,162953,162956],{},[299,162945,162946],{},"list列表",[299,162948,162949],{},"有序",[299,162951,162952],{},"可变",[299,162954,162955],{},"允许",[299,162957,162958],{},[96,162959,155238],{},[253,162961,162962,162965,162967,162970,162972],{},[299,162963,162964],{},"tuple元组",[299,162966,162949],{},[299,162968,162969],{},"不可变",[299,162971,162955],{},[299,162973,162974],{},[96,162975,155251],{},[253,162977,162978,162981,162983,162985,162987],{},[299,162979,162980],{},"str字符串",[299,162982,162949],{},[299,162984,162969],{},[299,162986,162955],{},[299,162988,162989],{},[96,162990,155861],{},[253,162992,162993,162996,162999,163001,163004],{},[299,162994,162995],{},"set集合",[299,162997,162998],{},"无序",[299,163000,162952],{},[299,163002,163003],{},"不允许",[299,163005,163006],{},[96,163007,155276],{},[253,163009,163010,163013,163015,163017,163020],{},[299,163011,163012],{},"dict字典",[299,163014,162949],{},[299,163016,162952],{},[299,163018,163019],{},"key不允许重复",[299,163021,163022],{},[96,163023,163024],{},"{\"name\": \"小明\"}",[14,163026,163027],{},"Python 3.7 之后，字典保持插入顺序。",[41,163029,163031],{"id":163030},"_62-列表list","6.2 列表list",[14,163033,163034],{},"列表用于保存一组有顺序的数据。",[90,163036,163038],{"className":30359,"code":163037,"language":30361,"meta":21,"style":21},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[96,163039,163040,163060,163085,163106],{"__ignoreMap":21},[99,163041,163042,163044,163046,163048,163050,163052,163054,163056,163058],{"class":101,"line":102},[99,163043,160361],{"class":109},[99,163045,155],{"class":105},[99,163047,52207],{"class":109},[99,163049,149869],{"class":214},[99,163051,12422],{"class":109},[99,163053,150917],{"class":214},[99,163055,12422],{"class":109},[99,163057,159712],{"class":214},[99,163059,33227],{"class":109},[99,163061,163062,163065,163067,163069,163071,163073,163075,163077,163079,163081,163083],{"class":101,"line":22},[99,163063,163064],{"class":109},"numbers ",[99,163066,155],{"class":105},[99,163068,52207],{"class":109},[99,163070,327],{"class":158},[99,163072,12422],{"class":109},[99,163074,187],{"class":158},[99,163076,12422],{"class":109},[99,163078,181],{"class":158},[99,163080,12422],{"class":109},[99,163082,403],{"class":158},[99,163084,33227],{"class":109},[99,163086,163087,163090,163092,163094,163096,163098,163100,163102,163104],{"class":101,"line":1165},[99,163088,163089],{"class":109},"mixed ",[99,163091,155],{"class":105},[99,163093,52207],{"class":109},[99,163095,149869],{"class":214},[99,163097,12422],{"class":109},[99,163099,760],{"class":158},[99,163101,12422],{"class":109},[99,163103,31457],{"class":158},[99,163105,33227],{"class":109},[99,163107,163108,163111,163113],{"class":101,"line":1180},[99,163109,163110],{"class":109},"empty ",[99,163112,155],{"class":105},[99,163114,51819],{"class":109},[14,163116,163117],{},"推荐一个列表中保存同类数据，代码更清晰。",[41,163119,163121],{"id":163120},"_63-列表索引","6.3 列表索引",[14,163123,163124],{},"正向索引从 0 开始：",[90,163126,163128],{"className":30359,"code":163127,"language":30361,"meta":21,"style":21},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[96,163129,163130,163150,163154,163165,163175],{"__ignoreMap":21},[99,163131,163132,163134,163136,163138,163140,163142,163144,163146,163148],{"class":101,"line":102},[99,163133,160361],{"class":109},[99,163135,155],{"class":105},[99,163137,52207],{"class":109},[99,163139,149869],{"class":214},[99,163141,12422],{"class":109},[99,163143,150917],{"class":214},[99,163145,12422],{"class":109},[99,163147,159712],{"class":214},[99,163149,33227],{"class":109},[99,163151,163152],{"class":101,"line":22},[99,163153,2386],{"emptyLinePlaceholder":26},[99,163155,163156,163158,163161,163163],{"class":101,"line":1165},[99,163157,30396],{"class":158},[99,163159,163160],{"class":109},"(names[",[99,163162,301],{"class":158},[99,163164,4643],{"class":109},[99,163166,163167,163169,163171,163173],{"class":101,"line":1180},[99,163168,30396],{"class":158},[99,163170,163160],{"class":109},[99,163172,327],{"class":158},[99,163174,4643],{"class":109},[99,163176,163177,163179,163181,163183],{"class":101,"line":1186},[99,163178,30396],{"class":158},[99,163180,163160],{"class":109},[99,163182,187],{"class":158},[99,163184,4643],{"class":109},[14,163186,163187],{},"反向索引从 -1 开始：",[90,163189,163191],{"className":30359,"code":163190,"language":30361,"meta":21,"style":21},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[96,163192,163193,163209],{"__ignoreMap":21},[99,163194,163195,163197,163199,163201,163203,163206],{"class":101,"line":102},[99,163196,30396],{"class":158},[99,163198,163160],{"class":109},[99,163200,642],{"class":105},[99,163202,327],{"class":158},[99,163204,163205],{"class":109},"])  ",[99,163207,163208],{"class":168},"# 小刚\n",[99,163210,163211,163213,163215,163217,163219,163221],{"class":101,"line":22},[99,163212,30396],{"class":158},[99,163214,163160],{"class":109},[99,163216,642],{"class":105},[99,163218,187],{"class":158},[99,163220,163205],{"class":109},[99,163222,163223],{"class":168},"# 小红\n",[14,163225,163226],{},"索引越界会报错：",[90,163228,163230],{"className":30359,"code":163229,"language":30361,"meta":21,"style":21},"print(names[3])\n",[96,163231,163232],{"__ignoreMap":21},[99,163233,163234,163236,163238,163240],{"class":101,"line":102},[99,163235,30396],{"class":158},[99,163237,163160],{"class":109},[99,163239,181],{"class":158},[99,163241,4643],{"class":109},[41,163243,163245],{"id":163244},"_64-列表常用方法","6.4 列表常用方法",[90,163247,163249],{"className":30359,"code":163248,"language":30361,"meta":21,"style":21},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[96,163250,163251,163267,163271,163280,163294,163308,163312],{"__ignoreMap":21},[99,163252,163253,163255,163257,163259,163261,163263,163265],{"class":101,"line":102},[99,163254,160361],{"class":109},[99,163256,155],{"class":105},[99,163258,52207],{"class":109},[99,163260,149869],{"class":214},[99,163262,12422],{"class":109},[99,163264,150917],{"class":214},[99,163266,33227],{"class":109},[99,163268,163269],{"class":101,"line":22},[99,163270,2386],{"emptyLinePlaceholder":26},[99,163272,163273,163276,163278],{"class":101,"line":1165},[99,163274,163275],{"class":109},"names.append(",[99,163277,159712],{"class":214},[99,163279,116],{"class":109},[99,163281,163282,163285,163287,163289,163292],{"class":101,"line":1180},[99,163283,163284],{"class":109},"names.insert(",[99,163286,327],{"class":158},[99,163288,12422],{"class":109},[99,163290,163291],{"class":214},"\"小李\"",[99,163293,116],{"class":109},[99,163295,163296,163299,163301,163303,163306],{"class":101,"line":1186},[99,163297,163298],{"class":109},"names.extend([",[99,163300,8670],{"class":214},[99,163302,12422],{"class":109},[99,163304,163305],{"class":214},"\"小赵\"",[99,163307,4643],{"class":109},[99,163309,163310],{"class":101,"line":1200},[99,163311,2386],{"emptyLinePlaceholder":26},[99,163313,163314,163316],{"class":101,"line":1206},[99,163315,30396],{"class":158},[99,163317,163318],{"class":109},"(names)\n",[14,163320,163321],{},"删除元素：",[90,163323,163325],{"className":30359,"code":163324,"language":30361,"meta":21,"style":21},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[96,163326,163327,163336,163346,163360,163372],{"__ignoreMap":21},[99,163328,163329,163332,163334],{"class":101,"line":102},[99,163330,163331],{"class":109},"names.remove(",[99,163333,150917],{"class":214},[99,163335,116],{"class":109},[99,163337,163338,163341,163343],{"class":101,"line":22},[99,163339,163340],{"class":109},"last ",[99,163342,155],{"class":105},[99,163344,163345],{"class":109}," names.pop()\n",[99,163347,163348,163351,163353,163356,163358],{"class":101,"line":1165},[99,163349,163350],{"class":109},"first ",[99,163352,155],{"class":105},[99,163354,163355],{"class":109}," names.pop(",[99,163357,301],{"class":158},[99,163359,116],{"class":109},[99,163361,163362,163365,163368,163370],{"class":101,"line":1180},[99,163363,163364],{"class":105},"del",[99,163366,163367],{"class":109}," names[",[99,163369,301],{"class":158},[99,163371,33227],{"class":109},[99,163373,163374],{"class":101,"line":1186},[99,163375,163376],{"class":109},"names.clear()\n",[14,163378,163379],{},"查询和统计：",[90,163381,163383],{"className":30359,"code":163382,"language":30361,"meta":21,"style":21},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[96,163384,163385,163413,163417,163428,163439],{"__ignoreMap":21},[99,163386,163387,163389,163391,163393,163395,163397,163399,163401,163403,163405,163407,163409,163411],{"class":101,"line":102},[99,163388,163064],{"class":109},[99,163390,155],{"class":105},[99,163392,52207],{"class":109},[99,163394,327],{"class":158},[99,163396,12422],{"class":109},[99,163398,187],{"class":158},[99,163400,12422],{"class":109},[99,163402,181],{"class":158},[99,163404,12422],{"class":109},[99,163406,187],{"class":158},[99,163408,12422],{"class":109},[99,163410,403],{"class":158},[99,163412,33227],{"class":109},[99,163414,163415],{"class":101,"line":22},[99,163416,2386],{"emptyLinePlaceholder":26},[99,163418,163419,163421,163424,163426],{"class":101,"line":1165},[99,163420,30396],{"class":158},[99,163422,163423],{"class":109},"(numbers.index(",[99,163425,181],{"class":158},[99,163427,30478],{"class":109},[99,163429,163430,163432,163435,163437],{"class":101,"line":1180},[99,163431,30396],{"class":158},[99,163433,163434],{"class":109},"(numbers.count(",[99,163436,187],{"class":158},[99,163438,30478],{"class":109},[99,163440,163441,163443,163445,163447],{"class":101,"line":1186},[99,163442,30396],{"class":158},[99,163444,110],{"class":109},[99,163446,7345],{"class":158},[99,163448,163449],{"class":109},"(numbers))\n",[14,163451,163452],{},"排序：",[90,163454,163456],{"className":30359,"code":163455,"language":30361,"meta":21,"style":21},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[96,163457,163458,163482,163486,163491,163498,163502,163516,163522,163526,163531],{"__ignoreMap":21},[99,163459,163460,163462,163464,163466,163468,163470,163472,163474,163476,163478,163480],{"class":101,"line":102},[99,163461,163064],{"class":109},[99,163463,155],{"class":105},[99,163465,52207],{"class":109},[99,163467,181],{"class":158},[99,163469,12422],{"class":109},[99,163471,327],{"class":158},[99,163473,12422],{"class":109},[99,163475,429],{"class":158},[99,163477,12422],{"class":109},[99,163479,187],{"class":158},[99,163481,33227],{"class":109},[99,163483,163484],{"class":101,"line":22},[99,163485,2386],{"emptyLinePlaceholder":26},[99,163487,163488],{"class":101,"line":1165},[99,163489,163490],{"class":109},"numbers.sort()\n",[99,163492,163493,163495],{"class":101,"line":1180},[99,163494,30396],{"class":158},[99,163496,163497],{"class":109},"(numbers)\n",[99,163499,163500],{"class":101,"line":1186},[99,163501,2386],{"emptyLinePlaceholder":26},[99,163503,163504,163507,163510,163512,163514],{"class":101,"line":1200},[99,163505,163506],{"class":109},"numbers.sort(",[99,163508,163509],{"class":5203},"reverse",[99,163511,155],{"class":105},[99,163513,31457],{"class":158},[99,163515,116],{"class":109},[99,163517,163518,163520],{"class":101,"line":1206},[99,163519,30396],{"class":158},[99,163521,163497],{"class":109},[99,163523,163524],{"class":101,"line":1297},[99,163525,2386],{"emptyLinePlaceholder":26},[99,163527,163528],{"class":101,"line":1303},[99,163529,163530],{"class":109},"numbers.reverse()\n",[99,163532,163533,163535],{"class":101,"line":1315},[99,163534,30396],{"class":158},[99,163536,163497],{"class":109},[14,163538,163539,163542,163543,163546],{},[96,163540,163541],{},"sort()"," 会修改原列表，",[96,163544,163545],{},"sorted()"," 返回新列表。",[90,163548,163550],{"className":30359,"code":163549,"language":30361,"meta":21,"style":21},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[96,163551,163552,163576,163588,163592,163598],{"__ignoreMap":21},[99,163553,163554,163556,163558,163560,163562,163564,163566,163568,163570,163572,163574],{"class":101,"line":102},[99,163555,163064],{"class":109},[99,163557,155],{"class":105},[99,163559,52207],{"class":109},[99,163561,181],{"class":158},[99,163563,12422],{"class":109},[99,163565,327],{"class":158},[99,163567,12422],{"class":109},[99,163569,429],{"class":158},[99,163571,12422],{"class":109},[99,163573,187],{"class":158},[99,163575,33227],{"class":109},[99,163577,163578,163581,163583,163586],{"class":101,"line":22},[99,163579,163580],{"class":109},"new_numbers ",[99,163582,155],{"class":105},[99,163584,163585],{"class":158}," sorted",[99,163587,163497],{"class":109},[99,163589,163590],{"class":101,"line":1165},[99,163591,2386],{"emptyLinePlaceholder":26},[99,163593,163594,163596],{"class":101,"line":1180},[99,163595,30396],{"class":158},[99,163597,163497],{"class":109},[99,163599,163600,163602],{"class":101,"line":1186},[99,163601,30396],{"class":158},[99,163603,163604],{"class":109},"(new_numbers)\n",[41,163606,163608],{"id":163607},"_65-列表遍历","6.5 列表遍历",[90,163610,163612],{"className":30359,"code":163611,"language":30361,"meta":21,"style":21},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[96,163613,163614,163634,163638,163648],{"__ignoreMap":21},[99,163615,163616,163618,163620,163622,163624,163626,163628,163630,163632],{"class":101,"line":102},[99,163617,160361],{"class":109},[99,163619,155],{"class":105},[99,163621,52207],{"class":109},[99,163623,149869],{"class":214},[99,163625,12422],{"class":109},[99,163627,150917],{"class":214},[99,163629,12422],{"class":109},[99,163631,159712],{"class":214},[99,163633,33227],{"class":109},[99,163635,163636],{"class":101,"line":22},[99,163637,2386],{"emptyLinePlaceholder":26},[99,163639,163640,163642,163644,163646],{"class":101,"line":1165},[99,163641,3011],{"class":105},[99,163643,160397],{"class":109},[99,163645,26032],{"class":105},[99,163647,160402],{"class":109},[99,163649,163650,163652],{"class":101,"line":1180},[99,163651,31280],{"class":158},[99,163653,150641],{"class":109},[14,163655,163656],{},"需要索引时：",[90,163658,163660],{"className":30359,"code":163659,"language":30361,"meta":21,"style":21},"for index, name in enumerate(names):\n    print(index, name)\n",[96,163661,163662,163676],{"__ignoreMap":21},[99,163663,163664,163666,163669,163671,163673],{"class":101,"line":102},[99,163665,3011],{"class":105},[99,163667,163668],{"class":109}," index, name ",[99,163670,26032],{"class":105},[99,163672,31587],{"class":158},[99,163674,163675],{"class":109},"(names):\n",[99,163677,163678,163680],{"class":101,"line":22},[99,163679,31280],{"class":158},[99,163681,163682],{"class":109},"(index, name)\n",[14,163684,163685],{},"统计总分：",[90,163687,163689],{"className":30359,"code":163688,"language":30361,"meta":21,"style":21},"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",[96,163690,163691,163716,163724,163728,163739,163747,163751,163768],{"__ignoreMap":21},[99,163692,163693,163696,163698,163700,163702,163704,163706,163708,163710,163712,163714],{"class":101,"line":102},[99,163694,163695],{"class":109},"scores ",[99,163697,155],{"class":105},[99,163699,52207],{"class":109},[99,163701,972],{"class":158},[99,163703,12422],{"class":109},[99,163705,846],{"class":158},[99,163707,12422],{"class":109},[99,163709,364],{"class":158},[99,163711,12422],{"class":109},[99,163713,671],{"class":158},[99,163715,33227],{"class":109},[99,163717,163718,163720,163722],{"class":101,"line":22},[99,163719,157241],{"class":109},[99,163721,155],{"class":105},[99,163723,47314],{"class":158},[99,163725,163726],{"class":101,"line":1165},[99,163727,2386],{"emptyLinePlaceholder":26},[99,163729,163730,163732,163734,163736],{"class":101,"line":1180},[99,163731,3011],{"class":105},[99,163733,157764],{"class":109},[99,163735,26032],{"class":105},[99,163737,163738],{"class":109}," scores:\n",[99,163740,163741,163743,163745],{"class":101,"line":1186},[99,163742,159288],{"class":109},[99,163744,9464],{"class":105},[99,163746,1565],{"class":109},[99,163748,163749],{"class":101,"line":1200},[99,163750,2386],{"emptyLinePlaceholder":26},[99,163752,163753,163756,163758,163761,163763,163765],{"class":101,"line":1206},[99,163754,163755],{"class":109},"avg ",[99,163757,155],{"class":105},[99,163759,163760],{"class":109}," total ",[99,163762,694],{"class":105},[99,163764,7318],{"class":158},[99,163766,163767],{"class":109},"(scores)\n",[99,163769,163770,163772,163774,163776,163779,163781,163784,163786,163788,163790],{"class":101,"line":1297},[99,163771,30396],{"class":158},[99,163773,110],{"class":109},[99,163775,162],{"class":105},[99,163777,163778],{"class":214},"\"平均分:",[99,163780,1006],{"class":158},[99,163782,163783],{"class":109},"avg",[99,163785,157140],{"class":105},[99,163787,1056],{"class":158},[99,163789,361],{"class":214},[99,163791,116],{"class":109},[41,163793,163795],{"id":163794},"_66-元组tuple","6.6 元组tuple",[14,163797,163798],{},"元组和列表类似，但不可修改。",[90,163800,163802],{"className":30359,"code":163801,"language":30361,"meta":21,"style":21},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[96,163803,163804,163821],{"__ignoreMap":21},[99,163805,163806,163809,163811,163813,163815,163817,163819],{"class":101,"line":102},[99,163807,163808],{"class":109},"point ",[99,163810,155],{"class":105},[99,163812,1644],{"class":109},[99,163814,556],{"class":158},[99,163816,12422],{"class":109},[99,163818,810],{"class":158},[99,163820,116],{"class":109},[99,163822,163823,163825,163827,163829,163831,163833,163835,163837,163839],{"class":101,"line":22},[99,163824,116295],{"class":109},[99,163826,155],{"class":105},[99,163828,1644],{"class":109},[99,163830,149869],{"class":214},[99,163832,12422],{"class":109},[99,163834,760],{"class":158},[99,163836,12422],{"class":109},[99,163838,69250],{"class":214},[99,163840,116],{"class":109},[14,163842,163843],{},"单元素元组必须加逗号：",[90,163845,163847],{"className":30359,"code":163846,"language":30361,"meta":21,"style":21},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[96,163848,163849,163863,163876,163880,163894],{"__ignoreMap":21},[99,163850,163851,163854,163856,163858,163860],{"class":101,"line":102},[99,163852,163853],{"class":109},"t1 ",[99,163855,155],{"class":105},[99,163857,1644],{"class":109},[99,163859,556],{"class":158},[99,163861,163862],{"class":109},",)\n",[99,163864,163865,163868,163870,163872,163874],{"class":101,"line":22},[99,163866,163867],{"class":109},"t2 ",[99,163869,155],{"class":105},[99,163871,1644],{"class":109},[99,163873,556],{"class":158},[99,163875,116],{"class":109},[99,163877,163878],{"class":101,"line":1165},[99,163879,2386],{"emptyLinePlaceholder":26},[99,163881,163882,163884,163886,163888,163891],{"class":101,"line":1180},[99,163883,30396],{"class":158},[99,163885,110],{"class":109},[99,163887,103088],{"class":158},[99,163889,163890],{"class":109},"(t1))  ",[99,163892,163893],{"class":168},"# tuple\n",[99,163895,163896,163898,163900,163902,163905],{"class":101,"line":1186},[99,163897,30396],{"class":158},[99,163899,110],{"class":109},[99,163901,103088],{"class":158},[99,163903,163904],{"class":109},"(t2))  ",[99,163906,163907],{"class":168},"# int\n",[14,163909,163910],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[41,163912,163914],{"id":163913},"_67-字符串str","6.7 字符串str",[14,163916,163917],{},"字符串也是序列，可以索引、切片和遍历。",[90,163919,163921],{"className":30359,"code":163920,"language":30361,"meta":21,"style":21},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[96,163922,163923,163931,163935,163946,163958,163962,163973],{"__ignoreMap":21},[99,163924,163925,163927,163929],{"class":101,"line":102},[99,163926,156425],{"class":109},[99,163928,155],{"class":105},[99,163930,159662],{"class":214},[99,163932,163933],{"class":101,"line":22},[99,163934,2386],{"emptyLinePlaceholder":26},[99,163936,163937,163939,163942,163944],{"class":101,"line":1165},[99,163938,30396],{"class":158},[99,163940,163941],{"class":109},"(text[",[99,163943,301],{"class":158},[99,163945,4643],{"class":109},[99,163947,163948,163950,163952,163954,163956],{"class":101,"line":1180},[99,163949,30396],{"class":158},[99,163951,163941],{"class":109},[99,163953,642],{"class":105},[99,163955,327],{"class":158},[99,163957,4643],{"class":109},[99,163959,163960],{"class":101,"line":1186},[99,163961,2386],{"emptyLinePlaceholder":26},[99,163963,163964,163966,163968,163970],{"class":101,"line":1200},[99,163965,3011],{"class":105},[99,163967,159673],{"class":109},[99,163969,26032],{"class":105},[99,163971,163972],{"class":109}," text:\n",[99,163974,163975,163977],{"class":101,"line":1206},[99,163976,31280],{"class":158},[99,163978,159684],{"class":109},[14,163980,163981],{},"字符串不可变：",[90,163983,163985],{"className":30359,"code":163984,"language":30361,"meta":21,"style":21},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[96,163986,163987,163995],{"__ignoreMap":21},[99,163988,163989,163991,163993],{"class":101,"line":102},[99,163990,156425],{"class":109},[99,163992,155],{"class":105},[99,163994,159662],{"class":214},[99,163996,163997,164000,164002,164004,164006,164009],{"class":101,"line":22},[99,163998,163999],{"class":109},"text[",[99,164001,301],{"class":158},[99,164003,4429],{"class":109},[99,164005,155],{"class":105},[99,164007,164008],{"class":214}," \"P\"",[99,164010,164011],{"class":168},"  # 报错\n",[14,164013,164014],{},"如果要得到新字符串：",[90,164016,164018],{"className":30359,"code":164017,"language":30361,"meta":21,"style":21},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[96,164019,164020,164028,164046],{"__ignoreMap":21},[99,164021,164022,164024,164026],{"class":101,"line":102},[99,164023,156425],{"class":109},[99,164025,155],{"class":105},[99,164027,159662],{"class":214},[99,164029,164030,164032,164034,164036,164038,164041,164043],{"class":101,"line":22},[99,164031,156425],{"class":109},[99,164033,155],{"class":105},[99,164035,164008],{"class":214},[99,164037,45547],{"class":105},[99,164039,164040],{"class":109}," text[",[99,164042,327],{"class":158},[99,164044,164045],{"class":109},":]\n",[99,164047,164048,164050],{"class":101,"line":1165},[99,164049,30396],{"class":158},[99,164051,164052],{"class":109},"(text)\n",[41,164054,164056],{"id":164055},"_68-切片","6.8 切片",[14,164058,164059],{},"切片用于从序列中取一部分。",[90,164061,164063],{"className":30359,"code":164062,"language":30361,"meta":21,"style":21},"序列[开始:结束:步长]\n",[96,164064,164065],{"__ignoreMap":21},[99,164066,164067],{"class":101,"line":102},[99,164068,164062],{"class":109},[14,164070,164071],{},"结束位置不包含。",[90,164073,164075],{"className":30359,"code":164074,"language":30361,"meta":21,"style":21},"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",[96,164076,164077,164114,164118,164137,164152,164166,164180],{"__ignoreMap":21},[99,164078,164079,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106,164108,164110,164112],{"class":101,"line":102},[99,164080,164081],{"class":109},"nums ",[99,164083,155],{"class":105},[99,164085,52207],{"class":109},[99,164087,301],{"class":158},[99,164089,12422],{"class":109},[99,164091,327],{"class":158},[99,164093,12422],{"class":109},[99,164095,187],{"class":158},[99,164097,12422],{"class":109},[99,164099,181],{"class":158},[99,164101,12422],{"class":109},[99,164103,403],{"class":158},[99,164105,12422],{"class":109},[99,164107,429],{"class":158},[99,164109,12422],{"class":109},[99,164111,454],{"class":158},[99,164113,33227],{"class":109},[99,164115,164116],{"class":101,"line":22},[99,164117,2386],{"emptyLinePlaceholder":26},[99,164119,164120,164122,164125,164127,164129,164131,164134],{"class":101,"line":1165},[99,164121,30396],{"class":158},[99,164123,164124],{"class":109},"(nums[",[99,164126,327],{"class":158},[99,164128,969],{"class":109},[99,164130,403],{"class":158},[99,164132,164133],{"class":109},"])    ",[99,164135,164136],{"class":168},"# [1, 2, 3]\n",[99,164138,164139,164141,164144,164146,164149],{"class":101,"line":1180},[99,164140,30396],{"class":158},[99,164142,164143],{"class":109},"(nums[:",[99,164145,181],{"class":158},[99,164147,164148],{"class":109},"])     ",[99,164150,164151],{"class":168},"# [0, 1, 2]\n",[99,164153,164154,164156,164158,164160,164163],{"class":101,"line":1186},[99,164155,30396],{"class":158},[99,164157,164124],{"class":109},[99,164159,181],{"class":158},[99,164161,164162],{"class":109},":])     ",[99,164164,164165],{"class":168},"# [3, 4, 5, 6]\n",[99,164167,164168,164170,164173,164175,164177],{"class":101,"line":1200},[99,164169,30396],{"class":158},[99,164171,164172],{"class":109},"(nums[::",[99,164174,187],{"class":158},[99,164176,164133],{"class":109},[99,164178,164179],{"class":168},"# [0, 2, 4, 6]\n",[99,164181,164182,164184,164186,164188,164190,164193],{"class":101,"line":1206},[99,164183,30396],{"class":158},[99,164185,164172],{"class":109},[99,164187,642],{"class":105},[99,164189,327],{"class":158},[99,164191,164192],{"class":109},"])   ",[99,164194,164195],{"class":168},"# 反转\n",[14,164197,164198],{},"字符串切片：",[90,164200,164202],{"className":30359,"code":164201,"language":30361,"meta":21,"style":21},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[96,164203,164204,164213,164227],{"__ignoreMap":21},[99,164205,164206,164208,164210],{"class":101,"line":102},[99,164207,156425],{"class":109},[99,164209,155],{"class":105},[99,164211,164212],{"class":214}," \"abcdef\"\n",[99,164214,164215,164217,164219,164221,164223,164225],{"class":101,"line":22},[99,164216,30396],{"class":158},[99,164218,163941],{"class":109},[99,164220,327],{"class":158},[99,164222,969],{"class":109},[99,164224,403],{"class":158},[99,164226,4643],{"class":109},[99,164228,164229,164231,164234,164236,164238],{"class":101,"line":1165},[99,164230,30396],{"class":158},[99,164232,164233],{"class":109},"(text[::",[99,164235,642],{"class":105},[99,164237,327],{"class":158},[99,164239,4643],{"class":109},[41,164241,164243],{"id":164242},"_69-集合set","6.9 集合set",[14,164245,164246],{},"集合特点：",[53,164248,164249,164252,164255],{},[56,164250,164251],{},"无序。",[56,164253,164254],{},"元素不重复。",[56,164256,164257],{},"可以做交集、并集、差集。",[90,164259,164261],{"className":30359,"code":164260,"language":30361,"meta":21,"style":21},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[96,164262,164263,164291],{"__ignoreMap":21},[99,164264,164265,164267,164269,164271,164273,164275,164277,164279,164281,164283,164285,164287,164289],{"class":101,"line":102},[99,164266,164081],{"class":109},[99,164268,155],{"class":105},[99,164270,4434],{"class":109},[99,164272,327],{"class":158},[99,164274,12422],{"class":109},[99,164276,187],{"class":158},[99,164278,12422],{"class":109},[99,164280,181],{"class":158},[99,164282,12422],{"class":109},[99,164284,181],{"class":158},[99,164286,12422],{"class":109},[99,164288,403],{"class":158},[99,164290,1551],{"class":109},[99,164292,164293,164295],{"class":101,"line":22},[99,164294,30396],{"class":158},[99,164296,164297],{"class":109},"(nums)\n",[14,164299,164300],{},"创建空集合：",[90,164302,164304],{"className":30359,"code":164303,"language":30361,"meta":21,"style":21},"s = set()\n",[96,164305,164306],{"__ignoreMap":21},[99,164307,164308,164310,164312,164314],{"class":101,"line":102},[99,164309,10566],{"class":109},[99,164311,155],{"class":105},[99,164313,119703],{"class":158},[99,164315,1962],{"class":109},[14,164317,9012,164318,164320],{},[96,164319,32440],{}," 是空字典，不是空集合。",[14,164322,164323],{},"集合常用操作：",[90,164325,164327],{"className":30359,"code":164326,"language":30361,"meta":21,"style":21},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[96,164328,164329,164349,164353,164362,164371,164380],{"__ignoreMap":21},[99,164330,164331,164333,164335,164337,164339,164341,164343,164345,164347],{"class":101,"line":102},[99,164332,10566],{"class":109},[99,164334,155],{"class":105},[99,164336,4434],{"class":109},[99,164338,327],{"class":158},[99,164340,12422],{"class":109},[99,164342,187],{"class":158},[99,164344,12422],{"class":109},[99,164346,181],{"class":158},[99,164348,1551],{"class":109},[99,164350,164351],{"class":101,"line":22},[99,164352,2386],{"emptyLinePlaceholder":26},[99,164354,164355,164358,164360],{"class":101,"line":1165},[99,164356,164357],{"class":109},"s.add(",[99,164359,403],{"class":158},[99,164361,116],{"class":109},[99,164363,164364,164367,164369],{"class":101,"line":1180},[99,164365,164366],{"class":109},"s.remove(",[99,164368,187],{"class":158},[99,164370,116],{"class":109},[99,164372,164373,164376,164378],{"class":101,"line":1186},[99,164374,164375],{"class":109},"s.discard(",[99,164377,556],{"class":158},[99,164379,116],{"class":109},[99,164381,164382,164384,164386,164388],{"class":101,"line":1200},[99,164383,30396],{"class":158},[99,164385,110],{"class":109},[99,164387,7345],{"class":158},[99,164389,164390],{"class":109},"(s))\n",[14,164392,164393],{},"交并差：",[90,164395,164397],{"className":30359,"code":164396,"language":30361,"meta":21,"style":21},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[96,164398,164399,164419,164439,164443,164458,164471],{"__ignoreMap":21},[99,164400,164401,164403,164405,164407,164409,164411,164413,164415,164417],{"class":101,"line":102},[99,164402,10906],{"class":109},[99,164404,155],{"class":105},[99,164406,4434],{"class":109},[99,164408,327],{"class":158},[99,164410,12422],{"class":109},[99,164412,187],{"class":158},[99,164414,12422],{"class":109},[99,164416,181],{"class":158},[99,164418,1551],{"class":109},[99,164420,164421,164423,164425,164427,164429,164431,164433,164435,164437],{"class":101,"line":22},[99,164422,10932],{"class":109},[99,164424,155],{"class":105},[99,164426,4434],{"class":109},[99,164428,181],{"class":158},[99,164430,12422],{"class":109},[99,164432,403],{"class":158},[99,164434,12422],{"class":109},[99,164436,429],{"class":158},[99,164438,1551],{"class":109},[99,164440,164441],{"class":101,"line":1165},[99,164442,2386],{"emptyLinePlaceholder":26},[99,164444,164445,164447,164450,164452,164455],{"class":101,"line":1180},[99,164446,30396],{"class":158},[99,164448,164449],{"class":109},"(a ",[99,164451,463],{"class":105},[99,164453,164454],{"class":109}," b)  ",[99,164456,164457],{"class":168},"# 交集\n",[99,164459,164460,164462,164464,164466,164468],{"class":101,"line":1186},[99,164461,30396],{"class":158},[99,164463,164449],{"class":109},[99,164465,1031],{"class":105},[99,164467,164454],{"class":109},[99,164469,164470],{"class":168},"# 并集\n",[99,164472,164473,164475,164477,164479,164481],{"class":101,"line":1200},[99,164474,30396],{"class":158},[99,164476,164449],{"class":109},[99,164478,642],{"class":105},[99,164480,164454],{"class":109},[99,164482,164483],{"class":168},"# 差集\n",[41,164485,164487],{"id":164486},"_610-字典dict","6.10 字典dict",[14,164489,164490],{},"字典通过 key-value 保存数据。",[90,164492,164494],{"className":30359,"code":164493,"language":30361,"meta":21,"style":21},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[96,164495,164496,164504,164514,164525,164535],{"__ignoreMap":21},[99,164497,164498,164500,164502],{"class":101,"line":102},[99,164499,149462],{"class":109},[99,164501,155],{"class":105},[99,164503,15559],{"class":109},[99,164505,164506,164508,164510,164512],{"class":101,"line":22},[99,164507,147001],{"class":214},[99,164509,51418],{"class":109},[99,164511,149869],{"class":214},[99,164513,31447],{"class":109},[99,164515,164516,164519,164521,164523],{"class":101,"line":1165},[99,164517,164518],{"class":214},"    \"age\"",[99,164520,51418],{"class":109},[99,164522,760],{"class":158},[99,164524,31447],{"class":109},[99,164526,164527,164530,164532],{"class":101,"line":1180},[99,164528,164529],{"class":214},"    \"score\"",[99,164531,51418],{"class":109},[99,164533,164534],{"class":158},"95\n",[99,164536,164537],{"class":101,"line":1186},[99,164538,1551],{"class":109},[14,164540,164541],{},"获取值：",[90,164543,164545],{"className":30359,"code":164544,"language":30361,"meta":21,"style":21},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[96,164546,164547,164558],{"__ignoreMap":21},[99,164548,164549,164551,164554,164556],{"class":101,"line":102},[99,164550,30396],{"class":158},[99,164552,164553],{"class":109},"(student[",[99,164555,62660],{"class":214},[99,164557,4643],{"class":109},[99,164559,164560,164562,164565,164567],{"class":101,"line":22},[99,164561,30396],{"class":158},[99,164563,164564],{"class":109},"(student.get(",[99,164566,62660],{"class":214},[99,164568,30478],{"class":109},[14,164570,15375],{},[90,164572,164574],{"className":30359,"code":164573,"language":30361,"meta":21,"style":21},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[96,164575,164576,164589],{"__ignoreMap":21},[99,164577,164578,164580,164583,164586],{"class":101,"line":102},[99,164579,152840],{"class":109},[99,164581,164582],{"class":214},"\"address\"",[99,164584,164585],{"class":109},"]     ",[99,164587,164588],{"class":168},"# key不存在会报错\n",[99,164590,164591,164594,164596,164598],{"class":101,"line":22},[99,164592,164593],{"class":109},"student.get(",[99,164595,164582],{"class":214},[99,164597,13701],{"class":109},[99,164599,164600],{"class":168},"# key不存在返回None\n",[14,164602,164603],{},"设置默认值：",[90,164605,164607],{"className":30359,"code":164606,"language":30361,"meta":21,"style":21},"print(student.get(\"address\", \"未知\"))\n",[96,164608,164609],{"__ignoreMap":21},[99,164610,164611,164613,164615,164617,164619,164622],{"class":101,"line":102},[99,164612,30396],{"class":158},[99,164614,164564],{"class":109},[99,164616,164582],{"class":214},[99,164618,12422],{"class":109},[99,164620,164621],{"class":214},"\"未知\"",[99,164623,30478],{"class":109},[14,164625,164626],{},"新增和修改：",[90,164628,164630],{"className":30359,"code":164629,"language":30361,"meta":21,"style":21},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[96,164631,164632,164645],{"__ignoreMap":21},[99,164633,164634,164636,164638,164640,164642],{"class":101,"line":102},[99,164635,152840],{"class":109},[99,164637,69105],{"class":214},[99,164639,4429],{"class":109},[99,164641,155],{"class":105},[99,164643,164644],{"class":158}," 19\n",[99,164646,164647,164649,164651,164653,164655],{"class":101,"line":22},[99,164648,152840],{"class":109},[99,164650,164582],{"class":214},[99,164652,4429],{"class":109},[99,164654,155],{"class":105},[99,164656,164657],{"class":214}," \"北京\"\n",[14,164659,164660],{},"删除：",[90,164662,164664],{"className":30359,"code":164663,"language":30361,"meta":21,"style":21},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[96,164665,164666,164679,164689],{"__ignoreMap":21},[99,164667,164668,164670,164672,164675,164677],{"class":101,"line":102},[99,164669,155339],{"class":109},[99,164671,155],{"class":105},[99,164673,164674],{"class":109}," student.pop(",[99,164676,151453],{"class":214},[99,164678,116],{"class":109},[99,164680,164681,164683,164685,164687],{"class":101,"line":22},[99,164682,163364],{"class":105},[99,164684,152130],{"class":109},[99,164686,69105],{"class":214},[99,164688,33227],{"class":109},[99,164690,164691],{"class":101,"line":1165},[99,164692,164693],{"class":109},"student.clear()\n",[41,164695,164697],{"id":164696},"_611-字典遍历","6.11 字典遍历",[14,164699,164700],{},"遍历 key：",[90,164702,164704],{"className":30359,"code":164703,"language":30361,"meta":21,"style":21},"for key in student:\n    print(key, student[key])\n",[96,164705,164706,164718],{"__ignoreMap":21},[99,164707,164708,164710,164713,164715],{"class":101,"line":102},[99,164709,3011],{"class":105},[99,164711,164712],{"class":109}," key ",[99,164714,26032],{"class":105},[99,164716,164717],{"class":109}," student:\n",[99,164719,164720,164722],{"class":101,"line":22},[99,164721,31280],{"class":158},[99,164723,164724],{"class":109},"(key, student[key])\n",[14,164726,164727],{},"遍历 value：",[90,164729,164731],{"className":30359,"code":164730,"language":30361,"meta":21,"style":21},"for value in student.values():\n    print(value)\n",[96,164732,164733,164745],{"__ignoreMap":21},[99,164734,164735,164737,164740,164742],{"class":101,"line":102},[99,164736,3011],{"class":105},[99,164738,164739],{"class":109}," value ",[99,164741,26032],{"class":105},[99,164743,164744],{"class":109}," student.values():\n",[99,164746,164747,164749],{"class":101,"line":22},[99,164748,31280],{"class":158},[99,164750,164751],{"class":109},"(value)\n",[14,164753,164754],{},"遍历 key 和 value：",[90,164756,164758],{"className":30359,"code":164757,"language":30361,"meta":21,"style":21},"for key, value in student.items():\n    print(key, value)\n",[96,164759,164760,164772],{"__ignoreMap":21},[99,164761,164762,164764,164767,164769],{"class":101,"line":102},[99,164763,3011],{"class":105},[99,164765,164766],{"class":109}," key, value ",[99,164768,26032],{"class":105},[99,164770,164771],{"class":109}," student.items():\n",[99,164773,164774,164776],{"class":101,"line":22},[99,164775,31280],{"class":158},[99,164777,164778],{"class":109},"(key, value)\n",[41,164780,164782],{"id":164781},"_612-嵌套容器","6.12 嵌套容器",[14,164784,164785],{},"列表中保存字典，是项目中最常见的结构之一。",[90,164787,164789],{"className":30359,"code":164788,"language":30361,"meta":21,"style":21},"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",[96,164790,164791,164799,164827,164855,164883,164887,164891,164901],{"__ignoreMap":21},[99,164792,164793,164795,164797],{"class":101,"line":102},[99,164794,159697],{"class":109},[99,164796,155],{"class":105},[99,164798,55428],{"class":109},[99,164800,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819,164821,164823,164825],{"class":101,"line":22},[99,164802,148366],{"class":109},[99,164804,62660],{"class":214},[99,164806,51418],{"class":109},[99,164808,149869],{"class":214},[99,164810,12422],{"class":109},[99,164812,69105],{"class":214},[99,164814,51418],{"class":109},[99,164816,760],{"class":158},[99,164818,12422],{"class":109},[99,164820,151453],{"class":214},[99,164822,51418],{"class":109},[99,164824,1099],{"class":158},[99,164826,4916],{"class":109},[99,164828,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851,164853],{"class":101,"line":1165},[99,164830,148366],{"class":109},[99,164832,62660],{"class":214},[99,164834,51418],{"class":109},[99,164836,150917],{"class":214},[99,164838,12422],{"class":109},[99,164840,69105],{"class":214},[99,164842,51418],{"class":109},[99,164844,735],{"class":158},[99,164846,12422],{"class":109},[99,164848,151453],{"class":214},[99,164850,51418],{"class":109},[99,164852,921],{"class":158},[99,164854,4916],{"class":109},[99,164856,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881],{"class":101,"line":1180},[99,164858,148366],{"class":109},[99,164860,62660],{"class":214},[99,164862,51418],{"class":109},[99,164864,159712],{"class":214},[99,164866,12422],{"class":109},[99,164868,69105],{"class":214},[99,164870,51418],{"class":109},[99,164872,785],{"class":158},[99,164874,12422],{"class":109},[99,164876,151453],{"class":214},[99,164878,51418],{"class":109},[99,164880,516],{"class":158},[99,164882,4916],{"class":109},[99,164884,164885],{"class":101,"line":1186},[99,164886,33227],{"class":109},[99,164888,164889],{"class":101,"line":1200},[99,164890,2386],{"emptyLinePlaceholder":26},[99,164892,164893,164895,164897,164899],{"class":101,"line":1206},[99,164894,3011],{"class":105},[99,164896,152118],{"class":109},[99,164898,26032],{"class":105},[99,164900,152123],{"class":109},[99,164902,164903,164905,164907,164909,164912,164914],{"class":101,"line":1297},[99,164904,31280],{"class":158},[99,164906,164553],{"class":109},[99,164908,62660],{"class":214},[99,164910,164911],{"class":109},"], student[",[99,164913,151453],{"class":214},[99,164915,4643],{"class":109},[14,164917,164918],{},"统计平均分：",[90,164920,164922],{"className":30359,"code":164921,"language":30361,"meta":21,"style":21},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[96,164923,164924,164932,164936,164946,164958,164962,164977],{"__ignoreMap":21},[99,164925,164926,164928,164930],{"class":101,"line":102},[99,164927,157241],{"class":109},[99,164929,155],{"class":105},[99,164931,47314],{"class":158},[99,164933,164934],{"class":101,"line":22},[99,164935,2386],{"emptyLinePlaceholder":26},[99,164937,164938,164940,164942,164944],{"class":101,"line":1165},[99,164939,3011],{"class":105},[99,164941,152118],{"class":109},[99,164943,26032],{"class":105},[99,164945,152123],{"class":109},[99,164947,164948,164950,164952,164954,164956],{"class":101,"line":1180},[99,164949,159288],{"class":109},[99,164951,9464],{"class":105},[99,164953,152130],{"class":109},[99,164955,151453],{"class":214},[99,164957,33227],{"class":109},[99,164959,164960],{"class":101,"line":1186},[99,164961,2386],{"emptyLinePlaceholder":26},[99,164963,164964,164966,164968,164970,164972,164974],{"class":101,"line":1200},[99,164965,163755],{"class":109},[99,164967,155],{"class":105},[99,164969,163760],{"class":109},[99,164971,694],{"class":105},[99,164973,7318],{"class":158},[99,164975,164976],{"class":109},"(students)\n",[99,164978,164979,164981,164983,164985,164987,164989,164991,164993,164995,164997],{"class":101,"line":1206},[99,164980,30396],{"class":158},[99,164982,110],{"class":109},[99,164984,162],{"class":105},[99,164986,163778],{"class":214},[99,164988,1006],{"class":158},[99,164990,163783],{"class":109},[99,164992,157140],{"class":105},[99,164994,1056],{"class":158},[99,164996,361],{"class":214},[99,164998,116],{"class":109},[14,165000,165001],{},"查找学生：",[90,165003,165005],{"className":30359,"code":165004,"language":30361,"meta":21,"style":21},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[96,165006,165007,165022,165026,165036,165050,165056,165060,165066],{"__ignoreMap":21},[99,165008,165009,165011,165013,165015,165017,165020],{"class":101,"line":102},[99,165010,111559],{"class":109},[99,165012,155],{"class":105},[99,165014,60586],{"class":158},[99,165016,110],{"class":109},[99,165018,165019],{"class":214},"\"请输入学生姓名:\"",[99,165021,116],{"class":109},[99,165023,165024],{"class":101,"line":22},[99,165025,2386],{"emptyLinePlaceholder":26},[99,165027,165028,165030,165032,165034],{"class":101,"line":1165},[99,165029,3011],{"class":105},[99,165031,152118],{"class":109},[99,165033,26032],{"class":105},[99,165035,152123],{"class":109},[99,165037,165038,165040,165042,165044,165046,165048],{"class":101,"line":1180},[99,165039,3087],{"class":105},[99,165041,152130],{"class":109},[99,165043,62660],{"class":214},[99,165045,4429],{"class":109},[99,165047,2935],{"class":105},[99,165049,160413],{"class":109},[99,165051,165052,165054],{"class":101,"line":1186},[99,165053,32432],{"class":158},[99,165055,150023],{"class":109},[99,165057,165058],{"class":101,"line":1200},[99,165059,31608],{"class":105},[99,165061,165062,165064],{"class":101,"line":1206},[99,165063,1687],{"class":105},[99,165065,3725],{"class":109},[99,165067,165068,165070,165072,165075],{"class":101,"line":1297},[99,165069,31280],{"class":158},[99,165071,110],{"class":109},[99,165073,165074],{"class":214},"\"没有找到\"",[99,165076,116],{"class":109},[41,165078,165080],{"id":165079},"_613-容器通用操作","6.13 容器通用操作",[14,165082,165083],{},"长度：",[90,165085,165087],{"className":30359,"code":165086,"language":30361,"meta":21,"style":21},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[96,165088,165089,165108,165118],{"__ignoreMap":21},[99,165090,165091,165093,165096,165098,165100,165102,165104,165106],{"class":101,"line":102},[99,165092,7345],{"class":158},[99,165094,165095],{"class":109},"([",[99,165097,327],{"class":158},[99,165099,12422],{"class":109},[99,165101,187],{"class":158},[99,165103,12422],{"class":109},[99,165105,181],{"class":158},[99,165107,4643],{"class":109},[99,165109,165110,165112,165114,165116],{"class":101,"line":22},[99,165111,7345],{"class":158},[99,165113,110],{"class":109},[99,165115,155861],{"class":214},[99,165117,116],{"class":109},[99,165119,165120,165122,165125,165127,165129,165131],{"class":101,"line":1165},[99,165121,7345],{"class":158},[99,165123,165124],{"class":109},"({",[99,165126,62660],{"class":214},[99,165128,51418],{"class":109},[99,165130,149869],{"class":214},[99,165132,165133],{"class":109},"})\n",[14,165135,165136],{},"最大最小：",[90,165138,165140],{"className":30359,"code":165139,"language":30361,"meta":21,"style":21},"max([1, 2, 3])\nmin([1, 2, 3])\n",[96,165141,165142,165160],{"__ignoreMap":21},[99,165143,165144,165146,165148,165150,165152,165154,165156,165158],{"class":101,"line":102},[99,165145,6002],{"class":158},[99,165147,165095],{"class":109},[99,165149,327],{"class":158},[99,165151,12422],{"class":109},[99,165153,187],{"class":158},[99,165155,12422],{"class":109},[99,165157,181],{"class":158},[99,165159,4643],{"class":109},[99,165161,165162,165165,165167,165169,165171,165173,165175,165177],{"class":101,"line":22},[99,165163,165164],{"class":158},"min",[99,165166,165095],{"class":109},[99,165168,327],{"class":158},[99,165170,12422],{"class":109},[99,165172,187],{"class":158},[99,165174,12422],{"class":109},[99,165176,181],{"class":158},[99,165178,4643],{"class":109},[14,165180,165181],{},"求和：",[90,165183,165185],{"className":30359,"code":165184,"language":30361,"meta":21,"style":21},"sum([1, 2, 3])\n",[96,165186,165187],{"__ignoreMap":21},[99,165188,165189,165192,165194,165196,165198,165200,165202,165204],{"class":101,"line":102},[99,165190,165191],{"class":158},"sum",[99,165193,165095],{"class":109},[99,165195,327],{"class":158},[99,165197,12422],{"class":109},[99,165199,187],{"class":158},[99,165201,12422],{"class":109},[99,165203,181],{"class":158},[99,165205,4643],{"class":109},[14,165207,163452],{},[90,165209,165211],{"className":30359,"code":165210,"language":30361,"meta":21,"style":21},"sorted([3, 1, 2])\n",[96,165212,165213],{"__ignoreMap":21},[99,165214,165215,165218,165220,165222,165224,165226,165228,165230],{"class":101,"line":102},[99,165216,165217],{"class":158},"sorted",[99,165219,165095],{"class":109},[99,165221,181],{"class":158},[99,165223,12422],{"class":109},[99,165225,327],{"class":158},[99,165227,12422],{"class":109},[99,165229,187],{"class":158},[99,165231,4643],{"class":109},[14,165233,165234],{},"类型转换：",[90,165236,165238],{"className":30359,"code":165237,"language":30361,"meta":21,"style":21},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[96,165239,165240,165250,165268],{"__ignoreMap":21},[99,165241,165242,165244,165246,165248],{"class":101,"line":102},[99,165243,154051],{"class":158},[99,165245,110],{"class":109},[99,165247,155861],{"class":214},[99,165249,116],{"class":109},[99,165251,165252,165254,165256,165258,165260,165262,165264,165266],{"class":101,"line":22},[99,165253,155246],{"class":158},[99,165255,165095],{"class":109},[99,165257,327],{"class":158},[99,165259,12422],{"class":109},[99,165261,187],{"class":158},[99,165263,12422],{"class":109},[99,165265,181],{"class":158},[99,165267,4643],{"class":109},[99,165269,165270,165272,165274,165276,165278,165280,165282,165284,165286,165288],{"class":101,"line":1165},[99,165271,155271],{"class":158},[99,165273,165095],{"class":109},[99,165275,327],{"class":158},[99,165277,12422],{"class":109},[99,165279,327],{"class":158},[99,165281,12422],{"class":109},[99,165283,187],{"class":158},[99,165285,12422],{"class":109},[99,165287,181],{"class":158},[99,165289,4643],{"class":109},[14,165291,165292],{},"成员判断：",[90,165294,165296],{"className":30359,"code":165295,"language":30361,"meta":21,"style":21},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[96,165297,165298,165315,165339],{"__ignoreMap":21},[99,165299,165300,165302,165304,165307,165310,165313],{"class":101,"line":102},[99,165301,30396],{"class":158},[99,165303,110],{"class":109},[99,165305,165306],{"class":214},"\"a\"",[99,165308,165309],{"class":105}," in",[99,165311,165312],{"class":214}," \"abc\"",[99,165314,116],{"class":109},[99,165316,165317,165319,165321,165323,165325,165327,165329,165331,165333,165335,165337],{"class":101,"line":22},[99,165318,30396],{"class":158},[99,165320,110],{"class":109},[99,165322,327],{"class":158},[99,165324,165309],{"class":105},[99,165326,52207],{"class":109},[99,165328,327],{"class":158},[99,165330,12422],{"class":109},[99,165332,187],{"class":158},[99,165334,12422],{"class":109},[99,165336,181],{"class":158},[99,165338,4643],{"class":109},[99,165340,165341,165343,165345,165347,165349,165351,165353,165355,165357],{"class":101,"line":1165},[99,165342,30396],{"class":158},[99,165344,110],{"class":109},[99,165346,62660],{"class":214},[99,165348,165309],{"class":105},[99,165350,4434],{"class":109},[99,165352,62660],{"class":214},[99,165354,51418],{"class":109},[99,165356,149869],{"class":214},[99,165358,165133],{"class":109},[41,165360,165362],{"id":165361},"_614-推导式","6.14 推导式",[14,165364,165365],{},"推导式用于快速生成容器。",[14,165367,165368],{},"列表推导式：",[90,165370,165372],{"className":30359,"code":165371,"language":30361,"meta":21,"style":21},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[96,165373,165374,165401],{"__ignoreMap":21},[99,165375,165376,165378,165380,165383,165385,165387,165389,165391,165393,165395,165397,165399],{"class":101,"line":102},[99,165377,164081],{"class":109},[99,165379,155],{"class":105},[99,165381,165382],{"class":109}," [i ",[99,165384,3011],{"class":105},[99,165386,9425],{"class":109},[99,165388,26032],{"class":105},[99,165390,32424],{"class":158},[99,165392,110],{"class":109},[99,165394,327],{"class":158},[99,165396,12422],{"class":109},[99,165398,454],{"class":158},[99,165400,97281],{"class":109},[99,165402,165403,165405],{"class":101,"line":22},[99,165404,30396],{"class":158},[99,165406,164297],{"class":109},[14,165408,165409],{},"带条件：",[90,165411,165413],{"className":30359,"code":165412,"language":30361,"meta":21,"style":21},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[96,165414,165415,165456],{"__ignoreMap":21},[99,165416,165417,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454],{"class":101,"line":102},[99,165418,165419],{"class":109},"even_nums ",[99,165421,155],{"class":105},[99,165423,165382],{"class":109},[99,165425,3011],{"class":105},[99,165427,9425],{"class":109},[99,165429,26032],{"class":105},[99,165431,32424],{"class":158},[99,165433,110],{"class":109},[99,165435,327],{"class":158},[99,165437,12422],{"class":109},[99,165439,447],{"class":158},[99,165441,13701],{"class":109},[99,165443,1517],{"class":105},[99,165445,9425],{"class":109},[99,165447,438],{"class":105},[99,165449,14742],{"class":158},[99,165451,101540],{"class":105},[99,165453,4079],{"class":158},[99,165455,33227],{"class":109},[99,165457,165458,165460],{"class":101,"line":22},[99,165459,30396],{"class":158},[99,165461,165462],{"class":109},"(even_nums)\n",[14,165464,165465],{},"字典推导式：",[90,165467,165469],{"className":30359,"code":165468,"language":30361,"meta":21,"style":21},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[96,165470,165471,165505],{"__ignoreMap":21},[99,165472,165473,165476,165478,165481,165483,165485,165488,165490,165492,165494,165496,165498,165500,165502],{"class":101,"line":102},[99,165474,165475],{"class":109},"squares ",[99,165477,155],{"class":105},[99,165479,165480],{"class":109}," {i: i ",[99,165482,10648],{"class":105},[99,165484,14742],{"class":158},[99,165486,165487],{"class":105}," for",[99,165489,9425],{"class":109},[99,165491,26032],{"class":105},[99,165493,32424],{"class":158},[99,165495,110],{"class":109},[99,165497,327],{"class":158},[99,165499,12422],{"class":109},[99,165501,454],{"class":158},[99,165503,165504],{"class":109},")}\n",[99,165506,165507,165509],{"class":101,"line":22},[99,165508,30396],{"class":158},[99,165510,165511],{"class":109},"(squares)\n",[14,165513,165514],{},"集合推导式：",[90,165516,165518],{"className":30359,"code":165517,"language":30361,"meta":21,"style":21},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[96,165519,165520,165541],{"__ignoreMap":21},[99,165521,165522,165525,165527,165530,165532,165534,165536,165539],{"class":101,"line":102},[99,165523,165524],{"class":109},"chars ",[99,165526,155],{"class":105},[99,165528,165529],{"class":109}," {ch ",[99,165531,3011],{"class":105},[99,165533,159673],{"class":109},[99,165535,26032],{"class":105},[99,165537,165538],{"class":214}," \"hello\"",[99,165540,1551],{"class":109},[99,165542,165543,165545],{"class":101,"line":22},[99,165544,30396],{"class":158},[99,165546,165547],{"class":109},"(chars)\n",[14,165549,165550],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[41,165552,165554],{"id":165553},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[90,165556,165558],{"className":30359,"code":165557,"language":30361,"meta":21,"style":21},"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",[96,165559,165560,165568,165588,165608,165628,165648,165652,165656,165664,165678,165687,165691,165701,165713,165717,165737,165746,165750,165766,165771,165775,165789,165793,165815,165851],{"__ignoreMap":21},[99,165561,165562,165564,165566],{"class":101,"line":102},[99,165563,159697],{"class":109},[99,165565,155],{"class":105},[99,165567,55428],{"class":109},[99,165569,165570,165572,165574,165576,165578,165580,165582,165584,165586],{"class":101,"line":22},[99,165571,148366],{"class":109},[99,165573,62660],{"class":214},[99,165575,51418],{"class":109},[99,165577,149869],{"class":214},[99,165579,12422],{"class":109},[99,165581,151453],{"class":214},[99,165583,51418],{"class":109},[99,165585,1099],{"class":158},[99,165587,4916],{"class":109},[99,165589,165590,165592,165594,165596,165598,165600,165602,165604,165606],{"class":101,"line":1165},[99,165591,148366],{"class":109},[99,165593,62660],{"class":214},[99,165595,51418],{"class":109},[99,165597,150917],{"class":214},[99,165599,12422],{"class":109},[99,165601,151453],{"class":214},[99,165603,51418],{"class":109},[99,165605,921],{"class":158},[99,165607,4916],{"class":109},[99,165609,165610,165612,165614,165616,165618,165620,165622,165624,165626],{"class":101,"line":1180},[99,165611,148366],{"class":109},[99,165613,62660],{"class":214},[99,165615,51418],{"class":109},[99,165617,159712],{"class":214},[99,165619,12422],{"class":109},[99,165621,151453],{"class":214},[99,165623,51418],{"class":109},[99,165625,516],{"class":158},[99,165627,4916],{"class":109},[99,165629,165630,165632,165634,165636,165638,165640,165642,165644,165646],{"class":101,"line":1186},[99,165631,148366],{"class":109},[99,165633,62660],{"class":214},[99,165635,51418],{"class":109},[99,165637,163291],{"class":214},[99,165639,12422],{"class":109},[99,165641,151453],{"class":214},[99,165643,51418],{"class":109},[99,165645,992],{"class":158},[99,165647,4916],{"class":109},[99,165649,165650],{"class":101,"line":1200},[99,165651,33227],{"class":109},[99,165653,165654],{"class":101,"line":1206},[99,165655,2386],{"emptyLinePlaceholder":26},[99,165657,165658,165660,165662],{"class":101,"line":1297},[99,165659,157241],{"class":109},[99,165661,155],{"class":105},[99,165663,47314],{"class":158},[99,165665,165666,165669,165671,165674,165676],{"class":101,"line":1303},[99,165667,165668],{"class":109},"max_student ",[99,165670,155],{"class":105},[99,165672,165673],{"class":109}," students[",[99,165675,301],{"class":158},[99,165677,33227],{"class":109},[99,165679,165680,165683,165685],{"class":101,"line":1315},[99,165681,165682],{"class":109},"passed ",[99,165684,155],{"class":105},[99,165686,51819],{"class":109},[99,165688,165689],{"class":101,"line":1598},[99,165690,2386],{"emptyLinePlaceholder":26},[99,165692,165693,165695,165697,165699],{"class":101,"line":1603},[99,165694,3011],{"class":105},[99,165696,152118],{"class":109},[99,165698,26032],{"class":105},[99,165700,152123],{"class":109},[99,165702,165703,165705,165707,165709,165711],{"class":101,"line":1609},[99,165704,159288],{"class":109},[99,165706,9464],{"class":105},[99,165708,152130],{"class":109},[99,165710,151453],{"class":214},[99,165712,33227],{"class":109},[99,165714,165715],{"class":101,"line":1614},[99,165716,2386],{"emptyLinePlaceholder":26},[99,165718,165719,165721,165723,165725,165727,165729,165732,165734],{"class":101,"line":1628},[99,165720,3087],{"class":105},[99,165722,152130],{"class":109},[99,165724,151453],{"class":214},[99,165726,4429],{"class":109},[99,165728,1070],{"class":105},[99,165730,165731],{"class":109}," max_student[",[99,165733,151453],{"class":214},[99,165735,165736],{"class":109},"]:\n",[99,165738,165739,165742,165744],{"class":101,"line":1633},[99,165740,165741],{"class":109},"        max_student ",[99,165743,155],{"class":105},[99,165745,152146],{"class":109},[99,165747,165748],{"class":101,"line":1639},[99,165749,2386],{"emptyLinePlaceholder":26},[99,165751,165752,165754,165756,165758,165760,165762,165764],{"class":101,"line":1660},[99,165753,3087],{"class":105},[99,165755,152130],{"class":109},[99,165757,151453],{"class":214},[99,165759,4429],{"class":109},[99,165761,1696],{"class":105},[99,165763,157818],{"class":158},[99,165765,3725],{"class":109},[99,165767,165768],{"class":101,"line":1665},[99,165769,165770],{"class":109},"        passed.append(student)\n",[99,165772,165773],{"class":101,"line":1679},[99,165774,2386],{"emptyLinePlaceholder":26},[99,165776,165777,165779,165781,165783,165785,165787],{"class":101,"line":1684},[99,165778,163755],{"class":109},[99,165780,155],{"class":105},[99,165782,163760],{"class":109},[99,165784,694],{"class":105},[99,165786,7318],{"class":158},[99,165788,164976],{"class":109},[99,165790,165791],{"class":101,"line":1713},[99,165792,2386],{"emptyLinePlaceholder":26},[99,165794,165795,165797,165799,165801,165803,165805,165807,165809,165811,165813],{"class":101,"line":1718},[99,165796,30396],{"class":158},[99,165798,110],{"class":109},[99,165800,162],{"class":105},[99,165802,163778],{"class":214},[99,165804,1006],{"class":158},[99,165806,163783],{"class":109},[99,165808,157140],{"class":105},[99,165810,1056],{"class":158},[99,165812,361],{"class":214},[99,165814,116],{"class":109},[99,165816,165817,165819,165821,165823,165826,165828,165831,165833,165835,165837,165839,165841,165843,165845,165847,165849],{"class":101,"line":1735},[99,165818,30396],{"class":158},[99,165820,110],{"class":109},[99,165822,162],{"class":105},[99,165824,165825],{"class":214},"\"最高分学生:",[99,165827,1006],{"class":158},[99,165829,165830],{"class":109},"max_student[",[99,165832,152863],{"class":214},[99,165834,1050],{"class":109},[99,165836,1056],{"class":158},[99,165838,4434],{"class":158},[99,165840,165830],{"class":109},[99,165842,152901],{"class":214},[99,165844,1050],{"class":109},[99,165846,1056],{"class":158},[99,165848,361],{"class":214},[99,165850,116],{"class":109},[99,165852,165853,165855,165857,165859,165862,165865,165868,165870,165872],{"class":101,"line":1740},[99,165854,30396],{"class":158},[99,165856,110],{"class":109},[99,165858,162],{"class":105},[99,165860,165861],{"class":214},"\"及格人数:",[99,165863,165864],{"class":158},"{len",[99,165866,165867],{"class":109},"(passed)",[99,165869,1056],{"class":158},[99,165871,361],{"class":214},[99,165873,116],{"class":109},[41,165875,165877],{"id":165876},"_616-易错点","6.16 易错点",[53,165879,165880,165883,165886,165889,165895,165904],{},[56,165881,165882],{},"列表可变，元组和字符串不可变。",[56,165884,165885],{},"切片结束位置不包含。",[56,165887,165888],{},"字典通过 key 取值，不是通过索引。",[56,165890,165891,165892,28366],{},"空集合要用 ",[96,165893,165894],{},"set()",[56,165896,104347,165897,165900,165901,28366],{},[96,165898,165899],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[96,165902,165903],{},"get()",[56,165905,165906],{},"嵌套容器要先看清楚每一层是什么类型。",[41,165908,165910],{"id":165909},"_617-本章练习","6.17 本章练习",[53,165912,165913,165916,165919,165922,165925],{},[56,165914,165915],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[56,165917,165918],{},"输入一句话，统计每个字符出现次数。",[56,165920,165921],{},"使用集合去除列表中的重复元素。",[56,165923,165924],{},"使用字典保存一个学生的信息，并实现修改成绩。",[56,165926,165927],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5113,165929,165930],{},"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":21,"searchDepth":22,"depth":22,"links":165932},[165933,165934,165935,165936,165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947,165948,165949],{"id":162913,"depth":22,"text":162914},{"id":163030,"depth":22,"text":163031},{"id":163120,"depth":22,"text":163121},{"id":163244,"depth":22,"text":163245},{"id":163607,"depth":22,"text":163608},{"id":163794,"depth":22,"text":163795},{"id":163913,"depth":22,"text":163914},{"id":164055,"depth":22,"text":164056},{"id":164242,"depth":22,"text":164243},{"id":164486,"depth":22,"text":164487},{"id":164696,"depth":22,"text":164697},{"id":164781,"depth":22,"text":164782},{"id":165079,"depth":22,"text":165080},{"id":165361,"depth":22,"text":165362},{"id":165553,"depth":22,"text":165554},{"id":165876,"depth":22,"text":165877},{"id":165909,"depth":22,"text":165910},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162905,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165956,"title":165957,"body":165958,"description":23364,"extension":24,"meta":168130,"navigation":26,"path":168131,"seo":168132,"stem":168133,"__hash__":168134},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165959,"toc":168105},[165960,165963,165967,165970,166050,166053,166074,166077,166081,166084,166146,166149,166166,166170,166173,166218,166220,166228,166232,166235,166317,166320,166323,166348,166351,166374,166378,166381,166383,166445,166448,166450,166501,166505,166509,166515,166620,166624,166630,166701,166705,166708,166776,166779,166859,166863,166869,166905,166908,166911,167021,167027,167031,167034,167106,167109,167113,167117,167122,167184,167188,167193,167261,167265,167270,167386,167390,167393,167473,167476,167480,167483,167587,167589,167604,167607,167611,167749,167757,167761,167763,167774,167776,168034,168038,168070,168074,168102],[10,165961,165957],{"id":165962},"_7-函数进阶",[41,165964,165966],{"id":165965},"_71-多返回值","7.1 多返回值",[14,165968,165969],{},"Python 函数可以返回多个值，本质上返回的是元组。",[90,165971,165973],{"className":30359,"code":165972,"language":30361,"meta":21,"style":21},"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",[96,165974,165975,165984,165992,166000,166009,166016,166020,166024,166033,166039],{"__ignoreMap":21},[99,165976,165977,165979,165982],{"class":101,"line":102},[99,165978,31928],{"class":105},[99,165980,165981],{"class":1949}," get_info",[99,165983,31934],{"class":109},[99,165985,165986,165988,165990],{"class":101,"line":22},[99,165987,152351],{"class":109},[99,165989,155],{"class":105},[99,165991,149334],{"class":214},[99,165993,165994,165996,165998],{"class":101,"line":1165},[99,165995,152367],{"class":109},[99,165997,155],{"class":105},[99,165999,146532],{"class":158},[99,166001,166002,166004,166006],{"class":101,"line":1180},[99,166003,152382],{"class":109},[99,166005,155],{"class":105},[99,166007,166008],{"class":158}," 95\n",[99,166010,166011,166013],{"class":101,"line":1186},[99,166012,4076],{"class":105},[99,166014,166015],{"class":109}," name, age, score\n",[99,166017,166018],{"class":101,"line":1200},[99,166019,2386],{"emptyLinePlaceholder":26},[99,166021,166022],{"class":101,"line":1206},[99,166023,2386],{"emptyLinePlaceholder":26},[99,166025,166026,166028,166030],{"class":101,"line":1297},[99,166027,161287],{"class":109},[99,166029,155],{"class":105},[99,166031,166032],{"class":109}," get_info()\n",[99,166034,166035,166037],{"class":101,"line":1303},[99,166036,30396],{"class":158},[99,166038,76566],{"class":109},[99,166040,166041,166043,166045,166047],{"class":101,"line":1315},[99,166042,30396],{"class":158},[99,166044,110],{"class":109},[99,166046,103088],{"class":158},[99,166048,166049],{"class":109},"(result))\n",[14,166051,166052],{},"可以直接解包：",[90,166054,166056],{"className":30359,"code":166055,"language":30361,"meta":21,"style":21},"name, age, score = get_info()\nprint(name, age, score)\n",[96,166057,166058,166067],{"__ignoreMap":21},[99,166059,166060,166063,166065],{"class":101,"line":102},[99,166061,166062],{"class":109},"name, age, score ",[99,166064,155],{"class":105},[99,166066,166032],{"class":109},[99,166068,166069,166071],{"class":101,"line":22},[99,166070,30396],{"class":158},[99,166072,166073],{"class":109},"(name, age, score)\n",[14,166075,166076],{},"返回多个值适合函数需要同时给出多个结果时使用。",[41,166078,166080],{"id":166079},"_72-位置参数","7.2 位置参数",[14,166082,166083],{},"位置参数按顺序传递。",[90,166085,166087],{"className":30359,"code":166086,"language":30361,"meta":21,"style":21},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[96,166088,166089,166097,166125,166129,166133],{"__ignoreMap":21},[99,166090,166091,166093,166095],{"class":101,"line":102},[99,166092,31928],{"class":105},[99,166094,149353],{"class":1949},[99,166096,149356],{"class":109},[99,166098,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119,166121,166123],{"class":101,"line":22},[99,166100,31280],{"class":158},[99,166102,110],{"class":109},[99,166104,162],{"class":105},[99,166106,149367],{"class":214},[99,166108,1006],{"class":158},[99,166110,79791],{"class":109},[99,166112,1056],{"class":158},[99,166114,149376],{"class":214},[99,166116,1006],{"class":158},[99,166118,70202],{"class":109},[99,166120,1056],{"class":158},[99,166122,149385],{"class":214},[99,166124,116],{"class":109},[99,166126,166127],{"class":101,"line":1165},[99,166128,2386],{"emptyLinePlaceholder":26},[99,166130,166131],{"class":101,"line":1180},[99,166132,2386],{"emptyLinePlaceholder":26},[99,166134,166135,166138,166140,166142,166144],{"class":101,"line":1186},[99,166136,166137],{"class":109},"introduce(",[99,166139,149869],{"class":214},[99,166141,12422],{"class":109},[99,166143,760],{"class":158},[99,166145,116],{"class":109},[14,166147,166148],{},"顺序错了就会得到错误含义：",[90,166150,166152],{"className":30359,"code":166151,"language":30361,"meta":21,"style":21},"introduce(18, \"小明\")\n",[96,166153,166154],{"__ignoreMap":21},[99,166155,166156,166158,166160,166162,166164],{"class":101,"line":102},[99,166157,166137],{"class":109},[99,166159,760],{"class":158},[99,166161,12422],{"class":109},[99,166163,149869],{"class":214},[99,166165,116],{"class":109},[41,166167,166169],{"id":166168},"_73-关键字参数","7.3 关键字参数",[14,166171,166172],{},"关键字参数按参数名传递。",[90,166174,166176],{"className":30359,"code":166175,"language":30361,"meta":21,"style":21},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[96,166177,166178,166198],{"__ignoreMap":21},[99,166179,166180,166182,166184,166186,166188,166190,166192,166194,166196],{"class":101,"line":102},[99,166181,166137],{"class":109},[99,166183,79791],{"class":5203},[99,166185,155],{"class":105},[99,166187,149869],{"class":214},[99,166189,12422],{"class":109},[99,166191,70202],{"class":5203},[99,166193,155],{"class":105},[99,166195,760],{"class":158},[99,166197,116],{"class":109},[99,166199,166200,166202,166204,166206,166208,166210,166212,166214,166216],{"class":101,"line":22},[99,166201,166137],{"class":109},[99,166203,70202],{"class":5203},[99,166205,155],{"class":105},[99,166207,760],{"class":158},[99,166209,12422],{"class":109},[99,166211,79791],{"class":5203},[99,166213,155],{"class":105},[99,166215,149869],{"class":214},[99,166217,116],{"class":109},[14,166219,117915],{},[53,166221,166222,166225],{},[56,166223,166224],{},"顺序不容易错。",[56,166226,166227],{},"调用时可读性更强。",[41,166229,166231],{"id":166230},"_74-默认参数","7.4 默认参数",[14,166233,166234],{},"默认参数给参数设置默认值。",[90,166236,166238],{"className":30359,"code":166237,"language":30361,"meta":21,"style":21},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[96,166239,166240,166256,166286,166290,166294,166304],{"__ignoreMap":21},[99,166241,166242,166244,166246,166249,166251,166254],{"class":101,"line":102},[99,166243,31928],{"class":105},[99,166245,122074],{"class":1949},[99,166247,166248],{"class":109},"(host, port",[99,166250,155],{"class":105},[99,166252,166253],{"class":158},"3306",[99,166255,30767],{"class":109},[99,166257,166258,166260,166262,166264,166267,166269,166271,166273,166275,166277,166280,166282,166284],{"class":101,"line":22},[99,166259,31280],{"class":158},[99,166261,110],{"class":109},[99,166263,162],{"class":105},[99,166265,166266],{"class":214},"\"连接",[99,166268,1006],{"class":158},[99,166270,27384],{"class":109},[99,166272,1056],{"class":158},[99,166274,969],{"class":214},[99,166276,1006],{"class":158},[99,166278,166279],{"class":109},"port",[99,166281,1056],{"class":158},[99,166283,361],{"class":214},[99,166285,116],{"class":109},[99,166287,166288],{"class":101,"line":1165},[99,166289,2386],{"emptyLinePlaceholder":26},[99,166291,166292],{"class":101,"line":1180},[99,166293,2386],{"emptyLinePlaceholder":26},[99,166295,166296,166299,166302],{"class":101,"line":1186},[99,166297,166298],{"class":109},"connect(",[99,166300,166301],{"class":214},"\"localhost\"",[99,166303,116],{"class":109},[99,166305,166306,166308,166310,166312,166315],{"class":101,"line":1200},[99,166307,166298],{"class":109},[99,166309,166301],{"class":214},[99,166311,12422],{"class":109},[99,166313,166314],{"class":158},"6379",[99,166316,116],{"class":109},[14,166318,166319],{},"注意：默认参数必须放在非默认参数后面。",[14,166321,166322],{},"错误：",[90,166324,166326],{"className":30359,"code":166325,"language":30361,"meta":21,"style":21},"def connect(port=3306, host):\n    pass\n",[96,166327,166328,166344],{"__ignoreMap":21},[99,166329,166330,166332,166334,166337,166339,166341],{"class":101,"line":102},[99,166331,31928],{"class":105},[99,166333,122074],{"class":1949},[99,166335,166336],{"class":109},"(port",[99,166338,155],{"class":105},[99,166340,166253],{"class":158},[99,166342,166343],{"class":109},", host):\n",[99,166345,166346],{"class":101,"line":22},[99,166347,149518],{"class":105},[14,166349,166350],{},"正确：",[90,166352,166354],{"className":30359,"code":166353,"language":30361,"meta":21,"style":21},"def connect(host, port=3306):\n    pass\n",[96,166355,166356,166370],{"__ignoreMap":21},[99,166357,166358,166360,166362,166364,166366,166368],{"class":101,"line":102},[99,166359,31928],{"class":105},[99,166361,122074],{"class":1949},[99,166363,166248],{"class":109},[99,166365,155],{"class":105},[99,166367,166253],{"class":158},[99,166369,30767],{"class":109},[99,166371,166372],{"class":101,"line":22},[99,166373,149518],{"class":105},[41,166375,166377],{"id":166376},"_75-默认参数的坑","7.5 默认参数的坑",[14,166379,166380],{},"不要使用可变对象作为默认参数。",[14,166382,157604],{},[90,166384,166386],{"className":30359,"code":166385,"language":30361,"meta":21,"style":21},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[96,166387,166388,166403,166408,166415,166419,166423,166434],{"__ignoreMap":21},[99,166389,166390,166392,166395,166398,166400],{"class":101,"line":102},[99,166391,31928],{"class":105},[99,166393,166394],{"class":1949}," add_item",[99,166396,166397],{"class":109},"(item, items",[99,166399,155],{"class":105},[99,166401,166402],{"class":109},"[]):\n",[99,166404,166405],{"class":101,"line":22},[99,166406,166407],{"class":109},"    items.append(item)\n",[99,166409,166410,166412],{"class":101,"line":1165},[99,166411,4076],{"class":105},[99,166413,166414],{"class":109}," items\n",[99,166416,166417],{"class":101,"line":1180},[99,166418,2386],{"emptyLinePlaceholder":26},[99,166420,166421],{"class":101,"line":1186},[99,166422,2386],{"emptyLinePlaceholder":26},[99,166424,166425,166427,166430,166432],{"class":101,"line":1200},[99,166426,30396],{"class":158},[99,166428,166429],{"class":109},"(add_item(",[99,166431,165306],{"class":214},[99,166433,30478],{"class":109},[99,166435,166436,166438,166440,166443],{"class":101,"line":1206},[99,166437,30396],{"class":158},[99,166439,166429],{"class":109},[99,166441,166442],{"class":214},"\"b\"",[99,166444,30478],{"class":109},[14,166446,166447],{},"第二次调用会复用第一次的列表。",[14,166449,155869],{},[90,166451,166453],{"className":30359,"code":166452,"language":30361,"meta":21,"style":21},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[96,166454,166455,166469,166482,166491,166495],{"__ignoreMap":21},[99,166456,166457,166459,166461,166463,166465,166467],{"class":101,"line":102},[99,166458,31928],{"class":105},[99,166460,166394],{"class":1949},[99,166462,166397],{"class":109},[99,166464,155],{"class":105},[99,166466,95667],{"class":158},[99,166468,30767],{"class":109},[99,166470,166471,166473,166476,166478,166480],{"class":101,"line":22},[99,166472,3087],{"class":105},[99,166474,166475],{"class":109}," items ",[99,166477,38908],{"class":105},[99,166479,38914],{"class":158},[99,166481,3725],{"class":109},[99,166483,166484,166487,166489],{"class":101,"line":1165},[99,166485,166486],{"class":109},"        items ",[99,166488,155],{"class":105},[99,166490,51819],{"class":109},[99,166492,166493],{"class":101,"line":1180},[99,166494,166407],{"class":109},[99,166496,166497,166499],{"class":101,"line":1186},[99,166498,4076],{"class":105},[99,166500,166414],{"class":109},[41,166502,166504],{"id":166503},"_76-不定长参数","7.6 不定长参数",[70,166506,166508],{"id":166507},"_761-args","7.6.1 *args",[14,166510,166511,166514],{},[96,166512,166513],{},"*args"," 接收任意数量的位置参数，得到元组。",[90,166516,166518],{"className":30359,"code":166517,"language":30361,"meta":21,"style":21},"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",[96,166519,166520,166533,166541,166552,166561,166567,166571,166575,166594],{"__ignoreMap":21},[99,166521,166522,166524,166526,166528,166530],{"class":101,"line":102},[99,166523,31928],{"class":105},[99,166525,5196],{"class":1949},[99,166527,110],{"class":109},[99,166529,565],{"class":105},[99,166531,166532],{"class":109},"args):\n",[99,166534,166535,166537,166539],{"class":101,"line":22},[99,166536,159288],{"class":109},[99,166538,155],{"class":105},[99,166540,47314],{"class":158},[99,166542,166543,166545,166547,166549],{"class":101,"line":1165},[99,166544,3187],{"class":105},[99,166546,156161],{"class":109},[99,166548,26032],{"class":105},[99,166550,166551],{"class":109}," args:\n",[99,166553,166554,166556,166558],{"class":101,"line":1180},[99,166555,159963],{"class":109},[99,166557,9464],{"class":105},[99,166559,166560],{"class":109}," num\n",[99,166562,166563,166565],{"class":101,"line":1186},[99,166564,4076],{"class":105},[99,166566,162268],{"class":109},[99,166568,166569],{"class":101,"line":1200},[99,166570,2386],{"emptyLinePlaceholder":26},[99,166572,166573],{"class":101,"line":1206},[99,166574,2386],{"emptyLinePlaceholder":26},[99,166576,166577,166579,166582,166584,166586,166588,166590,166592],{"class":101,"line":1297},[99,166578,30396],{"class":158},[99,166580,166581],{"class":109},"(add(",[99,166583,327],{"class":158},[99,166585,12422],{"class":109},[99,166587,187],{"class":158},[99,166589,12422],{"class":109},[99,166591,181],{"class":158},[99,166593,30478],{"class":109},[99,166595,166596,166598,166600,166602,166604,166606,166608,166610,166612,166614,166616,166618],{"class":101,"line":1303},[99,166597,30396],{"class":158},[99,166599,166581],{"class":109},[99,166601,327],{"class":158},[99,166603,12422],{"class":109},[99,166605,187],{"class":158},[99,166607,12422],{"class":109},[99,166609,181],{"class":158},[99,166611,12422],{"class":109},[99,166613,403],{"class":158},[99,166615,12422],{"class":109},[99,166617,429],{"class":158},[99,166619,30478],{"class":109},[70,166621,166623],{"id":166622},"_762-kwargs","7.6.2 **kwargs",[14,166625,166626,166629],{},[96,166627,166628],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[90,166631,166633],{"className":30359,"code":166632,"language":30361,"meta":21,"style":21},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[96,166634,166635,166648,166659,166665,166669,166673],{"__ignoreMap":21},[99,166636,166637,166639,166641,166643,166645],{"class":101,"line":102},[99,166638,31928],{"class":105},[99,166640,161926],{"class":1949},[99,166642,110],{"class":109},[99,166644,10648],{"class":105},[99,166646,166647],{"class":109},"kwargs):\n",[99,166649,166650,166652,166654,166656],{"class":101,"line":22},[99,166651,3187],{"class":105},[99,166653,164766],{"class":109},[99,166655,26032],{"class":105},[99,166657,166658],{"class":109}," kwargs.items():\n",[99,166660,166661,166663],{"class":101,"line":1165},[99,166662,32432],{"class":158},[99,166664,164778],{"class":109},[99,166666,166667],{"class":101,"line":1180},[99,166668,2386],{"emptyLinePlaceholder":26},[99,166670,166671],{"class":101,"line":1186},[99,166672,2386],{"emptyLinePlaceholder":26},[99,166674,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693,166695,166697,166699],{"class":101,"line":1200},[99,166676,161991],{"class":109},[99,166678,79791],{"class":5203},[99,166680,155],{"class":105},[99,166682,149869],{"class":214},[99,166684,12422],{"class":109},[99,166686,70202],{"class":5203},[99,166688,155],{"class":105},[99,166690,760],{"class":158},[99,166692,12422],{"class":109},[99,166694,70253],{"class":5203},[99,166696,155],{"class":105},[99,166698,69250],{"class":214},[99,166700,116],{"class":109},[41,166702,166704],{"id":166703},"_77-参数解包","7.7 参数解包",[14,166706,166707],{},"列表或元组解包为位置参数：",[90,166709,166711],{"className":30359,"code":166710,"language":30361,"meta":21,"style":21},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[96,166712,166713,166722,166737,166741,166745,166765],{"__ignoreMap":21},[99,166714,166715,166717,166719],{"class":101,"line":102},[99,166716,31928],{"class":105},[99,166718,5196],{"class":1949},[99,166720,166721],{"class":109},"(a, b, c):\n",[99,166723,166724,166726,166728,166730,166732,166734],{"class":101,"line":22},[99,166725,4076],{"class":105},[99,166727,10856],{"class":109},[99,166729,591],{"class":105},[99,166731,10869],{"class":109},[99,166733,591],{"class":105},[99,166735,166736],{"class":109}," c\n",[99,166738,166739],{"class":101,"line":1165},[99,166740,2386],{"emptyLinePlaceholder":26},[99,166742,166743],{"class":101,"line":1180},[99,166744,2386],{"emptyLinePlaceholder":26},[99,166746,166747,166749,166751,166753,166755,166757,166759,166761,166763],{"class":101,"line":1186},[99,166748,164081],{"class":109},[99,166750,155],{"class":105},[99,166752,52207],{"class":109},[99,166754,327],{"class":158},[99,166756,12422],{"class":109},[99,166758,187],{"class":158},[99,166760,12422],{"class":109},[99,166762,181],{"class":158},[99,166764,33227],{"class":109},[99,166766,166767,166769,166771,166773],{"class":101,"line":1200},[99,166768,30396],{"class":158},[99,166770,166581],{"class":109},[99,166772,565],{"class":105},[99,166774,166775],{"class":109},"nums))\n",[14,166777,166778],{},"字典解包为关键字参数：",[90,166780,166782],{"className":30359,"code":166781,"language":30361,"meta":21,"style":21},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[96,166783,166784,166792,166818,166822,166826,166850],{"__ignoreMap":21},[99,166785,166786,166788,166790],{"class":101,"line":102},[99,166787,31928],{"class":105},[99,166789,149353],{"class":1949},[99,166791,149356],{"class":109},[99,166793,166794,166796,166798,166800,166802,166804,166806,166808,166810,166812,166814,166816],{"class":101,"line":22},[99,166795,31280],{"class":158},[99,166797,110],{"class":109},[99,166799,162],{"class":105},[99,166801,361],{"class":214},[99,166803,1006],{"class":158},[99,166805,79791],{"class":109},[99,166807,1056],{"class":158},[99,166809,4434],{"class":158},[99,166811,70202],{"class":109},[99,166813,1056],{"class":158},[99,166815,361],{"class":214},[99,166817,116],{"class":109},[99,166819,166820],{"class":101,"line":1165},[99,166821,2386],{"emptyLinePlaceholder":26},[99,166823,166824],{"class":101,"line":1180},[99,166825,2386],{"emptyLinePlaceholder":26},[99,166827,166828,166830,166832,166834,166836,166838,166840,166842,166844,166846,166848],{"class":101,"line":1186},[99,166829,116295],{"class":109},[99,166831,155],{"class":105},[99,166833,4434],{"class":109},[99,166835,62660],{"class":214},[99,166837,51418],{"class":109},[99,166839,149869],{"class":214},[99,166841,12422],{"class":109},[99,166843,69105],{"class":214},[99,166845,51418],{"class":109},[99,166847,760],{"class":158},[99,166849,1551],{"class":109},[99,166851,166852,166854,166856],{"class":101,"line":1200},[99,166853,166137],{"class":109},[99,166855,10648],{"class":105},[99,166857,166858],{"class":109},"info)\n",[41,166860,166862],{"id":166861},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166864,166865,166868],{},[96,166866,166867],{},"lambda"," 用于定义简单匿名函数。",[90,166870,166872],{"className":30359,"code":166871,"language":30361,"meta":21,"style":21},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[96,166873,166874,166891],{"__ignoreMap":21},[99,166875,166876,166879,166881,166884,166887,166889],{"class":101,"line":102},[99,166877,166878],{"class":109},"add ",[99,166880,155],{"class":105},[99,166882,166883],{"class":105}," lambda",[99,166885,166886],{"class":109}," a, b: a ",[99,166888,591],{"class":105},[99,166890,151085],{"class":109},[99,166892,166893,166895,166897,166899,166901,166903],{"class":101,"line":22},[99,166894,30396],{"class":158},[99,166896,166581],{"class":109},[99,166898,327],{"class":158},[99,166900,12422],{"class":109},[99,166902,187],{"class":158},[99,166904,30478],{"class":109},[14,166906,166907],{},"常和排序、过滤等函数一起使用。",[14,166909,166910],{},"按分数排序：",[90,166912,166914],{"className":30359,"code":166913,"language":30361,"meta":21,"style":21},"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",[96,166915,166916,166924,166944,166964,166984,166988,166992,167015],{"__ignoreMap":21},[99,166917,166918,166920,166922],{"class":101,"line":102},[99,166919,159697],{"class":109},[99,166921,155],{"class":105},[99,166923,55428],{"class":109},[99,166925,166926,166928,166930,166932,166934,166936,166938,166940,166942],{"class":101,"line":22},[99,166927,148366],{"class":109},[99,166929,62660],{"class":214},[99,166931,51418],{"class":109},[99,166933,149869],{"class":214},[99,166935,12422],{"class":109},[99,166937,151453],{"class":214},[99,166939,51418],{"class":109},[99,166941,1099],{"class":158},[99,166943,4916],{"class":109},[99,166945,166946,166948,166950,166952,166954,166956,166958,166960,166962],{"class":101,"line":1165},[99,166947,148366],{"class":109},[99,166949,62660],{"class":214},[99,166951,51418],{"class":109},[99,166953,150917],{"class":214},[99,166955,12422],{"class":109},[99,166957,151453],{"class":214},[99,166959,51418],{"class":109},[99,166961,921],{"class":158},[99,166963,4916],{"class":109},[99,166965,166966,166968,166970,166972,166974,166976,166978,166980,166982],{"class":101,"line":1180},[99,166967,148366],{"class":109},[99,166969,62660],{"class":214},[99,166971,51418],{"class":109},[99,166973,159712],{"class":214},[99,166975,12422],{"class":109},[99,166977,151453],{"class":214},[99,166979,51418],{"class":109},[99,166981,516],{"class":158},[99,166983,4916],{"class":109},[99,166985,166986],{"class":101,"line":1186},[99,166987,33227],{"class":109},[99,166989,166990],{"class":101,"line":1200},[99,166991,2386],{"emptyLinePlaceholder":26},[99,166993,166994,166997,166999,167001,167003,167005,167007,167009,167011,167013],{"class":101,"line":1206},[99,166995,166996],{"class":109},"students.sort(",[99,166998,153927],{"class":5203},[99,167000,153930],{"class":105},[99,167002,153933],{"class":109},[99,167004,151453],{"class":214},[99,167006,112183],{"class":109},[99,167008,163509],{"class":5203},[99,167010,155],{"class":105},[99,167012,31457],{"class":158},[99,167014,116],{"class":109},[99,167016,167017,167019],{"class":101,"line":1297},[99,167018,30396],{"class":158},[99,167020,164976],{"class":109},[14,167022,167023,167024,167026],{},"如果逻辑复杂，不要硬写 ",[96,167025,166867],{},"，定义普通函数更清晰。",[41,167028,167030],{"id":167029},"_79-函数作为参数","7.9 函数作为参数",[14,167032,167033],{},"函数可以作为参数传给另一个函数。",[90,167035,167037],{"className":30359,"code":167036,"language":30361,"meta":21,"style":21},"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",[96,167038,167039,167047,167057,167061,167065,167075,167082,167086,167090],{"__ignoreMap":21},[99,167040,167041,167043,167045],{"class":101,"line":102},[99,167042,31928],{"class":105},[99,167044,5196],{"class":1949},[99,167046,151074],{"class":109},[99,167048,167049,167051,167053,167055],{"class":101,"line":22},[99,167050,4076],{"class":105},[99,167052,10856],{"class":109},[99,167054,591],{"class":105},[99,167056,151085],{"class":109},[99,167058,167059],{"class":101,"line":1165},[99,167060,2386],{"emptyLinePlaceholder":26},[99,167062,167063],{"class":101,"line":1180},[99,167064,2386],{"emptyLinePlaceholder":26},[99,167066,167067,167069,167072],{"class":101,"line":1186},[99,167068,31928],{"class":105},[99,167070,167071],{"class":1949}," calculate",[99,167073,167074],{"class":109},"(a, b, func):\n",[99,167076,167077,167079],{"class":101,"line":1200},[99,167078,4076],{"class":105},[99,167080,167081],{"class":109}," func(a, b)\n",[99,167083,167084],{"class":101,"line":1206},[99,167085,2386],{"emptyLinePlaceholder":26},[99,167087,167088],{"class":101,"line":1297},[99,167089,2386],{"emptyLinePlaceholder":26},[99,167091,167092,167094,167097,167099,167101,167103],{"class":101,"line":1303},[99,167093,30396],{"class":158},[99,167095,167096],{"class":109},"(calculate(",[99,167098,556],{"class":158},[99,167100,12422],{"class":109},[99,167102,810],{"class":158},[99,167104,167105],{"class":109},", add))\n",[14,167107,167108],{},"这种思想在排序、回调、框架中经常出现。",[41,167110,167112],{"id":167111},"_710-mapfiltersorted","7.10 map、filter、sorted",[70,167114,167116],{"id":167115},"_7101-map","7.10.1 map",[14,167118,167119,167121],{},[96,167120,74025],{}," 对每个元素执行函数。",[90,167123,167125],{"className":30359,"code":167124,"language":30361,"meta":21,"style":21},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[96,167126,167127,167151,167174],{"__ignoreMap":21},[99,167128,167129,167131,167133,167135,167137,167139,167141,167143,167145,167147,167149],{"class":101,"line":102},[99,167130,164081],{"class":109},[99,167132,155],{"class":105},[99,167134,52207],{"class":109},[99,167136,327],{"class":158},[99,167138,12422],{"class":109},[99,167140,187],{"class":158},[99,167142,12422],{"class":109},[99,167144,181],{"class":158},[99,167146,12422],{"class":109},[99,167148,403],{"class":158},[99,167150,33227],{"class":109},[99,167152,167153,167155,167157,167160,167162,167164,167167,167169,167171],{"class":101,"line":22},[99,167154,161287],{"class":109},[99,167156,155],{"class":105},[99,167158,167159],{"class":158}," map",[99,167161,110],{"class":109},[99,167163,166867],{"class":105},[99,167165,167166],{"class":109}," x: x ",[99,167168,565],{"class":105},[99,167170,14742],{"class":158},[99,167172,167173],{"class":109},", nums)\n",[99,167175,167176,167178,167180,167182],{"class":101,"line":1165},[99,167177,30396],{"class":158},[99,167179,110],{"class":109},[99,167181,154051],{"class":158},[99,167183,166049],{"class":109},[70,167185,167187],{"id":167186},"_7102-filter","7.10.2 filter",[14,167189,167190,167192],{},[96,167191,80032],{}," 保留满足条件的元素。",[90,167194,167196],{"className":30359,"code":167195,"language":30361,"meta":21,"style":21},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[96,167197,167198,167226,167251],{"__ignoreMap":21},[99,167199,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222,167224],{"class":101,"line":102},[99,167201,164081],{"class":109},[99,167203,155],{"class":105},[99,167205,52207],{"class":109},[99,167207,327],{"class":158},[99,167209,12422],{"class":109},[99,167211,187],{"class":158},[99,167213,12422],{"class":109},[99,167215,181],{"class":158},[99,167217,12422],{"class":109},[99,167219,403],{"class":158},[99,167221,12422],{"class":109},[99,167223,429],{"class":158},[99,167225,33227],{"class":109},[99,167227,167228,167230,167232,167235,167237,167239,167241,167243,167245,167247,167249],{"class":101,"line":22},[99,167229,161287],{"class":109},[99,167231,155],{"class":105},[99,167233,167234],{"class":158}," filter",[99,167236,110],{"class":109},[99,167238,166867],{"class":105},[99,167240,167166],{"class":109},[99,167242,438],{"class":105},[99,167244,14742],{"class":158},[99,167246,101540],{"class":105},[99,167248,4079],{"class":158},[99,167250,167173],{"class":109},[99,167252,167253,167255,167257,167259],{"class":101,"line":1165},[99,167254,30396],{"class":158},[99,167256,110],{"class":109},[99,167258,154051],{"class":158},[99,167260,166049],{"class":109},[70,167262,167264],{"id":167263},"_7103-sorted","7.10.3 sorted",[14,167266,167267,167269],{},[96,167268,165217],{}," 返回排序后的新列表。",[90,167271,167273],{"className":30359,"code":167272,"language":30361,"meta":21,"style":21},"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",[96,167274,167275,167283,167303,167323,167343,167347,167351,167380],{"__ignoreMap":21},[99,167276,167277,167279,167281],{"class":101,"line":102},[99,167278,159697],{"class":109},[99,167280,155],{"class":105},[99,167282,55428],{"class":109},[99,167284,167285,167287,167289,167291,167293,167295,167297,167299,167301],{"class":101,"line":22},[99,167286,148366],{"class":109},[99,167288,62660],{"class":214},[99,167290,51418],{"class":109},[99,167292,149869],{"class":214},[99,167294,12422],{"class":109},[99,167296,151453],{"class":214},[99,167298,51418],{"class":109},[99,167300,1099],{"class":158},[99,167302,4916],{"class":109},[99,167304,167305,167307,167309,167311,167313,167315,167317,167319,167321],{"class":101,"line":1165},[99,167306,148366],{"class":109},[99,167308,62660],{"class":214},[99,167310,51418],{"class":109},[99,167312,150917],{"class":214},[99,167314,12422],{"class":109},[99,167316,151453],{"class":214},[99,167318,51418],{"class":109},[99,167320,921],{"class":158},[99,167322,4916],{"class":109},[99,167324,167325,167327,167329,167331,167333,167335,167337,167339,167341],{"class":101,"line":1180},[99,167326,148366],{"class":109},[99,167328,62660],{"class":214},[99,167330,51418],{"class":109},[99,167332,159712],{"class":214},[99,167334,12422],{"class":109},[99,167336,151453],{"class":214},[99,167338,51418],{"class":109},[99,167340,516],{"class":158},[99,167342,4916],{"class":109},[99,167344,167345],{"class":101,"line":1186},[99,167346,33227],{"class":109},[99,167348,167349],{"class":101,"line":1200},[99,167350,2386],{"emptyLinePlaceholder":26},[99,167352,167353,167355,167357,167359,167362,167364,167366,167368,167370,167372,167374,167376,167378],{"class":101,"line":1206},[99,167354,161287],{"class":109},[99,167356,155],{"class":105},[99,167358,163585],{"class":158},[99,167360,167361],{"class":109},"(students, ",[99,167363,153927],{"class":5203},[99,167365,153930],{"class":105},[99,167367,153933],{"class":109},[99,167369,151453],{"class":214},[99,167371,112183],{"class":109},[99,167373,163509],{"class":5203},[99,167375,155],{"class":105},[99,167377,31457],{"class":158},[99,167379,116],{"class":109},[99,167381,167382,167384],{"class":101,"line":1297},[99,167383,30396],{"class":158},[99,167385,76566],{"class":109},[41,167387,167389],{"id":167388},"_711-闭包入门","7.11 闭包入门",[14,167391,167392],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[90,167394,167396],{"className":30359,"code":167395,"language":30361,"meta":21,"style":21},"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",[96,167397,167398,167408,167418,167429,167433,167440,167444,167448,167462],{"__ignoreMap":21},[99,167399,167400,167402,167405],{"class":101,"line":102},[99,167401,31928],{"class":105},[99,167403,167404],{"class":1949}," outer",[99,167406,167407],{"class":109},"(base):\n",[99,167409,167410,167412,167415],{"class":101,"line":22},[99,167411,30782],{"class":105},[99,167413,167414],{"class":1949}," inner",[99,167416,167417],{"class":109},"(num):\n",[99,167419,167420,167422,167425,167427],{"class":101,"line":1165},[99,167421,14739],{"class":105},[99,167423,167424],{"class":109}," base ",[99,167426,591],{"class":105},[99,167428,166560],{"class":109},[99,167430,167431],{"class":101,"line":1180},[99,167432,2386],{"emptyLinePlaceholder":26},[99,167434,167435,167437],{"class":101,"line":1186},[99,167436,4076],{"class":105},[99,167438,167439],{"class":109}," inner\n",[99,167441,167442],{"class":101,"line":1200},[99,167443,2386],{"emptyLinePlaceholder":26},[99,167445,167446],{"class":101,"line":1206},[99,167447,2386],{"emptyLinePlaceholder":26},[99,167449,167450,167453,167455,167458,167460],{"class":101,"line":1297},[99,167451,167452],{"class":109},"add_10 ",[99,167454,155],{"class":105},[99,167456,167457],{"class":109}," outer(",[99,167459,556],{"class":158},[99,167461,116],{"class":109},[99,167463,167464,167466,167469,167471],{"class":101,"line":1303},[99,167465,30396],{"class":158},[99,167467,167468],{"class":109},"(add_10(",[99,167470,429],{"class":158},[99,167472,30478],{"class":109},[14,167474,167475],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[41,167477,167479],{"id":167478},"_712-装饰器入门","7.12 装饰器入门",[14,167481,167482],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[90,167484,167486],{"className":30359,"code":167485,"language":30361,"meta":21,"style":21},"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",[96,167487,167488,167497,167506,167517,167522,167533,167537,167544,167548,167552,167557,167565,167575,167579,167583],{"__ignoreMap":21},[99,167489,167490,167492,167494],{"class":101,"line":102},[99,167491,31928],{"class":105},[99,167493,87172],{"class":1949},[99,167495,167496],{"class":109},"(func):\n",[99,167498,167499,167501,167504],{"class":101,"line":22},[99,167500,30782],{"class":105},[99,167502,167503],{"class":1949}," wrapper",[99,167505,31934],{"class":109},[99,167507,167508,167510,167512,167515],{"class":101,"line":1165},[99,167509,32432],{"class":158},[99,167511,110],{"class":109},[99,167513,167514],{"class":214},"\"函数开始执行\"",[99,167516,116],{"class":109},[99,167518,167519],{"class":101,"line":1180},[99,167520,167521],{"class":109},"        func()\n",[99,167523,167524,167526,167528,167531],{"class":101,"line":1186},[99,167525,32432],{"class":158},[99,167527,110],{"class":109},[99,167529,167530],{"class":214},"\"函数执行结束\"",[99,167532,116],{"class":109},[99,167534,167535],{"class":101,"line":1200},[99,167536,2386],{"emptyLinePlaceholder":26},[99,167538,167539,167541],{"class":101,"line":1206},[99,167540,4076],{"class":105},[99,167542,167543],{"class":109}," wrapper\n",[99,167545,167546],{"class":101,"line":1297},[99,167547,2386],{"emptyLinePlaceholder":26},[99,167549,167550],{"class":101,"line":1303},[99,167551,2386],{"emptyLinePlaceholder":26},[99,167553,167554],{"class":101,"line":1315},[99,167555,167556],{"class":1949},"@log\n",[99,167558,167559,167561,167563],{"class":101,"line":1598},[99,167560,31928],{"class":105},[99,167562,160977],{"class":1949},[99,167564,31934],{"class":109},[99,167566,167567,167569,167571,167573],{"class":101,"line":1603},[99,167568,31280],{"class":158},[99,167570,110],{"class":109},[99,167572,5831],{"class":214},[99,167574,116],{"class":109},[99,167576,167577],{"class":101,"line":1609},[99,167578,2386],{"emptyLinePlaceholder":26},[99,167580,167581],{"class":101,"line":1614},[99,167582,2386],{"emptyLinePlaceholder":26},[99,167584,167585],{"class":101,"line":1628},[99,167586,161012],{"class":109},[14,167588,158255],{},[90,167590,167592],{"className":30359,"code":167591,"language":30361,"meta":21,"style":21},"say_hello = log(say_hello)\n",[96,167593,167594],{"__ignoreMap":21},[99,167595,167596,167599,167601],{"class":101,"line":102},[99,167597,167598],{"class":109},"say_hello ",[99,167600,155],{"class":105},[99,167602,167603],{"class":109}," log(say_hello)\n",[14,167605,167606],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[41,167608,167610],{"id":167609},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[90,167612,167614],{"className":30359,"code":167613,"language":30361,"meta":21,"style":21},"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",[96,167615,167616,167624,167641,167651,167670,167680,167687,167691,167697,167701,167705,167709,167717,167727,167731,167735],{"__ignoreMap":21},[99,167617,167618,167620,167622],{"class":101,"line":102},[99,167619,31928],{"class":105},[99,167621,87172],{"class":1949},[99,167623,167496],{"class":109},[99,167625,167626,167628,167630,167632,167634,167637,167639],{"class":101,"line":22},[99,167627,30782],{"class":105},[99,167629,167503],{"class":1949},[99,167631,110],{"class":109},[99,167633,565],{"class":105},[99,167635,167636],{"class":109},"args, ",[99,167638,10648],{"class":105},[99,167640,166647],{"class":109},[99,167642,167643,167645,167647,167649],{"class":101,"line":1165},[99,167644,32432],{"class":158},[99,167646,110],{"class":109},[99,167648,167514],{"class":214},[99,167650,116],{"class":109},[99,167652,167653,167656,167658,167661,167663,167665,167667],{"class":101,"line":1180},[99,167654,167655],{"class":109},"        result ",[99,167657,155],{"class":105},[99,167659,167660],{"class":109}," func(",[99,167662,565],{"class":105},[99,167664,167636],{"class":109},[99,167666,10648],{"class":105},[99,167668,167669],{"class":109},"kwargs)\n",[99,167671,167672,167674,167676,167678],{"class":101,"line":1186},[99,167673,32432],{"class":158},[99,167675,110],{"class":109},[99,167677,167530],{"class":214},[99,167679,116],{"class":109},[99,167681,167682,167684],{"class":101,"line":1200},[99,167683,14739],{"class":105},[99,167685,167686],{"class":109}," result\n",[99,167688,167689],{"class":101,"line":1206},[99,167690,2386],{"emptyLinePlaceholder":26},[99,167692,167693,167695],{"class":101,"line":1297},[99,167694,4076],{"class":105},[99,167696,167543],{"class":109},[99,167698,167699],{"class":101,"line":1303},[99,167700,2386],{"emptyLinePlaceholder":26},[99,167702,167703],{"class":101,"line":1315},[99,167704,2386],{"emptyLinePlaceholder":26},[99,167706,167707],{"class":101,"line":1598},[99,167708,167556],{"class":1949},[99,167710,167711,167713,167715],{"class":101,"line":1603},[99,167712,31928],{"class":105},[99,167714,5196],{"class":1949},[99,167716,151074],{"class":109},[99,167718,167719,167721,167723,167725],{"class":101,"line":1609},[99,167720,4076],{"class":105},[99,167722,10856],{"class":109},[99,167724,591],{"class":105},[99,167726,151085],{"class":109},[99,167728,167729],{"class":101,"line":1614},[99,167730,2386],{"emptyLinePlaceholder":26},[99,167732,167733],{"class":101,"line":1628},[99,167734,2386],{"emptyLinePlaceholder":26},[99,167736,167737,167739,167741,167743,167745,167747],{"class":101,"line":1633},[99,167738,30396],{"class":158},[99,167740,166581],{"class":109},[99,167742,556],{"class":158},[99,167744,12422],{"class":109},[99,167746,810],{"class":158},[99,167748,30478],{"class":109},[14,167750,167751,167752,100999,167754,167756],{},"这个写法使用 ",[96,167753,166513],{},[96,167755,166628],{}," 接收原函数的所有参数。",[41,167758,167760],{"id":167759},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167762,123273],{},[53,167764,167765,167768,167771],{},[56,167766,167767],{},"给定一组学生数据。",[56,167769,167770],{},"封装函数，根据传入规则筛选学生。",[56,167772,167773],{},"筛选及格、优秀、未成年学生。",[14,167775,10022],{},[90,167777,167779],{"className":30359,"code":167778,"language":30361,"meta":21,"style":21},"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",[96,167780,167781,167789,167817,167845,167873,167877,167881,167885,167895,167903,167913,167920,167925,167931,167935,167939,167963,167986,168009,168013,168020,168027],{"__ignoreMap":21},[99,167782,167783,167785,167787],{"class":101,"line":102},[99,167784,159697],{"class":109},[99,167786,155],{"class":105},[99,167788,55428],{"class":109},[99,167790,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809,167811,167813,167815],{"class":101,"line":22},[99,167792,148366],{"class":109},[99,167794,62660],{"class":214},[99,167796,51418],{"class":109},[99,167798,149869],{"class":214},[99,167800,12422],{"class":109},[99,167802,69105],{"class":214},[99,167804,51418],{"class":109},[99,167806,760],{"class":158},[99,167808,12422],{"class":109},[99,167810,151453],{"class":214},[99,167812,51418],{"class":109},[99,167814,1099],{"class":158},[99,167816,4916],{"class":109},[99,167818,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841,167843],{"class":101,"line":1165},[99,167820,148366],{"class":109},[99,167822,62660],{"class":214},[99,167824,51418],{"class":109},[99,167826,150917],{"class":214},[99,167828,12422],{"class":109},[99,167830,69105],{"class":214},[99,167832,51418],{"class":109},[99,167834,735],{"class":158},[99,167836,12422],{"class":109},[99,167838,151453],{"class":214},[99,167840,51418],{"class":109},[99,167842,921],{"class":158},[99,167844,4916],{"class":109},[99,167846,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869,167871],{"class":101,"line":1180},[99,167848,148366],{"class":109},[99,167850,62660],{"class":214},[99,167852,51418],{"class":109},[99,167854,159712],{"class":214},[99,167856,12422],{"class":109},[99,167858,69105],{"class":214},[99,167860,51418],{"class":109},[99,167862,785],{"class":158},[99,167864,12422],{"class":109},[99,167866,151453],{"class":214},[99,167868,51418],{"class":109},[99,167870,992],{"class":158},[99,167872,4916],{"class":109},[99,167874,167875],{"class":101,"line":1186},[99,167876,33227],{"class":109},[99,167878,167879],{"class":101,"line":1200},[99,167880,2386],{"emptyLinePlaceholder":26},[99,167882,167883],{"class":101,"line":1206},[99,167884,2386],{"emptyLinePlaceholder":26},[99,167886,167887,167889,167892],{"class":101,"line":1297},[99,167888,31928],{"class":105},[99,167890,167891],{"class":1949}," filter_students",[99,167893,167894],{"class":109},"(students, condition):\n",[99,167896,167897,167899,167901],{"class":101,"line":1303},[99,167898,161204],{"class":109},[99,167900,155],{"class":105},[99,167902,51819],{"class":109},[99,167904,167905,167907,167909,167911],{"class":101,"line":1315},[99,167906,3187],{"class":105},[99,167908,152118],{"class":109},[99,167910,26032],{"class":105},[99,167912,152123],{"class":109},[99,167914,167915,167917],{"class":101,"line":1598},[99,167916,2483],{"class":105},[99,167918,167919],{"class":109}," condition(student):\n",[99,167921,167922],{"class":101,"line":1603},[99,167923,167924],{"class":109},"            result.append(student)\n",[99,167926,167927,167929],{"class":101,"line":1609},[99,167928,4076],{"class":105},[99,167930,167686],{"class":109},[99,167932,167933],{"class":101,"line":1614},[99,167934,2386],{"emptyLinePlaceholder":26},[99,167936,167937],{"class":101,"line":1628},[99,167938,2386],{"emptyLinePlaceholder":26},[99,167940,167941,167943,167945,167948,167950,167953,167955,167957,167959,167961],{"class":101,"line":1633},[99,167942,165682],{"class":109},[99,167944,155],{"class":105},[99,167946,167947],{"class":109}," filter_students(students, ",[99,167949,166867],{"class":105},[99,167951,167952],{"class":109}," s: s[",[99,167954,151453],{"class":214},[99,167956,4429],{"class":109},[99,167958,1696],{"class":105},[99,167960,157818],{"class":158},[99,167962,116],{"class":109},[99,167964,167965,167968,167970,167972,167974,167976,167978,167980,167982,167984],{"class":101,"line":1639},[99,167966,167967],{"class":109},"excellent ",[99,167969,155],{"class":105},[99,167971,167947],{"class":109},[99,167973,166867],{"class":105},[99,167975,167952],{"class":109},[99,167977,151453],{"class":214},[99,167979,4429],{"class":109},[99,167981,1696],{"class":105},[99,167983,157769],{"class":158},[99,167985,116],{"class":109},[99,167987,167988,167991,167993,167995,167997,167999,168001,168003,168005,168007],{"class":101,"line":1660},[99,167989,167990],{"class":109},"under_age ",[99,167992,155],{"class":105},[99,167994,167947],{"class":109},[99,167996,166867],{"class":105},[99,167998,167952],{"class":109},[99,168000,69105],{"class":214},[99,168002,4429],{"class":109},[99,168004,1020],{"class":105},[99,168006,156266],{"class":158},[99,168008,116],{"class":109},[99,168010,168011],{"class":101,"line":1665},[99,168012,2386],{"emptyLinePlaceholder":26},[99,168014,168015,168017],{"class":101,"line":1679},[99,168016,30396],{"class":158},[99,168018,168019],{"class":109},"(passed)\n",[99,168021,168022,168024],{"class":101,"line":1684},[99,168023,30396],{"class":158},[99,168025,168026],{"class":109},"(excellent)\n",[99,168028,168029,168031],{"class":101,"line":1713},[99,168030,30396],{"class":158},[99,168032,168033],{"class":109},"(under_age)\n",[41,168035,168037],{"id":168036},"_715-易错点","7.15 易错点",[53,168039,168040,168043,168051,168056,168067],{},[56,168041,168042],{},"默认参数不要写可变对象。",[56,168044,168045,168047,168048,168050],{},[96,168046,166513],{}," 是元组，",[96,168049,166628],{}," 是字典。",[56,168052,168053,168055],{},[96,168054,166867],{}," 只适合简单表达式。",[56,168057,168058,100999,168060,168062,168063,168066],{},[96,168059,74025],{},[96,168061,80032],{}," 的结果是迭代器，常用 ",[96,168064,168065],{},"list()"," 转换查看。",[56,168068,168069],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[41,168071,168073],{"id":168072},"_716-本章练习","7.16 本章练习",[53,168075,168076,168083,168089,168094,168099],{},[56,168077,168078,168079,168082],{},"写函数 ",[96,168080,168081],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[56,168084,168078,168085,168088],{},[96,168086,168087],{},"print_user(**kwargs)","，输出用户所有字段。",[56,168090,104347,168091,168093],{},[96,168092,166867],{}," 对学生列表按年龄排序。",[56,168095,104347,168096,168098],{},[96,168097,80032],{}," 找出成绩不及格的学生。",[56,168100,168101],{},"写一个装饰器，统计函数执行前后的提示信息。",[5113,168103,168104],{},"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":21,"searchDepth":22,"depth":22,"links":168106},[168107,168108,168109,168110,168111,168112,168116,168117,168118,168119,168124,168125,168126,168127,168128,168129],{"id":165965,"depth":22,"text":165966},{"id":166079,"depth":22,"text":166080},{"id":166168,"depth":22,"text":166169},{"id":166230,"depth":22,"text":166231},{"id":166376,"depth":22,"text":166377},{"id":166503,"depth":22,"text":166504,"children":168113},[168114,168115],{"id":166507,"depth":1165,"text":166508},{"id":166622,"depth":1165,"text":166623},{"id":166703,"depth":22,"text":166704},{"id":166861,"depth":22,"text":166862},{"id":167029,"depth":22,"text":167030},{"id":167111,"depth":22,"text":167112,"children":168120},[168121,168122,168123],{"id":167115,"depth":1165,"text":167116},{"id":167186,"depth":1165,"text":167187},{"id":167263,"depth":1165,"text":167264},{"id":167388,"depth":22,"text":167389},{"id":167478,"depth":22,"text":167479},{"id":167609,"depth":22,"text":167610},{"id":167759,"depth":22,"text":167760},{"id":168036,"depth":22,"text":168037},{"id":168072,"depth":22,"text":168073},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165957,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168136,"title":168137,"body":168138,"description":23364,"extension":24,"meta":170657,"navigation":26,"path":170658,"seo":170659,"stem":170660,"__hash__":170661},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168139,"toc":170632},[168140,168143,168147,168150,168153,168184,168188,168192,168195,168222,168226,168229,168280,168283,168298,168301,168336,168340,168342,168366,168369,168429,168433,168437,168440,168497,168500,168520,168524,168527,168590,168594,168597,168653,168660,168684,168688,168691,168754,168758,168763,168814,168817,168821,168826,168893,168896,168978,168982,168987,169038,169041,169045,169048,169051,169059,169062,169108,169111,169157,169161,169167,169211,169214,169260,169263,169303,169306,169367,169371,169374,169464,169467,169609,169612,169679,169683,169686,169689,169830,169833,169911,169914,170090,170094,170096,170107,170109,170308,170312,170556,170560,170594,170598,170629],[10,168141,168137],{"id":168142},"_8-文件操作",[41,168144,168146],{"id":168145},"_81-文件操作的意义","8.1 文件操作的意义",[14,168148,168149],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168151,168152],{},"常见文件类型：",[53,168154,168155,168161,168167,168173,168179],{},[56,168156,168157,168160],{},[96,168158,168159],{},".txt","：普通文本。",[56,168162,168163,168166],{},[96,168164,168165],{},".csv","：表格文本。",[56,168168,168169,168172],{},[96,168170,168171],{},".json","：结构化数据。",[56,168174,168175,168178],{},[96,168176,168177],{},".log","：日志文件。",[56,168180,168181,168183],{},[96,168182,146333],{},"：Python 源代码。",[41,168185,168187],{"id":168186},"_82-路径","8.2 路径",[70,168189,168191],{"id":168190},"_821-相对路径","8.2.1 相对路径",[14,168193,168194],{},"相对当前运行目录：",[90,168196,168198],{"className":30359,"code":168197,"language":30361,"meta":21,"style":21},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[96,168199,168200],{"__ignoreMap":21},[99,168201,168202,168204,168206,168208,168210,168212,168214,168216,168218,168220],{"class":101,"line":102},[99,168203,86896],{"class":158},[99,168205,110],{"class":109},[99,168207,146777],{"class":214},[99,168209,12422],{"class":109},[99,168211,146782],{"class":214},[99,168213,12422],{"class":109},[99,168215,146787],{"class":5203},[99,168217,155],{"class":105},[99,168219,146792],{"class":214},[99,168221,116],{"class":109},[70,168223,168225],{"id":168224},"_822-绝对路径","8.2.2 绝对路径",[14,168227,168228],{},"从根目录或盘符开始：",[90,168230,168232],{"className":30359,"code":168231,"language":30361,"meta":21,"style":21},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[96,168233,168234,168257],{"__ignoreMap":21},[99,168235,168236,168238,168240,168243,168245,168247,168249,168251,168253,168255],{"class":101,"line":102},[99,168237,86896],{"class":158},[99,168239,110],{"class":109},[99,168241,168242],{"class":214},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[99,168244,12422],{"class":109},[99,168246,146782],{"class":214},[99,168248,12422],{"class":109},[99,168250,146787],{"class":5203},[99,168252,155],{"class":105},[99,168254,146792],{"class":214},[99,168256,116],{"class":109},[99,168258,168259,168261,168263,168266,168268,168270,168272,168274,168276,168278],{"class":101,"line":22},[99,168260,86896],{"class":158},[99,168262,110],{"class":109},[99,168264,168265],{"class":214},"\"D:\u002Fdata\u002Fdata.txt\"",[99,168267,12422],{"class":109},[99,168269,146782],{"class":214},[99,168271,12422],{"class":109},[99,168273,146787],{"class":5203},[99,168275,155],{"class":105},[99,168277,146792],{"class":214},[99,168279,116],{"class":109},[14,168281,168282],{},"Windows 路径建议写成：",[90,168284,168286],{"className":30359,"code":168285,"language":30361,"meta":21,"style":21},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[96,168287,168288],{"__ignoreMap":21},[99,168289,168290,168293,168295],{"class":101,"line":102},[99,168291,168292],{"class":109},"path ",[99,168294,155],{"class":105},[99,168296,168297],{"class":214}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168299,168300],{},"或原始字符串：",[90,168302,168304],{"className":30359,"code":168303,"language":30361,"meta":21,"style":21},"path = r\"D:\\data\\data.txt\"\n",[96,168305,168306],{"__ignoreMap":21},[99,168307,168308,168310,168312,168314,168316,168319,168322,168325,168327,168329,168331,168334],{"class":101,"line":102},[99,168309,168292],{"class":109},[99,168311,155],{"class":105},[99,168313,17108],{"class":105},[99,168315,361],{"class":214},[99,168317,168318],{"class":47958},"D:",[99,168320,168321],{"class":158},"\\d",[99,168323,168324],{"class":47958},"ata",[99,168326,168321],{"class":158},[99,168328,168324],{"class":47958},[99,168330,668],{"class":158},[99,168332,168333],{"class":47958},"txt",[99,168335,25122],{"class":214},[41,168337,168339],{"id":168338},"_83-open函数","8.3 open函数",[14,168341,5168],{},[90,168343,168345],{"className":30359,"code":168344,"language":30361,"meta":21,"style":21},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[96,168346,168347],{"__ignoreMap":21},[99,168348,168349,168351,168353,168355,168358,168360,168362,168364],{"class":101,"line":102},[99,168350,45335],{"class":5203},[99,168352,13551],{"class":105},[99,168354,146772],{"class":158},[99,168356,168357],{"class":109},"(文件路径, 打开模式, ",[99,168359,146787],{"class":5203},[99,168361,155],{"class":105},[99,168363,146792],{"class":214},[99,168365,116],{"class":109},[14,168367,168368],{},"常见模式：",[247,168370,168371,168380],{},[250,168372,168373],{},[253,168374,168375,168378],{},[256,168376,168377],{},"模式",[256,168379,25858],{},[294,168381,168382,168391,168400,168409,168419],{},[253,168383,168384,168388],{},[299,168385,168386],{},[96,168387,780],{},[299,168389,168390],{},"只读，文件不存在会报错",[253,168392,168393,168397],{},[299,168394,168395],{},[96,168396,905],{},[299,168398,168399],{},"只写，文件不存在会创建，存在会清空",[253,168401,168402,168406],{},[299,168403,168404],{},[96,168405,348],{},[299,168407,168408],{},"追加，文件不存在会创建",[253,168410,168411,168416],{},[299,168412,168413],{},[96,168414,168415],{},"rb",[299,168417,168418],{},"二进制只读",[253,168420,168421,168426],{},[299,168422,168423],{},[96,168424,168425],{},"wb",[299,168427,168428],{},"二进制只写",[41,168430,168432],{"id":168431},"_84-读取文件","8.4 读取文件",[70,168434,168436],{"id":168435},"_841-read","8.4.1 read",[14,168438,168439],{},"一次读取全部内容：",[90,168441,168443],{"className":30359,"code":168442,"language":30361,"meta":21,"style":21},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[96,168444,168445,168471,168483,168490],{"__ignoreMap":21},[99,168446,168447,168449,168451,168453,168455,168457,168459,168461,168463,168465,168467,168469],{"class":101,"line":102},[99,168448,45335],{"class":5203},[99,168450,13551],{"class":105},[99,168452,146772],{"class":158},[99,168454,110],{"class":109},[99,168456,146777],{"class":214},[99,168458,12422],{"class":109},[99,168460,146782],{"class":214},[99,168462,12422],{"class":109},[99,168464,146787],{"class":5203},[99,168466,155],{"class":105},[99,168468,146792],{"class":214},[99,168470,116],{"class":109},[99,168472,168473,168476,168478,168480],{"class":101,"line":22},[99,168474,168475],{"class":109},"content ",[99,168477,155],{"class":105},[99,168479,148134],{"class":5203},[99,168481,168482],{"class":109},".read()\n",[99,168484,168485,168487],{"class":101,"line":1165},[99,168486,30396],{"class":158},[99,168488,168489],{"class":109},"(content)\n",[99,168491,168492,168494],{"class":101,"line":1180},[99,168493,45335],{"class":5203},[99,168495,168496],{"class":109},".close()\n",[14,168498,168499],{},"可以指定读取字符数：",[90,168501,168503],{"className":30359,"code":168502,"language":30361,"meta":21,"style":21},"content = file.read(10)\n",[96,168504,168505],{"__ignoreMap":21},[99,168506,168507,168509,168511,168513,168516,168518],{"class":101,"line":102},[99,168508,168475],{"class":109},[99,168510,155],{"class":105},[99,168512,148134],{"class":5203},[99,168514,168515],{"class":109},".read(",[99,168517,556],{"class":158},[99,168519,116],{"class":109},[70,168521,168523],{"id":168522},"_842-readline","8.4.2 readline",[14,168525,168526],{},"一次读取一行：",[90,168528,168530],{"className":30359,"code":168529,"language":30361,"meta":21,"style":21},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[96,168531,168532,168558,168562,168573,168580,168584],{"__ignoreMap":21},[99,168533,168534,168536,168538,168540,168542,168544,168546,168548,168550,168552,168554,168556],{"class":101,"line":102},[99,168535,45335],{"class":5203},[99,168537,13551],{"class":105},[99,168539,146772],{"class":158},[99,168541,110],{"class":109},[99,168543,146777],{"class":214},[99,168545,12422],{"class":109},[99,168547,146782],{"class":214},[99,168549,12422],{"class":109},[99,168551,146787],{"class":5203},[99,168553,155],{"class":105},[99,168555,146792],{"class":214},[99,168557,116],{"class":109},[99,168559,168560],{"class":101,"line":22},[99,168561,2386],{"emptyLinePlaceholder":26},[99,168563,168564,168566,168568,168570],{"class":101,"line":1165},[99,168565,147233],{"class":109},[99,168567,155],{"class":105},[99,168569,148134],{"class":5203},[99,168571,168572],{"class":109},".readline()\n",[99,168574,168575,168577],{"class":101,"line":1180},[99,168576,30396],{"class":158},[99,168578,168579],{"class":109},"(line)\n",[99,168581,168582],{"class":101,"line":1186},[99,168583,2386],{"emptyLinePlaceholder":26},[99,168585,168586,168588],{"class":101,"line":1200},[99,168587,45335],{"class":5203},[99,168589,168496],{"class":109},[70,168591,168593],{"id":168592},"_843-readlines","8.4.3 readlines",[14,168595,168596],{},"读取所有行，返回列表：",[90,168598,168600],{"className":30359,"code":168599,"language":30361,"meta":21,"style":21},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[96,168601,168602,168628,168640,168647],{"__ignoreMap":21},[99,168603,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626],{"class":101,"line":102},[99,168605,45335],{"class":5203},[99,168607,13551],{"class":105},[99,168609,146772],{"class":158},[99,168611,110],{"class":109},[99,168613,146777],{"class":214},[99,168615,12422],{"class":109},[99,168617,146782],{"class":214},[99,168619,12422],{"class":109},[99,168621,146787],{"class":5203},[99,168623,155],{"class":105},[99,168625,146792],{"class":214},[99,168627,116],{"class":109},[99,168629,168630,168633,168635,168637],{"class":101,"line":22},[99,168631,168632],{"class":109},"lines ",[99,168634,155],{"class":105},[99,168636,148134],{"class":5203},[99,168638,168639],{"class":109},".readlines()\n",[99,168641,168642,168644],{"class":101,"line":1165},[99,168643,30396],{"class":158},[99,168645,168646],{"class":109},"(lines)\n",[99,168648,168649,168651],{"class":101,"line":1180},[99,168650,45335],{"class":5203},[99,168652,168496],{"class":109},[14,168654,168655,168656,168659],{},"每一行通常带有换行符，可以用 ",[96,168657,168658],{},"strip()"," 去掉：",[90,168661,168663],{"className":30359,"code":168662,"language":30361,"meta":21,"style":21},"for line in lines:\n    print(line.strip())\n",[96,168664,168665,168677],{"__ignoreMap":21},[99,168666,168667,168669,168672,168674],{"class":101,"line":102},[99,168668,3011],{"class":105},[99,168670,168671],{"class":109}," line ",[99,168673,26032],{"class":105},[99,168675,168676],{"class":109}," lines:\n",[99,168678,168679,168681],{"class":101,"line":22},[99,168680,31280],{"class":158},[99,168682,168683],{"class":109},"(line.strip())\n",[70,168685,168687],{"id":168686},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168689,168690],{},"推荐读取大文件时使用：",[90,168692,168694],{"className":30359,"code":168693,"language":30361,"meta":21,"style":21},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[96,168695,168696,168722,168726,168738,168744,168748],{"__ignoreMap":21},[99,168697,168698,168700,168702,168704,168706,168708,168710,168712,168714,168716,168718,168720],{"class":101,"line":102},[99,168699,45335],{"class":5203},[99,168701,13551],{"class":105},[99,168703,146772],{"class":158},[99,168705,110],{"class":109},[99,168707,146777],{"class":214},[99,168709,12422],{"class":109},[99,168711,146782],{"class":214},[99,168713,12422],{"class":109},[99,168715,146787],{"class":5203},[99,168717,155],{"class":105},[99,168719,146792],{"class":214},[99,168721,116],{"class":109},[99,168723,168724],{"class":101,"line":22},[99,168725,2386],{"emptyLinePlaceholder":26},[99,168727,168728,168730,168732,168734,168736],{"class":101,"line":1165},[99,168729,3011],{"class":105},[99,168731,168671],{"class":109},[99,168733,26032],{"class":105},[99,168735,148134],{"class":5203},[99,168737,3725],{"class":109},[99,168739,168740,168742],{"class":101,"line":1180},[99,168741,31280],{"class":158},[99,168743,168683],{"class":109},[99,168745,168746],{"class":101,"line":1186},[99,168747,2386],{"emptyLinePlaceholder":26},[99,168749,168750,168752],{"class":101,"line":1200},[99,168751,45335],{"class":5203},[99,168753,168496],{"class":109},[41,168755,168757],{"id":168756},"_85-with语句","8.5 with语句",[14,168759,168760,168762],{},[96,168761,107814],{}," 会自动关闭文件，推荐使用。",[90,168764,168766],{"className":30359,"code":168765,"language":30361,"meta":21,"style":21},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[96,168767,168768,168798,168808],{"__ignoreMap":21},[99,168769,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796],{"class":101,"line":102},[99,168771,107814],{"class":105},[99,168773,146772],{"class":158},[99,168775,110],{"class":109},[99,168777,146777],{"class":214},[99,168779,12422],{"class":109},[99,168781,146782],{"class":214},[99,168783,12422],{"class":109},[99,168785,146787],{"class":5203},[99,168787,155],{"class":105},[99,168789,146792],{"class":214},[99,168791,13701],{"class":109},[99,168793,31364],{"class":105},[99,168795,148134],{"class":5203},[99,168797,3725],{"class":109},[99,168799,168800,168802,168804,168806],{"class":101,"line":22},[99,168801,146804],{"class":109},[99,168803,155],{"class":105},[99,168805,148134],{"class":5203},[99,168807,168482],{"class":109},[99,168809,168810,168812],{"class":101,"line":1165},[99,168811,31280],{"class":158},[99,168813,168489],{"class":109},[14,168815,168816],{},"等价于打开文件、读取、最后关闭，但更安全。",[41,168818,168820],{"id":168819},"_86-写入文件","8.6 写入文件",[14,168822,168823,168825],{},[96,168824,905],{}," 模式会清空原文件。",[90,168827,168829],{"className":30359,"code":168828,"language":30361,"meta":21,"style":21},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[96,168830,168831,168861,168878],{"__ignoreMap":21},[99,168832,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855,168857,168859],{"class":101,"line":102},[99,168834,107814],{"class":105},[99,168836,146772],{"class":158},[99,168838,110],{"class":109},[99,168840,146777],{"class":214},[99,168842,12422],{"class":109},[99,168844,151957],{"class":214},[99,168846,12422],{"class":109},[99,168848,146787],{"class":5203},[99,168850,155],{"class":105},[99,168852,146792],{"class":214},[99,168854,13701],{"class":109},[99,168856,31364],{"class":105},[99,168858,148134],{"class":5203},[99,168860,3725],{"class":109},[99,168862,168863,168866,168869,168872,168874,168876],{"class":101,"line":22},[99,168864,168865],{"class":5203},"    file",[99,168867,168868],{"class":109},".write(",[99,168870,168871],{"class":214},"\"hello",[99,168873,156506],{"class":158},[99,168875,361],{"class":214},[99,168877,116],{"class":109},[99,168879,168880,168882,168884,168887,168889,168891],{"class":101,"line":1165},[99,168881,168865],{"class":5203},[99,168883,168868],{"class":109},[99,168885,168886],{"class":214},"\"python",[99,168888,156506],{"class":158},[99,168890,361],{"class":214},[99,168892,116],{"class":109},[14,168894,168895],{},"写入多行：",[90,168897,168899],{"className":30359,"code":168898,"language":30361,"meta":21,"style":21},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[96,168900,168901,168936,168940,168971],{"__ignoreMap":21},[99,168902,168903,168905,168907,168909,168912,168914,168916,168918,168921,168923,168925,168927,168930,168932,168934],{"class":101,"line":102},[99,168904,168632],{"class":109},[99,168906,155],{"class":105},[99,168908,52207],{"class":109},[99,168910,168911],{"class":214},"\"小明,18",[99,168913,156506],{"class":158},[99,168915,361],{"class":214},[99,168917,12422],{"class":109},[99,168919,168920],{"class":214},"\"小红,17",[99,168922,156506],{"class":158},[99,168924,361],{"class":214},[99,168926,12422],{"class":109},[99,168928,168929],{"class":214},"\"小刚,19",[99,168931,156506],{"class":158},[99,168933,361],{"class":214},[99,168935,33227],{"class":109},[99,168937,168938],{"class":101,"line":22},[99,168939,2386],{"emptyLinePlaceholder":26},[99,168941,168942,168944,168946,168948,168951,168953,168955,168957,168959,168961,168963,168965,168967,168969],{"class":101,"line":1165},[99,168943,107814],{"class":105},[99,168945,146772],{"class":158},[99,168947,110],{"class":109},[99,168949,168950],{"class":214},"\"students.txt\"",[99,168952,12422],{"class":109},[99,168954,151957],{"class":214},[99,168956,12422],{"class":109},[99,168958,146787],{"class":5203},[99,168960,155],{"class":105},[99,168962,146792],{"class":214},[99,168964,13701],{"class":109},[99,168966,31364],{"class":105},[99,168968,148134],{"class":5203},[99,168970,3725],{"class":109},[99,168972,168973,168975],{"class":101,"line":1180},[99,168974,168865],{"class":5203},[99,168976,168977],{"class":109},".writelines(lines)\n",[41,168979,168981],{"id":168980},"_87-追加文件","8.7 追加文件",[14,168983,168984,168986],{},[96,168985,348],{}," 模式不会清空原内容，而是在末尾追加。",[90,168988,168990],{"className":30359,"code":168989,"language":30361,"meta":21,"style":21},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[96,168991,168992,169023],{"__ignoreMap":21},[99,168993,168994,168996,168998,169000,169003,169005,169007,169009,169011,169013,169015,169017,169019,169021],{"class":101,"line":102},[99,168995,107814],{"class":105},[99,168997,146772],{"class":158},[99,168999,110],{"class":109},[99,169001,169002],{"class":214},"\"log.txt\"",[99,169004,12422],{"class":109},[99,169006,165306],{"class":214},[99,169008,12422],{"class":109},[99,169010,146787],{"class":5203},[99,169012,155],{"class":105},[99,169014,146792],{"class":214},[99,169016,13701],{"class":109},[99,169018,31364],{"class":105},[99,169020,148134],{"class":5203},[99,169022,3725],{"class":109},[99,169024,169025,169027,169029,169032,169034,169036],{"class":101,"line":22},[99,169026,168865],{"class":5203},[99,169028,168868],{"class":109},[99,169030,169031],{"class":214},"\"程序启动",[99,169033,156506],{"class":158},[99,169035,361],{"class":214},[99,169037,116],{"class":109},[14,169039,169040],{},"日志类文件常用追加模式。",[41,169042,169044],{"id":169043},"_88-文件编码","8.8 文件编码",[14,169046,169047],{},"编码决定文字如何保存为字节。",[14,169049,169050],{},"常见编码：",[53,169052,169053,169056],{},[56,169054,169055],{},"UTF-8：推荐。",[56,169057,169058],{},"GBK：部分 Windows 中文文件常见。",[14,169060,169061],{},"读取文件乱码时，可以尝试：",[90,169063,169065],{"className":30359,"code":169064,"language":30361,"meta":21,"style":21},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[96,169066,169067,169098],{"__ignoreMap":21},[99,169068,169069,169071,169073,169075,169077,169079,169081,169083,169085,169087,169090,169092,169094,169096],{"class":101,"line":102},[99,169070,107814],{"class":105},[99,169072,146772],{"class":158},[99,169074,110],{"class":109},[99,169076,146777],{"class":214},[99,169078,12422],{"class":109},[99,169080,146782],{"class":214},[99,169082,12422],{"class":109},[99,169084,146787],{"class":5203},[99,169086,155],{"class":105},[99,169088,169089],{"class":214},"\"gbk\"",[99,169091,13701],{"class":109},[99,169093,31364],{"class":105},[99,169095,148134],{"class":5203},[99,169097,3725],{"class":109},[99,169099,169100,169102,169104,169106],{"class":101,"line":22},[99,169101,146804],{"class":109},[99,169103,155],{"class":105},[99,169105,148134],{"class":5203},[99,169107,168482],{"class":109},[14,169109,169110],{},"写文件时建议统一 UTF-8：",[90,169112,169114],{"className":30359,"code":169113,"language":30361,"meta":21,"style":21},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[96,169115,169116,169146],{"__ignoreMap":21},[99,169117,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140,169142,169144],{"class":101,"line":102},[99,169119,107814],{"class":105},[99,169121,146772],{"class":158},[99,169123,110],{"class":109},[99,169125,146777],{"class":214},[99,169127,12422],{"class":109},[99,169129,151957],{"class":214},[99,169131,12422],{"class":109},[99,169133,146787],{"class":5203},[99,169135,155],{"class":105},[99,169137,146792],{"class":214},[99,169139,13701],{"class":109},[99,169141,31364],{"class":105},[99,169143,148134],{"class":5203},[99,169145,3725],{"class":109},[99,169147,169148,169150,169152,169155],{"class":101,"line":22},[99,169149,168865],{"class":5203},[99,169151,168868],{"class":109},[99,169153,169154],{"class":214},"\"中文内容\"",[99,169156,116],{"class":109},[41,169158,169160],{"id":169159},"_89-pathlib","8.9 pathlib",[14,169162,169163,169166],{},[96,169164,169165],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[90,169168,169170],{"className":30359,"code":169169,"language":30361,"meta":21,"style":21},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[96,169171,169172,169182,169186,169204],{"__ignoreMap":21},[99,169173,169174,169176,169178,169180],{"class":101,"line":102},[99,169175,30718],{"class":105},[99,169177,108292],{"class":109},[99,169179,30373],{"class":105},[99,169181,108297],{"class":109},[99,169183,169184],{"class":101,"line":22},[99,169185,2386],{"emptyLinePlaceholder":26},[99,169187,169188,169190,169192,169194,169197,169199,169201],{"class":101,"line":1165},[99,169189,168292],{"class":109},[99,169191,155],{"class":105},[99,169193,108526],{"class":109},[99,169195,169196],{"class":214},"\"data\"",[99,169198,13701],{"class":109},[99,169200,694],{"class":105},[99,169202,169203],{"class":214}," \"students.txt\"\n",[99,169205,169206,169208],{"class":101,"line":1180},[99,169207,30396],{"class":158},[99,169209,169210],{"class":109},"(path)\n",[14,169212,169213],{},"创建目录：",[90,169215,169217],{"className":30359,"code":169216,"language":30361,"meta":21,"style":21},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[96,169218,169219,169229,169233,169246],{"__ignoreMap":21},[99,169220,169221,169223,169225,169227],{"class":101,"line":102},[99,169222,30718],{"class":105},[99,169224,108292],{"class":109},[99,169226,30373],{"class":105},[99,169228,108297],{"class":109},[99,169230,169231],{"class":101,"line":22},[99,169232,2386],{"emptyLinePlaceholder":26},[99,169234,169235,169238,169240,169242,169244],{"class":101,"line":1165},[99,169236,169237],{"class":109},"data_dir ",[99,169239,155],{"class":105},[99,169241,108526],{"class":109},[99,169243,169196],{"class":214},[99,169245,116],{"class":109},[99,169247,169248,169251,169254,169256,169258],{"class":101,"line":1180},[99,169249,169250],{"class":109},"data_dir.mkdir(",[99,169252,169253],{"class":5203},"exist_ok",[99,169255,155],{"class":105},[99,169257,31457],{"class":158},[99,169259,116],{"class":109},[14,169261,169262],{},"判断文件是否存在：",[90,169264,169266],{"className":30359,"code":169265,"language":30361,"meta":21,"style":21},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[96,169267,169268,169281,169285,169292],{"__ignoreMap":21},[99,169269,169270,169272,169274,169276,169279],{"class":101,"line":102},[99,169271,168292],{"class":109},[99,169273,155],{"class":105},[99,169275,108526],{"class":109},[99,169277,169278],{"class":214},"\"data\u002Fstudents.txt\"",[99,169280,116],{"class":109},[99,169282,169283],{"class":101,"line":22},[99,169284,2386],{"emptyLinePlaceholder":26},[99,169286,169287,169289],{"class":101,"line":1165},[99,169288,1517],{"class":105},[99,169290,169291],{"class":109}," path.exists():\n",[99,169293,169294,169296,169298,169301],{"class":101,"line":1180},[99,169295,31280],{"class":158},[99,169297,110],{"class":109},[99,169299,169300],{"class":214},"\"文件存在\"",[99,169302,116],{"class":109},[14,169304,169305],{},"读写文本：",[90,169307,169309],{"className":30359,"code":169308,"language":30361,"meta":21,"style":21},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[96,169310,169311,169323,169327,169344,169361],{"__ignoreMap":21},[99,169312,169313,169315,169317,169319,169321],{"class":101,"line":102},[99,169314,168292],{"class":109},[99,169316,155],{"class":105},[99,169318,108526],{"class":109},[99,169320,146777],{"class":214},[99,169322,116],{"class":109},[99,169324,169325],{"class":101,"line":22},[99,169326,2386],{"emptyLinePlaceholder":26},[99,169328,169329,169332,169334,169336,169338,169340,169342],{"class":101,"line":1165},[99,169330,169331],{"class":109},"path.write_text(",[99,169333,145857],{"class":214},[99,169335,12422],{"class":109},[99,169337,146787],{"class":5203},[99,169339,155],{"class":105},[99,169341,146792],{"class":214},[99,169343,116],{"class":109},[99,169345,169346,169348,169350,169353,169355,169357,169359],{"class":101,"line":1180},[99,169347,168475],{"class":109},[99,169349,155],{"class":105},[99,169351,169352],{"class":109}," path.read_text(",[99,169354,146787],{"class":5203},[99,169356,155],{"class":105},[99,169358,146792],{"class":214},[99,169360,116],{"class":109},[99,169362,169363,169365],{"class":101,"line":1186},[99,169364,30396],{"class":158},[99,169366,168489],{"class":109},[41,169368,169370],{"id":169369},"_810-json文件","8.10 JSON文件",[14,169372,169373],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[90,169375,169377],{"className":30359,"code":169376,"language":30361,"meta":21,"style":21},"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",[96,169378,169379,169385,169389,169397,169407,169417,169425,169429,169433,169458],{"__ignoreMap":21},[99,169380,169381,169383],{"class":101,"line":102},[99,169382,30373],{"class":105},[99,169384,147072],{"class":109},[99,169386,169387],{"class":101,"line":22},[99,169388,2386],{"emptyLinePlaceholder":26},[99,169390,169391,169393,169395],{"class":101,"line":1165},[99,169392,149462],{"class":109},[99,169394,155],{"class":105},[99,169396,15559],{"class":109},[99,169398,169399,169401,169403,169405],{"class":101,"line":1180},[99,169400,147001],{"class":214},[99,169402,51418],{"class":109},[99,169404,149869],{"class":214},[99,169406,31447],{"class":109},[99,169408,169409,169411,169413,169415],{"class":101,"line":1186},[99,169410,164518],{"class":214},[99,169412,51418],{"class":109},[99,169414,760],{"class":158},[99,169416,31447],{"class":109},[99,169418,169419,169421,169423],{"class":101,"line":1200},[99,169420,164529],{"class":214},[99,169422,51418],{"class":109},[99,169424,164534],{"class":158},[99,169426,169427],{"class":101,"line":1206},[99,169428,1551],{"class":109},[99,169430,169431],{"class":101,"line":1297},[99,169432,2386],{"emptyLinePlaceholder":26},[99,169434,169435,169437,169439,169442,169444,169446,169448,169450,169452,169454,169456],{"class":101,"line":1303},[99,169436,156425],{"class":109},[99,169438,155],{"class":105},[99,169440,169441],{"class":109}," json.dumps(student, ",[99,169443,147118],{"class":5203},[99,169445,155],{"class":105},[99,169447,33968],{"class":158},[99,169449,12422],{"class":109},[99,169451,151993],{"class":5203},[99,169453,155],{"class":105},[99,169455,187],{"class":158},[99,169457,116],{"class":109},[99,169459,169460,169462],{"class":101,"line":1315},[99,169461,30396],{"class":158},[99,169463,164052],{"class":109},[14,169465,169466],{},"写入 JSON 文件：",[90,169468,169470],{"className":30359,"code":169469,"language":30361,"meta":21,"style":21},"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",[96,169471,169472,169478,169482,169490,169518,169546,169550,169554,169584],{"__ignoreMap":21},[99,169473,169474,169476],{"class":101,"line":102},[99,169475,30373],{"class":105},[99,169477,147072],{"class":109},[99,169479,169480],{"class":101,"line":22},[99,169481,2386],{"emptyLinePlaceholder":26},[99,169483,169484,169486,169488],{"class":101,"line":1165},[99,169485,159697],{"class":109},[99,169487,155],{"class":105},[99,169489,55428],{"class":109},[99,169491,169492,169494,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516],{"class":101,"line":1180},[99,169493,148366],{"class":109},[99,169495,62660],{"class":214},[99,169497,51418],{"class":109},[99,169499,149869],{"class":214},[99,169501,12422],{"class":109},[99,169503,69105],{"class":214},[99,169505,51418],{"class":109},[99,169507,760],{"class":158},[99,169509,12422],{"class":109},[99,169511,151453],{"class":214},[99,169513,51418],{"class":109},[99,169515,1099],{"class":158},[99,169517,4916],{"class":109},[99,169519,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542,169544],{"class":101,"line":1186},[99,169521,148366],{"class":109},[99,169523,62660],{"class":214},[99,169525,51418],{"class":109},[99,169527,150917],{"class":214},[99,169529,12422],{"class":109},[99,169531,69105],{"class":214},[99,169533,51418],{"class":109},[99,169535,735],{"class":158},[99,169537,12422],{"class":109},[99,169539,151453],{"class":214},[99,169541,51418],{"class":109},[99,169543,921],{"class":158},[99,169545,4916],{"class":109},[99,169547,169548],{"class":101,"line":1200},[99,169549,33227],{"class":109},[99,169551,169552],{"class":101,"line":1206},[99,169553,2386],{"emptyLinePlaceholder":26},[99,169555,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582],{"class":101,"line":1297},[99,169557,107814],{"class":105},[99,169559,146772],{"class":158},[99,169561,110],{"class":109},[99,169563,151812],{"class":214},[99,169565,12422],{"class":109},[99,169567,151957],{"class":214},[99,169569,12422],{"class":109},[99,169571,146787],{"class":5203},[99,169573,155],{"class":105},[99,169575,146792],{"class":214},[99,169577,13701],{"class":109},[99,169579,31364],{"class":105},[99,169581,148134],{"class":5203},[99,169583,3725],{"class":109},[99,169585,169586,169589,169591,169593,169595,169597,169599,169601,169603,169605,169607],{"class":101,"line":1303},[99,169587,169588],{"class":109},"    json.dump(students, ",[99,169590,45335],{"class":5203},[99,169592,12422],{"class":109},[99,169594,147118],{"class":5203},[99,169596,155],{"class":105},[99,169598,33968],{"class":158},[99,169600,12422],{"class":109},[99,169602,151993],{"class":5203},[99,169604,155],{"class":105},[99,169606,187],{"class":158},[99,169608,116],{"class":109},[14,169610,169611],{},"读取 JSON 文件：",[90,169613,169615],{"className":30359,"code":169614,"language":30361,"meta":21,"style":21},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[96,169616,169617,169623,169627,169657,169669,169673],{"__ignoreMap":21},[99,169618,169619,169621],{"class":101,"line":102},[99,169620,30373],{"class":105},[99,169622,147072],{"class":109},[99,169624,169625],{"class":101,"line":22},[99,169626,2386],{"emptyLinePlaceholder":26},[99,169628,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653,169655],{"class":101,"line":1165},[99,169630,107814],{"class":105},[99,169632,146772],{"class":158},[99,169634,110],{"class":109},[99,169636,151812],{"class":214},[99,169638,12422],{"class":109},[99,169640,146782],{"class":214},[99,169642,12422],{"class":109},[99,169644,146787],{"class":5203},[99,169646,155],{"class":105},[99,169648,146792],{"class":214},[99,169650,13701],{"class":109},[99,169652,31364],{"class":105},[99,169654,148134],{"class":5203},[99,169656,3725],{"class":109},[99,169658,169659,169661,169663,169665,169667],{"class":101,"line":1180},[99,169660,153018],{"class":109},[99,169662,155],{"class":105},[99,169664,148145],{"class":109},[99,169666,45335],{"class":5203},[99,169668,116],{"class":109},[99,169670,169671],{"class":101,"line":1186},[99,169672,2386],{"emptyLinePlaceholder":26},[99,169674,169675,169677],{"class":101,"line":1200},[99,169676,30396],{"class":158},[99,169678,164976],{"class":109},[41,169680,169682],{"id":169681},"_811-csv文件","8.11 CSV文件",[14,169684,169685],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169687,169688],{},"写入 CSV：",[90,169690,169692],{"className":30359,"code":169691,"language":30361,"meta":21,"style":21},"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",[96,169693,169694,169701,169705,169713,169731,169747,169763,169767,169771,169811,169825],{"__ignoreMap":21},[99,169695,169696,169698],{"class":101,"line":102},[99,169697,30373],{"class":105},[99,169699,169700],{"class":109}," csv\n",[99,169702,169703],{"class":101,"line":22},[99,169704,2386],{"emptyLinePlaceholder":26},[99,169706,169707,169709,169711],{"class":101,"line":1165},[99,169708,159697],{"class":109},[99,169710,155],{"class":105},[99,169712,55428],{"class":109},[99,169714,169715,169718,169720,169722,169724,169726,169729],{"class":101,"line":1180},[99,169716,169717],{"class":109},"    [",[99,169719,73080],{"class":214},[99,169721,12422],{"class":109},[99,169723,73113],{"class":214},[99,169725,12422],{"class":109},[99,169727,169728],{"class":214},"\"成绩\"",[99,169730,87817],{"class":109},[99,169732,169733,169735,169737,169739,169741,169743,169745],{"class":101,"line":1186},[99,169734,169717],{"class":109},[99,169736,149869],{"class":214},[99,169738,12422],{"class":109},[99,169740,760],{"class":158},[99,169742,12422],{"class":109},[99,169744,1099],{"class":158},[99,169746,87817],{"class":109},[99,169748,169749,169751,169753,169755,169757,169759,169761],{"class":101,"line":1200},[99,169750,169717],{"class":109},[99,169752,150917],{"class":214},[99,169754,12422],{"class":109},[99,169756,735],{"class":158},[99,169758,12422],{"class":109},[99,169760,921],{"class":158},[99,169762,87817],{"class":109},[99,169764,169765],{"class":101,"line":1206},[99,169766,33227],{"class":109},[99,169768,169769],{"class":101,"line":1297},[99,169770,2386],{"emptyLinePlaceholder":26},[99,169772,169773,169775,169777,169779,169782,169784,169786,169788,169790,169792,169794,169796,169799,169801,169803,169805,169807,169809],{"class":101,"line":1303},[99,169774,107814],{"class":105},[99,169776,146772],{"class":158},[99,169778,110],{"class":109},[99,169780,169781],{"class":214},"\"students.csv\"",[99,169783,12422],{"class":109},[99,169785,151957],{"class":214},[99,169787,12422],{"class":109},[99,169789,146787],{"class":5203},[99,169791,155],{"class":105},[99,169793,146792],{"class":214},[99,169795,12422],{"class":109},[99,169797,169798],{"class":5203},"newline",[99,169800,155],{"class":105},[99,169802,7639],{"class":214},[99,169804,13701],{"class":109},[99,169806,31364],{"class":105},[99,169808,148134],{"class":5203},[99,169810,3725],{"class":109},[99,169812,169813,169816,169818,169821,169823],{"class":101,"line":1315},[99,169814,169815],{"class":109},"    writer ",[99,169817,155],{"class":105},[99,169819,169820],{"class":109}," csv.writer(",[99,169822,45335],{"class":5203},[99,169824,116],{"class":109},[99,169826,169827],{"class":101,"line":1598},[99,169828,169829],{"class":109},"    writer.writerows(students)\n",[14,169831,169832],{},"读取 CSV：",[90,169834,169836],{"className":30359,"code":169835,"language":30361,"meta":21,"style":21},"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",[96,169837,169838,169844,169848,169878,169892,169904],{"__ignoreMap":21},[99,169839,169840,169842],{"class":101,"line":102},[99,169841,30373],{"class":105},[99,169843,169700],{"class":109},[99,169845,169846],{"class":101,"line":22},[99,169847,2386],{"emptyLinePlaceholder":26},[99,169849,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872,169874,169876],{"class":101,"line":1165},[99,169851,107814],{"class":105},[99,169853,146772],{"class":158},[99,169855,110],{"class":109},[99,169857,169781],{"class":214},[99,169859,12422],{"class":109},[99,169861,146782],{"class":214},[99,169863,12422],{"class":109},[99,169865,146787],{"class":5203},[99,169867,155],{"class":105},[99,169869,146792],{"class":214},[99,169871,13701],{"class":109},[99,169873,31364],{"class":105},[99,169875,148134],{"class":5203},[99,169877,3725],{"class":109},[99,169879,169880,169883,169885,169888,169890],{"class":101,"line":1180},[99,169881,169882],{"class":109},"    reader ",[99,169884,155],{"class":105},[99,169886,169887],{"class":109}," csv.reader(",[99,169889,45335],{"class":5203},[99,169891,116],{"class":109},[99,169893,169894,169896,169899,169901],{"class":101,"line":1186},[99,169895,3187],{"class":105},[99,169897,169898],{"class":109}," row ",[99,169900,26032],{"class":105},[99,169902,169903],{"class":109}," reader:\n",[99,169905,169906,169908],{"class":101,"line":1200},[99,169907,32432],{"class":158},[99,169909,169910],{"class":109},"(row)\n",[14,169912,169913],{},"使用字典写入：",[90,169915,169917],{"className":30359,"code":169916,"language":30361,"meta":21,"style":21},"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",[96,169918,169919,169925,169929,169937,169965,169993,169997,170001,170039,170060,170081,170086],{"__ignoreMap":21},[99,169920,169921,169923],{"class":101,"line":102},[99,169922,30373],{"class":105},[99,169924,169700],{"class":109},[99,169926,169927],{"class":101,"line":22},[99,169928,2386],{"emptyLinePlaceholder":26},[99,169930,169931,169933,169935],{"class":101,"line":1165},[99,169932,159697],{"class":109},[99,169934,155],{"class":105},[99,169936,55428],{"class":109},[99,169938,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957,169959,169961,169963],{"class":101,"line":1180},[99,169940,148366],{"class":109},[99,169942,62660],{"class":214},[99,169944,51418],{"class":109},[99,169946,149869],{"class":214},[99,169948,12422],{"class":109},[99,169950,69105],{"class":214},[99,169952,51418],{"class":109},[99,169954,760],{"class":158},[99,169956,12422],{"class":109},[99,169958,151453],{"class":214},[99,169960,51418],{"class":109},[99,169962,1099],{"class":158},[99,169964,4916],{"class":109},[99,169966,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991],{"class":101,"line":1186},[99,169968,148366],{"class":109},[99,169970,62660],{"class":214},[99,169972,51418],{"class":109},[99,169974,150917],{"class":214},[99,169976,12422],{"class":109},[99,169978,69105],{"class":214},[99,169980,51418],{"class":109},[99,169982,735],{"class":158},[99,169984,12422],{"class":109},[99,169986,151453],{"class":214},[99,169988,51418],{"class":109},[99,169990,921],{"class":158},[99,169992,4916],{"class":109},[99,169994,169995],{"class":101,"line":1200},[99,169996,33227],{"class":109},[99,169998,169999],{"class":101,"line":1206},[99,170000,2386],{"emptyLinePlaceholder":26},[99,170002,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037],{"class":101,"line":1297},[99,170004,107814],{"class":105},[99,170006,146772],{"class":158},[99,170008,110],{"class":109},[99,170010,169781],{"class":214},[99,170012,12422],{"class":109},[99,170014,151957],{"class":214},[99,170016,12422],{"class":109},[99,170018,146787],{"class":5203},[99,170020,155],{"class":105},[99,170022,146792],{"class":214},[99,170024,12422],{"class":109},[99,170026,169798],{"class":5203},[99,170028,155],{"class":105},[99,170030,7639],{"class":214},[99,170032,13701],{"class":109},[99,170034,31364],{"class":105},[99,170036,148134],{"class":5203},[99,170038,3725],{"class":109},[99,170040,170041,170044,170046,170048,170050,170052,170054,170056,170058],{"class":101,"line":1303},[99,170042,170043],{"class":109},"    fieldnames ",[99,170045,155],{"class":105},[99,170047,52207],{"class":109},[99,170049,62660],{"class":214},[99,170051,12422],{"class":109},[99,170053,69105],{"class":214},[99,170055,12422],{"class":109},[99,170057,151453],{"class":214},[99,170059,33227],{"class":109},[99,170061,170062,170064,170066,170069,170071,170073,170076,170078],{"class":101,"line":1315},[99,170063,169815],{"class":109},[99,170065,155],{"class":105},[99,170067,170068],{"class":109}," csv.DictWriter(",[99,170070,45335],{"class":5203},[99,170072,12422],{"class":109},[99,170074,170075],{"class":5203},"fieldnames",[99,170077,155],{"class":105},[99,170079,170080],{"class":109},"fieldnames)\n",[99,170082,170083],{"class":101,"line":1598},[99,170084,170085],{"class":109},"    writer.writeheader()\n",[99,170087,170088],{"class":101,"line":1603},[99,170089,169829],{"class":109},[41,170091,170093],{"id":170092},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170095,123273],{},[53,170097,170098,170101,170104],{},[56,170099,170100],{},"读取文本文件。",[56,170102,170103],{},"统计每个单词出现次数。",[56,170105,170106],{},"输出出现次数最多的前 10 个单词。",[14,170108,10022],{},[90,170110,170112],{"className":30359,"code":170111,"language":30361,"meta":21,"style":21},"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",[96,170113,170114,170124,170128,170141,170157,170161,170171,170180,170184,170196,170216,170225,170229,170247,170251,170281,170285,170301],{"__ignoreMap":21},[99,170115,170116,170118,170120,170122],{"class":101,"line":102},[99,170117,30718],{"class":105},[99,170119,108292],{"class":109},[99,170121,30373],{"class":105},[99,170123,108297],{"class":109},[99,170125,170126],{"class":101,"line":22},[99,170127,2386],{"emptyLinePlaceholder":26},[99,170129,170130,170132,170134,170136,170139],{"class":101,"line":1165},[99,170131,168292],{"class":109},[99,170133,155],{"class":105},[99,170135,108526],{"class":109},[99,170137,170138],{"class":214},"\"article.txt\"",[99,170140,116],{"class":109},[99,170142,170143,170145,170147,170149,170151,170153,170155],{"class":101,"line":1180},[99,170144,168475],{"class":109},[99,170146,155],{"class":105},[99,170148,169352],{"class":109},[99,170150,146787],{"class":5203},[99,170152,155],{"class":105},[99,170154,146792],{"class":214},[99,170156,116],{"class":109},[99,170158,170159],{"class":101,"line":1186},[99,170160,2386],{"emptyLinePlaceholder":26},[99,170162,170163,170166,170168],{"class":101,"line":1200},[99,170164,170165],{"class":109},"words ",[99,170167,155],{"class":105},[99,170169,170170],{"class":109}," content.lower().split()\n",[99,170172,170173,170176,170178],{"class":101,"line":1206},[99,170174,170175],{"class":109},"counter ",[99,170177,155],{"class":105},[99,170179,87849],{"class":109},[99,170181,170182],{"class":101,"line":1297},[99,170183,2386],{"emptyLinePlaceholder":26},[99,170185,170186,170188,170191,170193],{"class":101,"line":1303},[99,170187,3011],{"class":105},[99,170189,170190],{"class":109}," word ",[99,170192,26032],{"class":105},[99,170194,170195],{"class":109}," words:\n",[99,170197,170198,170201,170203,170206,170209,170211,170214],{"class":101,"line":1315},[99,170199,170200],{"class":109},"    word ",[99,170202,155],{"class":105},[99,170204,170205],{"class":109}," word.strip(",[99,170207,170208],{"class":214},"\".,!?;:",[99,170210,156476],{"class":158},[99,170212,170213],{"class":214},"'()[]\"",[99,170215,116],{"class":109},[99,170217,170218,170220,170222],{"class":101,"line":1598},[99,170219,3087],{"class":105},[99,170221,38911],{"class":105},[99,170223,170224],{"class":109}," word:\n",[99,170226,170227],{"class":101,"line":1603},[99,170228,148493],{"class":105},[99,170230,170231,170234,170236,170239,170241,170243,170245],{"class":101,"line":1609},[99,170232,170233],{"class":109},"    counter[word] ",[99,170235,155],{"class":105},[99,170237,170238],{"class":109}," counter.get(word, ",[99,170240,301],{"class":158},[99,170242,13701],{"class":109},[99,170244,591],{"class":105},[99,170246,55680],{"class":158},[99,170248,170249],{"class":101,"line":1614},[99,170250,2386],{"emptyLinePlaceholder":26},[99,170252,170253,170256,170258,170260,170263,170265,170267,170269,170271,170273,170275,170277,170279],{"class":101,"line":1628},[99,170254,170255],{"class":109},"items ",[99,170257,155],{"class":105},[99,170259,163585],{"class":158},[99,170261,170262],{"class":109},"(counter.items(), ",[99,170264,153927],{"class":5203},[99,170266,153930],{"class":105},[99,170268,153933],{"class":109},[99,170270,327],{"class":158},[99,170272,112183],{"class":109},[99,170274,163509],{"class":5203},[99,170276,155],{"class":105},[99,170278,31457],{"class":158},[99,170280,116],{"class":109},[99,170282,170283],{"class":101,"line":1633},[99,170284,2386],{"emptyLinePlaceholder":26},[99,170286,170287,170289,170292,170294,170297,170299],{"class":101,"line":1639},[99,170288,3011],{"class":105},[99,170290,170291],{"class":109}," word, count ",[99,170293,26032],{"class":105},[99,170295,170296],{"class":109}," items[:",[99,170298,556],{"class":158},[99,170300,165736],{"class":109},[99,170302,170303,170305],{"class":101,"line":1660},[99,170304,31280],{"class":158},[99,170306,170307],{"class":109},"(word, count)\n",[41,170309,170311],{"id":170310},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[90,170313,170315],{"className":30359,"code":170314,"language":30361,"meta":21,"style":21},"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",[96,170316,170317,170323,170333,170337,170349,170353,170357,170365,170375,170381,170385,170415,170425,170429,170433,170441,170471,170495,170499,170503,170511,170540,170545],{"__ignoreMap":21},[99,170318,170319,170321],{"class":101,"line":102},[99,170320,30373],{"class":105},[99,170322,147072],{"class":109},[99,170324,170325,170327,170329,170331],{"class":101,"line":22},[99,170326,30718],{"class":105},[99,170328,108292],{"class":109},[99,170330,30373],{"class":105},[99,170332,108297],{"class":109},[99,170334,170335],{"class":101,"line":1165},[99,170336,2386],{"emptyLinePlaceholder":26},[99,170338,170339,170341,170343,170345,170347],{"class":101,"line":1180},[99,170340,151805],{"class":158},[99,170342,13551],{"class":105},[99,170344,108526],{"class":109},[99,170346,151812],{"class":214},[99,170348,116],{"class":109},[99,170350,170351],{"class":101,"line":1186},[99,170352,2386],{"emptyLinePlaceholder":26},[99,170354,170355],{"class":101,"line":1200},[99,170356,2386],{"emptyLinePlaceholder":26},[99,170358,170359,170361,170363],{"class":101,"line":1206},[99,170360,31928],{"class":105},[99,170362,151829],{"class":1949},[99,170364,31934],{"class":109},[99,170366,170367,170369,170371,170373],{"class":101,"line":1297},[99,170368,3087],{"class":105},[99,170370,38911],{"class":105},[99,170372,151840],{"class":158},[99,170374,151843],{"class":109},[99,170376,170377,170379],{"class":101,"line":1303},[99,170378,14739],{"class":105},[99,170380,51819],{"class":109},[99,170382,170383],{"class":101,"line":1315},[99,170384,2386],{"emptyLinePlaceholder":26},[99,170386,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409,170411,170413],{"class":101,"line":1598},[99,170388,34159],{"class":105},[99,170390,146772],{"class":158},[99,170392,110],{"class":109},[99,170394,151805],{"class":158},[99,170396,12422],{"class":109},[99,170398,146782],{"class":214},[99,170400,12422],{"class":109},[99,170402,146787],{"class":5203},[99,170404,155],{"class":105},[99,170406,146792],{"class":214},[99,170408,13701],{"class":109},[99,170410,31364],{"class":105},[99,170412,148134],{"class":5203},[99,170414,3725],{"class":109},[99,170416,170417,170419,170421,170423],{"class":101,"line":1603},[99,170418,14739],{"class":105},[99,170420,148145],{"class":109},[99,170422,45335],{"class":5203},[99,170424,116],{"class":109},[99,170426,170427],{"class":101,"line":1609},[99,170428,2386],{"emptyLinePlaceholder":26},[99,170430,170431],{"class":101,"line":1614},[99,170432,2386],{"emptyLinePlaceholder":26},[99,170434,170435,170437,170439],{"class":101,"line":1628},[99,170436,31928],{"class":105},[99,170438,151939],{"class":1949},[99,170440,151942],{"class":109},[99,170442,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469],{"class":101,"line":1633},[99,170444,34159],{"class":105},[99,170446,146772],{"class":158},[99,170448,110],{"class":109},[99,170450,151805],{"class":158},[99,170452,12422],{"class":109},[99,170454,151957],{"class":214},[99,170456,12422],{"class":109},[99,170458,146787],{"class":5203},[99,170460,155],{"class":105},[99,170462,146792],{"class":214},[99,170464,13701],{"class":109},[99,170466,31364],{"class":105},[99,170468,148134],{"class":5203},[99,170470,3725],{"class":109},[99,170472,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491,170493],{"class":101,"line":1639},[99,170474,151978],{"class":109},[99,170476,45335],{"class":5203},[99,170478,12422],{"class":109},[99,170480,147118],{"class":5203},[99,170482,155],{"class":105},[99,170484,33968],{"class":158},[99,170486,12422],{"class":109},[99,170488,151993],{"class":5203},[99,170490,155],{"class":105},[99,170492,187],{"class":158},[99,170494,116],{"class":109},[99,170496,170497],{"class":101,"line":1660},[99,170498,2386],{"emptyLinePlaceholder":26},[99,170500,170501],{"class":101,"line":1665},[99,170502,2386],{"emptyLinePlaceholder":26},[99,170504,170505,170507,170509],{"class":101,"line":1679},[99,170506,159697],{"class":109},[99,170508,155],{"class":105},[99,170510,153023],{"class":109},[99,170512,170513,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538],{"class":101,"line":1684},[99,170514,170515],{"class":109},"students.append({",[99,170517,62660],{"class":214},[99,170519,51418],{"class":109},[99,170521,149869],{"class":214},[99,170523,12422],{"class":109},[99,170525,69105],{"class":214},[99,170527,51418],{"class":109},[99,170529,760],{"class":158},[99,170531,12422],{"class":109},[99,170533,151453],{"class":214},[99,170535,51418],{"class":109},[99,170537,1099],{"class":158},[99,170539,165133],{"class":109},[99,170541,170542],{"class":101,"line":1713},[99,170543,170544],{"class":109},"save_students(students)\n",[99,170546,170547,170549,170551,170554],{"class":101,"line":1718},[99,170548,30396],{"class":158},[99,170550,110],{"class":109},[99,170552,170553],{"class":214},"\"保存成功\"",[99,170555,116],{"class":109},[41,170557,170559],{"id":170558},"_814-易错点","8.14 易错点",[53,170561,170562,170566,170572,170577,170584,170591],{},[56,170563,170564,168825],{},[96,170565,905],{},[56,170567,170568,170569,28366],{},"读写中文要指定 ",[96,170570,170571],{},"encoding=\"utf-8\"",[56,170573,170574,170575,28366],{},"打开文件后要关闭，推荐使用 ",[96,170576,107814],{},[56,170578,170579,170580,170583],{},"读取大文件不要直接 ",[96,170581,170582],{},"read()"," 全部内容。",[56,170585,170586,170587,170590],{},"Windows 写 CSV 时建议加 ",[96,170588,170589],{},"newline=\"\"","，避免空行。",[56,170592,170593],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[41,170595,170597],{"id":170596},"_815-本章练习","8.15 本章练习",[53,170599,170600,170607,170612,170615,170618],{},[56,170601,170602,170603,170606],{},"写入一个 ",[96,170604,170605],{},"students.txt","，每行保存一个学生姓名。",[56,170608,104336,170609,170611],{},[96,170610,170605],{}," 并输出所有学生。",[56,170613,170614],{},"把学生列表保存为 JSON 文件。",[56,170616,170617],{},"从 JSON 文件读取学生数据，计算平均分。",[56,170619,170620,170621,170624,170625,170628],{},"写一个日志函数 ",[96,170622,170623],{},"write_log(message)","，每次调用向 ",[96,170626,170627],{},"app.log"," 追加一行。",[5113,170630,170631],{},"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":21,"searchDepth":22,"depth":22,"links":170633},[170634,170635,170639,170640,170646,170647,170648,170649,170650,170651,170652,170653,170654,170655,170656],{"id":168145,"depth":22,"text":168146},{"id":168186,"depth":22,"text":168187,"children":170636},[170637,170638],{"id":168190,"depth":1165,"text":168191},{"id":168224,"depth":1165,"text":168225},{"id":168338,"depth":22,"text":168339},{"id":168431,"depth":22,"text":168432,"children":170641},[170642,170643,170644,170645],{"id":168435,"depth":1165,"text":168436},{"id":168522,"depth":1165,"text":168523},{"id":168592,"depth":1165,"text":168593},{"id":168686,"depth":1165,"text":168687},{"id":168756,"depth":22,"text":168757},{"id":168819,"depth":22,"text":168820},{"id":168980,"depth":22,"text":168981},{"id":169043,"depth":22,"text":169044},{"id":169159,"depth":22,"text":169160},{"id":169369,"depth":22,"text":169370},{"id":169681,"depth":22,"text":169682},{"id":170092,"depth":22,"text":170093},{"id":170310,"depth":22,"text":170311},{"id":170558,"depth":22,"text":170559},{"id":170596,"depth":22,"text":170597},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168137,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170663,"title":170664,"body":170665,"description":23364,"extension":24,"meta":172851,"navigation":26,"path":172852,"seo":172853,"stem":172854,"__hash__":172855},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170666,"toc":172818},[170667,170670,170674,170677,170680,170772,170774,170793,170798,170802,170805,170808,170837,170844,170847,170851,170854,170883,170885,170937,170943,170996,171000,171098,171101,171168,171172,171229,171231,171237,171241,171246,171252,171343,171348,171352,171355,171433,171436,171474,171478,171596,171599,171603,171606,171651,171654,171658,171663,171669,171719,171722,171753,171757,171761,171791,171795,171830,171834,171869,171909,171913,171929,171932,171936,171940,172019,172023,172064,172068,172123,172127,172161,172165,172195,172204,172211,172217,172274,172277,172285,172288,172292,172299,172302,172308,172311,172328,172333,172337,172343,172356,172359,172396,172399,172410,172413,172427,172430,172444,172448,172455,172488,172491,172493,172499,172502,172506,172508,172514,172519,172692,172696,172759,172763,172787,172791,172815],[10,170668,170664],{"id":170669},"_9-异常模块与包",[41,170671,170673],{"id":170672},"_91-什么是异常","9.1 什么是异常",[14,170675,170676],{},"异常是程序运行过程中出现的错误。",[14,170678,170679],{},"常见异常：",[247,170681,170682,170691],{},[250,170683,170684],{},[253,170685,170686,170689],{},[256,170687,170688],{},"异常",[256,170690,25858],{},[294,170692,170693,170703,170713,170722,170732,170742,170752,170762],{},[253,170694,170695,170700],{},[299,170696,170697],{},[96,170698,170699],{},"NameError",[299,170701,170702],{},"使用了未定义变量",[253,170704,170705,170710],{},[299,170706,170707],{},[96,170708,170709],{},"TypeError",[299,170711,170712],{},"类型不匹配",[253,170714,170715,170719],{},[299,170716,170717],{},[96,170718,154815],{},[299,170720,170721],{},"值不合法",[253,170723,170724,170729],{},[299,170725,170726],{},[96,170727,170728],{},"IndexError",[299,170730,170731],{},"列表索引越界",[253,170733,170734,170739],{},[299,170735,170736],{},[96,170737,170738],{},"KeyError",[299,170740,170741],{},"字典 key 不存在",[253,170743,170744,170749],{},[299,170745,170746],{},[96,170747,170748],{},"FileNotFoundError",[299,170750,170751],{},"文件不存在",[253,170753,170754,170759],{},[299,170755,170756],{},[96,170757,170758],{},"ZeroDivisionError",[299,170760,170761],{},"除数为 0",[253,170763,170764,170769],{},[299,170765,170766],{},[96,170767,170768],{},"ImportError",[299,170770,170771],{},"导入失败",[14,170773,15122],{},[90,170775,170777],{"className":30359,"code":170776,"language":30361,"meta":21,"style":21},"num = int(\"abc\")\n",[96,170778,170779],{"__ignoreMap":21},[99,170780,170781,170783,170785,170787,170789,170791],{"class":101,"line":102},[99,170782,155768],{"class":109},[99,170784,155],{"class":105},[99,170786,2368],{"class":158},[99,170788,110],{"class":109},[99,170790,155861],{"class":214},[99,170792,116],{"class":109},[14,170794,170795,170796,28366],{},"会触发 ",[96,170797,154815],{},[41,170799,170801],{"id":170800},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170803,170804],{},"如果不处理异常，程序会直接终止。",[14,170806,170807],{},"例如用户输入年龄：",[90,170809,170811],{"className":30359,"code":170810,"language":30361,"meta":21,"style":21},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[96,170812,170813,170831],{"__ignoreMap":21},[99,170814,170815,170817,170819,170821,170823,170825,170827,170829],{"class":101,"line":102},[99,170816,146527],{"class":109},[99,170818,155],{"class":105},[99,170820,2368],{"class":158},[99,170822,110],{"class":109},[99,170824,53802],{"class":158},[99,170826,110],{"class":109},[99,170828,152375],{"class":214},[99,170830,30478],{"class":109},[99,170832,170833,170835],{"class":101,"line":22},[99,170834,30396],{"class":158},[99,170836,155742],{"class":109},[14,170838,170839,170840,170843],{},"用户输入 ",[96,170841,170842],{},"abc","，程序就会报错退出。",[14,170845,170846],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[41,170848,170850],{"id":170849},"_93-try-except","9.3 try except",[14,170852,170853],{},"基础语法：",[90,170855,170857],{"className":30359,"code":170856,"language":30361,"meta":21,"style":21},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[96,170858,170859,170866,170871,170878],{"__ignoreMap":21},[99,170860,170861,170864],{"class":101,"line":102},[99,170862,170863],{"class":105},"try",[99,170865,3725],{"class":109},[99,170867,170868],{"class":101,"line":22},[99,170869,170870],{"class":109},"    可能出错的代码\n",[99,170872,170873,170876],{"class":101,"line":1165},[99,170874,170875],{"class":105},"except",[99,170877,3725],{"class":109},[99,170879,170880],{"class":101,"line":1180},[99,170881,170882],{"class":109},"    出错后的处理代码\n",[14,170884,15122],{},[90,170886,170888],{"className":30359,"code":170887,"language":30361,"meta":21,"style":21},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[96,170889,170890,170896,170914,170920,170926],{"__ignoreMap":21},[99,170891,170892,170894],{"class":101,"line":102},[99,170893,170863],{"class":105},[99,170895,3725],{"class":109},[99,170897,170898,170900,170902,170904,170906,170908,170910,170912],{"class":101,"line":22},[99,170899,152367],{"class":109},[99,170901,155],{"class":105},[99,170903,2368],{"class":158},[99,170905,110],{"class":109},[99,170907,53802],{"class":158},[99,170909,110],{"class":109},[99,170911,152375],{"class":214},[99,170913,30478],{"class":109},[99,170915,170916,170918],{"class":101,"line":1165},[99,170917,31280],{"class":158},[99,170919,155742],{"class":109},[99,170921,170922,170924],{"class":101,"line":1180},[99,170923,170875],{"class":105},[99,170925,3725],{"class":109},[99,170927,170928,170930,170932,170935],{"class":101,"line":1186},[99,170929,31280],{"class":158},[99,170931,110],{"class":109},[99,170933,170934],{"class":214},"\"年龄必须是数字\"",[99,170936,116],{"class":109},[14,170938,170939,170940,170942],{},"不建议裸写 ",[96,170941,170875],{},"，最好指定异常类型。",[90,170944,170946],{"className":30359,"code":170945,"language":30361,"meta":21,"style":21},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[96,170947,170948,170954,170972,170978,170986],{"__ignoreMap":21},[99,170949,170950,170952],{"class":101,"line":102},[99,170951,170863],{"class":105},[99,170953,3725],{"class":109},[99,170955,170956,170958,170960,170962,170964,170966,170968,170970],{"class":101,"line":22},[99,170957,152367],{"class":109},[99,170959,155],{"class":105},[99,170961,2368],{"class":158},[99,170963,110],{"class":109},[99,170965,53802],{"class":158},[99,170967,110],{"class":109},[99,170969,152375],{"class":214},[99,170971,30478],{"class":109},[99,170973,170974,170976],{"class":101,"line":1165},[99,170975,31280],{"class":158},[99,170977,155742],{"class":109},[99,170979,170980,170982,170984],{"class":101,"line":1180},[99,170981,170875],{"class":105},[99,170983,152207],{"class":158},[99,170985,3725],{"class":109},[99,170987,170988,170990,170992,170994],{"class":101,"line":1186},[99,170989,31280],{"class":158},[99,170991,110],{"class":109},[99,170993,170934],{"class":214},[99,170995,116],{"class":109},[41,170997,170999],{"id":170998},"_94-捕获多个异常","9.4 捕获多个异常",[90,171001,171003],{"className":30359,"code":171002,"language":30361,"meta":21,"style":21},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[96,171004,171005,171011,171032,171052,171059,171067,171078,171087],{"__ignoreMap":21},[99,171006,171007,171009],{"class":101,"line":102},[99,171008,170863],{"class":105},[99,171010,3725],{"class":109},[99,171012,171013,171016,171018,171020,171022,171024,171026,171028,171030],{"class":101,"line":22},[99,171014,171015],{"class":109},"    nums ",[99,171017,155],{"class":105},[99,171019,52207],{"class":109},[99,171021,327],{"class":158},[99,171023,12422],{"class":109},[99,171025,187],{"class":158},[99,171027,12422],{"class":109},[99,171029,181],{"class":158},[99,171031,33227],{"class":109},[99,171033,171034,171037,171039,171041,171043,171045,171047,171050],{"class":101,"line":1165},[99,171035,171036],{"class":109},"    index ",[99,171038,155],{"class":105},[99,171040,2368],{"class":158},[99,171042,110],{"class":109},[99,171044,53802],{"class":158},[99,171046,110],{"class":109},[99,171048,171049],{"class":214},"\"请输入索引:\"",[99,171051,30478],{"class":109},[99,171053,171054,171056],{"class":101,"line":1180},[99,171055,31280],{"class":158},[99,171057,171058],{"class":109},"(nums[index])\n",[99,171060,171061,171063,171065],{"class":101,"line":1186},[99,171062,170875],{"class":105},[99,171064,152207],{"class":158},[99,171066,3725],{"class":109},[99,171068,171069,171071,171073,171076],{"class":101,"line":1200},[99,171070,31280],{"class":158},[99,171072,110],{"class":109},[99,171074,171075],{"class":214},"\"索引必须是整数\"",[99,171077,116],{"class":109},[99,171079,171080,171082,171085],{"class":101,"line":1206},[99,171081,170875],{"class":105},[99,171083,171084],{"class":158}," IndexError",[99,171086,3725],{"class":109},[99,171088,171089,171091,171093,171096],{"class":101,"line":1297},[99,171090,31280],{"class":158},[99,171092,110],{"class":109},[99,171094,171095],{"class":214},"\"索引越界\"",[99,171097,116],{"class":109},[14,171099,171100],{},"多个异常使用相同处理逻辑：",[90,171102,171104],{"className":30359,"code":171103,"language":30361,"meta":21,"style":21},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[96,171105,171106,171112,171130,171143,171157],{"__ignoreMap":21},[99,171107,171108,171110],{"class":101,"line":102},[99,171109,170863],{"class":105},[99,171111,3725],{"class":109},[99,171113,171114,171116,171118,171120,171122,171124,171126,171128],{"class":101,"line":22},[99,171115,45574],{"class":109},[99,171117,155],{"class":105},[99,171119,2368],{"class":158},[99,171121,110],{"class":109},[99,171123,53802],{"class":158},[99,171125,110],{"class":109},[99,171127,155777],{"class":214},[99,171129,30478],{"class":109},[99,171131,171132,171134,171136,171138,171140],{"class":101,"line":1165},[99,171133,31280],{"class":158},[99,171135,110],{"class":109},[99,171137,556],{"class":158},[99,171139,156027],{"class":105},[99,171141,171142],{"class":109}," num)\n",[99,171144,171145,171147,171149,171151,171153,171155],{"class":101,"line":1180},[99,171146,170875],{"class":105},[99,171148,1644],{"class":109},[99,171150,154815],{"class":158},[99,171152,12422],{"class":109},[99,171154,170758],{"class":158},[99,171156,30767],{"class":109},[99,171158,171159,171161,171163,171166],{"class":101,"line":1186},[99,171160,31280],{"class":158},[99,171162,110],{"class":109},[99,171164,171165],{"class":214},"\"输入不合法\"",[99,171167,116],{"class":109},[41,171169,171171],{"id":171170},"_95-获取异常信息","9.5 获取异常信息",[90,171173,171175],{"className":30359,"code":171174,"language":30361,"meta":21,"style":21},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[96,171176,171177,171183,171197,171208],{"__ignoreMap":21},[99,171178,171179,171181],{"class":101,"line":102},[99,171180,170863],{"class":105},[99,171182,3725],{"class":109},[99,171184,171185,171187,171189,171191,171193,171195],{"class":101,"line":22},[99,171186,45574],{"class":109},[99,171188,155],{"class":105},[99,171190,2368],{"class":158},[99,171192,110],{"class":109},[99,171194,155861],{"class":214},[99,171196,116],{"class":109},[99,171198,171199,171201,171203,171205],{"class":101,"line":1165},[99,171200,170875],{"class":105},[99,171202,152207],{"class":158},[99,171204,64585],{"class":105},[99,171206,171207],{"class":109}," e:\n",[99,171209,171210,171212,171214,171216,171219,171221,171223,171225,171227],{"class":101,"line":1180},[99,171211,31280],{"class":158},[99,171213,110],{"class":109},[99,171215,162],{"class":105},[99,171217,171218],{"class":214},"\"出错了:",[99,171220,1006],{"class":158},[99,171222,184],{"class":109},[99,171224,1056],{"class":158},[99,171226,361],{"class":214},[99,171228,116],{"class":109},[14,171230,146438],{},[90,171232,171235],{"className":171233,"code":171234,"language":5174,"meta":21},[5172],"出错了:invalid literal for int() with base 10: 'abc'\n",[96,171236,171234],{"__ignoreMap":21},[41,171238,171240],{"id":171239},"_96-else和finally","9.6 else和finally",[14,171242,171243,171245],{},[96,171244,1687],{},"：没有异常时执行。",[14,171247,171248,171251],{},[96,171249,171250],{},"finally","：无论是否异常都会执行。",[90,171253,171255],{"className":30359,"code":171254,"language":30361,"meta":21,"style":21},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[96,171256,171257,171263,171281,171289,171299,171305,171326,171332],{"__ignoreMap":21},[99,171258,171259,171261],{"class":101,"line":102},[99,171260,170863],{"class":105},[99,171262,3725],{"class":109},[99,171264,171265,171267,171269,171271,171273,171275,171277,171279],{"class":101,"line":22},[99,171266,45574],{"class":109},[99,171268,155],{"class":105},[99,171270,2368],{"class":158},[99,171272,110],{"class":109},[99,171274,53802],{"class":158},[99,171276,110],{"class":109},[99,171278,155777],{"class":214},[99,171280,30478],{"class":109},[99,171282,171283,171285,171287],{"class":101,"line":1165},[99,171284,170875],{"class":105},[99,171286,152207],{"class":158},[99,171288,3725],{"class":109},[99,171290,171291,171293,171295,171297],{"class":101,"line":1180},[99,171292,31280],{"class":158},[99,171294,110],{"class":109},[99,171296,153195],{"class":214},[99,171298,116],{"class":109},[99,171300,171301,171303],{"class":101,"line":1186},[99,171302,1687],{"class":105},[99,171304,3725],{"class":109},[99,171306,171307,171309,171311,171313,171316,171318,171320,171322,171324],{"class":101,"line":1200},[99,171308,31280],{"class":158},[99,171310,110],{"class":109},[99,171312,162],{"class":105},[99,171314,171315],{"class":214},"\"输入正确:",[99,171317,1006],{"class":158},[99,171319,1651],{"class":109},[99,171321,1056],{"class":158},[99,171323,361],{"class":214},[99,171325,116],{"class":109},[99,171327,171328,171330],{"class":101,"line":1206},[99,171329,171250],{"class":105},[99,171331,3725],{"class":109},[99,171333,171334,171336,171338,171341],{"class":101,"line":1297},[99,171335,31280],{"class":158},[99,171337,110],{"class":109},[99,171339,171340],{"class":214},"\"程序结束\"",[99,171342,116],{"class":109},[14,171344,171345,171347],{},[96,171346,171250],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[41,171349,171351],{"id":171350},"_97-抛出异常","9.7 抛出异常",[14,171353,171354],{},"程序可以主动抛出异常。",[90,171356,171358],{"className":30359,"code":171357,"language":30361,"meta":21,"style":21},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[96,171359,171360,171369,171381,171394,171414,171418,171422],{"__ignoreMap":21},[99,171361,171362,171364,171367],{"class":101,"line":102},[99,171363,31928],{"class":105},[99,171365,171366],{"class":1949}," set_age",[99,171368,161396],{"class":109},[99,171370,171371,171373,171375,171377,171379],{"class":101,"line":22},[99,171372,3087],{"class":105},[99,171374,15694],{"class":109},[99,171376,1020],{"class":105},[99,171378,4079],{"class":158},[99,171380,3725],{"class":109},[99,171382,171383,171385,171387,171389,171392],{"class":101,"line":1165},[99,171384,103413],{"class":105},[99,171386,152207],{"class":158},[99,171388,110],{"class":109},[99,171390,171391],{"class":214},"\"年龄不能为负数\"",[99,171393,116],{"class":109},[99,171395,171396,171398,171400,171402,171404,171406,171408,171410,171412],{"class":101,"line":1180},[99,171397,31280],{"class":158},[99,171399,110],{"class":109},[99,171401,162],{"class":105},[99,171403,161964],{"class":214},[99,171405,1006],{"class":158},[99,171407,70202],{"class":109},[99,171409,1056],{"class":158},[99,171411,361],{"class":214},[99,171413,116],{"class":109},[99,171415,171416],{"class":101,"line":1186},[99,171417,2386],{"emptyLinePlaceholder":26},[99,171419,171420],{"class":101,"line":1200},[99,171421,2386],{"emptyLinePlaceholder":26},[99,171423,171424,171427,171429,171431],{"class":101,"line":1206},[99,171425,171426],{"class":109},"set_age(",[99,171428,642],{"class":105},[99,171430,327],{"class":158},[99,171432,116],{"class":109},[14,171434,171435],{},"调用者可以捕获：",[90,171437,171439],{"className":30359,"code":171438,"language":30361,"meta":21,"style":21},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[96,171440,171441,171447,171458,171468],{"__ignoreMap":21},[99,171442,171443,171445],{"class":101,"line":102},[99,171444,170863],{"class":105},[99,171446,3725],{"class":109},[99,171448,171449,171452,171454,171456],{"class":101,"line":22},[99,171450,171451],{"class":109},"    set_age(",[99,171453,642],{"class":105},[99,171455,327],{"class":158},[99,171457,116],{"class":109},[99,171459,171460,171462,171464,171466],{"class":101,"line":1165},[99,171461,170875],{"class":105},[99,171463,152207],{"class":158},[99,171465,64585],{"class":105},[99,171467,171207],{"class":109},[99,171469,171470,171472],{"class":101,"line":1180},[99,171471,31280],{"class":158},[99,171473,66980],{"class":109},[41,171475,171477],{"id":171476},"_98-自定义异常","9.8 自定义异常",[90,171479,171481],{"className":30359,"code":171480,"language":30361,"meta":21,"style":21},"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",[96,171482,171483,171497,171501,171505,171509,171517,171527,171538,171548,171552,171556,171562,171579,171590],{"__ignoreMap":21},[99,171484,171485,171487,171490,171492,171495],{"class":101,"line":102},[99,171486,14681],{"class":105},[99,171488,171489],{"class":1949}," BalanceNotEnoughError",[99,171491,110],{"class":109},[99,171493,171494],{"class":158},"Exception",[99,171496,30767],{"class":109},[99,171498,171499],{"class":101,"line":22},[99,171500,149518],{"class":105},[99,171502,171503],{"class":101,"line":1165},[99,171504,2386],{"emptyLinePlaceholder":26},[99,171506,171507],{"class":101,"line":1180},[99,171508,2386],{"emptyLinePlaceholder":26},[99,171510,171511,171513,171515],{"class":101,"line":1186},[99,171512,31928],{"class":105},[99,171514,150167],{"class":1949},[99,171516,162793],{"class":109},[99,171518,171519,171521,171523,171525],{"class":101,"line":1200},[99,171520,3087],{"class":105},[99,171522,150123],{"class":109},[99,171524,1070],{"class":105},[99,171526,162570],{"class":109},[99,171528,171529,171531,171534,171536],{"class":101,"line":1206},[99,171530,103413],{"class":105},[99,171532,171533],{"class":109}," BalanceNotEnoughError(",[99,171535,150218],{"class":214},[99,171537,116],{"class":109},[99,171539,171540,171542,171544,171546],{"class":101,"line":1297},[99,171541,4076],{"class":105},[99,171543,162800],{"class":109},[99,171545,642],{"class":105},[99,171547,150156],{"class":109},[99,171549,171550],{"class":101,"line":1303},[99,171551,2386],{"emptyLinePlaceholder":26},[99,171553,171554],{"class":101,"line":1315},[99,171555,2386],{"emptyLinePlaceholder":26},[99,171557,171558,171560],{"class":101,"line":1598},[99,171559,170863],{"class":105},[99,171561,3725],{"class":109},[99,171563,171564,171566,171568,171571,171573,171575,171577],{"class":101,"line":1603},[99,171565,162471],{"class":109},[99,171567,155],{"class":105},[99,171569,171570],{"class":109}," withdraw(",[99,171572,421],{"class":158},[99,171574,12422],{"class":109},[99,171576,1708],{"class":158},[99,171578,116],{"class":109},[99,171580,171581,171583,171586,171588],{"class":101,"line":1609},[99,171582,170875],{"class":105},[99,171584,171585],{"class":109}," BalanceNotEnoughError ",[99,171587,31364],{"class":105},[99,171589,171207],{"class":109},[99,171591,171592,171594],{"class":101,"line":1614},[99,171593,31280],{"class":158},[99,171595,66980],{"class":109},[14,171597,171598],{},"入门阶段大多数情况使用内置异常即可。",[41,171600,171602],{"id":171601},"_99-traceback","9.9 traceback",[14,171604,171605],{},"调试时可以输出完整异常堆栈。",[90,171607,171609],{"className":30359,"code":171608,"language":30361,"meta":21,"style":21},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[96,171610,171611,171618,171622,171628,171638,171646],{"__ignoreMap":21},[99,171612,171613,171615],{"class":101,"line":102},[99,171614,30373],{"class":105},[99,171616,171617],{"class":109}," traceback\n",[99,171619,171620],{"class":101,"line":22},[99,171621,2386],{"emptyLinePlaceholder":26},[99,171623,171624,171626],{"class":101,"line":1165},[99,171625,170863],{"class":105},[99,171627,3725],{"class":109},[99,171629,171630,171632,171634,171636],{"class":101,"line":1180},[99,171631,1971],{"class":158},[99,171633,110],{"class":109},[99,171635,155861],{"class":214},[99,171637,116],{"class":109},[99,171639,171640,171642,171644],{"class":101,"line":1186},[99,171641,170875],{"class":105},[99,171643,152207],{"class":158},[99,171645,3725],{"class":109},[99,171647,171648],{"class":101,"line":1200},[99,171649,171650],{"class":109},"    traceback.print_exc()\n",[14,171652,171653],{},"日志系统中常把异常堆栈记录到文件。",[41,171655,171657],{"id":171656},"_910-什么是模块","9.10 什么是模块",[14,171659,171660,171661,125964],{},"模块就是一个 ",[96,171662,146333],{},[14,171664,171665,171666,24607],{},"例如创建 ",[96,171667,171668],{},"my_math.py",[90,171670,171672],{"className":30359,"code":171671,"language":30361,"meta":21,"style":21},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[96,171673,171674,171682,171692,171696,171700,171709],{"__ignoreMap":21},[99,171675,171676,171678,171680],{"class":101,"line":102},[99,171677,31928],{"class":105},[99,171679,5196],{"class":1949},[99,171681,151074],{"class":109},[99,171683,171684,171686,171688,171690],{"class":101,"line":22},[99,171685,4076],{"class":105},[99,171687,10856],{"class":109},[99,171689,591],{"class":105},[99,171691,151085],{"class":109},[99,171693,171694],{"class":101,"line":1165},[99,171695,2386],{"emptyLinePlaceholder":26},[99,171697,171698],{"class":101,"line":1180},[99,171699,2386],{"emptyLinePlaceholder":26},[99,171701,171702,171704,171707],{"class":101,"line":1186},[99,171703,31928],{"class":105},[99,171705,171706],{"class":1949}," sub",[99,171708,151074],{"class":109},[99,171710,171711,171713,171715,171717],{"class":101,"line":1200},[99,171712,4076],{"class":105},[99,171714,10856],{"class":109},[99,171716,642],{"class":105},[99,171718,151085],{"class":109},[14,171720,171721],{},"在另一个文件中导入：",[90,171723,171725],{"className":30359,"code":171724,"language":30361,"meta":21,"style":21},"import my_math\n\nprint(my_math.add(1, 2))\n",[96,171726,171727,171734,171738],{"__ignoreMap":21},[99,171728,171729,171731],{"class":101,"line":102},[99,171730,30373],{"class":105},[99,171732,171733],{"class":109}," my_math\n",[99,171735,171736],{"class":101,"line":22},[99,171737,2386],{"emptyLinePlaceholder":26},[99,171739,171740,171742,171745,171747,171749,171751],{"class":101,"line":1165},[99,171741,30396],{"class":158},[99,171743,171744],{"class":109},"(my_math.add(",[99,171746,327],{"class":158},[99,171748,12422],{"class":109},[99,171750,187],{"class":158},[99,171752,30478],{"class":109},[41,171754,171756],{"id":171755},"_911-import导入","9.11 import导入",[70,171758,171760],{"id":171759},"_9111-导入模块","9.11.1 导入模块",[90,171762,171764],{"className":30359,"code":171763,"language":30361,"meta":21,"style":21},"import random\n\nprint(random.randint(1, 10))\n",[96,171765,171766,171772,171776],{"__ignoreMap":21},[99,171767,171768,171770],{"class":101,"line":102},[99,171769,30373],{"class":105},[99,171771,45309],{"class":109},[99,171773,171774],{"class":101,"line":22},[99,171775,2386],{"emptyLinePlaceholder":26},[99,171777,171778,171780,171783,171785,171787,171789],{"class":101,"line":1165},[99,171779,30396],{"class":158},[99,171781,171782],{"class":109},"(random.randint(",[99,171784,327],{"class":158},[99,171786,12422],{"class":109},[99,171788,556],{"class":158},[99,171790,30478],{"class":109},[70,171792,171794],{"id":171793},"_9112-导入指定内容","9.11.2 导入指定内容",[90,171796,171798],{"className":30359,"code":171797,"language":30361,"meta":21,"style":21},"from random import randint\n\nprint(randint(1, 10))\n",[96,171799,171800,171811,171815],{"__ignoreMap":21},[99,171801,171802,171804,171806,171808],{"class":101,"line":102},[99,171803,30718],{"class":105},[99,171805,57777],{"class":109},[99,171807,30373],{"class":105},[99,171809,171810],{"class":109}," randint\n",[99,171812,171813],{"class":101,"line":22},[99,171814,2386],{"emptyLinePlaceholder":26},[99,171816,171817,171819,171822,171824,171826,171828],{"class":101,"line":1165},[99,171818,30396],{"class":158},[99,171820,171821],{"class":109},"(randint(",[99,171823,327],{"class":158},[99,171825,12422],{"class":109},[99,171827,556],{"class":158},[99,171829,30478],{"class":109},[70,171831,171833],{"id":171832},"_9113-起别名","9.11.3 起别名",[90,171835,171837],{"className":30359,"code":171836,"language":30361,"meta":21,"style":21},"import random as rd\n\nprint(rd.randint(1, 10))\n",[96,171838,171839,171850,171854],{"__ignoreMap":21},[99,171840,171841,171843,171845,171847],{"class":101,"line":102},[99,171842,30373],{"class":105},[99,171844,57777],{"class":109},[99,171846,31364],{"class":105},[99,171848,171849],{"class":109}," rd\n",[99,171851,171852],{"class":101,"line":22},[99,171853,2386],{"emptyLinePlaceholder":26},[99,171855,171856,171858,171861,171863,171865,171867],{"class":101,"line":1165},[99,171857,30396],{"class":158},[99,171859,171860],{"class":109},"(rd.randint(",[99,171862,327],{"class":158},[99,171864,12422],{"class":109},[99,171866,556],{"class":158},[99,171868,30478],{"class":109},[90,171870,171872],{"className":30359,"code":171871,"language":30361,"meta":21,"style":21},"from random import randint as rint\n\nprint(rint(1, 10))\n",[96,171873,171874,171890,171894],{"__ignoreMap":21},[99,171875,171876,171878,171880,171882,171885,171887],{"class":101,"line":102},[99,171877,30718],{"class":105},[99,171879,57777],{"class":109},[99,171881,30373],{"class":105},[99,171883,171884],{"class":109}," randint ",[99,171886,31364],{"class":105},[99,171888,171889],{"class":109}," rint\n",[99,171891,171892],{"class":101,"line":22},[99,171893,2386],{"emptyLinePlaceholder":26},[99,171895,171896,171898,171901,171903,171905,171907],{"class":101,"line":1165},[99,171897,30396],{"class":158},[99,171899,171900],{"class":109},"(rint(",[99,171902,327],{"class":158},[99,171904,12422],{"class":109},[99,171906,556],{"class":158},[99,171908,30478],{"class":109},[70,171910,171912],{"id":171911},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[90,171914,171916],{"className":30359,"code":171915,"language":30361,"meta":21,"style":21},"from random import *\n",[96,171917,171918],{"__ignoreMap":21},[99,171919,171920,171922,171924,171926],{"class":101,"line":102},[99,171921,30718],{"class":105},[99,171923,57777],{"class":109},[99,171925,30373],{"class":105},[99,171927,171928],{"class":105}," *\n",[14,171930,171931],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[41,171933,171935],{"id":171934},"_912-常用内置模块","9.12 常用内置模块",[70,171937,171939],{"id":171938},"_9121-random","9.12.1 random",[90,171941,171943],{"className":30359,"code":171942,"language":30361,"meta":21,"style":21},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[96,171944,171945,171951,171955,171969,171988],{"__ignoreMap":21},[99,171946,171947,171949],{"class":101,"line":102},[99,171948,30373],{"class":105},[99,171950,45309],{"class":109},[99,171952,171953],{"class":101,"line":22},[99,171954,2386],{"emptyLinePlaceholder":26},[99,171956,171957,171959,171961,171963,171965,171967],{"class":101,"line":1165},[99,171958,30396],{"class":158},[99,171960,171782],{"class":109},[99,171962,327],{"class":158},[99,171964,12422],{"class":109},[99,171966,556],{"class":158},[99,171968,30478],{"class":109},[99,171970,171971,171973,171976,171978,171980,171982,171984,171986],{"class":101,"line":1180},[99,171972,30396],{"class":158},[99,171974,171975],{"class":109},"(random.choice([",[99,171977,149869],{"class":214},[99,171979,12422],{"class":109},[99,171981,150917],{"class":214},[99,171983,12422],{"class":109},[99,171985,159712],{"class":214},[99,171987,33124],{"class":109},[99,171989,171990,171992,171995,171997,171999,172001,172003,172005,172007,172009,172011,172013,172015,172017],{"class":101,"line":1186},[99,171991,30396],{"class":158},[99,171993,171994],{"class":109},"(random.sample([",[99,171996,327],{"class":158},[99,171998,12422],{"class":109},[99,172000,187],{"class":158},[99,172002,12422],{"class":109},[99,172004,181],{"class":158},[99,172006,12422],{"class":109},[99,172008,403],{"class":158},[99,172010,12422],{"class":109},[99,172012,429],{"class":158},[99,172014,112183],{"class":109},[99,172016,187],{"class":158},[99,172018,30478],{"class":109},[70,172020,172022],{"id":172021},"_9122-time","9.12.2 time",[90,172024,172026],{"className":30359,"code":172025,"language":30361,"meta":21,"style":21},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[96,172027,172028,172034,172038,172045,172053],{"__ignoreMap":21},[99,172029,172030,172032],{"class":101,"line":102},[99,172031,30373],{"class":105},[99,172033,31810],{"class":109},[99,172035,172036],{"class":101,"line":22},[99,172037,2386],{"emptyLinePlaceholder":26},[99,172039,172040,172042],{"class":101,"line":1165},[99,172041,30396],{"class":158},[99,172043,172044],{"class":109},"(time.time())\n",[99,172046,172047,172049,172051],{"class":101,"line":1180},[99,172048,95052],{"class":109},[99,172050,327],{"class":158},[99,172052,116],{"class":109},[99,172054,172055,172057,172059,172062],{"class":101,"line":1186},[99,172056,30396],{"class":158},[99,172058,110],{"class":109},[99,172060,172061],{"class":214},"\"1秒后执行\"",[99,172063,116],{"class":109},[70,172065,172067],{"id":172066},"_9123-datetime","9.12.3 datetime",[90,172069,172071],{"className":30359,"code":172070,"language":30361,"meta":21,"style":21},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[96,172072,172073,172085,172089,172099,172106],{"__ignoreMap":21},[99,172074,172075,172077,172080,172082],{"class":101,"line":102},[99,172076,30718],{"class":105},[99,172078,172079],{"class":109}," datetime ",[99,172081,30373],{"class":105},[99,172083,172084],{"class":109}," datetime\n",[99,172086,172087],{"class":101,"line":22},[99,172088,2386],{"emptyLinePlaceholder":26},[99,172090,172091,172094,172096],{"class":101,"line":1165},[99,172092,172093],{"class":109},"now ",[99,172095,155],{"class":105},[99,172097,172098],{"class":109}," datetime.now()\n",[99,172100,172101,172103],{"class":101,"line":1180},[99,172102,30396],{"class":158},[99,172104,172105],{"class":109},"(now)\n",[99,172107,172108,172110,172113,172116,172118,172121],{"class":101,"line":1186},[99,172109,30396],{"class":158},[99,172111,172112],{"class":109},"(now.strftime(",[99,172114,172115],{"class":214},"\"%Y-%m-",[99,172117,156672],{"class":158},[99,172119,172120],{"class":214}," %H:%M:%S\"",[99,172122,30478],{"class":109},[70,172124,172126],{"id":172125},"_9124-os","9.12.4 os",[90,172128,172130],{"className":30359,"code":172129,"language":30361,"meta":21,"style":21},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[96,172131,172132,172138,172142,172149],{"__ignoreMap":21},[99,172133,172134,172136],{"class":101,"line":102},[99,172135,30373],{"class":105},[99,172137,45286],{"class":109},[99,172139,172140],{"class":101,"line":22},[99,172141,2386],{"emptyLinePlaceholder":26},[99,172143,172144,172146],{"class":101,"line":1165},[99,172145,30396],{"class":158},[99,172147,172148],{"class":109},"(os.getcwd())\n",[99,172150,172151,172153,172156,172159],{"class":101,"line":1180},[99,172152,30396],{"class":158},[99,172154,172155],{"class":109},"(os.listdir(",[99,172157,172158],{"class":214},"\".\"",[99,172160,30478],{"class":109},[70,172162,172164],{"id":172163},"_9125-sys","9.12.5 sys",[90,172166,172168],{"className":30359,"code":172167,"language":30361,"meta":21,"style":21},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[96,172169,172170,172177,172181,172188],{"__ignoreMap":21},[99,172171,172172,172174],{"class":101,"line":102},[99,172173,30373],{"class":105},[99,172175,172176],{"class":109}," sys\n",[99,172178,172179],{"class":101,"line":22},[99,172180,2386],{"emptyLinePlaceholder":26},[99,172182,172183,172185],{"class":101,"line":1165},[99,172184,30396],{"class":158},[99,172186,172187],{"class":109},"(sys.version)\n",[99,172189,172190,172192],{"class":101,"line":1180},[99,172191,30396],{"class":158},[99,172193,172194],{"class":109},"(sys.path)\n",[41,172196,172198,172199,172201,172202,361],{"id":172197},"_913-if-name-main","9.13 if ",[259,172200,79791],{}," == \"",[259,172203,102039],{},[14,172205,172206,172207,172210],{},"模块被直接运行和被导入时，",[96,172208,172209],{},"__name__"," 的值不同。",[14,172212,172213,172214,24607],{},"创建 ",[96,172215,172216],{},"my_module.py",[90,172218,172220],{"className":30359,"code":172219,"language":30361,"meta":21,"style":21},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[96,172221,172222,172230,172240,172244,172248,172260],{"__ignoreMap":21},[99,172223,172224,172226,172228],{"class":101,"line":102},[99,172225,31928],{"class":105},[99,172227,5196],{"class":1949},[99,172229,151074],{"class":109},[99,172231,172232,172234,172236,172238],{"class":101,"line":22},[99,172233,4076],{"class":105},[99,172235,10856],{"class":109},[99,172237,591],{"class":105},[99,172239,151085],{"class":109},[99,172241,172242],{"class":101,"line":1165},[99,172243,2386],{"emptyLinePlaceholder":26},[99,172245,172246],{"class":101,"line":1180},[99,172247,2386],{"emptyLinePlaceholder":26},[99,172249,172250,172252,172254,172256,172258],{"class":101,"line":1186},[99,172251,1517],{"class":105},[99,172253,31201],{"class":158},[99,172255,101540],{"class":105},[99,172257,101543],{"class":214},[99,172259,3725],{"class":109},[99,172261,172262,172264,172266,172268,172270,172272],{"class":101,"line":1200},[99,172263,31280],{"class":158},[99,172265,166581],{"class":109},[99,172267,327],{"class":158},[99,172269,12422],{"class":109},[99,172271,187],{"class":158},[99,172273,30478],{"class":109},[14,172275,172276],{},"作用：",[53,172278,172279,172282],{},[56,172280,172281],{},"直接运行该文件时，执行测试代码。",[56,172283,172284],{},"被其他文件导入时，不执行测试代码。",[14,172286,172287],{},"这是写模块时很常用的习惯。",[41,172289,172291],{"id":172290},"_914-包","9.14 包",[14,172293,172294,172295,172298],{},"包是包含 ",[96,172296,172297],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172300,172301],{},"目录结构：",[90,172303,172306],{"className":172304,"code":172305,"language":5174,"meta":21},[5172],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[96,172307,172305],{"__ignoreMap":21},[14,172309,172310],{},"导入：",[90,172312,172314],{"className":30359,"code":172313,"language":30361,"meta":21,"style":21},"from utils.file_utils import read_file\n",[96,172315,172316],{"__ignoreMap":21},[99,172317,172318,172320,172323,172325],{"class":101,"line":102},[99,172319,30718],{"class":105},[99,172321,172322],{"class":109}," utils.file_utils ",[99,172324,30373],{"class":105},[99,172326,172327],{"class":109}," read_file\n",[14,172329,172330,172332],{},[96,172331,172297],{}," 可以为空，也可以写包初始化逻辑。",[41,172334,172336],{"id":172335},"_915-第三方包","9.15 第三方包",[14,172338,172339,172340,172342],{},"第三方包通过 ",[96,172341,23819],{}," 安装。",[90,172344,172346],{"className":23810,"code":172345,"language":23812,"meta":21,"style":21},"pip install requests\n",[96,172347,172348],{"__ignoreMap":21},[99,172349,172350,172352,172354],{"class":101,"line":102},[99,172351,23819],{"class":1949},[99,172353,23822],{"class":214},[99,172355,146079],{"class":214},[14,172357,172358],{},"使用：",[90,172360,172362],{"className":30359,"code":172361,"language":30361,"meta":21,"style":21},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[96,172363,172364,172370,172374,172389],{"__ignoreMap":21},[99,172365,172366,172368],{"class":101,"line":102},[99,172367,30373],{"class":105},[99,172369,146079],{"class":109},[99,172371,172372],{"class":101,"line":22},[99,172373,2386],{"emptyLinePlaceholder":26},[99,172375,172376,172379,172381,172384,172387],{"class":101,"line":1165},[99,172377,172378],{"class":109},"response ",[99,172380,155],{"class":105},[99,172382,172383],{"class":109}," requests.get(",[99,172385,172386],{"class":214},"\"https:\u002F\u002Fwww.example.com\"",[99,172388,116],{"class":109},[99,172390,172391,172393],{"class":101,"line":1180},[99,172392,30396],{"class":158},[99,172394,172395],{"class":109},"(response.status_code)\n",[14,172397,172398],{},"查看已安装包：",[90,172400,172402],{"className":23810,"code":172401,"language":23812,"meta":21,"style":21},"pip list\n",[96,172403,172404],{"__ignoreMap":21},[99,172405,172406,172408],{"class":101,"line":102},[99,172407,23819],{"class":1949},[99,172409,118936],{"class":214},[14,172411,172412],{},"导出项目依赖：",[90,172414,172415],{"className":23810,"code":146274,"language":23812,"meta":21,"style":21},[96,172416,172417],{"__ignoreMap":21},[99,172418,172419,172421,172423,172425],{"class":101,"line":102},[99,172420,23819],{"class":1949},[99,172422,146283],{"class":214},[99,172424,26211],{"class":105},[99,172426,146288],{"class":214},[14,172428,172429],{},"安装项目依赖：",[90,172431,172432],{"className":23810,"code":146294,"language":23812,"meta":21,"style":21},[96,172433,172434],{"__ignoreMap":21},[99,172435,172436,172438,172440,172442],{"class":101,"line":102},[99,172437,23819],{"class":1949},[99,172439,23822],{"class":214},[99,172441,119620],{"class":158},[99,172443,146288],{"class":214},[41,172445,172447],{"id":172446},"_916-模块搜索路径","9.16 模块搜索路径",[14,172449,172450,172451,172454],{},"Python 导入模块时会在 ",[96,172452,172453],{},"sys.path"," 中查找。",[90,172456,172458],{"className":30359,"code":172457,"language":30361,"meta":21,"style":21},"import sys\n\nfor path in sys.path:\n    print(path)\n",[96,172459,172460,172466,172470,172482],{"__ignoreMap":21},[99,172461,172462,172464],{"class":101,"line":102},[99,172463,30373],{"class":105},[99,172465,172176],{"class":109},[99,172467,172468],{"class":101,"line":22},[99,172469,2386],{"emptyLinePlaceholder":26},[99,172471,172472,172474,172477,172479],{"class":101,"line":1165},[99,172473,3011],{"class":105},[99,172475,172476],{"class":109}," path ",[99,172478,26032],{"class":105},[99,172480,172481],{"class":109}," sys.path:\n",[99,172483,172484,172486],{"class":101,"line":1180},[99,172485,31280],{"class":158},[99,172487,169210],{"class":109},[14,172489,172490],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172492,157604],{},[90,172494,172497],{"className":172495,"code":172496,"language":5174,"meta":21},[5172],"random.py\njson.py\ntime.py\n",[96,172498,172496],{"__ignoreMap":21},[14,172500,172501],{},"这些文件名可能导致导入异常。",[41,172503,172505],{"id":172504},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172507,172301],{},[90,172509,172512],{"className":172510,"code":172511,"language":5174,"meta":21},[5172],"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",[96,172513,172511],{"__ignoreMap":21},[14,172515,172516,24607],{},[96,172517,172518],{},"utils\u002Ffile_utils.py",[90,172520,172522],{"className":30359,"code":172521,"language":30361,"meta":21,"style":21},"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",[96,172523,172524,172530,172540,172544,172548,172558,172568,172576,172582,172586,172613,172623,172627,172631,172641,172667],{"__ignoreMap":21},[99,172525,172526,172528],{"class":101,"line":102},[99,172527,30373],{"class":105},[99,172529,147072],{"class":109},[99,172531,172532,172534,172536,172538],{"class":101,"line":22},[99,172533,30718],{"class":105},[99,172535,108292],{"class":109},[99,172537,30373],{"class":105},[99,172539,108297],{"class":109},[99,172541,172542],{"class":101,"line":1165},[99,172543,2386],{"emptyLinePlaceholder":26},[99,172545,172546],{"class":101,"line":1180},[99,172547,2386],{"emptyLinePlaceholder":26},[99,172549,172550,172552,172555],{"class":101,"line":1186},[99,172551,31928],{"class":105},[99,172553,172554],{"class":1949}," read_json",[99,172556,172557],{"class":109},"(path):\n",[99,172559,172560,172563,172565],{"class":101,"line":1200},[99,172561,172562],{"class":109},"    path ",[99,172564,155],{"class":105},[99,172566,172567],{"class":109}," Path(path)\n",[99,172569,172570,172572,172574],{"class":101,"line":1206},[99,172571,3087],{"class":105},[99,172573,38911],{"class":105},[99,172575,169291],{"class":109},[99,172577,172578,172580],{"class":101,"line":1297},[99,172579,14739],{"class":105},[99,172581,51819],{"class":109},[99,172583,172584],{"class":101,"line":1303},[99,172585,2386],{"emptyLinePlaceholder":26},[99,172587,172588,172590,172592,172595,172597,172599,172601,172603,172605,172607,172609,172611],{"class":101,"line":1315},[99,172589,34159],{"class":105},[99,172591,146772],{"class":158},[99,172593,172594],{"class":109},"(path, ",[99,172596,146782],{"class":214},[99,172598,12422],{"class":109},[99,172600,146787],{"class":5203},[99,172602,155],{"class":105},[99,172604,146792],{"class":214},[99,172606,13701],{"class":109},[99,172608,31364],{"class":105},[99,172610,148134],{"class":5203},[99,172612,3725],{"class":109},[99,172614,172615,172617,172619,172621],{"class":101,"line":1598},[99,172616,14739],{"class":105},[99,172618,148145],{"class":109},[99,172620,45335],{"class":5203},[99,172622,116],{"class":109},[99,172624,172625],{"class":101,"line":1603},[99,172626,2386],{"emptyLinePlaceholder":26},[99,172628,172629],{"class":101,"line":1609},[99,172630,2386],{"emptyLinePlaceholder":26},[99,172632,172633,172635,172638],{"class":101,"line":1614},[99,172634,31928],{"class":105},[99,172636,172637],{"class":1949}," write_json",[99,172639,172640],{"class":109},"(path, data):\n",[99,172642,172643,172645,172647,172649,172651,172653,172655,172657,172659,172661,172663,172665],{"class":101,"line":1628},[99,172644,34159],{"class":105},[99,172646,146772],{"class":158},[99,172648,172594],{"class":109},[99,172650,151957],{"class":214},[99,172652,12422],{"class":109},[99,172654,146787],{"class":5203},[99,172656,155],{"class":105},[99,172658,146792],{"class":214},[99,172660,13701],{"class":109},[99,172662,31364],{"class":105},[99,172664,148134],{"class":5203},[99,172666,3725],{"class":109},[99,172668,172669,172672,172674,172676,172678,172680,172682,172684,172686,172688,172690],{"class":101,"line":1633},[99,172670,172671],{"class":109},"        json.dump(data, ",[99,172673,45335],{"class":5203},[99,172675,12422],{"class":109},[99,172677,147118],{"class":5203},[99,172679,155],{"class":105},[99,172681,33968],{"class":158},[99,172683,12422],{"class":109},[99,172685,151993],{"class":5203},[99,172687,155],{"class":105},[99,172689,187],{"class":158},[99,172691,116],{"class":109},[14,172693,172694,24607],{},[96,172695,154588],{},[90,172697,172699],{"className":30359,"code":172698,"language":30361,"meta":21,"style":21},"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",[96,172700,172701,172712,172716,172729,172749],{"__ignoreMap":21},[99,172702,172703,172705,172707,172709],{"class":101,"line":102},[99,172704,30718],{"class":105},[99,172706,172322],{"class":109},[99,172708,30373],{"class":105},[99,172710,172711],{"class":109}," read_json, write_json\n",[99,172713,172714],{"class":101,"line":22},[99,172715,2386],{"emptyLinePlaceholder":26},[99,172717,172718,172720,172722,172725,172727],{"class":101,"line":1165},[99,172719,159697],{"class":109},[99,172721,155],{"class":105},[99,172723,172724],{"class":109}," read_json(",[99,172726,151812],{"class":214},[99,172728,116],{"class":109},[99,172730,172731,172733,172735,172737,172739,172741,172743,172745,172747],{"class":101,"line":1180},[99,172732,170515],{"class":109},[99,172734,62660],{"class":214},[99,172736,51418],{"class":109},[99,172738,149869],{"class":214},[99,172740,12422],{"class":109},[99,172742,151453],{"class":214},[99,172744,51418],{"class":109},[99,172746,1099],{"class":158},[99,172748,165133],{"class":109},[99,172750,172751,172754,172756],{"class":101,"line":1186},[99,172752,172753],{"class":109},"write_json(",[99,172755,151812],{"class":214},[99,172757,172758],{"class":109},", students)\n",[41,172760,172762],{"id":172761},"_918-易错点","9.18 易错点",[53,172764,172765,172768,172773,172778,172781,172784],{},[56,172766,172767],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[56,172769,172770,172771,28366],{},"能指定异常类型就不要裸写 ",[96,172772,170875],{},[56,172774,172775,172777],{},[96,172776,171250],{}," 无论是否出错都会执行。",[56,172779,172780],{},"模块文件名不要和标准库重名。",[56,172782,172783],{},"导入自己写的模块时，要注意运行目录。",[56,172785,172786],{},"第三方包要安装到当前解释器或虚拟环境中。",[41,172788,172790],{"id":172789},"_919-本章练习","9.19 本章练习",[53,172792,172793,172796,172799,172805,172812],{},[56,172794,172795],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[56,172797,172798],{},"写函数读取文件，如果文件不存在则返回空字符串。",[56,172800,172213,172801,172804],{},[96,172802,172803],{},"math_utils.py","，实现加减乘除函数并导入使用。",[56,172806,172807,172808,172811],{},"创建一个 ",[96,172809,172810],{},"utils"," 包，把 JSON 读写函数放进去。",[56,172813,172814],{},"写一个程序，捕获除零异常和输入格式异常。",[5113,172816,172817],{},"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":21,"searchDepth":22,"depth":22,"links":172819},[172820,172821,172822,172823,172824,172825,172826,172827,172828,172829,172830,172836,172843,172845,172846,172847,172848,172849,172850],{"id":170672,"depth":22,"text":170673},{"id":170800,"depth":22,"text":170801},{"id":170849,"depth":22,"text":170850},{"id":170998,"depth":22,"text":170999},{"id":171170,"depth":22,"text":171171},{"id":171239,"depth":22,"text":171240},{"id":171350,"depth":22,"text":171351},{"id":171476,"depth":22,"text":171477},{"id":171601,"depth":22,"text":171602},{"id":171656,"depth":22,"text":171657},{"id":171755,"depth":22,"text":171756,"children":172831},[172832,172833,172834,172835],{"id":171759,"depth":1165,"text":171760},{"id":171793,"depth":1165,"text":171794},{"id":171832,"depth":1165,"text":171833},{"id":171911,"depth":1165,"text":171912},{"id":171934,"depth":22,"text":171935,"children":172837},[172838,172839,172840,172841,172842],{"id":171938,"depth":1165,"text":171939},{"id":172021,"depth":1165,"text":172022},{"id":172066,"depth":1165,"text":172067},{"id":172125,"depth":1165,"text":172126},{"id":172163,"depth":1165,"text":172164},{"id":172197,"depth":22,"text":172844},"9.13 if name == \"main\"",{"id":172290,"depth":22,"text":172291},{"id":172335,"depth":22,"text":172336},{"id":172446,"depth":22,"text":172447},{"id":172504,"depth":22,"text":172505},{"id":172761,"depth":22,"text":172762},{"id":172789,"depth":22,"text":172790},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170664,"description":23364},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172857,"title":172858,"body":172859,"description":173022,"extension":24,"meta":173023,"navigation":26,"path":173024,"seo":173025,"stem":173026,"__hash__":173027},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172860,"toc":173017},[172861,172864,172867,172870,172881,172883,172957,172960,172963,172966,172969,172972,172975,172978,172981,172984,172987],[10,172862,172858],{"id":172863},"python教程",[14,172865,172866],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172868,172869],{},"建议学习环境：",[53,172871,172872,172875,172878],{},[56,172873,172874],{},"Python 版本：Python 3.10 及以上。",[56,172876,172877],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[56,172879,172880],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[41,172882,117059],{"id":117059},[53,172884,172885,172891,172897,172903,172909,172915,172921,172927,172933,172939,172945,172951],{},[56,172886,172887],{},[348,172888,172890],{"href":172889},".\u002Fch1-Python","Python环境与第一个程序",[56,172892,172893],{},[348,172894,172896],{"href":172895},".\u002Fch2","基础语法、变量与字符串",[56,172898,172899],{},[348,172900,172902],{"href":172901},".\u002Fch3","判断语句",[56,172904,172905],{},[348,172906,172908],{"href":172907},".\u002Fch4","循环语句",[56,172910,172911],{},[348,172912,172914],{"href":172913},".\u002Fch5","函数基础",[56,172916,172917],{},[348,172918,172920],{"href":172919},".\u002Fch6","数据容器",[56,172922,172923],{},[348,172924,172926],{"href":172925},".\u002Fch7","函数进阶",[56,172928,172929],{},[348,172930,172932],{"href":172931},".\u002Fch8","文件操作",[56,172934,172935],{},[348,172936,172938],{"href":172937},".\u002Fch9","异常、模块与包",[56,172940,172941],{},[348,172942,172944],{"href":172943},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[56,172946,172947],{},[348,172948,172950],{"href":172949},".\u002Fch11","面向对象基础",[56,172952,172953],{},[348,172954,172956],{"href":172955},".\u002Fch12","综合案例与复习路线",[41,172958,172959],{"id":172959},"学习路线",[14,172961,172962],{},"第一阶段：能运行程序。",[14,172964,172965],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172967,172968],{},"第二阶段：能组织数据。",[14,172970,172971],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172973,172974],{},"第三阶段：能封装逻辑。",[14,172976,172977],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172979,172980],{},"第四阶段：能做小项目。",[14,172982,172983],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[41,172985,172986],{"id":172986},"参考资料",[53,172988,172989,172996,173003,173010],{},[56,172990,172991,172992],{},"黑马程序员 Python 入门教程推荐：",[348,172993,172994],{"href":172994,"rel":172995},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23853],[56,172997,172998,172999],{},"Python 官方中文教程：",[348,173000,173001],{"href":173001,"rel":173002},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23853],[56,173004,173005,173006],{},"Python 标准库文档：",[348,173007,173008],{"href":173008,"rel":173009},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23853],[56,173011,173012,173013],{},"pyecharts 文档：",[348,173014,173015],{"href":173015,"rel":173016},"https:\u002F\u002Fpyecharts.org\u002F",[23853],{"title":21,"searchDepth":22,"depth":22,"links":173018},[173019,173020,173021],{"id":117059,"depth":22,"text":117059},{"id":172959,"depth":22,"text":172959},{"id":172986,"depth":22,"text":172986},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23366},"\u002Fwiki\u002F2024-10-10-python",{"title":172858,"description":173022},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379006]